diff --git a/.claude/agents/activity-log-expert.md b/.claude/agents/activity-log-expert.md index dff5a28aa6..5bcb077e03 100644 --- a/.claude/agents/activity-log-expert.md +++ b/.claude/agents/activity-log-expert.md @@ -10,6 +10,7 @@ You are an expert product engineer specializing in PostHog's comprehensive activ Your expertise covers: **Core Architecture Knowledge:** + - ActivityLog model with UUID primary keys, scope constraints, and optimized indexing - ActivityScope enum with 72+ predefined scopes and ChangeAction types - Signal-based capture system using ModelActivityMixin and model_activity_signal @@ -17,12 +18,14 @@ Your expertise covers: - Change detection engine with field comparison logic and exclusion hierarchies **Frontend Integration:** + - React components (ActivityLog.tsx, ActivityLogRow.tsx) with PayGate integration - Kea-based state management in activityLogLogic.tsx - Activity describer system with 15+ specialized describers - API integration patterns and endpoint strategies **Implementation Patterns:** + - Mixin-based integration (recommended) vs manual signal dispatch - Field and signal exclusions for performance optimization - Batch operations using mute_selected_signals() context manager diff --git a/.prettierignore b/.prettierignore index 1173048052..796591e891 100644 --- a/.prettierignore +++ b/.prettierignore @@ -16,8 +16,12 @@ dist/ node_modules/ pnpm-lock.yaml posthog/templates/email/* +posthog/templates/**/*.html common/hogvm/typescript/src/stl/bytecode.ts common/hogvm/__tests__/__snapshots__/* rust/ livestream/ cli/target/ +cli/tests/_cases/**/* +frontend/src/products.tsx +frontend/src/layout.html \ No newline at end of file diff --git a/.prettierrc b/.prettierrc index f0db82f111..26e57b6142 100644 --- a/.prettierrc +++ b/.prettierrc @@ -3,5 +3,22 @@ "tabWidth": 4, "semi": false, "singleQuote": true, - "printWidth": 120 + "printWidth": 120, + "plugins": ["@trivago/prettier-plugin-sort-imports"], + "importOrder": [ + "~/styles$", + "\\.s?css$", + "\\.mocks?$", + "\\.spy$", + "", + "^@posthog.*$", + "^lib/(.*)$|^scenes/(.*)$", + "^~/(.*)$", + "^public/(.*)$", + "^products/(.*)$", + "^storybook/(.*)$", + "^\\.+/" + ], + "importOrderSeparation": true, + "importOrderSortSpecifiers": true } diff --git a/CLAUDE.md b/CLAUDE.md index 4835d3a699..6f139717b3 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -19,7 +19,7 @@ - Python: Use type hints, follow mypy strict rules - Frontend: TypeScript required, explicit return types -- Imports: Use simple-import-sort, avoid direct dayjs imports (use lib/dayjs) +- Imports: Use prettier-plugin-sort-imports (automatically runs on format), avoid direct dayjs imports (use lib/dayjs) - CSS: Use tailwind utility classes instead of inline styles - Error handling: Prefer explicit error handling with typed errors - Naming: Use descriptive names, camelCase for JS/TS, snake_case for Python diff --git a/cli/CHANGELOG.md b/cli/CHANGELOG.md index 8238974f45..e222b74176 100644 --- a/cli/CHANGELOG.md +++ b/cli/CHANGELOG.md @@ -1,11 +1,14 @@ # posthog-cli ## 0.4.2 + - fix url encoded sourcemaps ## 0.4.1 + - add remote url to release metadata ## 0.4.0 + - extract sourcemap url from source code - add process command to inject and upload sourcemaps diff --git a/common/esbuilder/utils.mjs b/common/esbuilder/utils.mjs index 2bab462d58..1efa79c102 100644 --- a/common/esbuilder/utils.mjs +++ b/common/esbuilder/utils.mjs @@ -1,5 +1,3 @@ -import fs from 'node:fs/promises' - import autoprefixer from 'autoprefixer' import chokidar from 'chokidar' import cors from 'cors' @@ -10,6 +8,7 @@ import { polyfillNode } from 'esbuild-plugin-polyfill-node' import { sassPlugin } from 'esbuild-sass-plugin' import express from 'express' import fse from 'fs-extra' +import fs from 'node:fs/promises' import * as path from 'path' import postcss from 'postcss' import postcssPresetEnv from 'postcss-preset-env' @@ -310,12 +309,12 @@ export async function buildOrWatch(config) { ? 'Building' : 'Rebuilding' : logOpts.success - ? buildCount === 1 - ? 'Built' - : 'Rebuilt' - : buildCount === 1 - ? 'Building failed' - : 'Rebuilding failed ' + ? buildCount === 1 + ? 'Built' + : 'Rebuilt' + : buildCount === 1 + ? 'Building failed' + : 'Rebuilding failed ' console.info(`${icon} ${name ? `"${name}": ` : ''}${message}${timingSuffix}`) } diff --git a/common/hogvm/typescript/src/execute.ts b/common/hogvm/typescript/src/execute.ts index bdb807b58e..d4f0a50549 100644 --- a/common/hogvm/typescript/src/execute.ts +++ b/common/hogvm/typescript/src/execute.ts @@ -93,7 +93,7 @@ export function exec(input: any[] | VMState | Bytecodes, options?: ExecOptions): if (!rootBytecode || rootBytecode.length === 0 || (rootBytecode[0] !== '_h' && rootBytecode[0] !== '_H')) { throw new HogVMException("Invalid HogQL bytecode, must start with '_H'") } - const version = rootBytecode[0] === '_H' ? rootBytecode[1] ?? 0 : 0 + const version = rootBytecode[0] === '_H' ? (rootBytecode[1] ?? 0) : 0 let temp: any let temp2: any @@ -125,7 +125,7 @@ export function exec(input: any[] | VMState | Bytecodes, options?: ExecOptions): const rootGlobals: Record = bytecodes.root?.globals && options?.globals ? { ...bytecodes.root.globals, ...options.globals } - : bytecodes.root?.globals ?? options?.globals ?? {} + : (bytecodes.root?.globals ?? options?.globals ?? {}) if (callStack.length === 0) { callStack.push({ diff --git a/common/hogvm/typescript/src/types.ts b/common/hogvm/typescript/src/types.ts index a68b86f3ea..b33e777ae4 100644 --- a/common/hogvm/typescript/src/types.ts +++ b/common/hogvm/typescript/src/types.ts @@ -73,7 +73,7 @@ export type Telemetry = [ /** Opcode */ string, /** Debug */ - string + string, ] export interface ExecResult { diff --git a/common/plugin_transpiler/build.mjs b/common/plugin_transpiler/build.mjs index e3c10e3d34..a587c1a336 100755 --- a/common/plugin_transpiler/build.mjs +++ b/common/plugin_transpiler/build.mjs @@ -1,6 +1,7 @@ #!/usr/bin/env node import * as path from 'path' import { fileURLToPath } from 'url' + import { buildInParallel } from '@posthog/esbuilder' export const __dirname = path.dirname(fileURLToPath(import.meta.url)) diff --git a/common/storybook/.storybook/app-context.ts b/common/storybook/.storybook/app-context.ts index 73ae320955..8ff1994d5b 100644 --- a/common/storybook/.storybook/app-context.ts +++ b/common/storybook/.storybook/app-context.ts @@ -1,4 +1,5 @@ -import { MOCK_DEFAULT_TEAM, MOCK_DEFAULT_PROJECT } from 'lib/api.mock' +import { MOCK_DEFAULT_PROJECT, MOCK_DEFAULT_TEAM } from 'lib/api.mock' + import { AppContext } from '~/types' export const getStorybookAppContext = (): AppContext => ({ diff --git a/common/storybook/.storybook/decorators/withFeatureFlags.tsx b/common/storybook/.storybook/decorators/withFeatureFlags.tsx index 910ec77ef9..a9f17e95d0 100644 --- a/common/storybook/.storybook/decorators/withFeatureFlags.tsx +++ b/common/storybook/.storybook/decorators/withFeatureFlags.tsx @@ -1,6 +1,7 @@ -import { setFeatureFlags } from '~/mocks/browser' import type { Decorator } from '@storybook/react' +import { setFeatureFlags } from '~/mocks/browser' + declare module '@storybook/types' { interface Parameters { featureFlags?: string[] diff --git a/common/storybook/.storybook/decorators/withKea/kea-story.tsx b/common/storybook/.storybook/decorators/withKea/kea-story.tsx index 11e146768f..23e3f81db4 100644 --- a/common/storybook/.storybook/decorators/withKea/kea-story.tsx +++ b/common/storybook/.storybook/decorators/withKea/kea-story.tsx @@ -1,14 +1,16 @@ import { createMemoryHistory } from 'history' -import { initKea } from '~/initKea' -import { router } from 'kea-router' import { getContext } from 'kea' +import { router } from 'kea-router' import { useEffect, useState } from 'react' -import { App } from 'scenes/App' + import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { worker } from '~/mocks/browser' +import { App } from 'scenes/App' +import { projectLogic } from 'scenes/projectLogic' import { teamLogic } from 'scenes/teamLogic' import { userLogic } from 'scenes/userLogic' -import { projectLogic } from 'scenes/projectLogic' + +import { initKea } from '~/initKea' +import { worker } from '~/mocks/browser' export function resetKeaStory(): void { worker.resetHandlers() diff --git a/common/storybook/.storybook/decorators/withKea/withKea.tsx b/common/storybook/.storybook/decorators/withKea/withKea.tsx index 8aaa44c70f..244e1d9763 100644 --- a/common/storybook/.storybook/decorators/withKea/withKea.tsx +++ b/common/storybook/.storybook/decorators/withKea/withKea.tsx @@ -1,4 +1,5 @@ import type { Decorator } from '@storybook/react' + import { useAvailableFeatures } from '~/mocks/features' import { KeaStory } from './kea-story' diff --git a/common/storybook/.storybook/decorators/withPageUrl.tsx b/common/storybook/.storybook/decorators/withPageUrl.tsx index 4501647b65..20f99a4358 100644 --- a/common/storybook/.storybook/decorators/withPageUrl.tsx +++ b/common/storybook/.storybook/decorators/withPageUrl.tsx @@ -1,6 +1,6 @@ -import { useEffect } from 'react' -import { router } from 'kea-router' import type { Decorator } from '@storybook/react' +import { router } from 'kea-router' +import { useEffect } from 'react' declare module '@storybook/types' { interface Parameters { diff --git a/common/storybook/.storybook/main.ts b/common/storybook/.storybook/main.ts index fd12d21195..ddf4896ecd 100644 --- a/common/storybook/.storybook/main.ts +++ b/common/storybook/.storybook/main.ts @@ -1,6 +1,7 @@ -import { createEntry } from '../webpack.config.js' import type { StorybookConfig } from '@storybook/types' +import { createEntry } from '../webpack.config.js' + const config: StorybookConfig = { stories: [ '../../../frontend/src/**/*.stories.@(js|jsx|ts|tsx|mdx)', diff --git a/common/storybook/.storybook/preview.tsx b/common/storybook/.storybook/preview.tsx index e5643e210f..2302e79f59 100644 --- a/common/storybook/.storybook/preview.tsx +++ b/common/storybook/.storybook/preview.tsx @@ -1,16 +1,20 @@ import '~/styles' + +import { Controls, Description, Primary, Stories, Subtitle, Title } from '@storybook/blocks' import type { Meta, Parameters, Preview } from '@storybook/react' -import { Title, Subtitle, Description, Primary, Controls, Stories } from '@storybook/blocks' -import { worker } from '~/mocks/browser' + +import { apiHostOrigin } from 'lib/utils/apiHost' + import { loadPostHogJS } from '~/loadPostHogJS' +import { worker } from '~/mocks/browser' +import { defaultMocks } from '~/mocks/handlers' + +import { getStorybookAppContext } from './app-context' +import { withFeatureFlags } from './decorators/withFeatureFlags' import { withKea } from './decorators/withKea' import { withMockDate } from './decorators/withMockDate' -import { defaultMocks } from '~/mocks/handlers' -import { withFeatureFlags } from './decorators/withFeatureFlags' -import { withTheme } from './decorators/withTheme' -import { apiHostOrigin } from 'lib/utils/apiHost' -import { getStorybookAppContext } from './app-context' import { withPageUrl } from './decorators/withPageUrl' +import { withTheme } from './decorators/withTheme' const setupMsw = (): void => { // Make sure the msw worker is started diff --git a/common/storybook/.storybook/test-runner.ts b/common/storybook/.storybook/test-runner.ts index bfcb86ba15..d51fa6293d 100644 --- a/common/storybook/.storybook/test-runner.ts +++ b/common/storybook/.storybook/test-runner.ts @@ -1,10 +1,11 @@ -import { toMatchImageSnapshot } from 'jest-image-snapshot' -import { getStoryContext, TestRunnerConfig, TestContext } from '@storybook/test-runner' -import type { Locator, Page, LocatorScreenshotOptions } from '@playwright/test' -import type { Mocks } from '~/mocks/utils' +import type { Locator, LocatorScreenshotOptions, Page } from '@playwright/test' import { StoryContext } from '@storybook/csf' +import { TestContext, TestRunnerConfig, getStoryContext } from '@storybook/test-runner' +import { toMatchImageSnapshot } from 'jest-image-snapshot' import path from 'path' +import type { Mocks } from '~/mocks/utils' + const DEFAULT_VIEWPORT = { width: 1280, height: 720 } // 'firefox' is technically supported too, but as of June 2023 it has memory usage issues that make is unusable diff --git a/common/storybook/webpack.config.js b/common/storybook/webpack.config.js index a901d31660..7f1d9fbf93 100644 --- a/common/storybook/webpack.config.js +++ b/common/storybook/webpack.config.js @@ -29,8 +29,8 @@ function createEntry(entry) { process.env.GENERATE_SOURCEMAP === 'false' ? false : process.env.NODE_ENV === 'production' - ? 'source-map' - : 'inline-source-map', + ? 'source-map' + : 'inline-source-map', entry: { [entry]: entry === 'main' || entry === 'cypress' ? './src/index.tsx' : null, }, @@ -43,8 +43,8 @@ function createEntry(entry) { publicPath: process.env.JS_URL ? `${process.env.JS_URL}${process.env.JS_URL.endsWith('/') ? '' : '/'}static/` : process.env.NODE_ENV === 'production' - ? '/static/' - : `http${process.env.LOCAL_HTTPS ? 's' : ''}://${webpackDevServerFrontendAddr}:8234/static/`, + ? '/static/' + : `http${process.env.LOCAL_HTTPS ? 's' : ''}://${webpackDevServerFrontendAddr}:8234/static/`, }, resolve: { extensions: ['.js', '.jsx', '.ts', '.tsx'], @@ -207,13 +207,13 @@ function createEntry(entry) { new HtmlWebpackHarddiskPlugin(), ] : entry === 'cypress' - ? [ - new HtmlWebpackHarddiskPlugin(), - new webpack.ProvidePlugin({ - process: 'process/browser', - }), - ] - : [] + ? [ + new HtmlWebpackHarddiskPlugin(), + new webpack.ProvidePlugin({ + process: 'process/browser', + }), + ] + : [] ), } } diff --git a/cypress/cypress.e2e.config.ts b/cypress/cypress.e2e.config.ts index 00c959f829..d55d50361b 100644 --- a/cypress/cypress.e2e.config.ts +++ b/cypress/cypress.e2e.config.ts @@ -1,10 +1,11 @@ -import { defineConfig } from 'cypress' -import { createClient } from 'redis' import * as webpackPreprocessor from '@cypress/webpack-preprocessor' -import { PNG } from 'pngjs' -import * as pixelmatch from 'pixelmatch' +import { defineConfig } from 'cypress' import * as fs from 'fs' import * as path from 'path' +import * as pixelmatch from 'pixelmatch' +import { PNG } from 'pngjs' +import { createClient } from 'redis' + import { createEntry } from '../common/storybook/webpack.config' const downloadDirectory = path.join(__dirname, '..', '..', 'downloads') diff --git a/cypress/support/e2e.ts b/cypress/support/e2e.ts index 7b347b7a30..7b6918da6d 100644 --- a/cypress/support/e2e.ts +++ b/cypress/support/e2e.ts @@ -1,9 +1,9 @@ -import 'givens/setup' -import './commands' import 'cypress-axe' +import 'givens/setup' import { urls } from 'scenes/urls' +import './commands' import { setupFeatureFlags } from './decide' try { diff --git a/cypress/support/index.ts b/cypress/support/index.ts index 539bf0f27f..d828aa75e9 100644 --- a/cypress/support/index.ts +++ b/cypress/support/index.ts @@ -1,5 +1,4 @@ /// - import { CaptureResult } from 'posthog-js' declare global { diff --git a/docs/FLOX_MULTI_INSTANCE_WORKFLOW.md b/docs/FLOX_MULTI_INSTANCE_WORKFLOW.md index 57ef93d813..4370fc9587 100644 --- a/docs/FLOX_MULTI_INSTANCE_WORKFLOW.md +++ b/docs/FLOX_MULTI_INSTANCE_WORKFLOW.md @@ -5,12 +5,12 @@ This guide explains how to create isolated PostHog development environments usin **Key Benefits:** - Work on multiple branches simultaneously with isolated environments -- Each worktree has its own Flox environment and Python dependencies +- Each worktree has its own Flox environment and Python dependencies - Quick switching between features, bug fixes, and PR reviews - Standard `bin/start` command works in each worktree > [!IMPORTANT] -**Important:** Only one PostHog instance (`bin/start`) can run at a time since they all use the same ports. The workflow focuses on quickly stopping one instance and starting another. +> **Important:** Only one PostHog instance (`bin/start`) can run at a time since they all use the same ports. The workflow focuses on quickly stopping one instance and starting another. ## Prerequisites @@ -206,14 +206,14 @@ phw list # Output: # All PostHog Worktrees: -# +# # Branch Path Location # ------ ---- -------- # haacked/improved-workflow /Users/username/dev/posthog/posthog other # haacked/analytics-dashboard /Users/username/.worktrees/posthog/haacked/... current # main /Users/username/.worktrees/posthog/main current # pr-5678-teammate /Users/username/.worktrees/posthog/pr-5678-... current -# +# # Legend: # current = in current worktree base (/Users/username/.worktrees/posthog) # other = in different location @@ -225,6 +225,7 @@ phw remove pr-5678-teammate ## Quick Reference ### Commands + ```bash phw create [base-branch] # Create new branch & worktree (defaults to master) phw checkout # Create worktree for existing branch @@ -253,7 +254,7 @@ phw list # List all worktrees ### The Magic Flow ```text -phw create branch → creates worktree → copies .envrc → cd to worktree → +phw create branch → creates worktree → copies .envrc → cd to worktree → direnv detects .envrc → activates Flox → runs uv sync → ready to code! ``` @@ -265,10 +266,11 @@ When you switch between worktrees while already in a Flox environment, you'll se ⚠️ About to activate Flox environment in worktree while already in environment for: /Users/username/dev/posthog/posthog -Continue with nested activation? (y/N): +Continue with nested activation? (y/N): ``` **Your options:** + - **Press Enter or 'n'** (recommended): Skips activation. Run `exit` first to cleanly switch environments - **Type 'y'**: Proceeds with nested activation (you'll need multiple `exit` commands later) - **Ctrl+C**: Cancels direnv entirely so you can run `exit` and retry @@ -412,4 +414,4 @@ After setup, you're ready to use commands like: - `phw create haacked/feature` (create from master) - `phw create haacked/feature my-branch` (create from my-branch) - `phw checkout my-branch` -- `phw pr 12345` \ No newline at end of file +- `phw pr 12345` diff --git a/docs/S3_QUERY_CACHE_SETUP.md b/docs/S3_QUERY_CACHE_SETUP.md index a3cadd2860..f9b780f00f 100644 --- a/docs/S3_QUERY_CACHE_SETUP.md +++ b/docs/S3_QUERY_CACHE_SETUP.md @@ -3,10 +3,12 @@ ## How It Works 1 **Object Tagging**: Each S3 object gets tags: - ``` - ttl_days=1 # Calculated TTL in days - team_id=123 # Team identifier - ``` + +``` +ttl_days=1 # Calculated TTL in days +team_id=123 # Team identifier +``` + 2 **Automatic Deletion**: S3 lifecycle rules delete objects matching tag criteria ## Required S3 Lifecycle Rules @@ -14,6 +16,7 @@ **Critical**: You must create lifecycle rules for every `ttl_days` value your app generates. ### AWS CLI Configuration + ```bash # Create rules for common TTL values: 1, 2, 7, 14, 30 days cat > lifecycle-config.json << EOF @@ -53,6 +56,7 @@ aws s3api put-bucket-lifecycle-configuration \ ``` ### Terraform Configuration + ```hcl resource "aws_s3_bucket_lifecycle_configuration" "query_cache" { bucket = aws_s3_bucket.query_cache.id @@ -75,4 +79,4 @@ resource "aws_s3_bucket_lifecycle_configuration" "query_cache" { } ``` -**Warning**: Objects with `ttl_days` values lacking lifecycle rules will never expire. \ No newline at end of file +**Warning**: Objects with `ttl_days` values lacking lifecycle rules will never expire. diff --git a/ee/frontend/mobile-replay/index.ts b/ee/frontend/mobile-replay/index.ts index 71d8597d8b..8d3fc6a958 100644 --- a/ee/frontend/mobile-replay/index.ts +++ b/ee/frontend/mobile-replay/index.ts @@ -1,7 +1,8 @@ -import { eventWithTime } from '@posthog/rrweb-types' import Ajv, { ErrorObject } from 'ajv' import posthog from 'posthog-js' +import { eventWithTime } from '@posthog/rrweb-types' + import { mobileEventWithTime } from './mobile.types' import mobileSchema from './schema/mobile/rr-mobile-schema.json' import webSchema from './schema/web/rr-web-schema.json' diff --git a/ee/frontend/mobile-replay/mobile.types.ts b/ee/frontend/mobile-replay/mobile.types.ts index 3e8a19c482..ab2961d507 100644 --- a/ee/frontend/mobile-replay/mobile.types.ts +++ b/ee/frontend/mobile-replay/mobile.types.ts @@ -1,5 +1,5 @@ // copied from rrweb-snapshot, not included in rrweb types -import { customEvent, EventType, IncrementalSource, removedNodeMutation } from '@posthog/rrweb-types' +import { EventType, IncrementalSource, customEvent, removedNodeMutation } from '@posthog/rrweb-types' export enum NodeType { Document = 0, diff --git a/ee/frontend/mobile-replay/transform.test.ts b/ee/frontend/mobile-replay/transform.test.ts index f786eb0de5..ff9b2591d9 100644 --- a/ee/frontend/mobile-replay/transform.test.ts +++ b/ee/frontend/mobile-replay/transform.test.ts @@ -1,5 +1,6 @@ import posthogEE from '@posthog/ee/exports' import { EventType } from '@posthog/rrweb-types' + import { ifEeDescribe } from 'lib/ee.test' import { PostHogEE } from '../../../frontend/@posthog/ee/types' diff --git a/ee/frontend/mobile-replay/transformer/screen-chrome.ts b/ee/frontend/mobile-replay/transformer/screen-chrome.ts index 778f59dd54..7ba8eb6312 100644 --- a/ee/frontend/mobile-replay/transformer/screen-chrome.ts +++ b/ee/frontend/mobile-replay/transformer/screen-chrome.ts @@ -1,18 +1,18 @@ import { - keyboardEvent, NodeType, + keyboardEvent, serializedNodeWithId, wireframeNavigationBar, wireframeStatusBar, } from '../mobile.types' import { isLight } from './colors' import { - _isPositiveInteger, BACKGROUND, KEYBOARD_ID, - makePlaceholderElement, NAVIGATION_BAR_ID, STATUS_BAR_ID, + _isPositiveInteger, + makePlaceholderElement, } from './transformers' import { ConversionContext, ConversionResult } from './types' import { asStyleString, makeStylesString } from './wireframeStyle' diff --git a/ee/frontend/mobile-replay/transformer/transformers.ts b/ee/frontend/mobile-replay/transformer/transformers.ts index 5ad2f61ff6..45f35996a8 100644 --- a/ee/frontend/mobile-replay/transformer/transformers.ts +++ b/ee/frontend/mobile-replay/transformer/transformers.ts @@ -1,29 +1,31 @@ +import posthog from 'posthog-js' + import { + EventType, + IncrementalSource, addedNodeMutation, customEvent, - EventType, fullSnapshotEvent, incrementalSnapshotEvent, - IncrementalSource, metaEvent, mutationData, removedNodeMutation, } from '@posthog/rrweb-types' + import { isObject } from 'lib/utils' -import posthog from 'posthog-js' import { PLACEHOLDER_SVG_DATA_IMAGE_URL } from 'scenes/session-recordings/player/rrweb' import { - attributes, - documentNode, - elementNode, fullSnapshotEvent as MobileFullSnapshotEvent, - keyboardEvent, - metaEvent as MobileMetaEvent, MobileIncrementalSnapshotEvent, + metaEvent as MobileMetaEvent, MobileNodeMutation, MobileNodeType, NodeType, + attributes, + documentNode, + elementNode, + keyboardEvent, serializedNodeWithId, textNode, wireframe, diff --git a/ee/hogai/PROMPTING_GUIDE.md b/ee/hogai/PROMPTING_GUIDE.md index e4a4188f79..2bc99a1b50 100644 --- a/ee/hogai/PROMPTING_GUIDE.md +++ b/ee/hogai/PROMPTING_GUIDE.md @@ -13,12 +13,13 @@ from ee.hogai.llm import MaxChatOpenAI llm = MaxChatOpenAI(user=user, team=team, model="gpt-4.1") # ❌ Wrong - missing PostHog context -llm = ChatOpenAI(model="gpt-4.1") +llm = ChatOpenAI(model="gpt-4.1") ``` `MaxChatOpenAI` automatically injects context into every prompt: + - Project name and timezone -- Organization name +- Organization name - User name and email - Current project datetime @@ -64,7 +65,7 @@ PostHog uses Mustache templating for dynamic content: # Conditional sections "{{#show_advanced}}Advanced options: {{{options}}}{{/show_advanced}}" -# Lists/iterations +# Lists/iterations "{{#events}}Event: {{{name}}}{{/events}}" ``` @@ -76,7 +77,7 @@ PostHog uses Mustache templating for dynamic content: # ✅ Good - specific and actionable """Generate a trends query that shows daily active users for the last 30 days, filtered to exclude internal users, displayed as a line chart.""" -# ❌ Bad - vague and ambiguous +# ❌ Bad - vague and ambiguous """Create a user trend analysis.""" ``` @@ -107,7 +108,7 @@ Question: What's the signup to purchase conversion rate? Output: {"kind":"FunnelsQuery","series":[{"event":"user signed up"},{"event":"purchase"}]} -### Example 2: With filters and breakdown +### Example 2: With filters and breakdown Question: Conversion rate by country for mobile users? Output: {"kind":"FunnelsQuery","series":[{"event":"user signed up","properties":[{"key":"$device_type","value":"Mobile"}]},{"event":"purchase"}],"breakdownFilter":{"breakdown":"$geoip_country_name"}} @@ -181,7 +182,7 @@ When you let an LLM call tools and use their results, you get an agent: TOOL_AGENT_PROMPT = """ You have access to these tools: 1. `search_events` - Find events matching patterns -2. `get_property_values` - Get possible values for properties +2. `get_property_values` - Get possible values for properties 3. `final_answer` - Provide the final query plan Before generating a query: diff --git a/ee/hogai/README.md b/ee/hogai/README.md index 216e49f65d..e2c3b5bad4 100644 --- a/ee/hogai/README.md +++ b/ee/hogai/README.md @@ -60,17 +60,17 @@ You'll need to set [env vars](https://posthog.slack.com/docs/TSS5W8YQZ/F08UU1LJF 4. Define tool metadata in `TOOL_DEFINITIONS` in `frontend/src/scenes/max/max-constants.tsx`: - ```tsx - export const TOOL_DEFINITIONS: ... = { - // ... existing tools ... - your_tool_name: { - name: 'Do something', - description: 'Do something to blah blah', - product: Scene.YourProduct, // or null for the rare global tool - flag: FEATURE_FLAGS.YOUR_FLAG, // optional indication that this is flagged - }, - } - ``` + ```tsx + export const TOOL_DEFINITIONS: ... = { + // ... existing tools ... + your_tool_name: { + name: 'Do something', + description: 'Do something to blah blah', + product: Scene.YourProduct, // or null for the rare global tool + flag: FEATURE_FLAGS.YOUR_FLAG, // optional indication that this is flagged + }, + } + ``` For an example, see `products/replay/backend/max_tools.py`, which defines the `search_session_recordings` tool, and `products/data_warehouse/backend/max_tools.py`, which defines the `generate_hogql_query` tool. diff --git a/frontend/@posthog/ee/types.ts b/frontend/@posthog/ee/types.ts index b36bf40e48..4b98ca36be 100644 --- a/frontend/@posthog/ee/types.ts +++ b/frontend/@posthog/ee/types.ts @@ -1,5 +1,4 @@ // NOTE: All exported items from the EE module _must_ be optionally defined to ensure we work well with FOSS - import { eventWithTime } from '@posthog/rrweb-types' export type PostHogEE = { diff --git a/frontend/@posthog/lemon-ui/build.mjs b/frontend/@posthog/lemon-ui/build.mjs index e6abfa4d70..a967d72c5e 100755 --- a/frontend/@posthog/lemon-ui/build.mjs +++ b/frontend/@posthog/lemon-ui/build.mjs @@ -1,9 +1,10 @@ #!/usr/bin/env node -import * as path from 'path' import * as fs from 'fs' -import { startDevServer, buildInParallel, printResponse } from '../../utils.mjs' +import * as path from 'path' import url from 'url' +import { buildInParallel, printResponse, startDevServer } from '../../utils.mjs' + export const __dirname = path.dirname(url.fileURLToPath(import.meta.url)) const { name, peerDependencies } = JSON.parse(fs.readFileSync(path.join(__dirname, 'package.json'))) diff --git a/frontend/bin/build-schema-json.mjs b/frontend/bin/build-schema-json.mjs index 29312ffe6c..d69b4f6d4e 100644 --- a/frontend/bin/build-schema-json.mjs +++ b/frontend/bin/build-schema-json.mjs @@ -1,7 +1,5 @@ #!/usr/bin/env node - // replaces ts-json-schema-generator -f tsconfig.json --path 'frontend/src/queries/schema.ts' --no-type-check > frontend/src/queries/schema.json - import fs from 'fs' import stableStringify from 'safe-stable-stringify' import tsj from 'ts-json-schema-generator' diff --git a/frontend/build-products.mjs b/frontend/build-products.mjs index 065692f644..e8d7c8ce11 100644 --- a/frontend/build-products.mjs +++ b/frontend/build-products.mjs @@ -1,5 +1,4 @@ // Build frontend/src/products.tsx from manifest.tsx files - import * as ps from 'child_process' import fse from 'fs-extra' import path from 'path' @@ -74,10 +73,10 @@ export function buildProductManifests() { node.name.text === 'treeItemsNew' ? treeItemsNew : node.name.text === 'treeItemsProducts' - ? treeItemsProducts - : node.name.text === 'treeItemsMetadata' - ? treeItemsMetadata - : treeItemsGames + ? treeItemsProducts + : node.name.text === 'treeItemsMetadata' + ? treeItemsMetadata + : treeItemsGames node.initializer.elements.forEach((el) => { if (!ts.isObjectLiteralExpression(el)) { return @@ -149,10 +148,10 @@ export function buildProductManifests() { kind === 'default' ? spec : kind === 'namespace' - ? spec - : spec.includes(' as ') - ? spec.split(' as ').pop() - : spec + ? spec + : spec.includes(' as ') + ? spec.split(' as ').pop() + : spec if (globalNames.has(localName)) { return } @@ -257,7 +256,6 @@ export function buildProductManifests() { const autogen = '/** This const is auto-generated, as is the whole file */' const productsTsx = ` /* eslint @typescript-eslint/explicit-module-boundary-types: 0 */ - /* eslint simple-import-sort/imports: 0 */ // Generated by build-products.mjs – DO NOT EDIT BY HAND. ${importLines} diff --git a/frontend/build.mjs b/frontend/build.mjs index fea4fc4bc3..2ff2cba766 100755 --- a/frontend/build.mjs +++ b/frontend/build.mjs @@ -1,4 +1,7 @@ #!/usr/bin/env node +import * as path from 'path' +import { fileURLToPath } from 'url' + import { buildInParallel, copyIndexHtml, @@ -7,8 +10,6 @@ import { isDev, startDevServer, } from '@posthog/esbuilder' -import * as path from 'path' -import { fileURLToPath } from 'url' export const __dirname = path.dirname(fileURLToPath(import.meta.url)) diff --git a/frontend/editor-update-tsd.mjs b/frontend/editor-update-tsd.mjs index e9eb71dcf0..c6477e1f0e 100644 --- a/frontend/editor-update-tsd.mjs +++ b/frontend/editor-update-tsd.mjs @@ -3,6 +3,7 @@ import path from 'path' import { fileURLToPath } from 'url' import { isDev } from './utils.mjs' + export const __dirname = path.dirname(fileURLToPath(import.meta.url)) export function writeSourceCodeEditorTypes() { diff --git a/frontend/jest.config.ts b/frontend/jest.config.ts index 51c2e881ab..92a59292cd 100644 --- a/frontend/jest.config.ts +++ b/frontend/jest.config.ts @@ -1,5 +1,5 @@ -import type { Config } from 'jest' import fs from 'fs' +import type { Config } from 'jest' process.env.TZ = process.env.TZ || 'UTC' diff --git a/frontend/jest.setup.ts b/frontend/jest.setup.ts index c5e4385538..85b25731b3 100644 --- a/frontend/jest.setup.ts +++ b/frontend/jest.setup.ts @@ -1,8 +1,7 @@ -import 'whatwg-fetch' -import 'jest-canvas-mock' - import { configure } from '@testing-library/react' +import 'jest-canvas-mock' import { TextDecoder, TextEncoder } from 'util' +import 'whatwg-fetch' // Jest/JSDom don't know about TextEncoder but the browsers we support do // https://github.com/jsdom/jsdom/issues/2524 diff --git a/frontend/jest.setupAfterEnv.ts b/frontend/jest.setupAfterEnv.ts index 89e205e8b1..01fffc389e 100644 --- a/frontend/jest.setupAfterEnv.ts +++ b/frontend/jest.setupAfterEnv.ts @@ -1,4 +1,3 @@ import * as React from 'react' -// whatever else you need in here global.React = React diff --git a/frontend/src/exporter/ExportedInsight/ExportedInsight.tsx b/frontend/src/exporter/ExportedInsight/ExportedInsight.tsx index 10f983a4a3..8faa4b90ba 100644 --- a/frontend/src/exporter/ExportedInsight/ExportedInsight.tsx +++ b/frontend/src/exporter/ExportedInsight/ExportedInsight.tsx @@ -2,6 +2,7 @@ import './ExportedInsight.scss' import clsx from 'clsx' import { BindLogic, useMountedLogic } from 'kea' + import { TopHeading } from 'lib/components/Cards/InsightCard/TopHeading' import { InsightLegend } from 'lib/components/InsightLegend/InsightLegend' import { @@ -13,9 +14,9 @@ import { dataThemeLogic } from 'scenes/dataThemeLogic' import { insightLogic } from 'scenes/insights/insightLogic' import { InsightsTable } from 'scenes/insights/views/InsightsTable/InsightsTable' -import { SharingConfigurationSettings } from '~/queries/schema/schema-general' -import { getQueryBasedInsightModel } from '~/queries/nodes/InsightViz/utils' import { Query } from '~/queries/Query/Query' +import { getQueryBasedInsightModel } from '~/queries/nodes/InsightViz/utils' +import { SharingConfigurationSettings } from '~/queries/schema/schema-general' import { isDataTableNode, isInsightVizNode, isTrendsQuery } from '~/queries/utils' import { Logo } from '~/toolbar/assets/Logo' import { ChartDisplayType, DataColorThemeModel, InsightLogicProps, InsightModel } from '~/types' diff --git a/frontend/src/exporter/Exporter.tsx b/frontend/src/exporter/Exporter.tsx index d6affd3bfc..38c8761027 100644 --- a/frontend/src/exporter/Exporter.tsx +++ b/frontend/src/exporter/Exporter.tsx @@ -1,19 +1,21 @@ import '~/styles' + import './Exporter.scss' import clsx from 'clsx' import { useValues } from 'kea' +import { useEffect } from 'react' + import { useResizeObserver } from 'lib/hooks/useResizeObserver' import { useThemedHtml } from 'lib/hooks/useThemedHtml' import { Link } from 'lib/lemon-ui/Link' -import { useEffect } from 'react' import { Dashboard } from 'scenes/dashboard/Dashboard' import { SessionRecordingPlayer } from 'scenes/session-recordings/player/SessionRecordingPlayer' import { SessionRecordingPlayerMode } from 'scenes/session-recordings/player/sessionRecordingPlayerLogic' import { teamLogic } from 'scenes/teamLogic' import { ExportedInsight } from '~/exporter/ExportedInsight/ExportedInsight' -import { ExportedData, ExportType } from '~/exporter/types' +import { ExportType, ExportedData } from '~/exporter/types' import { getQueryBasedDashboard } from '~/queries/nodes/InsightViz/utils' import { Logo } from '~/toolbar/assets/Logo' import { DashboardPlacement } from '~/types' diff --git a/frontend/src/exporter/index.tsx b/frontend/src/exporter/index.tsx index abd191a72c..ff64634b66 100644 --- a/frontend/src/exporter/index.tsx +++ b/frontend/src/exporter/index.tsx @@ -1,4 +1,5 @@ import '~/styles' + import './Exporter.scss' import { polyfillCountryFlagEmojis } from 'country-flag-emoji-polyfill' diff --git a/frontend/src/exporter/types.ts b/frontend/src/exporter/types.ts index 6248a06930..913470877e 100644 --- a/frontend/src/exporter/types.ts +++ b/frontend/src/exporter/types.ts @@ -1,7 +1,8 @@ -import { DashboardType, DataColorThemeModel, InsightModel, SessionRecordingType } from '~/types' -import { SharingConfigurationSettings } from '~/queries/schema/schema-general' import { SessionRecordingPlayerMode } from 'scenes/session-recordings/player/sessionRecordingPlayerLogic' +import { SharingConfigurationSettings } from '~/queries/schema/schema-general' +import { DashboardType, DataColorThemeModel, InsightModel, SessionRecordingType } from '~/types' + export enum ExportType { Image = 'image', Embed = 'embed', diff --git a/frontend/src/index.tsx b/frontend/src/index.tsx index 5554b27a7f..e4dcc83fbf 100644 --- a/frontend/src/index.tsx +++ b/frontend/src/index.tsx @@ -1,4 +1,3 @@ -import './buffer-polyfill' import '~/styles' import { polyfillCountryFlagEmojis } from 'country-flag-emoji-polyfill' @@ -6,8 +5,10 @@ import { getContext } from 'kea' import posthog from 'posthog-js' import { PostHogProvider } from 'posthog-js/react' import { createRoot } from 'react-dom/client' + import { App } from 'scenes/App' +import './buffer-polyfill' import { initKea } from './initKea' import { ErrorBoundary } from './layout/ErrorBoundary' import { loadPostHogJS } from './loadPostHogJS' diff --git a/frontend/src/initKea.ts b/frontend/src/initKea.ts index 2e682c0001..0099231e16 100644 --- a/frontend/src/initKea.ts +++ b/frontend/src/initKea.ts @@ -6,10 +6,11 @@ import { routerPlugin } from 'kea-router' import { subscriptionsPlugin } from 'kea-subscriptions' import { waitForPlugin } from 'kea-waitfor' import { windowValuesPlugin } from 'kea-window-values' +import posthog from 'posthog-js' + import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' import { identifierToHuman } from 'lib/utils' import { addProjectIdIfMissing, removeProjectIdIfPresent } from 'lib/utils/router-utils' -import posthog from 'posthog-js' import { sceneLogic } from 'scenes/sceneLogic' /* diff --git a/frontend/src/layout/ErrorBoundary/ErrorBoundary.tsx b/frontend/src/layout/ErrorBoundary/ErrorBoundary.tsx index 06a5fbc012..b57c19e507 100644 --- a/frontend/src/layout/ErrorBoundary/ErrorBoundary.tsx +++ b/frontend/src/layout/ErrorBoundary/ErrorBoundary.tsx @@ -2,9 +2,10 @@ import './ErrorBoundary.scss' import clsx from 'clsx' import { useActions, useValues } from 'kea' -import { supportLogic, SupportTicketExceptionEvent } from 'lib/components/Support/supportLogic' -import { LemonButton } from 'lib/lemon-ui/LemonButton' import { PostHogErrorBoundary, type PostHogErrorBoundaryFallbackProps } from 'posthog-js/react' + +import { SupportTicketExceptionEvent, supportLogic } from 'lib/components/Support/supportLogic' +import { LemonButton } from 'lib/lemon-ui/LemonButton' import { teamLogic } from 'scenes/teamLogic' interface ErrorBoundaryProps { diff --git a/frontend/src/layout/ErrorNetwork.tsx b/frontend/src/layout/ErrorNetwork.tsx index a415d1fc80..01473440a0 100644 --- a/frontend/src/layout/ErrorNetwork.tsx +++ b/frontend/src/layout/ErrorNetwork.tsx @@ -1,5 +1,5 @@ -import { IconRefresh } from 'lib/lemon-ui/icons' import { LemonButton } from 'lib/lemon-ui/LemonButton' +import { IconRefresh } from 'lib/lemon-ui/icons' export function ErrorNetwork(): JSX.Element { return ( diff --git a/frontend/src/layout/ErrorProjectUnavailable.stories.tsx b/frontend/src/layout/ErrorProjectUnavailable.stories.tsx index 448c7e2461..3460adafcb 100644 --- a/frontend/src/layout/ErrorProjectUnavailable.stories.tsx +++ b/frontend/src/layout/ErrorProjectUnavailable.stories.tsx @@ -1,6 +1,7 @@ import { Meta } from '@storybook/react' import { useActions } from 'kea' import { useEffect } from 'react' + import { App } from 'scenes/App' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' diff --git a/frontend/src/layout/ErrorProjectUnavailable.tsx b/frontend/src/layout/ErrorProjectUnavailable.tsx index 1a0c34b989..61581f374c 100644 --- a/frontend/src/layout/ErrorProjectUnavailable.tsx +++ b/frontend/src/layout/ErrorProjectUnavailable.tsx @@ -1,13 +1,15 @@ -import { Link } from '@posthog/lemon-ui' import { useValues } from 'kea' import { useState } from 'react' + +import { Link } from '@posthog/lemon-ui' + +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { CreateOrganizationModal } from 'scenes/organization/CreateOrganizationModal' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' import { userLogic } from 'scenes/userLogic' import { organizationLogic } from '../scenes/organizationLogic' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' export function ErrorProjectUnavailable(): JSX.Element { const { projectCreationForbiddenReason } = useValues(organizationLogic) diff --git a/frontend/src/layout/FeaturePreviews/FeaturePreviews.stories.tsx b/frontend/src/layout/FeaturePreviews/FeaturePreviews.stories.tsx index 965b2d6205..6c4ca4a0ee 100644 --- a/frontend/src/layout/FeaturePreviews/FeaturePreviews.stories.tsx +++ b/frontend/src/layout/FeaturePreviews/FeaturePreviews.stories.tsx @@ -1,7 +1,8 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' -import { FeatureFlagKey } from 'lib/constants' import { EarlyAccessFeature } from 'posthog-js' +import { FeatureFlagKey } from 'lib/constants' + import { setFeatureFlags, useStorybookMocks } from '~/mocks/browser' import { FeaturePreviews } from './FeaturePreviews' diff --git a/frontend/src/layout/FeaturePreviews/FeaturePreviews.tsx b/frontend/src/layout/FeaturePreviews/FeaturePreviews.tsx index 0a7fffdb1b..7e2a6a5ba6 100644 --- a/frontend/src/layout/FeaturePreviews/FeaturePreviews.tsx +++ b/frontend/src/layout/FeaturePreviews/FeaturePreviews.tsx @@ -1,14 +1,16 @@ -import { IconBell, IconCheck } from '@posthog/icons' -import { LemonBanner, LemonButton, LemonSwitch, LemonTextArea, Link } from '@posthog/lemon-ui' import { useActions, useAsyncActions, useValues } from 'kea' -import { IconLink } from 'lib/lemon-ui/icons' -import { SpinnerOverlay } from 'lib/lemon-ui/Spinner' import { useLayoutEffect, useState } from 'react' -import { EnrichedEarlyAccessFeature, featurePreviewsLogic } from './featurePreviewsLogic' +import { IconBell, IconCheck } from '@posthog/icons' +import { LemonBanner, LemonButton, LemonSwitch, LemonTextArea, Link } from '@posthog/lemon-ui' + import { BasicCard } from 'lib/components/Cards/BasicCard' +import { SpinnerOverlay } from 'lib/lemon-ui/Spinner' +import { IconLink } from 'lib/lemon-ui/icons' import { Label } from 'lib/ui/Label/Label' +import { EnrichedEarlyAccessFeature, featurePreviewsLogic } from './featurePreviewsLogic' + // Feature previews can be linked to by using hash in the url // example external link: https://app.posthog.com/settings/user-feature-previews#llm-observability diff --git a/frontend/src/layout/FeaturePreviews/featurePreviewsLogic.test.ts b/frontend/src/layout/FeaturePreviews/featurePreviewsLogic.test.ts index cdf51b3971..80b8631dbd 100644 --- a/frontend/src/layout/FeaturePreviews/featurePreviewsLogic.test.ts +++ b/frontend/src/layout/FeaturePreviews/featurePreviewsLogic.test.ts @@ -1,6 +1,8 @@ -import { expectLogic } from 'kea-test-utils' import { MOCK_DEFAULT_USER } from 'lib/api.mock' + +import { expectLogic } from 'kea-test-utils' import posthog from 'posthog-js' + import { userLogic } from 'scenes/userLogic' import { useMocks } from '~/mocks/jest' diff --git a/frontend/src/layout/FeaturePreviews/featurePreviewsLogic.tsx b/frontend/src/layout/FeaturePreviews/featurePreviewsLogic.tsx index eccb3f4fb9..349df36978 100644 --- a/frontend/src/layout/FeaturePreviews/featurePreviewsLogic.tsx +++ b/frontend/src/layout/FeaturePreviews/featurePreviewsLogic.tsx @@ -1,11 +1,11 @@ import { actions, connect, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' +import { EarlyAccessFeature, posthog } from 'posthog-js' import { supportLogic } from 'lib/components/Support/supportLogic' import { FeatureFlagKey } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { copyToClipboard } from 'lib/utils/copyToClipboard' -import { EarlyAccessFeature, posthog } from 'posthog-js' import { urls } from 'scenes/urls' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/layout/GlobalModals.tsx b/frontend/src/layout/GlobalModals.tsx index e85c8dbd57..df7b0e2710 100644 --- a/frontend/src/layout/GlobalModals.tsx +++ b/frontend/src/layout/GlobalModals.tsx @@ -1,4 +1,6 @@ import { actions, kea, path, reducers, useActions, useValues } from 'kea' +import { useEffect } from 'react' + import { ConfirmUpgradeModal } from 'lib/components/ConfirmUpgradeModal/ConfirmUpgradeModal' import { ItemSelectModal } from 'lib/components/FileSystem/ItemSelectModal/ItemSelectModal' import { MoveToModal } from 'lib/components/FileSystem/MoveTo/MoveTo' @@ -6,7 +8,6 @@ import { HedgehogBuddyWithLogic } from 'lib/components/HedgehogBuddy/HedgehogBud import { TimeSensitiveAuthenticationModal } from 'lib/components/TimeSensitiveAuthentication/TimeSensitiveAuthentication' import { GlobalCustomUnitModal } from 'lib/components/UnitPicker/GlobalCustomUnitModal' import { UpgradeModal } from 'lib/components/UpgradeModal/UpgradeModal' -import { useEffect } from 'react' import { TwoFactorSetupModal } from 'scenes/authentication/TwoFactorSetupModal' import { PaymentEntryModal } from 'scenes/billing/PaymentEntryModal' import { CreateOrganizationModal } from 'scenes/organization/CreateOrganizationModal' @@ -15,8 +16,8 @@ import { CreateProjectModal } from 'scenes/project/CreateProjectModal' import { SessionPlayerModal } from 'scenes/session-recordings/player/modal/SessionPlayerModal' import { EnvironmentRollbackModal } from 'scenes/settings/environment/EnvironmentRollbackModal' import { environmentRollbackModalLogic } from 'scenes/settings/environment/environmentRollbackModalLogic' -import { inviteLogic } from 'scenes/settings/organization/inviteLogic' import { InviteModal } from 'scenes/settings/organization/InviteModal' +import { inviteLogic } from 'scenes/settings/organization/inviteLogic' import { PreviewingCustomCssModal } from 'scenes/themes/PreviewingCustomCssModal' import type { globalModalsLogicType } from './GlobalModalsType' diff --git a/frontend/src/layout/navigation-3000/Navigation.stories.tsx b/frontend/src/layout/navigation-3000/Navigation.stories.tsx index 3f8df0d05f..58dd805f6a 100644 --- a/frontend/src/layout/navigation-3000/Navigation.stories.tsx +++ b/frontend/src/layout/navigation-3000/Navigation.stories.tsx @@ -1,4 +1,5 @@ import { Meta, StoryObj } from '@storybook/react' + import { App } from 'scenes/App' import { urls } from 'scenes/urls' diff --git a/frontend/src/layout/navigation-3000/Navigation.tsx b/frontend/src/layout/navigation-3000/Navigation.tsx index 33db85d88f..cc6bcce92f 100644 --- a/frontend/src/layout/navigation-3000/Navigation.tsx +++ b/frontend/src/layout/navigation-3000/Navigation.tsx @@ -1,26 +1,27 @@ import './Navigation.scss' import { useValues } from 'kea' +import { ReactNode, useRef } from 'react' + import { BillingAlertsV2 } from 'lib/components/BillingAlertsV2' import { CommandBar } from 'lib/components/CommandBar/CommandBar' -import { ReactNode, useRef } from 'react' +import { FlaggedFeature } from 'lib/components/FlaggedFeature' +import { FEATURE_FLAGS } from 'lib/constants' +import { featureFlagLogic } from 'lib/logic/featureFlagLogic' +import { cn } from 'lib/utils/css-classes' import { SceneConfig } from 'scenes/sceneTypes' import { PanelLayout } from '~/layout/panel-layout/PanelLayout' import { MaxFloatingInput } from '../../scenes/max/MaxFloatingInput' -import { navigationLogic } from '../navigation/navigationLogic' import { ProjectNotice } from '../navigation/ProjectNotice' +import { navigationLogic } from '../navigation/navigationLogic' +import { SceneLayout } from '../scenes/SceneLayout' import { MinimalNavigation } from './components/MinimalNavigation' import { TopBar } from './components/TopBar' import { navigation3000Logic } from './navigationLogic' import { SidePanel } from './sidepanel/SidePanel' import { themeLogic } from './themeLogic' -import { SceneLayout } from '../scenes/SceneLayout' -import { cn } from 'lib/utils/css-classes' -import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { FEATURE_FLAGS } from 'lib/constants' -import { FlaggedFeature } from 'lib/components/FlaggedFeature' export function Navigation({ children, diff --git a/frontend/src/layout/navigation-3000/components/AlgoliaSearch.tsx b/frontend/src/layout/navigation-3000/components/AlgoliaSearch.tsx index fa741b20cf..985faec677 100644 --- a/frontend/src/layout/navigation-3000/components/AlgoliaSearch.tsx +++ b/frontend/src/layout/navigation-3000/components/AlgoliaSearch.tsx @@ -1,13 +1,15 @@ -import { IconCheckCircle } from '@posthog/icons' -import { LemonButton, LemonInput, LemonTag } from '@posthog/lemon-ui' import algoliasearch from 'algoliasearch/lite' import { useActions } from 'kea' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { useEffect, useRef, useState } from 'react' import { InstantSearch, useHits, useRefinementList, useSearchBox } from 'react-instantsearch' import { AutoSizer } from 'react-virtualized/dist/es/AutoSizer' import { List } from 'react-virtualized/dist/es/List' +import { IconCheckCircle } from '@posthog/icons' +import { LemonButton, LemonInput, LemonTag } from '@posthog/lemon-ui' + +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' + import { sidePanelStateLogic } from '~/layout/navigation-3000/sidepanel/sidePanelStateLogic' import { SidePanelTab } from '~/types' diff --git a/frontend/src/layout/navigation-3000/components/KeyboardShortcut.stories.tsx b/frontend/src/layout/navigation-3000/components/KeyboardShortcut.stories.tsx index 57680b5dce..5ae47d0880 100644 --- a/frontend/src/layout/navigation-3000/components/KeyboardShortcut.stories.tsx +++ b/frontend/src/layout/navigation-3000/components/KeyboardShortcut.stories.tsx @@ -1,6 +1,7 @@ +import { Meta, StoryFn } from '@storybook/react' + import { IconInfo } from '@posthog/icons' import { Tooltip } from '@posthog/lemon-ui' -import { Meta, StoryFn } from '@storybook/react' import { KeyboardShortcut } from './KeyboardShortcut' diff --git a/frontend/src/layout/navigation-3000/components/KeyboardShortcut.tsx b/frontend/src/layout/navigation-3000/components/KeyboardShortcut.tsx index d0fefece2f..9e27520c44 100644 --- a/frontend/src/layout/navigation-3000/components/KeyboardShortcut.tsx +++ b/frontend/src/layout/navigation-3000/components/KeyboardShortcut.tsx @@ -1,6 +1,7 @@ import './KeyboardShortcut.scss' import clsx from 'clsx' + import { isMac, isMobile } from 'lib/utils' import { HotKeyOrModifier } from '~/types' diff --git a/frontend/src/layout/navigation-3000/components/MinimalNavigation.tsx b/frontend/src/layout/navigation-3000/components/MinimalNavigation.tsx index 8fbb0e3a11..18a0b1b8d5 100644 --- a/frontend/src/layout/navigation-3000/components/MinimalNavigation.tsx +++ b/frontend/src/layout/navigation-3000/components/MinimalNavigation.tsx @@ -1,12 +1,14 @@ +import { useActions, useValues } from 'kea' + import { IconLogomark } from '@posthog/icons' import { LemonButton, Popover, ProfilePicture } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { organizationLogic } from 'scenes/organizationLogic' import { urls } from 'scenes/urls' import { userLogic } from 'scenes/userLogic' -import { navigationLogic } from '~/layout/navigation/navigationLogic' import { AccountPopoverOverlay } from '~/layout/navigation/TopBar/AccountPopover' +import { navigationLogic } from '~/layout/navigation/navigationLogic' import { ProjectDropdownMenu } from '~/layout/panel-layout/ProjectDropdownMenu' export function MinimalNavigation(): JSX.Element { diff --git a/frontend/src/layout/navigation-3000/components/TopBar.tsx b/frontend/src/layout/navigation-3000/components/TopBar.tsx index d1e9117061..c333fba918 100644 --- a/frontend/src/layout/navigation-3000/components/TopBar.tsx +++ b/frontend/src/layout/navigation-3000/components/TopBar.tsx @@ -1,28 +1,30 @@ import './TopBar.scss' -import { IconChevronDown, IconFolderMove, IconFolderOpen, IconShortcut, IconX } from '@posthog/icons' -import { LemonButton, LemonSkeleton, LemonTag } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' import { router } from 'kea-router' +import React, { useLayoutEffect, useState } from 'react' + +import { IconChevronDown, IconFolderMove, IconFolderOpen, IconShortcut, IconX } from '@posthog/icons' +import { LemonButton, LemonSkeleton, LemonTag } from '@posthog/lemon-ui' + import { EditableField } from 'lib/components/EditableField/EditableField' import { moveToLogic } from 'lib/components/FileSystem/MoveTo/moveToLogic' import { FlaggedFeature } from 'lib/components/FlaggedFeature' import { MetalyticsSummary } from 'lib/components/Metalytics/MetalyticsSummary' import { TopBarSettingsButton } from 'lib/components/TopBarSettingsButton/TopBarSettingsButton' -import { IconMenu, IconSlash } from 'lib/lemon-ui/icons' import { Link } from 'lib/lemon-ui/Link' import { Popover } from 'lib/lemon-ui/Popover/Popover' -import React, { useLayoutEffect, useState } from 'react' +import { IconMenu, IconSlash } from 'lib/lemon-ui/icons' import { ErrorBoundary } from '~/layout/ErrorBoundary' import { breadcrumbsLogic } from '~/layout/navigation/Breadcrumbs/breadcrumbsLogic' import { navigationLogic } from '~/layout/navigation/navigationLogic' -import { panelLayoutLogic } from '~/layout/panel-layout/panelLayoutLogic' import { ProjectDropdownMenu } from '~/layout/panel-layout/ProjectDropdownMenu' import { PROJECT_TREE_KEY } from '~/layout/panel-layout/ProjectTree/ProjectTree' import { projectTreeDataLogic } from '~/layout/panel-layout/ProjectTree/projectTreeDataLogic' import { projectTreeLogic } from '~/layout/panel-layout/ProjectTree/projectTreeLogic' +import { panelLayoutLogic } from '~/layout/panel-layout/panelLayoutLogic' import { Breadcrumb as IBreadcrumb } from '~/types' /** Sync with --breadcrumbs-height-compact. */ diff --git a/frontend/src/layout/navigation-3000/navigationLogic.tsx b/frontend/src/layout/navigation-3000/navigationLogic.tsx index c7e8db603e..1590513b75 100644 --- a/frontend/src/layout/navigation-3000/navigationLogic.tsx +++ b/frontend/src/layout/navigation-3000/navigationLogic.tsx @@ -1,3 +1,9 @@ +import { actions, connect, events, kea, listeners, path, props, reducers, selectors } from 'kea' +import { router } from 'kea-router' +import { subscriptions } from 'kea-subscriptions' +import posthog from 'posthog-js' +import React from 'react' + import { IconAI, IconChat, @@ -22,17 +28,13 @@ import { IconToggle, IconWarning, } from '@posthog/icons' -import { lemonToast, Spinner } from '@posthog/lemon-ui' -import { actions, connect, events, kea, listeners, path, props, reducers, selectors } from 'kea' -import { router } from 'kea-router' -import { subscriptions } from 'kea-subscriptions' +import { Spinner, lemonToast } from '@posthog/lemon-ui' + import { FEATURE_FLAGS } from 'lib/constants' import { LemonMenuOverlay } from 'lib/lemon-ui/LemonMenu/LemonMenu' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { isNotNil } from 'lib/utils' import { getAppContext } from 'lib/utils/getAppContext' -import posthog from 'posthog-js' -import React from 'react' import { editorSceneLogic } from 'scenes/data-warehouse/editor/editorSceneLogic' import { sceneLogic } from 'scenes/sceneLogic' import { Scene } from 'scenes/sceneTypes' diff --git a/frontend/src/layout/navigation-3000/sidepanel/SidePanel.stories.tsx b/frontend/src/layout/navigation-3000/sidepanel/SidePanel.stories.tsx index 0048578d96..d5ce8899e9 100644 --- a/frontend/src/layout/navigation-3000/sidepanel/SidePanel.stories.tsx +++ b/frontend/src/layout/navigation-3000/sidepanel/SidePanel.stories.tsx @@ -1,6 +1,8 @@ import { Meta, StoryFn } from '@storybook/react' import { useActions } from 'kea' + import { supportLogic } from 'lib/components/Support/supportLogic' +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { App } from 'scenes/App' import { urls } from 'scenes/urls' @@ -9,7 +11,6 @@ import organizationCurrent from '~/mocks/fixtures/api/organizations/@current/@cu import { SidePanelTab } from '~/types' import { sidePanelStateLogic } from './sidePanelStateLogic' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' const meta: Meta = { component: App, diff --git a/frontend/src/layout/navigation-3000/sidepanel/SidePanel.tsx b/frontend/src/layout/navigation-3000/sidepanel/SidePanel.tsx index dd5bd4e75e..4b85fe88a7 100644 --- a/frontend/src/layout/navigation-3000/sidepanel/SidePanel.tsx +++ b/frontend/src/layout/navigation-3000/sidepanel/SidePanel.tsx @@ -1,15 +1,16 @@ import './SidePanel.scss' +import clsx from 'clsx' +import { useActions, useValues } from 'kea' +import { useEffect, useRef } from 'react' + import { IconEllipsis, IconFeatures, IconGear, IconInfo, IconLock, IconNotebook, IconSupport } from '@posthog/icons' import { LemonButton, LemonMenu, LemonMenuItems, LemonModal, ProfilePicture } from '@posthog/lemon-ui' -import clsx from 'clsx' -import { useActions, useValues } from 'kea' + import { Resizer } from 'lib/components/Resizer/Resizer' -import { resizerLogic, ResizerLogicProps } from 'lib/components/Resizer/resizerLogic' -import { useEffect, useRef } from 'react' +import { ResizerLogicProps, resizerLogic } from 'lib/components/Resizer/resizerLogic' import { NotebookPanel } from 'scenes/notebooks/NotebookPanel/NotebookPanel' import { userLogic } from 'scenes/userLogic' -import { sceneLayoutLogic } from '~/layout/scenes/sceneLayoutLogic' import { ErrorBoundary } from '~/layout/ErrorBoundary' import { @@ -17,20 +18,21 @@ import { SidePanelExportsIcon, } from '~/layout/navigation-3000/sidepanel/panels/exports/SidePanelExports' import { themeLogic } from '~/layout/navigation-3000/themeLogic' +import { navigationLogic } from '~/layout/navigation/navigationLogic' +import { sceneLayoutLogic } from '~/layout/scenes/sceneLayoutLogic' import { SidePanelTab } from '~/types' -import { navigationLogic } from '~/layout/navigation/navigationLogic' -import { SidePanelAccessControl } from './panels/access_control/SidePanelAccessControl' -import { SidePanelActivation, SidePanelActivationIcon } from './panels/activation/SidePanelActivation' -import { SidePanelActivity, SidePanelActivityIcon } from './panels/activity/SidePanelActivity' -import { SidePanelDiscussion, SidePanelDiscussionIcon } from './panels/discussion/SidePanelDiscussion' import { SidePanelDocs } from './panels/SidePanelDocs' import { SidePanelMax } from './panels/SidePanelMax' import { SidePanelSettings } from './panels/SidePanelSettings' import { SidePanelStatus, SidePanelStatusIcon } from './panels/SidePanelStatus' import { SidePanelSupport } from './panels/SidePanelSupport' +import { SidePanelAccessControl } from './panels/access_control/SidePanelAccessControl' +import { SidePanelActivation, SidePanelActivationIcon } from './panels/activation/SidePanelActivation' +import { SidePanelActivity, SidePanelActivityIcon } from './panels/activity/SidePanelActivity' +import { SidePanelDiscussion, SidePanelDiscussionIcon } from './panels/discussion/SidePanelDiscussion' import { sidePanelLogic } from './sidePanelLogic' -import { sidePanelStateLogic, WithinSidePanelContext } from './sidePanelStateLogic' +import { WithinSidePanelContext, sidePanelStateLogic } from './sidePanelStateLogic' export const SIDE_PANEL_TABS: Record< SidePanelTab, diff --git a/frontend/src/layout/navigation-3000/sidepanel/components/SidePanelPaneHeader.tsx b/frontend/src/layout/navigation-3000/sidepanel/components/SidePanelPaneHeader.tsx index fb0eda782d..fff1e62928 100644 --- a/frontend/src/layout/navigation-3000/sidepanel/components/SidePanelPaneHeader.tsx +++ b/frontend/src/layout/navigation-3000/sidepanel/components/SidePanelPaneHeader.tsx @@ -1,8 +1,9 @@ -import { IconX } from '@posthog/icons' -import { LemonButton } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' +import { IconX } from '@posthog/icons' +import { LemonButton } from '@posthog/lemon-ui' + import { sidePanelStateLogic } from '../sidePanelStateLogic' export type SidePanelPaneHeaderProps = { diff --git a/frontend/src/layout/navigation-3000/sidepanel/panels/SidePanelDocs.tsx b/frontend/src/layout/navigation-3000/sidepanel/panels/SidePanelDocs.tsx index 7eab4b5cac..76d97a9f6a 100644 --- a/frontend/src/layout/navigation-3000/sidepanel/panels/SidePanelDocs.tsx +++ b/frontend/src/layout/navigation-3000/sidepanel/panels/SidePanelDocs.tsx @@ -1,13 +1,15 @@ -import { IconExternal, IconHome } from '@posthog/icons' -import { LemonButton, LemonSelect, LemonSkeleton } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' import { useEffect, useRef } from 'react' +import { IconExternal, IconHome } from '@posthog/icons' +import { LemonButton, LemonSelect, LemonSkeleton } from '@posthog/lemon-ui' + +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' + import { themeLogic } from '../../themeLogic' import { SidePanelPaneHeader } from '../components/SidePanelPaneHeader' import { sidePanelDocsLogic } from './sidePanelDocsLogic' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' export function SidePanelDocsSkeleton(): JSX.Element { return ( diff --git a/frontend/src/layout/navigation-3000/sidepanel/panels/SidePanelSettings.tsx b/frontend/src/layout/navigation-3000/sidepanel/panels/SidePanelSettings.tsx index 0897439c76..bd1d361586 100644 --- a/frontend/src/layout/navigation-3000/sidepanel/panels/SidePanelSettings.tsx +++ b/frontend/src/layout/navigation-3000/sidepanel/panels/SidePanelSettings.tsx @@ -1,8 +1,10 @@ +import { useActions, useValues } from 'kea' +import { useEffect } from 'react' + import { IconExternal } from '@posthog/icons' import { LemonButton } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { capitalizeFirstLetter } from 'lib/utils' -import { useEffect } from 'react' import { Settings } from 'scenes/settings/Settings' import { settingsLogic } from 'scenes/settings/settingsLogic' import { SettingsLogicProps } from 'scenes/settings/types' diff --git a/frontend/src/layout/navigation-3000/sidepanel/panels/SidePanelStatus.tsx b/frontend/src/layout/navigation-3000/sidepanel/panels/SidePanelStatus.tsx index 7f9354472b..1c8634d089 100644 --- a/frontend/src/layout/navigation-3000/sidepanel/panels/SidePanelStatus.tsx +++ b/frontend/src/layout/navigation-3000/sidepanel/panels/SidePanelStatus.tsx @@ -1,15 +1,17 @@ -import { IconCloud, IconExternal } from '@posthog/icons' -import { LemonButton, Tooltip } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' +import { useState } from 'react' + +import { IconCloud, IconExternal } from '@posthog/icons' +import { LemonButton, Tooltip } from '@posthog/lemon-ui' + import { IconWithBadge } from 'lib/lemon-ui/icons' import { capitalizeFirstLetter } from 'lib/utils' -import { useState } from 'react' import { SidePanelPaneHeader } from '../components/SidePanelPaneHeader' import { sidePanelLogic } from '../sidePanelLogic' import { SidePanelDocsSkeleton } from './SidePanelDocs' -import { sidePanelStatusLogic, STATUS_PAGE_BASE } from './sidePanelStatusLogic' +import { STATUS_PAGE_BASE, sidePanelStatusLogic } from './sidePanelStatusLogic' export const SidePanelStatusIcon = (props: { className?: string }): JSX.Element => { const { status, statusPage } = useValues(sidePanelStatusLogic) diff --git a/frontend/src/layout/navigation-3000/sidepanel/panels/SidePanelSupport.tsx b/frontend/src/layout/navigation-3000/sidepanel/panels/SidePanelSupport.tsx index d896c4a16a..f6c1e633f9 100644 --- a/frontend/src/layout/navigation-3000/sidepanel/panels/SidePanelSupport.tsx +++ b/frontend/src/layout/navigation-3000/sidepanel/panels/SidePanelSupport.tsx @@ -1,15 +1,17 @@ +import { useActions, useValues } from 'kea' +import React from 'react' + import { IconFeatures, IconHelmet, IconMap } from '@posthog/icons' import { LemonButton, Link } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { SupportForm } from 'lib/components/Support/SupportForm' import { supportLogic } from 'lib/components/Support/supportLogic' import { FEATURE_FLAGS } from 'lib/constants' import { dayjs } from 'lib/dayjs' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import React from 'react' +import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { billingLogic } from 'scenes/billing/billingLogic' import { organizationLogic } from 'scenes/organizationLogic' -import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { urls } from 'scenes/urls' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/layout/navigation-3000/sidepanel/panels/access_control/AccessControlObject.tsx b/frontend/src/layout/navigation-3000/sidepanel/panels/access_control/AccessControlObject.tsx index ac3a9eccce..1703f2a7cf 100644 --- a/frontend/src/layout/navigation-3000/sidepanel/panels/access_control/AccessControlObject.tsx +++ b/frontend/src/layout/navigation-3000/sidepanel/panels/access_control/AccessControlObject.tsx @@ -1,4 +1,9 @@ +import clsx from 'clsx' +import { BindLogic, useActions, useAsyncActions, useValues } from 'kea' +import { useEffect, useState } from 'react' + import { IconTrash } from '@posthog/icons' +import { IconWarning } from '@posthog/icons' import { LemonBanner, LemonButton, @@ -10,7 +15,7 @@ import { LemonTable, Tooltip, } from '@posthog/lemon-ui' -import { BindLogic, useActions, useAsyncActions, useValues } from 'kea' + import { PayGateMini } from 'lib/components/PayGateMini/PayGateMini' import { upgradeModalLogic } from 'lib/components/UpgradeModal/upgradeModalLogic' import { UserSelectItem } from 'lib/components/UserSelectItem' @@ -18,7 +23,6 @@ import { LemonTableColumns } from 'lib/lemon-ui/LemonTable' import { LemonTableLink } from 'lib/lemon-ui/LemonTable/LemonTableLink' import { ProfileBubbles, ProfilePicture } from 'lib/lemon-ui/ProfilePicture' import { capitalizeFirstLetter, fullName } from 'lib/utils' -import { useEffect, useState } from 'react' import { urls } from 'scenes/urls' import { userLogic } from 'scenes/userLogic' @@ -33,9 +37,7 @@ import { RoleType, } from '~/types' -import { accessControlLogic, AccessControlLogicProps } from './accessControlLogic' -import { IconWarning } from '@posthog/icons' -import clsx from 'clsx' +import { AccessControlLogicProps, accessControlLogic } from './accessControlLogic' export function AccessControlObject(props: AccessControlLogicProps): JSX.Element | null { const { canEditAccessControls, humanReadableResource } = useValues(accessControlLogic(props)) diff --git a/frontend/src/layout/navigation-3000/sidepanel/panels/access_control/AccessControlPopoutCTA.tsx b/frontend/src/layout/navigation-3000/sidepanel/panels/access_control/AccessControlPopoutCTA.tsx index f5aa8e897d..6a7cb40b55 100644 --- a/frontend/src/layout/navigation-3000/sidepanel/panels/access_control/AccessControlPopoutCTA.tsx +++ b/frontend/src/layout/navigation-3000/sidepanel/panels/access_control/AccessControlPopoutCTA.tsx @@ -1,9 +1,11 @@ +import { useActions } from 'kea' +import posthog from 'posthog-js' + import { IconOpenSidebar } from '@posthog/icons' import { LemonBanner, LemonButton } from '@posthog/lemon-ui' -import { useActions } from 'kea' + import { resourceTypeToString } from 'lib/components/AccessControlAction' import { toSentenceCase } from 'lib/utils' -import posthog from 'posthog-js' import { sidePanelStateLogic } from '~/layout/navigation-3000/sidepanel/sidePanelStateLogic' import { AccessControlResourceType, SidePanelTab } from '~/types' diff --git a/frontend/src/layout/navigation-3000/sidepanel/panels/access_control/ResourcesAccessControls.tsx b/frontend/src/layout/navigation-3000/sidepanel/panels/access_control/ResourcesAccessControls.tsx index 8e52b8f3cd..03c0c15315 100644 --- a/frontend/src/layout/navigation-3000/sidepanel/panels/access_control/ResourcesAccessControls.tsx +++ b/frontend/src/layout/navigation-3000/sidepanel/panels/access_control/ResourcesAccessControls.tsx @@ -1,3 +1,7 @@ +import { useActions, useValues } from 'kea' +import { capitalizeFirstLetter } from 'kea-forms' +import { useEffect, useMemo, useState } from 'react' + import { LemonButton, LemonInputSelect, @@ -8,20 +12,18 @@ import { ProfileBubbles, ProfilePicture, } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' -import { capitalizeFirstLetter } from 'kea-forms' + import { PayGateMini } from 'lib/components/PayGateMini/PayGateMini' import { UserSelectItem } from 'lib/components/UserSelectItem' -import { useEffect, useMemo, useState } from 'react' import { fullName } from 'lib/utils' -import { AccessControlLevel, APIScopeObject, AvailableFeature, OrganizationMemberType, RoleType } from '~/types' +import { APIScopeObject, AccessControlLevel, AvailableFeature, OrganizationMemberType, RoleType } from '~/types' import { DefaultResourceAccessControls, MemberResourceAccessControls, - resourcesAccessControlLogic, RoleResourceAccessControls, + resourcesAccessControlLogic, } from './resourcesAccessControlLogic' export function ResourcesAccessControls(): JSX.Element { diff --git a/frontend/src/layout/navigation-3000/sidepanel/panels/access_control/RolesAccessControls.tsx b/frontend/src/layout/navigation-3000/sidepanel/panels/access_control/RolesAccessControls.tsx index 3bcfa267b9..3d707fa712 100644 --- a/frontend/src/layout/navigation-3000/sidepanel/panels/access_control/RolesAccessControls.tsx +++ b/frontend/src/layout/navigation-3000/sidepanel/panels/access_control/RolesAccessControls.tsx @@ -1,3 +1,7 @@ +import { useActions, useValues } from 'kea' +import { Form } from 'kea-forms' +import { useMemo, useState } from 'react' + import { IconPlus } from '@posthog/icons' import { LemonButton, @@ -10,13 +14,11 @@ import { ProfileBubbles, ProfilePicture, } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' -import { Form } from 'kea-forms' + import { usersLemonSelectOptions } from 'lib/components/UserSelectItem' import { LemonField } from 'lib/lemon-ui/LemonField' import { LemonTableLink } from 'lib/lemon-ui/LemonTable/LemonTableLink' import { fullName } from 'lib/utils' -import { useMemo, useState } from 'react' import { userLogic } from 'scenes/userLogic' import { RoleType } from '~/types' diff --git a/frontend/src/layout/navigation-3000/sidepanel/panels/access_control/accessControlLogic.ts b/frontend/src/layout/navigation-3000/sidepanel/panels/access_control/accessControlLogic.ts index 90ae84263b..47d9212a18 100644 --- a/frontend/src/layout/navigation-3000/sidepanel/panels/access_control/accessControlLogic.ts +++ b/frontend/src/layout/navigation-3000/sidepanel/panels/access_control/accessControlLogic.ts @@ -1,15 +1,18 @@ -import { LemonSelectOption } from '@posthog/lemon-ui' import { actions, afterMount, connect, kea, key, listeners, path, props, selectors } from 'kea' import { loaders } from 'kea-loaders' +import posthog from 'posthog-js' + +import { LemonSelectOption } from '@posthog/lemon-ui' + import api from 'lib/api' import { upgradeModalLogic } from 'lib/components/UpgradeModal/upgradeModalLogic' import { OrganizationMembershipLevel } from 'lib/constants' import { toSentenceCase } from 'lib/utils' -import posthog from 'posthog-js' import { membersLogic } from 'scenes/organization/membersLogic' import { teamLogic } from 'scenes/teamLogic' import { + APIScopeObject, AccessControlLevel, AccessControlResourceType, AccessControlResponseType, @@ -19,7 +22,6 @@ import { AccessControlTypeProject, AccessControlTypeRole, AccessControlUpdateType, - APIScopeObject, OrganizationMemberType, RoleType, } from '~/types' diff --git a/frontend/src/layout/navigation-3000/sidepanel/panels/access_control/resourcesAccessControlLogic.ts b/frontend/src/layout/navigation-3000/sidepanel/panels/access_control/resourcesAccessControlLogic.ts index ffcbeb22b0..4b64aabd77 100644 --- a/frontend/src/layout/navigation-3000/sidepanel/panels/access_control/resourcesAccessControlLogic.ts +++ b/frontend/src/layout/navigation-3000/sidepanel/panels/access_control/resourcesAccessControlLogic.ts @@ -1,18 +1,19 @@ import { actions, afterMount, connect, kea, listeners, path, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { OrganizationMembershipLevel } from 'lib/constants' import { membersLogic } from 'scenes/organization/membersLogic' import { teamLogic } from 'scenes/teamLogic' import { + APIScopeObject, + AccessControlLevel, AccessControlResourceType, AccessControlResponseType, AccessControlType, - AccessControlLevel, AccessControlTypeRole, AccessControlUpdateType, - APIScopeObject, OrganizationMemberType, RoleType, } from '~/types' diff --git a/frontend/src/layout/navigation-3000/sidepanel/panels/access_control/roleAccessControlLogic.ts b/frontend/src/layout/navigation-3000/sidepanel/panels/access_control/roleAccessControlLogic.ts index be58b7022d..c21099683e 100644 --- a/frontend/src/layout/navigation-3000/sidepanel/panels/access_control/roleAccessControlLogic.ts +++ b/frontend/src/layout/navigation-3000/sidepanel/panels/access_control/roleAccessControlLogic.ts @@ -1,17 +1,19 @@ -import { lemonToast } from '@posthog/lemon-ui' import { actions, afterMount, connect, kea, listeners, path, reducers, selectors } from 'kea' import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' import { actionToUrl, router } from 'kea-router' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { membersLogic } from 'scenes/organization/membersLogic' import { teamLogic } from 'scenes/teamLogic' import { userLogic } from 'scenes/userLogic' import { + APIScopeObject, AccessControlResponseType, AccessControlTypeRole, - APIScopeObject, OrganizationMemberType, RoleType, } from '~/types' diff --git a/frontend/src/layout/navigation-3000/sidepanel/panels/activation/ActivationTaskContent.tsx b/frontend/src/layout/navigation-3000/sidepanel/panels/activation/ActivationTaskContent.tsx index 2acb865fa2..9227632968 100644 --- a/frontend/src/layout/navigation-3000/sidepanel/panels/activation/ActivationTaskContent.tsx +++ b/frontend/src/layout/navigation-3000/sidepanel/panels/activation/ActivationTaskContent.tsx @@ -1,6 +1,8 @@ import React from 'react' + import { Link } from 'lib/lemon-ui/Link' import { urls } from 'scenes/urls' + import { ActivationTask } from './activationLogic' export const IngestFirstEventContent = (): JSX.Element => ( diff --git a/frontend/src/layout/navigation-3000/sidepanel/panels/activation/SidePanelActivation.tsx b/frontend/src/layout/navigation-3000/sidepanel/panels/activation/SidePanelActivation.tsx index f178b80740..35de4b4287 100644 --- a/frontend/src/layout/navigation-3000/sidepanel/panels/activation/SidePanelActivation.tsx +++ b/frontend/src/layout/navigation-3000/sidepanel/panels/activation/SidePanelActivation.tsx @@ -1,18 +1,20 @@ -import { IconCheckCircle, IconChevronRight, IconCollapse, IconExpand, IconLock, IconPlus } from '@posthog/icons' -import { LemonButton, Tooltip } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' -import { ProfessorHog } from 'lib/components/hedgehogs' -import type { LemonIconProps } from 'lib/lemon-ui/icons' -import { LemonProgress } from 'lib/lemon-ui/LemonProgress' -import { LemonProgressCircle } from 'lib/lemon-ui/LemonProgressCircle' -import { eventUsageLogic } from 'lib/utils/eventUsageLogic' import React from 'react' +import { IconCheckCircle, IconChevronRight, IconCollapse, IconExpand, IconLock, IconPlus } from '@posthog/icons' +import { LemonButton, Tooltip } from '@posthog/lemon-ui' + +import { ProfessorHog } from 'lib/components/hedgehogs' +import { LemonProgress } from 'lib/lemon-ui/LemonProgress' +import { LemonProgressCircle } from 'lib/lemon-ui/LemonProgressCircle' +import type { LemonIconProps } from 'lib/lemon-ui/icons' +import { eventUsageLogic } from 'lib/utils/eventUsageLogic' + import { - activationLogic, type ActivationSection, ActivationTaskType, + activationLogic, } from '~/layout/navigation-3000/sidepanel/panels/activation/activationLogic' import { SidePanelPaneHeader } from '../../components/SidePanelPaneHeader' diff --git a/frontend/src/layout/navigation-3000/sidepanel/panels/activation/activationLogic.test.ts b/frontend/src/layout/navigation-3000/sidepanel/panels/activation/activationLogic.test.ts index 5ae73c893e..82f8f9aeae 100644 --- a/frontend/src/layout/navigation-3000/sidepanel/panels/activation/activationLogic.test.ts +++ b/frontend/src/layout/navigation-3000/sidepanel/panels/activation/activationLogic.test.ts @@ -1,11 +1,12 @@ import { expectLogic } from 'kea-test-utils' + import { membersLogic } from 'scenes/organization/membersLogic' import { inviteLogic } from 'scenes/settings/organization/inviteLogic' import { teamLogic } from 'scenes/teamLogic' import { initKeaTests } from '~/test/init' -import { activationLogic, ActivationTask } from './activationLogic' +import { ActivationTask, activationLogic } from './activationLogic' describe('activationLogic', () => { let logic: ReturnType diff --git a/frontend/src/layout/navigation-3000/sidepanel/panels/activation/activationLogic.tsx b/frontend/src/layout/navigation-3000/sidepanel/panels/activation/activationLogic.tsx index eb7865fc07..7fc3e884d5 100644 --- a/frontend/src/layout/navigation-3000/sidepanel/panels/activation/activationLogic.tsx +++ b/frontend/src/layout/navigation-3000/sidepanel/panels/activation/activationLogic.tsx @@ -1,3 +1,9 @@ +import { actions, afterMount, connect, kea, listeners, path, reducers, selectors } from 'kea' +import { loaders } from 'kea-loaders' +import { router } from 'kea-router' +import posthog from 'posthog-js' +import type { ReactNode } from 'react' + import { IconDatabase, IconFeatures, @@ -8,17 +14,13 @@ import { IconTestTube, IconToggle, } from '@posthog/icons' -import { actions, afterMount, connect, kea, listeners, path, reducers, selectors } from 'kea' -import { loaders } from 'kea-loaders' -import { router } from 'kea-router' + import api from 'lib/api' import { reverseProxyCheckerLogic } from 'lib/components/ReverseProxyChecker/reverseProxyCheckerLogic' import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { permanentlyMount } from 'lib/utils/kea-logic-builders' import { ProductIntentContext } from 'lib/utils/product-intents' -import posthog from 'posthog-js' -import type { ReactNode } from 'react' import { availableOnboardingProducts } from 'scenes/onboarding/utils' import { membersLogic } from 'scenes/organization/membersLogic' import { inviteLogic } from 'scenes/settings/organization/inviteLogic' @@ -29,11 +31,11 @@ import { sidePanelStateLogic } from '~/layout/navigation-3000/sidepanel/sidePane import { ActivationTaskStatus, EventDefinitionType, + OnboardingStepKey, PipelineStage, ProductKey, ReplayTabs, TeamBasicType, - OnboardingStepKey, type TeamPublicType, type TeamType, } from '~/types' diff --git a/frontend/src/layout/navigation-3000/sidepanel/panels/activity/SidePanelActivity.tsx b/frontend/src/layout/navigation-3000/sidepanel/panels/activity/SidePanelActivity.tsx index d17dd52a79..0f1162b8ec 100644 --- a/frontend/src/layout/navigation-3000/sidepanel/panels/activity/SidePanelActivity.tsx +++ b/frontend/src/layout/navigation-3000/sidepanel/panels/activity/SidePanelActivity.tsx @@ -1,29 +1,31 @@ +import { useActions, useValues } from 'kea' +import { useRef } from 'react' + import { IconNotification } from '@posthog/icons' import { LemonButton, LemonSelect, LemonSelectOption, LemonSkeleton, LemonTabs, Spinner } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { ActivityLogRow } from 'lib/components/ActivityLog/ActivityLog' import { humanizeScope } from 'lib/components/ActivityLog/humanizeActivity' import { MemberSelect } from 'lib/components/MemberSelect' import { PayGateMini } from 'lib/components/PayGateMini/PayGateMini' import { ScrollableShadows } from 'lib/components/ScrollableShadows/ScrollableShadows' import { FEATURE_FLAGS } from 'lib/constants' +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { usePageVisibilityCb } from 'lib/hooks/usePageVisibility' import { IconWithCount } from 'lib/lemon-ui/icons' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { useRef } from 'react' import { userLogic } from 'scenes/userLogic' import { - sidePanelActivityLogic, SidePanelActivityTab, + sidePanelActivityLogic, } from '~/layout/navigation-3000/sidepanel/panels/activity/sidePanelActivityLogic' +import { sidePanelNotificationsLogic } from '~/layout/navigation-3000/sidepanel/panels/activity/sidePanelNotificationsLogic' import { ActivityScope, AvailableFeature } from '~/types' import { SidePanelPaneHeader } from '../../components/SidePanelPaneHeader' import { SidePanelActivityMetalytics } from './SidePanelActivityMetalytics' import { SidePanelActivitySubscriptions } from './SidePanelActivitySubscriptions' -import { sidePanelNotificationsLogic } from '~/layout/navigation-3000/sidepanel/panels/activity/sidePanelNotificationsLogic' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' const SCROLL_TRIGGER_OFFSET = 100 diff --git a/frontend/src/layout/navigation-3000/sidepanel/panels/activity/SidePanelActivityMetalytics.tsx b/frontend/src/layout/navigation-3000/sidepanel/panels/activity/SidePanelActivityMetalytics.tsx index 7f00f93d37..95394d7605 100644 --- a/frontend/src/layout/navigation-3000/sidepanel/panels/activity/SidePanelActivityMetalytics.tsx +++ b/frontend/src/layout/navigation-3000/sidepanel/panels/activity/SidePanelActivityMetalytics.tsx @@ -1,5 +1,7 @@ -import { Spinner, Tooltip } from '@posthog/lemon-ui' import { useValues } from 'kea' + +import { Spinner, Tooltip } from '@posthog/lemon-ui' + import { humanizeScope } from 'lib/components/ActivityLog/humanizeActivity' import { metalyticsLogic } from 'lib/components/Metalytics/metalyticsLogic' import { ProfileBubbles } from 'lib/lemon-ui/ProfilePicture/ProfileBubbles' diff --git a/frontend/src/layout/navigation-3000/sidepanel/panels/activity/sidePanelActivityLogic.tsx b/frontend/src/layout/navigation-3000/sidepanel/panels/activity/sidePanelActivityLogic.tsx index 258edadc18..41a6067ffb 100644 --- a/frontend/src/layout/navigation-3000/sidepanel/panels/activity/sidePanelActivityLogic.tsx +++ b/frontend/src/layout/navigation-3000/sidepanel/panels/activity/sidePanelActivityLogic.tsx @@ -1,13 +1,19 @@ import { actions, afterMount, connect, kea, listeners, path, reducers, selectors } from 'kea' import { lazyLoaders } from 'kea-loaders' import { subscriptions } from 'kea-subscriptions' + import api, { PaginatedResponse } from 'lib/api' -import { describerFor, activityLogTransforms } from 'lib/components/ActivityLog/activityLogLogic' -import { ActivityLogItem, humanize, HumanizedActivityLogItem } from 'lib/components/ActivityLog/humanizeActivity' +import { activityLogTransforms, describerFor } from 'lib/components/ActivityLog/activityLogLogic' +import { ActivityLogItem, HumanizedActivityLogItem, humanize } from 'lib/components/ActivityLog/humanizeActivity' import { projectLogic } from 'scenes/projectLogic' import { ActivityScope, UserBasicType } from '~/types' +import { sidePanelStateLogic } from '../../sidePanelStateLogic' +import { SidePanelSceneContext } from '../../types' +import { sidePanelContextLogic } from '../sidePanelContextLogic' +import type { sidePanelActivityLogicType } from './sidePanelActivityLogicType' + // ActivityScope values that should not appear in dropdowns const HIDDEN_ACTIVITY_SCOPES: ActivityScope[] = [ ActivityScope.TAGGED_ITEM, // Handled under ActivityScope.TAG @@ -19,11 +25,6 @@ const getVisibleActivityScopes = (): ActivityScope[] => { return Object.values(ActivityScope).filter((scope) => !HIDDEN_ACTIVITY_SCOPES.includes(scope)) } -import { sidePanelStateLogic } from '../../sidePanelStateLogic' -import { SidePanelSceneContext } from '../../types' -import { sidePanelContextLogic } from '../sidePanelContextLogic' -import type { sidePanelActivityLogicType } from './sidePanelActivityLogicType' - export type ActivityFilters = { scope?: ActivityScope | string item_id?: ActivityLogItem['item_id'] diff --git a/frontend/src/layout/navigation-3000/sidepanel/panels/activity/sidePanelNotificationsLogic.tsx b/frontend/src/layout/navigation-3000/sidepanel/panels/activity/sidePanelNotificationsLogic.tsx index 81c7f4dafd..9a1416047f 100644 --- a/frontend/src/layout/navigation-3000/sidepanel/panels/activity/sidePanelNotificationsLogic.tsx +++ b/frontend/src/layout/navigation-3000/sidepanel/panels/activity/sidePanelNotificationsLogic.tsx @@ -1,18 +1,19 @@ -import { actions, beforeUnmount, connect, kea, listeners, reducers, selectors, path } from 'kea' +import { actions, beforeUnmount, connect, kea, listeners, path, reducers, selectors } from 'kea' import { lazyLoaders } from 'kea-loaders' +import posthog, { JsonRecord } from 'posthog-js' + import api from 'lib/api' import { describerFor } from 'lib/components/ActivityLog/activityLogLogic' -import { humanize, HumanizedActivityLogItem } from 'lib/components/ActivityLog/humanizeActivity' +import { HumanizedActivityLogItem, humanize } from 'lib/components/ActivityLog/humanizeActivity' import { dayjs } from 'lib/dayjs' import { LemonMarkdown } from 'lib/lemon-ui/LemonMarkdown' import { toParams } from 'lib/utils' -import posthog, { JsonRecord } from 'posthog-js' import { projectLogic } from 'scenes/projectLogic' +import { ChangesResponse } from '~/layout/navigation-3000/sidepanel/panels/activity/sidePanelActivityLogic' + import { sidePanelStateLogic } from '../../sidePanelStateLogic' import { sidePanelContextLogic } from '../sidePanelContextLogic' -import { ChangesResponse } from '~/layout/navigation-3000/sidepanel/panels/activity/sidePanelActivityLogic' - import type { sidePanelNotificationsLogicType } from './sidePanelNotificationsLogicType' const POLL_TIMEOUT = 5 * 60 * 1000 diff --git a/frontend/src/layout/navigation-3000/sidepanel/panels/discussion/SidePanelDiscussion.tsx b/frontend/src/layout/navigation-3000/sidepanel/panels/discussion/SidePanelDiscussion.tsx index 989354bf14..9aa78a3cae 100644 --- a/frontend/src/layout/navigation-3000/sidepanel/panels/discussion/SidePanelDiscussion.tsx +++ b/frontend/src/layout/navigation-3000/sidepanel/panels/discussion/SidePanelDiscussion.tsx @@ -1,13 +1,15 @@ +import { useActions, useValues } from 'kea' +import { useEffect } from 'react' + import { IconChat } from '@posthog/icons' import { LemonTag, Tooltip } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { humanizeScope } from 'lib/components/ActivityLog/humanizeActivity' import { WarningHog } from 'lib/components/hedgehogs' import { IconWithCount } from 'lib/lemon-ui/icons' -import { useEffect } from 'react' import { CommentComposer } from 'scenes/comments/CommentComposer' import { CommentsList } from 'scenes/comments/CommentsList' -import { commentsLogic, CommentsLogicProps } from 'scenes/comments/commentsLogic' +import { CommentsLogicProps, commentsLogic } from 'scenes/comments/commentsLogic' import { SidePanelPaneHeader } from '../../components/SidePanelPaneHeader' import { sidePanelStateLogic } from '../../sidePanelStateLogic' diff --git a/frontend/src/layout/navigation-3000/sidepanel/panels/discussion/sidePanelDiscussionLogic.ts b/frontend/src/layout/navigation-3000/sidepanel/panels/discussion/sidePanelDiscussionLogic.ts index dd7ad372f0..911a235921 100644 --- a/frontend/src/layout/navigation-3000/sidepanel/panels/discussion/sidePanelDiscussionLogic.ts +++ b/frontend/src/layout/navigation-3000/sidepanel/panels/discussion/sidePanelDiscussionLogic.ts @@ -1,6 +1,7 @@ import { actions, connect, kea, path, selectors } from 'kea' import { loaders } from 'kea-loaders' import { subscriptions } from 'kea-subscriptions' + import api from 'lib/api' import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' diff --git a/frontend/src/layout/navigation-3000/sidepanel/panels/exports/SidePanelExports.tsx b/frontend/src/layout/navigation-3000/sidepanel/panels/exports/SidePanelExports.tsx index 830fb1080a..322c39f25e 100644 --- a/frontend/src/layout/navigation-3000/sidepanel/panels/exports/SidePanelExports.tsx +++ b/frontend/src/layout/navigation-3000/sidepanel/panels/exports/SidePanelExports.tsx @@ -1,6 +1,8 @@ -import { IconDownload, IconPencil, IconWarning } from '@posthog/icons' -import { LemonButton, lemonToast, Spinner } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { IconDownload, IconPencil, IconWarning } from '@posthog/icons' +import { LemonButton, Spinner, lemonToast } from '@posthog/lemon-ui' + import { downloadExportedAsset, exportedAssetBlob } from 'lib/components/ExportButton/exporter' import { ScreenShotEditor } from 'lib/components/TakeScreenshot/ScreenShotEditor' import { takeScreenshotLogic } from 'lib/components/TakeScreenshot/takeScreenshotLogic' diff --git a/frontend/src/layout/navigation-3000/sidepanel/panels/exports/sidePanelExportsLogic.ts b/frontend/src/layout/navigation-3000/sidepanel/panels/exports/sidePanelExportsLogic.ts index 351969cf8e..0732105309 100644 --- a/frontend/src/layout/navigation-3000/sidepanel/panels/exports/sidePanelExportsLogic.ts +++ b/frontend/src/layout/navigation-3000/sidepanel/panels/exports/sidePanelExportsLogic.ts @@ -1,4 +1,5 @@ import { afterMount, connect, kea, path } from 'kea' + import { exportsLogic } from 'lib/components/ExportButton/exportsLogic' import { sidePanelStateLogic } from '~/layout/navigation-3000/sidepanel/sidePanelStateLogic' diff --git a/frontend/src/layout/navigation-3000/sidepanel/panels/sidePanelContextLogic.ts b/frontend/src/layout/navigation-3000/sidepanel/panels/sidePanelContextLogic.ts index 7a3d54cb83..2292f583c9 100644 --- a/frontend/src/layout/navigation-3000/sidepanel/panels/sidePanelContextLogic.ts +++ b/frontend/src/layout/navigation-3000/sidepanel/panels/sidePanelContextLogic.ts @@ -1,6 +1,7 @@ import { connect, kea, path, selectors } from 'kea' import { router } from 'kea-router' import { objectsEqual } from 'kea-test-utils' + import { removeProjectIdIfPresent } from 'lib/utils/router-utils' import { sceneLogic } from 'scenes/sceneLogic' import { SceneConfig } from 'scenes/sceneTypes' diff --git a/frontend/src/layout/navigation-3000/sidepanel/panels/sidePanelDocsLogic.ts b/frontend/src/layout/navigation-3000/sidepanel/panels/sidePanelDocsLogic.ts index fe9b7c0dc1..30410c1dfb 100644 --- a/frontend/src/layout/navigation-3000/sidepanel/panels/sidePanelDocsLogic.ts +++ b/frontend/src/layout/navigation-3000/sidepanel/panels/sidePanelDocsLogic.ts @@ -1,6 +1,7 @@ import { actions, afterMount, beforeUnmount, connect, kea, listeners, path, props, reducers, selectors } from 'kea' import { router } from 'kea-router' import { RefObject } from 'react' + import { sceneLogic } from 'scenes/sceneLogic' import { sidePanelStateLogic } from '../sidePanelStateLogic' diff --git a/frontend/src/layout/navigation-3000/sidepanel/panels/sidePanelMaxChatInterface.tsx b/frontend/src/layout/navigation-3000/sidepanel/panels/sidePanelMaxChatInterface.tsx index 405d55f4cf..5a796f8f20 100644 --- a/frontend/src/layout/navigation-3000/sidepanel/panels/sidePanelMaxChatInterface.tsx +++ b/frontend/src/layout/navigation-3000/sidepanel/panels/sidePanelMaxChatInterface.tsx @@ -1,5 +1,7 @@ import { offset } from '@floating-ui/react' import { useActions, useValues } from 'kea' +import { forwardRef, memo, useEffect, useRef, useState } from 'react' + import { supportLogic } from 'lib/components/Support/supportLogic' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonCollapse } from 'lib/lemon-ui/LemonCollapse' @@ -7,7 +9,6 @@ import { LemonDivider } from 'lib/lemon-ui/LemonDivider' import { LemonMarkdown } from 'lib/lemon-ui/LemonMarkdown' import { LemonTextArea } from 'lib/lemon-ui/LemonTextArea/LemonTextArea' import { Spinner } from 'lib/lemon-ui/Spinner' -import { forwardRef, memo, useEffect, useRef, useState } from 'react' import { maxGlobalLogic } from 'scenes/max/maxGlobalLogic' import { AIConsentPopoverWrapper } from 'scenes/settings/organization/AIConsentPopoverWrapper' diff --git a/frontend/src/layout/navigation-3000/sidepanel/panels/sidePanelSettingsLogic.tsx b/frontend/src/layout/navigation-3000/sidepanel/panels/sidePanelSettingsLogic.tsx index f09e1e53f9..acfc081a5b 100644 --- a/frontend/src/layout/navigation-3000/sidepanel/panels/sidePanelSettingsLogic.tsx +++ b/frontend/src/layout/navigation-3000/sidepanel/panels/sidePanelSettingsLogic.tsx @@ -1,4 +1,5 @@ import { actions, connect, kea, listeners, path, reducers, selectors } from 'kea' + import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { SettingsLogicProps } from 'scenes/settings/types' diff --git a/frontend/src/layout/navigation-3000/sidepanel/sidePanelLogic.tsx b/frontend/src/layout/navigation-3000/sidepanel/sidePanelLogic.tsx index 30819a6a94..cb3b45f645 100644 --- a/frontend/src/layout/navigation-3000/sidepanel/sidePanelLogic.tsx +++ b/frontend/src/layout/navigation-3000/sidepanel/sidePanelLogic.tsx @@ -1,21 +1,22 @@ import { connect, kea, path, selectors } from 'kea' +import { combineUrl, router, urlToAction } from 'kea-router' + import { FEATURE_FLAGS } from 'lib/constants' import { dayjs } from 'lib/dayjs' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { teamLogic } from 'scenes/teamLogic' +import { urls } from 'scenes/urls' import { userLogic } from 'scenes/userLogic' import { activationLogic } from '~/layout/navigation-3000/sidepanel/panels/activation/activationLogic' +import { sidePanelNotificationsLogic } from '~/layout/navigation-3000/sidepanel/panels/activity/sidePanelNotificationsLogic' import { AvailableFeature, SidePanelTab } from '~/types' -import { combineUrl, router, urlToAction } from 'kea-router' -import { urls } from 'scenes/urls' import { sidePanelContextLogic } from './panels/sidePanelContextLogic' import { sidePanelStatusLogic } from './panels/sidePanelStatusLogic' import type { sidePanelLogicType } from './sidePanelLogicType' import { sidePanelStateLogic } from './sidePanelStateLogic' -import { sidePanelNotificationsLogic } from '~/layout/navigation-3000/sidepanel/panels/activity/sidePanelNotificationsLogic' const ALWAYS_EXTRA_TABS = [SidePanelTab.Settings, SidePanelTab.Activity, SidePanelTab.Status, SidePanelTab.Exports] diff --git a/frontend/src/layout/navigation-3000/sidepanel/types.ts b/frontend/src/layout/navigation-3000/sidepanel/types.ts index 456e5bf7e9..e2d18f1f75 100644 --- a/frontend/src/layout/navigation-3000/sidepanel/types.ts +++ b/frontend/src/layout/navigation-3000/sidepanel/types.ts @@ -1,6 +1,6 @@ import { ActivityLogItem } from 'lib/components/ActivityLog/humanizeActivity' -import { ActivityScope, APIScopeObject, CommentType } from '~/types' +import { APIScopeObject, ActivityScope, CommentType } from '~/types' /** Allows scenes to set a context which enables richer features of the side panel */ export type SidePanelSceneContext = { diff --git a/frontend/src/layout/navigation-3000/themeLogic.ts b/frontend/src/layout/navigation-3000/themeLogic.ts index 251e8c02d2..f84743dd41 100644 --- a/frontend/src/layout/navigation-3000/themeLogic.ts +++ b/frontend/src/layout/navigation-3000/themeLogic.ts @@ -1,4 +1,5 @@ import { actions, connect, events, kea, listeners, path, reducers, selectors } from 'kea' + import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { sceneLogic } from 'scenes/sceneLogic' diff --git a/frontend/src/layout/navigation-3000/types.ts b/frontend/src/layout/navigation-3000/types.ts index 5d7b59f0c8..e3534b6976 100644 --- a/frontend/src/layout/navigation-3000/types.ts +++ b/frontend/src/layout/navigation-3000/types.ts @@ -1,9 +1,11 @@ -import { LemonTagType, SideAction } from '@posthog/lemon-ui' import { Logic, LogicWrapper } from 'kea' +import React from 'react' + +import { LemonTagType, SideAction } from '@posthog/lemon-ui' + import { FEATURE_FLAGS } from 'lib/constants' import { Dayjs } from 'lib/dayjs' import { LemonMenuItems } from 'lib/lemon-ui/LemonMenu' -import React from 'react' export interface SidebarLogic extends Logic { actions: Record // No actions required in the base version diff --git a/frontend/src/layout/navigation/AccessLevelIndicator.tsx b/frontend/src/layout/navigation/AccessLevelIndicator.tsx index c5e07de1e9..3f83531e6b 100644 --- a/frontend/src/layout/navigation/AccessLevelIndicator.tsx +++ b/frontend/src/layout/navigation/AccessLevelIndicator.tsx @@ -1,5 +1,6 @@ import { LemonTag } from 'lib/lemon-ui/LemonTag/LemonTag' import { membershipLevelToName } from 'lib/utils/permissioning' + import { OrganizationBasicType } from '~/types' export function AccessLevelIndicator({ organization }: { organization: OrganizationBasicType }): JSX.Element { diff --git a/frontend/src/layout/navigation/Breadcrumbs/breadcrumbsLogic.test.ts b/frontend/src/layout/navigation/Breadcrumbs/breadcrumbsLogic.test.ts index b19bef66a1..260d334473 100644 --- a/frontend/src/layout/navigation/Breadcrumbs/breadcrumbsLogic.test.ts +++ b/frontend/src/layout/navigation/Breadcrumbs/breadcrumbsLogic.test.ts @@ -1,5 +1,6 @@ import { router } from 'kea-router' import { expectLogic } from 'kea-test-utils' + import { sceneLogic } from 'scenes/sceneLogic' import { Scene } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' diff --git a/frontend/src/layout/navigation/Breadcrumbs/breadcrumbsLogic.tsx b/frontend/src/layout/navigation/Breadcrumbs/breadcrumbsLogic.tsx index 5df97ca305..1900e87b50 100644 --- a/frontend/src/layout/navigation/Breadcrumbs/breadcrumbsLogic.tsx +++ b/frontend/src/layout/navigation/Breadcrumbs/breadcrumbsLogic.tsx @@ -1,11 +1,11 @@ import { actions, connect, kea, listeners, path, props, reducers, selectors } from 'kea' import { subscriptions } from 'kea-subscriptions' -import { FEATURE_FLAGS } from 'lib/constants' +import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { identifierToHuman, objectsEqual, stripHTTP } from 'lib/utils' -import { organizationLogic } from 'scenes/organizationLogic' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' +import { organizationLogic } from 'scenes/organizationLogic' import { projectLogic } from 'scenes/projectLogic' import { sceneLogic } from 'scenes/sceneLogic' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/layout/navigation/EnvironmentSwitcher.tsx b/frontend/src/layout/navigation/EnvironmentSwitcher.tsx index 1378bd49f2..a505ebb1d1 100644 --- a/frontend/src/layout/navigation/EnvironmentSwitcher.tsx +++ b/frontend/src/layout/navigation/EnvironmentSwitcher.tsx @@ -1,18 +1,12 @@ -import { IconCheck, IconCornerDownRight, IconGear, IconPlusSmall, IconWarning } from '@posthog/icons' -import { LemonTag, Link, Spinner } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { router } from 'kea-router' +import { useMemo, useState } from 'react' + +import { IconCheck, IconCornerDownRight, IconGear, IconPlusSmall, IconWarning } from '@posthog/icons' +import { LemonTag, Link, Spinner } from '@posthog/lemon-ui' + import { upgradeModalLogic } from 'lib/components/UpgradeModal/upgradeModalLogic' import { UploadedLogo } from 'lib/lemon-ui/UploadedLogo' -import { getProjectSwitchTargetUrl } from 'lib/utils/router-utils' -import { useMemo, useState } from 'react' -import { organizationLogic } from 'scenes/organizationLogic' -import { environmentRollbackModalLogic } from 'scenes/settings/environment/environmentRollbackModalLogic' -import { teamLogic } from 'scenes/teamLogic' -import { urls } from 'scenes/urls' - -import { AvailableFeature, TeamPublicType } from '~/types' - import { IconBlank } from 'lib/lemon-ui/icons' import { ButtonGroupPrimitive, ButtonPrimitive, ButtonPrimitiveProps } from 'lib/ui/Button/ButtonPrimitives' import { Combobox } from 'lib/ui/Combobox/Combobox' @@ -24,8 +18,16 @@ import { PopoverPrimitiveTrigger, } from 'lib/ui/PopoverPrimitive/PopoverPrimitive' import { cn } from 'lib/utils/css-classes' +import { getProjectSwitchTargetUrl } from 'lib/utils/router-utils' +import { organizationLogic } from 'scenes/organizationLogic' +import { environmentRollbackModalLogic } from 'scenes/settings/environment/environmentRollbackModalLogic' +import { teamLogic } from 'scenes/teamLogic' +import { urls } from 'scenes/urls' + +import { AvailableFeature, TeamPublicType } from '~/types' + import { globalModalsLogic } from '../GlobalModals' -import { environmentSwitcherLogic, TeamBasicTypeWithProjectName } from './environmentsSwitcherLogic' +import { TeamBasicTypeWithProjectName, environmentSwitcherLogic } from './environmentsSwitcherLogic' /** * Regex matching a possible emoji (any emoji) at the beginning of the string. diff --git a/frontend/src/layout/navigation/OrganizationSwitcher.tsx b/frontend/src/layout/navigation/OrganizationSwitcher.tsx index 823d9f27bc..0239882259 100644 --- a/frontend/src/layout/navigation/OrganizationSwitcher.tsx +++ b/frontend/src/layout/navigation/OrganizationSwitcher.tsx @@ -1,10 +1,14 @@ -import { IconPlusSmall } from '@posthog/icons' import { useActions, useValues } from 'kea' + +import { IconPlusSmall } from '@posthog/icons' + import { upgradeModalLogic } from 'lib/components/UpgradeModal/upgradeModalLogic' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { UploadedLogo } from 'lib/lemon-ui/UploadedLogo/UploadedLogo' import { userLogic } from 'scenes/userLogic' + import { AvailableFeature, OrganizationBasicType } from '~/types' + import { globalModalsLogic } from '../GlobalModals' import { AccessLevelIndicator } from './AccessLevelIndicator' import { navigationLogic } from './navigationLogic' diff --git a/frontend/src/layout/navigation/PosthogStories/PizzaSurveyOverlayComponent.tsx b/frontend/src/layout/navigation/PosthogStories/PizzaSurveyOverlayComponent.tsx index 8c9905744d..b4d7a3e6ad 100644 --- a/frontend/src/layout/navigation/PosthogStories/PizzaSurveyOverlayComponent.tsx +++ b/frontend/src/layout/navigation/PosthogStories/PizzaSurveyOverlayComponent.tsx @@ -1,5 +1,7 @@ import { useEffect } from 'react' + import { LemonButton } from '@posthog/lemon-ui' + import { CloseOverlayAction } from './storiesMap' interface PizzaSurveyOverlayComponentProps { diff --git a/frontend/src/layout/navigation/PosthogStories/PosthogStoriesContainer.tsx b/frontend/src/layout/navigation/PosthogStories/PosthogStoriesContainer.tsx index 8d10faba32..97d367669b 100644 --- a/frontend/src/layout/navigation/PosthogStories/PosthogStoriesContainer.tsx +++ b/frontend/src/layout/navigation/PosthogStories/PosthogStoriesContainer.tsx @@ -1,9 +1,10 @@ -import { IconChevronRight } from '@posthog/icons' import { useActions, useValues } from 'kea' import posthog from 'posthog-js' -import { storiesLogic } from './storiesLogic' +import { IconChevronRight } from '@posthog/icons' + import { StoriesModal } from './StoriesModal' +import { storiesLogic } from './storiesLogic' export const PosthogStoriesContainer = (): JSX.Element => { const { stories, isStoryViewed, storiesCollapsed } = useValues(storiesLogic) diff --git a/frontend/src/layout/navigation/PosthogStories/StoriesModal.tsx b/frontend/src/layout/navigation/PosthogStories/StoriesModal.tsx index eb215bdfba..3c59363429 100644 --- a/frontend/src/layout/navigation/PosthogStories/StoriesModal.tsx +++ b/frontend/src/layout/navigation/PosthogStories/StoriesModal.tsx @@ -1,16 +1,18 @@ import './StoriesModal.scss' -import { IconX } from '@posthog/icons' import { useActions, useValues } from 'kea' -import { useWindowSize } from 'lib/hooks/useWindowSize' -import { LemonModal } from 'lib/lemon-ui/LemonModal' import posthog from 'posthog-js' import { useCallback, useEffect, useMemo, useRef, useState } from 'react' +import { IconX } from '@posthog/icons' + +import { useWindowSize } from 'lib/hooks/useWindowSize' +import { LemonModal } from 'lib/lemon-ui/LemonModal' + +import { StoriesPlayer, Story } from './StoriesPlayer' import { storiesLogic } from './storiesLogic' import { CloseOverlayAction, StoryType } from './storiesMap' import type { story } from './storiesMap' -import { StoriesPlayer, Story } from './StoriesPlayer' const IMAGE_STORY_INTERVAL = 6000 const MIN_WIDTH = 320 // Minimum width in pixels diff --git a/frontend/src/layout/navigation/PosthogStories/StoriesPlayer.tsx b/frontend/src/layout/navigation/PosthogStories/StoriesPlayer.tsx index 14b4f297ec..0f6e4ae92f 100644 --- a/frontend/src/layout/navigation/PosthogStories/StoriesPlayer.tsx +++ b/frontend/src/layout/navigation/PosthogStories/StoriesPlayer.tsx @@ -1,7 +1,8 @@ -import { IconArrowRight, IconChevronLeft, IconChevronRight, IconPauseFilled, IconX } from '@posthog/icons' import { useCallback, useEffect, useRef, useState } from 'react' import React from 'react' +import { IconArrowRight, IconChevronLeft, IconChevronRight, IconPauseFilled, IconX } from '@posthog/icons' + import { ArrowIcon, StoryType } from './storiesMap' import type { SeeMoreOptions } from './storiesMap' diff --git a/frontend/src/layout/navigation/PosthogStories/storiesMap.tsx b/frontend/src/layout/navigation/PosthogStories/storiesMap.tsx index f5b6424901..b24f3e53f7 100644 --- a/frontend/src/layout/navigation/PosthogStories/storiesMap.tsx +++ b/frontend/src/layout/navigation/PosthogStories/storiesMap.tsx @@ -1,5 +1,4 @@ // This should eventually be moved to a DB. - import { PizzaSurveyOverlayComponent } from './PizzaSurveyOverlayComponent' export enum StoryType { diff --git a/frontend/src/layout/navigation/ProjectNotice.tsx b/frontend/src/layout/navigation/ProjectNotice.tsx index 0c96ab2c68..6046a4c884 100644 --- a/frontend/src/layout/navigation/ProjectNotice.tsx +++ b/frontend/src/layout/navigation/ProjectNotice.tsx @@ -1,11 +1,15 @@ +import { useActions, useValues } from 'kea' +import { useEffect, useState } from 'react' + import { IconGear, IconPlus } from '@posthog/icons' import { Spinner } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { dayjs } from 'lib/dayjs' +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { LemonBannerAction } from 'lib/lemon-ui/LemonBanner/LemonBanner' import { Link } from 'lib/lemon-ui/Link' -import { useEffect, useState } from 'react' +import { cn } from 'lib/utils/css-classes' import { verifyEmailLogic } from 'scenes/authentication/signup/verify-email/verifyEmailLogic' import { organizationLogic } from 'scenes/organizationLogic' import { sceneLogic } from 'scenes/sceneLogic' @@ -15,9 +19,7 @@ import { userLogic } from 'scenes/userLogic' import { OnboardingStepKey, ProductKey } from '~/types' -import { cn } from 'lib/utils/css-classes' -import { navigationLogic, ProjectNoticeVariant } from './navigationLogic' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' +import { ProjectNoticeVariant, navigationLogic } from './navigationLogic' interface ProjectNoticeBlueprint { message: JSX.Element | string diff --git a/frontend/src/layout/navigation/SideBar/SidebarChangeNotice.tsx b/frontend/src/layout/navigation/SideBar/SidebarChangeNotice.tsx index 590ecbed8f..e0cdb6332a 100644 --- a/frontend/src/layout/navigation/SideBar/SidebarChangeNotice.tsx +++ b/frontend/src/layout/navigation/SideBar/SidebarChangeNotice.tsx @@ -1,9 +1,11 @@ -import { IconX } from '@posthog/icons' -import { LemonButton, LemonDivider, TooltipProps } from '@posthog/lemon-ui' import { useValues } from 'kea' -import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import posthog from 'posthog-js' import React, { Fragment, useState } from 'react' + +import { IconX } from '@posthog/icons' +import { LemonButton, LemonDivider, TooltipProps } from '@posthog/lemon-ui' + +import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { Scene } from 'scenes/sceneTypes' type SidebarChangeNoticeProps = { diff --git a/frontend/src/layout/navigation/TopBar/AccountPopover.tsx b/frontend/src/layout/navigation/TopBar/AccountPopover.tsx index f52f11391c..bef3c57a7a 100644 --- a/frontend/src/layout/navigation/TopBar/AccountPopover.tsx +++ b/frontend/src/layout/navigation/TopBar/AccountPopover.tsx @@ -1,5 +1,9 @@ import './AccountPopover.scss' +import clsx from 'clsx' +import { useActions, useValues } from 'kea' +import { router } from 'kea-router' + import { IconCake, IconCheckCircle, @@ -16,9 +20,7 @@ import { IconShieldLock, } from '@posthog/icons' import { LemonButtonPropsBase, LemonSelect } from '@posthog/lemon-ui' -import clsx from 'clsx' -import { useActions, useValues } from 'kea' -import { router } from 'kea-router' + import { FEATURE_FLAGS } from 'lib/constants' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { ProfilePicture } from 'lib/lemon-ui/ProfilePicture' @@ -29,17 +31,18 @@ import { eventUsageLogic } from 'lib/utils/eventUsageLogic' import { billingLogic } from 'scenes/billing/billingLogic' import { inviteLogic } from 'scenes/settings/organization/inviteLogic' import { ThemeSwitcher } from 'scenes/settings/user/ThemeSwitcher' + import { sidePanelStateLogic } from '~/layout/navigation-3000/sidepanel/sidePanelStateLogic' import { NewOrganizationButton, OtherOrganizationButton } from '~/layout/navigation/OrganizationSwitcher' import { getTreeItemsGames } from '~/products' -import { organizationLogic } from '../../../scenes/organizationLogic' import { preflightLogic } from '../../../scenes/PreflightCheck/preflightLogic' +import { organizationLogic } from '../../../scenes/organizationLogic' import { urls } from '../../../scenes/urls' import { userLogic } from '../../../scenes/userLogic' import { OrganizationBasicType, SidePanelTab } from '../../../types' -import { navigationLogic } from '../navigationLogic' import { AccessLevelIndicator } from '../AccessLevelIndicator' +import { navigationLogic } from '../navigationLogic' function AccountPopoverSection({ title, diff --git a/frontend/src/layout/navigation/environmentsSwitcherLogic.tsx b/frontend/src/layout/navigation/environmentsSwitcherLogic.tsx index a31447fc31..6cadf26707 100644 --- a/frontend/src/layout/navigation/environmentsSwitcherLogic.tsx +++ b/frontend/src/layout/navigation/environmentsSwitcherLogic.tsx @@ -1,5 +1,6 @@ import FuseClass from 'fuse.js' import { actions, connect, kea, path, reducers, selectors } from 'kea' + import { organizationLogic } from 'scenes/organizationLogic' import { teamLogic } from 'scenes/teamLogic' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/layout/navigation/navigationLogic.ts b/frontend/src/layout/navigation/navigationLogic.ts index bf5213f842..4aa93d8865 100644 --- a/frontend/src/layout/navigation/navigationLogic.ts +++ b/frontend/src/layout/navigation/navigationLogic.ts @@ -1,13 +1,14 @@ import { actions, connect, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { windowValues } from 'kea-window-values' + import api from 'lib/api' import { apiStatusLogic } from 'lib/logic/apiStatusLogic' import { eventIngestionRestrictionLogic } from 'lib/logic/eventIngestionRestrictionLogic' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' +import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { membersLogic } from 'scenes/organization/membersLogic' import { organizationLogic } from 'scenes/organizationLogic' -import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { sceneLogic } from 'scenes/sceneLogic' import { teamLogic } from 'scenes/teamLogic' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/layout/panel-layout/DatabaseTree/DatabaseTree.tsx b/frontend/src/layout/panel-layout/DatabaseTree/DatabaseTree.tsx index 8be9085e73..08f248fe36 100644 --- a/frontend/src/layout/panel-layout/DatabaseTree/DatabaseTree.tsx +++ b/frontend/src/layout/panel-layout/DatabaseTree/DatabaseTree.tsx @@ -1,12 +1,14 @@ -import { IconPlus } from '@posthog/icons' import { router } from 'kea-router' + +import { IconPlus } from '@posthog/icons' + import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' +import { ViewLinkModal } from 'scenes/data-warehouse/ViewLinkModal' import { DatabaseSearchField } from 'scenes/data-warehouse/editor/sidebar/DatabaseSearchField' import { QueryDatabase } from 'scenes/data-warehouse/editor/sidebar/QueryDatabase' import { urls } from 'scenes/urls' import { PanelLayoutPanel } from '../PanelLayoutPanel' -import { ViewLinkModal } from 'scenes/data-warehouse/ViewLinkModal' import { SyncMoreNotice } from './SyncMoreNotice' export function DatabaseTree(): JSX.Element { diff --git a/frontend/src/layout/panel-layout/DatabaseTree/SyncMoreNotice.tsx b/frontend/src/layout/panel-layout/DatabaseTree/SyncMoreNotice.tsx index f3b5fbc66a..87c0bddd36 100644 --- a/frontend/src/layout/panel-layout/DatabaseTree/SyncMoreNotice.tsx +++ b/frontend/src/layout/panel-layout/DatabaseTree/SyncMoreNotice.tsx @@ -1,15 +1,18 @@ -import { IconX } from '@posthog/icons' +import { useActions, useValues } from 'kea' import { router } from 'kea-router' + +import { IconX } from '@posthog/icons' +import { LemonBanner, LemonButton } from '@posthog/lemon-ui' + +import { ProductIntentContext } from 'lib/utils/product-intents' +import { queryDatabaseLogic } from 'scenes/data-warehouse/editor/sidebar/queryDatabaseLogic' +import { DataWarehouseSourceIcon } from 'scenes/data-warehouse/settings/DataWarehouseSourceIcon' +import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' -import { LemonBanner, LemonButton } from '@posthog/lemon-ui' -import { DataWarehouseSourceIcon } from 'scenes/data-warehouse/settings/DataWarehouseSourceIcon' -import { useActions, useValues } from 'kea' -import { teamLogic } from 'scenes/teamLogic' import { PipelineStage, ProductKey } from '~/types' -import { ProductIntentContext } from 'lib/utils/product-intents' + import { panelLayoutLogic } from '../panelLayoutLogic' -import { queryDatabaseLogic } from 'scenes/data-warehouse/editor/sidebar/queryDatabaseLogic' export const SyncMoreNotice = (): JSX.Element | null => { const { hasNonPosthogSources, syncMoreNoticeDismissed, databaseLoading } = useValues(queryDatabaseLogic) diff --git a/frontend/src/layout/panel-layout/OrganizationDropdownMenu.tsx b/frontend/src/layout/panel-layout/OrganizationDropdownMenu.tsx index d0266e3ec0..cf8b138a8d 100644 --- a/frontend/src/layout/panel-layout/OrganizationDropdownMenu.tsx +++ b/frontend/src/layout/panel-layout/OrganizationDropdownMenu.tsx @@ -1,26 +1,30 @@ -import { IconCheck, IconPlusSmall } from '@posthog/icons' import { useActions, useValues } from 'kea' + +import { IconCheck, IconPlusSmall } from '@posthog/icons' + import { upgradeModalLogic } from 'lib/components/UpgradeModal/upgradeModalLogic' -import { IconBlank } from 'lib/lemon-ui/icons' import { UploadedLogo } from 'lib/lemon-ui/UploadedLogo/UploadedLogo' +import { IconBlank } from 'lib/lemon-ui/icons' import { ButtonPrimitive, ButtonPrimitiveProps } from 'lib/ui/Button/ButtonPrimitives' import { Combobox } from 'lib/ui/Combobox/Combobox' +import { DropdownMenuOpenIndicator } from 'lib/ui/DropdownMenu/DropdownMenu' import { Label } from 'lib/ui/Label/Label' import { PopoverPrimitive, PopoverPrimitiveContent, PopoverPrimitiveTrigger, } from 'lib/ui/PopoverPrimitive/PopoverPrimitive' -import { organizationLogic } from 'scenes/organizationLogic' +import { cn } from 'lib/utils/css-classes' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' +import { organizationLogic } from 'scenes/organizationLogic' import { userLogic } from 'scenes/userLogic' + import { globalModalsLogic } from '~/layout/GlobalModals' import { navigationLogic } from '~/layout/navigation/navigationLogic' import { AvailableFeature } from '~/types' -import { DropdownMenuOpenIndicator } from 'lib/ui/DropdownMenu/DropdownMenu' -import { panelLayoutLogic } from './panelLayoutLogic' + import { AccessLevelIndicator } from '../navigation/AccessLevelIndicator' -import { cn } from 'lib/utils/css-classes' +import { panelLayoutLogic } from './panelLayoutLogic' export function OrganizationDropdownMenu({ buttonProps = { className: 'font-semibold' }, diff --git a/frontend/src/layout/panel-layout/PanelLayout.tsx b/frontend/src/layout/panel-layout/PanelLayout.tsx index 7e20e9dfc1..c7a3dc84e5 100644 --- a/frontend/src/layout/panel-layout/PanelLayout.tsx +++ b/frontend/src/layout/panel-layout/PanelLayout.tsx @@ -1,14 +1,15 @@ import { cva } from 'cva' import { useActions, useMountedLogic, useValues } from 'kea' -import { cn } from 'lib/utils/css-classes' import { useEffect } from 'react' +import { cn } from 'lib/utils/css-classes' + import { navigation3000Logic } from '../navigation-3000/navigationLogic' import { DatabaseTree } from './DatabaseTree/DatabaseTree' -import { panelLayoutLogic } from './panelLayoutLogic' import { PanelLayoutNavBar } from './PanelLayoutNavBar' import { PROJECT_TREE_KEY, ProjectTree } from './ProjectTree/ProjectTree' import { projectTreeLogic } from './ProjectTree/projectTreeLogic' +import { panelLayoutLogic } from './panelLayoutLogic' const panelLayoutStyles = cva({ base: 'gap-0 w-fit relative h-screen z-[var(--z-layout-panel)]', diff --git a/frontend/src/layout/panel-layout/PanelLayoutNavBar.tsx b/frontend/src/layout/panel-layout/PanelLayoutNavBar.tsx index 99897ea223..42df739b9e 100644 --- a/frontend/src/layout/panel-layout/PanelLayoutNavBar.tsx +++ b/frontend/src/layout/panel-layout/PanelLayoutNavBar.tsx @@ -1,3 +1,8 @@ +import { cva } from 'cva' +import { useActions, useValues } from 'kea' +import { router } from 'kea-router' +import { useRef } from 'react' + import { IconApps, IconChevronRight, @@ -13,35 +18,31 @@ import { IconToolbar, } from '@posthog/icons' import { Link } from '@posthog/lemon-ui' -import { cva } from 'cva' -import { useActions, useValues } from 'kea' -import { router } from 'kea-router' + import { commandBarLogic } from 'lib/components/CommandBar/commandBarLogic' import { DebugNotice } from 'lib/components/DebugNotice' import { Resizer } from 'lib/components/Resizer/Resizer' import { ScrollableShadows } from 'lib/components/ScrollableShadows/ScrollableShadows' - import { Popover } from 'lib/lemon-ui/Popover' import { ProfilePicture } from 'lib/lemon-ui/ProfilePicture' import { ButtonGroupPrimitive, ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' import { ListBox } from 'lib/ui/ListBox/ListBox' import { cn } from 'lib/utils/css-classes' import { removeProjectIdIfPresent } from 'lib/utils/router-utils' -import { useRef } from 'react' import { urls } from 'scenes/urls' import { userLogic } from 'scenes/userLogic' -import { panelLayoutLogic, PanelLayoutNavIdentifier } from '~/layout/panel-layout/panelLayoutLogic' import { PinnedFolder } from '~/layout/panel-layout/PinnedFolder/PinnedFolder' +import { PanelLayoutNavIdentifier, panelLayoutLogic } from '~/layout/panel-layout/panelLayoutLogic' import { SidePanelTab } from '~/types' -import { navigationLogic } from '../navigation/navigationLogic' -import { AccountPopoverOverlay } from '../navigation/TopBar/AccountPopover' import { KeyboardShortcut } from '../navigation-3000/components/KeyboardShortcut' import { navigation3000Logic } from '../navigation-3000/navigationLogic' import { SidePanelActivationIcon } from '../navigation-3000/sidepanel/panels/activation/SidePanelActivation' import { sidePanelLogic } from '../navigation-3000/sidepanel/sidePanelLogic' import { sidePanelStateLogic } from '../navigation-3000/sidepanel/sidePanelStateLogic' +import { AccountPopoverOverlay } from '../navigation/TopBar/AccountPopover' +import { navigationLogic } from '../navigation/navigationLogic' import { OrganizationDropdownMenu } from './OrganizationDropdownMenu' const navBarStyles = cva({ diff --git a/frontend/src/layout/panel-layout/PanelLayoutPanel.tsx b/frontend/src/layout/panel-layout/PanelLayoutPanel.tsx index 96c0d52e8a..b9c7d4a9a5 100644 --- a/frontend/src/layout/panel-layout/PanelLayoutPanel.tsx +++ b/frontend/src/layout/panel-layout/PanelLayoutPanel.tsx @@ -1,10 +1,12 @@ -import { IconPin, IconPinFilled, IconX } from '@posthog/icons' import { cva } from 'cva' import { useActions, useValues } from 'kea' +import { useRef } from 'react' + +import { IconPin, IconPinFilled, IconX } from '@posthog/icons' + import { ResizableElement } from 'lib/components/ResizeElement/ResizeElement' import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' import { cn } from 'lib/utils/css-classes' -import { useRef } from 'react' import { panelLayoutLogic } from '~/layout/panel-layout/panelLayoutLogic' diff --git a/frontend/src/layout/panel-layout/PersonsTree/personsTreeLogic.tsx b/frontend/src/layout/panel-layout/PersonsTree/personsTreeLogic.tsx index e110b651fd..899d02653b 100644 --- a/frontend/src/layout/panel-layout/PersonsTree/personsTreeLogic.tsx +++ b/frontend/src/layout/panel-layout/PersonsTree/personsTreeLogic.tsx @@ -1,9 +1,10 @@ import { afterMount, kea, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api, { CountedPaginatedResponse } from 'lib/api' import { rankPersons } from 'lib/components/CommandBar/searchBarLogic' -import { PersonType, SearchableEntity, SearchResponse } from '~/types' +import { PersonType, SearchResponse, SearchableEntity } from '~/types' import type { personsTreeLogicType } from './personsTreeLogicType' diff --git a/frontend/src/layout/panel-layout/PinnedFolder/PinnedFolder.tsx b/frontend/src/layout/panel-layout/PinnedFolder/PinnedFolder.tsx index c6c8718e0b..07675ac362 100644 --- a/frontend/src/layout/panel-layout/PinnedFolder/PinnedFolder.tsx +++ b/frontend/src/layout/panel-layout/PinnedFolder/PinnedFolder.tsx @@ -1,5 +1,7 @@ -import { IconCheck, IconGear, IconPlusSmall } from '@posthog/icons' import { useActions, useValues } from 'kea' + +import { IconCheck, IconGear, IconPlusSmall } from '@posthog/icons' + import { ItemSelectModalButton } from 'lib/components/FileSystem/ItemSelectModal/ItemSelectModal' import { IconBlank } from 'lib/lemon-ui/icons' import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' @@ -12,10 +14,10 @@ import { DropdownMenuTrigger, } from 'lib/ui/DropdownMenu/DropdownMenu' -import { panelLayoutLogic } from '~/layout/panel-layout/panelLayoutLogic' import { pinnedFolderLogic } from '~/layout/panel-layout/PinnedFolder/pinnedFolderLogic' import { ProjectTree } from '~/layout/panel-layout/ProjectTree/ProjectTree' import { formatUrlAsName } from '~/layout/panel-layout/ProjectTree/utils' +import { panelLayoutLogic } from '~/layout/panel-layout/panelLayoutLogic' export function PinnedFolder(): JSX.Element { const { isLayoutNavCollapsed } = useValues(panelLayoutLogic) diff --git a/frontend/src/layout/panel-layout/PinnedFolder/pinnedFolderLogic.tsx b/frontend/src/layout/panel-layout/PinnedFolder/pinnedFolderLogic.tsx index 3c6108408e..7ac1740e3e 100644 --- a/frontend/src/layout/panel-layout/PinnedFolder/pinnedFolderLogic.tsx +++ b/frontend/src/layout/panel-layout/PinnedFolder/pinnedFolderLogic.tsx @@ -1,5 +1,6 @@ import { actions, afterMount, kea, listeners, path, reducers } from 'kea' import { lazyLoaders } from 'kea-loaders' + import api from 'lib/api' import { getCurrentTeamIdOrNone, getCurrentUserIdOrNone } from 'lib/utils/getAppContext' diff --git a/frontend/src/layout/panel-layout/ProjectDropdownMenu.tsx b/frontend/src/layout/panel-layout/ProjectDropdownMenu.tsx index c167f17c7d..cf79a1f0ae 100644 --- a/frontend/src/layout/panel-layout/ProjectDropdownMenu.tsx +++ b/frontend/src/layout/panel-layout/ProjectDropdownMenu.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconCheck, IconGear, IconPlusSmall } from '@posthog/icons' import { LemonSnack, Link } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { upgradeModalLogic } from 'lib/components/UpgradeModal/upgradeModalLogic' import { FEATURE_FLAGS } from 'lib/constants' import { IconBlank } from 'lib/lemon-ui/icons' @@ -16,12 +18,14 @@ import { } from 'lib/ui/PopoverPrimitive/PopoverPrimitive' import { cn } from 'lib/utils/css-classes' import { getProjectSwitchTargetUrl } from 'lib/utils/router-utils' -import { organizationLogic } from 'scenes/organizationLogic' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' +import { organizationLogic } from 'scenes/organizationLogic' import { isAuthenticatedTeam, teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' + import { globalModalsLogic } from '~/layout/GlobalModals' import { AvailableFeature, TeamBasicType } from '~/types' + import { EnvironmentSwitcherOverlay } from '../navigation/EnvironmentSwitcher' export function ProjectName({ team }: { team: TeamBasicType }): JSX.Element { diff --git a/frontend/src/layout/panel-layout/ProjectTree/ProjectTree.tsx b/frontend/src/layout/panel-layout/ProjectTree/ProjectTree.tsx index e7527d5a93..de38429129 100644 --- a/frontend/src/layout/panel-layout/ProjectTree/ProjectTree.tsx +++ b/frontend/src/layout/panel-layout/ProjectTree/ProjectTree.tsx @@ -1,6 +1,9 @@ -import { IconCheckbox, IconChevronRight, IconFolderPlus, IconPlusSmall } from '@posthog/icons' import { BindLogic, useActions, useValues } from 'kea' import { router } from 'kea-router' +import { RefObject, useEffect, useRef, useState } from 'react' + +import { IconCheckbox, IconChevronRight, IconFolderPlus, IconPlusSmall } from '@posthog/icons' + import { moveToLogic } from 'lib/components/FileSystem/MoveTo/moveToLogic' import { ResizableElement } from 'lib/components/ResizeElement/ResizeElement' import { dayjs } from 'lib/dayjs' @@ -10,7 +13,6 @@ import { TreeNodeDisplayIcon } from 'lib/lemon-ui/LemonTree/LemonTreeUtils' import { ProfilePicture } from 'lib/lemon-ui/ProfilePicture/ProfilePicture' import { Tooltip } from 'lib/lemon-ui/Tooltip/Tooltip' import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' -import { removeProjectIdIfPresent } from 'lib/utils/router-utils' import { ContextMenuGroup, ContextMenuItem, @@ -28,23 +30,23 @@ import { DropdownMenuSubTrigger, } from 'lib/ui/DropdownMenu/DropdownMenu' import { cn } from 'lib/utils/css-classes' -import { RefObject, useEffect, useRef, useState } from 'react' +import { removeProjectIdIfPresent } from 'lib/utils/router-utils' -import { NewMenu } from '~/layout/panel-layout/menus/NewMenu' -import { panelLayoutLogic } from '~/layout/panel-layout/panelLayoutLogic' import { DashboardsMenuItems } from '~/layout/panel-layout/ProjectTree/menus/DashboardsMenuItems' import { projectTreeDataLogic } from '~/layout/panel-layout/ProjectTree/projectTreeDataLogic' +import { NewMenu } from '~/layout/panel-layout/menus/NewMenu' +import { panelLayoutLogic } from '~/layout/panel-layout/panelLayoutLogic' import { FileSystemEntry } from '~/queries/schema/schema-general' import { UserBasicType } from '~/types' import { PanelLayoutPanel } from '../PanelLayoutPanel' +import { TreeFiltersDropdownMenu } from './TreeFiltersDropdownMenu' +import { TreeSearchField } from './TreeSearchField' +import { TreeSortDropdownMenu } from './TreeSortDropdownMenu' import { BrowserLikeMenuItems } from './menus/BrowserLikeMenuItems' import { ProductAnalyticsMenuItems } from './menus/ProductAnalyticsMenuItems' import { SessionReplayMenuItems } from './menus/SessionReplayMenuItems' import { projectTreeLogic } from './projectTreeLogic' -import { TreeFiltersDropdownMenu } from './TreeFiltersDropdownMenu' -import { TreeSearchField } from './TreeSearchField' -import { TreeSortDropdownMenu } from './TreeSortDropdownMenu' import { calculateMovePath } from './utils' export interface ProjectTreeProps { diff --git a/frontend/src/layout/panel-layout/ProjectTree/TreeFiltersDropdownMenu.tsx b/frontend/src/layout/panel-layout/ProjectTree/TreeFiltersDropdownMenu.tsx index f65c319388..cec7c94bbf 100644 --- a/frontend/src/layout/panel-layout/ProjectTree/TreeFiltersDropdownMenu.tsx +++ b/frontend/src/layout/panel-layout/ProjectTree/TreeFiltersDropdownMenu.tsx @@ -1,5 +1,7 @@ -import { IconCheck, IconFilter } from '@posthog/icons' import { useValues } from 'kea' + +import { IconCheck, IconFilter } from '@posthog/icons' + import { IconBlank } from 'lib/lemon-ui/icons' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' diff --git a/frontend/src/layout/panel-layout/ProjectTree/TreeSearchField.tsx b/frontend/src/layout/panel-layout/ProjectTree/TreeSearchField.tsx index 388f341713..d6afcb7508 100644 --- a/frontend/src/layout/panel-layout/ProjectTree/TreeSearchField.tsx +++ b/frontend/src/layout/panel-layout/ProjectTree/TreeSearchField.tsx @@ -1,5 +1,7 @@ -import { IconCdCase, IconDocument, IconPlug, IconUser } from '@posthog/icons' import { useActions, useValues } from 'kea' + +import { IconCdCase, IconDocument, IconPlug, IconUser } from '@posthog/icons' + import { SearchAutocomplete } from 'lib/components/SearchAutocomplete/SearchAutocomplete' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' diff --git a/frontend/src/layout/panel-layout/ProjectTree/TreeSortDropdownMenu.tsx b/frontend/src/layout/panel-layout/ProjectTree/TreeSortDropdownMenu.tsx index 3935239a24..00e352318c 100644 --- a/frontend/src/layout/panel-layout/ProjectTree/TreeSortDropdownMenu.tsx +++ b/frontend/src/layout/panel-layout/ProjectTree/TreeSortDropdownMenu.tsx @@ -1,4 +1,5 @@ import { IconSort } from '@posthog/icons' + import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' import { DropdownMenu, diff --git a/frontend/src/layout/panel-layout/ProjectTree/defaultTree.tsx b/frontend/src/layout/panel-layout/ProjectTree/defaultTree.tsx index 5fa3e5dfc0..7323b700aa 100644 --- a/frontend/src/layout/panel-layout/ProjectTree/defaultTree.tsx +++ b/frontend/src/layout/panel-layout/ProjectTree/defaultTree.tsx @@ -1,3 +1,5 @@ +import React, { CSSProperties } from 'react' + import { IconAI, IconApp, @@ -24,9 +26,9 @@ import { IconUserPaths, IconWarning, } from '@posthog/icons' + import { FEATURE_FLAGS } from 'lib/constants' import { IconCohort } from 'lib/lemon-ui/icons' -import React, { CSSProperties } from 'react' import { urls } from 'scenes/urls' import { diff --git a/frontend/src/layout/panel-layout/ProjectTree/menus/DashboardsMenuItems.tsx b/frontend/src/layout/panel-layout/ProjectTree/menus/DashboardsMenuItems.tsx index 72ee3f7510..c54de074d8 100644 --- a/frontend/src/layout/panel-layout/ProjectTree/menus/DashboardsMenuItems.tsx +++ b/frontend/src/layout/panel-layout/ProjectTree/menus/DashboardsMenuItems.tsx @@ -1,6 +1,8 @@ -import { IconChevronRight } from '@posthog/icons' import { useValues } from 'kea' import { router } from 'kea-router' + +import { IconChevronRight } from '@posthog/icons' + import { Link } from 'lib/lemon-ui/Link' import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' import { diff --git a/frontend/src/layout/panel-layout/ProjectTree/menus/ProductAnalyticsMenuItems.tsx b/frontend/src/layout/panel-layout/ProjectTree/menus/ProductAnalyticsMenuItems.tsx index e39e0b2ca7..2ace6b4f9a 100644 --- a/frontend/src/layout/panel-layout/ProjectTree/menus/ProductAnalyticsMenuItems.tsx +++ b/frontend/src/layout/panel-layout/ProjectTree/menus/ProductAnalyticsMenuItems.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { Link } from 'lib/lemon-ui/Link/Link' import { DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator } from 'lib/ui/DropdownMenu/DropdownMenu' diff --git a/frontend/src/layout/panel-layout/ProjectTree/menus/SessionReplayMenuItems.tsx b/frontend/src/layout/panel-layout/ProjectTree/menus/SessionReplayMenuItems.tsx index e6ad017003..c616e3067f 100644 --- a/frontend/src/layout/panel-layout/ProjectTree/menus/SessionReplayMenuItems.tsx +++ b/frontend/src/layout/panel-layout/ProjectTree/menus/SessionReplayMenuItems.tsx @@ -1,12 +1,16 @@ import { useValues } from 'kea' +import { combineUrl } from 'kea-router' + +import { IconChevronRight } from '@posthog/icons' + import { Link } from 'lib/lemon-ui/Link' import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' import { DropdownMenuItem, - DropdownMenuSub, - DropdownMenuSubTrigger, - DropdownMenuSubContent, DropdownMenuSeparator, + DropdownMenuSub, + DropdownMenuSubContent, + DropdownMenuSubTrigger, } from 'lib/ui/DropdownMenu/DropdownMenu' import { savedSessionRecordingPlaylistsLogic } from 'scenes/session-recordings/saved-playlists/savedSessionRecordingPlaylistsLogic' import { urls } from 'scenes/urls' @@ -14,8 +18,6 @@ import { urls } from 'scenes/urls' import { ReplayTabs } from '~/types' import { CustomMenuProps } from '../types' -import { combineUrl } from 'kea-router' -import { IconChevronRight } from '@posthog/icons' export function SessionReplayMenuItems({ MenuItem = DropdownMenuItem, diff --git a/frontend/src/layout/panel-layout/ProjectTree/projectTreeDataLogic.tsx b/frontend/src/layout/panel-layout/ProjectTree/projectTreeDataLogic.tsx index 0022c44e58..40f16db028 100644 --- a/frontend/src/layout/panel-layout/ProjectTree/projectTreeDataLogic.tsx +++ b/frontend/src/layout/panel-layout/ProjectTree/projectTreeDataLogic.tsx @@ -1,6 +1,8 @@ -import { IconPlus } from '@posthog/icons' import { actions, afterMount, connect, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' + +import { IconPlus } from '@posthog/icons' + import api from 'lib/api' import { GroupsAccessStatus } from 'lib/introductions/groupsAccessLogic' import { lemonToast } from 'lib/lemon-ui/LemonToast' @@ -18,7 +20,7 @@ import { getDefaultTreePersons, getDefaultTreeProducts, } from '~/layout/panel-layout/ProjectTree/defaultTree' -import { projectTreeLogic, RecentResults, SearchResults } from '~/layout/panel-layout/ProjectTree/projectTreeLogic' +import { RecentResults, SearchResults, projectTreeLogic } from '~/layout/panel-layout/ProjectTree/projectTreeLogic' import { FolderState, ProjectTreeAction } from '~/layout/panel-layout/ProjectTree/types' import { appendResultsToFolders, @@ -30,10 +32,10 @@ import { sortFilesAndFolders, splitPath, } from '~/layout/panel-layout/ProjectTree/utils' +import { FEATURE_FLAGS } from '~/lib/constants' import { groupsModel } from '~/models/groupsModel' import { FileSystemEntry, FileSystemImport } from '~/queries/schema/schema-general' import { UserBasicType } from '~/types' -import { FEATURE_FLAGS } from '~/lib/constants' import type { projectTreeDataLogicType } from './projectTreeDataLogicType' diff --git a/frontend/src/layout/panel-layout/ProjectTree/projectTreeLogic.tsx b/frontend/src/layout/panel-layout/ProjectTree/projectTreeLogic.tsx index 223e097941..6e0b31ff52 100644 --- a/frontend/src/layout/panel-layout/ProjectTree/projectTreeLogic.tsx +++ b/frontend/src/layout/panel-layout/ProjectTree/projectTreeLogic.tsx @@ -1,9 +1,11 @@ -import { IconPlus } from '@posthog/icons' -import { Link, ProfilePicture, Spinner } from '@posthog/lemon-ui' import { actions, afterMount, connect, kea, key, listeners, path, props, propsChanged, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { router } from 'kea-router' import { subscriptions } from 'kea-subscriptions' + +import { IconPlus } from '@posthog/icons' +import { Link, ProfilePicture, Spinner } from '@posthog/lemon-ui' + import api from 'lib/api' import { dayjs } from 'lib/dayjs' import { LemonTreeSelectMode, TreeDataItem, TreeMode, TreeTableViewKeys } from 'lib/lemon-ui/LemonTree/LemonTree' diff --git a/frontend/src/layout/panel-layout/ProjectTree/types.ts b/frontend/src/layout/panel-layout/ProjectTree/types.ts index ac094304ed..bc65dcf8f8 100644 --- a/frontend/src/layout/panel-layout/ProjectTree/types.ts +++ b/frontend/src/layout/panel-layout/ProjectTree/types.ts @@ -1,16 +1,16 @@ import { ContextMenuItem, ContextMenuSeparator, - ContextMenuSubTrigger, - ContextMenuSubContent, ContextMenuSub, + ContextMenuSubContent, + ContextMenuSubTrigger, } from 'lib/ui/ContextMenu/ContextMenu' import { DropdownMenuItem, DropdownMenuSeparator, DropdownMenuSub, - DropdownMenuSubTrigger, DropdownMenuSubContent, + DropdownMenuSubTrigger, } from 'lib/ui/DropdownMenu/DropdownMenu' import { FileSystemEntry } from '~/queries/schema/schema-general' diff --git a/frontend/src/layout/panel-layout/ProjectTree/utils.tsx b/frontend/src/layout/panel-layout/ProjectTree/utils.tsx index 145fc06e57..dd5aca9d81 100644 --- a/frontend/src/layout/panel-layout/ProjectTree/utils.tsx +++ b/frontend/src/layout/panel-layout/ProjectTree/utils.tsx @@ -1,5 +1,6 @@ import { IconPlus, IconShortcut } from '@posthog/icons' import { Spinner } from '@posthog/lemon-ui' + import { TreeDataItem } from 'lib/lemon-ui/LemonTree/LemonTree' import { SearchHighlightMultiple } from '~/layout/navigation-3000/components/SearchHighlight' diff --git a/frontend/src/layout/panel-layout/menus/NewMenu.tsx b/frontend/src/layout/panel-layout/menus/NewMenu.tsx index 50c22a3aca..6f91dd4d25 100644 --- a/frontend/src/layout/panel-layout/menus/NewMenu.tsx +++ b/frontend/src/layout/panel-layout/menus/NewMenu.tsx @@ -1,6 +1,8 @@ -import { IconChevronRight, IconFolder } from '@posthog/icons' import { useActions, useValues } from 'kea' import { router } from 'kea-router' + +import { IconChevronRight, IconFolder } from '@posthog/icons' + import { TreeDataItem } from 'lib/lemon-ui/LemonTree/LemonTree' import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' import { diff --git a/frontend/src/layout/panel-layout/panelLayoutLogic.tsx b/frontend/src/layout/panel-layout/panelLayoutLogic.tsx index 34b9891ce4..d3fafde26d 100644 --- a/frontend/src/layout/panel-layout/panelLayoutLogic.tsx +++ b/frontend/src/layout/panel-layout/panelLayoutLogic.tsx @@ -1,5 +1,6 @@ import { actions, connect, kea, listeners, path, reducers, selectors } from 'kea' import { router } from 'kea-router' + import { LemonTreeRef } from 'lib/lemon-ui/LemonTree/LemonTree' import { removeProjectIdIfPresent } from 'lib/utils/router-utils' diff --git a/frontend/src/layout/scenes/SceneContent.tsx b/frontend/src/layout/scenes/SceneContent.tsx index 8721f60239..7422ea0aec 100644 --- a/frontend/src/layout/scenes/SceneContent.tsx +++ b/frontend/src/layout/scenes/SceneContent.tsx @@ -1,20 +1,23 @@ +import { useValues } from 'kea' +import { useEffect, useState } from 'react' + +import { IconDocument } from '@posthog/icons' import { LemonDivider, Link } from '@posthog/lemon-ui' +import { FEATURE_FLAGS } from 'lib/constants' import { LemonMarkdown } from 'lib/lemon-ui/LemonMarkdown' +import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { ButtonPrimitive, buttonPrimitiveVariants } from 'lib/ui/Button/ButtonPrimitives' -import { TextareaPrimitive } from 'lib/ui/TextareaPrimitive/TextareaPrimitive' import { TextInputPrimitive } from 'lib/ui/TextInputPrimitive/TextInputPrimitive' +import { TextareaPrimitive } from 'lib/ui/TextareaPrimitive/TextareaPrimitive' import { WrappingLoadingSkeleton } from 'lib/ui/WrappingLoadingSkeleton/WrappingLoadingSkeleton' import { cn } from 'lib/utils/css-classes' -import { useEffect, useState } from 'react' + import { fileSystemTypes } from '~/products' -import { iconForType, ProductIconWrapper } from '../panel-layout/ProjectTree/defaultTree' -import { IconDocument } from '@posthog/icons' -import { FEATURE_FLAGS } from 'lib/constants' -import { useValues } from 'kea' -import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { FileSystemIconColor } from '~/types' +import { ProductIconWrapper, iconForType } from '../panel-layout/ProjectTree/defaultTree' + export function SceneContent({ children }: { children: React.ReactNode }): JSX.Element { return
{children}
} diff --git a/frontend/src/layout/scenes/SceneHeader.tsx b/frontend/src/layout/scenes/SceneHeader.tsx index c5e2f3d647..b7389a2217 100644 --- a/frontend/src/layout/scenes/SceneHeader.tsx +++ b/frontend/src/layout/scenes/SceneHeader.tsx @@ -1,23 +1,26 @@ +import { useActions, useValues } from 'kea' +import React, { useState } from 'react' + import { IconChevronDown, IconGear, IconInfo, IconPencil, IconX } from '@posthog/icons' import { LemonButton, LemonTag } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' -import { IconMenu, IconSlash } from 'lib/lemon-ui/icons' -import { Link } from 'lib/lemon-ui/Link' -import { cn } from 'lib/utils/css-classes' -import React, { useState } from 'react' import { EditableField } from 'lib/components/EditableField/EditableField' import { ScrollableShadows } from 'lib/components/ScrollableShadows/ScrollableShadows' import { TopBarSettingsButton } from 'lib/components/TopBarSettingsButton/TopBarSettingsButton' +import { Link } from 'lib/lemon-ui/Link' +import { IconMenu, IconSlash } from 'lib/lemon-ui/icons' import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' +import { cn } from 'lib/utils/css-classes' + import { ErrorBoundary } from '~/layout/ErrorBoundary' import { breadcrumbsLogic } from '~/layout/navigation/Breadcrumbs/breadcrumbsLogic' import { navigationLogic } from '~/layout/navigation/navigationLogic' -import { panelLayoutLogic } from '~/layout/panel-layout/panelLayoutLogic' import { PROJECT_TREE_KEY } from '~/layout/panel-layout/ProjectTree/ProjectTree' import { projectTreeDataLogic } from '~/layout/panel-layout/ProjectTree/projectTreeDataLogic' import { projectTreeLogic } from '~/layout/panel-layout/ProjectTree/projectTreeLogic' +import { panelLayoutLogic } from '~/layout/panel-layout/panelLayoutLogic' import { Breadcrumb as IBreadcrumb } from '~/types' + import { ProjectDropdownMenu } from '../panel-layout/ProjectDropdownMenu' import { sceneLayoutLogic } from './sceneLayoutLogic' diff --git a/frontend/src/layout/scenes/SceneLayout.tsx b/frontend/src/layout/scenes/SceneLayout.tsx index 15ea12832d..90e5727ba7 100644 --- a/frontend/src/layout/scenes/SceneLayout.tsx +++ b/frontend/src/layout/scenes/SceneLayout.tsx @@ -1,16 +1,21 @@ +import './SceneLayout.css' + +import { useActions, useValues } from 'kea' +import React, { PropsWithChildren, useEffect, useRef } from 'react' +import { createPortal } from 'react-dom' + import { IconInfo, IconX } from '@posthog/icons' import { LemonDivider } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { ScrollableShadows } from 'lib/components/ScrollableShadows/ScrollableShadows' import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' import { Label, LabelProps } from 'lib/ui/Label/Label' import { cn } from 'lib/utils/css-classes' -import React, { PropsWithChildren, useEffect, useRef } from 'react' -import { createPortal } from 'react-dom' import { SceneConfig } from 'scenes/sceneTypes' + import { SceneTabs } from '~/layout/scenes/SceneTabs' + import { SceneHeader } from './SceneHeader' -import './SceneLayout.css' import { sceneLayoutLogic } from './sceneLayoutLogic' type SceneLayoutProps = { diff --git a/frontend/src/layout/scenes/SceneTabContextMenu.tsx b/frontend/src/layout/scenes/SceneTabContextMenu.tsx index 556181c8fe..511c99ddae 100644 --- a/frontend/src/layout/scenes/SceneTabContextMenu.tsx +++ b/frontend/src/layout/scenes/SceneTabContextMenu.tsx @@ -1,11 +1,14 @@ -import React from 'react' import { useActions, useValues } from 'kea' -import { sceneLogic } from '~/scenes/sceneLogic' -import { ContextMenu, ContextMenuContent, ContextMenuItem, ContextMenuTrigger } from 'lib/ui/ContextMenu/ContextMenu' +import React from 'react' + +import { IconChevronLeft, IconChevronRight, IconCopy, IconExternal, IconPencil, IconX } from '@posthog/icons' + import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' -import { IconCopy, IconX, IconChevronRight, IconChevronLeft, IconExternal, IconPencil } from '@posthog/icons' +import { ContextMenu, ContextMenuContent, ContextMenuItem, ContextMenuTrigger } from 'lib/ui/ContextMenu/ContextMenu' import { SceneTab } from 'scenes/sceneTypes' +import { sceneLogic } from '~/scenes/sceneLogic' + export function SceneTabContextMenu({ tab, children }: { tab: SceneTab; children: React.ReactElement }): JSX.Element { const { tabs } = useValues(sceneLogic) const { setTabs, removeTab, duplicateTab, renameTab } = useActions(sceneLogic) diff --git a/frontend/src/layout/scenes/SceneTabs.tsx b/frontend/src/layout/scenes/SceneTabs.tsx index 357716df25..9979d37e8d 100644 --- a/frontend/src/layout/scenes/SceneTabs.tsx +++ b/frontend/src/layout/scenes/SceneTabs.tsx @@ -1,18 +1,20 @@ -import { IconPlus, IconX } from '@posthog/icons' -import { cn } from 'lib/utils/css-classes' - +import { DndContext, DragEndEvent, PointerSensor, useSensor, useSensors } from '@dnd-kit/core' +import { SortableContext, horizontalListSortingStrategy, useSortable } from '@dnd-kit/sortable' +import { CSS } from '@dnd-kit/utilities' import { useActions, useValues } from 'kea' + +import { IconPlus, IconX } from '@posthog/icons' + import { Link } from 'lib/lemon-ui/Link' +import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' +import { cn } from 'lib/utils/css-classes' +import { SceneTab } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' + +import { SceneTabContextMenu } from '~/layout/scenes/SceneTabContextMenu' import { sceneLogic } from '~/scenes/sceneLogic' -import { DndContext, DragEndEvent, PointerSensor, useSensor, useSensors } from '@dnd-kit/core' -import { horizontalListSortingStrategy, SortableContext, useSortable } from '@dnd-kit/sortable' -import { CSS } from '@dnd-kit/utilities' -import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' import { ProjectDropdownMenu } from '../panel-layout/ProjectDropdownMenu' -import { SceneTabContextMenu } from '~/layout/scenes/SceneTabContextMenu' -import { SceneTab } from 'scenes/sceneTypes' export interface SceneTabsProps { className?: string diff --git a/frontend/src/layout/scenes/sceneLayoutLogic.tsx b/frontend/src/layout/scenes/sceneLayoutLogic.tsx index 9e2805576a..e4a68b2be4 100644 --- a/frontend/src/layout/scenes/sceneLayoutLogic.tsx +++ b/frontend/src/layout/scenes/sceneLayoutLogic.tsx @@ -1,9 +1,10 @@ -import { actions, connect, kea, path, reducers, selectors, listeners, afterMount, beforeUnmount } from 'kea' -import type { sceneLayoutLogicType } from './sceneLayoutLogicType' +import { actions, afterMount, beforeUnmount, connect, kea, listeners, path, reducers, selectors } from 'kea' +import React from 'react' + import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import React from 'react' +import type { sceneLayoutLogicType } from './sceneLayoutLogicType' export type SceneLayoutContainerRef = React.RefObject | null diff --git a/frontend/src/lib/Chart.ts b/frontend/src/lib/Chart.ts index 07dce6c9c8..e5af591c02 100644 --- a/frontend/src/lib/Chart.ts +++ b/frontend/src/lib/Chart.ts @@ -1,6 +1,7 @@ /* oxlint-disable no-restricted-imports */ -import { Chart as RawChart, ChartType, DefaultDataPoint, registerables, Tooltip } from 'chart.js' +import { ChartType, DefaultDataPoint, Chart as RawChart, Tooltip, registerables } from 'chart.js' import CrosshairPlugin from 'chartjs-plugin-crosshair' + import { inStorybookTestRunner } from 'lib/utils' if (registerables) { diff --git a/frontend/src/lib/KeaDevTools.tsx b/frontend/src/lib/KeaDevTools.tsx index dd6a68dd95..7e6d255aae 100644 --- a/frontend/src/lib/KeaDevTools.tsx +++ b/frontend/src/lib/KeaDevTools.tsx @@ -1,7 +1,7 @@ // KeaDevtools.tsx -import React, { useEffect, useMemo, useRef, useState } from 'react' import { getContext } from 'kea' import type { BuiltLogic, Context as KeaContext } from 'kea' +import React, { useEffect, useMemo, useRef, useState } from 'react' type MountedMap = Record type SortMode = 'alpha' | 'recent' diff --git a/frontend/src/lib/api.test.ts b/frontend/src/lib/api.test.ts index e4d1700244..2b23b61db1 100644 --- a/frontend/src/lib/api.test.ts +++ b/frontend/src/lib/api.test.ts @@ -1,6 +1,7 @@ -import api, { ApiRequest } from 'lib/api' import posthog from 'posthog-js' +import api, { ApiRequest } from 'lib/api' + import { PropertyFilterType, PropertyOperator } from '~/types' describe('API helper', () => { diff --git a/frontend/src/lib/api.ts b/frontend/src/lib/api.ts index 8b2d6c83cd..d68da346c5 100644 --- a/frontend/src/lib/api.ts +++ b/frontend/src/lib/api.ts @@ -1,17 +1,19 @@ import { EventSourceMessage, fetchEventSource } from '@microsoft/fetch-event-source' +import { encodeParams } from 'kea-router' +import posthog from 'posthog-js' + import { ErrorTrackingRule, ErrorTrackingRuleType, } from '@posthog/products-error-tracking/frontend/configuration/rules/types' -import { encodeParams } from 'kea-router' + import { ActivityLogProps } from 'lib/components/ActivityLog/ActivityLog' import { ActivityLogItem } from 'lib/components/ActivityLog/humanizeActivity' import { dayjs } from 'lib/dayjs' import { apiStatusLogic } from 'lib/logic/apiStatusLogic' import { humanFriendlyDuration, objectClean, toParams } from 'lib/utils' -import posthog from 'posthog-js' -import { HogFlow } from 'products/messaging/frontend/Campaigns/hogflows/types' -import { MessageTemplate } from 'products/messaging/frontend/TemplateLibrary/messageTemplatesLogic' +import { MaxBillingContext } from 'scenes/max/maxBillingContextLogic' +import { NotebookListItemType, NotebookNodeResource, NotebookType } from 'scenes/notebooks/types' import { RecordingComment } from 'scenes/session-recordings/player/inspector/playerInspectorLogic' import { SavedSessionRecordingPlaylistsResult } from 'scenes/session-recordings/saved-playlists/savedSessionRecordingPlaylistsLogic' import { LINK_PAGE_SIZE, SURVEY_PAGE_SIZE } from 'scenes/surveys/constants' @@ -79,8 +81,8 @@ import { EventDefinition, EventDefinitionMetrics, EventDefinitionType, - EventsListQueryParams, EventType, + EventsListQueryParams, Experiment, ExportedAssetType, ExternalDataJob, @@ -103,9 +105,9 @@ import { IntegrationType, LineageGraph, LinearTeamType, + LinkType, LinkedInAdsAccountType, LinkedInAdsConversionRuleType, - LinkType, ListOrganizationMembersParams, LogEntry, LogEntryRequestParams, @@ -118,9 +120,9 @@ import { OrganizationMemberType, OrganizationResourcePermissionType, OrganizationType, - PersonalAPIKeyType, PersonListParams, PersonType, + PersonalAPIKeyType, PluginConfigTypeNew, PluginConfigWithPluginInfoNew, PluginLogEntry, @@ -133,8 +135,8 @@ import { RawBatchExportBackfill, RawBatchExportRun, RoleMemberType, - RolesListParams, RoleType, + RolesListParams, ScheduledChangeType, SchemaIncrementalFieldsResponse, SearchListParams, @@ -156,6 +158,10 @@ import { UserType, } from '~/types' +import { HogFlow } from 'products/messaging/frontend/Campaigns/hogflows/types' +import { OptOutEntry } from 'products/messaging/frontend/OptOuts/optOutListLogic' +import { MessageTemplate } from 'products/messaging/frontend/TemplateLibrary/messageTemplatesLogic' + import { MaxUIContext } from '../scenes/max/maxTypes' import { AlertType, AlertTypeWrite } from './components/Alerts/types' import { @@ -172,9 +178,6 @@ import { LOGS_PORTION_LIMIT, } from './constants' import type { ProductIntentProperties } from './utils/product-intents' -import { OptOutEntry } from 'products/messaging/frontend/OptOuts/optOutListLogic' -import { NotebookListItemType, NotebookNodeResource, NotebookType } from 'scenes/notebooks/types' -import { MaxBillingContext } from 'scenes/max/maxBillingContextLogic' /** * WARNING: Be very careful importing things here. This file is heavily used and can trigger a lot of cyclic imports diff --git a/frontend/src/lib/components/AccessDenied/index.tsx b/frontend/src/lib/components/AccessDenied/index.tsx index d64732eae8..c71a0e735c 100644 --- a/frontend/src/lib/components/AccessDenied/index.tsx +++ b/frontend/src/lib/components/AccessDenied/index.tsx @@ -1,5 +1,7 @@ import { useActions } from 'kea' + import { Link } from 'lib/lemon-ui/Link' + import noAccessNopehog from 'public/no-access-nopehog.png' import { supportLogic } from '../Support/supportLogic' diff --git a/frontend/src/lib/components/ActivityLog/ActivityLog.stories.tsx b/frontend/src/lib/components/ActivityLog/ActivityLog.stories.tsx index 26571bba4e..f362f334ef 100644 --- a/frontend/src/lib/components/ActivityLog/ActivityLog.stories.tsx +++ b/frontend/src/lib/components/ActivityLog/ActivityLog.stories.tsx @@ -1,11 +1,12 @@ import { Meta } from '@storybook/react' + +import { ActivityLog } from 'lib/components/ActivityLog/ActivityLog' import { featureFlagsActivityResponseJson, insightsActivityResponseJson, personActivityResponseJson, teamActivityResponseJson, } from 'lib/components/ActivityLog/__mocks__/activityLogMocks' -import { ActivityLog } from 'lib/components/ActivityLog/ActivityLog' import { mswDecorator, useStorybookMocks } from '~/mocks/browser' import organizationCurrent from '~/mocks/fixtures/api/organizations/@current/@current.json' diff --git a/frontend/src/lib/components/ActivityLog/ActivityLog.tsx b/frontend/src/lib/components/ActivityLog/ActivityLog.tsx index e41c94ea0f..9bf769a2dd 100644 --- a/frontend/src/lib/components/ActivityLog/ActivityLog.tsx +++ b/frontend/src/lib/components/ActivityLog/ActivityLog.tsx @@ -1,11 +1,14 @@ import './ActivityLog.scss' -import { IconCollapse, IconExpand } from '@posthog/icons' -import { LemonButton, LemonDivider, LemonTabs } from '@posthog/lemon-ui' import useSize from '@react-hook/size' import clsx from 'clsx' import { useValues } from 'kea' -import { activityLogLogic, ActivityLogLogicProps } from 'lib/components/ActivityLog/activityLogLogic' +import { useRef, useState } from 'react' + +import { IconCollapse, IconExpand } from '@posthog/icons' +import { LemonButton, LemonDivider, LemonTabs } from '@posthog/lemon-ui' + +import { ActivityLogLogicProps, activityLogLogic } from 'lib/components/ActivityLog/activityLogLogic' import { ActivityChange, HumanizedActivityLogItem } from 'lib/components/ActivityLog/humanizeActivity' import { TZLabel } from 'lib/components/TZLabel' import { FEATURE_FLAGS } from 'lib/constants' @@ -13,7 +16,6 @@ import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' import { PaginationControl, usePagination } from 'lib/lemon-ui/PaginationControl' import { ProfilePicture } from 'lib/lemon-ui/ProfilePicture' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { useRef, useState } from 'react' import { billingLogic } from 'scenes/billing/billingLogic' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/lib/components/ActivityLog/activityDescriptions/tagActivityDescriber.tsx b/frontend/src/lib/components/ActivityLog/activityDescriptions/tagActivityDescriber.tsx index 1954bdd30c..b1f3c4e569 100644 --- a/frontend/src/lib/components/ActivityLog/activityDescriptions/tagActivityDescriber.tsx +++ b/frontend/src/lib/components/ActivityLog/activityDescriptions/tagActivityDescriber.tsx @@ -1,13 +1,14 @@ import { ActivityLogItem, - defaultDescriber, HumanizedChange, + defaultDescriber, userNameForLogItem, } from 'lib/components/ActivityLog/humanizeActivity' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { Link } from 'lib/lemon-ui/Link' import { getDisplayNameFromEntityFilter } from 'scenes/insights/utils' import { urls } from 'scenes/urls' + import { getFilterLabel } from '~/taxonomy/helpers' import { EntityFilter } from '~/types' diff --git a/frontend/src/lib/components/ActivityLog/activityLogLogic.feature-flag.test.tsx b/frontend/src/lib/components/ActivityLog/activityLogLogic.feature-flag.test.tsx index 06526397f4..28f73f1a22 100644 --- a/frontend/src/lib/components/ActivityLog/activityLogLogic.feature-flag.test.tsx +++ b/frontend/src/lib/components/ActivityLog/activityLogLogic.feature-flag.test.tsx @@ -1,8 +1,8 @@ -import '@testing-library/jest-dom' - -import { render } from '@testing-library/react' import { MOCK_TEAM_ID } from 'lib/api.mock' +import '@testing-library/jest-dom' +import { render } from '@testing-library/react' + import { ActivityScope } from '~/types' import { makeTestSetup } from './activityLogLogic.test.setup' diff --git a/frontend/src/lib/components/ActivityLog/activityLogLogic.insight.test.tsx b/frontend/src/lib/components/ActivityLog/activityLogLogic.insight.test.tsx index c64ed9f300..c9b3a9bcd7 100644 --- a/frontend/src/lib/components/ActivityLog/activityLogLogic.insight.test.tsx +++ b/frontend/src/lib/components/ActivityLog/activityLogLogic.insight.test.tsx @@ -1,7 +1,8 @@ -import '@testing-library/jest-dom' - -import { render } from '@testing-library/react' import { MOCK_TEAM_ID } from 'lib/api.mock' + +import '@testing-library/jest-dom' +import { render } from '@testing-library/react' + import { makeTestSetup } from 'lib/components/ActivityLog/activityLogLogic.test.setup' import { BreakdownFilter } from '~/queries/schema/schema-general' diff --git a/frontend/src/lib/components/ActivityLog/activityLogLogic.notebook.test.tsx b/frontend/src/lib/components/ActivityLog/activityLogLogic.notebook.test.tsx index e969764ed7..19c004a54e 100644 --- a/frontend/src/lib/components/ActivityLog/activityLogLogic.notebook.test.tsx +++ b/frontend/src/lib/components/ActivityLog/activityLogLogic.notebook.test.tsx @@ -1,6 +1,6 @@ import '@testing-library/jest-dom' - import { render } from '@testing-library/react' + import { describerFor } from 'lib/components/ActivityLog/activityLogLogic' import { ActivityLogItem, humanize } from 'lib/components/ActivityLog/humanizeActivity' diff --git a/frontend/src/lib/components/ActivityLog/activityLogLogic.person.test.tsx b/frontend/src/lib/components/ActivityLog/activityLogLogic.person.test.tsx index 988b1b741f..19fd22002b 100644 --- a/frontend/src/lib/components/ActivityLog/activityLogLogic.person.test.tsx +++ b/frontend/src/lib/components/ActivityLog/activityLogLogic.person.test.tsx @@ -1,7 +1,8 @@ -import '@testing-library/jest-dom' - -import { render } from '@testing-library/react' import { MOCK_TEAM_ID } from 'lib/api.mock' + +import '@testing-library/jest-dom' +import { render } from '@testing-library/react' + import { makeTestSetup } from 'lib/components/ActivityLog/activityLogLogic.test.setup' import { ActivityScope } from '~/types' diff --git a/frontend/src/lib/components/ActivityLog/activityLogLogic.plugin.test.tsx b/frontend/src/lib/components/ActivityLog/activityLogLogic.plugin.test.tsx index 3e4dbf573e..9922f3947e 100644 --- a/frontend/src/lib/components/ActivityLog/activityLogLogic.plugin.test.tsx +++ b/frontend/src/lib/components/ActivityLog/activityLogLogic.plugin.test.tsx @@ -1,8 +1,9 @@ -import '@testing-library/jest-dom' - -import { render } from '@testing-library/react' -import { ApiConfig } from 'lib/api' import { MOCK_ORGANIZATION_ID } from 'lib/api.mock' + +import '@testing-library/jest-dom' +import { render } from '@testing-library/react' + +import { ApiConfig } from 'lib/api' import { makeTestSetup } from 'lib/components/ActivityLog/activityLogLogic.test.setup' import { ActivityScope } from '~/types' diff --git a/frontend/src/lib/components/ActivityLog/activityLogLogic.test.setup.ts b/frontend/src/lib/components/ActivityLog/activityLogLogic.test.setup.ts index 3091e673ba..33df2a5bc8 100644 --- a/frontend/src/lib/components/ActivityLog/activityLogLogic.test.setup.ts +++ b/frontend/src/lib/components/ActivityLog/activityLogLogic.test.setup.ts @@ -1,4 +1,5 @@ import { expectLogic } from 'kea-test-utils' + import { activityLogLogic } from 'lib/components/ActivityLog/activityLogLogic' import { ActivityChange, ActivityLogItem, PersonMerge, Trigger } from 'lib/components/ActivityLog/humanizeActivity' diff --git a/frontend/src/lib/components/ActivityLog/activityLogLogic.test.tsx b/frontend/src/lib/components/ActivityLog/activityLogLogic.test.tsx index e59627330e..29584e2bd8 100644 --- a/frontend/src/lib/components/ActivityLog/activityLogLogic.test.tsx +++ b/frontend/src/lib/components/ActivityLog/activityLogLogic.test.tsx @@ -1,7 +1,8 @@ -import '@testing-library/jest-dom' - -import { expectLogic } from 'kea-test-utils' import { MOCK_TEAM_ID } from 'lib/api.mock' + +import '@testing-library/jest-dom' +import { expectLogic } from 'kea-test-utils' + import { featureFlagsActivityResponseJson } from 'lib/components/ActivityLog/__mocks__/activityLogMocks' import { activityLogLogic, describerFor } from 'lib/components/ActivityLog/activityLogLogic' import { ActivityLogItem, humanize } from 'lib/components/ActivityLog/humanizeActivity' diff --git a/frontend/src/lib/components/ActivityLog/activityLogLogic.tsx b/frontend/src/lib/components/ActivityLog/activityLogLogic.tsx index e534928178..c7098f3804 100644 --- a/frontend/src/lib/components/ActivityLog/activityLogLogic.tsx +++ b/frontend/src/lib/components/ActivityLog/activityLogLogic.tsx @@ -1,14 +1,17 @@ -import { errorTrackingActivityDescriber } from '@posthog/products-error-tracking/frontend/errorTrackingActivityDescriber' import { actions, events, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { router, urlToAction } from 'kea-router' + +import { errorTrackingActivityDescriber } from '@posthog/products-error-tracking/frontend/errorTrackingActivityDescriber' + import api, { ActivityLogPaginatedResponse } from 'lib/api' +import { tagActivityDescriber } from 'lib/components/ActivityLog/activityDescriptions/tagActivityDescriber' import { ActivityLogItem, - defaultDescriber, Describer, - humanize, HumanizedActivityLogItem, + defaultDescriber, + humanize, } from 'lib/components/ActivityLog/humanizeActivity' import { ACTIVITY_PAGE_SIZE } from 'lib/constants' import { PaginationManual } from 'lib/lemon-ui/PaginationControl' @@ -26,10 +29,9 @@ import { personActivityDescriber } from 'scenes/persons/activityDescriptions' import { pluginActivityDescriber } from 'scenes/pipeline/pipelinePluginActivityDescriptions' import { insightActivityDescriber } from 'scenes/saved-insights/activityDescriptions' import { replayActivityDescriber } from 'scenes/session-recordings/activityDescription' -import { surveyActivityDescriber } from 'scenes/surveys/surveyActivityDescriber' import { organizationActivityDescriber } from 'scenes/settings/organization/activityDescriptions' +import { surveyActivityDescriber } from 'scenes/surveys/surveyActivityDescriber' import { teamActivityDescriber } from 'scenes/team-activity/teamActivityDescriber' -import { tagActivityDescriber } from 'lib/components/ActivityLog/activityDescriptions/tagActivityDescriber' import { urls } from 'scenes/urls' import { ActivityScope, PipelineNodeTab, PipelineStage, PipelineTab } from '~/types' diff --git a/frontend/src/lib/components/AddToDashboard/AddToDashboard.tsx b/frontend/src/lib/components/AddToDashboard/AddToDashboard.tsx index f00052d7ab..86d8221115 100644 --- a/frontend/src/lib/components/AddToDashboard/AddToDashboard.tsx +++ b/frontend/src/lib/components/AddToDashboard/AddToDashboard.tsx @@ -1,7 +1,9 @@ -import { IconDashboard } from '@posthog/icons' import { useValues } from 'kea' -import { IconWithCount } from 'lib/lemon-ui/icons' + +import { IconDashboard } from '@posthog/icons' + import { LemonButton } from 'lib/lemon-ui/LemonButton' +import { IconWithCount } from 'lib/lemon-ui/icons' import { dashboardsModel } from '~/models/dashboardsModel' import { QueryBasedInsightModel } from '~/types' diff --git a/frontend/src/lib/components/AddToDashboard/AddToDashboardModal.tsx b/frontend/src/lib/components/AddToDashboard/AddToDashboardModal.tsx index d9cb1e28fd..f8442c1971 100644 --- a/frontend/src/lib/components/AddToDashboard/AddToDashboardModal.tsx +++ b/frontend/src/lib/components/AddToDashboard/AddToDashboardModal.tsx @@ -1,6 +1,11 @@ -import { IconHome } from '@posthog/icons' import clsx from 'clsx' import { useActions, useValues } from 'kea' +import { CSSProperties } from 'react' +import { AutoSizer } from 'react-virtualized/dist/es/AutoSizer' +import { List, ListRowProps, ListRowRenderer } from 'react-virtualized/dist/es/List' + +import { IconHome } from '@posthog/icons' + import { addToDashboardModalLogic } from 'lib/components/AddToDashboard/addToDashboardModalLogic' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonInput } from 'lib/lemon-ui/LemonInput/LemonInput' @@ -8,9 +13,6 @@ import { LemonModal } from 'lib/lemon-ui/LemonModal' import { Link } from 'lib/lemon-ui/Link' import { Tooltip } from 'lib/lemon-ui/Tooltip' import { pluralize } from 'lib/utils' -import { CSSProperties } from 'react' -import { AutoSizer } from 'react-virtualized/dist/es/AutoSizer' -import { List, ListRowProps, ListRowRenderer } from 'react-virtualized/dist/es/List' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' diff --git a/frontend/src/lib/components/AddToDashboard/addToDashboardModalLogic.ts b/frontend/src/lib/components/AddToDashboard/addToDashboardModalLogic.ts index 0bd13a5aa7..1a2255c8d3 100644 --- a/frontend/src/lib/components/AddToDashboard/addToDashboardModalLogic.ts +++ b/frontend/src/lib/components/AddToDashboard/addToDashboardModalLogic.ts @@ -1,6 +1,7 @@ import FuseClass from 'fuse.js' import { actions, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { router } from 'kea-router' + import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' import { newDashboardLogic } from 'scenes/dashboard/newDashboardLogic' diff --git a/frontend/src/lib/components/Alerts/AlertDeletionWarning.tsx b/frontend/src/lib/components/Alerts/AlertDeletionWarning.tsx index 6acb69f1d1..2394cd5dd7 100644 --- a/frontend/src/lib/components/Alerts/AlertDeletionWarning.tsx +++ b/frontend/src/lib/components/Alerts/AlertDeletionWarning.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { insightLogic } from 'scenes/insights/insightLogic' diff --git a/frontend/src/lib/components/Alerts/AlertsButton.tsx b/frontend/src/lib/components/Alerts/AlertsButton.tsx index 8f0202c203..684d64acbb 100644 --- a/frontend/src/lib/components/Alerts/AlertsButton.tsx +++ b/frontend/src/lib/components/Alerts/AlertsButton.tsx @@ -1,7 +1,9 @@ -import { IconBell } from '@posthog/icons' -import { LemonButton, LemonButtonProps } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { router } from 'kea-router' + +import { IconBell } from '@posthog/icons' +import { LemonButton, LemonButtonProps } from '@posthog/lemon-ui' + import { IconWithCount } from 'lib/lemon-ui/icons' import { urls } from 'scenes/urls' diff --git a/frontend/src/lib/components/Alerts/alertFormLogic.ts b/frontend/src/lib/components/Alerts/alertFormLogic.ts index ffa0b981ff..b142af1001 100644 --- a/frontend/src/lib/components/Alerts/alertFormLogic.ts +++ b/frontend/src/lib/components/Alerts/alertFormLogic.ts @@ -1,5 +1,6 @@ import { actions, connect, kea, key, listeners, path, props } from 'kea' import { forms } from 'kea-forms' + import api from 'lib/api' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' import { trendsDataLogic } from 'scenes/trends/trendsDataLogic' @@ -8,8 +9,8 @@ import { AlertCalculationInterval, AlertConditionType, GoalLine, - InsightsThresholdBounds, InsightThresholdType, + InsightsThresholdBounds, } from '~/queries/schema/schema-general' import { InsightLogicProps, QueryBasedInsightModel } from '~/types' diff --git a/frontend/src/lib/components/Alerts/alertLogic.ts b/frontend/src/lib/components/Alerts/alertLogic.ts index d396c7af71..d606ded3c1 100644 --- a/frontend/src/lib/components/Alerts/alertLogic.ts +++ b/frontend/src/lib/components/Alerts/alertLogic.ts @@ -1,5 +1,6 @@ import { events, kea, key, path, props } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import type { alertLogicType } from './alertLogicType' diff --git a/frontend/src/lib/components/Alerts/alertsLogic.ts b/frontend/src/lib/components/Alerts/alertsLogic.ts index 71f73e210f..c47d5a51d4 100644 --- a/frontend/src/lib/components/Alerts/alertsLogic.ts +++ b/frontend/src/lib/components/Alerts/alertsLogic.ts @@ -1,5 +1,6 @@ import { afterMount, kea, path, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { AlertState } from '~/queries/schema/schema-general' diff --git a/frontend/src/lib/components/Alerts/insightAlertsLogic.ts b/frontend/src/lib/components/Alerts/insightAlertsLogic.ts index d189a61b80..c49617f7da 100644 --- a/frontend/src/lib/components/Alerts/insightAlertsLogic.ts +++ b/frontend/src/lib/components/Alerts/insightAlertsLogic.ts @@ -1,5 +1,6 @@ import { actions, afterMount, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' diff --git a/frontend/src/lib/components/Alerts/views/AlertDestinationSelector.tsx b/frontend/src/lib/components/Alerts/views/AlertDestinationSelector.tsx index abc20f48f2..f62391c437 100644 --- a/frontend/src/lib/components/Alerts/views/AlertDestinationSelector.tsx +++ b/frontend/src/lib/components/Alerts/views/AlertDestinationSelector.tsx @@ -1,7 +1,7 @@ +import { INSIGHT_ALERT_FIRING_EVENT_ID, INSIGHT_ALERT_FIRING_SUB_TEMPLATE_ID } from 'lib/constants' import { LinkedHogFunctions } from 'scenes/hog-functions/list/LinkedHogFunctions' import { PropertyFilterType, PropertyOperator } from '~/types' -import { INSIGHT_ALERT_FIRING_EVENT_ID, INSIGHT_ALERT_FIRING_SUB_TEMPLATE_ID } from 'lib/constants' export interface AlertDestinationSelectorProps { alertId: string diff --git a/frontend/src/lib/components/Alerts/views/Alerts.tsx b/frontend/src/lib/components/Alerts/views/Alerts.tsx index 912c1ad65d..96ee35f3bf 100644 --- a/frontend/src/lib/components/Alerts/views/Alerts.tsx +++ b/frontend/src/lib/components/Alerts/views/Alerts.tsx @@ -1,12 +1,14 @@ -import { LemonTag, Tooltip } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { router } from 'kea-router' -import { DetectiveHog } from 'lib/components/hedgehogs' + +import { LemonTag, Tooltip } from '@posthog/lemon-ui' + import { ProductIntroduction } from 'lib/components/ProductIntroduction/ProductIntroduction' import { TZLabel } from 'lib/components/TZLabel' +import { DetectiveHog } from 'lib/components/hedgehogs' import { LemonTable, LemonTableColumn, LemonTableColumns } from 'lib/lemon-ui/LemonTable' -import { createdByColumn } from 'lib/lemon-ui/LemonTable/columnUtils' import { LemonTableLink } from 'lib/lemon-ui/LemonTable/LemonTableLink' +import { createdByColumn } from 'lib/lemon-ui/LemonTable/columnUtils' import { urls } from 'scenes/urls' import { ProductKey } from '~/types' diff --git a/frontend/src/lib/components/Alerts/views/EditAlertModal.tsx b/frontend/src/lib/components/Alerts/views/EditAlertModal.tsx index 89a9fc3062..dd9a277cae 100644 --- a/frontend/src/lib/components/Alerts/views/EditAlertModal.tsx +++ b/frontend/src/lib/components/Alerts/views/EditAlertModal.tsx @@ -1,3 +1,7 @@ +import { useActions, useValues } from 'kea' +import { Form, Group } from 'kea-forms' +import { useCallback } from 'react' + import { IconInfo } from '@posthog/icons' import { LemonBanner, @@ -9,19 +13,17 @@ import { SpinnerOverlay, Tooltip, } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' -import { Form, Group } from 'kea-forms' + import { AlertStateIndicator } from 'lib/components/Alerts/views/ManageAlertsModal' import { MemberSelectMultiple } from 'lib/components/MemberSelectMultiple' import { TZLabel } from 'lib/components/TZLabel' import { UserActivityIndicator } from 'lib/components/UserActivityIndicator/UserActivityIndicator' import { dayjs } from 'lib/dayjs' -import { IconChevronLeft } from 'lib/lemon-ui/icons' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonField } from 'lib/lemon-ui/LemonField' import { LemonModal } from 'lib/lemon-ui/LemonModal' +import { IconChevronLeft } from 'lib/lemon-ui/icons' import { alphabet, formatDate } from 'lib/utils' -import { useCallback } from 'react' import { trendsDataLogic } from 'scenes/trends/trendsDataLogic' import { @@ -32,9 +34,9 @@ import { } from '~/queries/schema/schema-general' import { InsightLogicProps, InsightShortId, QueryBasedInsightModel } from '~/types' +import { SnoozeButton } from '../SnoozeButton' import { alertFormLogic, canCheckOngoingInterval } from '../alertFormLogic' import { alertLogic } from '../alertLogic' -import { SnoozeButton } from '../SnoozeButton' import { AlertType } from '../types' import { AlertDestinationSelector } from './AlertDestinationSelector' diff --git a/frontend/src/lib/components/Alerts/views/ManageAlertsModal.tsx b/frontend/src/lib/components/Alerts/views/ManageAlertsModal.tsx index 2466d59a01..8ef511e9cb 100644 --- a/frontend/src/lib/components/Alerts/views/ManageAlertsModal.tsx +++ b/frontend/src/lib/components/Alerts/views/ManageAlertsModal.tsx @@ -1,6 +1,8 @@ -import { Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { router } from 'kea-router' + +import { Link } from '@posthog/lemon-ui' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonModal } from 'lib/lemon-ui/LemonModal' import { LemonTag } from 'lib/lemon-ui/LemonTag' @@ -11,7 +13,7 @@ import { urls } from 'scenes/urls' import { AlertState, InsightThresholdType } from '~/queries/schema/schema-general' import { InsightShortId } from '~/types' -import { insightAlertsLogic, InsightAlertsLogicProps } from '../insightAlertsLogic' +import { InsightAlertsLogicProps, insightAlertsLogic } from '../insightAlertsLogic' import { AlertType } from '../types' export function AlertStateIndicator({ alert }: { alert: AlertType }): JSX.Element { diff --git a/frontend/src/lib/components/Animation/Animation.stories.tsx b/frontend/src/lib/components/Animation/Animation.stories.tsx index cd62f7369b..fa38f0ba4d 100644 --- a/frontend/src/lib/components/Animation/Animation.stories.tsx +++ b/frontend/src/lib/components/Animation/Animation.stories.tsx @@ -1,4 +1,5 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' + import { AnimationType } from 'lib/animations/animations' import { Animation } from 'lib/components/Animation/Animation' diff --git a/frontend/src/lib/components/Animation/Animation.tsx b/frontend/src/lib/components/Animation/Animation.tsx index 2b28373296..f34b8574e8 100644 --- a/frontend/src/lib/components/Animation/Animation.tsx +++ b/frontend/src/lib/components/Animation/Animation.tsx @@ -2,10 +2,11 @@ import './Animation.scss' import { Player } from '@lottiefiles/react-lottie-player' import clsx from 'clsx' -import { animations, AnimationType, getAnimationSource } from 'lib/animations/animations' +import { useEffect, useState } from 'react' + +import { AnimationType, animations, getAnimationSource } from 'lib/animations/animations' import { Spinner } from 'lib/lemon-ui/Spinner/Spinner' import { inStorybookTestRunner } from 'lib/utils' -import { useEffect, useState } from 'react' export interface AnimationProps { /** Animation to show */ diff --git a/frontend/src/lib/components/AnnotationsOverlay/AnnotationsOverlay.tsx b/frontend/src/lib/components/AnnotationsOverlay/AnnotationsOverlay.tsx index 402a7e3176..04e16c50d9 100644 --- a/frontend/src/lib/components/AnnotationsOverlay/AnnotationsOverlay.tsx +++ b/frontend/src/lib/components/AnnotationsOverlay/AnnotationsOverlay.tsx @@ -1,8 +1,12 @@ import './AnnotationsOverlay.scss' -import { IconPencil, IconPlusSmall, IconTrash } from '@posthog/icons' import { BindLogic, useActions, useValues } from 'kea' +import React, { useRef, useState } from 'react' + +import { IconPencil, IconPlusSmall, IconTrash } from '@posthog/icons' + import { Chart } from 'lib/Chart' +import { TextContent } from 'lib/components/Cards/TextCard/TextCard' import { dayjs } from 'lib/dayjs' import { LemonBadge } from 'lib/lemon-ui/LemonBadge/LemonBadge' import { LemonButton } from 'lib/lemon-ui/LemonButton' @@ -10,7 +14,6 @@ import { LemonModal } from 'lib/lemon-ui/LemonModal' import { Popover } from 'lib/lemon-ui/Popover/Popover' import { ProfilePicture } from 'lib/lemon-ui/ProfilePicture' import { humanFriendlyDetailedTime, pluralize, shortTimeZone } from 'lib/utils' -import React, { useRef, useState } from 'react' import { AnnotationModal } from 'scenes/annotations/AnnotationModal' import { annotationModalLogic, annotationScopeToName } from 'scenes/annotations/annotationModalLogic' import { insightLogic } from 'scenes/insights/insightLogic' @@ -19,12 +22,11 @@ import { annotationsModel } from '~/models/annotationsModel' import { AnnotationType, IntervalType } from '~/types' import { - annotationsOverlayLogic, AnnotationsOverlayLogicProps, + annotationsOverlayLogic, determineAnnotationsDateGroup, } from './annotationsOverlayLogic' import { useAnnotationsPositioning } from './useAnnotationsPositioning' -import { TextContent } from 'lib/components/Cards/TextCard/TextCard' /** User-facing format for annotation groups. */ const INTERVAL_UNIT_TO_HUMAN_DAYJS_FORMAT: Record = { diff --git a/frontend/src/lib/components/AnnotationsOverlay/annotationsOverlayLogic.test.ts b/frontend/src/lib/components/AnnotationsOverlay/annotationsOverlayLogic.test.ts index a8c984dc0e..9440c1475c 100644 --- a/frontend/src/lib/components/AnnotationsOverlay/annotationsOverlayLogic.test.ts +++ b/frontend/src/lib/components/AnnotationsOverlay/annotationsOverlayLogic.test.ts @@ -1,5 +1,7 @@ -import { expectLogic } from 'kea-test-utils' import { MOCK_DEFAULT_TEAM } from 'lib/api.mock' + +import { expectLogic } from 'kea-test-utils' + import { insightLogic } from 'scenes/insights/insightLogic' import { useMocks } from '~/mocks/jest' diff --git a/frontend/src/lib/components/AnnotationsOverlay/annotationsOverlayLogic.ts b/frontend/src/lib/components/AnnotationsOverlay/annotationsOverlayLogic.ts index 5846f537e2..8ac6a56e3a 100644 --- a/frontend/src/lib/components/AnnotationsOverlay/annotationsOverlayLogic.ts +++ b/frontend/src/lib/components/AnnotationsOverlay/annotationsOverlayLogic.ts @@ -1,4 +1,5 @@ import { actions, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' + import { Tick } from 'lib/Chart' import { Dayjs, dayjsLocalToTimezone } from 'lib/dayjs' import { groupBy } from 'lib/utils' diff --git a/frontend/src/lib/components/AnnotationsOverlay/useAnnotationsPositioning.ts b/frontend/src/lib/components/AnnotationsOverlay/useAnnotationsPositioning.ts index fa5c85f900..cefadd2a11 100644 --- a/frontend/src/lib/components/AnnotationsOverlay/useAnnotationsPositioning.ts +++ b/frontend/src/lib/components/AnnotationsOverlay/useAnnotationsPositioning.ts @@ -1,6 +1,7 @@ -import { Chart } from 'lib/Chart' import { useMemo } from 'react' +import { Chart } from 'lib/Chart' + export interface AnnotationsPositioning { tickIntervalPx: number firstTickLeftPx: number diff --git a/frontend/src/lib/components/AuthorizedUrlList/AuthorizedUrlForm.tsx b/frontend/src/lib/components/AuthorizedUrlList/AuthorizedUrlForm.tsx index 244a4c124a..f32dbeedb1 100644 --- a/frontend/src/lib/components/AuthorizedUrlList/AuthorizedUrlForm.tsx +++ b/frontend/src/lib/components/AuthorizedUrlList/AuthorizedUrlForm.tsx @@ -1,12 +1,13 @@ import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonField } from 'lib/lemon-ui/LemonField' import { LemonInput } from 'lib/lemon-ui/LemonInput/LemonInput' import { ExperimentIdType } from '~/types' -import { authorizedUrlListLogic, AuthorizedUrlListType } from './authorizedUrlListLogic' +import { AuthorizedUrlListType, authorizedUrlListLogic } from './authorizedUrlListLogic' export interface AuthorizedUrlFormProps { type: AuthorizedUrlListType diff --git a/frontend/src/lib/components/AuthorizedUrlList/AuthorizedUrlList.tsx b/frontend/src/lib/components/AuthorizedUrlList/AuthorizedUrlList.tsx index d5a3c2d308..85bfb2239f 100644 --- a/frontend/src/lib/components/AuthorizedUrlList/AuthorizedUrlList.tsx +++ b/frontend/src/lib/components/AuthorizedUrlList/AuthorizedUrlList.tsx @@ -1,17 +1,19 @@ -import { IconCopy, IconPencil, IconPlus, IconTrash } from '@posthog/icons' import clsx from 'clsx' import { useActions, useValues } from 'kea' -import { IconOpenInApp } from 'lib/lemon-ui/icons' + +import { IconCopy, IconPencil, IconPlus, IconTrash } from '@posthog/icons' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonDialog } from 'lib/lemon-ui/LemonDialog' import { LemonTag } from 'lib/lemon-ui/LemonTag/LemonTag' import { Tooltip } from 'lib/lemon-ui/Tooltip' +import { IconOpenInApp } from 'lib/lemon-ui/icons' import { ExperimentIdType } from '~/types' import { AuthorizedUrlForm } from './AuthorizedUrlForm' -import { authorizedUrlListLogic, AuthorizedUrlListType } from './authorizedUrlListLogic' import { EmptyState } from './EmptyState' +import { AuthorizedUrlListType, authorizedUrlListLogic } from './authorizedUrlListLogic' export interface AuthorizedUrlListProps { type: AuthorizedUrlListType diff --git a/frontend/src/lib/components/AuthorizedUrlList/EmptyState.tsx b/frontend/src/lib/components/AuthorizedUrlList/EmptyState.tsx index 3960554657..4e5ba5132e 100644 --- a/frontend/src/lib/components/AuthorizedUrlList/EmptyState.tsx +++ b/frontend/src/lib/components/AuthorizedUrlList/EmptyState.tsx @@ -1,12 +1,13 @@ import { useActions } from 'kea' import { useValues } from 'kea' -import { IconRefresh } from 'lib/lemon-ui/icons' -import { LemonButton } from 'lib/lemon-ui/LemonButton' import { useMemo } from 'react' +import { LemonButton } from 'lib/lemon-ui/LemonButton' +import { IconRefresh } from 'lib/lemon-ui/icons' + import { ExperimentIdType } from '~/types' -import { authorizedUrlListLogic, AuthorizedUrlListType, KeyedAppUrl } from './authorizedUrlListLogic' +import { AuthorizedUrlListType, KeyedAppUrl, authorizedUrlListLogic } from './authorizedUrlListLogic' type EmptyStateProps = { type: AuthorizedUrlListType diff --git a/frontend/src/lib/components/AuthorizedUrlList/authorizedUrlListLogic.test.ts b/frontend/src/lib/components/AuthorizedUrlList/authorizedUrlListLogic.test.ts index ef650b8dbf..68b1c34ff5 100644 --- a/frontend/src/lib/components/AuthorizedUrlList/authorizedUrlListLogic.test.ts +++ b/frontend/src/lib/components/AuthorizedUrlList/authorizedUrlListLogic.test.ts @@ -1,17 +1,19 @@ +import { MOCK_TEAM_ID, api } from 'lib/api.mock' + import { router } from 'kea-router' import { expectLogic } from 'kea-test-utils' -import { api, MOCK_TEAM_ID } from 'lib/api.mock' + import { urls } from 'scenes/urls' import { useMocks } from '~/mocks/jest' import { initKeaTests } from '~/test/init' import { + AuthorizedUrlListType, + SuggestedDomain, appEditorUrl, authorizedUrlListLogic, - AuthorizedUrlListType, filterNotAuthorizedUrls, - SuggestedDomain, validateProposedUrl, } from './authorizedUrlListLogic' diff --git a/frontend/src/lib/components/AuthorizedUrlList/authorizedUrlListLogic.ts b/frontend/src/lib/components/AuthorizedUrlList/authorizedUrlListLogic.ts index a267f69977..0f618ca123 100644 --- a/frontend/src/lib/components/AuthorizedUrlList/authorizedUrlListLogic.ts +++ b/frontend/src/lib/components/AuthorizedUrlList/authorizedUrlListLogic.ts @@ -15,6 +15,7 @@ import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' import { encodeParams, urlToAction } from 'kea-router' import { subscriptions } from 'kea-subscriptions' + import api from 'lib/api' import { lemonToast } from 'lib/lemon-ui/LemonToast' import { isDomain, isURL } from 'lib/utils' diff --git a/frontend/src/lib/components/BaseCurrency/BaseCurrency.tsx b/frontend/src/lib/components/BaseCurrency/BaseCurrency.tsx index 04d1edea83..0deca8855c 100644 --- a/frontend/src/lib/components/BaseCurrency/BaseCurrency.tsx +++ b/frontend/src/lib/components/BaseCurrency/BaseCurrency.tsx @@ -1,4 +1,5 @@ import { useActions, useValues } from 'kea' + import { teamLogic } from 'scenes/teamLogic' import { CurrencyCode } from '~/queries/schema/schema-general' diff --git a/frontend/src/lib/components/BaseCurrency/utils.tsx b/frontend/src/lib/components/BaseCurrency/utils.tsx index e0a0977774..c31138fa1b 100644 --- a/frontend/src/lib/components/BaseCurrency/utils.tsx +++ b/frontend/src/lib/components/BaseCurrency/utils.tsx @@ -1,4 +1,5 @@ import { LemonSelectOption } from '@posthog/lemon-ui' + import { CURRENCY_SYMBOL_TO_EMOJI_MAP, CURRENCY_SYMBOL_TO_NAME_MAP, diff --git a/frontend/src/lib/components/BillingAlertsV2.tsx b/frontend/src/lib/components/BillingAlertsV2.tsx index a61fe772dc..264f16107c 100644 --- a/frontend/src/lib/components/BillingAlertsV2.tsx +++ b/frontend/src/lib/components/BillingAlertsV2.tsx @@ -1,8 +1,9 @@ import { useActions, useValues } from 'kea' import { router } from 'kea-router' +import { useEffect, useState } from 'react' + import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { cn } from 'lib/utils/css-classes' -import { useEffect, useState } from 'react' import { billingLogic } from 'scenes/billing/billingLogic' import { sceneLogic } from 'scenes/sceneLogic' import { urls } from 'scenes/urls' diff --git a/frontend/src/lib/components/BillingUpgradeCTA.tsx b/frontend/src/lib/components/BillingUpgradeCTA.tsx index 9de329997d..581657e459 100644 --- a/frontend/src/lib/components/BillingUpgradeCTA.tsx +++ b/frontend/src/lib/components/BillingUpgradeCTA.tsx @@ -1,4 +1,5 @@ import { useActions } from 'kea' + import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { LemonButton, LemonButtonProps } from 'lib/lemon-ui/LemonButton' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' diff --git a/frontend/src/lib/components/BridgePage/BridgePage.tsx b/frontend/src/lib/components/BridgePage/BridgePage.tsx index 497944436d..4c8e9579fd 100644 --- a/frontend/src/lib/components/BridgePage/BridgePage.tsx +++ b/frontend/src/lib/components/BridgePage/BridgePage.tsx @@ -4,13 +4,14 @@ import clsx from 'clsx' import { useValues } from 'kea' import { useState } from 'react' import { CSSTransition } from 'react-transition-group' -import { WelcomeLogo } from 'scenes/authentication/WelcomeLogo' + +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' +import { WelcomeLogo } from 'scenes/authentication/WelcomeLogo' import { Region } from '~/types' import { LaptopHog4, LaptopHogEU } from '../hedgehogs' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' export type BridgePageCommonProps = { children?: React.ReactNode diff --git a/frontend/src/lib/components/Cards/BasicCard.tsx b/frontend/src/lib/components/Cards/BasicCard.tsx index 0417abbbd3..bb22781822 100644 --- a/frontend/src/lib/components/Cards/BasicCard.tsx +++ b/frontend/src/lib/components/Cards/BasicCard.tsx @@ -1,5 +1,6 @@ import { useValues } from 'kea' import { router } from 'kea-router' + import { useAnchor } from 'lib/hooks/useAnchor' import { cn } from 'lib/utils/css-classes' diff --git a/frontend/src/lib/components/Cards/CardMeta.tsx b/frontend/src/lib/components/Cards/CardMeta.tsx index 568549d196..e985e0ba06 100644 --- a/frontend/src/lib/components/Cards/CardMeta.tsx +++ b/frontend/src/lib/components/Cards/CardMeta.tsx @@ -1,14 +1,16 @@ import './CardMeta.scss' -import { IconPieChart } from '@posthog/icons' import clsx from 'clsx' +import React from 'react' +import { Transition } from 'react-transition-group' + +import { IconPieChart } from '@posthog/icons' + import { useResizeObserver } from 'lib/hooks/useResizeObserver' -import { IconSubtitles, IconSubtitlesOff } from 'lib/lemon-ui/icons' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { More } from 'lib/lemon-ui/LemonButton/More' import { Tooltip } from 'lib/lemon-ui/Tooltip' -import React from 'react' -import { Transition } from 'react-transition-group' +import { IconSubtitles, IconSubtitlesOff } from 'lib/lemon-ui/icons' import { InsightColor } from '~/types' diff --git a/frontend/src/lib/components/Cards/InsightCard/InsightCard.tsx b/frontend/src/lib/components/Cards/InsightCard/InsightCard.tsx index 4c3734054b..588ef8aa02 100644 --- a/frontend/src/lib/components/Cards/InsightCard/InsightCard.tsx +++ b/frontend/src/lib/components/Cards/InsightCard/InsightCard.tsx @@ -3,20 +3,29 @@ import './InsightCard.scss' import { useMergeRefs } from '@floating-ui/react' import clsx from 'clsx' import { BindLogic, useValues } from 'kea' +import React, { useState } from 'react' +import { Layout } from 'react-grid-layout' +import { useInView } from 'react-intersection-observer' + +import { ApiError } from 'lib/api' import { Resizeable } from 'lib/components/Cards/CardMeta' import { FEATURE_FLAGS } from 'lib/constants' import { usePageVisibility } from 'lib/hooks/usePageVisibility' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import React, { useState } from 'react' -import { Layout } from 'react-grid-layout' -import { useInView } from 'react-intersection-observer' import { BreakdownColorConfig } from 'scenes/dashboard/DashboardInsightColorsModal' +import { + InsightErrorState, + InsightLoadingState, + InsightTimeoutState, + InsightValidationError, +} from 'scenes/insights/EmptyStates' import { insightDataLogic } from 'scenes/insights/insightDataLogic' import { insightLogic } from 'scenes/insights/insightLogic' import { ErrorBoundary } from '~/layout/ErrorBoundary' import { themeLogic } from '~/layout/navigation-3000/themeLogic' import { Query } from '~/queries/Query/Query' +import { extractValidationError } from '~/queries/nodes/InsightViz/utils' import { HogQLVariable } from '~/queries/schema/schema-general' import { DashboardBasicType, @@ -30,14 +39,6 @@ import { import { ResizeHandle1D, ResizeHandle2D } from '../handles' import { InsightMeta } from './InsightMeta' -import { - InsightErrorState, - InsightLoadingState, - InsightTimeoutState, - InsightValidationError, -} from 'scenes/insights/EmptyStates' -import { extractValidationError } from '~/queries/nodes/InsightViz/utils' -import { ApiError } from 'lib/api' export interface InsightCardProps extends Resizeable { /** Insight to display. */ diff --git a/frontend/src/lib/components/Cards/InsightCard/InsightDetails.tsx b/frontend/src/lib/components/Cards/InsightCard/InsightDetails.tsx index a59e12437e..344c62fec1 100644 --- a/frontend/src/lib/components/Cards/InsightCard/InsightDetails.tsx +++ b/frontend/src/lib/components/Cards/InsightCard/InsightDetails.tsx @@ -1,26 +1,27 @@ import { useValues } from 'kea' +import React from 'react' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { + PROPERTY_FILTER_TYPE_TO_TAXONOMIC_FILTER_GROUP_TYPE, convertPropertiesToPropertyGroup, formatPropertyLabel, isAnyPropertyfilter, isCohortPropertyFilter, isPropertyFilterWithOperator, - PROPERTY_FILTER_TYPE_TO_TAXONOMIC_FILTER_GROUP_TYPE, } from 'lib/components/PropertyFilters/utils' import { SeriesLetter } from 'lib/components/SeriesGlyph' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' -import { IconCalculate } from 'lib/lemon-ui/icons' import { LemonDivider } from 'lib/lemon-ui/LemonDivider' import { LemonRow } from 'lib/lemon-ui/LemonRow' import { LemonTag } from 'lib/lemon-ui/LemonTag/LemonTag' import { Link } from 'lib/lemon-ui/Link' import { ProfilePicture } from 'lib/lemon-ui/ProfilePicture' +import { IconCalculate } from 'lib/lemon-ui/icons' import { allOperatorsMapping, capitalizeFirstLetter } from 'lib/utils' -import React from 'react' import { BreakdownTag } from 'scenes/insights/filters/BreakdownFilter/BreakdownTag' import { humanizePathsEventTypes } from 'scenes/insights/utils' -import { apiValueToMathType, MathCategory, MathDefinition, mathsLogic } from 'scenes/trends/mathsLogic' +import { MathCategory, MathDefinition, apiValueToMathType, mathsLogic } from 'scenes/trends/mathsLogic' import { urls } from 'scenes/urls' import { cohortsModel } from '~/models/cohortsModel' diff --git a/frontend/src/lib/components/Cards/InsightCard/InsightFreshness.tsx b/frontend/src/lib/components/Cards/InsightCard/InsightFreshness.tsx index de72811baa..3be7982b44 100644 --- a/frontend/src/lib/components/Cards/InsightCard/InsightFreshness.tsx +++ b/frontend/src/lib/components/Cards/InsightCard/InsightFreshness.tsx @@ -1,7 +1,8 @@ import { IconClock, IconWarning } from '@posthog/icons' -import { Tooltip } from 'lib/lemon-ui/Tooltip' -import { dayjs } from 'lib/dayjs' + import { TZLabel } from 'lib/components/TZLabel' +import { dayjs } from 'lib/dayjs' +import { Tooltip } from 'lib/lemon-ui/Tooltip' export function InsightFreshness({ lastRefresh }: { lastRefresh: string }): JSX.Element | null { if (!lastRefresh) { diff --git a/frontend/src/lib/components/Cards/InsightCard/InsightMeta.tsx b/frontend/src/lib/components/Cards/InsightCard/InsightMeta.tsx index 9e3be98ea2..f7c2b77ae8 100644 --- a/frontend/src/lib/components/Cards/InsightCard/InsightMeta.tsx +++ b/frontend/src/lib/components/Cards/InsightCard/InsightMeta.tsx @@ -1,10 +1,14 @@ import clsx from 'clsx' -import { lemonToast } from '@posthog/lemon-ui' import { useValues } from 'kea' +import React from 'react' + +import { lemonToast } from '@posthog/lemon-ui' + import { CardMeta } from 'lib/components/Cards/CardMeta' import { TopHeading } from 'lib/components/Cards/InsightCard/TopHeading' import { ExportButton } from 'lib/components/ExportButton/ExportButton' import { ObjectTags } from 'lib/components/ObjectTags/ObjectTags' +import { TZLabel } from 'lib/components/TZLabel' import { DashboardPrivilegeLevel } from 'lib/constants' import { dayjs } from 'lib/dayjs' import { LemonButton, LemonButtonWithDropdown } from 'lib/lemon-ui/LemonButton' @@ -16,7 +20,6 @@ import { Spinner } from 'lib/lemon-ui/Spinner' import { Splotch, SplotchColor } from 'lib/lemon-ui/Splotch' import { Tooltip } from 'lib/lemon-ui/Tooltip' import { capitalizeFirstLetter } from 'lib/utils' -import React from 'react' import { insightDataLogic } from 'scenes/insights/insightDataLogic' import { insightLogic } from 'scenes/insights/insightLogic' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' @@ -29,7 +32,6 @@ import { ExporterFormat, InsightColor, QueryBasedInsightModel } from '~/types' import { InsightCardProps } from './InsightCard' import { InsightDetails } from './InsightDetails' -import { TZLabel } from 'lib/components/TZLabel' interface InsightMetaProps extends Pick< diff --git a/frontend/src/lib/components/Cards/InsightCard/QueryCard.tsx b/frontend/src/lib/components/Cards/InsightCard/QueryCard.tsx index 493c674917..3b0c819355 100644 --- a/frontend/src/lib/components/Cards/InsightCard/QueryCard.tsx +++ b/frontend/src/lib/components/Cards/InsightCard/QueryCard.tsx @@ -1,8 +1,9 @@ import clsx from 'clsx' import { useValues } from 'kea' +import React, { useState } from 'react' + import { CardMeta } from 'lib/components/Cards/CardMeta' import { LemonMenuItemList } from 'lib/lemon-ui/LemonMenu/LemonMenu' -import React, { useState } from 'react' import { urls } from 'scenes/urls' import { ErrorBoundary } from '~/layout/ErrorBoundary' diff --git a/frontend/src/lib/components/Cards/InsightCard/TopHeading.tsx b/frontend/src/lib/components/Cards/InsightCard/TopHeading.tsx index c32291c773..f75d8c154a 100644 --- a/frontend/src/lib/components/Cards/InsightCard/TopHeading.tsx +++ b/frontend/src/lib/components/Cards/InsightCard/TopHeading.tsx @@ -1,6 +1,5 @@ import { dateFilterToText } from 'lib/utils' import { InsightTypeMetadata, QUERY_TYPES_METADATA } from 'scenes/saved-insights/SavedInsights' -import { InsightFreshness } from './InsightFreshness' import { Node, NodeKind } from '~/queries/schema/schema-general' import { @@ -11,6 +10,8 @@ import { isInsightVizNode, } from '~/queries/utils' +import { InsightFreshness } from './InsightFreshness' + export function TopHeading({ query, lastRefresh }: { query: Node | null; lastRefresh?: string | null }): JSX.Element { let insightType: InsightTypeMetadata diff --git a/frontend/src/lib/components/Cards/TextCard/TextCard.tsx b/frontend/src/lib/components/Cards/TextCard/TextCard.tsx index 7850b5702b..e6cd05cfe7 100644 --- a/frontend/src/lib/components/Cards/TextCard/TextCard.tsx +++ b/frontend/src/lib/components/Cards/TextCard/TextCard.tsx @@ -1,11 +1,12 @@ import './TextCard.scss' import clsx from 'clsx' +import React from 'react' + import { Resizeable } from 'lib/components/Cards/CardMeta' import { ResizeHandle1D, ResizeHandle2D } from 'lib/components/Cards/handles' import { More, MoreProps } from 'lib/lemon-ui/LemonButton/More' import { LemonMarkdown } from 'lib/lemon-ui/LemonMarkdown' -import React from 'react' import { DashboardPlacement, DashboardTile, QueryBasedInsightModel } from '~/types' diff --git a/frontend/src/lib/components/Cards/TextCard/TextCardModal.tsx b/frontend/src/lib/components/Cards/TextCard/TextCardModal.tsx index 4a81c9b1bc..f7cfba9dc3 100644 --- a/frontend/src/lib/components/Cards/TextCard/TextCardModal.tsx +++ b/frontend/src/lib/components/Cards/TextCard/TextCardModal.tsx @@ -1,5 +1,6 @@ import { useActions, useValues } from 'kea' import { Field, Form } from 'kea-forms' + import { textCardModalLogic } from 'lib/components/Cards/TextCard/textCardModalLogic' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonModal } from 'lib/lemon-ui/LemonModal' diff --git a/frontend/src/lib/components/Cards/TextCard/textCardModalLogic.ts b/frontend/src/lib/components/Cards/TextCard/textCardModalLogic.ts index f9ca316610..0178f412ae 100644 --- a/frontend/src/lib/components/Cards/TextCard/textCardModalLogic.ts +++ b/frontend/src/lib/components/Cards/TextCard/textCardModalLogic.ts @@ -1,7 +1,8 @@ -import { lemonToast } from '@posthog/lemon-ui' import { connect, kea, key, listeners, path, props } from 'kea' import { forms } from 'kea-forms' +import { lemonToast } from '@posthog/lemon-ui' + import { dashboardsModel } from '~/models/dashboardsModel' import { DashboardTile, DashboardType, QueryBasedInsightModel } from '~/types' diff --git a/frontend/src/lib/components/ChartFilter/ChartFilter.tsx b/frontend/src/lib/components/ChartFilter/ChartFilter.tsx index 3f54b8ed50..d8844599ce 100644 --- a/frontend/src/lib/components/ChartFilter/ChartFilter.tsx +++ b/frontend/src/lib/components/ChartFilter/ChartFilter.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconGlobe, IconGraph, IconPieChart, IconTrends } from '@posthog/icons' import { LemonSelect, LemonSelectOptions } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { Icon123, IconAreaChart, IconCumulativeChart, IconTableChart } from 'lib/lemon-ui/icons' import { insightLogic } from 'scenes/insights/insightLogic' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' diff --git a/frontend/src/lib/components/CodeSnippet/CodeSnippet.stories.tsx b/frontend/src/lib/components/CodeSnippet/CodeSnippet.stories.tsx index 189b895ceb..53916b2dc8 100644 --- a/frontend/src/lib/components/CodeSnippet/CodeSnippet.stories.tsx +++ b/frontend/src/lib/components/CodeSnippet/CodeSnippet.stories.tsx @@ -1,4 +1,5 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { CodeSnippet, CodeSnippetProps, Language } from './CodeSnippet' diff --git a/frontend/src/lib/components/CodeSnippet/CodeSnippet.tsx b/frontend/src/lib/components/CodeSnippet/CodeSnippet.tsx index 52fa23edaf..e92d44d9bf 100644 --- a/frontend/src/lib/components/CodeSnippet/CodeSnippet.tsx +++ b/frontend/src/lib/components/CodeSnippet/CodeSnippet.tsx @@ -1,10 +1,7 @@ import './CodeSnippet.scss' -import { IconCollapse, IconCopy, IconExpand } from '@posthog/icons' import clsx from 'clsx' import { useValues } from 'kea' -import { LemonButton } from 'lib/lemon-ui/LemonButton' -import { copyToClipboard } from 'lib/utils/copyToClipboard' import React, { type HTMLProps, useEffect, useState } from 'react' import { PrismAsyncLight as SyntaxHighlighter } from 'react-syntax-highlighter' import bash from 'react-syntax-highlighter/dist/esm/languages/prism/bash' @@ -12,6 +9,7 @@ import csharp from 'react-syntax-highlighter/dist/esm/languages/prism/csharp' import dart from 'react-syntax-highlighter/dist/esm/languages/prism/dart' import elixir from 'react-syntax-highlighter/dist/esm/languages/prism/elixir' import go from 'react-syntax-highlighter/dist/esm/languages/prism/go' +import groovy from 'react-syntax-highlighter/dist/esm/languages/prism/groovy' import http from 'react-syntax-highlighter/dist/esm/languages/prism/http' import java from 'react-syntax-highlighter/dist/esm/languages/prism/java' import javascript from 'react-syntax-highlighter/dist/esm/languages/prism/javascript' @@ -27,7 +25,11 @@ import sql from 'react-syntax-highlighter/dist/esm/languages/prism/sql' import swift from 'react-syntax-highlighter/dist/esm/languages/prism/swift' import typescript from 'react-syntax-highlighter/dist/esm/languages/prism/typescript' import yaml from 'react-syntax-highlighter/dist/esm/languages/prism/yaml' -import groovy from 'react-syntax-highlighter/dist/esm/languages/prism/groovy' + +import { IconCollapse, IconCopy, IconExpand } from '@posthog/icons' + +import { LemonButton } from 'lib/lemon-ui/LemonButton' +import { copyToClipboard } from 'lib/utils/copyToClipboard' import { themeLogic } from '~/layout/navigation-3000/themeLogic' diff --git a/frontend/src/lib/components/CommandBar/ActionBar.tsx b/frontend/src/lib/components/CommandBar/ActionBar.tsx index b68455b2bb..5c1a493850 100644 --- a/frontend/src/lib/components/CommandBar/ActionBar.tsx +++ b/frontend/src/lib/components/CommandBar/ActionBar.tsx @@ -1,8 +1,8 @@ import { useValues } from 'kea' -import { actionBarLogic } from './actionBarLogic' import { ActionInput } from './ActionInput' import { ActionResults } from './ActionResults' +import { actionBarLogic } from './actionBarLogic' export const ActionBar = (): JSX.Element => { const { activeFlow } = useValues(actionBarLogic) diff --git a/frontend/src/lib/components/CommandBar/ActionInput.tsx b/frontend/src/lib/components/CommandBar/ActionInput.tsx index 481df211af..f3c2575910 100644 --- a/frontend/src/lib/components/CommandBar/ActionInput.tsx +++ b/frontend/src/lib/components/CommandBar/ActionInput.tsx @@ -1,10 +1,12 @@ +import { useActions, useValues } from 'kea' +import React from 'react' + import { IconPencil } from '@posthog/icons' import { LemonInput } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { CommandFlow } from 'lib/components/CommandPalette/commandPaletteLogic' import { IconChevronRight } from 'lib/lemon-ui/icons' import { isMac } from 'lib/utils' -import React from 'react' import { KeyboardShortcut } from '~/layout/navigation-3000/components/KeyboardShortcut' diff --git a/frontend/src/lib/components/CommandBar/ActionResults.tsx b/frontend/src/lib/components/CommandBar/ActionResults.tsx index 1a7176eb4f..b3928502d4 100644 --- a/frontend/src/lib/components/CommandBar/ActionResults.tsx +++ b/frontend/src/lib/components/CommandBar/ActionResults.tsx @@ -1,9 +1,10 @@ import { useValues } from 'kea' + import { getNameFromActionScope } from 'lib/components/CommandBar/utils' import { CommandResultDisplayable } from '../CommandPalette/commandPaletteLogic' -import { actionBarLogic } from './actionBarLogic' import { ActionResult } from './ActionResult' +import { actionBarLogic } from './actionBarLogic' type ResultsGroupProps = { scope: string diff --git a/frontend/src/lib/components/CommandBar/CommandBar.stories.tsx b/frontend/src/lib/components/CommandBar/CommandBar.stories.tsx index cc360c7705..d4cf77c949 100644 --- a/frontend/src/lib/components/CommandBar/CommandBar.stories.tsx +++ b/frontend/src/lib/components/CommandBar/CommandBar.stories.tsx @@ -1,12 +1,13 @@ import { Meta } from '@storybook/react' import { useActions } from 'kea' + import { commandBarLogic } from 'lib/components/CommandBar/commandBarLogic' import { BarStatus } from 'lib/components/CommandBar/types' +import { useDelayedOnMountEffect } from 'lib/hooks/useOnMountEffect' import { mswDecorator } from '~/mocks/browser' import { CommandBar } from './CommandBar' -import { useDelayedOnMountEffect } from 'lib/hooks/useOnMountEffect' const SEARCH_RESULT = { results: [ diff --git a/frontend/src/lib/components/CommandBar/CommandBar.tsx b/frontend/src/lib/components/CommandBar/CommandBar.tsx index 235b6126bd..cf404ee915 100644 --- a/frontend/src/lib/components/CommandBar/CommandBar.tsx +++ b/frontend/src/lib/components/CommandBar/CommandBar.tsx @@ -1,13 +1,14 @@ import './index.scss' import { useActions, useValues } from 'kea' -import { useOutsideClickHandler } from 'lib/hooks/useOutsideClickHandler' import { forwardRef, useRef } from 'react' +import { useOutsideClickHandler } from 'lib/hooks/useOutsideClickHandler' + import { ActionBar } from './ActionBar' -import { commandBarLogic } from './commandBarLogic' import { SearchBar } from './SearchBar' import { Shortcuts } from './Shortcuts' +import { commandBarLogic } from './commandBarLogic' import { BarStatus } from './types' interface CommandBarOverlayProps { diff --git a/frontend/src/lib/components/CommandBar/SearchBar.tsx b/frontend/src/lib/components/CommandBar/SearchBar.tsx index d9b27c7e80..e680a1db93 100644 --- a/frontend/src/lib/components/CommandBar/SearchBar.tsx +++ b/frontend/src/lib/components/CommandBar/SearchBar.tsx @@ -1,10 +1,10 @@ import { useMountedLogic } from 'kea' import { useRef } from 'react' -import { searchBarLogic } from './searchBarLogic' import { SearchInput } from './SearchInput' import { SearchResults } from './SearchResults' import { SearchTabs } from './SearchTabs' +import { searchBarLogic } from './searchBarLogic' export const SearchBar = (): JSX.Element => { useMountedLogic(searchBarLogic) // load initial results diff --git a/frontend/src/lib/components/CommandBar/SearchBarTab.tsx b/frontend/src/lib/components/CommandBar/SearchBarTab.tsx index 469a344236..b1ba2ea0d2 100644 --- a/frontend/src/lib/components/CommandBar/SearchBarTab.tsx +++ b/frontend/src/lib/components/CommandBar/SearchBarTab.tsx @@ -1,7 +1,8 @@ import { useActions, useValues } from 'kea' +import { RefObject } from 'react' + import { Spinner } from 'lib/lemon-ui/Spinner' import { capitalizeFirstLetter } from 'lib/utils' -import { RefObject } from 'react' import { Tab, tabToName } from './constants' import { searchBarLogic } from './searchBarLogic' diff --git a/frontend/src/lib/components/CommandBar/SearchInput.tsx b/frontend/src/lib/components/CommandBar/SearchInput.tsx index 52734f3f4c..3107d4ee38 100644 --- a/frontend/src/lib/components/CommandBar/SearchInput.tsx +++ b/frontend/src/lib/components/CommandBar/SearchInput.tsx @@ -1,6 +1,8 @@ -import { LemonInput } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' -import { forwardRef, Ref } from 'react' +import { Ref, forwardRef } from 'react' + +import { LemonInput } from '@posthog/lemon-ui' + import { teamLogic } from 'scenes/teamLogic' import { KeyboardShortcut } from '~/layout/navigation-3000/components/KeyboardShortcut' diff --git a/frontend/src/lib/components/CommandBar/SearchResult.tsx b/frontend/src/lib/components/CommandBar/SearchResult.tsx index f72a4120ed..544db1a0e7 100644 --- a/frontend/src/lib/components/CommandBar/SearchResult.tsx +++ b/frontend/src/lib/components/CommandBar/SearchResult.tsx @@ -1,8 +1,10 @@ -import { LemonSkeleton } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' -import { capitalizeFirstLetter } from 'lib/utils' import { useLayoutEffect, useRef } from 'react' + +import { LemonSkeleton } from '@posthog/lemon-ui' + +import { capitalizeFirstLetter } from 'lib/utils' import { useSummarizeInsight } from 'scenes/insights/summarizeInsight' import { Notebook } from 'scenes/notebooks/Notebook/Notebook' import { groupDisplayId } from 'scenes/persons/GroupActorDisplay' @@ -10,10 +12,10 @@ import { groupDisplayId } from 'scenes/persons/GroupActorDisplay' import { navigation3000Logic } from '~/layout/navigation-3000/navigationLogic' import { getQueryFromInsightLike } from '~/queries/nodes/InsightViz/utils' +import { JSONContent } from '../RichContentEditor/types' import { tabToName } from './constants' import { searchBarLogic } from './searchBarLogic' import { SearchResult as ResultType } from './types' -import { JSONContent } from '../RichContentEditor/types' type SearchResultProps = { result: ResultType diff --git a/frontend/src/lib/components/CommandBar/SearchResultPreview.tsx b/frontend/src/lib/components/CommandBar/SearchResultPreview.tsx index cd8755d4f4..60f05d46f2 100644 --- a/frontend/src/lib/components/CommandBar/SearchResultPreview.tsx +++ b/frontend/src/lib/components/CommandBar/SearchResultPreview.tsx @@ -1,4 +1,5 @@ import { useActions, useValues } from 'kea' + import { ResultDescription, ResultName } from 'lib/components/CommandBar/SearchResult' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' diff --git a/frontend/src/lib/components/CommandBar/SearchResults.tsx b/frontend/src/lib/components/CommandBar/SearchResults.tsx index 63cfd7dc63..c4630251e4 100644 --- a/frontend/src/lib/components/CommandBar/SearchResults.tsx +++ b/frontend/src/lib/components/CommandBar/SearchResults.tsx @@ -1,9 +1,9 @@ import { useValues } from 'kea' import { DetectiveHog } from '../hedgehogs' -import { searchBarLogic } from './searchBarLogic' import { SearchResult, SearchResultSkeleton } from './SearchResult' import { SearchResultPreview } from './SearchResultPreview' +import { searchBarLogic } from './searchBarLogic' export const SearchResults = (): JSX.Element => { const { combinedSearchResults, combinedSearchLoading, activeResultIndex } = useValues(searchBarLogic) diff --git a/frontend/src/lib/components/CommandBar/SearchTabs.tsx b/frontend/src/lib/components/CommandBar/SearchTabs.tsx index f1d59684e4..de9cd8f821 100644 --- a/frontend/src/lib/components/CommandBar/SearchTabs.tsx +++ b/frontend/src/lib/components/CommandBar/SearchTabs.tsx @@ -1,9 +1,9 @@ import { useValues } from 'kea' import { RefObject } from 'react' +import { SearchBarTab } from './SearchBarTab' import { groupToName } from './constants' import { searchBarLogic } from './searchBarLogic' -import { SearchBarTab } from './SearchBarTab' type SearchTabsProps = { inputRef: RefObject diff --git a/frontend/src/lib/components/CommandBar/actionBarLogic.ts b/frontend/src/lib/components/CommandBar/actionBarLogic.ts index c4bcb37034..acf94153de 100644 --- a/frontend/src/lib/components/CommandBar/actionBarLogic.ts +++ b/frontend/src/lib/components/CommandBar/actionBarLogic.ts @@ -1,5 +1,6 @@ import { afterMount, beforeUnmount, connect, kea, listeners, path } from 'kea' import { subscriptions } from 'kea-subscriptions' + import { eventUsageLogic } from 'lib/utils/eventUsageLogic' import { commandPaletteLogic } from '../CommandPalette/commandPaletteLogic' diff --git a/frontend/src/lib/components/CommandBar/commandBarLogic.ts b/frontend/src/lib/components/CommandBar/commandBarLogic.ts index 27f84db197..30de7386ac 100644 --- a/frontend/src/lib/components/CommandBar/commandBarLogic.ts +++ b/frontend/src/lib/components/CommandBar/commandBarLogic.ts @@ -1,5 +1,6 @@ import { actions, afterMount, beforeUnmount, connect, kea, path, reducers } from 'kea' import { subscriptions } from 'kea-subscriptions' + import { shouldIgnoreInput } from 'lib/utils' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' diff --git a/frontend/src/lib/components/CommandBar/searchBarLogic.ts b/frontend/src/lib/components/CommandBar/searchBarLogic.ts index e5bcddf323..66eef3d82a 100644 --- a/frontend/src/lib/components/CommandBar/searchBarLogic.ts +++ b/frontend/src/lib/components/CommandBar/searchBarLogic.ts @@ -2,6 +2,7 @@ import { actions, afterMount, beforeUnmount, connect, kea, listeners, path, redu import { loaders } from 'kea-loaders' import { router } from 'kea-router' import { subscriptions } from 'kea-subscriptions' + import api, { CountedPaginatedResponse } from 'lib/api' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' @@ -10,10 +11,10 @@ import { urls } from 'scenes/urls' import { getDefaultTreeProducts, iconForType } from '~/layout/panel-layout/ProjectTree/defaultTree' import { groupsModel } from '~/models/groupsModel' import { FileSystemImport } from '~/queries/schema/schema-general' -import { Group, InsightShortId, PersonType, SearchableEntity, SearchResponse } from '~/types' +import { Group, InsightShortId, PersonType, SearchResponse, SearchableEntity } from '~/types' import { commandBarLogic } from './commandBarLogic' -import { clickhouseTabs, Tab, TabGroup } from './constants' +import { Tab, TabGroup, clickhouseTabs } from './constants' import type { searchBarLogicType } from './searchBarLogicType' import { BarStatus, GroupResult, PersonResult, SearchResult, TreeItemResult } from './types' diff --git a/frontend/src/lib/components/CommandBar/types.ts b/frontend/src/lib/components/CommandBar/types.ts index f25d64a79c..944aa4e4b9 100644 --- a/frontend/src/lib/components/CommandBar/types.ts +++ b/frontend/src/lib/components/CommandBar/types.ts @@ -1,4 +1,4 @@ -import { Group, PersonType, SearchableEntity, SearchResultType } from '~/types' +import { Group, PersonType, SearchResultType, SearchableEntity } from '~/types' export enum BarStatus { HIDDEN = 'hidden', diff --git a/frontend/src/lib/components/CommandPalette/DebugCHQueries.tsx b/frontend/src/lib/components/CommandPalette/DebugCHQueries.tsx index 5152fe8b09..13f15db2aa 100644 --- a/frontend/src/lib/components/CommandPalette/DebugCHQueries.tsx +++ b/frontend/src/lib/components/CommandPalette/DebugCHQueries.tsx @@ -1,29 +1,31 @@ -import { IconCodeInsert, IconCopy } from '@posthog/icons' import ChartDataLabels from 'chartjs-plugin-datalabels' import ChartjsPluginStacked100 from 'chartjs-plugin-stacked100' import { actions, afterMount, kea, path, reducers, selectors, useActions, useValues } from 'kea' import { loaders } from 'kea-loaders' -import api from 'lib/api' +import { useEffect, useMemo, useRef, useState } from 'react' + +import { IconCodeInsert, IconCopy } from '@posthog/icons' + import { ChartConfiguration, ChartDataset } from 'lib/Chart' import { Chart, ChartItem } from 'lib/Chart' +import api from 'lib/api' import { dayjs } from 'lib/dayjs' -import { IconRefresh } from 'lib/lemon-ui/icons' import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonDialog } from 'lib/lemon-ui/LemonDialog' import { LemonTable } from 'lib/lemon-ui/LemonTable' import { LemonTag } from 'lib/lemon-ui/LemonTag' import { Link } from 'lib/lemon-ui/Link' +import { IconRefresh } from 'lib/lemon-ui/icons' import { humanizeBytes } from 'lib/utils' import { copyToClipboard } from 'lib/utils/copyToClipboard' -import { useEffect, useMemo, useRef, useState } from 'react' +import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { urls } from 'scenes/urls' import { FilterLogicalOperator, PropertyFilterType, PropertyOperator, Realm, Region } from '~/types' import { CodeSnippet, Language } from '../CodeSnippet' import type { debugCHQueriesLogicType } from './DebugCHQueriesType' -import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' export function openCHQueriesDebugModal(): void { LemonDialog.open({ diff --git a/frontend/src/lib/components/CommandPalette/commandPaletteLogic.tsx b/frontend/src/lib/components/CommandPalette/commandPaletteLogic.tsx index 575a6e9e12..d0602824be 100644 --- a/frontend/src/lib/components/CommandPalette/commandPaletteLogic.tsx +++ b/frontend/src/lib/components/CommandPalette/commandPaletteLogic.tsx @@ -1,3 +1,9 @@ +import { Parser } from 'expr-eval' +import Fuse from 'fuse.js' +import { actions, connect, events, kea, listeners, path, reducers, selectors } from 'kea' +import { router } from 'kea-router' +import posthog from 'posthog-js' + import { IconCalculator, IconChat, @@ -42,20 +48,16 @@ import { IconWarning, IconX, } from '@posthog/icons' -import { Parser } from 'expr-eval' -import Fuse from 'fuse.js' -import { actions, connect, events, kea, listeners, path, reducers, selectors } from 'kea' -import { router } from 'kea-router' + import api from 'lib/api' -import { IconFlare } from 'lib/lemon-ui/icons' import { ProfilePicture } from 'lib/lemon-ui/ProfilePicture' +import { IconFlare } from 'lib/lemon-ui/icons' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { isMobile, isURL, uniqueBy } from 'lib/utils' import { copyToClipboard } from 'lib/utils/copyToClipboard' -import posthog from 'posthog-js' +import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { newDashboardLogic } from 'scenes/dashboard/newDashboardLogic' import { INSIGHT_TYPE_URLS } from 'scenes/insights/utils' -import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { WATCH_RECORDINGS_OF_KEY, watchRecordingsOfCommand } from 'scenes/session-recordings/replayPaletteCommands' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' @@ -69,8 +71,8 @@ import { InsightType } from '~/types' import { commandBarLogic } from '../CommandBar/commandBarLogic' import { BarStatus } from '../CommandBar/types' import { hedgehogBuddyLogic } from '../HedgehogBuddy/hedgehogBuddyLogic' -import type { commandPaletteLogicType } from './commandPaletteLogicType' import { openCHQueriesDebugModal } from './DebugCHQueries' +import type { commandPaletteLogicType } from './commandPaletteLogicType' // If CommandExecutor returns CommandFlow, flow will be entered export type CommandExecutor = () => CommandFlow | void diff --git a/frontend/src/lib/components/CompactList/CompactList.stories.tsx b/frontend/src/lib/components/CompactList/CompactList.stories.tsx index d8feaef692..b7f2c9c05f 100644 --- a/frontend/src/lib/components/CompactList/CompactList.stories.tsx +++ b/frontend/src/lib/components/CompactList/CompactList.stories.tsx @@ -1,4 +1,5 @@ import { Meta } from '@storybook/react' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { PersonDisplay } from 'scenes/persons/PersonDisplay' import { urls } from 'scenes/urls' diff --git a/frontend/src/lib/components/CompactList/CompactList.tsx b/frontend/src/lib/components/CompactList/CompactList.tsx index 680ec9564f..e4e277b387 100644 --- a/frontend/src/lib/components/CompactList/CompactList.tsx +++ b/frontend/src/lib/components/CompactList/CompactList.tsx @@ -2,6 +2,7 @@ import './CompactList.scss' import clsx from 'clsx' import { useValues } from 'kea' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonDivider } from 'lib/lemon-ui/LemonDivider' import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' diff --git a/frontend/src/lib/components/CompareFilter/CompareFilter.tsx b/frontend/src/lib/components/CompareFilter/CompareFilter.tsx index 3d7f4843e0..580b919380 100644 --- a/frontend/src/lib/components/CompareFilter/CompareFilter.tsx +++ b/frontend/src/lib/components/CompareFilter/CompareFilter.tsx @@ -1,9 +1,11 @@ +import { useEffect, useState } from 'react' + import { IconClock } from '@posthog/icons' import { LemonSelect } from '@posthog/lemon-ui' + import { RollingDateRangeFilter } from 'lib/components/DateFilter/RollingDateRangeFilter' import { useWindowSize } from 'lib/hooks/useWindowSize' import { dateFromToText } from 'lib/utils' -import { useEffect, useState } from 'react' import { CompareFilter as CompareFilterType } from '~/queries/schema/schema-general' diff --git a/frontend/src/lib/components/ConfirmUpgradeModal/ConfirmUpgradeModal.tsx b/frontend/src/lib/components/ConfirmUpgradeModal/ConfirmUpgradeModal.tsx index bafe1df831..c220d624d8 100644 --- a/frontend/src/lib/components/ConfirmUpgradeModal/ConfirmUpgradeModal.tsx +++ b/frontend/src/lib/components/ConfirmUpgradeModal/ConfirmUpgradeModal.tsx @@ -1,7 +1,9 @@ -import { IconCheckCircle } from '@posthog/icons' -import { LemonButton, LemonModal, Tooltip } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { useMemo } from 'react' + +import { IconCheckCircle } from '@posthog/icons' +import { LemonButton, LemonModal, Tooltip } from '@posthog/lemon-ui' + import { getProration } from 'scenes/billing/billing-utils' import { billingLogic } from 'scenes/billing/billingLogic' diff --git a/frontend/src/lib/components/CopyToClipboard.tsx b/frontend/src/lib/components/CopyToClipboard.tsx index 22d1872aa3..b56340e59f 100644 --- a/frontend/src/lib/components/CopyToClipboard.tsx +++ b/frontend/src/lib/components/CopyToClipboard.tsx @@ -1,9 +1,11 @@ -import { IconCopy } from '@posthog/icons' import clsx from 'clsx' +import React from 'react' + +import { IconCopy } from '@posthog/icons' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { Tooltip } from 'lib/lemon-ui/Tooltip' import { copyToClipboard } from 'lib/utils/copyToClipboard' -import React from 'react' interface InlinePropsBase { description?: string diff --git a/frontend/src/lib/components/CyclotronJob/CyclotronJobInputs.tsx b/frontend/src/lib/components/CyclotronJob/CyclotronJobInputs.tsx index b07bf12a21..c10a4123b3 100644 --- a/frontend/src/lib/components/CyclotronJob/CyclotronJobInputs.tsx +++ b/frontend/src/lib/components/CyclotronJob/CyclotronJobInputs.tsx @@ -1,6 +1,10 @@ -import { closestCenter, DndContext } from '@dnd-kit/core' -import { arrayMove, SortableContext, useSortable, verticalListSortingStrategy } from '@dnd-kit/sortable' +import { DndContext, closestCenter } from '@dnd-kit/core' +import { SortableContext, arrayMove, useSortable, verticalListSortingStrategy } from '@dnd-kit/sortable' import { CSS } from '@dnd-kit/utilities' +import clsx from 'clsx' +import { useActions, useValues } from 'kea' +import { useEffect, useMemo, useRef, useState } from 'react' + import { IconGear, IconLock, IconPlus, IconTrash, IconX } from '@posthog/icons' import { LemonButton, @@ -15,27 +19,24 @@ import { LemonTextArea, Tooltip, } from '@posthog/lemon-ui' -import clsx from 'clsx' -import { useActions, useValues } from 'kea' + import { LemonField } from 'lib/lemon-ui/LemonField' +import { LemonMarkdown } from 'lib/lemon-ui/LemonMarkdown/LemonMarkdown' import { CodeEditorInline } from 'lib/monaco/CodeEditorInline' import { CodeEditorResizeable } from 'lib/monaco/CodeEditorResizable' import { capitalizeFirstLetter, objectsEqual } from 'lib/utils' import { uuid } from 'lib/utils' import { copyToClipboard } from 'lib/utils/copyToClipboard' -import { useEffect, useMemo, useRef, useState } from 'react' import { CyclotronJobInputSchemaType, CyclotronJobInputType, CyclotronJobInvocationGlobalsWithInputs } from '~/types' import { EmailTemplater } from '../../../scenes/hog-functions/email-templater/EmailTemplater' -import { cyclotronJobInputLogic, formatJsonValue } from './cyclotronJobInputLogic' import { CyclotronJobTemplateSuggestionsButton } from './CyclotronJobTemplateSuggestions' +import { cyclotronJobInputLogic, formatJsonValue } from './cyclotronJobInputLogic' import { CyclotronJobInputIntegration } from './integrations/CyclotronJobInputIntegration' import { CyclotronJobInputIntegrationField } from './integrations/CyclotronJobInputIntegrationField' import { CyclotronJobInputConfiguration } from './types' -import { LemonMarkdown } from 'lib/lemon-ui/LemonMarkdown/LemonMarkdown' - export const EXTEND_OBJECT_KEY = '$$_extend_object' const INPUT_TYPE_LIST = [ diff --git a/frontend/src/lib/components/CyclotronJob/CyclotronJobTemplateSuggestions.tsx b/frontend/src/lib/components/CyclotronJob/CyclotronJobTemplateSuggestions.tsx index 9b98ac99fc..b49f15f724 100644 --- a/frontend/src/lib/components/CyclotronJob/CyclotronJobTemplateSuggestions.tsx +++ b/frontend/src/lib/components/CyclotronJob/CyclotronJobTemplateSuggestions.tsx @@ -1,8 +1,9 @@ -import { IconCode, IconExternal } from '@posthog/icons' -import { LemonButton, LemonDropdown, LemonInput, LemonSelect, Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { useState } from 'react' +import { IconCode, IconExternal } from '@posthog/icons' +import { LemonButton, LemonDropdown, LemonInput, LemonSelect, Link } from '@posthog/lemon-ui' + import { CyclotronJobTemplateOption, cyclotronJobTemplateSuggestionsLogic, diff --git a/frontend/src/lib/components/CyclotronJob/cyclotronJobTemplateSuggestionsLogic.tsx b/frontend/src/lib/components/CyclotronJob/cyclotronJobTemplateSuggestionsLogic.tsx index 5b885c4e96..6a62c11755 100644 --- a/frontend/src/lib/components/CyclotronJob/cyclotronJobTemplateSuggestionsLogic.tsx +++ b/frontend/src/lib/components/CyclotronJob/cyclotronJobTemplateSuggestionsLogic.tsx @@ -1,7 +1,8 @@ -import { STL as HOG_STL } from '@posthog/hogvm' import FuseClass from 'fuse.js' import { actions, kea, key, path, props, reducers, selectors } from 'kea' +import { STL as HOG_STL } from '@posthog/hogvm' + import type { cyclotronJobTemplateSuggestionsLogicType } from './cyclotronJobTemplateSuggestionsLogicType' export type CyclotronJobTemplateOption = { diff --git a/frontend/src/lib/components/CyclotronJob/integrations/CyclotronJobInputIntegrationField.tsx b/frontend/src/lib/components/CyclotronJob/integrations/CyclotronJobInputIntegrationField.tsx index 815ec8a7ae..e1d760209b 100644 --- a/frontend/src/lib/components/CyclotronJob/integrations/CyclotronJobInputIntegrationField.tsx +++ b/frontend/src/lib/components/CyclotronJob/integrations/CyclotronJobInputIntegrationField.tsx @@ -1,26 +1,28 @@ -import { LemonSkeleton } from '@posthog/lemon-ui' import { useValues } from 'kea' + +import { LemonSkeleton } from '@posthog/lemon-ui' + +import { + ClickUpListPicker, + ClickUpSpacePicker, + ClickUpWorkspacePicker, +} from 'lib/integrations/ClickUpIntegrationHelpers' import { GoogleAdsConversionActionPicker, GoogleAdsCustomerIdPicker, } from 'lib/integrations/GoogleAdsIntegrationHelpers' -import { integrationsLogic } from 'lib/integrations/integrationsLogic' import { LinearTeamPicker } from 'lib/integrations/LinearIntegrationHelpers' import { LinkedInAdsAccountIdPicker, LinkedInAdsConversionRulePicker, } from 'lib/integrations/LinkedInIntegrationHelpers' import { SlackChannelPicker } from 'lib/integrations/SlackIntegrationHelpers' +import { TwilioPhoneNumberPicker } from 'lib/integrations/TwilioIntegrationHelpers' +import { integrationsLogic } from 'lib/integrations/integrationsLogic' import { CyclotronJobInputSchemaType } from '~/types' import { CyclotronJobInputConfiguration } from '../types' -import { TwilioPhoneNumberPicker } from 'lib/integrations/TwilioIntegrationHelpers' -import { - ClickUpSpacePicker, - ClickUpListPicker, - ClickUpWorkspacePicker, -} from 'lib/integrations/ClickUpIntegrationHelpers' export type CyclotronJobInputIntegrationFieldProps = { schema: CyclotronJobInputSchemaType diff --git a/frontend/src/lib/components/CyclotronJob/integrations/IntegrationChoice.tsx b/frontend/src/lib/components/CyclotronJob/integrations/IntegrationChoice.tsx index 5af9cbe751..8a54c579c0 100644 --- a/frontend/src/lib/components/CyclotronJob/integrations/IntegrationChoice.tsx +++ b/frontend/src/lib/components/CyclotronJob/integrations/IntegrationChoice.tsx @@ -1,15 +1,18 @@ +import { useActions, useValues } from 'kea' + import { IconExternal, IconX } from '@posthog/icons' import { LemonButton, LemonMenu, LemonSkeleton } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import api from 'lib/api' -import { integrationsLogic } from 'lib/integrations/integrationsLogic' import { IntegrationView } from 'lib/integrations/IntegrationView' +import { integrationsLogic } from 'lib/integrations/integrationsLogic' import { getIntegrationNameFromKind } from 'lib/integrations/utils' -import { ChannelSetupModal } from 'products/messaging/frontend/Channels/ChannelSetupModal' import { urls } from 'scenes/urls' import { CyclotronJobInputSchemaType } from '~/types' +import { ChannelSetupModal } from 'products/messaging/frontend/Channels/ChannelSetupModal' + export type IntegrationConfigureProps = { value?: number onChange?: (value: number | null) => void diff --git a/frontend/src/lib/components/DatabaseTableTree/TreeRow.tsx b/frontend/src/lib/components/DatabaseTableTree/TreeRow.tsx index 6e08c5b19f..2d54277d94 100644 --- a/frontend/src/lib/components/DatabaseTableTree/TreeRow.tsx +++ b/frontend/src/lib/components/DatabaseTableTree/TreeRow.tsx @@ -1,9 +1,11 @@ +import clsx from 'clsx' +import { useCallback, useState } from 'react' + import { IconChevronDown, IconClock, IconEllipsis } from '@posthog/icons' import { LemonButton, LemonMenu, LemonMenuItem, Spinner, Tooltip } from '@posthog/lemon-ui' -import clsx from 'clsx' + import { humanFriendlyDetailedTime } from 'lib/utils' import { copyToClipboard } from 'lib/utils/copyToClipboard' -import { useCallback, useState } from 'react' import { DatabaseSchemaTable } from '~/queries/schema/schema-general' diff --git a/frontend/src/lib/components/DateDisplay/index.tsx b/frontend/src/lib/components/DateDisplay/index.tsx index acaba56136..7e7152a2a3 100644 --- a/frontend/src/lib/components/DateDisplay/index.tsx +++ b/frontend/src/lib/components/DateDisplay/index.tsx @@ -1,11 +1,11 @@ import './DateDisplay.scss' import { dayjs } from 'lib/dayjs' - -import { IntervalType } from '~/types' -import { ResolvedDateRangeResponse } from '~/queries/schema/schema-general' import { getConstrainedWeekRange } from 'lib/utils/dateTimeUtils' +import { ResolvedDateRangeResponse } from '~/queries/schema/schema-general' +import { IntervalType } from '~/types' + interface DateDisplayProps { date: string secondaryDate?: string diff --git a/frontend/src/lib/components/DateFilter/DateFilter.test.tsx b/frontend/src/lib/components/DateFilter/DateFilter.test.tsx index 570e81dc90..0884e1c924 100644 --- a/frontend/src/lib/components/DateFilter/DateFilter.test.tsx +++ b/frontend/src/lib/components/DateFilter/DateFilter.test.tsx @@ -1,8 +1,8 @@ import '@testing-library/jest-dom' - import { cleanup, render, screen, waitFor } from '@testing-library/react' import userEvent from '@testing-library/user-event' import { Provider } from 'kea' + import { dateMapping } from 'lib/utils' import { initKeaTests } from '~/test/init' diff --git a/frontend/src/lib/components/DateFilter/DateFilter.tsx b/frontend/src/lib/components/DateFilter/DateFilter.tsx index 50e43e3ea3..91ecea9c82 100644 --- a/frontend/src/lib/components/DateFilter/DateFilter.tsx +++ b/frontend/src/lib/components/DateFilter/DateFilter.tsx @@ -1,8 +1,11 @@ import { Placement } from '@floating-ui/react' -import { IconCalendar } from '@posthog/icons' -import { LemonButton, LemonButtonProps, LemonDivider, Popover } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' +import { useRef, useState } from 'react' + +import { IconCalendar } from '@posthog/icons' +import { LemonButton, LemonButtonProps, LemonDivider, Popover } from '@posthog/lemon-ui' + import { CUSTOM_OPTION_DESCRIPTION, CUSTOM_OPTION_KEY, @@ -15,13 +18,12 @@ import { LemonCalendarSelect, LemonCalendarSelectProps } from 'lib/lemon-ui/Lemo import { LemonCalendarRange } from 'lib/lemon-ui/LemonCalendarRange/LemonCalendarRange' import { Tooltip } from 'lib/lemon-ui/Tooltip' import { dateFilterToText, dateMapping, uuid } from 'lib/utils' -import { useRef, useState } from 'react' import { DateMappingOption, PropertyOperator } from '~/types' import { PropertyFilterDatePicker } from '../PropertyFilters/components/PropertyFilterDatePicker' -import { dateFilterLogic } from './dateFilterLogic' import { RollingDateRangeFilter } from './RollingDateRangeFilter' +import { dateFilterLogic } from './dateFilterLogic' import { DateOption } from './rollingDateRangeFilterLogic' export interface DateFilterProps { diff --git a/frontend/src/lib/components/DateFilter/RollingDateRangeFilter.tsx b/frontend/src/lib/components/DateFilter/RollingDateRangeFilter.tsx index 4b0fe92de0..cc277e41c1 100644 --- a/frontend/src/lib/components/DateFilter/RollingDateRangeFilter.tsx +++ b/frontend/src/lib/components/DateFilter/RollingDateRangeFilter.tsx @@ -1,7 +1,9 @@ import './RollingDateRangeFilter.scss' -import { LemonButton, LemonButtonProps, LemonInput, LemonSelect, LemonSelectOptionLeaf } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonButton, LemonButtonProps, LemonInput, LemonSelect, LemonSelectOptionLeaf } from '@posthog/lemon-ui' + import { dayjs } from 'lib/dayjs' import { Tooltip } from 'lib/lemon-ui/Tooltip' diff --git a/frontend/src/lib/components/DateFilter/dateFilterLogic.test.ts b/frontend/src/lib/components/DateFilter/dateFilterLogic.test.ts index 3653c9b680..97341a08aa 100644 --- a/frontend/src/lib/components/DateFilter/dateFilterLogic.test.ts +++ b/frontend/src/lib/components/DateFilter/dateFilterLogic.test.ts @@ -1,4 +1,5 @@ import { expectLogic } from 'kea-test-utils' + import { DateFilterLogicProps, DateFilterView } from 'lib/components/DateFilter/types' import { dayjs } from 'lib/dayjs' import { dateMapping } from 'lib/utils' diff --git a/frontend/src/lib/components/DateFilter/dateFilterLogic.ts b/frontend/src/lib/components/DateFilter/dateFilterLogic.ts index 96db308bde..ab9dcb46a2 100644 --- a/frontend/src/lib/components/DateFilter/dateFilterLogic.ts +++ b/frontend/src/lib/components/DateFilter/dateFilterLogic.ts @@ -1,4 +1,5 @@ import { actions, kea, key, listeners, path, props, reducers, selectors } from 'kea' + import { DateFilterLogicProps, DateFilterView, diff --git a/frontend/src/lib/components/DateFilter/rollingDateRangeFilterLogic.ts b/frontend/src/lib/components/DateFilter/rollingDateRangeFilterLogic.ts index a22648eaaf..42bb747a99 100644 --- a/frontend/src/lib/components/DateFilter/rollingDateRangeFilterLogic.ts +++ b/frontend/src/lib/components/DateFilter/rollingDateRangeFilterLogic.ts @@ -1,6 +1,7 @@ import './RollingDateRangeFilter.scss' import { actions, kea, key, listeners, path, props, reducers, selectors } from 'kea' + import { Dayjs } from 'lib/dayjs' import { dateFilterToText } from 'lib/utils' diff --git a/frontend/src/lib/components/DebugNotice.tsx b/frontend/src/lib/components/DebugNotice.tsx index 923f0a5324..429df19da7 100644 --- a/frontend/src/lib/components/DebugNotice.tsx +++ b/frontend/src/lib/components/DebugNotice.tsx @@ -1,10 +1,12 @@ +import { useState } from 'react' + import { IconCode, IconWarning, IconX } from '@posthog/icons' import { Link, Tooltip } from '@posthog/lemon-ui' -import { IconBranch } from 'lib/lemon-ui/icons' -import { LemonButton } from 'lib/lemon-ui/LemonButton' -import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' -import { useState } from 'react' + import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' +import { LemonButton } from 'lib/lemon-ui/LemonButton' +import { IconBranch } from 'lib/lemon-ui/icons' +import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' export interface DebugNoticeProps { isCollapsed?: boolean diff --git a/frontend/src/lib/components/DefinitionPopover/CohortPopoverInfo.tsx b/frontend/src/lib/components/DefinitionPopover/CohortPopoverInfo.tsx index 81ec3853f0..151095ff37 100644 --- a/frontend/src/lib/components/DefinitionPopover/CohortPopoverInfo.tsx +++ b/frontend/src/lib/components/DefinitionPopover/CohortPopoverInfo.tsx @@ -1,5 +1,7 @@ -import { LemonDivider } from '@posthog/lemon-ui' import { useValues } from 'kea' + +import { LemonDivider } from '@posthog/lemon-ui' + import { DefinitionPopover } from 'lib/components/DefinitionPopover/DefinitionPopover' import { genericOperatorToHumanName, diff --git a/frontend/src/lib/components/DefinitionPopover/DefinitionPopover.tsx b/frontend/src/lib/components/DefinitionPopover/DefinitionPopover.tsx index 01fec7eb03..460ae171da 100644 --- a/frontend/src/lib/components/DefinitionPopover/DefinitionPopover.tsx +++ b/frontend/src/lib/components/DefinitionPopover/DefinitionPopover.tsx @@ -1,9 +1,11 @@ import './DefinitionPopover.scss' -import { LemonDivider, ProfilePicture } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' -import { definitionPopoverLogic, DefinitionPopoverState } from 'lib/components/DefinitionPopover/definitionPopoverLogic' + +import { LemonDivider, ProfilePicture } from '@posthog/lemon-ui' + +import { DefinitionPopoverState, definitionPopoverLogic } from 'lib/components/DefinitionPopover/definitionPopoverLogic' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { dayjs } from 'lib/dayjs' import { LemonMarkdown } from 'lib/lemon-ui/LemonMarkdown' diff --git a/frontend/src/lib/components/DefinitionPopover/DefinitionPopoverContents.tsx b/frontend/src/lib/components/DefinitionPopover/DefinitionPopoverContents.tsx index eae93144d2..feaedd1c21 100644 --- a/frontend/src/lib/components/DefinitionPopover/DefinitionPopoverContents.tsx +++ b/frontend/src/lib/components/DefinitionPopover/DefinitionPopoverContents.tsx @@ -1,11 +1,14 @@ import { hide } from '@floating-ui/react' +import { useActions, useValues } from 'kea' +import { Fragment, useEffect, useMemo } from 'react' + import { IconBadge, IconEye, IconHide, IconInfo } from '@posthog/icons' import { LemonButton, LemonDivider, LemonSegmentedButton, LemonSelect, LemonTag } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { ActionPopoverInfo } from 'lib/components/DefinitionPopover/ActionPopoverInfo' import { CohortPopoverInfo } from 'lib/components/DefinitionPopover/CohortPopoverInfo' import { DefinitionPopover } from 'lib/components/DefinitionPopover/DefinitionPopover' -import { definitionPopoverLogic, DefinitionPopoverState } from 'lib/components/DefinitionPopover/definitionPopoverLogic' +import { DefinitionPopoverState, definitionPopoverLogic } from 'lib/components/DefinitionPopover/definitionPopoverLogic' import { ObjectTags } from 'lib/components/ObjectTags/ObjectTags' import { PropertyKeyInfo } from 'lib/components/PropertyKeyInfo' import { @@ -15,12 +18,11 @@ import { TaxonomicFilterGroup, TaxonomicFilterGroupType, } from 'lib/components/TaxonomicFilter/types' -import { IconOpenInNew } from 'lib/lemon-ui/icons' import { LemonTextArea } from 'lib/lemon-ui/LemonTextArea/LemonTextArea' import { Popover } from 'lib/lemon-ui/Popover' import { Tooltip } from 'lib/lemon-ui/Tooltip' +import { IconOpenInNew } from 'lib/lemon-ui/icons' import { cn } from 'lib/utils/css-classes' -import { Fragment, useEffect, useMemo } from 'react' import { DataWarehouseTableForInsight } from 'scenes/data-warehouse/types' import { isCoreFilter } from '~/taxonomy/helpers' @@ -34,8 +36,8 @@ import { } from '~/types' import { HogQLDropdown } from '../HogQLDropdown/HogQLDropdown' -import { taxonomicFilterLogic } from '../TaxonomicFilter/taxonomicFilterLogic' import { TZLabel } from '../TZLabel' +import { taxonomicFilterLogic } from '../TaxonomicFilter/taxonomicFilterLogic' export function PropertyStatusControl({ verified, diff --git a/frontend/src/lib/components/DefinitionPopover/definitionPopoverLogic.test.ts b/frontend/src/lib/components/DefinitionPopover/definitionPopoverLogic.test.ts index 683cdf8c4a..a690491b34 100644 --- a/frontend/src/lib/components/DefinitionPopover/definitionPopoverLogic.test.ts +++ b/frontend/src/lib/components/DefinitionPopover/definitionPopoverLogic.test.ts @@ -1,6 +1,7 @@ import { expectLogic } from 'kea-test-utils' + import api from 'lib/api' -import { definitionPopoverLogic, DefinitionPopoverState } from 'lib/components/DefinitionPopover/definitionPopoverLogic' +import { DefinitionPopoverState, definitionPopoverLogic } from 'lib/components/DefinitionPopover/definitionPopoverLogic' import { TaxonomicDefinitionTypes, TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { urls } from 'scenes/urls' diff --git a/frontend/src/lib/components/DefinitionPopover/definitionPopoverLogic.ts b/frontend/src/lib/components/DefinitionPopover/definitionPopoverLogic.ts index 34503914c0..99bc233b41 100644 --- a/frontend/src/lib/components/DefinitionPopover/definitionPopoverLogic.ts +++ b/frontend/src/lib/components/DefinitionPopover/definitionPopoverLogic.ts @@ -1,6 +1,7 @@ import equal from 'fast-deep-equal' import { actions, connect, events, kea, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { getSingularType } from 'lib/components/DefinitionPopover/utils' import { TaxonomicDefinitionTypes, TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' diff --git a/frontend/src/lib/components/DurationPicker/DurationPicker.tsx b/frontend/src/lib/components/DurationPicker/DurationPicker.tsx index 234cce3fe9..dc358ba247 100644 --- a/frontend/src/lib/components/DurationPicker/DurationPicker.tsx +++ b/frontend/src/lib/components/DurationPicker/DurationPicker.tsx @@ -1,6 +1,7 @@ -import { LemonInput, LemonSelect } from '@posthog/lemon-ui' import { useEffect, useState } from 'react' +import { LemonInput, LemonSelect } from '@posthog/lemon-ui' + import { Duration, SmallTimeUnit } from '~/types' interface DurationPickerProps { diff --git a/frontend/src/lib/components/EditableField/EditableField.tsx b/frontend/src/lib/components/EditableField/EditableField.tsx index 002d9d1be9..68541d3a55 100644 --- a/frontend/src/lib/components/EditableField/EditableField.tsx +++ b/frontend/src/lib/components/EditableField/EditableField.tsx @@ -1,17 +1,19 @@ import './EditableField.scss' -import { IconPencil } from '@posthog/icons' import clsx from 'clsx' import { useValues } from 'kea' +import React, { useEffect, useRef, useState } from 'react' +import TextareaAutosize from 'react-textarea-autosize' + +import { IconPencil } from '@posthog/icons' + import { useResizeObserver } from 'lib/hooks/useResizeObserver' -import { IconMarkdown } from 'lib/lemon-ui/icons' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { RawInputAutosize } from 'lib/lemon-ui/LemonInput/RawInputAutosize' import { LemonMarkdown } from 'lib/lemon-ui/LemonMarkdown' import { Tooltip } from 'lib/lemon-ui/Tooltip' +import { IconMarkdown } from 'lib/lemon-ui/icons' import { pluralize } from 'lib/utils' -import React, { useEffect, useRef, useState } from 'react' -import TextareaAutosize from 'react-textarea-autosize' import { AvailableFeature } from '~/types' diff --git a/frontend/src/lib/components/EmojiPicker/EmojiPickerPopover.tsx b/frontend/src/lib/components/EmojiPicker/EmojiPickerPopover.tsx index f447d10cbb..bcbe5f1caf 100644 --- a/frontend/src/lib/components/EmojiPicker/EmojiPickerPopover.tsx +++ b/frontend/src/lib/components/EmojiPicker/EmojiPickerPopover.tsx @@ -4,10 +4,12 @@ import { EmojiPickerListEmojiProps, EmojiPickerListRowProps, } from 'frimousse' +import { useState } from 'react' + +import { IconEmojiAdd } from '@posthog/icons' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { Popover } from 'lib/lemon-ui/Popover' -import { useState } from 'react' -import { IconEmojiAdd } from '@posthog/icons' const EmojiPickerCategoryHeader = ({ category, ...props }: EmojiPickerListCategoryHeaderProps): JSX.Element => (
diff --git a/frontend/src/lib/components/EntityFilterInfo.tsx b/frontend/src/lib/components/EntityFilterInfo.tsx index 1abd338138..ae8608c74b 100644 --- a/frontend/src/lib/components/EntityFilterInfo.tsx +++ b/frontend/src/lib/components/EntityFilterInfo.tsx @@ -1,4 +1,5 @@ import clsx from 'clsx' + import { getDisplayNameFromEntityFilter, isAllEventsEntityFilter } from 'scenes/insights/utils' import { getCoreFilterDefinition } from '~/taxonomy/helpers' diff --git a/frontend/src/lib/components/Errors/ErrorDisplay.stories.tsx b/frontend/src/lib/components/Errors/ErrorDisplay.stories.tsx index 00cc8e5b2e..64ac81289a 100644 --- a/frontend/src/lib/components/Errors/ErrorDisplay.stories.tsx +++ b/frontend/src/lib/components/Errors/ErrorDisplay.stories.tsx @@ -1,4 +1,5 @@ import { Meta } from '@storybook/react' + import { ErrorDisplay } from 'lib/components/Errors/ErrorDisplay' import { mswDecorator } from '~/mocks/browser' diff --git a/frontend/src/lib/components/Errors/ErrorDisplay.tsx b/frontend/src/lib/components/Errors/ErrorDisplay.tsx index 3a401f4085..129f8356d5 100644 --- a/frontend/src/lib/components/Errors/ErrorDisplay.tsx +++ b/frontend/src/lib/components/Errors/ErrorDisplay.tsx @@ -1,17 +1,20 @@ -import { LemonBanner } from '@posthog/lemon-ui' import { BindLogic, useValues } from 'kea' +import { useState } from 'react' + +import { LemonBanner } from '@posthog/lemon-ui' + import { TitledSnack } from 'lib/components/TitledSnack' +import { dayjs } from 'lib/dayjs' import { LemonDivider } from 'lib/lemon-ui/LemonDivider' import { LemonSwitch } from 'lib/lemon-ui/LemonSwitch' import { Link } from 'lib/lemon-ui/Link' -import { useState } from 'react' -import { errorPropertiesLogic } from './errorPropertiesLogic' +import { EventType, RecordingEventType } from '~/types' + import { ChainedStackTraces } from './StackTraces' +import { errorPropertiesLogic } from './errorPropertiesLogic' import { ErrorEventId, ErrorEventProperties } from './types' import { concatValues } from './utils' -import { EventType, RecordingEventType } from '~/types' -import { dayjs } from 'lib/dayjs' export function idFrom(event: EventType | RecordingEventType): string { if ('uuid' in event && event.uuid) { diff --git a/frontend/src/lib/components/Errors/FingerprintRecordPartDisplay.tsx b/frontend/src/lib/components/Errors/FingerprintRecordPartDisplay.tsx index ddb08d27b8..d91737f96e 100644 --- a/frontend/src/lib/components/Errors/FingerprintRecordPartDisplay.tsx +++ b/frontend/src/lib/components/Errors/FingerprintRecordPartDisplay.tsx @@ -1,8 +1,10 @@ +import { useRef } from 'react' + import { Tooltip } from '@posthog/lemon-ui' + import useIsHovering from 'lib/hooks/useIsHovering' import { IconFingerprint } from 'lib/lemon-ui/icons' import { cn } from 'lib/utils/css-classes' -import { useRef } from 'react' import { FingerprintRecordPart } from './types' diff --git a/frontend/src/lib/components/Errors/StackTraces.tsx b/frontend/src/lib/components/Errors/StackTraces.tsx index b721c2ad90..33b06ec97b 100644 --- a/frontend/src/lib/components/Errors/StackTraces.tsx +++ b/frontend/src/lib/components/Errors/StackTraces.tsx @@ -1,18 +1,20 @@ import './StackTraces.scss' +import clsx from 'clsx' +import { useActions, useValues } from 'kea' +import { MouseEvent, useEffect } from 'react' +import { P, match } from 'ts-pattern' + import { IconBox } from '@posthog/icons' import { LemonCollapse, Tooltip } from '@posthog/lemon-ui' import { cancelEvent } from '@posthog/products-error-tracking/frontend/utils' -import clsx from 'clsx' -import { useActions, useValues } from 'kea' -import { LemonTag } from 'lib/lemon-ui/LemonTag/LemonTag' -import { MouseEvent, useEffect } from 'react' -import { match, P } from 'ts-pattern' -import { CodeLine, getLanguage, Language } from '../CodeSnippet/CodeSnippet' +import { LemonTag } from 'lib/lemon-ui/LemonTag/LemonTag' + +import { CodeLine, Language, getLanguage } from '../CodeSnippet/CodeSnippet' import { CopyToClipboardInline } from '../CopyToClipboard' -import { errorPropertiesLogic } from './errorPropertiesLogic' import { FingerprintRecordPartDisplay } from './FingerprintRecordPartDisplay' +import { errorPropertiesLogic } from './errorPropertiesLogic' import { stackFrameLogic } from './stackFrameLogic' import { ErrorTrackingException, diff --git a/frontend/src/lib/components/Errors/errorPropertiesLogic.ts b/frontend/src/lib/components/Errors/errorPropertiesLogic.ts index 12c4148708..6adc2dfafa 100644 --- a/frontend/src/lib/components/Errors/errorPropertiesLogic.ts +++ b/frontend/src/lib/components/Errors/errorPropertiesLogic.ts @@ -1,4 +1,5 @@ import { connect, kea, key, path, props, selectors } from 'kea' + import { ErrorEventId, ErrorEventProperties, diff --git a/frontend/src/lib/components/Errors/stackFrameLogic.ts b/frontend/src/lib/components/Errors/stackFrameLogic.ts index 3bc90e0403..8486b34a3a 100644 --- a/frontend/src/lib/components/Errors/stackFrameLogic.ts +++ b/frontend/src/lib/components/Errors/stackFrameLogic.ts @@ -1,5 +1,6 @@ import { actions, kea, path } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import type { stackFrameLogicType } from './stackFrameLogicType' diff --git a/frontend/src/lib/components/EventPropertyTabs/EventPropertyTabs.tsx b/frontend/src/lib/components/EventPropertyTabs/EventPropertyTabs.tsx index 95570e56f5..fd1dd8eee0 100644 --- a/frontend/src/lib/components/EventPropertyTabs/EventPropertyTabs.tsx +++ b/frontend/src/lib/components/EventPropertyTabs/EventPropertyTabs.tsx @@ -1,14 +1,16 @@ -import { useState } from 'react' -import { CORE_FILTER_DEFINITIONS_BY_GROUP, POSTHOG_EVENT_PROMOTED_PROPERTIES } from '~/taxonomy/taxonomy' -import { EventType, RecordingEventType } from '~/types' -import { LemonTab, LemonTabs, LemonTabsProps } from 'lib/lemon-ui/LemonTabs' -import { AutocaptureImageTab, autocaptureToImage } from 'lib/utils/autocapture-previews' -import { HTMLElementsDisplay } from 'lib/components/HTMLElementsDisplay/HTMLElementsDisplay' import { useValues } from 'kea' +import { useState } from 'react' + +import { INTERNAL_EXCEPTION_PROPERTY_KEYS } from '@posthog/products-error-tracking/frontend/utils' import { eventPropertyFilteringLogic } from 'lib/components/EventPropertyTabs/eventPropertyFilteringLogic' -import { INTERNAL_EXCEPTION_PROPERTY_KEYS } from '@posthog/products-error-tracking/frontend/utils' +import { HTMLElementsDisplay } from 'lib/components/HTMLElementsDisplay/HTMLElementsDisplay' import { dayjs } from 'lib/dayjs' +import { LemonTab, LemonTabs, LemonTabsProps } from 'lib/lemon-ui/LemonTabs' +import { AutocaptureImageTab, autocaptureToImage } from 'lib/utils/autocapture-previews' + +import { CORE_FILTER_DEFINITIONS_BY_GROUP, POSTHOG_EVENT_PROMOTED_PROPERTIES } from '~/taxonomy/taxonomy' +import { EventType, RecordingEventType } from '~/types' export interface TabContentComponentFnProps { event: EventType | RecordingEventType diff --git a/frontend/src/lib/components/EventPropertyTabs/eventPropertyFilteringLogic.ts b/frontend/src/lib/components/EventPropertyTabs/eventPropertyFilteringLogic.ts index c1a9cc3c02..10a26f70d1 100644 --- a/frontend/src/lib/components/EventPropertyTabs/eventPropertyFilteringLogic.ts +++ b/frontend/src/lib/components/EventPropertyTabs/eventPropertyFilteringLogic.ts @@ -1,6 +1,8 @@ -import { connect, kea, selectors, path } from 'kea' +import { connect, kea, path, selectors } from 'kea' + import { userPreferencesLogic } from 'lib/logic/userPreferencesLogic' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' + import { CLOUD_INTERNAL_POSTHOG_PROPERTY_KEYS, PROPERTY_KEYS } from '~/taxonomy/taxonomy' import type { eventPropertyFilteringLogicType } from './eventPropertyFilteringLogicType' diff --git a/frontend/src/lib/components/EventSelect/EventSelect.tsx b/frontend/src/lib/components/EventSelect/EventSelect.tsx index 341c4a65aa..827eb5ceda 100644 --- a/frontend/src/lib/components/EventSelect/EventSelect.tsx +++ b/frontend/src/lib/components/EventSelect/EventSelect.tsx @@ -1,9 +1,10 @@ +import React, { useState } from 'react' + import { TaxonomicFilter } from 'lib/components/TaxonomicFilter/TaxonomicFilter' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { LemonSnack } from 'lib/lemon-ui/LemonSnack/LemonSnack' import { LemonTag } from 'lib/lemon-ui/LemonTag/LemonTag' import { Popover } from 'lib/lemon-ui/Popover/Popover' -import React, { useState } from 'react' interface EventSelectProps { onItemChange?: (values: any[]) => void diff --git a/frontend/src/lib/components/ExportButton/ExportButton.tsx b/frontend/src/lib/components/ExportButton/ExportButton.tsx index 079e05a2d5..163f7fe205 100644 --- a/frontend/src/lib/components/ExportButton/ExportButton.tsx +++ b/frontend/src/lib/components/ExportButton/ExportButton.tsx @@ -1,8 +1,9 @@ import { useMountedLogic } from 'kea' +import { forwardRef } from 'react' + import { exportsLogic } from 'lib/components/ExportButton/exportsLogic' import { LemonButton, LemonButtonProps, LemonButtonWithDropdown } from 'lib/lemon-ui/LemonButton' import { LemonDivider } from 'lib/lemon-ui/LemonDivider' -import { forwardRef } from 'react' import { ExporterFormat, OnlineExportContext } from '~/types' diff --git a/frontend/src/lib/components/ExportButton/exportsLogic.ts b/frontend/src/lib/components/ExportButton/exportsLogic.ts index 8d3f28e62a..d3707a2c0f 100644 --- a/frontend/src/lib/components/ExportButton/exportsLogic.ts +++ b/frontend/src/lib/components/ExportButton/exportsLogic.ts @@ -1,8 +1,9 @@ import { actions, connect, kea, listeners, path, reducers } from 'kea' import { loaders } from 'kea-loaders' import { router } from 'kea-router' + import api from 'lib/api' -import { downloadBlob, downloadExportedAsset, TriggerExportProps } from 'lib/components/ExportButton/exporter' +import { TriggerExportProps, downloadBlob, downloadExportedAsset } from 'lib/components/ExportButton/exporter' import { dayjs } from 'lib/dayjs' import { lemonToast } from 'lib/lemon-ui/LemonToast' import { delay } from 'lib/utils' diff --git a/frontend/src/lib/components/FallbackCoverImage/FallbackCoverImage.tsx b/frontend/src/lib/components/FallbackCoverImage/FallbackCoverImage.tsx index 791b44b2d7..37896155c4 100644 --- a/frontend/src/lib/components/FallbackCoverImage/FallbackCoverImage.tsx +++ b/frontend/src/lib/components/FallbackCoverImage/FallbackCoverImage.tsx @@ -1,7 +1,8 @@ import clsx from 'clsx' -import { getSeriesColor } from 'lib/colors' import { useState } from 'react' +import { getSeriesColor } from 'lib/colors' + export function FallbackCoverImage({ src, alt, diff --git a/frontend/src/lib/components/FeedbackNotice.tsx b/frontend/src/lib/components/FeedbackNotice.tsx index 78de290d2a..432d9524c9 100644 --- a/frontend/src/lib/components/FeedbackNotice.tsx +++ b/frontend/src/lib/components/FeedbackNotice.tsx @@ -1,8 +1,10 @@ +import { useActions, useValues } from 'kea' + import { IconBug } from '@posthog/icons' import { LemonBanner } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' -import { IconFeedback } from 'lib/lemon-ui/icons' + import { LemonButton } from 'lib/lemon-ui/LemonButton' +import { IconFeedback } from 'lib/lemon-ui/icons' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { supportLogic } from './Support/supportLogic' diff --git a/frontend/src/lib/components/FileSystem/FolderSelect/FolderSelect.tsx b/frontend/src/lib/components/FileSystem/FolderSelect/FolderSelect.tsx index 8ee18e9588..b7e3deadf0 100644 --- a/frontend/src/lib/components/FileSystem/FolderSelect/FolderSelect.tsx +++ b/frontend/src/lib/components/FileSystem/FolderSelect/FolderSelect.tsx @@ -1,4 +1,6 @@ import { useActions, useValues } from 'kea' +import { ReactNode, useEffect, useRef, useState } from 'react' + import { dayjs } from 'lib/dayjs' import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { LemonInput } from 'lib/lemon-ui/LemonInput' @@ -8,9 +10,8 @@ import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' import { ContextMenuGroup, ContextMenuItem } from 'lib/ui/ContextMenu/ContextMenu' import { DropdownMenuGroup, DropdownMenuItem } from 'lib/ui/DropdownMenu/DropdownMenu' import { cn } from 'lib/utils/css-classes' -import { ReactNode, useEffect, useRef, useState } from 'react' -import { projectTreeLogic, ProjectTreeLogicProps } from '~/layout/panel-layout/ProjectTree/projectTreeLogic' +import { ProjectTreeLogicProps, projectTreeLogic } from '~/layout/panel-layout/ProjectTree/projectTreeLogic' import { ScrollableShadows } from '~/lib/components/ScrollableShadows/ScrollableShadows' import { FileSystemEntry } from '~/queries/schema/schema-general' diff --git a/frontend/src/lib/components/FileSystem/ItemSelectModal/ItemSelectModal.tsx b/frontend/src/lib/components/FileSystem/ItemSelectModal/ItemSelectModal.tsx index 85452fa7a0..d0c9891956 100644 --- a/frontend/src/lib/components/FileSystem/ItemSelectModal/ItemSelectModal.tsx +++ b/frontend/src/lib/components/FileSystem/ItemSelectModal/ItemSelectModal.tsx @@ -1,7 +1,11 @@ -import { IconFolder, IconFolderOpen } from '@posthog/icons' import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' +import { ReactNode, useRef, useState } from 'react' + +import { IconFolder, IconFolderOpen } from '@posthog/icons' + import { dayjs } from 'lib/dayjs' +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonField } from 'lib/lemon-ui/LemonField' import { LemonInput } from 'lib/lemon-ui/LemonInput' @@ -10,14 +14,12 @@ import { LemonTag } from 'lib/lemon-ui/LemonTag' import { LemonTree, LemonTreeRef, TreeDataItem } from 'lib/lemon-ui/LemonTree/LemonTree' import { ButtonPrimitive, ButtonPrimitiveProps } from 'lib/ui/Button/ButtonPrimitives' import { cn } from 'lib/utils/css-classes' -import { ReactNode, useRef, useState } from 'react' -import { projectTreeLogic, ProjectTreeLogicProps } from '~/layout/panel-layout/ProjectTree/projectTreeLogic' +import { ProjectTreeLogicProps, projectTreeLogic } from '~/layout/panel-layout/ProjectTree/projectTreeLogic' import { ScrollableShadows } from '~/lib/components/ScrollableShadows/ScrollableShadows' import { FileSystemEntry } from '~/queries/schema/schema-general' import { itemSelectModalLogic } from './itemSelectModalLogic' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' export interface ItemSelectModalProps { /** Class name for the component */ diff --git a/frontend/src/lib/components/FileSystem/ItemSelectModal/itemSelectModalLogic.tsx b/frontend/src/lib/components/FileSystem/ItemSelectModal/itemSelectModalLogic.tsx index 48d3751dec..b711c47d88 100644 --- a/frontend/src/lib/components/FileSystem/ItemSelectModal/itemSelectModalLogic.tsx +++ b/frontend/src/lib/components/FileSystem/ItemSelectModal/itemSelectModalLogic.tsx @@ -1,5 +1,6 @@ import { actions, connect, kea, path, reducers } from 'kea' import { forms } from 'kea-forms' + import { TreeDataItem } from 'lib/lemon-ui/LemonTree/LemonTree' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' diff --git a/frontend/src/lib/components/FileSystem/MoveTo/MoveTo.tsx b/frontend/src/lib/components/FileSystem/MoveTo/MoveTo.tsx index a7dfd8972a..fca4ec176b 100644 --- a/frontend/src/lib/components/FileSystem/MoveTo/MoveTo.tsx +++ b/frontend/src/lib/components/FileSystem/MoveTo/MoveTo.tsx @@ -1,6 +1,8 @@ -import { LemonSnack } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' + +import { LemonSnack } from '@posthog/lemon-ui' + import { FolderSelect } from 'lib/components/FileSystem/FolderSelect/FolderSelect' import { moveToLogic } from 'lib/components/FileSystem/MoveTo/moveToLogic' import { LemonButton } from 'lib/lemon-ui/LemonButton' diff --git a/frontend/src/lib/components/FileSystem/MoveTo/moveToLogic.tsx b/frontend/src/lib/components/FileSystem/MoveTo/moveToLogic.tsx index 6aac8ea9d1..19029cc4dd 100644 --- a/frontend/src/lib/components/FileSystem/MoveTo/moveToLogic.tsx +++ b/frontend/src/lib/components/FileSystem/MoveTo/moveToLogic.tsx @@ -1,5 +1,6 @@ import { actions, connect, kea, listeners, path, reducers } from 'kea' import { forms } from 'kea-forms' + import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { PROJECT_TREE_KEY } from '~/layout/panel-layout/ProjectTree/ProjectTree' diff --git a/frontend/src/lib/components/FlagSelector.tsx b/frontend/src/lib/components/FlagSelector.tsx index 0747eba804..42a9132ad6 100644 --- a/frontend/src/lib/components/FlagSelector.tsx +++ b/frontend/src/lib/components/FlagSelector.tsx @@ -1,9 +1,10 @@ import { useValues } from 'kea' +import { useState } from 'react' + import { TaxonomicFilter } from 'lib/components/TaxonomicFilter/TaxonomicFilter' import { TaxonomicFilterGroupType, TaxonomicFilterLogicProps } from 'lib/components/TaxonomicFilter/types' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { Popover } from 'lib/lemon-ui/Popover' -import { useState } from 'react' import { featureFlagLogic } from 'scenes/feature-flags/featureFlagLogic' import { FeatureFlagBasicType } from '~/types' diff --git a/frontend/src/lib/components/FlaggedFeature.tsx b/frontend/src/lib/components/FlaggedFeature.tsx index ddf01d7589..a248a3e426 100644 --- a/frontend/src/lib/components/FlaggedFeature.tsx +++ b/frontend/src/lib/components/FlaggedFeature.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { FeatureFlagKey } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' diff --git a/frontend/src/lib/components/HTMLElementsDisplay/HTMLElementsDisplay.tsx b/frontend/src/lib/components/HTMLElementsDisplay/HTMLElementsDisplay.tsx index 0fb1130fe1..1c35f3a9d6 100644 --- a/frontend/src/lib/components/HTMLElementsDisplay/HTMLElementsDisplay.tsx +++ b/frontend/src/lib/components/HTMLElementsDisplay/HTMLElementsDisplay.tsx @@ -1,9 +1,10 @@ import clsx from 'clsx' import { useActions, useValues } from 'kea' +import { useState } from 'react' + import { htmlElementsDisplayLogic } from 'lib/components/HTMLElementsDisplay/htmlElementsDisplayLogic' import { ParsedCSSSelector } from 'lib/components/HTMLElementsDisplay/preselectWithCSS' import { LemonBanner } from 'lib/lemon-ui/LemonBanner' -import { useState } from 'react' import { ElementType } from '~/types' diff --git a/frontend/src/lib/components/HTMLElementsDisplay/SelectableElement.tsx b/frontend/src/lib/components/HTMLElementsDisplay/SelectableElement.tsx index fc10f9b42b..dda585faed 100644 --- a/frontend/src/lib/components/HTMLElementsDisplay/SelectableElement.tsx +++ b/frontend/src/lib/components/HTMLElementsDisplay/SelectableElement.tsx @@ -1,6 +1,7 @@ import './SelectableElement.scss' import clsx from 'clsx' + import { ParsedCSSSelector } from 'lib/components/HTMLElementsDisplay/preselectWithCSS' import { objectsEqual } from 'lib/utils' diff --git a/frontend/src/lib/components/HTMLElementsDisplay/htmlElementsDisplayLogic.ts b/frontend/src/lib/components/HTMLElementsDisplay/htmlElementsDisplayLogic.ts index bd2b564433..780620ad06 100644 --- a/frontend/src/lib/components/HTMLElementsDisplay/htmlElementsDisplayLogic.ts +++ b/frontend/src/lib/components/HTMLElementsDisplay/htmlElementsDisplayLogic.ts @@ -1,5 +1,6 @@ import { actions, kea, key, path, props, propsChanged, reducers, selectors } from 'kea' import { subscriptions } from 'kea-subscriptions' + import { ParsedCSSSelector, parsedSelectorToSelectorString, diff --git a/frontend/src/lib/components/HedgehogBuddy/HedgehogBuddy.tsx b/frontend/src/lib/components/HedgehogBuddy/HedgehogBuddy.tsx index ff131f7d7c..65d83bb483 100644 --- a/frontend/src/lib/components/HedgehogBuddy/HedgehogBuddy.tsx +++ b/frontend/src/lib/components/HedgehogBuddy/HedgehogBuddy.tsx @@ -1,32 +1,34 @@ import './HedgehogBuddy.scss' -import { lemonToast, ProfilePicture } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' import { router } from 'kea-router' +import { ForwardedRef, useEffect, useMemo, useRef, useState } from 'react' +import React from 'react' + +import { ProfilePicture, lemonToast } from '@posthog/lemon-ui' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { Popover } from 'lib/lemon-ui/Popover/Popover' import { range, sampleOne, shouldIgnoreInput } from 'lib/utils' -import { ForwardedRef, useEffect, useMemo, useRef, useState } from 'react' -import React from 'react' import { userLogic } from 'scenes/userLogic' import { HedgehogConfig, OrganizationMemberType } from '~/types' import { ScrollableShadows } from '../ScrollableShadows/ScrollableShadows' -import { COLOR_TO_FILTER_MAP, hedgehogBuddyLogic } from './hedgehogBuddyLogic' import { HedgehogOptions } from './HedgehogOptions' +import { COLOR_TO_FILTER_MAP, hedgehogBuddyLogic } from './hedgehogBuddyLogic' import { AccessoryInfo, AnimationName, OverlayAnimationName, - overlayAnimations, SHADOW_HEIGHT, - skins, SPRITE_SHEET_WIDTH, SPRITE_SIZE, - spriteAccessoryUrl, SpriteInfo, + overlayAnimations, + skins, + spriteAccessoryUrl, spriteOverlayUrl, spriteUrl, standardAccessories, diff --git a/frontend/src/lib/components/HedgehogBuddy/HedgehogBuddyWithLogic.tsx b/frontend/src/lib/components/HedgehogBuddy/HedgehogBuddyWithLogic.tsx index 44c558023f..1ca0674e48 100644 --- a/frontend/src/lib/components/HedgehogBuddy/HedgehogBuddyWithLogic.tsx +++ b/frontend/src/lib/components/HedgehogBuddy/HedgehogBuddyWithLogic.tsx @@ -2,6 +2,7 @@ import './HedgehogBuddy.scss' import { useActions, useValues } from 'kea' import { useEffect } from 'react' + import { membersLogic } from 'scenes/organization/membersLogic' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/lib/components/HedgehogBuddy/HedgehogOptions.tsx b/frontend/src/lib/components/HedgehogBuddy/HedgehogOptions.tsx index a2cf673259..123a83d06b 100644 --- a/frontend/src/lib/components/HedgehogBuddy/HedgehogOptions.tsx +++ b/frontend/src/lib/components/HedgehogBuddy/HedgehogOptions.tsx @@ -1,14 +1,16 @@ -import { LemonButton, LemonSwitch } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' +import React from 'react' + +import { LemonButton, LemonSwitch } from '@posthog/lemon-ui' + import { useFeatureFlag } from 'lib/hooks/useFeatureFlag' import { capitalizeFirstLetter } from 'lib/utils' -import React from 'react' import { HedgehogSkin } from '~/types' -import { COLOR_TO_FILTER_MAP, hedgehogBuddyLogic } from './hedgehogBuddyLogic' import { HedgehogBuddyProfile, HedgehogBuddyStatic } from './HedgehogBuddyRender' +import { COLOR_TO_FILTER_MAP, hedgehogBuddyLogic } from './hedgehogBuddyLogic' import { accessoryGroups, standardAccessories } from './sprites/sprites' export function HedgehogOptions(): JSX.Element { diff --git a/frontend/src/lib/components/HedgehogBuddy/hedgehogBuddyLogic.ts b/frontend/src/lib/components/HedgehogBuddy/hedgehogBuddyLogic.ts index 06605eefd9..617a783c94 100644 --- a/frontend/src/lib/components/HedgehogBuddy/hedgehogBuddyLogic.ts +++ b/frontend/src/lib/components/HedgehogBuddy/hedgehogBuddyLogic.ts @@ -1,7 +1,8 @@ import { actions, afterMount, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' -import api from 'lib/api' import posthog from 'posthog-js' + +import api from 'lib/api' import { userLogic } from 'scenes/userLogic' import { toolbarConfigLogic, toolbarFetch } from '~/toolbar/toolbarConfigLogic' diff --git a/frontend/src/lib/components/HelpButton/HelpButton.tsx b/frontend/src/lib/components/HelpButton/HelpButton.tsx index ca9354310d..745ec0c967 100644 --- a/frontend/src/lib/components/HelpButton/HelpButton.tsx +++ b/frontend/src/lib/components/HelpButton/HelpButton.tsx @@ -1,11 +1,13 @@ import './HelpButton.scss' import { Placement } from '@floating-ui/react' -import { IconBug, IconChevronDown, IconDocument, IconQuestion, IconSupport } from '@posthog/icons' import clsx from 'clsx' import { actions, connect, kea, key, listeners, path, props, reducers, useActions, useValues } from 'kea' -import { IconFeedback, IconQuestionAnswer } from 'lib/lemon-ui/icons' + +import { IconBug, IconChevronDown, IconDocument, IconQuestion, IconSupport } from '@posthog/icons' + import { LemonMenu } from 'lib/lemon-ui/LemonMenu' +import { IconFeedback, IconQuestionAnswer } from 'lib/lemon-ui/icons' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' diff --git a/frontend/src/lib/components/HighlightedJSONViewer.tsx b/frontend/src/lib/components/HighlightedJSONViewer.tsx index ff6aed272e..a3fea8a91c 100644 --- a/frontend/src/lib/components/HighlightedJSONViewer.tsx +++ b/frontend/src/lib/components/HighlightedJSONViewer.tsx @@ -1,4 +1,5 @@ import { ReactJsonViewProps } from '@microlink/react-json-view' + import { ExpandSelector, HighlightedContentWrapper, diff --git a/frontend/src/lib/components/HogQLDropdown/HogQLDropdown.tsx b/frontend/src/lib/components/HogQLDropdown/HogQLDropdown.tsx index d59bce3ace..5a37450c21 100644 --- a/frontend/src/lib/components/HogQLDropdown/HogQLDropdown.tsx +++ b/frontend/src/lib/components/HogQLDropdown/HogQLDropdown.tsx @@ -1,7 +1,8 @@ -import { LemonButton, LemonDropdown } from '@posthog/lemon-ui' import clsx from 'clsx' import { useState } from 'react' +import { LemonButton, LemonDropdown } from '@posthog/lemon-ui' + import { NodeKind } from '~/queries/schema/schema-general' import { HogQLEditor } from '../HogQLEditor/HogQLEditor' diff --git a/frontend/src/lib/components/HogQLEditor/HogQLEditor.tsx b/frontend/src/lib/components/HogQLEditor/HogQLEditor.tsx index e0ec792610..795254c4df 100644 --- a/frontend/src/lib/components/HogQLEditor/HogQLEditor.tsx +++ b/frontend/src/lib/components/HogQLEditor/HogQLEditor.tsx @@ -1,8 +1,10 @@ +import { useEffect, useState } from 'react' + import { Link } from '@posthog/lemon-ui' + import { CLICK_OUTSIDE_BLOCK_CLASS } from 'lib/hooks/useOutsideClickHandler' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { CodeEditorInline } from 'lib/monaco/CodeEditorInline' -import { useEffect, useState } from 'react' import { AnyDataNode } from '~/queries/schema/schema-general' import { isActorsQuery } from '~/queries/utils' diff --git a/frontend/src/lib/components/Hogfetti/Hogfetti.stories.tsx b/frontend/src/lib/components/Hogfetti/Hogfetti.stories.tsx index 6e7a2e59cd..7a843e31eb 100644 --- a/frontend/src/lib/components/Hogfetti/Hogfetti.stories.tsx +++ b/frontend/src/lib/components/Hogfetti/Hogfetti.stories.tsx @@ -1,6 +1,7 @@ -import { LemonBanner, LemonButton } from '@posthog/lemon-ui' import { Meta } from '@storybook/react' +import { LemonBanner, LemonButton } from '@posthog/lemon-ui' + import { useHogfetti } from './Hogfetti' const meta: Meta = { diff --git a/frontend/src/lib/components/Hogfetti/Hogfetti.tsx b/frontend/src/lib/components/Hogfetti/Hogfetti.tsx index ad1be846bb..96aefdd9a9 100644 --- a/frontend/src/lib/components/Hogfetti/Hogfetti.tsx +++ b/frontend/src/lib/components/Hogfetti/Hogfetti.tsx @@ -1,3 +1,5 @@ +import React, { useCallback, useState } from 'react' + import { BlushingHog, DetectiveHog, @@ -24,7 +26,6 @@ import { XRayHog2, } from 'lib/components/hedgehogs' import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' -import React, { useCallback, useState } from 'react' export type HogComponent = React.ComponentType<{ width: number; height: number }> diff --git a/frontend/src/lib/components/IframedToolbarBrowser/IframedToolbarBrowser.tsx b/frontend/src/lib/components/IframedToolbarBrowser/IframedToolbarBrowser.tsx index 7a2066b676..225f49ba31 100644 --- a/frontend/src/lib/components/IframedToolbarBrowser/IframedToolbarBrowser.tsx +++ b/frontend/src/lib/components/IframedToolbarBrowser/IframedToolbarBrowser.tsx @@ -1,12 +1,13 @@ -import { LemonBanner, Spinner } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { useEffect } from 'react' import useResizeObserver from 'use-resize-observer' +import { LemonBanner, Spinner } from '@posthog/lemon-ui' + import { ToolbarUserIntent } from '~/types' import { appEditorUrl } from '../AuthorizedUrlList/authorizedUrlListLogic' -import { iframedToolbarBrowserLogic, UserIntentVerb } from './iframedToolbarBrowserLogic' +import { UserIntentVerb, iframedToolbarBrowserLogic } from './iframedToolbarBrowserLogic' function IframeErrorOverlay({ userIntent }: { userIntent?: string }): JSX.Element | null { const logic = iframedToolbarBrowserLogic() diff --git a/frontend/src/lib/components/IframedToolbarBrowser/iframedToolbarBrowserLogic.ts b/frontend/src/lib/components/IframedToolbarBrowser/iframedToolbarBrowserLogic.ts index c1446aff97..881705984c 100644 --- a/frontend/src/lib/components/IframedToolbarBrowser/iframedToolbarBrowserLogic.ts +++ b/frontend/src/lib/components/IframedToolbarBrowser/iframedToolbarBrowserLogic.ts @@ -1,18 +1,19 @@ import { actions, afterMount, beforeUnmount, connect, kea, listeners, path, props, reducers, selectors } from 'kea' -import { - authorizedUrlListLogic, - AuthorizedUrlListType, - defaultAuthorizedUrlProperties, -} from 'lib/components/AuthorizedUrlList/authorizedUrlListLogic' -import { CommonFilters, HeatmapFixedPositionMode } from 'lib/components/heatmaps/types' -import { - calculateViewportRange, - DEFAULT_HEATMAP_FILTERS, - PostHogAppToolbarEvent, -} from 'lib/components/IframedToolbarBrowser/utils' -import { LemonBannerProps } from 'lib/lemon-ui/LemonBanner' import posthog from 'posthog-js' import { RefObject } from 'react' + +import { + AuthorizedUrlListType, + authorizedUrlListLogic, + defaultAuthorizedUrlProperties, +} from 'lib/components/AuthorizedUrlList/authorizedUrlListLogic' +import { + DEFAULT_HEATMAP_FILTERS, + PostHogAppToolbarEvent, + calculateViewportRange, +} from 'lib/components/IframedToolbarBrowser/utils' +import { CommonFilters, HeatmapFixedPositionMode } from 'lib/components/heatmaps/types' +import { LemonBannerProps } from 'lib/lemon-ui/LemonBanner' import { teamLogic } from 'scenes/teamLogic' import { ToolbarUserIntent } from '~/types' diff --git a/frontend/src/lib/components/InsightLabel/index.tsx b/frontend/src/lib/components/InsightLabel/index.tsx index 3bcfa62386..341770fa86 100644 --- a/frontend/src/lib/components/InsightLabel/index.tsx +++ b/frontend/src/lib/components/InsightLabel/index.tsx @@ -1,8 +1,10 @@ import './InsightLabel.scss' -import { LemonTag } from '@posthog/lemon-ui' import clsx from 'clsx' import { useValues } from 'kea' + +import { LemonTag } from '@posthog/lemon-ui' + import { EntityFilterInfo } from 'lib/components/EntityFilterInfo' import { PropertyKeyInfo } from 'lib/components/PropertyKeyInfo' import { SeriesLetter } from 'lib/components/SeriesGlyph' diff --git a/frontend/src/lib/components/InsightLegend/InsightLegend.tsx b/frontend/src/lib/components/InsightLegend/InsightLegend.tsx index fa7650e95c..c6fc1b8471 100644 --- a/frontend/src/lib/components/InsightLegend/InsightLegend.tsx +++ b/frontend/src/lib/components/InsightLegend/InsightLegend.tsx @@ -2,6 +2,7 @@ import './InsightLegend.scss' import clsx from 'clsx' import { useValues } from 'kea' + import { insightLogic } from 'scenes/insights/insightLogic' import { trendsDataLogic } from 'scenes/trends/trendsDataLogic' diff --git a/frontend/src/lib/components/InsightLegend/InsightLegendRow.tsx b/frontend/src/lib/components/InsightLegend/InsightLegendRow.tsx index 061b5970d6..0bf4c5f9ce 100644 --- a/frontend/src/lib/components/InsightLegend/InsightLegendRow.tsx +++ b/frontend/src/lib/components/InsightLegend/InsightLegendRow.tsx @@ -1,8 +1,9 @@ import { useActions, useValues } from 'kea' +import { useEffect, useRef } from 'react' + import { getSeriesBackgroundColor } from 'lib/colors' import { InsightLabel } from 'lib/components/InsightLabel' import { LemonCheckbox } from 'lib/lemon-ui/LemonCheckbox' -import { useEffect, useRef } from 'react' import { formatAggregationAxisValue } from 'scenes/insights/aggregationAxisFormat' import { insightLogic } from 'scenes/insights/insightLogic' import { formatBreakdownLabel } from 'scenes/insights/utils' diff --git a/frontend/src/lib/components/IntervalFilter/IntervalFilter.tsx b/frontend/src/lib/components/IntervalFilter/IntervalFilter.tsx index 8d1f349442..dbe1c1b374 100644 --- a/frontend/src/lib/components/IntervalFilter/IntervalFilter.tsx +++ b/frontend/src/lib/components/IntervalFilter/IntervalFilter.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconPin } from '@posthog/icons' import { LemonButton, LemonSelect, LemonSelectOption } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { insightLogic } from 'scenes/insights/insightLogic' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' diff --git a/frontend/src/lib/components/JSBookmarklet.tsx b/frontend/src/lib/components/JSBookmarklet.tsx index 786bd9841a..79b4eaf115 100644 --- a/frontend/src/lib/components/JSBookmarklet.tsx +++ b/frontend/src/lib/components/JSBookmarklet.tsx @@ -1,8 +1,9 @@ import { useActions } from 'kea' +import { useEffect, useRef } from 'react' + import { IconBookmarkBorder } from 'lib/lemon-ui/icons' import { apiHostOrigin } from 'lib/utils/apiHost' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' -import { useEffect, useRef } from 'react' import { TeamBasicType } from '~/types' diff --git a/frontend/src/lib/components/JSSnippet.tsx b/frontend/src/lib/components/JSSnippet.tsx index 80726e06d8..7b5af3b60a 100644 --- a/frontend/src/lib/components/JSSnippet.tsx +++ b/frontend/src/lib/components/JSSnippet.tsx @@ -1,9 +1,10 @@ import { useValues } from 'kea' +import posthog from 'posthog-js' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { apiHostOrigin } from 'lib/utils/apiHost' -import posthog from 'posthog-js' import { domainFor, proxyLogic } from 'scenes/settings/environment/proxyLogic' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/lib/components/LLMButton/ExplainCSPViolationButton.tsx b/frontend/src/lib/components/LLMButton/ExplainCSPViolationButton.tsx index f2f05f5ac8..1c4cdbd2e9 100644 --- a/frontend/src/lib/components/LLMButton/ExplainCSPViolationButton.tsx +++ b/frontend/src/lib/components/LLMButton/ExplainCSPViolationButton.tsx @@ -1,9 +1,11 @@ +import { useState } from 'react' + import { IconWarning } from '@posthog/icons' import { Popover, Spinner } from '@posthog/lemon-ui' + import api from 'lib/api' import { LemonButton, LemonButtonProps } from 'lib/lemon-ui/LemonButton' import { LemonMarkdown } from 'lib/lemon-ui/LemonMarkdown' -import { useState } from 'react' export type ExplainCSPViolationButtonProps = LemonButtonProps & { properties: Record diff --git a/frontend/src/lib/components/Map/Map.tsx b/frontend/src/lib/components/Map/Map.tsx index 3dc10e5cbb..80fba242fc 100644 --- a/frontend/src/lib/components/Map/Map.tsx +++ b/frontend/src/lib/components/Map/Map.tsx @@ -1,14 +1,15 @@ -import 'maplibre-gl/dist/maplibre-gl.css' import './Maplibre.scss' +import 'maplibre-gl/dist/maplibre-gl.css' import { useValues } from 'kea' -import maplibregl, { Map as RawMap, Marker } from 'maplibre-gl' +import maplibregl, { Marker, Map as RawMap } from 'maplibre-gl' import { Protocol } from 'pmtiles' import layers from 'protomaps-themes-base' import { useEffect, useRef } from 'react' -import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import useResizeObserver from 'use-resize-observer' +import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' + import { themeLogic } from '~/layout/navigation-3000/themeLogic' const protocol = new Protocol() diff --git a/frontend/src/lib/components/MemberSelect.tsx b/frontend/src/lib/components/MemberSelect.tsx index 9600f1c278..ae90f659aa 100644 --- a/frontend/src/lib/components/MemberSelect.tsx +++ b/frontend/src/lib/components/MemberSelect.tsx @@ -1,3 +1,6 @@ +import { useActions, useValues } from 'kea' +import { useEffect, useMemo, useState } from 'react' + import { LemonButton, LemonButtonProps, @@ -6,9 +9,8 @@ import { LemonInput, ProfilePicture, } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { fullName } from 'lib/utils' -import { useEffect, useMemo, useState } from 'react' import { membersLogic } from 'scenes/organization/membersLogic' import { UserBasicType } from '~/types' diff --git a/frontend/src/lib/components/MemberSelectMultiple.tsx b/frontend/src/lib/components/MemberSelectMultiple.tsx index 5f9fb70f4d..345b69309b 100644 --- a/frontend/src/lib/components/MemberSelectMultiple.tsx +++ b/frontend/src/lib/components/MemberSelectMultiple.tsx @@ -1,5 +1,7 @@ -import { LemonInputSelect } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonInputSelect } from '@posthog/lemon-ui' + import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { fullName } from 'lib/utils' import { membersLogic } from 'scenes/organization/membersLogic' diff --git a/frontend/src/lib/components/Metalytics/MetalyticsSummary.tsx b/frontend/src/lib/components/Metalytics/MetalyticsSummary.tsx index 76459ee407..823976b70d 100644 --- a/frontend/src/lib/components/Metalytics/MetalyticsSummary.tsx +++ b/frontend/src/lib/components/Metalytics/MetalyticsSummary.tsx @@ -1,6 +1,7 @@ +import { useActions, useValues } from 'kea' + import { IconPulse } from '@posthog/icons' import { LemonButton } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' import { sidePanelStateLogic } from '~/layout/navigation-3000/sidepanel/sidePanelStateLogic' import { SidePanelTab } from '~/types' diff --git a/frontend/src/lib/components/Metalytics/metalyticsLogic.ts b/frontend/src/lib/components/Metalytics/metalyticsLogic.ts index 0678015399..b562f6d0f7 100644 --- a/frontend/src/lib/components/Metalytics/metalyticsLogic.ts +++ b/frontend/src/lib/components/Metalytics/metalyticsLogic.ts @@ -1,6 +1,7 @@ import { connect, kea, path, selectors } from 'kea' import { loaders } from 'kea-loaders' import { subscriptions } from 'kea-subscriptions' + import api from 'lib/api' import { membersLogic } from 'scenes/organization/membersLogic' diff --git a/frontend/src/lib/components/MonacoDiffEditor.tsx b/frontend/src/lib/components/MonacoDiffEditor.tsx index afcbb864e1..190b6a64bb 100644 --- a/frontend/src/lib/components/MonacoDiffEditor.tsx +++ b/frontend/src/lib/components/MonacoDiffEditor.tsx @@ -1,9 +1,9 @@ // adapted from https://github.com/react-monaco-editor/react-monaco-editor/blob/d2fd2521e0557c880dec93acaab9a087f025426c/src/diff.tsx - -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import * as monaco from 'monaco-editor/esm/vs/editor/editor.api' import { forwardRef, useEffect, useImperativeHandle, useMemo, useRef } from 'react' +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' + interface MonacoDiffEditorProps { width?: number | string height?: number | string diff --git a/frontend/src/lib/components/NotFound/index.tsx b/frontend/src/lib/components/NotFound/index.tsx index e1e6c8dc9d..0b54046220 100644 --- a/frontend/src/lib/components/NotFound/index.tsx +++ b/frontend/src/lib/components/NotFound/index.tsx @@ -1,26 +1,28 @@ import './NotFound.scss' -import { IconArrowRight, IconCheckCircle } from '@posthog/icons' -import { LemonButton, lemonToast, ProfilePicture, SpinnerOverlay } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { combineUrl } from 'kea-router' +import posthog from 'posthog-js' +import { useState } from 'react' + +import { IconArrowRight, IconCheckCircle } from '@posthog/icons' +import { LemonButton, ProfilePicture, SpinnerOverlay, lemonToast } from '@posthog/lemon-ui' + import { getCookie } from 'lib/api' +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { LemonMenuOverlay } from 'lib/lemon-ui/LemonMenu/LemonMenu' import { Link } from 'lib/lemon-ui/Link' import { capitalizeFirstLetter } from 'lib/utils' import { getAppContext } from 'lib/utils/getAppContext' -import posthog from 'posthog-js' -import { useState } from 'react' +import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { getDefaultEventsSceneQuery } from 'scenes/activity/explore/defaults' import { useNotebookNode } from 'scenes/notebooks/Nodes/NotebookNodeContext' -import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { urls } from 'scenes/urls' import { ActivityTab, PropertyFilterType, PropertyOperator, UserBasicType } from '~/types' import { ScrollableShadows } from '../ScrollableShadows/ScrollableShadows' import { supportLogic } from '../Support/supportLogic' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' interface NotFoundProps { // Type of object that was not found (e.g. `dashboard`, `insight`, `action`, ...) diff --git a/frontend/src/lib/components/ObjectTags/ObjectTags.tsx b/frontend/src/lib/components/ObjectTags/ObjectTags.tsx index d482a28f35..02fdf6d5f2 100644 --- a/frontend/src/lib/components/ObjectTags/ObjectTags.tsx +++ b/frontend/src/lib/components/ObjectTags/ObjectTags.tsx @@ -1,10 +1,12 @@ -import { IconPencil, IconPlus } from '@posthog/icons' -import { LemonInputSelect, LemonTag, LemonTagType } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' +import { CSSProperties, useMemo } from 'react' + +import { IconPencil, IconPlus } from '@posthog/icons' +import { LemonInputSelect, LemonTag, LemonTagType } from '@posthog/lemon-ui' + import { objectTagsLogic } from 'lib/components/ObjectTags/objectTagsLogic' import { colorForString } from 'lib/utils' -import { CSSProperties, useMemo } from 'react' import { AvailableFeature } from '~/types' diff --git a/frontend/src/lib/components/ObjectTags/objectTagsLogic.test.ts b/frontend/src/lib/components/ObjectTags/objectTagsLogic.test.ts index 5a4b0eebba..f4eed7a35a 100644 --- a/frontend/src/lib/components/ObjectTags/objectTagsLogic.test.ts +++ b/frontend/src/lib/components/ObjectTags/objectTagsLogic.test.ts @@ -1,5 +1,6 @@ import { expectLogic } from 'kea-test-utils' -import { objectTagsLogic, ObjectTagsLogicProps } from 'lib/components/ObjectTags/objectTagsLogic' + +import { ObjectTagsLogicProps, objectTagsLogic } from 'lib/components/ObjectTags/objectTagsLogic' import { initKeaTests } from '~/test/init' diff --git a/frontend/src/lib/components/ObjectTags/objectTagsLogic.ts b/frontend/src/lib/components/ObjectTags/objectTagsLogic.ts index 40893bb61c..e5f1443ed4 100644 --- a/frontend/src/lib/components/ObjectTags/objectTagsLogic.ts +++ b/frontend/src/lib/components/ObjectTags/objectTagsLogic.ts @@ -1,4 +1,5 @@ import { actions, kea, key, listeners, path, props, reducers } from 'kea' + import { uniqueBy } from 'lib/utils' import type { objectTagsLogicType } from './objectTagsLogicType' diff --git a/frontend/src/lib/components/PageHeader.tsx b/frontend/src/lib/components/PageHeader.tsx index 2b7ea38a61..5208c1de7c 100644 --- a/frontend/src/lib/components/PageHeader.tsx +++ b/frontend/src/lib/components/PageHeader.tsx @@ -1,12 +1,13 @@ import clsx from 'clsx' import { useValues } from 'kea' -import { WithinPageHeaderContext } from 'lib/lemon-ui/LemonButton/LemonButton' import { useContext } from 'react' import { createPortal } from 'react-dom' + +import { WithinPageHeaderContext } from 'lib/lemon-ui/LemonButton/LemonButton' import { DraggableToNotebookProps } from 'scenes/notebooks/AddToNotebook/DraggableToNotebook' -import { breadcrumbsLogic } from '~/layout/navigation/Breadcrumbs/breadcrumbsLogic' import { WithinSidePanelContext } from '~/layout/navigation-3000/sidepanel/sidePanelStateLogic' +import { breadcrumbsLogic } from '~/layout/navigation/Breadcrumbs/breadcrumbsLogic' interface PageHeaderProps { caption?: string | JSX.Element | null | false diff --git a/frontend/src/lib/components/PanelLayout/PanelLayout.tsx b/frontend/src/lib/components/PanelLayout/PanelLayout.tsx index da3fb180b6..1bb034d03d 100644 --- a/frontend/src/lib/components/PanelLayout/PanelLayout.tsx +++ b/frontend/src/lib/components/PanelLayout/PanelLayout.tsx @@ -1,8 +1,10 @@ -import { LemonButton, LemonButtonProps, Tooltip } from '@posthog/lemon-ui' import clsx from 'clsx' -import { LemonMenu, LemonMenuItem, LemonMenuProps } from 'lib/lemon-ui/LemonMenu/LemonMenu' import { PropsWithChildren } from 'react' +import { LemonButton, LemonButtonProps, Tooltip } from '@posthog/lemon-ui' + +import { LemonMenu, LemonMenuItem, LemonMenuProps } from 'lib/lemon-ui/LemonMenu/LemonMenu' + type PanelContainerProps = PropsWithChildren<{ primary: boolean className?: string diff --git a/frontend/src/lib/components/PasswordStrength.tsx b/frontend/src/lib/components/PasswordStrength.tsx index 1a2c247e54..5f1143ccf6 100644 --- a/frontend/src/lib/components/PasswordStrength.tsx +++ b/frontend/src/lib/components/PasswordStrength.tsx @@ -1,7 +1,9 @@ +import zxcvbn from 'zxcvbn' + import { LemonDivider } from '@posthog/lemon-ui' + import { LemonProgress } from 'lib/lemon-ui/LemonProgress' import { Tooltip } from 'lib/lemon-ui/Tooltip' -import zxcvbn from 'zxcvbn' export type ValidatedPasswordResult = { score: number // 0 is no passsword - otherwise 1-5, diff --git a/frontend/src/lib/components/PathCleanFilters/PathCleanFilterAddItemButton.tsx b/frontend/src/lib/components/PathCleanFilters/PathCleanFilterAddItemButton.tsx index 0aed28232c..cc6969953c 100644 --- a/frontend/src/lib/components/PathCleanFilters/PathCleanFilterAddItemButton.tsx +++ b/frontend/src/lib/components/PathCleanFilters/PathCleanFilterAddItemButton.tsx @@ -1,7 +1,9 @@ -import { IconPlus } from '@posthog/icons' -import { LemonButton } from 'lib/lemon-ui/LemonButton' import { useState } from 'react' +import { IconPlus } from '@posthog/icons' + +import { LemonButton } from 'lib/lemon-ui/LemonButton' + import { PathCleaningFilter } from '~/types' import { PathRegexModal } from './PathRegexModal' diff --git a/frontend/src/lib/components/PathCleanFilters/PathCleanFilterItem.tsx b/frontend/src/lib/components/PathCleanFilters/PathCleanFilterItem.tsx index 87ef26b132..f0102f73ca 100644 --- a/frontend/src/lib/components/PathCleanFilters/PathCleanFilterItem.tsx +++ b/frontend/src/lib/components/PathCleanFilters/PathCleanFilterItem.tsx @@ -1,10 +1,12 @@ import { useSortable } from '@dnd-kit/sortable' import { CSS } from '@dnd-kit/utilities' +import clsx from 'clsx' +import { useState } from 'react' + import { IconArrowCircleRight } from '@posthog/icons' import { LemonSnack, Tooltip } from '@posthog/lemon-ui' -import clsx from 'clsx' + import { isValidRegexp } from 'lib/utils/regexp' -import { useState } from 'react' import { PathCleaningFilter } from '~/types' diff --git a/frontend/src/lib/components/PathCleanFilters/PathCleanFilters.tsx b/frontend/src/lib/components/PathCleanFilters/PathCleanFilters.tsx index 7738a47186..0e6bac67cd 100644 --- a/frontend/src/lib/components/PathCleanFilters/PathCleanFilters.tsx +++ b/frontend/src/lib/components/PathCleanFilters/PathCleanFilters.tsx @@ -1,12 +1,13 @@ -import { useState, useEffect } from 'react' +import { DndContext, PointerSensor, closestCenter, useSensor, useSensors } from '@dnd-kit/core' +import { restrictToParentElement } from '@dnd-kit/modifiers' +import { SortableContext, rectSortingStrategy } from '@dnd-kit/sortable' +import { useEffect, useState } from 'react' + import { PathCleaningFilter } from '~/types' import { PathCleanFilterAddItemButton } from './PathCleanFilterAddItemButton' -import { ensureFilterOrder, updateFilterOrder } from './pathCleaningUtils' import { PathCleanFilterItem } from './PathCleanFilterItem' -import { closestCenter, DndContext, PointerSensor, useSensor, useSensors } from '@dnd-kit/core' -import { restrictToParentElement } from '@dnd-kit/modifiers' -import { rectSortingStrategy, SortableContext } from '@dnd-kit/sortable' +import { ensureFilterOrder, updateFilterOrder } from './pathCleaningUtils' export interface PathCleanFiltersProps { filters?: PathCleaningFilter[] diff --git a/frontend/src/lib/components/PathCleanFilters/PathCleanFiltersTable.tsx b/frontend/src/lib/components/PathCleanFilters/PathCleanFiltersTable.tsx index 3ff7dc20f8..020cdbe429 100644 --- a/frontend/src/lib/components/PathCleanFilters/PathCleanFiltersTable.tsx +++ b/frontend/src/lib/components/PathCleanFilters/PathCleanFiltersTable.tsx @@ -1,28 +1,30 @@ import { DndContext, - closestCenter, + DragEndEvent, KeyboardSensor, PointerSensor, + closestCenter, useSensor, useSensors, - DragEndEvent, } from '@dnd-kit/core' -import { arrayMove, SortableContext, sortableKeyboardCoordinates, verticalListSortingStrategy } from '@dnd-kit/sortable' import { restrictToVerticalAxis } from '@dnd-kit/modifiers' +import { SortableContext, arrayMove, sortableKeyboardCoordinates, verticalListSortingStrategy } from '@dnd-kit/sortable' import { useSortable } from '@dnd-kit/sortable' import { CSS } from '@dnd-kit/utilities' +import clsx from 'clsx' +import { useEffect, useState } from 'react' + import { IconPencil, IconTrash } from '@posthog/icons' import { LemonButton, Tooltip } from '@posthog/lemon-ui' -import clsx from 'clsx' + +import { SortableDragIcon } from 'lib/lemon-ui/icons' import { isValidRegexp } from 'lib/utils/regexp' -import { useState, useEffect } from 'react' import { PathCleaningFilter } from '~/types' +import { parseAliasToReadable } from './PathCleanFilterItem' import { PathRegexModal } from './PathRegexModal' import { ensureFilterOrder, updateFilterOrder } from './pathCleaningUtils' -import { parseAliasToReadable } from './PathCleanFilterItem' -import { SortableDragIcon } from 'lib/lemon-ui/icons' export interface PathCleanFiltersTableProps { filters?: PathCleaningFilter[] diff --git a/frontend/src/lib/components/PathCleanFilters/PathCleaningRulesDebugger.tsx b/frontend/src/lib/components/PathCleanFilters/PathCleaningRulesDebugger.tsx index c5ff9aa819..9ccfe1ac31 100644 --- a/frontend/src/lib/components/PathCleanFilters/PathCleaningRulesDebugger.tsx +++ b/frontend/src/lib/components/PathCleanFilters/PathCleaningRulesDebugger.tsx @@ -1,9 +1,12 @@ -import { LemonCollapse } from '@posthog/lemon-ui' import { IconChevronRight } from '@posthog/icons' -import { parseAliasToReadable } from './PathCleanFilterItem' +import { LemonCollapse } from '@posthog/lemon-ui' + import { isValidRegexp } from 'lib/utils/regexp' + import { PathCleaningFilter } from '~/types' +import { parseAliasToReadable } from './PathCleanFilterItem' + interface ProcessingStep { stepNumber: number filter: PathCleaningFilter diff --git a/frontend/src/lib/components/PathCleanFilters/PathRegexModal.tsx b/frontend/src/lib/components/PathCleanFilters/PathRegexModal.tsx index e9f50c700b..04fbe14116 100644 --- a/frontend/src/lib/components/PathCleanFilters/PathRegexModal.tsx +++ b/frontend/src/lib/components/PathCleanFilters/PathRegexModal.tsx @@ -1,6 +1,8 @@ -import { LemonButton, LemonInput, LemonModal, Link } from '@posthog/lemon-ui' -import { isValidRegexp } from 'lib/utils/regexp' import { useEffect, useState } from 'react' + +import { LemonButton, LemonInput, LemonModal, Link } from '@posthog/lemon-ui' + +import { isValidRegexp } from 'lib/utils/regexp' import { AiRegexHelperButton } from 'scenes/session-recordings/components/AiRegexHelper/AiRegexHelper' import { AiRegexHelper } from 'scenes/session-recordings/components/AiRegexHelper/AiRegexHelper' diff --git a/frontend/src/lib/components/PayGateMini/PayGateButton.tsx b/frontend/src/lib/components/PayGateMini/PayGateButton.tsx index 90ff21dfb2..1a5d3cb78d 100644 --- a/frontend/src/lib/components/PayGateMini/PayGateButton.tsx +++ b/frontend/src/lib/components/PayGateMini/PayGateButton.tsx @@ -1,13 +1,15 @@ -import { LemonButton, LemonButtonProps } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { useMemo } from 'react' + +import { LemonButton, LemonButtonProps } from '@posthog/lemon-ui' + import { getUpgradeProductLink } from 'scenes/billing/billing-utils' import { paymentEntryLogic } from 'scenes/billing/paymentEntryLogic' import { urls } from 'scenes/urls' import { BillingProductV2Type } from '~/types' -import { payGateMiniLogic, PayGateMiniLogicProps } from './payGateMiniLogic' +import { PayGateMiniLogicProps, payGateMiniLogic } from './payGateMiniLogic' type PayGateButtonProps = PayGateMiniLogicProps & Partial export const PayGateButton = ({ feature, currentUsage, ...buttonProps }: PayGateButtonProps): JSX.Element | null => { diff --git a/frontend/src/lib/components/PayGateMini/PayGateMini.tsx b/frontend/src/lib/components/PayGateMini/PayGateMini.tsx index 6b0a6f5cad..4d6b7ddb04 100644 --- a/frontend/src/lib/components/PayGateMini/PayGateMini.tsx +++ b/frontend/src/lib/components/PayGateMini/PayGateMini.tsx @@ -1,11 +1,13 @@ -import { IconInfo, IconOpenSidebar, IconUnlock } from '@posthog/icons' -import { LemonButton, LemonSkeleton, Link, Tooltip } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' import posthog from 'posthog-js' import { useEffect } from 'react' -import { billingLogic } from 'scenes/billing/billingLogic' + +import { IconInfo, IconOpenSidebar, IconUnlock } from '@posthog/icons' +import { LemonButton, LemonSkeleton, Link, Tooltip } from '@posthog/lemon-ui' + import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' +import { billingLogic } from 'scenes/billing/billingLogic' import { getProductIcon } from 'scenes/products/Products' import { userLogic } from 'scenes/userLogic' @@ -13,7 +15,7 @@ import { AvailableFeature, BillingFeatureType, BillingProductV2AddonType, Billin import { upgradeModalLogic } from '../UpgradeModal/upgradeModalLogic' import { PayGateButton } from './PayGateButton' -import { payGateMiniLogic, PayGateMiniLogicProps } from './payGateMiniLogic' +import { PayGateMiniLogicProps, payGateMiniLogic } from './payGateMiniLogic' export type PayGateMiniProps = PayGateMiniLogicProps & { /** diff --git a/frontend/src/lib/components/PayGateMini/payGateMiniLogic.tsx b/frontend/src/lib/components/PayGateMini/payGateMiniLogic.tsx index f9f1344bab..bb5ce9a27f 100644 --- a/frontend/src/lib/components/PayGateMini/payGateMiniLogic.tsx +++ b/frontend/src/lib/components/PayGateMini/payGateMiniLogic.tsx @@ -1,6 +1,7 @@ import { actions, connect, kea, key, path, props, reducers, selectors } from 'kea' -import { billingLogic } from 'scenes/billing/billingLogic' + import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' +import { billingLogic } from 'scenes/billing/billingLogic' import { userLogic } from 'scenes/userLogic' import { AvailableFeature, BillingProductV2AddonType, BillingProductV2Type } from '~/types' diff --git a/frontend/src/lib/components/ProductIntroduction/ProductIntroduction.tsx b/frontend/src/lib/components/ProductIntroduction/ProductIntroduction.tsx index 7ebbffd25c..55c76ccc8c 100644 --- a/frontend/src/lib/components/ProductIntroduction/ProductIntroduction.tsx +++ b/frontend/src/lib/components/ProductIntroduction/ProductIntroduction.tsx @@ -1,5 +1,7 @@ -import { IconOpenSidebar, IconPlus, IconX } from '@posthog/icons' import { useActions, useValues } from 'kea' + +import { IconOpenSidebar, IconPlus, IconX } from '@posthog/icons' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/lib/components/PropertiesTable/PropertiesTable.stories.tsx b/frontend/src/lib/components/PropertiesTable/PropertiesTable.stories.tsx index b6cc41172b..406ac4fdb9 100644 --- a/frontend/src/lib/components/PropertiesTable/PropertiesTable.stories.tsx +++ b/frontend/src/lib/components/PropertiesTable/PropertiesTable.stories.tsx @@ -1,12 +1,12 @@ +import { PropertiesTable as PropertiesTableComponent } from '.' import { Meta, StoryFn } from '@storybook/react' import { useActions } from 'kea' + +import { useDelayedOnMountEffect } from 'lib/hooks/useOnMountEffect' import { userPreferencesLogic } from 'lib/logic/userPreferencesLogic' import { PropertyDefinitionType } from '~/types' -import { PropertiesTable as PropertiesTableComponent } from '.' -import { useDelayedOnMountEffect } from 'lib/hooks/useOnMountEffect' - const meta: Meta = { title: 'Components/Properties Table', component: PropertiesTableComponent, diff --git a/frontend/src/lib/components/PropertiesTable/PropertiesTable.tsx b/frontend/src/lib/components/PropertiesTable/PropertiesTable.tsx index e088e8485c..fd8399e198 100644 --- a/frontend/src/lib/components/PropertiesTable/PropertiesTable.tsx +++ b/frontend/src/lib/components/PropertiesTable/PropertiesTable.tsx @@ -1,36 +1,38 @@ import './PropertiesTable.scss' -import { IconPencil, IconTrash, IconWarning } from '@posthog/icons' -import { LemonCheckbox, LemonDialog, LemonInput, LemonMenu, LemonTag, Link, Tooltip } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' import { combineUrl } from 'kea-router' +import { useMemo, useState } from 'react' + +import { IconPencil, IconTrash, IconWarning } from '@posthog/icons' +import { LemonCheckbox, LemonDialog, LemonInput, LemonMenu, LemonTag, Link, Tooltip } from '@posthog/lemon-ui' + +import { FEATURE_FLAGS } from 'lib/constants' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonTable, LemonTableColumns, LemonTableProps } from 'lib/lemon-ui/LemonTable' +import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { userPreferencesLogic } from 'lib/logic/userPreferencesLogic' import { isObject, isURL } from 'lib/utils' -import { useMemo, useState } from 'react' -import { NewProperty } from 'scenes/persons/NewProperty' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' +import { NewProperty } from 'scenes/persons/NewProperty' import { urls } from 'scenes/urls' import { propertyDefinitionsModel } from '~/models/propertyDefinitionsModel' import { getCoreFilterDefinition } from '~/taxonomy/helpers' import { - isPostHogProperty, KNOWN_PROMOTED_PROPERTY_PARENTS, POSTHOG_EVENT_PROMOTED_PROPERTIES, + isPostHogProperty, } from '~/taxonomy/taxonomy' import { CORE_FILTER_DEFINITIONS_BY_GROUP, PROPERTY_KEYS } from '~/taxonomy/taxonomy' import { PropertyDefinitionType, PropertyType } from '~/types' import { CopyToClipboardInline } from '../CopyToClipboard' +import { JSONViewer } from '../JSONViewer' import { PROPERTY_FILTER_TYPE_TO_TAXONOMIC_FILTER_GROUP_TYPE } from '../PropertyFilters/utils' import { PropertyKeyInfo } from '../PropertyKeyInfo' import { TaxonomicFilterGroupType } from '../TaxonomicFilter/types' -import { JSONViewer } from '../JSONViewer' -import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { FEATURE_FLAGS } from 'lib/constants' type HandledType = 'string' | 'number' | 'bigint' | 'boolean' | 'undefined' | 'null' type Type = HandledType | 'symbol' | 'object' | 'function' diff --git a/frontend/src/lib/components/PropertiesTimeline/PropertiesTimeline.stories.tsx b/frontend/src/lib/components/PropertiesTimeline/PropertiesTimeline.stories.tsx index 6cf6f4362c..189d9c11aa 100644 --- a/frontend/src/lib/components/PropertiesTimeline/PropertiesTimeline.stories.tsx +++ b/frontend/src/lib/components/PropertiesTimeline/PropertiesTimeline.stories.tsx @@ -1,10 +1,11 @@ -import { Meta } from '@storybook/react' import { MOCK_TEAM_ID } from 'lib/api.mock' +import { PropertiesTimeline } from '.' +import { Meta } from '@storybook/react' + import { useStorybookMocks } from '~/mocks/browser' import { ChartDisplayType, PersonActorType } from '~/types' -import { PropertiesTimeline } from '.' import { RawPropertiesTimelineResult } from './propertiesTimelineLogic' const meta: Meta = { diff --git a/frontend/src/lib/components/PropertiesTimeline/PropertiesTimeline.tsx b/frontend/src/lib/components/PropertiesTimeline/PropertiesTimeline.tsx index 081ba9e47c..4c0fade365 100644 --- a/frontend/src/lib/components/PropertiesTimeline/PropertiesTimeline.tsx +++ b/frontend/src/lib/components/PropertiesTimeline/PropertiesTimeline.tsx @@ -1,7 +1,9 @@ +import { useActions, useValues } from 'kea' + import { IconInfo } from '@posthog/icons' import { LemonDivider } from '@posthog/lemon-ui' import { Properties } from '@posthog/plugin-scaffold' -import { useActions, useValues } from 'kea' + import { PropertiesTable } from 'lib/components/PropertiesTable' import { Tooltip } from 'lib/lemon-ui/Tooltip' import { humanList } from 'lib/utils' @@ -10,7 +12,7 @@ import { teamLogic } from 'scenes/teamLogic' import { PropertyDefinitionType } from '~/types' import { TimelineSeekbar } from '../TimelineSeekbar' -import { propertiesTimelineLogic, PropertiesTimelineProps } from './propertiesTimelineLogic' +import { PropertiesTimelineProps, propertiesTimelineLogic } from './propertiesTimelineLogic' export function PropertiesTimeline({ actor, filter }: PropertiesTimelineProps): JSX.Element { const logic = propertiesTimelineLogic({ actor, filter }) diff --git a/frontend/src/lib/components/PropertiesTimeline/propertiesTimelineLogic.ts b/frontend/src/lib/components/PropertiesTimeline/propertiesTimelineLogic.ts index a49d552cea..48ff0528cd 100644 --- a/frontend/src/lib/components/PropertiesTimeline/propertiesTimelineLogic.ts +++ b/frontend/src/lib/components/PropertiesTimeline/propertiesTimelineLogic.ts @@ -1,10 +1,12 @@ -import { Properties } from '@posthog/plugin-scaffold' import { actions, afterMount, connect, kea, key, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' +import posthog from 'posthog-js' + +import { Properties } from '@posthog/plugin-scaffold' + import { Dayjs, dayjsUtcToTimezone } from 'lib/dayjs' import { apiGetWithTimeToSeeDataTracking } from 'lib/internalMetrics' import { toParams, uuid } from 'lib/utils' -import posthog from 'posthog-js' import { teamLogic } from 'scenes/teamLogic' import { ActorType, PropertiesTimelineFilterType } from '~/types' diff --git a/frontend/src/lib/components/Property.tsx b/frontend/src/lib/components/Property.tsx index 3d0f95c750..d7e6e6003b 100644 --- a/frontend/src/lib/components/Property.tsx +++ b/frontend/src/lib/components/Property.tsx @@ -1,4 +1,5 @@ import { Link } from '@posthog/lemon-ui' + import { isExternalLink } from 'lib/utils' export function Property({ value }: { value: any }): JSX.Element { diff --git a/frontend/src/lib/components/PropertyFilters/PathItemFilters.tsx b/frontend/src/lib/components/PropertyFilters/PathItemFilters.tsx index ba7b51a4e8..958ace0d4f 100644 --- a/frontend/src/lib/components/PropertyFilters/PathItemFilters.tsx +++ b/frontend/src/lib/components/PropertyFilters/PathItemFilters.tsx @@ -1,8 +1,10 @@ +import { BindLogic, useActions, useValues } from 'kea' +import { CSSProperties, useEffect } from 'react' + import { IconPlusSmall } from '@posthog/icons' import { LemonButton } from '@posthog/lemon-ui' -import { BindLogic, useActions, useValues } from 'kea' + import { objectsEqual } from 'lib/utils' -import { CSSProperties, useEffect } from 'react' import { AnyPropertyFilter, EmptyPropertyFilter, PropertyFilterType, PropertyOperator } from '~/types' diff --git a/frontend/src/lib/components/PropertyFilters/PropertyFilters.stories.tsx b/frontend/src/lib/components/PropertyFilters/PropertyFilters.stories.tsx index e6fbd3df7c..2cac86e4ef 100644 --- a/frontend/src/lib/components/PropertyFilters/PropertyFilters.stories.tsx +++ b/frontend/src/lib/components/PropertyFilters/PropertyFilters.stories.tsx @@ -1,6 +1,7 @@ import { Meta } from '@storybook/react' -import PropertyFiltersDisplay from 'lib/components/PropertyFilters/components/PropertyFiltersDisplay' + import { PropertyFilters } from 'lib/components/PropertyFilters/PropertyFilters' +import PropertyFiltersDisplay from 'lib/components/PropertyFilters/components/PropertyFiltersDisplay' import { useStorybookMocks } from '~/mocks/browser' import { AnyPropertyFilter, PropertyOperator } from '~/types' diff --git a/frontend/src/lib/components/PropertyFilters/PropertyFilters.tsx b/frontend/src/lib/components/PropertyFilters/PropertyFilters.tsx index 274f84ff6c..4d95d1d2c9 100644 --- a/frontend/src/lib/components/PropertyFilters/PropertyFilters.tsx +++ b/frontend/src/lib/components/PropertyFilters/PropertyFilters.tsx @@ -1,13 +1,15 @@ import './PropertyFilters.scss' import { BindLogic, useActions, useValues } from 'kea' +import React, { useEffect, useState } from 'react' + import { TaxonomicPropertyFilter } from 'lib/components/PropertyFilters/components/TaxonomicPropertyFilter' import { ExcludedProperties, TaxonomicFilterGroupType, TaxonomicFilterProps, } from 'lib/components/TaxonomicFilter/types' -import React, { useEffect, useState } from 'react' +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { LogicalRowDivider } from 'scenes/cohorts/CohortFilters/CohortCriteriaRowBuilder' import { AnyDataNode, DatabaseSchemaField } from '~/queries/schema/schema-general' @@ -15,7 +17,6 @@ import { AnyPropertyFilter, FilterLogicalOperator } from '~/types' import { FilterRow } from './components/FilterRow' import { propertyFilterLogic } from './propertyFilterLogic' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' export interface PropertyFiltersProps { endpoint?: string | null diff --git a/frontend/src/lib/components/PropertyFilters/components/FilterRow.tsx b/frontend/src/lib/components/PropertyFilters/components/FilterRow.tsx index 7a78167959..a4fa238114 100644 --- a/frontend/src/lib/components/PropertyFilters/components/FilterRow.tsx +++ b/frontend/src/lib/components/PropertyFilters/components/FilterRow.tsx @@ -1,11 +1,13 @@ import './FilterRow.scss' -import { IconPlusSmall, IconTrash, IconX } from '@posthog/icons' import clsx from 'clsx' +import React, { useState } from 'react' + +import { IconPlusSmall, IconTrash, IconX } from '@posthog/icons' + import { isValidPropertyFilter } from 'lib/components/PropertyFilters/utils' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { Popover } from 'lib/lemon-ui/Popover/Popover' -import React, { useState } from 'react' import { AnyPropertyFilter, PathCleaningFilter } from '~/types' diff --git a/frontend/src/lib/components/PropertyFilters/components/OperatorValueSelect.stories.tsx b/frontend/src/lib/components/PropertyFilters/components/OperatorValueSelect.stories.tsx index 5556b728a1..999168202f 100644 --- a/frontend/src/lib/components/PropertyFilters/components/OperatorValueSelect.stories.tsx +++ b/frontend/src/lib/components/PropertyFilters/components/OperatorValueSelect.stories.tsx @@ -1,4 +1,5 @@ import { Meta } from '@storybook/react' + import { OperatorValueSelect, OperatorValueSelectProps, diff --git a/frontend/src/lib/components/PropertyFilters/components/OperatorValueSelect.tsx b/frontend/src/lib/components/PropertyFilters/components/OperatorValueSelect.tsx index 94c2fb6cc2..92bd060379 100644 --- a/frontend/src/lib/components/PropertyFilters/components/OperatorValueSelect.tsx +++ b/frontend/src/lib/components/PropertyFilters/components/OperatorValueSelect.tsx @@ -1,4 +1,7 @@ +import { useEffect, useState } from 'react' + import { LemonSelect, LemonSelectProps } from '@posthog/lemon-ui' + import { allOperatorsToHumanName } from 'lib/components/DefinitionPopover/utils' import { dayjs } from 'lib/dayjs' import { @@ -11,7 +14,6 @@ import { isOperatorRange, isOperatorRegex, } from 'lib/utils' -import { useEffect, useState } from 'react' import { GroupTypeIndex, diff --git a/frontend/src/lib/components/PropertyFilters/components/PathItemSelector.tsx b/frontend/src/lib/components/PropertyFilters/components/PathItemSelector.tsx index b29f793106..3bacb2d4f7 100644 --- a/frontend/src/lib/components/PropertyFilters/components/PathItemSelector.tsx +++ b/frontend/src/lib/components/PropertyFilters/components/PathItemSelector.tsx @@ -1,7 +1,8 @@ +import { useState } from 'react' + import { TaxonomicFilter } from 'lib/components/TaxonomicFilter/TaxonomicFilter' import { SimpleOption, TaxonomicFilterGroupType, TaxonomicFilterValue } from 'lib/components/TaxonomicFilter/types' import { Popover } from 'lib/lemon-ui/Popover/Popover' -import { useState } from 'react' interface PathItemSelectorProps { pathItem: TaxonomicFilterValue | undefined diff --git a/frontend/src/lib/components/PropertyFilters/components/PropertyFilterButton.tsx b/frontend/src/lib/components/PropertyFilters/components/PropertyFilterButton.tsx index c75aecfc26..d28f2f6df8 100644 --- a/frontend/src/lib/components/PropertyFilters/components/PropertyFilterButton.tsx +++ b/frontend/src/lib/components/PropertyFilters/components/PropertyFilterButton.tsx @@ -1,12 +1,14 @@ import './PropertyFilterButton.scss' +import clsx from 'clsx' +import { useValues } from 'kea' +import React from 'react' + import { IconX } from '@posthog/icons' import { LemonButton, PopoverReferenceContext, Tooltip } from '@posthog/lemon-ui' -import clsx from 'clsx' -import { useValues } from 'kea' + import { PropertyFilterIcon } from 'lib/components/PropertyFilters/components/PropertyFilterIcon' import { midEllipsis } from 'lib/utils' -import React from 'react' import { cohortsModel } from '~/models/cohortsModel' import { propertyDefinitionsModel } from '~/models/propertyDefinitionsModel' diff --git a/frontend/src/lib/components/PropertyFilters/components/PropertyFilterDatePicker.tsx b/frontend/src/lib/components/PropertyFilters/components/PropertyFilterDatePicker.tsx index 6669859be3..57f8227afe 100644 --- a/frontend/src/lib/components/PropertyFilters/components/PropertyFilterDatePicker.tsx +++ b/frontend/src/lib/components/PropertyFilters/components/PropertyFilterDatePicker.tsx @@ -1,8 +1,10 @@ +import { useEffect, useState } from 'react' + import { LemonCalendarSelectInput } from '@posthog/lemon-ui' + import { PropertyValueProps } from 'lib/components/PropertyFilters/components/PropertyValue' import { dayjs } from 'lib/dayjs' import { isOperatorDate } from 'lib/utils' -import { useEffect, useState } from 'react' import { PropertyFilterValue, PropertyOperator } from '~/types' diff --git a/frontend/src/lib/components/PropertyFilters/components/PropertyFilterIcon.tsx b/frontend/src/lib/components/PropertyFilters/components/PropertyFilterIcon.tsx index d9e992427b..cac0e1a344 100644 --- a/frontend/src/lib/components/PropertyFilters/components/PropertyFilterIcon.tsx +++ b/frontend/src/lib/components/PropertyFilters/components/PropertyFilterIcon.tsx @@ -1,6 +1,7 @@ import { IconBuilding, IconPerson, IconPiggyBank } from '@posthog/icons' -import { IconCohort, IconUnverifiedEvent } from 'lib/lemon-ui/icons' + import { Tooltip } from 'lib/lemon-ui/Tooltip' +import { IconCohort, IconUnverifiedEvent } from 'lib/lemon-ui/icons' import { PropertyFilterType } from '~/types' diff --git a/frontend/src/lib/components/PropertyFilters/components/PropertyValue.tsx b/frontend/src/lib/components/PropertyFilters/components/PropertyValue.tsx index 53865fb462..5860451514 100644 --- a/frontend/src/lib/components/PropertyFilters/components/PropertyValue.tsx +++ b/frontend/src/lib/components/PropertyFilters/components/PropertyValue.tsx @@ -1,3 +1,6 @@ +import { useActions, useValues } from 'kea' +import { useCallback, useEffect } from 'react' + import { LemonButton } from '@posthog/lemon-ui' import { AssigneeIconDisplay, @@ -5,7 +8,7 @@ import { AssigneeResolver, } from '@posthog/products-error-tracking/frontend/components/Assignee/AssigneeDisplay' import { AssigneeSelect } from '@posthog/products-error-tracking/frontend/components/Assignee/AssigneeSelect' -import { useActions, useValues } from 'kea' + import { DateFilter } from 'lib/components/DateFilter/DateFilter' import { DurationPicker } from 'lib/components/DurationPicker/DurationPicker' import { PropertyFilterDatePicker } from 'lib/components/PropertyFilters/components/PropertyFilterDatePicker' @@ -13,7 +16,6 @@ import { propertyFilterTypeToPropertyDefinitionType } from 'lib/components/Prope import { dayjs } from 'lib/dayjs' import { LemonInputSelect } from 'lib/lemon-ui/LemonInputSelect/LemonInputSelect' import { formatDate, isOperatorDate, isOperatorFlag, isOperatorMulti, toString } from 'lib/utils' -import { useCallback, useEffect } from 'react' import { PROPERTY_FILTER_TYPES_WITH_ALL_TIME_SUGGESTIONS, diff --git a/frontend/src/lib/components/PropertyFilters/components/TaxonomicPropertyFilter.tsx b/frontend/src/lib/components/PropertyFilters/components/TaxonomicPropertyFilter.tsx index a24cfefe1a..1acd24acec 100644 --- a/frontend/src/lib/components/PropertyFilters/components/TaxonomicPropertyFilter.tsx +++ b/frontend/src/lib/components/PropertyFilters/components/TaxonomicPropertyFilter.tsx @@ -1,15 +1,18 @@ import './TaxonomicPropertyFilter.scss' +import clsx from 'clsx' +import { useActions, useValues } from 'kea' +import { useMemo } from 'react' + import { IconPlusSmall } from '@posthog/icons' import { LemonButton, LemonDropdown } from '@posthog/lemon-ui' -import clsx from 'clsx' -import { useActions, useValues } from 'kea' + import { OperatorValueSelect } from 'lib/components/PropertyFilters/components/OperatorValueSelect' import { PropertyFilterInternalProps } from 'lib/components/PropertyFilters/types' import { + PROPERTY_FILTER_TYPE_TO_TAXONOMIC_FILTER_GROUP_TYPE, isGroupPropertyFilter, isPropertyFilterWithOperator, - PROPERTY_FILTER_TYPE_TO_TAXONOMIC_FILTER_GROUP_TYPE, propertyFilterTypeToTaxonomicFilterType, } from 'lib/components/PropertyFilters/utils' import { PropertyKeyInfo } from 'lib/components/PropertyKeyInfo' @@ -20,7 +23,6 @@ import { TaxonomicFilterValue, } from 'lib/components/TaxonomicFilter/types' import { isOperatorMulti, isOperatorRegex } from 'lib/utils' -import { useMemo } from 'react' import { dataWarehouseJoinsLogic } from 'scenes/data-warehouse/external/dataWarehouseJoinsLogic' import { propertyDefinitionsModel } from '~/models/propertyDefinitionsModel' diff --git a/frontend/src/lib/components/PropertyFilters/components/taxonomicPropertyFilterLogic.test.ts b/frontend/src/lib/components/PropertyFilters/components/taxonomicPropertyFilterLogic.test.ts index bbef518124..0f9bc3b256 100644 --- a/frontend/src/lib/components/PropertyFilters/components/taxonomicPropertyFilterLogic.test.ts +++ b/frontend/src/lib/components/PropertyFilters/components/taxonomicPropertyFilterLogic.test.ts @@ -1,4 +1,5 @@ import { expectLogic } from 'kea-test-utils' + import { taxonomicPropertyFilterLogic } from 'lib/components/PropertyFilters/components/taxonomicPropertyFilterLogic' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' diff --git a/frontend/src/lib/components/PropertyFilters/components/taxonomicPropertyFilterLogic.ts b/frontend/src/lib/components/PropertyFilters/components/taxonomicPropertyFilterLogic.ts index cd312f532e..eba1547e99 100644 --- a/frontend/src/lib/components/PropertyFilters/components/taxonomicPropertyFilterLogic.ts +++ b/frontend/src/lib/components/PropertyFilters/components/taxonomicPropertyFilterLogic.ts @@ -1,4 +1,5 @@ import { actions, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' + import { TaxonomicPropertyFilterLogicProps } from 'lib/components/PropertyFilters/types' import { createDefaultPropertyFilter, diff --git a/frontend/src/lib/components/PropertyFilters/propertyFilterLogic.ts b/frontend/src/lib/components/PropertyFilters/propertyFilterLogic.ts index 04f2cc0b1c..d4f422dd19 100644 --- a/frontend/src/lib/components/PropertyFilters/propertyFilterLogic.ts +++ b/frontend/src/lib/components/PropertyFilters/propertyFilterLogic.ts @@ -1,4 +1,5 @@ import { actions, kea, key, listeners, path, props, reducers, selectors } from 'kea' + import { PropertyFilterLogicProps } from 'lib/components/PropertyFilters/types' import { isValidPropertyFilter, parseProperties } from 'lib/components/PropertyFilters/utils' diff --git a/frontend/src/lib/components/PropertyFilters/utils.ts b/frontend/src/lib/components/PropertyFilters/utils.ts index 500b56adb2..0df03d7de4 100644 --- a/frontend/src/lib/components/PropertyFilters/utils.ts +++ b/frontend/src/lib/components/PropertyFilters/utils.ts @@ -25,6 +25,7 @@ import { EventPropertyFilter, FeaturePropertyFilter, FilterLogicalOperator, + FlagPropertyFilter, GroupPropertyFilter, HogQLPropertyFilter, LogEntryPropertyFilter, @@ -40,7 +41,6 @@ import { RecordingPropertyFilter, RevenueAnalyticsPropertyFilter, SessionPropertyFilter, - FlagPropertyFilter, } from '~/types' export function isPropertyGroup( diff --git a/frontend/src/lib/components/PropertyIcon/PropertyIcon.stories.tsx b/frontend/src/lib/components/PropertyIcon/PropertyIcon.stories.tsx index 2973439c82..a527458d62 100644 --- a/frontend/src/lib/components/PropertyIcon/PropertyIcon.stories.tsx +++ b/frontend/src/lib/components/PropertyIcon/PropertyIcon.stories.tsx @@ -1,4 +1,5 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' + import { PROPERTIES_ICON_MAP, PropertyIcon } from 'lib/components/PropertyIcon/PropertyIcon' import { LemonTable } from 'lib/lemon-ui/LemonTable' import { COUNTRY_CODE_TO_LONG_NAME } from 'lib/utils/geography/country' diff --git a/frontend/src/lib/components/PropertyIcon/PropertyIconStandalone.tsx b/frontend/src/lib/components/PropertyIcon/PropertyIconStandalone.tsx index 1224bdd663..0d4c8d2277 100644 --- a/frontend/src/lib/components/PropertyIcon/PropertyIconStandalone.tsx +++ b/frontend/src/lib/components/PropertyIcon/PropertyIconStandalone.tsx @@ -1,5 +1,8 @@ -import { IconGearFilled, IconHeadset } from '@posthog/icons' import clsx from 'clsx' +import { Ref, forwardRef } from 'react' + +import { IconGearFilled, IconHeadset } from '@posthog/icons' + import { IconAndroidOS, IconAppleIOS, @@ -23,7 +26,6 @@ import { IconWindows, } from 'lib/lemon-ui/icons' import { countryCodeToFlag } from 'lib/utils/geography/country' -import { forwardRef, Ref } from 'react' import { PropertyIconProps } from './types' diff --git a/frontend/src/lib/components/PropertyIcon/PropertyIconWithLabel.tsx b/frontend/src/lib/components/PropertyIcon/PropertyIconWithLabel.tsx index 8981c1509b..f3a161fc77 100644 --- a/frontend/src/lib/components/PropertyIcon/PropertyIconWithLabel.tsx +++ b/frontend/src/lib/components/PropertyIcon/PropertyIconWithLabel.tsx @@ -1,4 +1,4 @@ -import { forwardRef, Ref } from 'react' +import { Ref, forwardRef } from 'react' import { PropertyIconStandalone } from './PropertyIconStandalone' import { PropertyIconProps } from './types' diff --git a/frontend/src/lib/components/PropertyKeyInfo.tsx b/frontend/src/lib/components/PropertyKeyInfo.tsx index 4776e5dd8b..1aa755c68c 100644 --- a/frontend/src/lib/components/PropertyKeyInfo.tsx +++ b/frontend/src/lib/components/PropertyKeyInfo.tsx @@ -1,11 +1,13 @@ import './PropertyKeyInfo.scss' -import { LemonDivider, TooltipProps } from '@posthog/lemon-ui' import clsx from 'clsx' -import { Popover } from 'lib/lemon-ui/Popover' import React, { useState } from 'react' -import { getCoreFilterDefinition, PropertyKey } from '~/taxonomy/helpers' +import { LemonDivider, TooltipProps } from '@posthog/lemon-ui' + +import { Popover } from 'lib/lemon-ui/Popover' + +import { PropertyKey, getCoreFilterDefinition } from '~/taxonomy/helpers' import { TaxonomicFilterGroupType } from './TaxonomicFilter/types' diff --git a/frontend/src/lib/components/PropertySelect/PropertySelect.tsx b/frontend/src/lib/components/PropertySelect/PropertySelect.tsx index c3c80e0dfc..78f950ec9e 100644 --- a/frontend/src/lib/components/PropertySelect/PropertySelect.tsx +++ b/frontend/src/lib/components/PropertySelect/PropertySelect.tsx @@ -1,15 +1,17 @@ -import { closestCenter, DndContext, PointerSensor, useSensor, useSensors } from '@dnd-kit/core' +import { DndContext, PointerSensor, closestCenter, useSensor, useSensors } from '@dnd-kit/core' import { restrictToParentElement } from '@dnd-kit/modifiers' -import { horizontalListSortingStrategy, SortableContext, useSortable } from '@dnd-kit/sortable' +import { SortableContext, horizontalListSortingStrategy, useSortable } from '@dnd-kit/sortable' import { CSS } from '@dnd-kit/utilities' +import clsx from 'clsx' +import { useState } from 'react' + import { IconPlus } from '@posthog/icons' import { LemonButton } from '@posthog/lemon-ui' -import clsx from 'clsx' + import { TaxonomicFilter } from 'lib/components/TaxonomicFilter/TaxonomicFilter' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { LemonSnack } from 'lib/lemon-ui/LemonSnack/LemonSnack' import { Popover } from 'lib/lemon-ui/Popover/Popover' -import { useState } from 'react' export interface PropertySelectProps { addText: string diff --git a/frontend/src/lib/components/ResizeElement/ResizeElement.tsx b/frontend/src/lib/components/ResizeElement/ResizeElement.tsx index 0173ee939f..a065d848b5 100644 --- a/frontend/src/lib/components/ResizeElement/ResizeElement.tsx +++ b/frontend/src/lib/components/ResizeElement/ResizeElement.tsx @@ -1,6 +1,7 @@ -import { cn } from 'lib/utils/css-classes' import React, { useCallback, useEffect, useRef, useState } from 'react' +import { cn } from 'lib/utils/css-classes' + type ResizableElementProps = { defaultWidth: number minWidth?: number diff --git a/frontend/src/lib/components/Resizer/Resizer.tsx b/frontend/src/lib/components/Resizer/Resizer.tsx index 071d72c1c3..cf59a47724 100644 --- a/frontend/src/lib/components/Resizer/Resizer.tsx +++ b/frontend/src/lib/components/Resizer/Resizer.tsx @@ -4,7 +4,7 @@ import clsx from 'clsx' import { useActions, useValues } from 'kea' import { useEffect, useState } from 'react' -import { resizerLogic, ResizerLogicProps } from './resizerLogic' +import { ResizerLogicProps, resizerLogic } from './resizerLogic' export type ResizerProps = ResizerLogicProps & { offset?: number | string diff --git a/frontend/src/lib/components/ReverseProxyChecker/reverseProxyCheckerLogic.ts b/frontend/src/lib/components/ReverseProxyChecker/reverseProxyCheckerLogic.ts index 615f52ef92..1d93ba440a 100644 --- a/frontend/src/lib/components/ReverseProxyChecker/reverseProxyCheckerLogic.ts +++ b/frontend/src/lib/components/ReverseProxyChecker/reverseProxyCheckerLogic.ts @@ -1,5 +1,6 @@ import { kea, listeners, path } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { ActivationTask } from '~/layout/navigation-3000/sidepanel/panels/activation/activationLogic' diff --git a/frontend/src/lib/components/RichContentEditor/MentionsExtension.tsx b/frontend/src/lib/components/RichContentEditor/MentionsExtension.tsx index 6c5b22b4a2..60d021ba0d 100644 --- a/frontend/src/lib/components/RichContentEditor/MentionsExtension.tsx +++ b/frontend/src/lib/components/RichContentEditor/MentionsExtension.tsx @@ -1,11 +1,13 @@ -import { LemonButton, ProfilePicture } from '@posthog/lemon-ui' import { PluginKey } from '@tiptap/pm/state' import { Editor, Extension, ReactRenderer } from '@tiptap/react' import Suggestion from '@tiptap/suggestion' import Fuse from 'fuse.js' import { useValues } from 'kea' -import { Popover } from 'lib/lemon-ui/Popover' import { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useState } from 'react' + +import { LemonButton, ProfilePicture } from '@posthog/lemon-ui' + +import { Popover } from 'lib/lemon-ui/Popover' import { membersLogic } from 'scenes/organization/membersLogic' import { OrganizationMemberType } from '~/types' diff --git a/frontend/src/lib/components/RichContentEditor/RichContentNodeMention.tsx b/frontend/src/lib/components/RichContentEditor/RichContentNodeMention.tsx index 48486cc33d..61f983e2e0 100644 --- a/frontend/src/lib/components/RichContentEditor/RichContentNodeMention.tsx +++ b/frontend/src/lib/components/RichContentEditor/RichContentNodeMention.tsx @@ -1,9 +1,12 @@ -import { mergeAttributes, Node, NodeViewProps } from '@tiptap/core' +import { Node, NodeViewProps, mergeAttributes } from '@tiptap/core' import { NodeViewWrapper, ReactNodeViewRenderer } from '@tiptap/react' import clsx from 'clsx' -import { LemonButton, ProfilePicture, Tooltip } from '@posthog/lemon-ui' import { useValues } from 'kea' + +import { LemonButton, ProfilePicture, Tooltip } from '@posthog/lemon-ui' + import { membersLogic } from 'scenes/organization/membersLogic' + import { RichContentNodeType } from './types' export interface RichContentNodeMentionAttrs { diff --git a/frontend/src/lib/components/RichContentEditor/index.tsx b/frontend/src/lib/components/RichContentEditor/index.tsx index 951b3e9dc1..66227d5a57 100644 --- a/frontend/src/lib/components/RichContentEditor/index.tsx +++ b/frontend/src/lib/components/RichContentEditor/index.tsx @@ -2,9 +2,11 @@ import './RichContentEditor.scss' import { EditorContent, Extensions, useEditor } from '@tiptap/react' import { BindLogic } from 'kea' -import { richContentEditorLogic } from './richContentEditorLogic' -import { cn } from 'lib/utils/css-classes' import { PropsWithChildren } from 'react' + +import { cn } from 'lib/utils/css-classes' + +import { richContentEditorLogic } from './richContentEditorLogic' import { JSONContent, TTEditor } from './types' export const RichContentEditor = ({ diff --git a/frontend/src/lib/components/RichContentEditor/types.ts b/frontend/src/lib/components/RichContentEditor/types.ts index 555f971b9c..fdb53ed167 100644 --- a/frontend/src/lib/components/RichContentEditor/types.ts +++ b/frontend/src/lib/components/RichContentEditor/types.ts @@ -1,11 +1,10 @@ -import { Node as PMNode } from '@tiptap/pm/model' - import { ChainedCommands as EditorCommands, FocusPosition as EditorFocusPosition, - JSONContent as TTJSONContent, Range as EditorRange, + JSONContent as TTJSONContent, } from '@tiptap/core' +import { Node as PMNode } from '@tiptap/pm/model' export interface RichContentNode extends PMNode {} export interface JSONContent extends TTJSONContent {} diff --git a/frontend/src/lib/components/SceneDashboardChoice/SceneDashboardChoiceModal.tsx b/frontend/src/lib/components/SceneDashboardChoice/SceneDashboardChoiceModal.tsx index 9f31811e2b..25b4553eb2 100644 --- a/frontend/src/lib/components/SceneDashboardChoice/SceneDashboardChoiceModal.tsx +++ b/frontend/src/lib/components/SceneDashboardChoice/SceneDashboardChoiceModal.tsx @@ -1,5 +1,7 @@ -import { LemonDivider, LemonInput } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonDivider, LemonInput } from '@posthog/lemon-ui' + import { SceneIcon } from 'lib/components/SceneDashboardChoice/SceneIcon' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonModal } from 'lib/lemon-ui/LemonModal' @@ -9,8 +11,8 @@ import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' import { dashboardsModel } from '~/models/dashboardsModel' import { - sceneDashboardChoiceModalLogic, SceneDashboardChoiceModalProps, + sceneDashboardChoiceModalLogic, sceneDescription, } from './sceneDashboardChoiceModalLogic' diff --git a/frontend/src/lib/components/SceneDashboardChoice/SceneDashboardChoiceRequired.tsx b/frontend/src/lib/components/SceneDashboardChoice/SceneDashboardChoiceRequired.tsx index a6f426bb6f..09727891ad 100644 --- a/frontend/src/lib/components/SceneDashboardChoice/SceneDashboardChoiceRequired.tsx +++ b/frontend/src/lib/components/SceneDashboardChoice/SceneDashboardChoiceRequired.tsx @@ -1,8 +1,8 @@ +import { SceneIcon } from 'lib/components/SceneDashboardChoice/SceneIcon' import { DashboardCompatibleScenes, sceneDescription, } from 'lib/components/SceneDashboardChoice/sceneDashboardChoiceModalLogic' -import { SceneIcon } from 'lib/components/SceneDashboardChoice/SceneIcon' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { Scene } from 'scenes/sceneTypes' diff --git a/frontend/src/lib/components/SceneDashboardChoice/SceneIcon.tsx b/frontend/src/lib/components/SceneDashboardChoice/SceneIcon.tsx index a36f19eb09..0b180612a1 100644 --- a/frontend/src/lib/components/SceneDashboardChoice/SceneIcon.tsx +++ b/frontend/src/lib/components/SceneDashboardChoice/SceneIcon.tsx @@ -1,5 +1,7 @@ -import { IconHome, IconPerson } from '@posthog/icons' import clsx from 'clsx' + +import { IconHome, IconPerson } from '@posthog/icons' + import { DashboardCompatibleScenes } from 'lib/components/SceneDashboardChoice/sceneDashboardChoiceModalLogic' import { Scene } from 'scenes/sceneTypes' diff --git a/frontend/src/lib/components/SceneDashboardChoice/sceneDashboardChoiceModalLogic.test.ts b/frontend/src/lib/components/SceneDashboardChoice/sceneDashboardChoiceModalLogic.test.ts index 49d1769e17..50a3d790ca 100644 --- a/frontend/src/lib/components/SceneDashboardChoice/sceneDashboardChoiceModalLogic.test.ts +++ b/frontend/src/lib/components/SceneDashboardChoice/sceneDashboardChoiceModalLogic.test.ts @@ -1,5 +1,7 @@ -import { expectLogic } from 'kea-test-utils' import { MOCK_DEFAULT_TEAM, MOCK_DEFAULT_USER } from 'lib/api.mock' + +import { expectLogic } from 'kea-test-utils' + import { Scene } from 'scenes/sceneTypes' import { teamLogic } from 'scenes/teamLogic' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/lib/components/SceneDashboardChoice/sceneDashboardChoiceModalLogic.ts b/frontend/src/lib/components/SceneDashboardChoice/sceneDashboardChoiceModalLogic.ts index 888e4a6d25..893c58f582 100644 --- a/frontend/src/lib/components/SceneDashboardChoice/sceneDashboardChoiceModalLogic.ts +++ b/frontend/src/lib/components/SceneDashboardChoice/sceneDashboardChoiceModalLogic.ts @@ -1,7 +1,8 @@ import Fuse from 'fuse.js' import { actions, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' -import { eventUsageLogic } from 'lib/utils/eventUsageLogic' import posthog from 'posthog-js' + +import { eventUsageLogic } from 'lib/utils/eventUsageLogic' import { Scene } from 'scenes/sceneTypes' import { teamLogic } from 'scenes/teamLogic' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/lib/components/Scenes/InsightOrDashboard/SceneAddToDropdownMenu.tsx b/frontend/src/lib/components/Scenes/InsightOrDashboard/SceneAddToDropdownMenu.tsx index 41563f9546..2f92dd7d18 100644 --- a/frontend/src/lib/components/Scenes/InsightOrDashboard/SceneAddToDropdownMenu.tsx +++ b/frontend/src/lib/components/Scenes/InsightOrDashboard/SceneAddToDropdownMenu.tsx @@ -1,4 +1,5 @@ import { IconPlus } from '@posthog/icons' + import { ButtonPrimitive, ButtonPrimitiveProps } from 'lib/ui/Button/ButtonPrimitives' import { DropdownMenu, @@ -10,11 +11,13 @@ import { DropdownMenuSubTrigger, DropdownMenuTrigger, } from 'lib/ui/DropdownMenu/DropdownMenu' -import { SceneNotebookMenuItems } from './SceneNotebookMenuItems' -import { NodeKind } from '~/queries/schema/schema-general' -import { SceneDataAttrKeyProps } from '../utils' import { NotebookNodeType } from 'scenes/notebooks/types' +import { NodeKind } from '~/queries/schema/schema-general' + +import { SceneDataAttrKeyProps } from '../utils' +import { SceneNotebookMenuItems } from './SceneNotebookMenuItems' + type SceneAddToDropdownMenuProps = { onClick?: () => void } diff --git a/frontend/src/lib/components/Scenes/InsightOrDashboard/SceneExportDropdownMenu.tsx b/frontend/src/lib/components/Scenes/InsightOrDashboard/SceneExportDropdownMenu.tsx index eaacc02793..19cf031d89 100644 --- a/frontend/src/lib/components/Scenes/InsightOrDashboard/SceneExportDropdownMenu.tsx +++ b/frontend/src/lib/components/Scenes/InsightOrDashboard/SceneExportDropdownMenu.tsx @@ -1,4 +1,5 @@ import { IconDownload } from '@posthog/icons' + import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' import { DropdownMenu, @@ -7,10 +8,12 @@ import { DropdownMenuOpenIndicator, DropdownMenuTrigger, } from 'lib/ui/DropdownMenu/DropdownMenu' -import { SubscriptionBaseProps } from '../../Subscriptions/utils' + import { ExportContext, ExporterFormat, OnlineExportContext } from '~/types' + import { TriggerExportProps } from '../../ExportButton/exporter' import { exportsLogic } from '../../ExportButton/exportsLogic' +import { SubscriptionBaseProps } from '../../Subscriptions/utils' interface SceneExportDropdownMenuProps extends SubscriptionBaseProps { dropdownMenuItems: { diff --git a/frontend/src/lib/components/Scenes/InsightOrDashboard/SceneNotebookMenuItems.tsx b/frontend/src/lib/components/Scenes/InsightOrDashboard/SceneNotebookMenuItems.tsx index 15f6e4733c..69970f4b68 100644 --- a/frontend/src/lib/components/Scenes/InsightOrDashboard/SceneNotebookMenuItems.tsx +++ b/frontend/src/lib/components/Scenes/InsightOrDashboard/SceneNotebookMenuItems.tsx @@ -1,5 +1,8 @@ -import { IconNotebook, IconPlus } from '@posthog/icons' import { BuiltLogic, useActions, useValues } from 'kea' +import { useEffect } from 'react' + +import { IconNotebook, IconPlus } from '@posthog/icons' + import { dayjs } from 'lib/dayjs' import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' import { @@ -8,19 +11,20 @@ import { DropdownMenuLabel, DropdownMenuSeparator, } from 'lib/ui/DropdownMenu/DropdownMenu' -import { useEffect } from 'react' import { useNotebookNode } from 'scenes/notebooks/Nodes/NotebookNodeContext' import { notebookNodeLogicType } from 'scenes/notebooks/Nodes/notebookNodeLogicType' import { notebookLogicType } from 'scenes/notebooks/Notebook/notebookLogicType' import { - notebookSelectButtonLogic, NotebookSelectButtonLogicProps, + notebookSelectButtonLogic, } from 'scenes/notebooks/NotebookSelectButton/notebookSelectButtonLogic' +import { NotebookListItemType, NotebookTarget } from 'scenes/notebooks/types' + import { notebooksModel, openNotebook } from '~/models/notebooksModel' import { AccessControlLevel, AccessControlResourceType } from '~/types' + import { AccessControlAction } from '../../AccessControlAction' import { SceneDataAttrKeyProps } from '../utils' -import { NotebookListItemType, NotebookTarget } from 'scenes/notebooks/types' type SceneNotebookDropdownMenuProps = SceneDataAttrKeyProps & { notebookSelectButtonProps?: NotebookSelectButtonLogicProps diff --git a/frontend/src/lib/components/Scenes/SceneAlertsButton.tsx b/frontend/src/lib/components/Scenes/SceneAlertsButton.tsx index 090365aff2..f2529399c9 100644 --- a/frontend/src/lib/components/Scenes/SceneAlertsButton.tsx +++ b/frontend/src/lib/components/Scenes/SceneAlertsButton.tsx @@ -1,13 +1,16 @@ -import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' - -import { IconWarning } from '@posthog/icons' import { useActions, useValues } from 'kea' import { router } from 'kea-router' + +import { IconWarning } from '@posthog/icons' + import { IconWithCount } from 'lib/lemon-ui/icons/icons' +import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' +import { urls } from 'scenes/urls' + import { InsightLogicProps, InsightShortId } from '~/types' + import { insightAlertsLogic } from '../Alerts/insightAlertsLogic' import { SceneDataAttrKeyProps } from './utils' -import { urls } from 'scenes/urls' interface SceneAlertsButtonProps extends SceneDataAttrKeyProps { insightId: number diff --git a/frontend/src/lib/components/Scenes/SceneCommonButtons.tsx b/frontend/src/lib/components/Scenes/SceneCommonButtons.tsx index 38323e816d..be0ce70a63 100644 --- a/frontend/src/lib/components/Scenes/SceneCommonButtons.tsx +++ b/frontend/src/lib/components/Scenes/SceneCommonButtons.tsx @@ -1,23 +1,27 @@ +import { useActions } from 'kea' +import posthog from 'posthog-js' + import { + IconComment, IconCopy, - IconShare, IconExpand45, IconPin, IconPinFilled, IconRewindPlay, + IconShare, IconStar, IconStarFilled, - IconComment, } from '@posthog/icons' import { Link } from '@posthog/lemon-ui' -import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' -import { SceneDataAttrKeyProps } from './utils' -import { useActions } from 'kea' + import { useFeatureFlag } from 'lib/hooks/useFeatureFlag' -import posthog from 'posthog-js' +import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' + import { sidePanelLogic } from '~/layout/navigation-3000/sidepanel/sidePanelLogic' import { SidePanelTab } from '~/types' +import { SceneDataAttrKeyProps } from './utils' + type SceneCommonButtonsButtonProps = { onClick?: () => void active?: boolean diff --git a/frontend/src/lib/components/Scenes/SceneFile.tsx b/frontend/src/lib/components/Scenes/SceneFile.tsx index 6c25336738..d1b7ff535d 100644 --- a/frontend/src/lib/components/Scenes/SceneFile.tsx +++ b/frontend/src/lib/components/Scenes/SceneFile.tsx @@ -1,12 +1,8 @@ -import { IconFolderMove, IconFolderOpen, IconShortcut } from '@posthog/icons' import { useActions, useValues } from 'kea' + +import { IconFolderMove, IconFolderOpen, IconShortcut } from '@posthog/icons' + import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' -import { panelLayoutLogic } from '~/layout/panel-layout/panelLayoutLogic' -import { PROJECT_TREE_KEY } from '~/layout/panel-layout/ProjectTree/ProjectTree' -import { projectTreeDataLogic } from '~/layout/panel-layout/ProjectTree/projectTreeDataLogic' -import { projectTreeLogic } from '~/layout/panel-layout/ProjectTree/projectTreeLogic' -import { splitPath } from '~/layout/panel-layout/ProjectTree/utils' -import { moveToLogic } from '../FileSystem/MoveTo/moveToLogic' import { DropdownMenu, DropdownMenuContent, @@ -15,8 +11,15 @@ import { DropdownMenuTrigger, } from 'lib/ui/DropdownMenu/DropdownMenu' +import { PROJECT_TREE_KEY } from '~/layout/panel-layout/ProjectTree/ProjectTree' +import { projectTreeDataLogic } from '~/layout/panel-layout/ProjectTree/projectTreeDataLogic' +import { projectTreeLogic } from '~/layout/panel-layout/ProjectTree/projectTreeLogic' +import { splitPath } from '~/layout/panel-layout/ProjectTree/utils' +import { panelLayoutLogic } from '~/layout/panel-layout/panelLayoutLogic' import { ScenePanelLabel } from '~/layout/scenes/SceneLayout' +import { moveToLogic } from '../FileSystem/MoveTo/moveToLogic' + export function SceneFile({ dataAttrKey }: { dataAttrKey: string }): JSX.Element | null { const { assureVisibility } = useActions(projectTreeLogic({ key: PROJECT_TREE_KEY })) const { showLayoutPanel, setActivePanelIdentifier } = useActions(panelLayoutLogic) diff --git a/frontend/src/lib/components/Scenes/SceneMetalyticsSummaryButton.tsx b/frontend/src/lib/components/Scenes/SceneMetalyticsSummaryButton.tsx index 03f5f063a4..9ea32d330e 100644 --- a/frontend/src/lib/components/Scenes/SceneMetalyticsSummaryButton.tsx +++ b/frontend/src/lib/components/Scenes/SceneMetalyticsSummaryButton.tsx @@ -1,11 +1,13 @@ +import { useActions, useValues } from 'kea' + import { IconPulse } from '@posthog/icons' import { Spinner } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + +import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' import { sidePanelStateLogic } from '~/layout/navigation-3000/sidepanel/sidePanelStateLogic' import { SidePanelTab } from '~/types' -import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' import { FlaggedFeature } from '../FlaggedFeature' import { metalyticsLogic } from '../Metalytics/metalyticsLogic' import { SceneDataAttrKeyProps } from './utils' diff --git a/frontend/src/lib/components/Scenes/SceneSelect.tsx b/frontend/src/lib/components/Scenes/SceneSelect.tsx index ead5ba23ed..4ba62cb77d 100644 --- a/frontend/src/lib/components/Scenes/SceneSelect.tsx +++ b/frontend/src/lib/components/Scenes/SceneSelect.tsx @@ -1,3 +1,5 @@ +import { useEffect, useState } from 'react' + import { ButtonPrimitiveProps } from 'lib/ui/Button/ButtonPrimitives' import { SelectPrimitive, @@ -5,8 +7,9 @@ import { SelectPrimitiveItem, SelectPrimitiveTrigger, } from 'lib/ui/SelectPrimitive/SelectPrimitive' -import { useEffect, useState } from 'react' + import { ScenePanelLabel } from '~/layout/scenes/SceneLayout' + import { SceneSaveCancelButtons, SceneSelectProps as SceneSelectPropsBase } from './utils' type SceneSelectProps = SceneSelectPropsBase & { diff --git a/frontend/src/lib/components/Scenes/SceneShareButton.tsx b/frontend/src/lib/components/Scenes/SceneShareButton.tsx index 77ee882b48..988e4f97d1 100644 --- a/frontend/src/lib/components/Scenes/SceneShareButton.tsx +++ b/frontend/src/lib/components/Scenes/SceneShareButton.tsx @@ -1,4 +1,5 @@ import { ButtonPrimitive, ButtonPrimitiveProps } from 'lib/ui/Button/ButtonPrimitives' + import { SceneDataAttrKeyProps } from './utils' type SceneShareButtonProps = SceneDataAttrKeyProps & { diff --git a/frontend/src/lib/components/Scenes/SceneSubscribeButton.tsx b/frontend/src/lib/components/Scenes/SceneSubscribeButton.tsx index 5cb0ab9c88..c1060132ba 100644 --- a/frontend/src/lib/components/Scenes/SceneSubscribeButton.tsx +++ b/frontend/src/lib/components/Scenes/SceneSubscribeButton.tsx @@ -1,12 +1,15 @@ -import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' - -import { SubscriptionBaseProps, urlForSubscriptions } from '../Subscriptions/utils' import { useActions } from 'kea' import { router } from 'kea-router' -import { SceneDataAttrKeyProps } from './utils' -import { QueryBasedInsightModel } from '~/types' + import { IconBell } from '@posthog/icons' +import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' + +import { QueryBasedInsightModel } from '~/types' + +import { SubscriptionBaseProps, urlForSubscriptions } from '../Subscriptions/utils' +import { SceneDataAttrKeyProps } from './utils' + interface SceneSubscribeButtonProps extends SubscriptionBaseProps, SceneDataAttrKeyProps { insight?: Partial dashboardId?: number diff --git a/frontend/src/lib/components/Scenes/SceneTags.tsx b/frontend/src/lib/components/Scenes/SceneTags.tsx index 8b38ad4289..f7d7c03ec2 100644 --- a/frontend/src/lib/components/Scenes/SceneTags.tsx +++ b/frontend/src/lib/components/Scenes/SceneTags.tsx @@ -1,7 +1,10 @@ +import { useEffect, useState } from 'react' + import { LemonInputSelect } from 'lib/lemon-ui/LemonInputSelect/LemonInputSelect' import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' -import { useEffect, useState } from 'react' + import { ScenePanelLabel } from '~/layout/scenes/SceneLayout' + import { ObjectTags } from '../ObjectTags/ObjectTags' import { SceneCanEditProps, SceneDataAttrKeyProps, SceneSaveCancelButtons } from './utils' diff --git a/frontend/src/lib/components/Scenes/SceneTextInput.tsx b/frontend/src/lib/components/Scenes/SceneTextInput.tsx index 0126d53c79..2f99d6f45e 100644 --- a/frontend/src/lib/components/Scenes/SceneTextInput.tsx +++ b/frontend/src/lib/components/Scenes/SceneTextInput.tsx @@ -1,9 +1,12 @@ +import { useEffect, useState } from 'react' + import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' import { TextareaPrimitive } from 'lib/ui/TextareaPrimitive/TextareaPrimitive' -import { useEffect, useState } from 'react' + import { ScenePanelLabel } from '~/layout/scenes/SceneLayout' + import { SceneLoadingSkeleton } from './SceneLoadingSkeleton' -import { SceneTextInputProps, SceneSaveCancelButtons } from './utils' +import { SceneSaveCancelButtons, SceneTextInputProps } from './utils' export function SceneTextInput({ defaultValue = '', diff --git a/frontend/src/lib/components/Scenes/SceneTextarea.tsx b/frontend/src/lib/components/Scenes/SceneTextarea.tsx index f70595662b..fed6b2afd3 100644 --- a/frontend/src/lib/components/Scenes/SceneTextarea.tsx +++ b/frontend/src/lib/components/Scenes/SceneTextarea.tsx @@ -1,10 +1,13 @@ +import { useEffect, useState } from 'react' + +import { LemonMarkdown } from 'lib/lemon-ui/LemonMarkdown' import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' import { TextareaPrimitive } from 'lib/ui/TextareaPrimitive/TextareaPrimitive' -import { useEffect, useState } from 'react' + import { ScenePanelLabel } from '~/layout/scenes/SceneLayout' + import { SceneLoadingSkeleton } from './SceneLoadingSkeleton' import { SceneSaveCancelButtons, SceneTextareaProps } from './utils' -import { LemonMarkdown } from 'lib/lemon-ui/LemonMarkdown' export function SceneTextarea({ defaultValue = '', diff --git a/frontend/src/lib/components/Scenes/SceneUpdateActivityInfo.tsx b/frontend/src/lib/components/Scenes/SceneUpdateActivityInfo.tsx index dcd2a2cb26..5e132109ac 100644 --- a/frontend/src/lib/components/Scenes/SceneUpdateActivityInfo.tsx +++ b/frontend/src/lib/components/Scenes/SceneUpdateActivityInfo.tsx @@ -1,7 +1,9 @@ import { ProfilePicture } from 'lib/lemon-ui/ProfilePicture' -import { UserBasicType } from '~/types' -import { TZLabel } from '../TZLabel' + import { ScenePanelLabel } from '~/layout/scenes/SceneLayout' +import { UserBasicType } from '~/types' + +import { TZLabel } from '../TZLabel' interface SceneActivityIndicatorProps { prefix?: string diff --git a/frontend/src/lib/components/Scenes/utils.tsx b/frontend/src/lib/components/Scenes/utils.tsx index 00d244a3c3..0b8248b45c 100644 --- a/frontend/src/lib/components/Scenes/utils.tsx +++ b/frontend/src/lib/components/Scenes/utils.tsx @@ -1,4 +1,5 @@ import { IconCheck, IconLoading, IconX } from '@posthog/icons' + import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' import { SelectPrimitiveItemProps } from 'lib/ui/SelectPrimitive/SelectPrimitive' diff --git a/frontend/src/lib/components/ScrollableShadows/ScrollableShadows.stories.tsx b/frontend/src/lib/components/ScrollableShadows/ScrollableShadows.stories.tsx index ac80b72348..f0b7e31bda 100644 --- a/frontend/src/lib/components/ScrollableShadows/ScrollableShadows.stories.tsx +++ b/frontend/src/lib/components/ScrollableShadows/ScrollableShadows.stories.tsx @@ -1,7 +1,8 @@ -import { LemonButton } from '@posthog/lemon-ui' import { Meta } from '@storybook/react' import { useRef } from 'react' +import { LemonButton } from '@posthog/lemon-ui' + import { ScrollableShadows } from './ScrollableShadows' const meta: Meta = { diff --git a/frontend/src/lib/components/ScrollableShadows/ScrollableShadows.tsx b/frontend/src/lib/components/ScrollableShadows/ScrollableShadows.tsx index 7acd752bd7..c74ddba2ce 100644 --- a/frontend/src/lib/components/ScrollableShadows/ScrollableShadows.tsx +++ b/frontend/src/lib/components/ScrollableShadows/ScrollableShadows.tsx @@ -1,9 +1,10 @@ import './ScrollableShadows.scss' import { clsx } from 'clsx' -import { useScrollable } from 'lib/hooks/useScrollable' import React, { CSSProperties, MutableRefObject } from 'react' +import { useScrollable } from 'lib/hooks/useScrollable' + export type ScrollableShadowsProps = { children: React.ReactNode direction: 'horizontal' | 'vertical' diff --git a/frontend/src/lib/components/SearchAutocomplete/SearchAutocomplete.tsx b/frontend/src/lib/components/SearchAutocomplete/SearchAutocomplete.tsx index f6cbaa20e4..e18b31becc 100644 --- a/frontend/src/lib/components/SearchAutocomplete/SearchAutocomplete.tsx +++ b/frontend/src/lib/components/SearchAutocomplete/SearchAutocomplete.tsx @@ -1,4 +1,7 @@ +import { Fragment, forwardRef, useEffect, useRef, useState } from 'react' + import { IconInfo, IconMinusSmall, IconSearch, IconX } from '@posthog/icons' + import { LemonInput } from 'lib/lemon-ui/LemonInput' import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' import { ListBox } from 'lib/ui/ListBox/ListBox' @@ -7,7 +10,7 @@ import { PopoverPrimitiveContent, PopoverPrimitiveTrigger, } from 'lib/ui/PopoverPrimitive/PopoverPrimitive' -import { forwardRef, Fragment, useEffect, useRef, useState } from 'react' + import { ScrollableShadows } from '../ScrollableShadows/ScrollableShadows' type Category = { label: string; value: string; hint?: string; icon?: React.ReactNode } diff --git a/frontend/src/lib/components/SeriesGlyph.tsx b/frontend/src/lib/components/SeriesGlyph.tsx index 63ddeac4f8..d6786383cc 100644 --- a/frontend/src/lib/components/SeriesGlyph.tsx +++ b/frontend/src/lib/components/SeriesGlyph.tsx @@ -1,6 +1,7 @@ import { useValues } from 'kea' + import { getSeriesColor } from 'lib/colors' -import { alphabet, hexToRGBA, lightenDarkenColor, RGBToRGBA } from 'lib/utils' +import { RGBToRGBA, alphabet, hexToRGBA, lightenDarkenColor } from 'lib/utils' import { themeLogic } from '~/layout/navigation-3000/themeLogic' diff --git a/frontend/src/lib/components/Sharing/SharingModal.stories.tsx b/frontend/src/lib/components/Sharing/SharingModal.stories.tsx index 1d66d7571f..a32bb371cf 100644 --- a/frontend/src/lib/components/Sharing/SharingModal.stories.tsx +++ b/frontend/src/lib/components/Sharing/SharingModal.stories.tsx @@ -1,7 +1,8 @@ import { Meta } from '@storybook/react' import { BindLogic } from 'kea' -import { LemonButton } from 'lib/lemon-ui/LemonButton' import { useState } from 'react' + +import { LemonButton } from 'lib/lemon-ui/LemonButton' import { dashboardLogic } from 'scenes/dashboard/dashboardLogic' import { useStorybookMocks } from '~/mocks/browser' diff --git a/frontend/src/lib/components/Sharing/SharingModal.tsx b/frontend/src/lib/components/Sharing/SharingModal.tsx index 457e99f2e0..cc2b22f086 100644 --- a/frontend/src/lib/components/Sharing/SharingModal.tsx +++ b/frontend/src/lib/components/Sharing/SharingModal.tsx @@ -1,44 +1,46 @@ import './SharingModal.scss' -import { IconCollapse, IconExpand, IconInfo, IconLock } from '@posthog/icons' -import { LemonButton, LemonDivider, LemonModal, LemonSkeleton, LemonSwitch, LemonBanner } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' import { router } from 'kea-router' +import posthog from 'posthog-js' +import { ReactNode, useEffect, useState } from 'react' + +import { IconCollapse, IconExpand, IconInfo, IconLock } from '@posthog/icons' +import { LemonBanner, LemonButton, LemonDivider, LemonModal, LemonSkeleton, LemonSwitch } from '@posthog/lemon-ui' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' +import { TemplateLinkSection } from 'lib/components/Sharing/TemplateLinkSection' import { TEMPLATE_LINK_HEADING, TEMPLATE_LINK_PII_WARNING, TEMPLATE_LINK_TOOLTIP, } from 'lib/components/Sharing/templateLinkMessages' -import { TemplateLinkSection } from 'lib/components/Sharing/TemplateLinkSection' import { TitleWithIcon } from 'lib/components/TitleWithIcon' -import { IconLink } from 'lib/lemon-ui/icons' import { LemonDialog } from 'lib/lemon-ui/LemonDialog' import { LemonField } from 'lib/lemon-ui/LemonField' import { Spinner } from 'lib/lemon-ui/Spinner/Spinner' import { Tooltip } from 'lib/lemon-ui/Tooltip' +import { IconLink } from 'lib/lemon-ui/icons' import { copyToClipboard } from 'lib/utils/copyToClipboard' import { getInsightDefinitionUrl } from 'lib/utils/insightLinks' -import posthog from 'posthog-js' -import { ReactNode, useEffect, useState } from 'react' +import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { DashboardCollaboration } from 'scenes/dashboard/DashboardCollaborators' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' -import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { urls } from 'scenes/urls' import { AccessControlPopoutCTA } from '~/layout/navigation-3000/sidepanel/panels/access_control/AccessControlPopoutCTA' import { isInsightVizNode } from '~/queries/utils' import { + AccessControlLevel, AccessControlResourceType, AvailableFeature, InsightShortId, QueryBasedInsightModel, - AccessControlLevel, } from '~/types' -import { upgradeModalLogic } from '../UpgradeModal/upgradeModalLogic' import { AccessControlAction, accessLevelSatisfied } from '../AccessControlAction' +import { upgradeModalLogic } from '../UpgradeModal/upgradeModalLogic' import { sharingLogic } from './sharingLogic' export const SHARING_MODAL_WIDTH = 600 diff --git a/frontend/src/lib/components/Sharing/TemplateLinkSection.tsx b/frontend/src/lib/components/Sharing/TemplateLinkSection.tsx index 69b51cac53..ba1e68cd1f 100644 --- a/frontend/src/lib/components/Sharing/TemplateLinkSection.tsx +++ b/frontend/src/lib/components/Sharing/TemplateLinkSection.tsx @@ -1,12 +1,14 @@ -import { IconInfo } from '@posthog/icons' -import { LemonButton } from '@posthog/lemon-ui' -import { TitleWithIcon } from 'lib/components/TitleWithIcon' -import { IconLink } from 'lib/lemon-ui/icons' -import { Tooltip } from 'lib/lemon-ui/Tooltip' -import { copyToClipboard } from 'lib/utils/copyToClipboard' import posthog from 'posthog-js' import { useState } from 'react' +import { IconInfo } from '@posthog/icons' +import { LemonButton } from '@posthog/lemon-ui' + +import { TitleWithIcon } from 'lib/components/TitleWithIcon' +import { Tooltip } from 'lib/lemon-ui/Tooltip' +import { IconLink } from 'lib/lemon-ui/icons' +import { copyToClipboard } from 'lib/utils/copyToClipboard' + interface TemplateLinkSectionProps { templateLink: string onShortenLink?: () => void diff --git a/frontend/src/lib/components/Sharing/sharingLogic.ts b/frontend/src/lib/components/Sharing/sharingLogic.ts index 0c7f19e3ce..6f3a80a405 100644 --- a/frontend/src/lib/components/Sharing/sharingLogic.ts +++ b/frontend/src/lib/components/Sharing/sharingLogic.ts @@ -1,15 +1,16 @@ import { actions, afterMount, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' -import { getInsightId } from 'scenes/insights/utils' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' +import { getInsightId } from 'scenes/insights/utils' +import { organizationLogic } from 'scenes/organizationLogic' import { urls } from 'scenes/urls' import { userLogic } from 'scenes/userLogic' import { dashboardsModel } from '~/models/dashboardsModel' -import { organizationLogic } from 'scenes/organizationLogic' import { AvailableFeature, InsightShortId, OrganizationType, SharingConfigurationType } from '~/types' import type { sharingLogicType } from './sharingLogicType' diff --git a/frontend/src/lib/components/SignupReferralSource.tsx b/frontend/src/lib/components/SignupReferralSource.tsx index 053bbaeec0..493665ff91 100644 --- a/frontend/src/lib/components/SignupReferralSource.tsx +++ b/frontend/src/lib/components/SignupReferralSource.tsx @@ -1,4 +1,5 @@ import { LemonInput } from '@posthog/lemon-ui' + import { LemonField } from 'lib/lemon-ui/LemonField' export default function SignupReferralSource({ disabled }: { disabled: boolean }): JSX.Element { diff --git a/frontend/src/lib/components/SimpleKeyValueList.tsx b/frontend/src/lib/components/SimpleKeyValueList.tsx index bafa11ae26..45148a1dbb 100644 --- a/frontend/src/lib/components/SimpleKeyValueList.tsx +++ b/frontend/src/lib/components/SimpleKeyValueList.tsx @@ -1,8 +1,8 @@ // A React component that renders a list of key-value pairs in a simple way. +import { ReactNode, useEffect, useState } from 'react' import { PropertyKeyInfo } from 'lib/components/PropertyKeyInfo' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' -import { ReactNode, useEffect, useState } from 'react' import { getCoreFilterDefinition } from '~/taxonomy/helpers' diff --git a/frontend/src/lib/components/SmoothingFilter/SmoothingFilter.tsx b/frontend/src/lib/components/SmoothingFilter/SmoothingFilter.tsx index a3a7ee6d5e..3dc95b430c 100644 --- a/frontend/src/lib/components/SmoothingFilter/SmoothingFilter.tsx +++ b/frontend/src/lib/components/SmoothingFilter/SmoothingFilter.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconPulse } from '@posthog/icons' import { LemonSelect } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { insightLogic } from 'scenes/insights/insightLogic' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' import { trendsDataLogic } from 'scenes/trends/trendsDataLogic' diff --git a/frontend/src/lib/components/SocialLoginButton/SocialLoginButton.tsx b/frontend/src/lib/components/SocialLoginButton/SocialLoginButton.tsx index 6a4d246f2f..da16d5e0a8 100644 --- a/frontend/src/lib/components/SocialLoginButton/SocialLoginButton.tsx +++ b/frontend/src/lib/components/SocialLoginButton/SocialLoginButton.tsx @@ -1,6 +1,7 @@ import clsx from 'clsx' import { useValues } from 'kea' import { combineUrl, router } from 'kea-router' + import { SSO_PROVIDER_NAMES } from 'lib/constants' import { LemonButton, LemonButtonWithoutSideActionProps } from 'lib/lemon-ui/LemonButton' import { LemonDivider } from 'lib/lemon-ui/LemonDivider' diff --git a/frontend/src/lib/components/SocialLoginButton/SocialLoginIcon.tsx b/frontend/src/lib/components/SocialLoginButton/SocialLoginIcon.tsx index 7011022d80..937172b159 100644 --- a/frontend/src/lib/components/SocialLoginButton/SocialLoginIcon.tsx +++ b/frontend/src/lib/components/SocialLoginButton/SocialLoginIcon.tsx @@ -1,4 +1,5 @@ import { IconGithub } from '@posthog/icons' + import { IconGitlab, IconGoogle, IconKey } from 'lib/lemon-ui/icons' import { SSOProvider } from '~/types' diff --git a/frontend/src/lib/components/Sparkline.stories.tsx b/frontend/src/lib/components/Sparkline.stories.tsx index e1fecf4490..aa2a50af1c 100644 --- a/frontend/src/lib/components/Sparkline.stories.tsx +++ b/frontend/src/lib/components/Sparkline.stories.tsx @@ -1,4 +1,5 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' + import { dayjs } from 'lib/dayjs' import { AnyScaleOptions, Sparkline } from './Sparkline' diff --git a/frontend/src/lib/components/Sparkline.tsx b/frontend/src/lib/components/Sparkline.tsx index 832a4f7cf9..d5066985fc 100644 --- a/frontend/src/lib/components/Sparkline.tsx +++ b/frontend/src/lib/components/Sparkline.tsx @@ -1,10 +1,11 @@ import clsx from 'clsx' +import { useEffect, useMemo, useRef, useState } from 'react' + import { ScaleOptions } from 'lib/Chart' import { Chart, ChartItem } from 'lib/Chart' import { getColorVar } from 'lib/colors' import { Popover } from 'lib/lemon-ui/Popover/Popover' import { humanFriendlyNumber } from 'lib/utils' -import { useEffect, useMemo, useRef, useState } from 'react' import { InsightTooltip } from 'scenes/insights/InsightTooltip/InsightTooltip' import { LemonSkeleton } from '../lemon-ui/LemonSkeleton' diff --git a/frontend/src/lib/components/Subscriptions/SubscriptionsModal.stories.tsx b/frontend/src/lib/components/Subscriptions/SubscriptionsModal.stories.tsx index 0dcb793df4..8c7fd926c0 100644 --- a/frontend/src/lib/components/Subscriptions/SubscriptionsModal.stories.tsx +++ b/frontend/src/lib/components/Subscriptions/SubscriptionsModal.stories.tsx @@ -1,7 +1,8 @@ import { Meta } from '@storybook/react' +import { useRef, useState } from 'react' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { uuid } from 'lib/utils' -import { useRef, useState } from 'react' import { useStorybookMocks } from '~/mocks/browser' import { useAvailableFeatures } from '~/mocks/features' diff --git a/frontend/src/lib/components/Subscriptions/SubscriptionsModal.tsx b/frontend/src/lib/components/Subscriptions/SubscriptionsModal.tsx index 7ec7baca21..07da0ee5f8 100644 --- a/frontend/src/lib/components/Subscriptions/SubscriptionsModal.tsx +++ b/frontend/src/lib/components/Subscriptions/SubscriptionsModal.tsx @@ -1,6 +1,8 @@ -import { LemonButton, LemonButtonWithDropdown } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { router } from 'kea-router' + +import { LemonButton, LemonButtonWithDropdown } from '@posthog/lemon-ui' + import { LemonModal } from 'lib/lemon-ui/LemonModal' import { Spinner } from 'lib/lemon-ui/Spinner/Spinner' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/lib/components/Subscriptions/subscriptionLogic.ts b/frontend/src/lib/components/Subscriptions/subscriptionLogic.ts index 280d2fdcb1..cd667c03e6 100644 --- a/frontend/src/lib/components/Subscriptions/subscriptionLogic.ts +++ b/frontend/src/lib/components/Subscriptions/subscriptionLogic.ts @@ -2,6 +2,7 @@ import { kea, key, listeners, path, props } from 'kea' import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' import { beforeUnload, router, urlToAction } from 'kea-router' + import api from 'lib/api' import { dayjs } from 'lib/dayjs' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' diff --git a/frontend/src/lib/components/Subscriptions/subscriptionsLogic.ts b/frontend/src/lib/components/Subscriptions/subscriptionsLogic.ts index 6c7ebab34f..21a7085227 100644 --- a/frontend/src/lib/components/Subscriptions/subscriptionsLogic.ts +++ b/frontend/src/lib/components/Subscriptions/subscriptionsLogic.ts @@ -1,5 +1,6 @@ -import { actions, afterMount, BreakPointFunction, kea, key, listeners, path, props, reducers } from 'kea' +import { BreakPointFunction, actions, afterMount, kea, key, listeners, path, props, reducers } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { deleteWithUndo } from 'lib/utils/deleteWithUndo' import { getInsightId } from 'scenes/insights/utils' diff --git a/frontend/src/lib/components/Subscriptions/utils.tsx b/frontend/src/lib/components/Subscriptions/utils.tsx index 32fe5f80e0..b731368a51 100644 --- a/frontend/src/lib/components/Subscriptions/utils.tsx +++ b/frontend/src/lib/components/Subscriptions/utils.tsx @@ -1,5 +1,6 @@ import { IconLetter } from '@posthog/icons' import { LemonSelectOptions } from '@posthog/lemon-ui' + import { IconSlack } from 'lib/lemon-ui/icons' import { range } from 'lib/utils' import { urls } from 'scenes/urls' diff --git a/frontend/src/lib/components/Subscriptions/views/EditSubscription.tsx b/frontend/src/lib/components/Subscriptions/views/EditSubscription.tsx index 5618e7c09c..31b860b937 100644 --- a/frontend/src/lib/components/Subscriptions/views/EditSubscription.tsx +++ b/frontend/src/lib/components/Subscriptions/views/EditSubscription.tsx @@ -1,13 +1,14 @@ -import { LemonInput, LemonTextArea, Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' + +import { LemonInput, LemonTextArea, Link } from '@posthog/lemon-ui' + import api from 'lib/api' import { UserActivityIndicator } from 'lib/components/UserActivityIndicator/UserActivityIndicator' import { usersLemonSelectOptions } from 'lib/components/UserSelectItem' import { dayjs } from 'lib/dayjs' -import { integrationsLogic } from 'lib/integrations/integrationsLogic' import { SlackChannelPicker } from 'lib/integrations/SlackIntegrationHelpers' -import { IconChevronLeft } from 'lib/lemon-ui/icons' +import { integrationsLogic } from 'lib/integrations/integrationsLogic' import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonField } from 'lib/lemon-ui/LemonField' @@ -16,18 +17,19 @@ import { LemonLabel } from 'lib/lemon-ui/LemonLabel/LemonLabel' import { LemonModal } from 'lib/lemon-ui/LemonModal' import { LemonSelect } from 'lib/lemon-ui/LemonSelect' import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' -import { membersLogic } from 'scenes/organization/membersLogic' +import { IconChevronLeft } from 'lib/lemon-ui/icons' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' +import { membersLogic } from 'scenes/organization/membersLogic' import { subscriptionLogic } from '../subscriptionLogic' import { subscriptionsLogic } from '../subscriptionsLogic' import { + SubscriptionBaseProps, bysetposOptions, frequencyOptionsPlural, frequencyOptionsSingular, intervalOptions, monthlyWeekdayOptions, - SubscriptionBaseProps, targetTypeOptions, timeOptions, weekdayOptions, diff --git a/frontend/src/lib/components/Subscriptions/views/ManageSubscriptions.tsx b/frontend/src/lib/components/Subscriptions/views/ManageSubscriptions.tsx index e8f35bcf5e..724fed3a39 100644 --- a/frontend/src/lib/components/Subscriptions/views/ManageSubscriptions.tsx +++ b/frontend/src/lib/components/Subscriptions/views/ManageSubscriptions.tsx @@ -1,10 +1,12 @@ -import { IconEllipsis } from '@posthog/icons' import { useActions, useValues } from 'kea' -import { IconSlack } from 'lib/lemon-ui/icons' + +import { IconEllipsis } from '@posthog/icons' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonModal } from 'lib/lemon-ui/LemonModal' import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' import { ProfileBubbles } from 'lib/lemon-ui/ProfilePicture' +import { IconSlack } from 'lib/lemon-ui/icons' import { capitalizeFirstLetter, pluralize } from 'lib/utils' import { SubscriptionType } from '~/types' diff --git a/frontend/src/lib/components/Support/SupportForm.tsx b/frontend/src/lib/components/Support/SupportForm.tsx index aa2899bd22..ada0637910 100644 --- a/frontend/src/lib/components/Support/SupportForm.tsx +++ b/frontend/src/lib/components/Support/SupportForm.tsx @@ -1,31 +1,33 @@ +import { useActions, useValues } from 'kea' +import { Form } from 'kea-forms' +import { useRef } from 'react' + import { IconBug, IconInfo, IconQuestion } from '@posthog/icons' import { LemonBanner, LemonInput, LemonSegmentedButton, LemonSegmentedButtonOption, - lemonToast, Link, Tooltip, + lemonToast, } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' -import { Form } from 'kea-forms' + import { useUploadFiles } from 'lib/hooks/useUploadFiles' -import { IconFeedback } from 'lib/lemon-ui/icons' import { LemonField } from 'lib/lemon-ui/LemonField' import { LemonFileInput } from 'lib/lemon-ui/LemonFileInput/LemonFileInput' import { LemonSelect } from 'lib/lemon-ui/LemonSelect/LemonSelect' import { LemonTextArea } from 'lib/lemon-ui/LemonTextArea/LemonTextArea' -import { useRef } from 'react' +import { IconFeedback } from 'lib/lemon-ui/icons' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { userLogic } from 'scenes/userLogic' import { SEVERITY_LEVEL_TO_NAME, SUPPORT_TICKET_TEMPLATES, - supportLogic, SupportTicketKind, TARGET_AREA_TO_NAME, + supportLogic, } from './supportLogic' const SUPPORT_TICKET_OPTIONS: LemonSegmentedButtonOption[] = [ diff --git a/frontend/src/lib/components/Support/SupportModal.tsx b/frontend/src/lib/components/Support/SupportModal.tsx index 9b28bbffa8..fb0174200d 100644 --- a/frontend/src/lib/components/Support/SupportModal.tsx +++ b/frontend/src/lib/components/Support/SupportModal.tsx @@ -1,8 +1,10 @@ -import { LemonButton } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' -import { LemonModal } from 'lib/lemon-ui/LemonModal/LemonModal' import { useEffect } from 'react' import { createRoot } from 'react-dom/client' + +import { LemonButton } from '@posthog/lemon-ui' + +import { LemonModal } from 'lib/lemon-ui/LemonModal/LemonModal' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { sidePanelStateLogic } from '~/layout/navigation-3000/sidepanel/sidePanelStateLogic' diff --git a/frontend/src/lib/components/Support/supportLogic.ts b/frontend/src/lib/components/Support/supportLogic.ts index 446215faf8..0bd8d28b50 100644 --- a/frontend/src/lib/components/Support/supportLogic.ts +++ b/frontend/src/lib/components/Support/supportLogic.ts @@ -1,14 +1,15 @@ import { actions, connect, kea, listeners, path, props, reducers, selectors } from 'kea' import { forms } from 'kea-forms' import { urlToAction } from 'kea-router' +import posthog from 'posthog-js' + +import api from 'lib/api' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' import { uuid } from 'lib/utils' import { parseExceptionEvent } from 'lib/utils/exceptionUtils' -import posthog from 'posthog-js' -import api from 'lib/api' +import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { billingLogic } from 'scenes/billing/billingLogic' import { organizationLogic } from 'scenes/organizationLogic' -import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { teamLogic } from 'scenes/teamLogic' import { userLogic } from 'scenes/userLogic' @@ -24,8 +25,8 @@ import { UserType, } from '~/types' -import type { supportLogicType } from './supportLogicType' import { openSupportModal } from './SupportModal' +import type { supportLogicType } from './supportLogicType' export function getPublicSupportSnippet( cloudRegion: Region | null | undefined, diff --git a/frontend/src/lib/components/TZLabel/TZLabel.stories.tsx b/frontend/src/lib/components/TZLabel/TZLabel.stories.tsx index d4917297da..9ca961ac0f 100644 --- a/frontend/src/lib/components/TZLabel/TZLabel.stories.tsx +++ b/frontend/src/lib/components/TZLabel/TZLabel.stories.tsx @@ -1,9 +1,10 @@ import { Meta } from '@storybook/react' +import { useState } from 'react' + import { TZLabel } from 'lib/components/TZLabel/index' import { now } from 'lib/dayjs' import { useDelayedOnMountEffect } from 'lib/hooks/useOnMountEffect' import { LemonDivider } from 'lib/lemon-ui/LemonDivider' -import { useState } from 'react' import { mswDecorator } from '~/mocks/browser' diff --git a/frontend/src/lib/components/TZLabel/index.tsx b/frontend/src/lib/components/TZLabel/index.tsx index b13e509dac..50d200084c 100644 --- a/frontend/src/lib/components/TZLabel/index.tsx +++ b/frontend/src/lib/components/TZLabel/index.tsx @@ -1,19 +1,21 @@ import './index.scss' +import clsx from 'clsx' +import { useActions, useValues } from 'kea' +import React, { forwardRef, useCallback, useEffect, useMemo, useState } from 'react' + import { IconCopy, IconGear, IconHome, IconLaptop } from '@posthog/icons' import { LemonButton, LemonDropdown, LemonDropdownProps } from '@posthog/lemon-ui' -import clsx from 'clsx' -import { useActions, useValues } from 'kea' + import { dayjs } from 'lib/dayjs' +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { IconWeb } from 'lib/lemon-ui/icons' import { humanFriendlyDetailedTime, shortTimeZone } from 'lib/utils' import { copyToClipboard } from 'lib/utils/copyToClipboard' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' -import React, { forwardRef, useCallback, useEffect, useMemo, useState } from 'react' import { urls } from 'scenes/urls' import { teamLogic } from '../../../scenes/teamLogic' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' const BASE_OUTPUT_FORMAT = 'ddd, MMM D, YYYY h:mm A' const BASE_OUTPUT_FORMAT_WITH_SECONDS = 'ddd, MMM D, YYYY h:mm:ss A' diff --git a/frontend/src/lib/components/TakeScreenshot/ScreenShotEditor.tsx b/frontend/src/lib/components/TakeScreenshot/ScreenShotEditor.tsx index ba5bf6676c..373d939aaa 100644 --- a/frontend/src/lib/components/TakeScreenshot/ScreenShotEditor.tsx +++ b/frontend/src/lib/components/TakeScreenshot/ScreenShotEditor.tsx @@ -1,18 +1,20 @@ +import { useActions, useValues } from 'kea' +import React, { useCallback, useEffect, useRef, useState } from 'react' + import { IconPencil, IconUndo } from '@posthog/icons' import { LemonButton, LemonColorPicker, LemonInput, LemonModal, LemonSelect } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { getSeriesColorPalette } from 'lib/colors' import { Spinner } from 'lib/lemon-ui/Spinner/Spinner' import { downloadFile } from 'lib/utils' -import React, { useCallback, useEffect, useRef, useState } from 'react' import { FilmCameraHog } from '../hedgehogs' import { type DrawingItem, type HistoryItem, type Point, - takeScreenshotLogic, type TextItem, + takeScreenshotLogic, } from './takeScreenshotLogic' export function ScreenShotEditor({ screenshotKey }: { screenshotKey: string }): JSX.Element { diff --git a/frontend/src/lib/components/TakeScreenshot/takeScreenshotLogic.ts b/frontend/src/lib/components/TakeScreenshot/takeScreenshotLogic.ts index 6f50e8e2c3..d1f8964eaa 100644 --- a/frontend/src/lib/components/TakeScreenshot/takeScreenshotLogic.ts +++ b/frontend/src/lib/components/TakeScreenshot/takeScreenshotLogic.ts @@ -1,8 +1,9 @@ -import { lemonToast } from '@posthog/lemon-ui' import { toBlob } from 'html-to-image' import { actions, kea, key, listeners, path, props, reducers } from 'kea' import posthog from 'posthog-js' +import { lemonToast } from '@posthog/lemon-ui' + import type { takeScreenshotLogicType } from './takeScreenshotLogicType' // Define interfaces for better type safety diff --git a/frontend/src/lib/components/TaxonomicFilter/InfiniteList.tsx b/frontend/src/lib/components/TaxonomicFilter/InfiniteList.tsx index c07b49f4bb..5bfc58ee45 100644 --- a/frontend/src/lib/components/TaxonomicFilter/InfiniteList.tsx +++ b/frontend/src/lib/components/TaxonomicFilter/InfiniteList.tsx @@ -1,10 +1,15 @@ import '../../lemon-ui/Popover/Popover.scss' import './InfiniteList.scss' -import { IconArchive, IconPlus } from '@posthog/icons' -import { LemonTag } from '@posthog/lemon-ui' import clsx from 'clsx' import { BindLogic, useActions, useValues } from 'kea' +import { useState } from 'react' +import { AutoSizer } from 'react-virtualized/dist/es/AutoSizer' +import { List, ListRowProps, ListRowRenderer } from 'react-virtualized/dist/es/List' + +import { IconArchive, IconPlus } from '@posthog/icons' +import { LemonTag } from '@posthog/lemon-ui' + import { ControlledDefinitionPopover } from 'lib/components/DefinitionPopover/DefinitionPopoverContents' import { definitionPopoverLogic } from 'lib/components/DefinitionPopover/definitionPopoverLogic' import { PropertyKeyInfo } from 'lib/components/PropertyKeyInfo' @@ -21,13 +26,10 @@ import { Spinner } from 'lib/lemon-ui/Spinner/Spinner' import { Tooltip } from 'lib/lemon-ui/Tooltip' import { pluralize } from 'lib/utils' import { isDefinitionStale } from 'lib/utils/definitions' -import { useState } from 'react' -import { AutoSizer } from 'react-virtualized/dist/es/AutoSizer' -import { List, ListRowProps, ListRowRenderer } from 'react-virtualized/dist/es/List' import { EventDefinition, PropertyDefinition } from '~/types' -import { infiniteListLogic, NO_ITEM_SELECTED } from './infiniteListLogic' +import { NO_ITEM_SELECTED, infiniteListLogic } from './infiniteListLogic' export interface InfiniteListProps { popupAnchorElement: HTMLDivElement | null diff --git a/frontend/src/lib/components/TaxonomicFilter/InfiniteSelectResults.tsx b/frontend/src/lib/components/TaxonomicFilter/InfiniteSelectResults.tsx index c0c5d46b4f..ed9e918199 100644 --- a/frontend/src/lib/components/TaxonomicFilter/InfiniteSelectResults.tsx +++ b/frontend/src/lib/components/TaxonomicFilter/InfiniteSelectResults.tsx @@ -1,13 +1,15 @@ +import { BindLogic, useActions, useValues } from 'kea' + import { IconCheck, IconSort } from '@posthog/icons' import { LemonButton, LemonMenu, LemonTag } from '@posthog/lemon-ui' -import { BindLogic, useActions, useValues } from 'kea' + import { FlaggedFeature } from 'lib/components/FlaggedFeature' import { InfiniteList } from 'lib/components/TaxonomicFilter/InfiniteList' import { infiniteListLogic } from 'lib/components/TaxonomicFilter/infiniteListLogic' import { taxonomicFilterPreferencesLogic } from 'lib/components/TaxonomicFilter/taxonomicFilterPreferencesLogic' import { TaxonomicFilterGroupType, TaxonomicFilterLogicProps } from 'lib/components/TaxonomicFilter/types' -import { IconBlank } from 'lib/lemon-ui/icons' import { Spinner } from 'lib/lemon-ui/Spinner/Spinner' +import { IconBlank } from 'lib/lemon-ui/icons' import { cn } from 'lib/utils/css-classes' import { TaxonomicFilterEmptyState, taxonomicFilterGroupTypesWithEmptyStates } from './TaxonomicFilterEmptyState' diff --git a/frontend/src/lib/components/TaxonomicFilter/TaxonomicFilter.stories.tsx b/frontend/src/lib/components/TaxonomicFilter/TaxonomicFilter.stories.tsx index 16671c225a..4d8394bd81 100644 --- a/frontend/src/lib/components/TaxonomicFilter/TaxonomicFilter.stories.tsx +++ b/frontend/src/lib/components/TaxonomicFilter/TaxonomicFilter.stories.tsx @@ -1,15 +1,16 @@ import { Meta, StoryFn } from '@storybook/react' import { useActions, useMountedLogic } from 'kea' + import { taxonomicFilterMocksDecorator } from 'lib/components/TaxonomicFilter/__mocks__/taxonomicFilterMocksDecorator' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' +import { useDelayedOnMountEffect } from 'lib/hooks/useOnMountEffect' import { useAvailableFeatures } from '~/mocks/features' import { actionsModel } from '~/models/actionsModel' import { AvailableFeature } from '~/types' -import { infiniteListLogic } from './infiniteListLogic' import { TaxonomicFilter } from './TaxonomicFilter' -import { useDelayedOnMountEffect } from 'lib/hooks/useOnMountEffect' +import { infiniteListLogic } from './infiniteListLogic' const meta: Meta = { title: 'Filters/Taxonomic Filter', diff --git a/frontend/src/lib/components/TaxonomicFilter/TaxonomicFilter.tsx b/frontend/src/lib/components/TaxonomicFilter/TaxonomicFilter.tsx index 82d699fda6..9c2926d41f 100644 --- a/frontend/src/lib/components/TaxonomicFilter/TaxonomicFilter.tsx +++ b/frontend/src/lib/components/TaxonomicFilter/TaxonomicFilter.tsx @@ -1,8 +1,11 @@ import './TaxonomicFilter.scss' -import { IconKeyboard } from '@posthog/icons' import clsx from 'clsx' import { BindLogic, useActions, useValues } from 'kea' +import { forwardRef, useEffect, useMemo, useRef, useState } from 'react' + +import { IconKeyboard } from '@posthog/icons' + import { TaxonomicFilterGroupType, TaxonomicFilterLogicProps, @@ -10,7 +13,6 @@ import { } from 'lib/components/TaxonomicFilter/types' import { LemonInput, LemonInputPropsText } from 'lib/lemon-ui/LemonInput/LemonInput' import { Tooltip, TooltipProps } from 'lib/lemon-ui/Tooltip' -import { forwardRef, useEffect, useMemo, useRef, useState } from 'react' import { InfiniteSelectResults } from './InfiniteSelectResults' import { defaultDataWarehousePopoverFields, taxonomicFilterLogic } from './taxonomicFilterLogic' diff --git a/frontend/src/lib/components/TaxonomicFilter/TaxonomicFilterEmptyState.tsx b/frontend/src/lib/components/TaxonomicFilter/TaxonomicFilterEmptyState.tsx index d5af0537e3..e323ac8dcc 100644 --- a/frontend/src/lib/components/TaxonomicFilter/TaxonomicFilterEmptyState.tsx +++ b/frontend/src/lib/components/TaxonomicFilter/TaxonomicFilterEmptyState.tsx @@ -1,10 +1,12 @@ -import { IconOpenSidebar, IconPlus } from '@posthog/icons' -import { LemonButton } from '@posthog/lemon-ui' import { useActions } from 'kea' import { router } from 'kea-router' +import type React from 'react' + +import { IconOpenSidebar, IconPlus } from '@posthog/icons' +import { LemonButton } from '@posthog/lemon-ui' + import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { ProductIntentContext } from 'lib/utils/product-intents' -import type React from 'react' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' diff --git a/frontend/src/lib/components/TaxonomicFilter/infiniteListLogic.test.ts b/frontend/src/lib/components/TaxonomicFilter/infiniteListLogic.test.ts index e92f9824fb..7520a8f26c 100644 --- a/frontend/src/lib/components/TaxonomicFilter/infiniteListLogic.test.ts +++ b/frontend/src/lib/components/TaxonomicFilter/infiniteListLogic.test.ts @@ -1,5 +1,7 @@ -import { expectLogic, partial } from 'kea-test-utils' import { MOCK_TEAM_ID } from 'lib/api.mock' + +import { expectLogic, partial } from 'kea-test-utils' + import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { useMocks } from '~/mocks/jest' diff --git a/frontend/src/lib/components/TaxonomicFilter/infiniteListLogic.ts b/frontend/src/lib/components/TaxonomicFilter/infiniteListLogic.ts index 48794ca8b2..f9c260ffc7 100644 --- a/frontend/src/lib/components/TaxonomicFilter/infiniteListLogic.ts +++ b/frontend/src/lib/components/TaxonomicFilter/infiniteListLogic.ts @@ -2,6 +2,8 @@ import Fuse from 'fuse.js' import { actions, connect, events, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { combineUrl } from 'kea-router' +import { RenderedRows } from 'react-virtualized/dist/es/List' + import api from 'lib/api' import { taxonomicFilterLogic } from 'lib/components/TaxonomicFilter/taxonomicFilterLogic' import { taxonomicFilterPreferencesLogic } from 'lib/components/TaxonomicFilter/taxonomicFilterPreferencesLogic' @@ -15,15 +17,14 @@ import { TaxonomicFilterGroupType, } from 'lib/components/TaxonomicFilter/types' import { isEmail, isURL } from 'lib/utils' -import { RenderedRows } from 'react-virtualized/dist/es/List' import { getCoreFilterDefinition } from '~/taxonomy/helpers' import { CohortType, EventDefinition } from '~/types' import { teamLogic } from '../../../scenes/teamLogic' import { captureTimeToSeeData } from '../../internalMetrics' -import type { infiniteListLogicType } from './infiniteListLogicType' import { getItemGroup } from './InfiniteList' +import type { infiniteListLogicType } from './infiniteListLogicType' /* by default the pop-up starts open for the first item in the list diff --git a/frontend/src/lib/components/TaxonomicFilter/taxonomicFilterLogic.test.ts b/frontend/src/lib/components/TaxonomicFilter/taxonomicFilterLogic.test.ts index 989b8dcbb2..f05ff7f866 100644 --- a/frontend/src/lib/components/TaxonomicFilter/taxonomicFilterLogic.test.ts +++ b/frontend/src/lib/components/TaxonomicFilter/taxonomicFilterLogic.test.ts @@ -1,5 +1,7 @@ -import { expectLogic } from 'kea-test-utils' import { MOCK_TEAM_ID } from 'lib/api.mock' + +import { expectLogic } from 'kea-test-utils' + import { taxonomicFilterLogic } from 'lib/components/TaxonomicFilter/taxonomicFilterLogic' import { TaxonomicFilterGroupType, TaxonomicFilterLogicProps } from 'lib/components/TaxonomicFilter/types' diff --git a/frontend/src/lib/components/TaxonomicFilter/taxonomicFilterLogic.tsx b/frontend/src/lib/components/TaxonomicFilter/taxonomicFilterLogic.tsx index 6f73b25087..1251c28317 100644 --- a/frontend/src/lib/components/TaxonomicFilter/taxonomicFilterLogic.tsx +++ b/frontend/src/lib/components/TaxonomicFilter/taxonomicFilterLogic.tsx @@ -1,6 +1,9 @@ -import { IconServer } from '@posthog/icons' -import { actions, BuiltLogic, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' +import { BuiltLogic, actions, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { combineUrl } from 'kea-router' +import posthog from 'posthog-js' + +import { IconServer } from '@posthog/icons' + import { infiniteListLogic } from 'lib/components/TaxonomicFilter/infiniteListLogic' import { infiniteListLogicType } from 'lib/components/TaxonomicFilter/infiniteListLogicType' import { taxonomicFilterPreferencesLogic } from 'lib/components/TaxonomicFilter/taxonomicFilterPreferencesLogic' @@ -15,7 +18,6 @@ import { } from 'lib/components/TaxonomicFilter/types' import { IconCohort } from 'lib/lemon-ui/icons' import { capitalizeFirstLetter, pluralize, toParams } from 'lib/utils' -import posthog from 'posthog-js' import { getEventDefinitionIcon, getEventMetadataDefinitionIcon, @@ -26,6 +28,7 @@ import { dataWarehouseJoinsLogic } from 'scenes/data-warehouse/external/dataWare import { dataWarehouseSceneLogic } from 'scenes/data-warehouse/settings/dataWarehouseSceneLogic' import { experimentsLogic } from 'scenes/experiments/experimentsLogic' import { MaxContextTaxonomicFilterOption } from 'scenes/max/maxTypes' +import { NotebookType } from 'scenes/notebooks/types' import { groupDisplayId } from 'scenes/persons/GroupActorDisplay' import { projectLogic } from 'scenes/projectLogic' import { ReplayTaxonomicFilters } from 'scenes/session-recordings/filters/ReplayTaxonomicFilters' @@ -57,7 +60,6 @@ import { import { InlineHogQLEditor } from './InlineHogQLEditor' import type { taxonomicFilterLogicType } from './taxonomicFilterLogicType' -import { NotebookType } from 'scenes/notebooks/types' export const eventTaxonomicGroupProps: Pick = { getPopoverHeader: (eventDefinition: EventDefinition): string => { diff --git a/frontend/src/lib/components/TaxonomicFilter/types.ts b/frontend/src/lib/components/TaxonomicFilter/types.ts index f7637a65df..f4bcbde288 100644 --- a/frontend/src/lib/components/TaxonomicFilter/types.ts +++ b/frontend/src/lib/components/TaxonomicFilter/types.ts @@ -1,5 +1,6 @@ import Fuse from 'fuse.js' import { LogicWrapper } from 'kea' + import { DataWarehouseTableForInsight } from 'scenes/data-warehouse/types' import { LocalFilter } from 'scenes/insights/filters/ActionFilter/entityFilterLogic' import { MaxContextTaxonomicFilterOption } from 'scenes/max/maxTypes' diff --git a/frontend/src/lib/components/TaxonomicPopover/TaxonomicPopover.stories.tsx b/frontend/src/lib/components/TaxonomicPopover/TaxonomicPopover.stories.tsx index e5184cceb6..dec9bd1f32 100644 --- a/frontend/src/lib/components/TaxonomicPopover/TaxonomicPopover.stories.tsx +++ b/frontend/src/lib/components/TaxonomicPopover/TaxonomicPopover.stories.tsx @@ -1,9 +1,10 @@ import { Meta } from '@storybook/react' import { useMountedLogic } from 'kea' +import { useState } from 'react' + import { PropertyKeyInfo } from 'lib/components/PropertyKeyInfo' import { taxonomicFilterMocksDecorator } from 'lib/components/TaxonomicFilter/__mocks__/taxonomicFilterMocksDecorator' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' -import { useState } from 'react' import { cohortsModel } from '~/models/cohortsModel' diff --git a/frontend/src/lib/components/TaxonomicPopover/TaxonomicPopover.tsx b/frontend/src/lib/components/TaxonomicPopover/TaxonomicPopover.tsx index 7aa9a22f30..fd204079eb 100644 --- a/frontend/src/lib/components/TaxonomicPopover/TaxonomicPopover.tsx +++ b/frontend/src/lib/components/TaxonomicPopover/TaxonomicPopover.tsx @@ -1,5 +1,8 @@ import { Placement } from '@floating-ui/react' +import { Ref, forwardRef, useEffect, useState } from 'react' + import { IconX } from '@posthog/icons' + import { TaxonomicFilter } from 'lib/components/TaxonomicFilter/TaxonomicFilter' import { DataWarehousePopoverField, @@ -8,7 +11,6 @@ import { } from 'lib/components/TaxonomicFilter/types' import { LemonButton, LemonButtonProps } from 'lib/lemon-ui/LemonButton' import { LemonDropdown } from 'lib/lemon-ui/LemonDropdown' -import { forwardRef, Ref, useEffect, useState } from 'react' import { LocalFilter } from 'scenes/insights/filters/ActionFilter/entityFilterLogic' import { MaxContextTaxonomicFilterOption } from 'scenes/max/maxTypes' diff --git a/frontend/src/lib/components/TestAccountFiltersSwitch.tsx b/frontend/src/lib/components/TestAccountFiltersSwitch.tsx index 192e015728..dd8c7445df 100644 --- a/frontend/src/lib/components/TestAccountFiltersSwitch.tsx +++ b/frontend/src/lib/components/TestAccountFiltersSwitch.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconGear } from '@posthog/icons' import { LemonButton, LemonSwitch, LemonSwitchProps } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { teamLogic } from 'scenes/teamLogic' import { sidePanelSettingsLogic } from '~/layout/navigation-3000/sidepanel/panels/sidePanelSettingsLogic' diff --git a/frontend/src/lib/components/TimeSensitiveAuthentication/TimeSensitiveAuthentication.tsx b/frontend/src/lib/components/TimeSensitiveAuthentication/TimeSensitiveAuthentication.tsx index 3dae86089b..2c58f904f0 100644 --- a/frontend/src/lib/components/TimeSensitiveAuthentication/TimeSensitiveAuthentication.tsx +++ b/frontend/src/lib/components/TimeSensitiveAuthentication/TimeSensitiveAuthentication.tsx @@ -1,11 +1,13 @@ -import { LemonButton, LemonInput, LemonModal, SpinnerOverlay } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' + +import { LemonButton, LemonInput, LemonModal, SpinnerOverlay } from '@posthog/lemon-ui' + +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { LemonField } from 'lib/lemon-ui/LemonField' -import { SocialLoginButtons, SSOEnforcedLoginButton } from '../SocialLoginButton/SocialLoginButton' +import { SSOEnforcedLoginButton, SocialLoginButtons } from '../SocialLoginButton/SocialLoginButton' import { timeSensitiveAuthenticationLogic } from './timeSensitiveAuthenticationLogic' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' export function TimeSensitiveAuthenticationModal(): JSX.Element { const { diff --git a/frontend/src/lib/components/TimeSensitiveAuthentication/timeSensitiveAuthenticationLogic.test.ts b/frontend/src/lib/components/TimeSensitiveAuthentication/timeSensitiveAuthenticationLogic.test.ts index 6ded182302..4f2e2fad41 100644 --- a/frontend/src/lib/components/TimeSensitiveAuthentication/timeSensitiveAuthenticationLogic.test.ts +++ b/frontend/src/lib/components/TimeSensitiveAuthentication/timeSensitiveAuthenticationLogic.test.ts @@ -1,5 +1,7 @@ -import { expectLogic } from 'kea-test-utils' import { MOCK_DEFAULT_USER } from 'lib/api.mock' + +import { expectLogic } from 'kea-test-utils' + import { dayjs } from 'lib/dayjs' import { apiStatusLogic } from 'lib/logic/apiStatusLogic' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/lib/components/TimeSensitiveAuthentication/timeSensitiveAuthenticationLogic.ts b/frontend/src/lib/components/TimeSensitiveAuthentication/timeSensitiveAuthenticationLogic.ts index f6a014aeaa..6bb7394508 100644 --- a/frontend/src/lib/components/TimeSensitiveAuthentication/timeSensitiveAuthenticationLogic.ts +++ b/frontend/src/lib/components/TimeSensitiveAuthentication/timeSensitiveAuthenticationLogic.ts @@ -2,10 +2,11 @@ import { actions, connect, kea, listeners, path, reducers, selectors } from 'kea import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' import { subscriptions } from 'kea-subscriptions' +import posthog from 'posthog-js' + import api from 'lib/api' import { Dayjs, dayjs } from 'lib/dayjs' import { apiStatusLogic } from 'lib/logic/apiStatusLogic' -import posthog from 'posthog-js' import { PrecheckResponseType } from 'scenes/authentication/loginLogic' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/lib/components/TimelineSeekbar/TimelineSeekbar.tsx b/frontend/src/lib/components/TimelineSeekbar/TimelineSeekbar.tsx index b2fdf2c5cf..665a914089 100644 --- a/frontend/src/lib/components/TimelineSeekbar/TimelineSeekbar.tsx +++ b/frontend/src/lib/components/TimelineSeekbar/TimelineSeekbar.tsx @@ -1,7 +1,9 @@ import './TimelineSeekbar.scss' -import { LemonBadge } from '@posthog/lemon-ui' import clsx from 'clsx' + +import { LemonBadge } from '@posthog/lemon-ui' + import { Dayjs } from 'lib/dayjs' import { Spinner } from 'lib/lemon-ui/Spinner/Spinner' import { Tooltip } from 'lib/lemon-ui/Tooltip' diff --git a/frontend/src/lib/components/TopBarSettingsButton/TopBarSettingsButton.tsx b/frontend/src/lib/components/TopBarSettingsButton/TopBarSettingsButton.tsx index 2b3ee6a6e5..4d4aafff11 100644 --- a/frontend/src/lib/components/TopBarSettingsButton/TopBarSettingsButton.tsx +++ b/frontend/src/lib/components/TopBarSettingsButton/TopBarSettingsButton.tsx @@ -1,6 +1,7 @@ +import { useActions, useValues } from 'kea' + import { IconGear } from '@posthog/icons' import { LemonButton, LemonButtonProps } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' import { sidePanelSettingsLogic } from '~/layout/navigation-3000/sidepanel/panels/sidePanelSettingsLogic' diff --git a/frontend/src/lib/components/TopBarSettingsButton/topBarSettingsButtonLogic.test.ts b/frontend/src/lib/components/TopBarSettingsButton/topBarSettingsButtonLogic.test.ts index e5164c3888..92c69e1140 100644 --- a/frontend/src/lib/components/TopBarSettingsButton/topBarSettingsButtonLogic.test.ts +++ b/frontend/src/lib/components/TopBarSettingsButton/topBarSettingsButtonLogic.test.ts @@ -1,14 +1,15 @@ +import { router } from 'kea-router' import { expectLogic } from 'kea-test-utils' + import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { sceneLogic } from 'scenes/sceneLogic' +import { urls } from 'scenes/urls' -import { initKeaTests } from '~/test/init' import { Scene } from '~/scenes/sceneTypes' +import { initKeaTests } from '~/test/init' import { topBarSettingsButtonLogic } from './topBarSettingsButtonLogic' -import { urls } from 'scenes/urls' -import { router } from 'kea-router' const groupsScene = (): any => ({ scene: { component: () => null, logic: null, settingSectionId: 'environment-crm' }, diff --git a/frontend/src/lib/components/TopBarSettingsButton/topBarSettingsButtonLogic.ts b/frontend/src/lib/components/TopBarSettingsButton/topBarSettingsButtonLogic.ts index 3024b30b0a..1fd01cd7aa 100644 --- a/frontend/src/lib/components/TopBarSettingsButton/topBarSettingsButtonLogic.ts +++ b/frontend/src/lib/components/TopBarSettingsButton/topBarSettingsButtonLogic.ts @@ -1,5 +1,6 @@ import { connect, kea, path, selectors } from 'kea' import { subscriptions } from 'kea-subscriptions' + import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { sceneLogic } from 'scenes/sceneLogic' diff --git a/frontend/src/lib/components/UnitPicker/GlobalCustomUnitModal.tsx b/frontend/src/lib/components/UnitPicker/GlobalCustomUnitModal.tsx index 0f9f466a5f..f0ed3fa7a3 100644 --- a/frontend/src/lib/components/UnitPicker/GlobalCustomUnitModal.tsx +++ b/frontend/src/lib/components/UnitPicker/GlobalCustomUnitModal.tsx @@ -1,10 +1,11 @@ import { useActions, useValues } from 'kea' +import { useEffect, useState } from 'react' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonField } from 'lib/lemon-ui/LemonField' import { LemonInput } from 'lib/lemon-ui/LemonInput/LemonInput' import { LemonModal } from 'lib/lemon-ui/LemonModal' import { capitalizeFirstLetter } from 'lib/utils' -import { useEffect, useState } from 'react' import { unitPickerModalLogic } from './unitPickerModalLogic' diff --git a/frontend/src/lib/components/UnitPicker/UnitPicker.tsx b/frontend/src/lib/components/UnitPicker/UnitPicker.tsx index c942a44b23..e57ea99c97 100644 --- a/frontend/src/lib/components/UnitPicker/UnitPicker.tsx +++ b/frontend/src/lib/components/UnitPicker/UnitPicker.tsx @@ -1,9 +1,10 @@ import { useActions, useValues } from 'kea' +import { useMemo, useState } from 'react' + import { useKeyboardHotkeys } from 'lib/hooks/useKeyboardHotkeys' import { LemonButton, LemonButtonWithDropdown } from 'lib/lemon-ui/LemonButton' import { LemonDivider } from 'lib/lemon-ui/LemonDivider' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' -import { useMemo, useState } from 'react' import { AggregationAxisFormat, INSIGHT_UNIT_OPTIONS } from 'scenes/insights/aggregationAxisFormat' import { insightLogic } from 'scenes/insights/insightLogic' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' diff --git a/frontend/src/lib/components/UniversalFilters/UniversalFilterButton.tsx b/frontend/src/lib/components/UniversalFilters/UniversalFilterButton.tsx index e27581cc6f..137dcd4cbe 100644 --- a/frontend/src/lib/components/UniversalFilters/UniversalFilterButton.tsx +++ b/frontend/src/lib/components/UniversalFilters/UniversalFilterButton.tsx @@ -1,13 +1,15 @@ import './UniversalFilterButton.scss' +import clsx from 'clsx' +import { useValues } from 'kea' +import React from 'react' + import { IconFilter, IconLogomark, IconX } from '@posthog/icons' import { LemonButton, PopoverReferenceContext } from '@posthog/lemon-ui' -import clsx from 'clsx' -import { useValues } from 'kea' + import { PropertyFilterIcon } from 'lib/components/PropertyFilters/components/PropertyFilterIcon' import { IconWithCount } from 'lib/lemon-ui/icons' import { midEllipsis } from 'lib/utils' -import React from 'react' import { cohortsModel } from '~/models/cohortsModel' import { propertyDefinitionsModel } from '~/models/propertyDefinitionsModel' diff --git a/frontend/src/lib/components/UniversalFilters/UniversalFilters.tsx b/frontend/src/lib/components/UniversalFilters/UniversalFilters.tsx index 15a41a79c9..e07e18d1d9 100644 --- a/frontend/src/lib/components/UniversalFilters/UniversalFilters.tsx +++ b/frontend/src/lib/components/UniversalFilters/UniversalFilters.tsx @@ -1,13 +1,14 @@ -import { IconPlusSmall } from '@posthog/icons' -import { LemonButton, LemonButtonProps, LemonDropdown, Popover } from '@posthog/lemon-ui' import { BindLogic, useActions, useValues } from 'kea' import { useState } from 'react' -import { AnyDataNode } from '~/queries/schema/schema-general' -import { UniversalFiltersGroup, UniversalFilterValue } from '~/types' +import { IconPlusSmall } from '@posthog/icons' +import { LemonButton, LemonButtonProps, LemonDropdown, Popover } from '@posthog/lemon-ui' + +import { AnyDataNode } from '~/queries/schema/schema-general' +import { UniversalFilterValue, UniversalFiltersGroup } from '~/types' -import { TaxonomicPropertyFilter } from '../PropertyFilters/components/TaxonomicPropertyFilter' import { PropertyFilters } from '../PropertyFilters/PropertyFilters' +import { TaxonomicPropertyFilter } from '../PropertyFilters/components/TaxonomicPropertyFilter' import { isValidPropertyFilter } from '../PropertyFilters/utils' import { TaxonomicFilter } from '../TaxonomicFilter/TaxonomicFilter' import { TaxonomicFilterGroupType } from '../TaxonomicFilter/types' diff --git a/frontend/src/lib/components/UniversalFilters/universalFiltersLogic.ts b/frontend/src/lib/components/UniversalFilters/universalFiltersLogic.ts index 8106ae8138..0b0dca5176 100644 --- a/frontend/src/lib/components/UniversalFilters/universalFiltersLogic.ts +++ b/frontend/src/lib/components/UniversalFilters/universalFiltersLogic.ts @@ -1,4 +1,5 @@ import { actions, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' + import { createDefaultPropertyFilter, taxonomicFilterTypeToPropertyFilterType, diff --git a/frontend/src/lib/components/UniversalFilters/utils.ts b/frontend/src/lib/components/UniversalFilters/utils.ts index 50761ea8b6..c1bfb170bd 100644 --- a/frontend/src/lib/components/UniversalFilters/utils.ts +++ b/frontend/src/lib/components/UniversalFilters/utils.ts @@ -6,9 +6,9 @@ import { LogEntryPropertyFilter, PropertyFilterType, RecordingPropertyFilter, + UniversalFilterValue, UniversalFiltersGroup, UniversalFiltersGroupValue, - UniversalFilterValue, } from '~/types' import { isCohortPropertyFilter } from '../PropertyFilters/utils' diff --git a/frontend/src/lib/components/UpgradeModal/UpgradeModal.tsx b/frontend/src/lib/components/UpgradeModal/UpgradeModal.tsx index d731a67747..15407eb713 100644 --- a/frontend/src/lib/components/UpgradeModal/UpgradeModal.tsx +++ b/frontend/src/lib/components/UpgradeModal/UpgradeModal.tsx @@ -1,5 +1,7 @@ -import { LemonModal } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonModal } from '@posthog/lemon-ui' + import { PayGateMini } from 'lib/components/PayGateMini/PayGateMini' import { upgradeModalLogic } from './upgradeModalLogic' diff --git a/frontend/src/lib/components/UpgradeModal/upgradeModalLogic.ts b/frontend/src/lib/components/UpgradeModal/upgradeModalLogic.ts index 51c6cf6fb6..fbc52dfe51 100644 --- a/frontend/src/lib/components/UpgradeModal/upgradeModalLogic.ts +++ b/frontend/src/lib/components/UpgradeModal/upgradeModalLogic.ts @@ -1,4 +1,5 @@ import { actions, connect, kea, listeners, path, reducers, selectors } from 'kea' + import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' diff --git a/frontend/src/lib/components/UserActivityIndicator/UserActivityIndicator.tsx b/frontend/src/lib/components/UserActivityIndicator/UserActivityIndicator.tsx index 8f8e602b61..a410d28c6a 100644 --- a/frontend/src/lib/components/UserActivityIndicator/UserActivityIndicator.tsx +++ b/frontend/src/lib/components/UserActivityIndicator/UserActivityIndicator.tsx @@ -1,6 +1,7 @@ import './UserActivityIndicator.scss' import clsx from 'clsx' + import { ProfilePicture } from 'lib/lemon-ui/ProfilePicture' import { UserBasicType } from '~/types' diff --git a/frontend/src/lib/components/VersionChecker/VersionCheckerBanner.tsx b/frontend/src/lib/components/VersionChecker/VersionCheckerBanner.tsx index 5e686bc07c..1f9c49f996 100644 --- a/frontend/src/lib/components/VersionChecker/VersionCheckerBanner.tsx +++ b/frontend/src/lib/components/VersionChecker/VersionCheckerBanner.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/lib/components/VersionChecker/versionCheckerLogic.ts b/frontend/src/lib/components/VersionChecker/versionCheckerLogic.ts index 3074908e31..bc9a755519 100644 --- a/frontend/src/lib/components/VersionChecker/versionCheckerLogic.ts +++ b/frontend/src/lib/components/VersionChecker/versionCheckerLogic.ts @@ -1,13 +1,14 @@ import { actions, afterMount, kea, key, listeners, path, props, reducers, sharedListeners } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { isNotNil } from 'lib/utils' import { + SemanticVersion, diffVersions, highestVersion, isEqualVersion, parseVersion, - SemanticVersion, tryParseVersion, versionToString, } from 'lib/utils/semver' diff --git a/frontend/src/lib/components/VerticalNestedDND/VerticalNestedDND.stories.tsx b/frontend/src/lib/components/VerticalNestedDND/VerticalNestedDND.stories.tsx index 8be6ad4f8b..91f39a449c 100644 --- a/frontend/src/lib/components/VerticalNestedDND/VerticalNestedDND.stories.tsx +++ b/frontend/src/lib/components/VerticalNestedDND/VerticalNestedDND.stories.tsx @@ -2,6 +2,7 @@ import { UniqueIdentifier } from '@dnd-kit/core' import { Meta, StoryFn, StoryObj } from '@storybook/react' import { VerticalNestedDND, VerticalNestedDNDProps } from './VerticalNestedDND' + type Story = StoryObj const meta: Meta = { title: 'Components/VerticalNestedDND', diff --git a/frontend/src/lib/components/VerticalNestedDND/VerticalNestedDND.tsx b/frontend/src/lib/components/VerticalNestedDND/VerticalNestedDND.tsx index 2b4478f53c..e9bd09f391 100644 --- a/frontend/src/lib/components/VerticalNestedDND/VerticalNestedDND.tsx +++ b/frontend/src/lib/components/VerticalNestedDND/VerticalNestedDND.tsx @@ -1,40 +1,42 @@ import { - closestCenter, CollisionDetection, - defaultDropAnimationSideEffects, DndContext, - DraggableSyntheticListeners, DragOverlay, + DraggableSyntheticListeners, DropAnimation, - getFirstCollision, MeasuringStrategy, MouseSensor, + TouchSensor, + closestCenter, + defaultDropAnimationSideEffects, + getFirstCollision, pointerWithin, rectIntersection, - TouchSensor, useSensor, useSensors, } from '@dnd-kit/core' import type { UniqueIdentifier } from '@dnd-kit/core/dist/types' import { AnimateLayoutChanges, + SortableContext, arrayMove, defaultAnimateLayoutChanges, - SortableContext, useSortable, verticalListSortingStrategy, } from '@dnd-kit/sortable' import type { Transform } from '@dnd-kit/utilities' import { CSS } from '@dnd-kit/utilities' -import { IconTrash } from '@posthog/icons' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' -import { IconDragHandle } from 'lib/lemon-ui/icons' -import { LemonButton, LemonButtonProps } from 'lib/lemon-ui/LemonButton' import debounce from 'lodash.debounce' import isEqual from 'lodash.isequal' import React, { forwardRef, useCallback, useEffect, useMemo, useRef, useState } from 'react' import { createPortal, unstable_batchedUpdates } from 'react-dom' +import { IconTrash } from '@posthog/icons' + +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' +import { LemonButton, LemonButtonProps } from 'lib/lemon-ui/LemonButton' +import { IconDragHandle } from 'lib/lemon-ui/icons' + const NOOP = (): void => {} export interface VDNDChildItem { id: UniqueIdentifier diff --git a/frontend/src/lib/components/ViewRecordingButton/ViewRecordingButton.stories.tsx b/frontend/src/lib/components/ViewRecordingButton/ViewRecordingButton.stories.tsx index 864bfe5d23..3299157d76 100644 --- a/frontend/src/lib/components/ViewRecordingButton/ViewRecordingButton.stories.tsx +++ b/frontend/src/lib/components/ViewRecordingButton/ViewRecordingButton.stories.tsx @@ -1,4 +1,5 @@ import type { Meta } from '@storybook/react' + import ViewRecordingButton from './ViewRecordingButton' const meta = { diff --git a/frontend/src/lib/components/ViewRecordingButton/ViewRecordingButton.tsx b/frontend/src/lib/components/ViewRecordingButton/ViewRecordingButton.tsx index 4fda25672b..f541a13166 100644 --- a/frontend/src/lib/components/ViewRecordingButton/ViewRecordingButton.tsx +++ b/frontend/src/lib/components/ViewRecordingButton/ViewRecordingButton.tsx @@ -1,16 +1,18 @@ -import { LemonButton, LemonButtonProps, Link, Spinner, Tooltip } from '@posthog/lemon-ui' -import { dayjs, Dayjs } from 'lib/dayjs' -import { IconPlayCircle } from 'lib/lemon-ui/icons' +import { useActions, useValues } from 'kea' import { ReactNode, useEffect } from 'react' +import { IconWarning } from '@posthog/icons' +import { LemonButton, LemonButtonProps, Link, Spinner, Tooltip } from '@posthog/lemon-ui' + +import { Dayjs, dayjs } from 'lib/dayjs' +import { IconPlayCircle } from 'lib/lemon-ui/icons' +import { sessionPlayerModalLogic } from 'scenes/session-recordings/player/modal/sessionPlayerModalLogic' +import { UnwatchedIndicator } from 'scenes/session-recordings/playlist/SessionRecordingPreview' +import { urls } from 'scenes/urls' + import { MatchedRecording } from '~/types' -import { useActions, useValues } from 'kea' -import { sessionPlayerModalLogic } from 'scenes/session-recordings/player/modal/sessionPlayerModalLogic' import { sessionRecordingViewedLogic } from './sessionRecordingViewedLogic' -import { UnwatchedIndicator } from 'scenes/session-recordings/playlist/SessionRecordingPreview' -import { urls } from 'scenes/urls' -import { IconWarning } from '@posthog/icons' export default function ViewRecordingButton({ sessionId, diff --git a/frontend/src/lib/components/ViewRecordingButton/sessionRecordingViewedLogic.ts b/frontend/src/lib/components/ViewRecordingButton/sessionRecordingViewedLogic.ts index a960772c02..9079b4e8c6 100644 --- a/frontend/src/lib/components/ViewRecordingButton/sessionRecordingViewedLogic.ts +++ b/frontend/src/lib/components/ViewRecordingButton/sessionRecordingViewedLogic.ts @@ -1,5 +1,6 @@ import { connect, kea, key, path, props } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/lib/components/VisibilitySensor/visibilitySensorLogic.tsx b/frontend/src/lib/components/VisibilitySensor/visibilitySensorLogic.tsx index 835d9a98df..aa66b1c4bd 100644 --- a/frontend/src/lib/components/VisibilitySensor/visibilitySensorLogic.tsx +++ b/frontend/src/lib/components/VisibilitySensor/visibilitySensorLogic.tsx @@ -2,6 +2,7 @@ import { actions, kea, key, listeners, path, props, reducers, selectors } from ' import { windowValues } from 'kea-window-values' import type { visibilitySensorLogicType } from './visibilitySensorLogicType' + export const visibilitySensorLogic = kea([ props( {} as { diff --git a/frontend/src/lib/components/heatmaps/HeatMapsSettings.tsx b/frontend/src/lib/components/heatmaps/HeatMapsSettings.tsx index e5b889aa7a..dba89fbeb5 100644 --- a/frontend/src/lib/components/heatmaps/HeatMapsSettings.tsx +++ b/frontend/src/lib/components/heatmaps/HeatMapsSettings.tsx @@ -1,5 +1,8 @@ -import { IconInfo } from '@posthog/icons' import { useValues } from 'kea' +import React, { useState } from 'react' + +import { IconInfo } from '@posthog/icons' + import { HEATMAP_COLOR_PALETTE_OPTIONS } from 'lib/components/heatmaps/heatmapDataLogic' import { HeatmapFilters, HeatmapFixedPositionMode } from 'lib/components/heatmaps/types' import { LemonButton } from 'lib/lemon-ui/LemonButton' @@ -7,7 +10,6 @@ import { LemonLabel } from 'lib/lemon-ui/LemonLabel' import { LemonSegmentedButton } from 'lib/lemon-ui/LemonSegmentedButton' import { LemonSelect } from 'lib/lemon-ui/LemonSelect' import { LemonSlider } from 'lib/lemon-ui/LemonSlider' -import React, { useState } from 'react' import { heatmapToolbarMenuLogic } from '~/toolbar/elements/heatmapToolbarMenuLogic' diff --git a/frontend/src/lib/components/heatmaps/HeatmapCanvas.tsx b/frontend/src/lib/components/heatmaps/HeatmapCanvas.tsx index 5033957904..d1a41f697c 100644 --- a/frontend/src/lib/components/heatmaps/HeatmapCanvas.tsx +++ b/frontend/src/lib/components/heatmaps/HeatmapCanvas.tsx @@ -1,9 +1,10 @@ import heatmapsJs, { Heatmap as HeatmapJS } from 'heatmap.js' import { useValues } from 'kea' +import { MutableRefObject, useCallback, useEffect, useMemo, useRef } from 'react' + import { heatmapDataLogic } from 'lib/components/heatmaps/heatmapDataLogic' import { useShiftKeyPressed } from 'lib/components/heatmaps/useShiftKeyPressed' import { cn } from 'lib/utils/css-classes' -import { MutableRefObject, useCallback, useEffect, useMemo, useRef } from 'react' import { useMousePosition } from './useMousePosition' diff --git a/frontend/src/lib/components/heatmaps/heatmapDataLogic.ts b/frontend/src/lib/components/heatmaps/heatmapDataLogic.ts index 7dcbb91c8c..0222e5280f 100644 --- a/frontend/src/lib/components/heatmaps/heatmapDataLogic.ts +++ b/frontend/src/lib/components/heatmaps/heatmapDataLogic.ts @@ -1,7 +1,9 @@ -import { actions, kea, listeners, path, props, reducers, selectors, key } from 'kea' +import { actions, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { encodeParams } from 'kea-router' import { windowValues } from 'kea-window-values' + +import { DEFAULT_HEATMAP_FILTERS, calculateViewportRange } from 'lib/components/IframedToolbarBrowser/utils' import { CommonFilters, HeatmapFilters, @@ -9,7 +11,6 @@ import { HeatmapJsData, HeatmapJsDataPoint, } from 'lib/components/heatmaps/types' -import { calculateViewportRange, DEFAULT_HEATMAP_FILTERS } from 'lib/components/IframedToolbarBrowser/utils' import { LemonSelectOption } from 'lib/lemon-ui/LemonSelect' import { dateFilterToText } from 'lib/utils' diff --git a/frontend/src/lib/components/heatmaps/useShiftKeyPressed.ts b/frontend/src/lib/components/heatmaps/useShiftKeyPressed.ts index b3293244cb..aead8c1f58 100644 --- a/frontend/src/lib/components/heatmaps/useShiftKeyPressed.ts +++ b/frontend/src/lib/components/heatmaps/useShiftKeyPressed.ts @@ -1,4 +1,5 @@ import { useState } from 'react' + import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' export function useShiftKeyPressed(): boolean { diff --git a/frontend/src/lib/components/hedgehogs.stories.tsx b/frontend/src/lib/components/hedgehogs.stories.tsx index 59be1f06bf..05294b1709 100644 --- a/frontend/src/lib/components/hedgehogs.stories.tsx +++ b/frontend/src/lib/components/hedgehogs.stories.tsx @@ -1,6 +1,7 @@ -import { LemonTable } from '@posthog/lemon-ui' import { Meta } from '@storybook/react' +import { LemonTable } from '@posthog/lemon-ui' + import * as hedgehogs from './hedgehogs' interface HedgehogDefinition { diff --git a/frontend/src/lib/components/hedgehogs.tsx b/frontend/src/lib/components/hedgehogs.tsx index a2fbf6e5d9..44c3a9c65c 100644 --- a/frontend/src/lib/components/hedgehogs.tsx +++ b/frontend/src/lib/components/hedgehogs.tsx @@ -1,4 +1,6 @@ // Loads custom icons (some icons may come from a third-party library) +import { ImgHTMLAttributes } from 'react' + import blushingHog from 'public/hedgehog/blushing-hog.png' import builderHog1 from 'public/hedgehog/builder-hog-01.png' import builderHog2 from 'public/hedgehog/builder-hog-02.png' @@ -39,7 +41,6 @@ import wavingHog from 'public/hedgehog/waving-hog.png' import xRayHog from 'public/hedgehog/x-ray-hog.png' import xRayHog2 from 'public/hedgehog/x-ray-hogs-02.png' import ycHog from 'public/hedgehog/yc-hog.png' -import { ImgHTMLAttributes } from 'react' type HedgehogProps = Omit, 'src'> diff --git a/frontend/src/lib/dayjs.ts b/frontend/src/lib/dayjs.ts index 8ea969db8e..5807e8b730 100644 --- a/frontend/src/lib/dayjs.ts +++ b/frontend/src/lib/dayjs.ts @@ -7,9 +7,9 @@ import LocalizedFormat from 'dayjs/plugin/localizedFormat' import quarterOfYear from 'dayjs/plugin/quarterOfYear' import relativeTime from 'dayjs/plugin/relativeTime' import timezone from 'dayjs/plugin/timezone' +import updateLocale from 'dayjs/plugin/updateLocale' import utc from 'dayjs/plugin/utc' import weekOfYear from 'dayjs/plugin/weekOfYear' -import updateLocale from 'dayjs/plugin/updateLocale' // necessary for any localized date formatting to work dayjs.extend(LocalizedFormat) diff --git a/frontend/src/lib/ee.test.ts b/frontend/src/lib/ee.test.ts index ba46e57fd2..0b209d89ed 100644 --- a/frontend/src/lib/ee.test.ts +++ b/frontend/src/lib/ee.test.ts @@ -1,15 +1,15 @@ import fs from 'fs' +import posthogEE from '@posthog/ee/exports' + +import { PostHogEE } from '../../@posthog/ee/types' + const eeFolderExists = fs.existsSync('../ee/frontend/exports.ts') export const ifEeIt = eeFolderExists ? it : it.skip export const ifFossIt = !eeFolderExists ? it : it.skip export const ifEeDescribe = eeFolderExists ? describe : describe.skip export const ifFossDescribe = !eeFolderExists ? describe : describe.skip -import posthogEE from '@posthog/ee/exports' - -import { PostHogEE } from '../../@posthog/ee/types' - describe('ee importing', () => { let posthogEEModule: PostHogEE diff --git a/frontend/src/lib/hog.ts b/frontend/src/lib/hog.ts index 21e4a2db29..21300a355c 100644 --- a/frontend/src/lib/hog.ts +++ b/frontend/src/lib/hog.ts @@ -1,7 +1,8 @@ -import { exec as hogExec, execAsync as hogExecAsync, ExecOptions, ExecResult, VMState } from '@posthog/hogvm' import * as crypto from 'crypto' import { RE2JS } from 're2js' +import { ExecOptions, ExecResult, VMState, exec as hogExec, execAsync as hogExecAsync } from '@posthog/hogvm' + import { performQuery } from '~/queries/query' import { HogQLASTQuery, HogQLQuery, NodeKind } from '~/queries/schema/schema-general' import { setLatestVersionsOnQuery } from '~/queries/utils' diff --git a/frontend/src/lib/hooks/useColumnWidths.ts b/frontend/src/lib/hooks/useColumnWidths.ts index 8b6069aeaa..bdd0af62a0 100644 --- a/frontend/src/lib/hooks/useColumnWidths.ts +++ b/frontend/src/lib/hooks/useColumnWidths.ts @@ -1,4 +1,5 @@ import { useCallback, useEffect, useRef, useState } from 'react' + import { DEFAULT_COLUMN_WIDTH } from '../lemon-ui/LemonTable/columnUtils' import { determineColumnKey } from '../lemon-ui/LemonTable/columnUtils' import { LemonTableColumn } from '../lemon-ui/LemonTable/types' diff --git a/frontend/src/lib/hooks/useFeatureFlag.ts b/frontend/src/lib/hooks/useFeatureFlag.ts index df0e8bb993..38db289703 100644 --- a/frontend/src/lib/hooks/useFeatureFlag.ts +++ b/frontend/src/lib/hooks/useFeatureFlag.ts @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' diff --git a/frontend/src/lib/hooks/useFloatingContainerContext.ts b/frontend/src/lib/hooks/useFloatingContainerContext.ts index dbe9f662d2..7aa54f24ea 100644 --- a/frontend/src/lib/hooks/useFloatingContainerContext.ts +++ b/frontend/src/lib/hooks/useFloatingContainerContext.ts @@ -1,4 +1,4 @@ -import { createContext, RefObject, useContext, useEffect, useState } from 'react' +import { RefObject, createContext, useContext, useEffect, useState } from 'react' /** * Typically floating things like popovers and tooltips are portaled to the root of the document, but sometimes diff --git a/frontend/src/lib/hooks/useKeyHeld.tsx b/frontend/src/lib/hooks/useKeyHeld.tsx index 015302086c..685cc52254 100644 --- a/frontend/src/lib/hooks/useKeyHeld.tsx +++ b/frontend/src/lib/hooks/useKeyHeld.tsx @@ -1,6 +1,7 @@ -import { useEventListener } from 'lib/hooks/useEventListener' import { DependencyList, useEffect, useRef, useState } from 'react' +import { useEventListener } from 'lib/hooks/useEventListener' + export function useKeyHeld(key: string, deps?: DependencyList): boolean { const keysHeldRef = useRef(new Set()) const [keyHeld, setKeyHeld] = useState(false) diff --git a/frontend/src/lib/hooks/useKeyboardHotkeys.tsx b/frontend/src/lib/hooks/useKeyboardHotkeys.tsx index d08afd4644..83b6c35e6e 100644 --- a/frontend/src/lib/hooks/useKeyboardHotkeys.tsx +++ b/frontend/src/lib/hooks/useKeyboardHotkeys.tsx @@ -1,6 +1,7 @@ -import { useEventListener } from 'lib/hooks/useEventListener' import { DependencyList } from 'react' +import { useEventListener } from 'lib/hooks/useEventListener' + import { HotKey } from '~/types' export interface HotkeyInterface { diff --git a/frontend/src/lib/hooks/useThemedHtml.ts b/frontend/src/lib/hooks/useThemedHtml.ts index 5b6238a533..419b21c433 100644 --- a/frontend/src/lib/hooks/useThemedHtml.ts +++ b/frontend/src/lib/hooks/useThemedHtml.ts @@ -1,6 +1,7 @@ import { useValues } from 'kea' import posthog from 'posthog-js' import { useEffect } from 'react' + import { sceneLogic } from 'scenes/sceneLogic' import { themeLogic } from '~/layout/navigation-3000/themeLogic' diff --git a/frontend/src/lib/hooks/useUploadFiles.ts b/frontend/src/lib/hooks/useUploadFiles.ts index 2ff8482604..acd472c542 100644 --- a/frontend/src/lib/hooks/useUploadFiles.ts +++ b/frontend/src/lib/hooks/useUploadFiles.ts @@ -1,7 +1,8 @@ -import api from 'lib/api' import posthog from 'posthog-js' import { useEffect, useRef, useState } from 'react' +import api from 'lib/api' + import { MediaUploadResponse } from '~/types' export const lazyImageBlobReducer = async (blob: Blob): Promise => { diff --git a/frontend/src/lib/hooks/useWindowSize.ts b/frontend/src/lib/hooks/useWindowSize.ts index 9e4a8244cb..d3d7dbbe11 100644 --- a/frontend/src/lib/hooks/useWindowSize.ts +++ b/frontend/src/lib/hooks/useWindowSize.ts @@ -1,5 +1,7 @@ -import { TAILWIND_BREAKPOINTS } from 'lib/constants' import { useCallback, useState } from 'react' + +import { TAILWIND_BREAKPOINTS } from 'lib/constants' + import { useOnMountEffect } from './useOnMountEffect' type WindowSize = { diff --git a/frontend/src/lib/integrations/ClickUpIntegrationHelpers.tsx b/frontend/src/lib/integrations/ClickUpIntegrationHelpers.tsx index f14341d9d1..1b237261bf 100644 --- a/frontend/src/lib/integrations/ClickUpIntegrationHelpers.tsx +++ b/frontend/src/lib/integrations/ClickUpIntegrationHelpers.tsx @@ -1,7 +1,8 @@ -import { LemonInputSelect, LemonInputSelectOption } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { useEffect, useMemo } from 'react' +import { LemonInputSelect, LemonInputSelectOption } from '@posthog/lemon-ui' + import { IntegrationType } from '~/types' import { clickupIntegrationLogic } from './clickupIntegrationLogic' diff --git a/frontend/src/lib/integrations/EmailIntegrationsList.tsx b/frontend/src/lib/integrations/EmailIntegrationsList.tsx index 678ce0ebef..4723dacd62 100644 --- a/frontend/src/lib/integrations/EmailIntegrationsList.tsx +++ b/frontend/src/lib/integrations/EmailIntegrationsList.tsx @@ -1,5 +1,7 @@ -import { LemonSkeleton } from '@posthog/lemon-ui' import { useValues } from 'kea' + +import { LemonSkeleton } from '@posthog/lemon-ui' + import { integrationsLogic } from 'lib/integrations/integrationsLogic' import { IntegrationEmailDomainView } from './IntegrationEmailDomainView' diff --git a/frontend/src/lib/integrations/GitHubIntegrationHelpers.tsx b/frontend/src/lib/integrations/GitHubIntegrationHelpers.tsx index 786ca4941f..04e310168e 100644 --- a/frontend/src/lib/integrations/GitHubIntegrationHelpers.tsx +++ b/frontend/src/lib/integrations/GitHubIntegrationHelpers.tsx @@ -1,8 +1,11 @@ -import { LemonInputSelect, LemonInputSelectOption } from '@posthog/lemon-ui' -import { LemonField } from 'lib/lemon-ui/LemonField' -import { githubIntegrationLogic } from './githubIntegrationLogic' -import { useEffect, useMemo } from 'react' import { useActions, useValues } from 'kea' +import { useEffect, useMemo } from 'react' + +import { LemonInputSelect, LemonInputSelectOption } from '@posthog/lemon-ui' + +import { LemonField } from 'lib/lemon-ui/LemonField' + +import { githubIntegrationLogic } from './githubIntegrationLogic' export const GitHubRepositorySelectField = ({ integrationId }: { integrationId: number }): JSX.Element => { const { options, loading } = useRepositories(integrationId) diff --git a/frontend/src/lib/integrations/GoogleAdsIntegrationHelpers.tsx b/frontend/src/lib/integrations/GoogleAdsIntegrationHelpers.tsx index 3a51fe9ac5..cf8052d844 100644 --- a/frontend/src/lib/integrations/GoogleAdsIntegrationHelpers.tsx +++ b/frontend/src/lib/integrations/GoogleAdsIntegrationHelpers.tsx @@ -1,7 +1,8 @@ -import { LemonInputSelect, LemonInputSelectOption } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { useEffect, useMemo } from 'react' +import { LemonInputSelect, LemonInputSelectOption } from '@posthog/lemon-ui' + import { GoogleAdsConversionActionType, IntegrationType } from '~/types' import { googleAdsIntegrationLogic } from './googleAdsIntegrationLogic' diff --git a/frontend/src/lib/integrations/IntegrationEmailDomainView.tsx b/frontend/src/lib/integrations/IntegrationEmailDomainView.tsx index d0c802af08..d4cea45f3f 100644 --- a/frontend/src/lib/integrations/IntegrationEmailDomainView.tsx +++ b/frontend/src/lib/integrations/IntegrationEmailDomainView.tsx @@ -1,10 +1,13 @@ +import { useActions } from 'kea' + import { IconLetter, IconWarning } from '@posthog/icons' import { LemonButton, LemonTag, Tooltip } from '@posthog/lemon-ui' -import { ChannelType } from 'products/messaging/frontend/Channels/MessageChannels' import { EmailIntegrationDomainGroupedType, IntegrationType } from '~/types' + +import { ChannelType } from 'products/messaging/frontend/Channels/MessageChannels' + import { integrationsLogic } from './integrationsLogic' -import { useActions } from 'kea' const isVerificationRequired = (integration: IntegrationType): boolean => { return ['email'].includes(integration.kind) diff --git a/frontend/src/lib/integrations/IntegrationScopesWarning.tsx b/frontend/src/lib/integrations/IntegrationScopesWarning.tsx index 53dd205ed1..6e25c12146 100644 --- a/frontend/src/lib/integrations/IntegrationScopesWarning.tsx +++ b/frontend/src/lib/integrations/IntegrationScopesWarning.tsx @@ -1,7 +1,8 @@ +import { useMemo } from 'react' + import api from 'lib/api' import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { Link } from 'lib/lemon-ui/Link' -import { useMemo } from 'react' import { CyclotronJobInputSchemaType, IntegrationType } from '~/types' diff --git a/frontend/src/lib/integrations/IntegrationView.tsx b/frontend/src/lib/integrations/IntegrationView.tsx index 886cb5de48..bc04c0e612 100644 --- a/frontend/src/lib/integrations/IntegrationView.tsx +++ b/frontend/src/lib/integrations/IntegrationView.tsx @@ -1,11 +1,14 @@ +import { useActions } from 'kea' + import { IconTrash } from '@posthog/icons' import { LemonBanner, LemonButton } from '@posthog/lemon-ui' -import { useActions } from 'kea' + import api from 'lib/api' import { UserActivityIndicator } from 'lib/components/UserActivityIndicator/UserActivityIndicator' import { IntegrationScopesWarning } from 'lib/integrations/IntegrationScopesWarning' import { CyclotronJobInputSchemaType, IntegrationType } from '~/types' + import { integrationsLogic } from './integrationsLogic' export function IntegrationView({ diff --git a/frontend/src/lib/integrations/IntegrationsList.tsx b/frontend/src/lib/integrations/IntegrationsList.tsx index 1e462d1bc4..5424abef11 100644 --- a/frontend/src/lib/integrations/IntegrationsList.tsx +++ b/frontend/src/lib/integrations/IntegrationsList.tsx @@ -1,7 +1,9 @@ -import { LemonSkeleton } from '@posthog/lemon-ui' import { useValues } from 'kea' -import { integrationsLogic } from 'lib/integrations/integrationsLogic' + +import { LemonSkeleton } from '@posthog/lemon-ui' + import { IntegrationView } from 'lib/integrations/IntegrationView' +import { integrationsLogic } from 'lib/integrations/integrationsLogic' import { IntegrationKind } from '~/types' diff --git a/frontend/src/lib/integrations/LinearIntegrationHelpers.tsx b/frontend/src/lib/integrations/LinearIntegrationHelpers.tsx index 0f5d733ed4..f04f50eace 100644 --- a/frontend/src/lib/integrations/LinearIntegrationHelpers.tsx +++ b/frontend/src/lib/integrations/LinearIntegrationHelpers.tsx @@ -1,11 +1,13 @@ -import { LemonInputSelect, LemonInputSelectOption } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { useEffect, useMemo } from 'react' +import { LemonInputSelect, LemonInputSelectOption } from '@posthog/lemon-ui' + +import { LemonField } from 'lib/lemon-ui/LemonField' + import { IntegrationType } from '~/types' import { linearIntegrationLogic } from './linearIntegrationLogic' -import { LemonField } from 'lib/lemon-ui/LemonField' export type LinearTeamPickerProps = { integration: IntegrationType diff --git a/frontend/src/lib/integrations/LinkedInIntegrationHelpers.tsx b/frontend/src/lib/integrations/LinkedInIntegrationHelpers.tsx index 15c5210714..8520b132d9 100644 --- a/frontend/src/lib/integrations/LinkedInIntegrationHelpers.tsx +++ b/frontend/src/lib/integrations/LinkedInIntegrationHelpers.tsx @@ -1,11 +1,13 @@ -import { LemonInputSelect, LemonInputSelectOption } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { useEffect, useMemo } from 'react' +import { LemonInputSelect, LemonInputSelectOption } from '@posthog/lemon-ui' + +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' + import { IntegrationType, LinkedInAdsAccountType, LinkedInAdsConversionRuleType } from '~/types' import { linkedInAdsIntegrationLogic } from './linkedInAdsIntegrationLogic' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' const getLinkedInAdsAccountOptions = ( linkedInAdsAccounts?: LinkedInAdsAccountType[] | null diff --git a/frontend/src/lib/integrations/SlackIntegrationHelpers.tsx b/frontend/src/lib/integrations/SlackIntegrationHelpers.tsx index dfdd7c1df8..3624bc229f 100644 --- a/frontend/src/lib/integrations/SlackIntegrationHelpers.tsx +++ b/frontend/src/lib/integrations/SlackIntegrationHelpers.tsx @@ -1,3 +1,6 @@ +import { useActions, useValues } from 'kea' +import { useEffect, useMemo, useState } from 'react' + import { LemonBanner, LemonButton, @@ -6,10 +9,9 @@ import { Link, ProfilePicture, } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { usePeriodicRerender } from 'lib/hooks/usePeriodicRerender' import { IconSlackExternal } from 'lib/lemon-ui/icons' -import { useEffect, useMemo, useState } from 'react' import { IntegrationType, SlackChannelType } from '~/types' diff --git a/frontend/src/lib/integrations/TwilioIntegrationHelpers.tsx b/frontend/src/lib/integrations/TwilioIntegrationHelpers.tsx index be8f42a861..053523941b 100644 --- a/frontend/src/lib/integrations/TwilioIntegrationHelpers.tsx +++ b/frontend/src/lib/integrations/TwilioIntegrationHelpers.tsx @@ -1,8 +1,12 @@ -import { LemonInputSelect, LemonInputSelectOption, Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' -import { usePeriodicRerender } from 'lib/hooks/usePeriodicRerender' import { useEffect, useMemo } from 'react' + +import { LemonInputSelect, LemonInputSelectOption, Link } from '@posthog/lemon-ui' + +import { usePeriodicRerender } from 'lib/hooks/usePeriodicRerender' + import { IntegrationType, TwilioPhoneNumberType } from '~/types' + import { twilioIntegrationLogic } from './twilioIntegrationLogic' const getTwilioPhoneNumberOptions = ( diff --git a/frontend/src/lib/integrations/clickupIntegrationLogic.ts b/frontend/src/lib/integrations/clickupIntegrationLogic.ts index 333877fbe9..a5d15a4ae4 100644 --- a/frontend/src/lib/integrations/clickupIntegrationLogic.ts +++ b/frontend/src/lib/integrations/clickupIntegrationLogic.ts @@ -1,5 +1,6 @@ import { actions, kea, key, path, props } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import type { clickupIntegrationLogicType } from './clickupIntegrationLogicType' diff --git a/frontend/src/lib/integrations/githubIntegrationLogic.ts b/frontend/src/lib/integrations/githubIntegrationLogic.ts index 71d62d8057..5481e2ee9b 100644 --- a/frontend/src/lib/integrations/githubIntegrationLogic.ts +++ b/frontend/src/lib/integrations/githubIntegrationLogic.ts @@ -1,5 +1,6 @@ import { actions, kea, key, path, props } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import type { githubIntegrationLogicType } from './githubIntegrationLogicType' diff --git a/frontend/src/lib/integrations/googleAdsIntegrationLogic.ts b/frontend/src/lib/integrations/googleAdsIntegrationLogic.ts index 32c2d329cb..9eb8b703f6 100644 --- a/frontend/src/lib/integrations/googleAdsIntegrationLogic.ts +++ b/frontend/src/lib/integrations/googleAdsIntegrationLogic.ts @@ -1,5 +1,6 @@ import { actions, kea, key, path, props } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { GoogleAdsConversionActionType } from '~/types' diff --git a/frontend/src/lib/integrations/integrationsLogic.ts b/frontend/src/lib/integrations/integrationsLogic.ts index 1e659c2d3b..729c787664 100644 --- a/frontend/src/lib/integrations/integrationsLogic.ts +++ b/frontend/src/lib/integrations/integrationsLogic.ts @@ -1,7 +1,9 @@ -import { LemonDialog, lemonToast } from '@posthog/lemon-ui' import { actions, afterMount, connect, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { router, urlToAction } from 'kea-router' + +import { LemonDialog, lemonToast } from '@posthog/lemon-ui' + import api, { getCookie } from 'lib/api' import { fromParamsGivenUrl } from 'lib/utils' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' @@ -9,9 +11,10 @@ import { urls } from 'scenes/urls' import { EmailIntegrationDomainGroupedType, IntegrationKind, IntegrationType } from '~/types' +import { ChannelType } from 'products/messaging/frontend/Channels/MessageChannels' + import type { integrationsLogicType } from './integrationsLogicType' import { ICONS } from './utils' -import { ChannelType } from 'products/messaging/frontend/Channels/MessageChannels' export const integrationsLogic = kea([ path(['lib', 'integrations', 'integrationsLogic']), diff --git a/frontend/src/lib/integrations/linearIntegrationLogic.ts b/frontend/src/lib/integrations/linearIntegrationLogic.ts index 473d25ba8e..20cd8b3e7e 100644 --- a/frontend/src/lib/integrations/linearIntegrationLogic.ts +++ b/frontend/src/lib/integrations/linearIntegrationLogic.ts @@ -1,5 +1,6 @@ import { actions, kea, key, path, props } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { LinearTeamType } from '~/types' diff --git a/frontend/src/lib/integrations/linkedInAdsIntegrationLogic.ts b/frontend/src/lib/integrations/linkedInAdsIntegrationLogic.ts index 451b684915..d0f89534d6 100644 --- a/frontend/src/lib/integrations/linkedInAdsIntegrationLogic.ts +++ b/frontend/src/lib/integrations/linkedInAdsIntegrationLogic.ts @@ -1,5 +1,6 @@ import { actions, kea, key, path, props } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { LinkedInAdsAccountType, LinkedInAdsConversionRuleType } from '~/types' diff --git a/frontend/src/lib/integrations/slackIntegrationLogic.ts b/frontend/src/lib/integrations/slackIntegrationLogic.ts index d491383b19..0ffbef3d9a 100644 --- a/frontend/src/lib/integrations/slackIntegrationLogic.ts +++ b/frontend/src/lib/integrations/slackIntegrationLogic.ts @@ -1,5 +1,6 @@ import { actions, connect, kea, key, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { dayjs } from 'lib/dayjs' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' diff --git a/frontend/src/lib/integrations/twilioIntegrationLogic.ts b/frontend/src/lib/integrations/twilioIntegrationLogic.ts index a45e54d74b..bcdb5b3c45 100644 --- a/frontend/src/lib/integrations/twilioIntegrationLogic.ts +++ b/frontend/src/lib/integrations/twilioIntegrationLogic.ts @@ -1,5 +1,6 @@ import { actions, connect, kea, key, path, props, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { dayjs } from 'lib/dayjs' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' diff --git a/frontend/src/lib/integrations/utils.ts b/frontend/src/lib/integrations/utils.ts index 79dc588f4d..952fe18e1b 100644 --- a/frontend/src/lib/integrations/utils.ts +++ b/frontend/src/lib/integrations/utils.ts @@ -1,22 +1,23 @@ +import { capitalizeFirstLetter } from 'lib/utils' + +import { IntegrationKind } from '~/types' + +import IconClickUp from 'public/services/clickup.svg' +import IconGitHub from 'public/services/github.png' import IconGoogleAds from 'public/services/google-ads.png' -import IconGoogleCloud from 'public/services/google-cloud.png' import IconGoogleCloudStorage from 'public/services/google-cloud-storage.png' +import IconGoogleCloud from 'public/services/google-cloud.png' +import IconGoogleSheets from 'public/services/google-sheets.svg' import IconHubspot from 'public/services/hubspot.png' import IconIntercom from 'public/services/intercom.png' import IconLinear from 'public/services/linear.png' -import IconGitHub from 'public/services/github.png' import IconLinkedIn from 'public/services/linkedin.png' import IconMailjet from 'public/services/mailjet.png' +import IconMetaAds from 'public/services/meta-ads.png' import IconSalesforce from 'public/services/salesforce.png' import IconSlack from 'public/services/slack.png' import IconSnapchat from 'public/services/snapchat.png' -import IconMetaAds from 'public/services/meta-ads.png' -import IconGoogleSheets from 'public/services/google-sheets.svg' import IconTwilio from 'public/services/twilio.png' -import IconClickUp from 'public/services/clickup.svg' - -import { capitalizeFirstLetter } from 'lib/utils' -import { IntegrationKind } from '~/types' export const ICONS: Record = { slack: IconSlack, diff --git a/frontend/src/lib/internalMetrics.ts b/frontend/src/lib/internalMetrics.ts index 51232d7ccf..dac8888633 100644 --- a/frontend/src/lib/internalMetrics.ts +++ b/frontend/src/lib/internalMetrics.ts @@ -1,5 +1,6 @@ -import api, { getJSONOrNull } from 'lib/api' import posthog from 'posthog-js' + +import api, { getJSONOrNull } from 'lib/api' import { getResponseBytes } from 'scenes/insights/utils' import { getCurrentExporterData } from '~/exporter/exporterViewLogic' diff --git a/frontend/src/lib/introductions/GroupsIntroductionOption.tsx b/frontend/src/lib/introductions/GroupsIntroductionOption.tsx index 59f1235fe1..daf9a05d0a 100644 --- a/frontend/src/lib/introductions/GroupsIntroductionOption.tsx +++ b/frontend/src/lib/introductions/GroupsIntroductionOption.tsx @@ -1,4 +1,5 @@ import { IconLock } from '@posthog/icons' + import { Link } from 'lib/lemon-ui/Link' export function GroupsIntroductionOption(): JSX.Element { diff --git a/frontend/src/lib/introductions/groupsAccessLogic.ts b/frontend/src/lib/introductions/groupsAccessLogic.ts index 46a774c73f..3c87718b8c 100644 --- a/frontend/src/lib/introductions/groupsAccessLogic.ts +++ b/frontend/src/lib/introductions/groupsAccessLogic.ts @@ -1,4 +1,5 @@ import { connect, kea, path, selectors } from 'kea' + import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { teamLogic } from 'scenes/teamLogic' import { userLogic } from 'scenes/userLogic' @@ -6,6 +7,7 @@ import { userLogic } from 'scenes/userLogic' import { AvailableFeature } from '~/types' import type { groupsAccessLogicType } from './groupsAccessLogicType' + export enum GroupsAccessStatus { AlreadyUsing, HasAccess, diff --git a/frontend/src/lib/lemon-ui/LemonActionableTooltip/LemonActionableTooltip.tsx b/frontend/src/lib/lemon-ui/LemonActionableTooltip/LemonActionableTooltip.tsx index bf4683de5c..a2da6a9647 100644 --- a/frontend/src/lib/lemon-ui/LemonActionableTooltip/LemonActionableTooltip.tsx +++ b/frontend/src/lib/lemon-ui/LemonActionableTooltip/LemonActionableTooltip.tsx @@ -1,11 +1,13 @@ import './LemonActionableTooltip.scss' import { Placement } from '@floating-ui/react' + import { IconX } from '@posthog/icons' import { LemonButton } from '@posthog/lemon-ui' + +import { Popover } from 'lib/lemon-ui/Popover/Popover' import { IconOpenInNew } from 'lib/lemon-ui/icons' import { IconChevronLeft, IconChevronRight } from 'lib/lemon-ui/icons' -import { Popover } from 'lib/lemon-ui/Popover/Popover' export type LemonActionableTooltipProps = { title?: string diff --git a/frontend/src/lib/lemon-ui/LemonBadge/LemonBadge.stories.tsx b/frontend/src/lib/lemon-ui/LemonBadge/LemonBadge.stories.tsx index 06036a5cee..d5e92d25f6 100644 --- a/frontend/src/lib/lemon-ui/LemonBadge/LemonBadge.stories.tsx +++ b/frontend/src/lib/lemon-ui/LemonBadge/LemonBadge.stories.tsx @@ -1,8 +1,10 @@ -import { IconPlusSmall } from '@posthog/icons' import { Meta, StoryFn, StoryObj } from '@storybook/react' -import { LemonButton } from 'lib/lemon-ui/LemonButton' import React from 'react' +import { IconPlusSmall } from '@posthog/icons' + +import { LemonButton } from 'lib/lemon-ui/LemonButton' + import { LemonBadge, LemonBadgeProps } from './LemonBadge' type Story = StoryObj diff --git a/frontend/src/lib/lemon-ui/LemonBadge/LemonBadge.tsx b/frontend/src/lib/lemon-ui/LemonBadge/LemonBadge.tsx index 14862695f9..8be0f0cba4 100644 --- a/frontend/src/lib/lemon-ui/LemonBadge/LemonBadge.tsx +++ b/frontend/src/lib/lemon-ui/LemonBadge/LemonBadge.tsx @@ -1,10 +1,11 @@ import './LemonBadge.scss' import clsx from 'clsx' -import { compactNumber, humanFriendlyNumber } from 'lib/utils' import { forwardRef } from 'react' import { CSSTransition } from 'react-transition-group' +import { compactNumber, humanFriendlyNumber } from 'lib/utils' + interface LemonBadgePropsBase { size?: 'small' | 'medium' | 'large' position?: 'none' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' diff --git a/frontend/src/lib/lemon-ui/LemonBadge/LemonBadgeNumber.stories.tsx b/frontend/src/lib/lemon-ui/LemonBadge/LemonBadgeNumber.stories.tsx index 7592bc632e..c8d42c5957 100644 --- a/frontend/src/lib/lemon-ui/LemonBadge/LemonBadgeNumber.stories.tsx +++ b/frontend/src/lib/lemon-ui/LemonBadge/LemonBadgeNumber.stories.tsx @@ -1,7 +1,8 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' -import { LemonButton } from 'lib/lemon-ui/LemonButton' import { useState } from 'react' +import { LemonButton } from 'lib/lemon-ui/LemonButton' + import { LemonBadge, LemonBadgeNumberProps } from './LemonBadge' type Story = StoryObj diff --git a/frontend/src/lib/lemon-ui/LemonBanner/LemonBanner.tsx b/frontend/src/lib/lemon-ui/LemonBanner/LemonBanner.tsx index 8be3bd5758..508485f3bb 100644 --- a/frontend/src/lib/lemon-ui/LemonBanner/LemonBanner.tsx +++ b/frontend/src/lib/lemon-ui/LemonBanner/LemonBanner.tsx @@ -1,8 +1,10 @@ import './LemonBanner.scss' -import { IconInfo, IconWarning, IconX } from '@posthog/icons' import clsx from 'clsx' import { useActions, useValues } from 'kea' + +import { IconInfo, IconWarning, IconX } from '@posthog/icons' + import { LemonButton, SideAction } from 'lib/lemon-ui/LemonButton' import { LemonButtonPropsBase } from 'lib/lemon-ui/LemonButton' diff --git a/frontend/src/lib/lemon-ui/LemonButton/LemonButton.stories.tsx b/frontend/src/lib/lemon-ui/LemonButton/LemonButton.stories.tsx index 5fce72da96..982a5c1311 100644 --- a/frontend/src/lib/lemon-ui/LemonButton/LemonButton.stories.tsx +++ b/frontend/src/lib/lemon-ui/LemonButton/LemonButton.stories.tsx @@ -1,11 +1,13 @@ -import { IconGear, IconInfo, IconPlus } from '@posthog/icons' -import { Link } from '@posthog/lemon-ui' import { Meta, StoryFn, StoryObj } from '@storybook/react' import clsx from 'clsx' + +import { IconGear, IconInfo, IconPlus } from '@posthog/icons' +import { Link } from '@posthog/lemon-ui' + import { useAsyncHandler } from 'lib/hooks/useAsyncHandler' -import { IconCalculate, IconLink } from 'lib/lemon-ui/icons' import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { LemonDivider } from 'lib/lemon-ui/LemonDivider' +import { IconCalculate, IconLink } from 'lib/lemon-ui/icons' import { capitalizeFirstLetter, delay, range } from 'lib/utils' import { urls } from 'scenes/urls' diff --git a/frontend/src/lib/lemon-ui/LemonButton/LemonButton.tsx b/frontend/src/lib/lemon-ui/LemonButton/LemonButton.tsx index 585ce834e8..5001cb74b5 100644 --- a/frontend/src/lib/lemon-ui/LemonButton/LemonButton.tsx +++ b/frontend/src/lib/lemon-ui/LemonButton/LemonButton.tsx @@ -1,10 +1,12 @@ import './LemonButton.scss' -import { IconChevronDown } from '@posthog/icons' import clsx from 'clsx' -import { IconChevronRight } from 'lib/lemon-ui/icons' import React, { useContext } from 'react' +import { IconChevronDown } from '@posthog/icons' + +import { IconChevronRight } from 'lib/lemon-ui/icons' + import { LemonDropdown, LemonDropdownProps } from '../LemonDropdown' import { Link } from '../Link' import { PopoverOverlayContext, PopoverReferenceContext } from '../Popover' diff --git a/frontend/src/lib/lemon-ui/LemonButton/More.tsx b/frontend/src/lib/lemon-ui/LemonButton/More.tsx index ca63bed21b..eb7c2ef06a 100644 --- a/frontend/src/lib/lemon-ui/LemonButton/More.tsx +++ b/frontend/src/lib/lemon-ui/LemonButton/More.tsx @@ -1,8 +1,9 @@ +import { LemonButtonWithDropdown } from '.' import { forwardRef } from 'react' + import { IconEllipsis } from '@posthog/icons' import { PopoverProps } from '../Popover/Popover' -import { LemonButtonWithDropdown } from '.' import { LemonButtonDropdown, LemonButtonProps } from './LemonButton' export type MoreProps = Partial> & diff --git a/frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendar.stories.tsx b/frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendar.stories.tsx index f177398b29..82f6011bc8 100644 --- a/frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendar.stories.tsx +++ b/frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendar.stories.tsx @@ -1,4 +1,5 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' + import { dayjs } from 'lib/dayjs' import { LemonCalendar, LemonCalendarProps } from './LemonCalendar' diff --git a/frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendar.test.tsx b/frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendar.test.tsx index 73bdf099c9..5d3d37e0c1 100644 --- a/frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendar.test.tsx +++ b/frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendar.test.tsx @@ -1,5 +1,6 @@ import { render, within } from '@testing-library/react' import userEvent from '@testing-library/user-event' + import { dayjs } from 'lib/dayjs' import { range } from 'lib/utils' diff --git a/frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendar.tsx b/frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendar.tsx index 7f36ef853d..111b36bcca 100644 --- a/frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendar.tsx +++ b/frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendar.tsx @@ -2,12 +2,13 @@ import './LemonCalendar.scss' import clsx from 'clsx' import { useValues } from 'kea' +import { Ref, forwardRef, useEffect, useState } from 'react' + import { ScrollableShadows } from 'lib/components/ScrollableShadows/ScrollableShadows' import { dayjs } from 'lib/dayjs' -import { IconChevronLeft, IconChevronRight } from 'lib/lemon-ui/icons' import { LemonButton, LemonButtonProps } from 'lib/lemon-ui/LemonButton' +import { IconChevronLeft, IconChevronRight } from 'lib/lemon-ui/icons' import { range } from 'lib/utils' -import { forwardRef, Ref, useEffect, useState } from 'react' import { teamLogic } from 'scenes/teamLogic' export interface LemonCalendarProps { diff --git a/frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendarSelect.stories.tsx b/frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendarSelect.stories.tsx index 94b5f24b7a..4bc54249bf 100644 --- a/frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendarSelect.stories.tsx +++ b/frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendarSelect.stories.tsx @@ -1,10 +1,11 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' +import { useState } from 'react' + import { dayjs } from 'lib/dayjs' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonCalendarSelect, LemonCalendarSelectProps } from 'lib/lemon-ui/LemonCalendar/LemonCalendarSelect' import { Popover } from 'lib/lemon-ui/Popover/Popover' import { formatDate } from 'lib/utils' -import { useState } from 'react' type Story = StoryObj const meta: Meta = { diff --git a/frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendarSelect.test.tsx b/frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendarSelect.test.tsx index bb48e1006b..18f63b56b3 100644 --- a/frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendarSelect.test.tsx +++ b/frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendarSelect.test.tsx @@ -1,12 +1,13 @@ import { render, within } from '@testing-library/react' import userEvent from '@testing-library/user-event' +import { useState } from 'react' + import { dayjs } from 'lib/dayjs' import { - getTimeElement, LemonCalendarSelect, LemonCalendarSelectProps, + getTimeElement, } from 'lib/lemon-ui/LemonCalendar/LemonCalendarSelect' -import { useState } from 'react' import { getByDataAttr } from '~/test/byDataAttr' diff --git a/frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendarSelect.tsx b/frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendarSelect.tsx index c3ba706fe1..4559bacbcd 100644 --- a/frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendarSelect.tsx +++ b/frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendarSelect.tsx @@ -1,17 +1,19 @@ -import { IconX } from '@posthog/icons' import clsx from 'clsx' +import { useMemo, useRef, useState } from 'react' + +import { IconX } from '@posthog/icons' + import { dayjs } from 'lib/dayjs' +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { LemonButton, LemonButtonProps, LemonButtonWithSideActionProps, SideAction } from 'lib/lemon-ui/LemonButton' import { GetLemonButtonTimePropsOpts, LemonCalendar, LemonCalendarProps, } from 'lib/lemon-ui/LemonCalendar/LemonCalendar' -import { useMemo, useRef, useState } from 'react' import { LemonSwitch } from '../LemonSwitch' import { Popover } from '../Popover' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' function timeDataAttr({ unit, value }: GetLemonButtonTimePropsOpts): string { return `${value}-${unit}` diff --git a/frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendarSelectInput.stories.tsx b/frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendarSelectInput.stories.tsx index 6972cbda37..bad830b00b 100644 --- a/frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendarSelectInput.stories.tsx +++ b/frontend/src/lib/lemon-ui/LemonCalendar/LemonCalendarSelectInput.stories.tsx @@ -1,7 +1,8 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' +import { useState } from 'react' + import { dayjs } from 'lib/dayjs' import { LemonCalendarSelectInput, LemonCalendarSelectInputProps } from 'lib/lemon-ui/LemonCalendar/LemonCalendarSelect' -import { useState } from 'react' type Story = StoryObj const meta: Meta = { diff --git a/frontend/src/lib/lemon-ui/LemonCalendarRange/LemonCalendarRange.stories.tsx b/frontend/src/lib/lemon-ui/LemonCalendarRange/LemonCalendarRange.stories.tsx index ab17b1edff..dd66312836 100644 --- a/frontend/src/lib/lemon-ui/LemonCalendarRange/LemonCalendarRange.stories.tsx +++ b/frontend/src/lib/lemon-ui/LemonCalendarRange/LemonCalendarRange.stories.tsx @@ -1,10 +1,11 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' +import { useState } from 'react' + import { dayjs } from 'lib/dayjs' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonCalendarRange, LemonCalendarRangeProps } from 'lib/lemon-ui/LemonCalendarRange/LemonCalendarRange' import { Popover } from 'lib/lemon-ui/Popover/Popover' import { formatDateRange } from 'lib/utils' -import { useState } from 'react' type Story = StoryObj const meta: Meta = { diff --git a/frontend/src/lib/lemon-ui/LemonCalendarRange/LemonCalendarRange.test.tsx b/frontend/src/lib/lemon-ui/LemonCalendarRange/LemonCalendarRange.test.tsx index 9b451955da..3e884d907b 100644 --- a/frontend/src/lib/lemon-ui/LemonCalendarRange/LemonCalendarRange.test.tsx +++ b/frontend/src/lib/lemon-ui/LemonCalendarRange/LemonCalendarRange.test.tsx @@ -1,8 +1,9 @@ import { render, within } from '@testing-library/react' import userEvent from '@testing-library/user-event' +import { useState } from 'react' + import { dayjs } from 'lib/dayjs' import { LemonCalendarRange } from 'lib/lemon-ui/LemonCalendarRange/LemonCalendarRange' -import { useState } from 'react' import { getByDataAttr } from '~/test/byDataAttr' diff --git a/frontend/src/lib/lemon-ui/LemonCalendarRange/LemonCalendarRange.tsx b/frontend/src/lib/lemon-ui/LemonCalendarRange/LemonCalendarRange.tsx index 399ea3252d..5b35e4a191 100644 --- a/frontend/src/lib/lemon-ui/LemonCalendarRange/LemonCalendarRange.tsx +++ b/frontend/src/lib/lemon-ui/LemonCalendarRange/LemonCalendarRange.tsx @@ -1,8 +1,10 @@ +import { useState } from 'react' + import { IconX } from '@posthog/icons' + import { dayjs } from 'lib/dayjs' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { formatDate, formatDateRange } from 'lib/utils' -import { useState } from 'react' import { LemonCalendarRangeInline } from './LemonCalendarRangeInline' diff --git a/frontend/src/lib/lemon-ui/LemonCalendarRange/LemonCalendarRangeInline.stories.tsx b/frontend/src/lib/lemon-ui/LemonCalendarRange/LemonCalendarRangeInline.stories.tsx index fbdbc8a174..38f292f6de 100644 --- a/frontend/src/lib/lemon-ui/LemonCalendarRange/LemonCalendarRangeInline.stories.tsx +++ b/frontend/src/lib/lemon-ui/LemonCalendarRange/LemonCalendarRangeInline.stories.tsx @@ -1,8 +1,9 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' +import { useState } from 'react' + import { dayjs } from 'lib/dayjs' import { LemonCalendarRangeProps } from 'lib/lemon-ui/LemonCalendarRange/LemonCalendarRange' import { formatDateRange } from 'lib/utils' -import { useState } from 'react' import { LemonCalendarRangeInline } from './LemonCalendarRangeInline' diff --git a/frontend/src/lib/lemon-ui/LemonCalendarRange/LemonCalendarRangeInline.tsx b/frontend/src/lib/lemon-ui/LemonCalendarRange/LemonCalendarRangeInline.tsx index fd567bb65f..d91c083970 100644 --- a/frontend/src/lib/lemon-ui/LemonCalendarRange/LemonCalendarRangeInline.tsx +++ b/frontend/src/lib/lemon-ui/LemonCalendarRange/LemonCalendarRangeInline.tsx @@ -1,7 +1,8 @@ import clsx from 'clsx' +import { useEffect, useState } from 'react' + import { dayjs } from 'lib/dayjs' import { LemonCalendar } from 'lib/lemon-ui/LemonCalendar/LemonCalendar' -import { useEffect, useState } from 'react' import { LemonCalendarRangeProps } from './LemonCalendarRange' diff --git a/frontend/src/lib/lemon-ui/LemonCard/LemonCard.tsx b/frontend/src/lib/lemon-ui/LemonCard/LemonCard.tsx index 3d4210a8b8..55e4f4ca7f 100644 --- a/frontend/src/lib/lemon-ui/LemonCard/LemonCard.tsx +++ b/frontend/src/lib/lemon-ui/LemonCard/LemonCard.tsx @@ -1,6 +1,7 @@ import './LemonCard.scss' import { IconX } from '@posthog/icons' + import { cn } from 'lib/utils/css-classes' import { LemonButton } from '../LemonButton' diff --git a/frontend/src/lib/lemon-ui/LemonCollapse/LemonCollapse.stories.tsx b/frontend/src/lib/lemon-ui/LemonCollapse/LemonCollapse.stories.tsx index 39f768818e..4d0f1c9bbb 100644 --- a/frontend/src/lib/lemon-ui/LemonCollapse/LemonCollapse.stories.tsx +++ b/frontend/src/lib/lemon-ui/LemonCollapse/LemonCollapse.stories.tsx @@ -1,6 +1,7 @@ -import { IconInfo } from '@posthog/icons' import { Meta, StoryFn, StoryObj } from '@storybook/react' +import { IconInfo } from '@posthog/icons' + import { LemonCollapse as LemonCollapseComponent } from './LemonCollapse' type Story = StoryObj diff --git a/frontend/src/lib/lemon-ui/LemonCollapse/LemonCollapse.tsx b/frontend/src/lib/lemon-ui/LemonCollapse/LemonCollapse.tsx index f1a962f616..23888e0f8c 100644 --- a/frontend/src/lib/lemon-ui/LemonCollapse/LemonCollapse.tsx +++ b/frontend/src/lib/lemon-ui/LemonCollapse/LemonCollapse.tsx @@ -1,12 +1,13 @@ import './LemonCollapse.scss' -import { IconCollapse, IconExpand } from '@posthog/icons' import clsx from 'clsx' import React, { ReactNode, useEffect, useState } from 'react' import { Transition } from 'react-transition-group' import { ENTERED, ENTERING } from 'react-transition-group/Transition' import useResizeObserver from 'use-resize-observer' +import { IconCollapse, IconExpand } from '@posthog/icons' + import { LemonButton, LemonButtonProps } from '../LemonButton' export interface LemonCollapsePanel { diff --git a/frontend/src/lib/lemon-ui/LemonColor/LemonColor.stories.mdx b/frontend/src/lib/lemon-ui/LemonColor/LemonColor.stories.mdx index cd7f2fa340..b7b08029ea 100644 --- a/frontend/src/lib/lemon-ui/LemonColor/LemonColor.stories.mdx +++ b/frontend/src/lib/lemon-ui/LemonColor/LemonColor.stories.mdx @@ -1,8 +1,9 @@ import { Meta } from '@storybook/blocks' -import { LemonColorGlyph } from './LemonColorGlyph' -import { LemonColorButton } from './LemonColorButton' -import { LemonColorPicker } from './LemonColorPicker' + import { LemonTable } from '../LemonTable' +import { LemonColorButton } from './LemonColorButton' +import { LemonColorGlyph } from './LemonColorGlyph' +import { LemonColorPicker } from './LemonColorPicker' diff --git a/frontend/src/lib/lemon-ui/LemonColor/LemonColorButton.tsx b/frontend/src/lib/lemon-ui/LemonColor/LemonColorButton.tsx index fa71ed8e2b..534d2a1695 100644 --- a/frontend/src/lib/lemon-ui/LemonColor/LemonColorButton.tsx +++ b/frontend/src/lib/lemon-ui/LemonColor/LemonColorButton.tsx @@ -1,6 +1,7 @@ import './LemonColorButton.scss' import { useValues } from 'kea' + import { DataColorToken } from 'lib/colors' import { cn } from 'lib/utils/css-classes' import { dataThemeLogic } from 'scenes/dataThemeLogic' diff --git a/frontend/src/lib/lemon-ui/LemonColor/LemonColorGlyph.tsx b/frontend/src/lib/lemon-ui/LemonColor/LemonColorGlyph.tsx index 25fed9e852..4fc2bd0ab2 100644 --- a/frontend/src/lib/lemon-ui/LemonColor/LemonColorGlyph.tsx +++ b/frontend/src/lib/lemon-ui/LemonColor/LemonColorGlyph.tsx @@ -1,8 +1,9 @@ import './LemonColorGlyph.scss' import { useValues } from 'kea' + import { DataColorToken } from 'lib/colors' -import { hexToRGBA, lightenDarkenColor, RGBToRGBA } from 'lib/utils' +import { RGBToRGBA, hexToRGBA, lightenDarkenColor } from 'lib/utils' import { cn } from 'lib/utils/css-classes' import { dataThemeLogic } from 'scenes/dataThemeLogic' diff --git a/frontend/src/lib/lemon-ui/LemonColor/LemonColorList.stories.tsx b/frontend/src/lib/lemon-ui/LemonColor/LemonColorList.stories.tsx index a573a1ee96..bdfe092de1 100644 --- a/frontend/src/lib/lemon-ui/LemonColor/LemonColorList.stories.tsx +++ b/frontend/src/lib/lemon-ui/LemonColor/LemonColorList.stories.tsx @@ -1,4 +1,5 @@ import { Meta, StoryObj } from '@storybook/react' + import { DataColorToken } from 'lib/colors' import { LemonColorList } from './LemonColorList' diff --git a/frontend/src/lib/lemon-ui/LemonColor/LemonColorPicker.stories.tsx b/frontend/src/lib/lemon-ui/LemonColor/LemonColorPicker.stories.tsx index 39630c9279..583f7844e5 100644 --- a/frontend/src/lib/lemon-ui/LemonColor/LemonColorPicker.stories.tsx +++ b/frontend/src/lib/lemon-ui/LemonColor/LemonColorPicker.stories.tsx @@ -1,7 +1,8 @@ import { Meta, StoryObj } from '@storybook/react' -import { DataColorToken } from 'lib/colors' import { useState } from 'react' +import { DataColorToken } from 'lib/colors' + import { LemonButton } from '../LemonButton' import { LemonColorPicker } from './LemonColorPicker' diff --git a/frontend/src/lib/lemon-ui/LemonColor/LemonColorPicker.tsx b/frontend/src/lib/lemon-ui/LemonColor/LemonColorPicker.tsx index 48a21876e9..d2af350ce5 100644 --- a/frontend/src/lib/lemon-ui/LemonColor/LemonColorPicker.tsx +++ b/frontend/src/lib/lemon-ui/LemonColor/LemonColorPicker.tsx @@ -1,7 +1,9 @@ -import { LemonColorGlyph, LemonInput, LemonLabel, Popover } from '@posthog/lemon-ui' import { useValues } from 'kea' +import { cloneElement, useEffect, useState } from 'react' + +import { LemonColorGlyph, LemonInput, LemonLabel, Popover } from '@posthog/lemon-ui' + import { DataColorToken } from 'lib/colors' -import { cloneElement, useState, useEffect } from 'react' import { dataThemeLogic } from 'scenes/dataThemeLogic' import { LemonColorButton } from './LemonColorButton' diff --git a/frontend/src/lib/lemon-ui/LemonDialog/LemonDialog.stories.tsx b/frontend/src/lib/lemon-ui/LemonDialog/LemonDialog.stories.tsx index 6f1023f6d2..fc01a25155 100644 --- a/frontend/src/lib/lemon-ui/LemonDialog/LemonDialog.stories.tsx +++ b/frontend/src/lib/lemon-ui/LemonDialog/LemonDialog.stories.tsx @@ -1,5 +1,7 @@ -import { LemonInput, Link } from '@posthog/lemon-ui' import { Meta, StoryFn, StoryObj } from '@storybook/react' + +import { LemonInput, Link } from '@posthog/lemon-ui' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonField } from '../LemonField' diff --git a/frontend/src/lib/lemon-ui/LemonDialog/LemonDialog.tsx b/frontend/src/lib/lemon-ui/LemonDialog/LemonDialog.tsx index df54af5de3..9802b5b7b8 100644 --- a/frontend/src/lib/lemon-ui/LemonDialog/LemonDialog.tsx +++ b/frontend/src/lib/lemon-ui/LemonDialog/LemonDialog.tsx @@ -1,10 +1,11 @@ import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' import { router } from 'kea-router' +import { ReactNode, useEffect, useMemo, useRef, useState } from 'react' +import { Root, createRoot } from 'react-dom/client' + import { LemonButton, LemonButtonProps } from 'lib/lemon-ui/LemonButton' import { LemonModal, LemonModalProps } from 'lib/lemon-ui/LemonModal' -import { ReactNode, useEffect, useMemo, useRef, useState } from 'react' -import { createRoot, Root } from 'react-dom/client' import { LemonDialogFormPropsType, lemonDialogLogic } from './lemonDialogLogic' diff --git a/frontend/src/lib/lemon-ui/LemonDivider/LemonDivider.stories.tsx b/frontend/src/lib/lemon-ui/LemonDivider/LemonDivider.stories.tsx index 54bb7be44d..0c4607232a 100644 --- a/frontend/src/lib/lemon-ui/LemonDivider/LemonDivider.stories.tsx +++ b/frontend/src/lib/lemon-ui/LemonDivider/LemonDivider.stories.tsx @@ -1,4 +1,5 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonRow } from 'lib/lemon-ui/LemonRow' diff --git a/frontend/src/lib/lemon-ui/LemonField/LemonField.stories.tsx b/frontend/src/lib/lemon-ui/LemonField/LemonField.stories.tsx index 086c64b5c2..84420d3bd9 100644 --- a/frontend/src/lib/lemon-ui/LemonField/LemonField.stories.tsx +++ b/frontend/src/lib/lemon-ui/LemonField/LemonField.stories.tsx @@ -1,8 +1,9 @@ -import { LemonButton, LemonCheckbox, LemonInput, LemonSelect, LemonTextArea } from '@posthog/lemon-ui' import { Meta } from '@storybook/react' import { kea, path, useAllValues } from 'kea' import { Form, forms } from 'kea-forms' +import { LemonButton, LemonCheckbox, LemonInput, LemonSelect, LemonTextArea } from '@posthog/lemon-ui' + import { LemonField } from './LemonField' import type { formLogicType } from './LemonField.storiesType' diff --git a/frontend/src/lib/lemon-ui/LemonField/LemonField.tsx b/frontend/src/lib/lemon-ui/LemonField/LemonField.tsx index be7439157d..1e9bc0ebb8 100644 --- a/frontend/src/lib/lemon-ui/LemonField/LemonField.tsx +++ b/frontend/src/lib/lemon-ui/LemonField/LemonField.tsx @@ -1,7 +1,8 @@ import clsx from 'clsx' import { Field as KeaField, FieldProps as KeaFieldProps } from 'kea-forms/lib/components' -import { IconErrorOutline } from 'lib/lemon-ui/icons' + import { LemonLabel } from 'lib/lemon-ui/LemonLabel/LemonLabel' +import { IconErrorOutline } from 'lib/lemon-ui/icons' export type LemonPureFieldProps = { /** The label name to be displayed */ diff --git a/frontend/src/lib/lemon-ui/LemonFileInput/LemonFileInput.stories.tsx b/frontend/src/lib/lemon-ui/LemonFileInput/LemonFileInput.stories.tsx index c290cb5de4..f4e9210920 100644 --- a/frontend/src/lib/lemon-ui/LemonFileInput/LemonFileInput.stories.tsx +++ b/frontend/src/lib/lemon-ui/LemonFileInput/LemonFileInput.stories.tsx @@ -1,7 +1,8 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' -import { LemonFileInput } from 'lib/lemon-ui/LemonFileInput/LemonFileInput' import { createRef, useState } from 'react' +import { LemonFileInput } from 'lib/lemon-ui/LemonFileInput/LemonFileInput' + type Story = StoryObj const meta: Meta = { title: 'Lemon UI/Lemon File Input', diff --git a/frontend/src/lib/lemon-ui/LemonFileInput/LemonFileInput.tsx b/frontend/src/lib/lemon-ui/LemonFileInput/LemonFileInput.tsx index 32fb3b30d3..ac80a9e27b 100644 --- a/frontend/src/lib/lemon-ui/LemonFileInput/LemonFileInput.tsx +++ b/frontend/src/lib/lemon-ui/LemonFileInput/LemonFileInput.tsx @@ -1,11 +1,12 @@ import './LemonFileInput.scss' import clsx from 'clsx' -import { IconUploadFile } from 'lib/lemon-ui/icons' +import { ChangeEvent, RefObject, createRef, useEffect, useState } from 'react' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonTag } from 'lib/lemon-ui/LemonTag/LemonTag' import { Spinner } from 'lib/lemon-ui/Spinner/Spinner' -import { ChangeEvent, createRef, RefObject, useEffect, useState } from 'react' +import { IconUploadFile } from 'lib/lemon-ui/icons' export interface LemonFileInputProps extends Pick { value?: File[] diff --git a/frontend/src/lib/lemon-ui/LemonInput/LemonInput.tsx b/frontend/src/lib/lemon-ui/LemonInput/LemonInput.tsx index 9b0e3347d1..840407bf15 100644 --- a/frontend/src/lib/lemon-ui/LemonInput/LemonInput.tsx +++ b/frontend/src/lib/lemon-ui/LemonInput/LemonInput.tsx @@ -1,12 +1,14 @@ import './LemonInput.scss' import { useMergeRefs } from '@floating-ui/react' +import clsx from 'clsx' +import React, { useRef, useState } from 'react' + import { IconEye, IconSearch, IconX } from '@posthog/icons' import { Tooltip } from '@posthog/lemon-ui' -import clsx from 'clsx' -import { IconEyeHidden } from 'lib/lemon-ui/icons' + import { LemonButton } from 'lib/lemon-ui/LemonButton' -import React, { useRef, useState } from 'react' +import { IconEyeHidden } from 'lib/lemon-ui/icons' import { RawInputAutosize } from './RawInputAutosize' diff --git a/frontend/src/lib/lemon-ui/LemonInputSelect/LemonInputSelect.stories.tsx b/frontend/src/lib/lemon-ui/LemonInputSelect/LemonInputSelect.stories.tsx index 841db944f8..0fedf3d99e 100644 --- a/frontend/src/lib/lemon-ui/LemonInputSelect/LemonInputSelect.stories.tsx +++ b/frontend/src/lib/lemon-ui/LemonInputSelect/LemonInputSelect.stories.tsx @@ -1,7 +1,8 @@ import { Meta, StoryObj } from '@storybook/react' -import { capitalizeFirstLetter } from 'lib/utils' import { useState } from 'react' +import { capitalizeFirstLetter } from 'lib/utils' + import { ProfilePicture } from '../ProfilePicture' import { LemonInputSelect } from './LemonInputSelect' diff --git a/frontend/src/lib/lemon-ui/LemonInputSelect/LemonInputSelect.test.tsx b/frontend/src/lib/lemon-ui/LemonInputSelect/LemonInputSelect.test.tsx index 05e0746791..a208c2e4d5 100644 --- a/frontend/src/lib/lemon-ui/LemonInputSelect/LemonInputSelect.test.tsx +++ b/frontend/src/lib/lemon-ui/LemonInputSelect/LemonInputSelect.test.tsx @@ -1,5 +1,6 @@ -import { render, screen } from '@testing-library/react' import '@testing-library/jest-dom' +import { render, screen } from '@testing-library/react' + import { LemonInputSelect } from './LemonInputSelect' describe('LemonInputSelect', () => { diff --git a/frontend/src/lib/lemon-ui/LemonInputSelect/LemonInputSelect.tsx b/frontend/src/lib/lemon-ui/LemonInputSelect/LemonInputSelect.tsx index 6037e52a48..6b652bec26 100644 --- a/frontend/src/lib/lemon-ui/LemonInputSelect/LemonInputSelect.tsx +++ b/frontend/src/lib/lemon-ui/LemonInputSelect/LemonInputSelect.tsx @@ -1,11 +1,15 @@ -import { IconPencil } from '@posthog/icons' -import { LemonCheckbox, Tooltip } from '@posthog/lemon-ui' import clsx from 'clsx' import Fuse from 'fuse.js' +import { MouseEvent, useCallback, useEffect, useMemo, useRef, useState } from 'react' +import { AutoSizer } from 'react-virtualized/dist/es/AutoSizer' +import { List } from 'react-virtualized/dist/es/List' + +import { IconPencil } from '@posthog/icons' +import { LemonCheckbox, Tooltip } from '@posthog/lemon-ui' + import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' import { LemonSnack } from 'lib/lemon-ui/LemonSnack/LemonSnack' import { range } from 'lib/utils' -import { MouseEvent, useCallback, useEffect, useMemo, useRef, useState } from 'react' import { KeyboardShortcut } from '~/layout/navigation-3000/components/KeyboardShortcut' @@ -14,8 +18,6 @@ import { LemonDropdown } from '../LemonDropdown' import { LemonInput, LemonInputProps } from '../LemonInput' import { PopoverReferenceContext } from '../Popover' import { TooltipTitle } from '../Tooltip/Tooltip' -import { AutoSizer } from 'react-virtualized/dist/es/AutoSizer' -import { List } from 'react-virtualized/dist/es/List' const NON_ESCAPED_COMMA_REGEX = /(? diff --git a/frontend/src/lib/lemon-ui/LemonLabel/LemonLabel.tsx b/frontend/src/lib/lemon-ui/LemonLabel/LemonLabel.tsx index 596d576ea0..e7c3849efc 100644 --- a/frontend/src/lib/lemon-ui/LemonLabel/LemonLabel.tsx +++ b/frontend/src/lib/lemon-ui/LemonLabel/LemonLabel.tsx @@ -1,8 +1,9 @@ import './LemonLabel.scss' -import { IconInfo } from '@posthog/icons' import clsx from 'clsx' +import { IconInfo } from '@posthog/icons' + import { Link, LinkProps } from '../Link' import { Tooltip } from '../Tooltip' diff --git a/frontend/src/lib/lemon-ui/LemonMarkdown/LemonMarkdown.tsx b/frontend/src/lib/lemon-ui/LemonMarkdown/LemonMarkdown.tsx index 486ade4bd9..143b5b6e31 100644 --- a/frontend/src/lib/lemon-ui/LemonMarkdown/LemonMarkdown.tsx +++ b/frontend/src/lib/lemon-ui/LemonMarkdown/LemonMarkdown.tsx @@ -1,10 +1,11 @@ import './LemonMarkdown.scss' import clsx from 'clsx' -import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import React, { memo, useMemo } from 'react' import ReactMarkdown from 'react-markdown' +import { CodeSnippet, Language } from 'lib/components/CodeSnippet' + import { Link } from '../Link' interface LemonMarkdownContainerProps { diff --git a/frontend/src/lib/lemon-ui/LemonModal/LemonModal.stories.tsx b/frontend/src/lib/lemon-ui/LemonModal/LemonModal.stories.tsx index 3f5f274c22..a5fcbeb597 100644 --- a/frontend/src/lib/lemon-ui/LemonModal/LemonModal.stories.tsx +++ b/frontend/src/lib/lemon-ui/LemonModal/LemonModal.stories.tsx @@ -1,7 +1,8 @@ import { Meta, StoryFn } from '@storybook/react' -import { LemonButton } from 'lib/lemon-ui/LemonButton' import { useState } from 'react' +import { LemonButton } from 'lib/lemon-ui/LemonButton' + import { LemonModal, LemonModalProps } from './LemonModal' const meta: Meta = { diff --git a/frontend/src/lib/lemon-ui/LemonModal/LemonModal.tsx b/frontend/src/lib/lemon-ui/LemonModal/LemonModal.tsx index 10aa9503f6..1069d100bf 100644 --- a/frontend/src/lib/lemon-ui/LemonModal/LemonModal.tsx +++ b/frontend/src/lib/lemon-ui/LemonModal/LemonModal.tsx @@ -1,12 +1,14 @@ import './LemonModal.scss' -import { IconX } from '@posthog/icons' import clsx from 'clsx' -import { useFloatingContainer } from 'lib/hooks/useFloatingContainerContext' -import { LemonButton } from 'lib/lemon-ui/LemonButton' import { useEffect, useRef, useState } from 'react' import Modal from 'react-modal' +import { IconX } from '@posthog/icons' + +import { useFloatingContainer } from 'lib/hooks/useFloatingContainerContext' +import { LemonButton } from 'lib/lemon-ui/LemonButton' + import { KeyboardShortcut } from '~/layout/navigation-3000/components/KeyboardShortcut' import { Tooltip } from '../Tooltip' diff --git a/frontend/src/lib/lemon-ui/LemonProgressCircle/LemonProgressCircle.stories.tsx b/frontend/src/lib/lemon-ui/LemonProgressCircle/LemonProgressCircle.stories.tsx index 975b3839c1..4f1ebe9a60 100644 --- a/frontend/src/lib/lemon-ui/LemonProgressCircle/LemonProgressCircle.stories.tsx +++ b/frontend/src/lib/lemon-ui/LemonProgressCircle/LemonProgressCircle.stories.tsx @@ -1,7 +1,8 @@ -import { IconGear } from '@posthog/icons' import { Meta, StoryFn, StoryObj } from '@storybook/react' import { useEffect, useState } from 'react' +import { IconGear } from '@posthog/icons' + import { LemonButton } from '../LemonButton' import { LemonCheckbox } from '../LemonCheckbox' import { LemonProgressCircle, LemonProgressCircleProps } from './LemonProgressCircle' diff --git a/frontend/src/lib/lemon-ui/LemonRadio/LemonRadio.tsx b/frontend/src/lib/lemon-ui/LemonRadio/LemonRadio.tsx index ad09265c3a..f46c4b8ee5 100644 --- a/frontend/src/lib/lemon-ui/LemonRadio/LemonRadio.tsx +++ b/frontend/src/lib/lemon-ui/LemonRadio/LemonRadio.tsx @@ -1,4 +1,5 @@ import clsx from 'clsx' + import { Tooltip } from 'lib/lemon-ui/Tooltip' export interface LemonRadioOption { diff --git a/frontend/src/lib/lemon-ui/LemonRow/LemonRow.stories.tsx b/frontend/src/lib/lemon-ui/LemonRow/LemonRow.stories.tsx index 17a35e9524..873167ce01 100644 --- a/frontend/src/lib/lemon-ui/LemonRow/LemonRow.stories.tsx +++ b/frontend/src/lib/lemon-ui/LemonRow/LemonRow.stories.tsx @@ -1,5 +1,7 @@ -import { IconInfo } from '@posthog/icons' import { Meta, StoryFn, StoryObj } from '@storybook/react' + +import { IconInfo } from '@posthog/icons' + import { IconPremium } from 'lib/lemon-ui/icons' import { LemonRow, LemonRowProps } from './LemonRow' diff --git a/frontend/src/lib/lemon-ui/LemonSegmentedButton/LemonSegmentedButton.stories.tsx b/frontend/src/lib/lemon-ui/LemonSegmentedButton/LemonSegmentedButton.stories.tsx index 40c6eafef8..585aa47bb9 100644 --- a/frontend/src/lib/lemon-ui/LemonSegmentedButton/LemonSegmentedButton.stories.tsx +++ b/frontend/src/lib/lemon-ui/LemonSegmentedButton/LemonSegmentedButton.stories.tsx @@ -1,7 +1,8 @@ -import { IconBook, IconCalculator, IconCalendar, IconGear } from '@posthog/icons' import { Meta, StoryFn, StoryObj } from '@storybook/react' import { useState } from 'react' +import { IconBook, IconCalculator, IconCalendar, IconGear } from '@posthog/icons' + import { LemonSegmentedButton, LemonSegmentedButtonOption, LemonSegmentedButtonProps } from './LemonSegmentedButton' type Story = StoryObj diff --git a/frontend/src/lib/lemon-ui/LemonSegmentedButton/LemonSegmentedButton.tsx b/frontend/src/lib/lemon-ui/LemonSegmentedButton/LemonSegmentedButton.tsx index b2e56decbc..036c8848ca 100644 --- a/frontend/src/lib/lemon-ui/LemonSegmentedButton/LemonSegmentedButton.tsx +++ b/frontend/src/lib/lemon-ui/LemonSegmentedButton/LemonSegmentedButton.tsx @@ -3,8 +3,8 @@ import './LemonSegmentedButton.scss' import clsx from 'clsx' import React from 'react' -import { useSliderPositioning } from '../hooks' import { LemonButton, LemonButtonProps } from '../LemonButton' +import { useSliderPositioning } from '../hooks' // Expects at least one of label or icon to be provided export type LemonSegmentedButtonOption = { value: T } & ( diff --git a/frontend/src/lib/lemon-ui/LemonSegmentedSelect/LemonSegmentedSelect.stories.tsx b/frontend/src/lib/lemon-ui/LemonSegmentedSelect/LemonSegmentedSelect.stories.tsx index cbdd1c0ac4..e25a4d2477 100644 --- a/frontend/src/lib/lemon-ui/LemonSegmentedSelect/LemonSegmentedSelect.stories.tsx +++ b/frontend/src/lib/lemon-ui/LemonSegmentedSelect/LemonSegmentedSelect.stories.tsx @@ -1,6 +1,7 @@ -import { IconBook, IconCalculator, IconCalendar, IconGear } from '@posthog/icons' import { Meta, StoryFn, StoryObj } from '@storybook/react' +import { IconBook, IconCalculator, IconCalendar, IconGear } from '@posthog/icons' + import { LemonSegmentedSelect, LemonSegmentedSelectProps } from './LemonSegmentedSelect' type Story = StoryObj diff --git a/frontend/src/lib/lemon-ui/LemonSegmentedSelect/LemonSegmentedSelect.tsx b/frontend/src/lib/lemon-ui/LemonSegmentedSelect/LemonSegmentedSelect.tsx index 8e94e0ffb7..db99ec1f7f 100644 --- a/frontend/src/lib/lemon-ui/LemonSegmentedSelect/LemonSegmentedSelect.tsx +++ b/frontend/src/lib/lemon-ui/LemonSegmentedSelect/LemonSegmentedSelect.tsx @@ -1,6 +1,7 @@ -import { useWindowSize } from 'lib/hooks/useWindowSize' import React from 'react' +import { useWindowSize } from 'lib/hooks/useWindowSize' + import { LemonSegmentedButton, LemonSegmentedButtonProps } from '../LemonSegmentedButton' import { LemonSelect, LemonSelectProps } from '../LemonSelect' diff --git a/frontend/src/lib/lemon-ui/LemonSelect/LemonSelect.stories.tsx b/frontend/src/lib/lemon-ui/LemonSelect/LemonSelect.stories.tsx index ec2127dd9a..f1fc3f07cb 100644 --- a/frontend/src/lib/lemon-ui/LemonSelect/LemonSelect.stories.tsx +++ b/frontend/src/lib/lemon-ui/LemonSelect/LemonSelect.stories.tsx @@ -1,4 +1,5 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' + import { capitalizeFirstLetter } from 'lib/utils' import { LemonSelect, LemonSelectOptions, LemonSelectProps } from './LemonSelect' diff --git a/frontend/src/lib/lemon-ui/LemonSelect/LemonSelect.tsx b/frontend/src/lib/lemon-ui/LemonSelect/LemonSelect.tsx index 662d30b79b..8e214ac366 100644 --- a/frontend/src/lib/lemon-ui/LemonSelect/LemonSelect.tsx +++ b/frontend/src/lib/lemon-ui/LemonSelect/LemonSelect.tsx @@ -1,10 +1,10 @@ -import { IconX } from '@posthog/icons' import clsx from 'clsx' import React, { useMemo } from 'react' +import { IconX } from '@posthog/icons' + import { LemonButton, LemonButtonProps } from '../LemonButton' import { - isLemonMenuSection, LemonMenu, LemonMenuItem, LemonMenuItemBase, @@ -12,6 +12,7 @@ import { LemonMenuItemNode, LemonMenuProps, LemonMenuSection, + isLemonMenuSection, } from '../LemonMenu/LemonMenu' import { PopoverProps } from '../Popover' import { TooltipProps } from '../Tooltip' diff --git a/frontend/src/lib/lemon-ui/LemonSkeleton/LemonSkeleton.stories.tsx b/frontend/src/lib/lemon-ui/LemonSkeleton/LemonSkeleton.stories.tsx index 450432ff00..a8090de525 100644 --- a/frontend/src/lib/lemon-ui/LemonSkeleton/LemonSkeleton.stories.tsx +++ b/frontend/src/lib/lemon-ui/LemonSkeleton/LemonSkeleton.stories.tsx @@ -1,4 +1,5 @@ import { Meta } from '@storybook/react' + import { LemonLabel } from 'lib/lemon-ui/LemonLabel/LemonLabel' import { LemonModal } from 'lib/lemon-ui/LemonModal' diff --git a/frontend/src/lib/lemon-ui/LemonSlider/LemonSlider.tsx b/frontend/src/lib/lemon-ui/LemonSlider/LemonSlider.tsx index e607c95caf..0cf9bb8fdf 100644 --- a/frontend/src/lib/lemon-ui/LemonSlider/LemonSlider.tsx +++ b/frontend/src/lib/lemon-ui/LemonSlider/LemonSlider.tsx @@ -1,7 +1,8 @@ import clsx from 'clsx' -import { useEventListener } from 'lib/hooks/useEventListener' import { useRef, useState } from 'react' +import { useEventListener } from 'lib/hooks/useEventListener' + export interface LemonSliderProps { value?: number onChange?: (value: number) => void diff --git a/frontend/src/lib/lemon-ui/LemonSnack/LemonSnack.tsx b/frontend/src/lib/lemon-ui/LemonSnack/LemonSnack.tsx index 304444405e..98aa856427 100644 --- a/frontend/src/lib/lemon-ui/LemonSnack/LemonSnack.tsx +++ b/frontend/src/lib/lemon-ui/LemonSnack/LemonSnack.tsx @@ -1,9 +1,10 @@ -import { IconX } from '@posthog/icons' -import { LemonButton } from '@posthog/lemon-ui' import clsx from 'clsx' import React, { forwardRef } from 'react' import { twMerge } from 'tailwind-merge' +import { IconX } from '@posthog/icons' +import { LemonButton } from '@posthog/lemon-ui' + export interface LemonSnackProps { type?: 'regular' | 'pill' children?: React.ReactNode diff --git a/frontend/src/lib/lemon-ui/LemonSwitch/LemonSwitch.stories.tsx b/frontend/src/lib/lemon-ui/LemonSwitch/LemonSwitch.stories.tsx index e6992a362f..ad243cb1d8 100644 --- a/frontend/src/lib/lemon-ui/LemonSwitch/LemonSwitch.stories.tsx +++ b/frontend/src/lib/lemon-ui/LemonSwitch/LemonSwitch.stories.tsx @@ -1,7 +1,7 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' import { useState } from 'react' -import { LemonSwitch as RawLemonSwitch, LemonSwitchProps } from './LemonSwitch' +import { LemonSwitchProps, LemonSwitch as RawLemonSwitch } from './LemonSwitch' const LemonSwitch = ({ checked, ...props }: Partial): JSX.Element => { const [isChecked, setIsChecked] = useState(checked || false) diff --git a/frontend/src/lib/lemon-ui/LemonSwitch/LemonSwitch.tsx b/frontend/src/lib/lemon-ui/LemonSwitch/LemonSwitch.tsx index 50cedf075e..6d6e1c2b58 100644 --- a/frontend/src/lib/lemon-ui/LemonSwitch/LemonSwitch.tsx +++ b/frontend/src/lib/lemon-ui/LemonSwitch/LemonSwitch.tsx @@ -1,9 +1,10 @@ import './LemonSwitch.scss' import clsx from 'clsx' +import { forwardRef, useMemo, useState } from 'react' + import { Spinner } from 'lib/lemon-ui/Spinner' import { Tooltip } from 'lib/lemon-ui/Tooltip' -import { forwardRef, useMemo, useState } from 'react' import { cn } from 'lib/utils/css-classes' export interface LemonSwitchProps { diff --git a/frontend/src/lib/lemon-ui/LemonTable/LemonTable.stories.tsx b/frontend/src/lib/lemon-ui/LemonTable/LemonTable.stories.tsx index e4a5d3cf1c..de3ec2ced1 100644 --- a/frontend/src/lib/lemon-ui/LemonTable/LemonTable.stories.tsx +++ b/frontend/src/lib/lemon-ui/LemonTable/LemonTable.stories.tsx @@ -1,9 +1,10 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' +import { useDelayedOnMountEffect } from 'lib/hooks/useOnMountEffect' + import { LemonButton } from '../LemonButton' import { LemonTable, LemonTableProps } from './LemonTable' import { LemonTableLink } from './LemonTableLink' -import { useDelayedOnMountEffect } from 'lib/hooks/useOnMountEffect' type Story = StoryObj const meta: Meta = { diff --git a/frontend/src/lib/lemon-ui/LemonTable/LemonTable.tsx b/frontend/src/lib/lemon-ui/LemonTable/LemonTable.tsx index 92fc731624..acccb3b518 100644 --- a/frontend/src/lib/lemon-ui/LemonTable/LemonTable.tsx +++ b/frontend/src/lib/lemon-ui/LemonTable/LemonTable.tsx @@ -1,22 +1,24 @@ import './LemonTable.scss' -import { IconInfo } from '@posthog/icons' import clsx from 'clsx' import { useActions, useValues } from 'kea' import { router } from 'kea-router' +import React, { HTMLProps, useCallback, useEffect, useMemo, useRef, useState } from 'react' + +import { IconInfo } from '@posthog/icons' + import { ScrollableShadows } from 'lib/components/ScrollableShadows/ScrollableShadows' import { More } from 'lib/lemon-ui/LemonButton/More' import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' -import React, { HTMLProps, useCallback, useEffect, useMemo, useRef, useState } from 'react' +import { useColumnWidths } from '../../hooks/useColumnWidths' import { PaginationAuto, PaginationControl, PaginationManual, usePagination } from '../PaginationControl' import { Tooltip } from '../Tooltip' import { LemonTableLoader } from './LemonTableLoader' -import { getNextSorting, Sorting, SortingIndicator } from './sorting' import { TableRow } from './TableRow' -import { ExpandableConfig, LemonTableColumnGroup, LemonTableColumns } from './types' import { determineColumnKey, getStickyColumnInfo } from './columnUtils' -import { useColumnWidths } from '../../hooks/useColumnWidths' +import { Sorting, SortingIndicator, getNextSorting } from './sorting' +import { ExpandableConfig, LemonTableColumnGroup, LemonTableColumns } from './types' export interface LemonTableProps> { /** Table ID that will also be used in pagination to add uniqueness to search params (page + order). */ diff --git a/frontend/src/lib/lemon-ui/LemonTable/LemonTableLink.tsx b/frontend/src/lib/lemon-ui/LemonTable/LemonTableLink.tsx index 0b273a2f79..97786d852b 100644 --- a/frontend/src/lib/lemon-ui/LemonTable/LemonTableLink.tsx +++ b/frontend/src/lib/lemon-ui/LemonTable/LemonTableLink.tsx @@ -1,6 +1,7 @@ +import { ReactNode } from 'react' + import { LemonMarkdown } from '../LemonMarkdown' import { Link, LinkProps } from '../Link' -import { ReactNode } from 'react' export function LemonTableLink({ title, diff --git a/frontend/src/lib/lemon-ui/LemonTable/TableRow.tsx b/frontend/src/lib/lemon-ui/LemonTable/TableRow.tsx index 41fb88c3ee..53321477cc 100644 --- a/frontend/src/lib/lemon-ui/LemonTable/TableRow.tsx +++ b/frontend/src/lib/lemon-ui/LemonTable/TableRow.tsx @@ -1,10 +1,12 @@ -import { IconCollapse, IconExpand } from '@posthog/icons' import clsx from 'clsx' -import { LemonButton } from 'lib/lemon-ui/LemonButton' import React, { HTMLProps, useState } from 'react' -import { ExpandableConfig, LemonTableColumnGroup, TableCellRepresentation, LemonTableColumn } from './types' +import { IconCollapse, IconExpand } from '@posthog/icons' + +import { LemonButton } from 'lib/lemon-ui/LemonButton' + import { getStickyColumnInfo } from './columnUtils' +import { ExpandableConfig, LemonTableColumn, LemonTableColumnGroup, TableCellRepresentation } from './types' export interface TableRowProps> { record: T diff --git a/frontend/src/lib/lemon-ui/LemonTable/columnUtils.test.tsx b/frontend/src/lib/lemon-ui/LemonTable/columnUtils.test.tsx index c89f545fa8..90157787cc 100644 --- a/frontend/src/lib/lemon-ui/LemonTable/columnUtils.test.tsx +++ b/frontend/src/lib/lemon-ui/LemonTable/columnUtils.test.tsx @@ -1,4 +1,4 @@ -import { getStickyColumnInfo, DEFAULT_COLUMN_WIDTH } from './columnUtils' +import { DEFAULT_COLUMN_WIDTH, getStickyColumnInfo } from './columnUtils' import { LemonTableColumn } from './types' describe('getStickyColumnInfo', () => { diff --git a/frontend/src/lib/lemon-ui/LemonTable/sorting.tsx b/frontend/src/lib/lemon-ui/LemonTable/sorting.tsx index b4f277d940..2972040b20 100644 --- a/frontend/src/lib/lemon-ui/LemonTable/sorting.tsx +++ b/frontend/src/lib/lemon-ui/LemonTable/sorting.tsx @@ -1,6 +1,7 @@ -import { IconArrowDown, IconArrowUp, IconSort } from 'lib/lemon-ui/icons' import { forwardRef } from 'react' +import { IconArrowDown, IconArrowUp, IconSort } from 'lib/lemon-ui/icons' + /** Sorting state. */ export interface Sorting { columnKey: string diff --git a/frontend/src/lib/lemon-ui/LemonTabs/LemonTabs.tsx b/frontend/src/lib/lemon-ui/LemonTabs/LemonTabs.tsx index 183ea3ac2c..6bad6ad397 100644 --- a/frontend/src/lib/lemon-ui/LemonTabs/LemonTabs.tsx +++ b/frontend/src/lib/lemon-ui/LemonTabs/LemonTabs.tsx @@ -1,11 +1,12 @@ import './LemonTabs.scss' import { IconInfo } from '@posthog/icons' + import { cn } from 'lib/utils/css-classes' -import { useSliderPositioning } from '../hooks' import { Link } from '../Link' import { Tooltip } from '../Tooltip' +import { useSliderPositioning } from '../hooks' /** A tab that represents one of the options, but doesn't have any content. Render tab-dependent UI yourself. */ export interface AbstractLemonTab { diff --git a/frontend/src/lib/lemon-ui/LemonTag/LemonTag.stories.tsx b/frontend/src/lib/lemon-ui/LemonTag/LemonTag.stories.tsx index 5d73b53f4b..38ffcf2a20 100644 --- a/frontend/src/lib/lemon-ui/LemonTag/LemonTag.stories.tsx +++ b/frontend/src/lib/lemon-ui/LemonTag/LemonTag.stories.tsx @@ -1,6 +1,7 @@ -import { IconFlag, IconInfo } from '@posthog/icons' import { Meta, StoryObj } from '@storybook/react' +import { IconFlag, IconInfo } from '@posthog/icons' + import { LemonTag as LemonTagComponent, LemonTagType } from './LemonTag' const meta: Meta = { diff --git a/frontend/src/lib/lemon-ui/LemonTag/LemonTag.tsx b/frontend/src/lib/lemon-ui/LemonTag/LemonTag.tsx index 9da6c9dec1..e1d7eb8bb7 100644 --- a/frontend/src/lib/lemon-ui/LemonTag/LemonTag.tsx +++ b/frontend/src/lib/lemon-ui/LemonTag/LemonTag.tsx @@ -1,10 +1,12 @@ import './LemonTag.scss' -import { IconEllipsis, IconX } from '@posthog/icons' import clsx from 'clsx' +import { HTMLProps, forwardRef } from 'react' + +import { IconEllipsis, IconX } from '@posthog/icons' + import { LemonButton, LemonButtonWithDropdown } from 'lib/lemon-ui/LemonButton' import { LemonButtonDropdown } from 'lib/lemon-ui/LemonButton' -import { forwardRef, HTMLProps } from 'react' export type LemonTagType = | 'primary' diff --git a/frontend/src/lib/lemon-ui/LemonTextArea/LemonTextArea.stories.tsx b/frontend/src/lib/lemon-ui/LemonTextArea/LemonTextArea.stories.tsx index f256294da1..632a9380e6 100644 --- a/frontend/src/lib/lemon-ui/LemonTextArea/LemonTextArea.stories.tsx +++ b/frontend/src/lib/lemon-ui/LemonTextArea/LemonTextArea.stories.tsx @@ -1,10 +1,12 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' import { useState } from 'react' -import { LemonTextArea, LemonTextAreaProps } from './LemonTextArea' import { IconTrash } from '@posthog/icons' + import { LemonButton } from 'lib/lemon-ui/LemonButton' +import { LemonTextArea, LemonTextAreaProps } from './LemonTextArea' + type Story = StoryObj const meta: Meta = { title: 'Lemon UI/Lemon Text Area', diff --git a/frontend/src/lib/lemon-ui/LemonTextArea/LemonTextArea.tsx b/frontend/src/lib/lemon-ui/LemonTextArea/LemonTextArea.tsx index 6ec0a83ca9..e3c1e184dd 100644 --- a/frontend/src/lib/lemon-ui/LemonTextArea/LemonTextArea.tsx +++ b/frontend/src/lib/lemon-ui/LemonTextArea/LemonTextArea.tsx @@ -1,7 +1,8 @@ import './LemonTextArea.scss' -import React, { ReactElement, useRef, useState, useEffect } from 'react' +import React, { ReactElement, useEffect, useRef, useState } from 'react' import TextareaAutosize from 'react-textarea-autosize' + import { cn } from 'lib/utils/css-classes' interface LemonTextAreaPropsBase diff --git a/frontend/src/lib/lemon-ui/LemonTextArea/LemonTextAreaMarkdown.stories.tsx b/frontend/src/lib/lemon-ui/LemonTextArea/LemonTextAreaMarkdown.stories.tsx index dbe02494eb..41786f7af9 100644 --- a/frontend/src/lib/lemon-ui/LemonTextArea/LemonTextAreaMarkdown.stories.tsx +++ b/frontend/src/lib/lemon-ui/LemonTextArea/LemonTextAreaMarkdown.stories.tsx @@ -1,9 +1,10 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' +import { useState } from 'react' + import { LemonTextAreaMarkdown, LemonTextAreaMarkdown as _LemonTextMarkdown, } from 'lib/lemon-ui/LemonTextArea/LemonTextAreaMarkdown' -import { useState } from 'react' import { LemonTextAreaProps } from './LemonTextArea' diff --git a/frontend/src/lib/lemon-ui/LemonTextArea/LemonTextAreaMarkdown.tsx b/frontend/src/lib/lemon-ui/LemonTextArea/LemonTextAreaMarkdown.tsx index ccbf96ac00..4151e9c891 100644 --- a/frontend/src/lib/lemon-ui/LemonTextArea/LemonTextAreaMarkdown.tsx +++ b/frontend/src/lib/lemon-ui/LemonTextArea/LemonTextAreaMarkdown.tsx @@ -1,20 +1,22 @@ import { useActions, useValues } from 'kea' -import { TextContent } from 'lib/components/Cards/TextCard/TextCard' -import { useUploadFiles } from 'lib/hooks/useUploadFiles' -import { IconMarkdown } from 'lib/lemon-ui/icons' +import posthog from 'posthog-js' +import React, { useCallback, useRef, useState } from 'react' + import { IconImage } from '@posthog/icons' + +import { TextContent } from 'lib/components/Cards/TextCard/TextCard' +import { EmojiPickerPopover } from 'lib/components/EmojiPicker/EmojiPickerPopover' +import { useUploadFiles } from 'lib/hooks/useUploadFiles' +import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonFileInput } from 'lib/lemon-ui/LemonFileInput' import { LemonTabs } from 'lib/lemon-ui/LemonTabs' import { LemonTextArea, LemonTextAreaProps } from 'lib/lemon-ui/LemonTextArea/LemonTextArea' -import { lemonToast } from 'lib/lemon-ui/LemonToast' -import { Tooltip } from 'lib/lemon-ui/Tooltip' -import posthog from 'posthog-js' -import React, { useRef, useState, useCallback } from 'react' -import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' -import { EmojiPickerPopover } from 'lib/components/EmojiPicker/EmojiPickerPopover' -import { LemonButton } from 'lib/lemon-ui/LemonButton' import { emojiUsageLogic } from 'lib/lemon-ui/LemonTextArea/emojiUsageLogic' +import { lemonToast } from 'lib/lemon-ui/LemonToast' import { Spinner } from 'lib/lemon-ui/Spinner' +import { Tooltip } from 'lib/lemon-ui/Tooltip' +import { IconMarkdown } from 'lib/lemon-ui/icons' +import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' export const LemonTextAreaMarkdown = React.forwardRef( function LemonTextAreaMarkdown({ value, onChange, className, ...editAreaProps }, ref): JSX.Element { diff --git a/frontend/src/lib/lemon-ui/LemonTextArea/emojiUsageLogic.ts b/frontend/src/lib/lemon-ui/LemonTextArea/emojiUsageLogic.ts index cf2579b340..8411a50157 100644 --- a/frontend/src/lib/lemon-ui/LemonTextArea/emojiUsageLogic.ts +++ b/frontend/src/lib/lemon-ui/LemonTextArea/emojiUsageLogic.ts @@ -1,6 +1,6 @@ -import { actions, kea, reducers, path, selectors } from 'kea' -import { now } from 'lib/dayjs' +import { actions, kea, path, reducers, selectors } from 'kea' +import { now } from 'lib/dayjs' import { permanentlyMount } from 'lib/utils/kea-logic-builders' import type { emojiUsageLogicType } from './emojiUsageLogicType' diff --git a/frontend/src/lib/lemon-ui/LemonToast/LemonToast.stories.tsx b/frontend/src/lib/lemon-ui/LemonToast/LemonToast.stories.tsx index be5d2b131c..bd79b450f3 100644 --- a/frontend/src/lib/lemon-ui/LemonToast/LemonToast.stories.tsx +++ b/frontend/src/lib/lemon-ui/LemonToast/LemonToast.stories.tsx @@ -2,7 +2,7 @@ import { Meta, StoryObj } from '@storybook/react' import { useEffect } from 'react' import { Slide, ToastContainer } from 'react-toastify' -import { lemonToast, ToastCloseButton, ToastContent, ToastContentProps } from './LemonToast' +import { ToastCloseButton, ToastContent, ToastContentProps, lemonToast } from './LemonToast' const meta: Meta = { title: 'Lemon UI/Lemon Toast', diff --git a/frontend/src/lib/lemon-ui/LemonToast/LemonToast.tsx b/frontend/src/lib/lemon-ui/LemonToast/LemonToast.tsx index b661eb36ab..57434bcff8 100644 --- a/frontend/src/lib/lemon-ui/LemonToast/LemonToast.tsx +++ b/frontend/src/lib/lemon-ui/LemonToast/LemonToast.tsx @@ -1,10 +1,11 @@ -import { IconCheckCircle, IconInfo, IconWarning, IconX } from '@posthog/icons' import posthog from 'posthog-js' -import { toast, ToastContentProps as ToastifyRenderProps, ToastOptions } from 'react-toastify' +import { ToastOptions, ToastContentProps as ToastifyRenderProps, toast } from 'react-toastify' + +import { IconCheckCircle, IconInfo, IconWarning, IconX } from '@posthog/icons' -import { IconErrorOutline } from '../icons' import { LemonButton } from '../LemonButton' import { Spinner } from '../Spinner' +import { IconErrorOutline } from '../icons' export function ToastCloseButton({ closeToast }: { closeToast?: () => void }): JSX.Element { return ( diff --git a/frontend/src/lib/lemon-ui/LemonTree/LemonTree.stories.tsx b/frontend/src/lib/lemon-ui/LemonTree/LemonTree.stories.tsx index 09fd4c26b6..b206d99f6e 100644 --- a/frontend/src/lib/lemon-ui/LemonTree/LemonTree.stories.tsx +++ b/frontend/src/lib/lemon-ui/LemonTree/LemonTree.stories.tsx @@ -1,8 +1,9 @@ -import { IconArchive, IconShieldPeople } from '@posthog/icons' -import { Link } from '@posthog/lemon-ui' import { Meta, StoryFn, StoryObj } from '@storybook/react' import { useRef } from 'react' +import { IconArchive, IconShieldPeople } from '@posthog/icons' +import { Link } from '@posthog/lemon-ui' + import { LemonTree, LemonTreeProps } from './LemonTree' type Story = StoryObj diff --git a/frontend/src/lib/lemon-ui/LemonTree/LemonTree.tsx b/frontend/src/lib/lemon-ui/LemonTree/LemonTree.tsx index ad79e36f97..8db9e94451 100644 --- a/frontend/src/lib/lemon-ui/LemonTree/LemonTree.tsx +++ b/frontend/src/lib/lemon-ui/LemonTree/LemonTree.tsx @@ -1,15 +1,10 @@ import { DndContext, DragEndEvent, DragOverlay, MouseSensor, TouchSensor, useSensor, useSensors } from '@dnd-kit/core' -import { IconEllipsis, IconUpload } from '@posthog/icons' import * as AccordionPrimitive from '@radix-ui/react-accordion' -import { ScrollableShadows } from 'lib/components/ScrollableShadows/ScrollableShadows' -import { ButtonGroupPrimitive, ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' -import { DropdownMenu, DropdownMenuContent, DropdownMenuTrigger } from 'lib/ui/DropdownMenu/DropdownMenu' -import { cn } from 'lib/utils/css-classes' import React, { CSSProperties, ForwardedRef, - forwardRef, HTMLAttributes, + forwardRef, useCallback, useEffect, useImperativeHandle, @@ -17,6 +12,13 @@ import React, { useState, } from 'react' +import { IconEllipsis, IconUpload } from '@posthog/icons' + +import { ScrollableShadows } from 'lib/components/ScrollableShadows/ScrollableShadows' +import { ButtonGroupPrimitive, ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' +import { DropdownMenu, DropdownMenuContent, DropdownMenuTrigger } from 'lib/ui/DropdownMenu/DropdownMenu' +import { cn } from 'lib/utils/css-classes' + import { ContextMenu, ContextMenuContent, ContextMenuTrigger } from '../../ui/ContextMenu/ContextMenu' import { SideAction } from '../LemonButton' import { Link } from '../Link/Link' diff --git a/frontend/src/lib/lemon-ui/LemonTree/LemonTreeUtils.tsx b/frontend/src/lib/lemon-ui/LemonTree/LemonTreeUtils.tsx index 01f2925f8b..52d9c509cb 100644 --- a/frontend/src/lib/lemon-ui/LemonTree/LemonTreeUtils.tsx +++ b/frontend/src/lib/lemon-ui/LemonTree/LemonTreeUtils.tsx @@ -1,12 +1,14 @@ import { useDraggable, useDroppable } from '@dnd-kit/core' +import { CSSProperties, useRef } from 'react' + import { IconChevronRight, IconCircleDashed, IconDocument, IconFolder, IconFolderOpenFilled } from '@posthog/icons' + +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { buttonPrimitiveVariants } from 'lib/ui/Button/ButtonPrimitives' import { cn } from 'lib/utils/css-classes' -import { CSSProperties, useRef } from 'react' import { LemonCheckbox } from '../LemonCheckbox' import { TreeDataItem } from './LemonTree' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' export const ICON_CLASSES = 'text-tertiary size-5 flex items-center justify-center relative' diff --git a/frontend/src/lib/lemon-ui/LemonWidget/LemonWidget.tsx b/frontend/src/lib/lemon-ui/LemonWidget/LemonWidget.tsx index 524f672043..2833a3fccc 100644 --- a/frontend/src/lib/lemon-ui/LemonWidget/LemonWidget.tsx +++ b/frontend/src/lib/lemon-ui/LemonWidget/LemonWidget.tsx @@ -1,8 +1,9 @@ import './LemonWidget.scss' -import { IconX } from '@posthog/icons' import clsx from 'clsx' +import { IconX } from '@posthog/icons' + import { LemonButton } from '../LemonButton' export interface LemonWidgetProps { diff --git a/frontend/src/lib/lemon-ui/Lettermark/Lettermark.stories.tsx b/frontend/src/lib/lemon-ui/Lettermark/Lettermark.stories.tsx index cf203002bb..236f911697 100644 --- a/frontend/src/lib/lemon-ui/Lettermark/Lettermark.stories.tsx +++ b/frontend/src/lib/lemon-ui/Lettermark/Lettermark.stories.tsx @@ -1,4 +1,5 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' + import { range } from 'lib/utils' import { Lettermark, LettermarkColor, LettermarkProps } from './Lettermark' diff --git a/frontend/src/lib/lemon-ui/Link/Link.stories.tsx b/frontend/src/lib/lemon-ui/Link/Link.stories.tsx index 638030e19d..d0be70b823 100644 --- a/frontend/src/lib/lemon-ui/Link/Link.stories.tsx +++ b/frontend/src/lib/lemon-ui/Link/Link.stories.tsx @@ -1,4 +1,5 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' + import { urls } from 'scenes/urls' import { Link, LinkProps } from './Link' diff --git a/frontend/src/lib/lemon-ui/Link/Link.tsx b/frontend/src/lib/lemon-ui/Link/Link.tsx index 6302b1fc9b..3ec286c51d 100644 --- a/frontend/src/lib/lemon-ui/Link/Link.tsx +++ b/frontend/src/lib/lemon-ui/Link/Link.tsx @@ -1,16 +1,18 @@ import './Link.scss' -import { IconExternal, IconOpenSidebar } from '@posthog/icons' import { router } from 'kea-router' +import React, { useContext } from 'react' + +import { IconExternal, IconOpenSidebar } from '@posthog/icons' + import { ButtonPrimitiveProps, buttonPrimitiveVariants } from 'lib/ui/Button/ButtonPrimitives' import { isExternalLink } from 'lib/utils' import { cn } from 'lib/utils/css-classes' import { getCurrentTeamId } from 'lib/utils/getAppContext' import { addProjectIdIfMissing } from 'lib/utils/router-utils' -import React, { useContext } from 'react' import { useNotebookDrag } from 'scenes/notebooks/AddToNotebook/DraggableToNotebook' -import { sidePanelStateLogic, WithinSidePanelContext } from '~/layout/navigation-3000/sidepanel/sidePanelStateLogic' +import { WithinSidePanelContext, sidePanelStateLogic } from '~/layout/navigation-3000/sidepanel/sidePanelStateLogic' import { SidePanelTab } from '~/types' import { Tooltip, TooltipProps } from '../Tooltip' diff --git a/frontend/src/lib/lemon-ui/PaginationControl/PaginationControl.tsx b/frontend/src/lib/lemon-ui/PaginationControl/PaginationControl.tsx index c8d453e128..773aa2f2ac 100644 --- a/frontend/src/lib/lemon-ui/PaginationControl/PaginationControl.tsx +++ b/frontend/src/lib/lemon-ui/PaginationControl/PaginationControl.tsx @@ -1,8 +1,9 @@ import './PaginationControl.scss' import clsx from 'clsx' -import { IconChevronLeft, IconChevronRight } from 'lib/lemon-ui/icons' + import { LemonButton } from 'lib/lemon-ui/LemonButton' +import { IconChevronLeft, IconChevronRight } from 'lib/lemon-ui/icons' import { PaginationState } from './types' diff --git a/frontend/src/lib/lemon-ui/Popover/Popover.stories.tsx b/frontend/src/lib/lemon-ui/Popover/Popover.stories.tsx index 6009204b6c..2da8242a20 100644 --- a/frontend/src/lib/lemon-ui/Popover/Popover.stories.tsx +++ b/frontend/src/lib/lemon-ui/Popover/Popover.stories.tsx @@ -1,6 +1,7 @@ -import { IconChevronDown } from '@posthog/icons' import { Meta, StoryFn, StoryObj } from '@storybook/react' +import { IconChevronDown } from '@posthog/icons' + import { Popover } from './Popover' type Story = StoryObj diff --git a/frontend/src/lib/lemon-ui/Popover/Popover.tsx b/frontend/src/lib/lemon-ui/Popover/Popover.tsx index c737e0573a..32d2e383ab 100644 --- a/frontend/src/lib/lemon-ui/Popover/Popover.tsx +++ b/frontend/src/lib/lemon-ui/Popover/Popover.tsx @@ -1,25 +1,26 @@ import './Popover.scss' import { - arrow, - autoUpdate, - flip, FloatingPortal, Middleware, Placement, + UseFloatingReturn, + arrow, + autoUpdate, + flip, shift, size, useFloating, - UseFloatingReturn, useMergeRefs, } from '@floating-ui/react' import clsx from 'clsx' +import React, { MouseEventHandler, ReactElement, useContext, useEffect, useLayoutEffect, useRef, useState } from 'react' +import { CSSTransition } from 'react-transition-group' + import { ScrollableShadows } from 'lib/components/ScrollableShadows/ScrollableShadows' import { useEventListener } from 'lib/hooks/useEventListener' import { useFloatingContainer } from 'lib/hooks/useFloatingContainerContext' import { CLICK_OUTSIDE_BLOCK_CLASS, useOutsideClickHandler } from 'lib/hooks/useOutsideClickHandler' -import React, { MouseEventHandler, ReactElement, useContext, useEffect, useLayoutEffect, useRef, useState } from 'react' -import { CSSTransition } from 'react-transition-group' import { LemonTableLoader } from '../LemonTable/LemonTableLoader' diff --git a/frontend/src/lib/lemon-ui/ProfilePicture/ProfileBubbles.stories.tsx b/frontend/src/lib/lemon-ui/ProfilePicture/ProfileBubbles.stories.tsx index a6370540fb..63617f09ef 100644 --- a/frontend/src/lib/lemon-ui/ProfilePicture/ProfileBubbles.stories.tsx +++ b/frontend/src/lib/lemon-ui/ProfilePicture/ProfileBubbles.stories.tsx @@ -1,4 +1,5 @@ import { Meta } from '@storybook/react' + import { alphabet, range } from 'lib/utils' import { ProfileBubbles as ProfileBubblesComponent, ProfileBubblesProps } from './ProfileBubbles' diff --git a/frontend/src/lib/lemon-ui/ProfilePicture/ProfileBubbles.tsx b/frontend/src/lib/lemon-ui/ProfilePicture/ProfileBubbles.tsx index e65a6e2304..70666c1234 100644 --- a/frontend/src/lib/lemon-ui/ProfilePicture/ProfileBubbles.tsx +++ b/frontend/src/lib/lemon-ui/ProfilePicture/ProfileBubbles.tsx @@ -1,7 +1,7 @@ +import { ProfilePicture } from '.' import clsx from 'clsx' import { Tooltip } from '../Tooltip' -import { ProfilePicture } from '.' export interface ProfileBubblesProps extends React.HTMLProps { people: { email: string; name?: string; title?: string }[] diff --git a/frontend/src/lib/lemon-ui/ProfilePicture/ProfilePicture.tsx b/frontend/src/lib/lemon-ui/ProfilePicture/ProfilePicture.tsx index 008c5946ac..a9c349c68c 100644 --- a/frontend/src/lib/lemon-ui/ProfilePicture/ProfilePicture.tsx +++ b/frontend/src/lib/lemon-ui/ProfilePicture/ProfilePicture.tsx @@ -2,16 +2,17 @@ import './ProfilePicture.scss' import clsx from 'clsx' import { useValues } from 'kea' -import { HedgehogBuddyProfile } from 'lib/components/HedgehogBuddy/HedgehogBuddyRender' -import { fullName, inStorybookTestRunner } from 'lib/utils' import md5 from 'md5' import React, { useMemo, useState } from 'react' + +import { HedgehogBuddyProfile } from 'lib/components/HedgehogBuddy/HedgehogBuddyRender' +import { fullName, inStorybookTestRunner } from 'lib/utils' import { userLogic } from 'scenes/userLogic' import { MinimalHedgehogConfig, UserBasicType } from '~/types' -import { IconRobot } from '../icons' import { Lettermark, LettermarkColor } from '../Lettermark/Lettermark' +import { IconRobot } from '../icons' export interface ProfilePictureProps { user?: diff --git a/frontend/src/lib/lemon-ui/Spinner/Spinner.stories.tsx b/frontend/src/lib/lemon-ui/Spinner/Spinner.stories.tsx index 217c29f535..4b90c109b6 100644 --- a/frontend/src/lib/lemon-ui/Spinner/Spinner.stories.tsx +++ b/frontend/src/lib/lemon-ui/Spinner/Spinner.stories.tsx @@ -1,6 +1,7 @@ -import { LemonButton } from '@posthog/lemon-ui' import { Meta } from '@storybook/react' +import { LemonButton } from '@posthog/lemon-ui' + import { Spinner, SpinnerOverlay } from './Spinner' const meta: Meta = { diff --git a/frontend/src/lib/lemon-ui/Spinner/Spinner.tsx b/frontend/src/lib/lemon-ui/Spinner/Spinner.tsx index a7dbf32f93..53982458a6 100644 --- a/frontend/src/lib/lemon-ui/Spinner/Spinner.tsx +++ b/frontend/src/lib/lemon-ui/Spinner/Spinner.tsx @@ -1,10 +1,11 @@ import './Spinner.scss' -import { IconPencil } from '@posthog/icons' import posthog from 'posthog-js' import { useEffect, useRef } from 'react' import { twJoin, twMerge } from 'tailwind-merge' +import { IconPencil } from '@posthog/icons' + function useTimingCapture(captureTime: boolean): void { const mountTimeRef = useRef(performance.now()) diff --git a/frontend/src/lib/lemon-ui/Tooltip/Tooltip.tsx b/frontend/src/lib/lemon-ui/Tooltip/Tooltip.tsx index a9ff9e327e..740a0569cd 100644 --- a/frontend/src/lib/lemon-ui/Tooltip/Tooltip.tsx +++ b/frontend/src/lib/lemon-ui/Tooltip/Tooltip.tsx @@ -1,13 +1,13 @@ import './Tooltip.scss' import { + FloatingArrow, + FloatingPortal, + Placement, arrow, autoUpdate, flip, - FloatingArrow, - FloatingPortal, offset as offsetFunc, - Placement, shift, useDismiss, useFloating, @@ -19,9 +19,10 @@ import { useTransitionStyles, } from '@floating-ui/react' import clsx from 'clsx' -import { useFloatingContainer } from 'lib/hooks/useFloatingContainerContext' import React, { useRef, useState } from 'react' +import { useFloatingContainer } from 'lib/hooks/useFloatingContainerContext' + import { Link } from '../Link' export type TooltipTitle = string | React.ReactNode | (() => string) diff --git a/frontend/src/lib/lemon-ui/hooks.ts b/frontend/src/lib/lemon-ui/hooks.ts index b39c5424d4..4b3807d163 100644 --- a/frontend/src/lib/lemon-ui/hooks.ts +++ b/frontend/src/lib/lemon-ui/hooks.ts @@ -1,6 +1,7 @@ -import { useResizeObserver } from 'lib/hooks/useResizeObserver' import { useLayoutEffect, useRef, useState } from 'react' +import { useResizeObserver } from 'lib/hooks/useResizeObserver' + /** * Dynamic slider positioning for horizontal single-choice components such as LemonSegmentedButton or LemonTabs. * @private diff --git a/frontend/src/lib/lemon-ui/icons/icons.tsx b/frontend/src/lib/lemon-ui/icons/icons.tsx index 199da647e0..c27fa4783c 100644 --- a/frontend/src/lib/lemon-ui/icons/icons.tsx +++ b/frontend/src/lib/lemon-ui/icons/icons.tsx @@ -2,9 +2,10 @@ import './icons.scss' import clsx from 'clsx' -import { LemonBadge, LemonBadgeProps } from 'lib/lemon-ui/LemonBadge' import { CSSProperties, PropsWithChildren, SVGAttributes } from 'react' +import { LemonBadge, LemonBadgeProps } from 'lib/lemon-ui/LemonBadge' + interface IconWithBadgeProps { content: LemonBadgeProps['content'] status?: LemonBadgeProps['status'] diff --git a/frontend/src/lib/lemon-ui/icons/icons3000.stories.tsx b/frontend/src/lib/lemon-ui/icons/icons3000.stories.tsx index f1b94f3a64..3a093aea15 100644 --- a/frontend/src/lib/lemon-ui/icons/icons3000.stories.tsx +++ b/frontend/src/lib/lemon-ui/icons/icons3000.stories.tsx @@ -1,5 +1,7 @@ -import * as packageIcons from '@posthog/icons' import { Meta, StoryObj } from '@storybook/react' + +import * as packageIcons from '@posthog/icons' + import { copyToClipboard } from 'lib/utils/copyToClipboard' import { LemonCollapse } from '../LemonCollapse' diff --git a/frontend/src/lib/lemon-ui/icons/stories/Icons1.stories.tsx b/frontend/src/lib/lemon-ui/icons/stories/Icons1.stories.tsx index 576d92504a..03e6154029 100644 --- a/frontend/src/lib/lemon-ui/icons/stories/Icons1.stories.tsx +++ b/frontend/src/lib/lemon-ui/icons/stories/Icons1.stories.tsx @@ -1,8 +1,9 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' +import * as React from 'react' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonCheckbox } from 'lib/lemon-ui/LemonCheckbox' import { LemonTable } from 'lib/lemon-ui/LemonTable' -import * as React from 'react' import * as icons from '../icons' diff --git a/frontend/src/lib/lemon-ui/icons/stories/Icons2.stories.tsx b/frontend/src/lib/lemon-ui/icons/stories/Icons2.stories.tsx index bbd1d5817f..3faf42f4d8 100644 --- a/frontend/src/lib/lemon-ui/icons/stories/Icons2.stories.tsx +++ b/frontend/src/lib/lemon-ui/icons/stories/Icons2.stories.tsx @@ -1,8 +1,9 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' +import * as React from 'react' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonCheckbox } from 'lib/lemon-ui/LemonCheckbox' import { LemonTable } from 'lib/lemon-ui/LemonTable' -import * as React from 'react' import * as icons from '../icons' diff --git a/frontend/src/lib/lemon-ui/icons/stories/Icons3.stories.tsx b/frontend/src/lib/lemon-ui/icons/stories/Icons3.stories.tsx index 1f7a0635f2..2ad82d20f0 100644 --- a/frontend/src/lib/lemon-ui/icons/stories/Icons3.stories.tsx +++ b/frontend/src/lib/lemon-ui/icons/stories/Icons3.stories.tsx @@ -1,9 +1,11 @@ -import { IconDashboard } from '@posthog/icons' import { Meta, StoryFn, StoryObj } from '@storybook/react' +import * as React from 'react' + +import { IconDashboard } from '@posthog/icons' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonCheckbox } from 'lib/lemon-ui/LemonCheckbox' import { LemonTable } from 'lib/lemon-ui/LemonTable' -import * as React from 'react' import * as icons from '../icons' diff --git a/frontend/src/lib/logic/apiStatusLogic.ts b/frontend/src/lib/logic/apiStatusLogic.ts index 413fbb5a54..82a007b63f 100644 --- a/frontend/src/lib/logic/apiStatusLogic.ts +++ b/frontend/src/lib/logic/apiStatusLogic.ts @@ -1,4 +1,5 @@ import { actions, kea, listeners, path, reducers } from 'kea' + import api from 'lib/api' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/lib/logic/eventIngestionRestrictionLogic.test.ts b/frontend/src/lib/logic/eventIngestionRestrictionLogic.test.ts index d1f8997561..1e22fcab2a 100644 --- a/frontend/src/lib/logic/eventIngestionRestrictionLogic.test.ts +++ b/frontend/src/lib/logic/eventIngestionRestrictionLogic.test.ts @@ -1,10 +1,11 @@ import { expectLogic } from 'kea-test-utils' + import api from 'lib/api' import { delay } from 'lib/utils' import { initKeaTests } from '~/test/init' -import { eventIngestionRestrictionLogic, RestrictionType } from './eventIngestionRestrictionLogic' +import { RestrictionType, eventIngestionRestrictionLogic } from './eventIngestionRestrictionLogic' jest.mock('lib/api') diff --git a/frontend/src/lib/logic/eventIngestionRestrictionLogic.ts b/frontend/src/lib/logic/eventIngestionRestrictionLogic.ts index 8b038c7de2..d1b9bfb5c8 100644 --- a/frontend/src/lib/logic/eventIngestionRestrictionLogic.ts +++ b/frontend/src/lib/logic/eventIngestionRestrictionLogic.ts @@ -1,5 +1,6 @@ import { kea, path, selectors } from 'kea' import { lazyLoaders } from 'kea-loaders' + import api from 'lib/api' import type { eventIngestionRestrictionLogicType } from './eventIngestionRestrictionLogicType' diff --git a/frontend/src/lib/logic/featureFlagLogic.ts b/frontend/src/lib/logic/featureFlagLogic.ts index 9d25b12f2c..ed46ea8879 100644 --- a/frontend/src/lib/logic/featureFlagLogic.ts +++ b/frontend/src/lib/logic/featureFlagLogic.ts @@ -1,7 +1,8 @@ import { actions, afterMount, kea, path, reducers } from 'kea' +import posthog from 'posthog-js' + import { FeatureFlagKey } from 'lib/constants' import { getAppContext } from 'lib/utils/getAppContext' -import posthog from 'posthog-js' import { AppContext } from '~/types' diff --git a/frontend/src/lib/logic/scenes/tabAwareActionToUrl.ts b/frontend/src/lib/logic/scenes/tabAwareActionToUrl.ts index 3ba3805483..7862269b45 100644 --- a/frontend/src/lib/logic/scenes/tabAwareActionToUrl.ts +++ b/frontend/src/lib/logic/scenes/tabAwareActionToUrl.ts @@ -1,7 +1,8 @@ import { BuiltLogic, Logic } from 'kea' +import { actionToUrl, combineUrl, router } from 'kea-router' import { ActionToUrlPayload } from 'kea-router/lib/types' + import { sceneLogic } from 'scenes/sceneLogic' -import { combineUrl, router, actionToUrl } from 'kea-router' export const tabAwareActionToUrl = ( input: ActionToUrlPayload | ((logic: BuiltLogic) => ActionToUrlPayload) diff --git a/frontend/src/lib/logic/scenes/tabAwareScene.ts b/frontend/src/lib/logic/scenes/tabAwareScene.ts index c7f8733187..9583b7d106 100644 --- a/frontend/src/lib/logic/scenes/tabAwareScene.ts +++ b/frontend/src/lib/logic/scenes/tabAwareScene.ts @@ -1,4 +1,4 @@ -import { BuiltLogic, key, Logic } from 'kea' +import { BuiltLogic, Logic, key } from 'kea' export const tabAwareScene = () => { return (logic: BuiltLogic) => { diff --git a/frontend/src/lib/logic/scenes/tabAwareUrlToAction.ts b/frontend/src/lib/logic/scenes/tabAwareUrlToAction.ts index f0d73139b8..59774c4d1d 100644 --- a/frontend/src/lib/logic/scenes/tabAwareUrlToAction.ts +++ b/frontend/src/lib/logic/scenes/tabAwareUrlToAction.ts @@ -1,7 +1,8 @@ import { BuiltLogic, Logic } from 'kea' -import { UrlToActionPayload } from 'kea-router/lib/types' -import { sceneLogic } from 'scenes/sceneLogic' import { urlToAction } from 'kea-router' +import { UrlToActionPayload } from 'kea-router/lib/types' + +import { sceneLogic } from 'scenes/sceneLogic' export const tabAwareUrlToAction = ( input: UrlToActionPayload | ((logic: BuiltLogic) => UrlToActionPayload) diff --git a/frontend/src/lib/logic/scenes/useAttachedLogic.ts b/frontend/src/lib/logic/scenes/useAttachedLogic.ts index 249a03386c..4c335974bc 100644 --- a/frontend/src/lib/logic/scenes/useAttachedLogic.ts +++ b/frontend/src/lib/logic/scenes/useAttachedLogic.ts @@ -1,5 +1,5 @@ +import { BuiltLogic, Logic, LogicWrapper, beforeUnmount, useMountedLogic } from 'kea' import { useEffect, useState } from 'react' -import { beforeUnmount, BuiltLogic, Logic, LogicWrapper, useMountedLogic } from 'kea' /** * Attach a logic to another logic. The logics stay connected even if the React component unmounts. diff --git a/frontend/src/lib/monaco/CodeEditor.tsx b/frontend/src/lib/monaco/CodeEditor.tsx index e5e9870235..1f24f4992c 100644 --- a/frontend/src/lib/monaco/CodeEditor.tsx +++ b/frontend/src/lib/monaco/CodeEditor.tsx @@ -1,7 +1,11 @@ import './CodeEditor.scss' -import MonacoEditor, { DiffEditor as MonacoDiffEditor, type EditorProps, loader, Monaco } from '@monaco-editor/react' +import MonacoEditor, { type EditorProps, Monaco, DiffEditor as MonacoDiffEditor, loader } from '@monaco-editor/react' import { BuiltLogic, useMountedLogic, useValues } from 'kea' +import { IDisposable, editor, editor as importedEditor } from 'monaco-editor' +import * as monaco from 'monaco-editor' +import { useEffect, useMemo, useRef, useState } from 'react' + import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { Spinner } from 'lib/lemon-ui/Spinner' import { codeEditorLogic } from 'lib/monaco/codeEditorLogic' @@ -13,9 +17,6 @@ import { initHogQLLanguage } from 'lib/monaco/languages/hogQL' import { initHogTemplateLanguage } from 'lib/monaco/languages/hogTemplate' import { initLiquidLanguage } from 'lib/monaco/languages/liquid' import { inStorybookTestRunner } from 'lib/utils' -import { editor, editor as importedEditor, IDisposable } from 'monaco-editor' -import * as monaco from 'monaco-editor' -import { useEffect, useMemo, useRef, useState } from 'react' import { themeLogic } from '~/layout/navigation-3000/themeLogic' import { AnyDataNode, HogLanguage, HogQLMetadataResponse, NodeKind } from '~/queries/schema/schema-general' diff --git a/frontend/src/lib/monaco/CodeEditorInline.tsx b/frontend/src/lib/monaco/CodeEditorInline.tsx index 57dfa1c15f..e59f1310c1 100644 --- a/frontend/src/lib/monaco/CodeEditorInline.tsx +++ b/frontend/src/lib/monaco/CodeEditorInline.tsx @@ -1,4 +1,5 @@ import clsx from 'clsx' + import { CodeEditorResizableProps, CodeEditorResizeable } from 'lib/monaco/CodeEditorResizable' export interface CodeEditorInlineProps extends Omit { diff --git a/frontend/src/lib/monaco/CodeEditorResizable.tsx b/frontend/src/lib/monaco/CodeEditorResizable.tsx index fac6168ee7..41263c497b 100644 --- a/frontend/src/lib/monaco/CodeEditorResizable.tsx +++ b/frontend/src/lib/monaco/CodeEditorResizable.tsx @@ -1,10 +1,12 @@ -import { IconCheck, IconX } from '@posthog/icons' -import { LemonButton } from '@posthog/lemon-ui' import clsx from 'clsx' -import { CodeEditor, CodeEditorProps } from 'lib/monaco/CodeEditor' import { useEffect, useRef, useState } from 'react' import AutoSizer from 'react-virtualized/dist/es/AutoSizer' +import { IconCheck, IconX } from '@posthog/icons' +import { LemonButton } from '@posthog/lemon-ui' + +import { CodeEditor, CodeEditorProps } from 'lib/monaco/CodeEditor' + export interface CodeEditorResizableProps extends Omit { height?: number minHeight?: string | number diff --git a/frontend/src/lib/monaco/codeEditorLogic.tsx b/frontend/src/lib/monaco/codeEditorLogic.tsx index fd1383aaa3..1ad5cae0eb 100644 --- a/frontend/src/lib/monaco/codeEditorLogic.tsx +++ b/frontend/src/lib/monaco/codeEditorLogic.tsx @@ -2,7 +2,6 @@ import type { Monaco } from '@monaco-editor/react' import { actions, connect, kea, key, path, props, propsChanged, selectors } from 'kea' import { loaders } from 'kea-loaders' import { subscriptions } from 'kea-subscriptions' -import { featureFlagLogic } from 'lib/logic/featureFlagLogic' // Note: we can oly import types and not values from monaco-editor, because otherwise some Monaco code breaks // auto reload in development. Specifically, on this line: // `export const suggestWidgetStatusbarMenu = new MenuId('suggestWidgetStatusBar')` @@ -10,7 +9,9 @@ import { featureFlagLogic } from 'lib/logic/featureFlagLogic' // JS context, and that's exactly what happens on auto-reload when the new script chunks are loaded. Unfortunately // esbuild doesn't support manual chunks as of 2023, so we can't just put Monaco in its own chunk, which would prevent // re-importing. As for @monaco-editor/react, it does some lazy loading and doesn't have this problem. -import { editor, MarkerSeverity } from 'monaco-editor' +import { MarkerSeverity, editor } from 'monaco-editor' + +import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { performQuery } from '~/queries/query' import { diff --git a/frontend/src/lib/monaco/hogQLAutocompleteProvider.ts b/frontend/src/lib/monaco/hogQLAutocompleteProvider.ts index 1ebeb2cbc0..9c2bcf0ed1 100644 --- a/frontend/src/lib/monaco/hogQLAutocompleteProvider.ts +++ b/frontend/src/lib/monaco/hogQLAutocompleteProvider.ts @@ -1,7 +1,8 @@ import { BuiltLogic } from 'kea' -import type { codeEditorLogicType } from 'lib/monaco/codeEditorLogicType' import { languages } from 'monaco-editor' +import type { codeEditorLogicType } from 'lib/monaco/codeEditorLogicType' + import { performQuery } from '~/queries/query' import { AutocompleteCompletionItemKind, diff --git a/frontend/src/lib/monaco/languages/hog.ts b/frontend/src/lib/monaco/languages/hog.ts index e905785dee..50c46d1834 100644 --- a/frontend/src/lib/monaco/languages/hog.ts +++ b/frontend/src/lib/monaco/languages/hog.ts @@ -1,11 +1,10 @@ /* oxlint-disable no-useless-escape */ - // Adapted from: https://raw.githubusercontent.com/microsoft/monaco-editor/main/src/basic-languages/typescript/typescript.ts - import { Monaco } from '@monaco-editor/react' +import { languages } from 'monaco-editor' + import { hogQLAutocompleteProvider } from 'lib/monaco/hogQLAutocompleteProvider' import { hogQLMetadataProvider } from 'lib/monaco/hogQLMetadataProvider' -import { languages } from 'monaco-editor' import { HogLanguage } from '~/queries/schema/schema-general' diff --git a/frontend/src/lib/monaco/languages/hogJson.ts b/frontend/src/lib/monaco/languages/hogJson.ts index 9202651b4f..317117d587 100644 --- a/frontend/src/lib/monaco/languages/hogJson.ts +++ b/frontend/src/lib/monaco/languages/hogJson.ts @@ -1,8 +1,9 @@ /* oxlint-disable no-useless-escape */ import { Monaco } from '@monaco-editor/react' +import { languages } from 'monaco-editor' + import { hogQLAutocompleteProvider } from 'lib/monaco/hogQLAutocompleteProvider' import { hogQLMetadataProvider } from 'lib/monaco/hogQLMetadataProvider' -import { languages } from 'monaco-editor' import { HogLanguage } from '~/queries/schema/schema-general' diff --git a/frontend/src/lib/monaco/languages/hogQL.ts b/frontend/src/lib/monaco/languages/hogQL.ts index 75bbaba2d9..95a12f7085 100644 --- a/frontend/src/lib/monaco/languages/hogQL.ts +++ b/frontend/src/lib/monaco/languages/hogQL.ts @@ -1,9 +1,9 @@ // Adapted from https://raw.githubusercontent.com/microsoft/monaco-editor/main/src/basic-languages/mysql/mysql.ts - import { Monaco } from '@monaco-editor/react' +import { languages } from 'monaco-editor' + import { hogQLAutocompleteProvider } from 'lib/monaco/hogQLAutocompleteProvider' import { hogQLMetadataProvider } from 'lib/monaco/hogQLMetadataProvider' -import { languages } from 'monaco-editor' import { HogLanguage } from '~/queries/schema/schema-general' diff --git a/frontend/src/lib/monaco/languages/hogTemplate.ts b/frontend/src/lib/monaco/languages/hogTemplate.ts index b0fdaa95b9..acad16c22c 100644 --- a/frontend/src/lib/monaco/languages/hogTemplate.ts +++ b/frontend/src/lib/monaco/languages/hogTemplate.ts @@ -1,8 +1,9 @@ /* oxlint-disable no-useless-escape */ import { Monaco } from '@monaco-editor/react' +import { languages } from 'monaco-editor' + import { hogQLAutocompleteProvider } from 'lib/monaco/hogQLAutocompleteProvider' import { hogQLMetadataProvider } from 'lib/monaco/hogQLMetadataProvider' -import { languages } from 'monaco-editor' import { HogLanguage } from '~/queries/schema/schema-general' diff --git a/frontend/src/lib/sortable.ts b/frontend/src/lib/sortable.ts index edad9ff60e..8f25cd598c 100644 --- a/frontend/src/lib/sortable.ts +++ b/frontend/src/lib/sortable.ts @@ -2,7 +2,6 @@ // height items in a sortable container were not always firing collisions correctly. // Should be possible to remove this custom collision detection algorithm once a proper fix // is merged into dnd-kit. - import { CollisionDetection, DroppableContainer, UniqueIdentifier } from '@dnd-kit/core' export const verticalSortableListCollisionDetection: CollisionDetection = (args) => { diff --git a/frontend/src/lib/statistics.ts b/frontend/src/lib/statistics.ts index 196670bebb..e5a2b7e97c 100644 --- a/frontend/src/lib/statistics.ts +++ b/frontend/src/lib/statistics.ts @@ -1,4 +1,4 @@ -import { standardDeviation, probit, linearRegression } from 'simple-statistics' +import { linearRegression, probit, standardDeviation } from 'simple-statistics' /** * Calculates the confidence interval ranges for a given set of values. diff --git a/frontend/src/lib/ui/Button/ButtonPrimitives.stories.tsx b/frontend/src/lib/ui/Button/ButtonPrimitives.stories.tsx index cddb6546f7..be543dc90f 100644 --- a/frontend/src/lib/ui/Button/ButtonPrimitives.stories.tsx +++ b/frontend/src/lib/ui/Button/ButtonPrimitives.stories.tsx @@ -1,5 +1,7 @@ -import { IconGear, IconSearch } from '@posthog/icons' import type { Meta } from '@storybook/react' + +import { IconGear, IconSearch } from '@posthog/icons' + import { Link } from 'lib/lemon-ui/Link/Link' import { DropdownMenu, diff --git a/frontend/src/lib/ui/Button/ButtonPrimitives.tsx b/frontend/src/lib/ui/Button/ButtonPrimitives.tsx index 8016ffea1c..5afebe4585 100644 --- a/frontend/src/lib/ui/Button/ButtonPrimitives.tsx +++ b/frontend/src/lib/ui/Button/ButtonPrimitives.tsx @@ -1,9 +1,10 @@ import './ButtonPrimitives.scss' -import { cva, type VariantProps } from 'cva' +import { type VariantProps, cva } from 'cva' +import React, { ReactNode, createContext, forwardRef, useContext } from 'react' + import { Tooltip, TooltipProps } from 'lib/lemon-ui/Tooltip/Tooltip' import { cn } from 'lib/utils/css-classes' -import React, { createContext, forwardRef, ReactNode, useContext } from 'react' /* -------------------------------------------------------------------------- */ /* Props & Contexts & Hooks */ diff --git a/frontend/src/lib/ui/Colors/Colors.stories.tsx b/frontend/src/lib/ui/Colors/Colors.stories.tsx index 3ffb3841ea..60db5e3e38 100644 --- a/frontend/src/lib/ui/Colors/Colors.stories.tsx +++ b/frontend/src/lib/ui/Colors/Colors.stories.tsx @@ -1,8 +1,9 @@ import { Meta } from '@storybook/react' import { useValues } from 'kea' -import { LemonSlider } from 'lib/lemon-ui/LemonSlider' import { useEffect, useState } from 'react' +import { LemonSlider } from 'lib/lemon-ui/LemonSlider' + import { themeLogic } from '~/layout/navigation-3000/themeLogic' const meta: Meta = { diff --git a/frontend/src/lib/ui/Combobox/Combobox.stories.tsx b/frontend/src/lib/ui/Combobox/Combobox.stories.tsx index 8e0e7db75d..2437485b27 100644 --- a/frontend/src/lib/ui/Combobox/Combobox.stories.tsx +++ b/frontend/src/lib/ui/Combobox/Combobox.stories.tsx @@ -1,15 +1,17 @@ import type { Meta } from '@storybook/react' -import { ButtonGroupPrimitive, ButtonPrimitive } from '../Button/ButtonPrimitives' -import { Combobox } from './Combobox' -import { Link } from 'lib/lemon-ui/Link' import { IconGear, IconPlusSmall } from '@posthog/icons' + +import { Link } from 'lib/lemon-ui/Link' + +import { ButtonGroupPrimitive, ButtonPrimitive } from '../Button/ButtonPrimitives' +import { DropdownMenuOpenIndicator } from '../DropdownMenu/DropdownMenu' import { PopoverPrimitive, PopoverPrimitiveContent, PopoverPrimitiveTrigger, } from '../PopoverPrimitive/PopoverPrimitive' -import { DropdownMenuOpenIndicator } from '../DropdownMenu/DropdownMenu' +import { Combobox } from './Combobox' const meta = { title: 'UI/Combobox', diff --git a/frontend/src/lib/ui/Combobox/Combobox.tsx b/frontend/src/lib/ui/Combobox/Combobox.tsx index b33f685e80..e99be2effb 100644 --- a/frontend/src/lib/ui/Combobox/Combobox.tsx +++ b/frontend/src/lib/ui/Combobox/Combobox.tsx @@ -1,9 +1,7 @@ -import { ListBox, ListBoxHandle } from 'lib/ui/ListBox/ListBox' -import { cn } from 'lib/utils/css-classes' import React, { + ReactNode, createContext, forwardRef, - ReactNode, useCallback, useContext, useEffect, @@ -14,9 +12,12 @@ import React, { useState, } from 'react' +import { ScrollableShadows } from 'lib/components/ScrollableShadows/ScrollableShadows' +import { ListBox, ListBoxHandle } from 'lib/ui/ListBox/ListBox' +import { cn } from 'lib/utils/css-classes' + import { ButtonPrimitive } from '../Button/ButtonPrimitives' import { TextInputPrimitive } from '../TextInputPrimitive/TextInputPrimitive' -import { ScrollableShadows } from 'lib/components/ScrollableShadows/ScrollableShadows' interface ComboboxContextType { searchValue: string diff --git a/frontend/src/lib/ui/ContextMenu/ContextMenu.tsx b/frontend/src/lib/ui/ContextMenu/ContextMenu.tsx index 8e29049dc4..ab3b57d654 100644 --- a/frontend/src/lib/ui/ContextMenu/ContextMenu.tsx +++ b/frontend/src/lib/ui/ContextMenu/ContextMenu.tsx @@ -1,10 +1,12 @@ 'use client' -import { IconCheckCircle } from '@posthog/icons' import * as ContextMenuPrimitive from '@radix-ui/react-context-menu' +import * as React from 'react' + +import { IconCheckCircle } from '@posthog/icons' + import { ScrollableShadows } from 'lib/components/ScrollableShadows/ScrollableShadows' import { cn } from 'lib/utils/css-classes' -import * as React from 'react' const ContextMenu = ContextMenuPrimitive.Root diff --git a/frontend/src/lib/ui/DropdownMenu/DropdownMenu.stories.tsx b/frontend/src/lib/ui/DropdownMenu/DropdownMenu.stories.tsx index 5311278d5e..4d5fc863c2 100644 --- a/frontend/src/lib/ui/DropdownMenu/DropdownMenu.stories.tsx +++ b/frontend/src/lib/ui/DropdownMenu/DropdownMenu.stories.tsx @@ -1,6 +1,9 @@ -import { IconChevronRight, IconSearch } from '@posthog/icons' import { DropdownMenuCheckboxItemProps } from '@radix-ui/react-dropdown-menu' import type { Meta } from '@storybook/react' +import { useState } from 'react' + +import { IconChevronRight, IconSearch } from '@posthog/icons' + import { Link } from 'lib/lemon-ui/Link/Link' import { DropdownMenu, @@ -17,7 +20,6 @@ import { DropdownMenuSubTrigger, DropdownMenuTrigger, } from 'lib/ui/DropdownMenu/DropdownMenu' -import { useState } from 'react' import { ButtonPrimitive } from '../Button/ButtonPrimitives' diff --git a/frontend/src/lib/ui/DropdownMenu/DropdownMenu.tsx b/frontend/src/lib/ui/DropdownMenu/DropdownMenu.tsx index aeb3025c4a..bcd587ac3f 100644 --- a/frontend/src/lib/ui/DropdownMenu/DropdownMenu.tsx +++ b/frontend/src/lib/ui/DropdownMenu/DropdownMenu.tsx @@ -1,8 +1,10 @@ -import { IconCheck, IconChevronRight } from '@posthog/icons' import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu' +import * as React from 'react' + +import { IconCheck, IconChevronRight } from '@posthog/icons' + import { ScrollableShadows } from 'lib/components/ScrollableShadows/ScrollableShadows' import { cn } from 'lib/utils/css-classes' -import * as React from 'react' import { Label } from '../Label/Label' diff --git a/frontend/src/lib/ui/IconWrapper/IconWrapper.tsx b/frontend/src/lib/ui/IconWrapper/IconWrapper.tsx index 51f3b77262..d97527464f 100644 --- a/frontend/src/lib/ui/IconWrapper/IconWrapper.tsx +++ b/frontend/src/lib/ui/IconWrapper/IconWrapper.tsx @@ -1,7 +1,8 @@ -import { cva, type VariantProps } from 'cva' -import { cn } from 'lib/utils/css-classes' +import { type VariantProps, cva } from 'cva' import { forwardRef } from 'react' +import { cn } from 'lib/utils/css-classes' + const iconWrapperVariants = cva({ base: 'flex place-items-center aspect-square', variants: { diff --git a/frontend/src/lib/ui/Label/Label.tsx b/frontend/src/lib/ui/Label/Label.tsx index 0c8c70d889..302b710a54 100644 --- a/frontend/src/lib/ui/Label/Label.tsx +++ b/frontend/src/lib/ui/Label/Label.tsx @@ -1,6 +1,7 @@ import { cva } from 'cva' +import { LabelHTMLAttributes, forwardRef } from 'react' + import { cn } from 'lib/utils/css-classes' -import { forwardRef, LabelHTMLAttributes } from 'react' const labelVariants = cva({ base: 'font-semibold', diff --git a/frontend/src/lib/ui/ListBox/ListBox.stories.tsx b/frontend/src/lib/ui/ListBox/ListBox.stories.tsx index c171d2df73..a95e8a8d53 100644 --- a/frontend/src/lib/ui/ListBox/ListBox.stories.tsx +++ b/frontend/src/lib/ui/ListBox/ListBox.stories.tsx @@ -1,8 +1,9 @@ -import { Link } from '@posthog/lemon-ui' import * as AccordionPrimitive from '@radix-ui/react-accordion' import { Meta, StoryFn, StoryObj } from '@storybook/react' import { useRef, useState } from 'react' +import { Link } from '@posthog/lemon-ui' + import { ButtonPrimitive } from '../Button/ButtonPrimitives' import { ListBox, ListBoxHandle } from './ListBox' diff --git a/frontend/src/lib/ui/ListBox/ListBox.tsx b/frontend/src/lib/ui/ListBox/ListBox.tsx index eccd528374..d4ff912b31 100644 --- a/frontend/src/lib/ui/ListBox/ListBox.tsx +++ b/frontend/src/lib/ui/ListBox/ListBox.tsx @@ -1,10 +1,9 @@ -import { cn } from 'lib/utils/css-classes' import React, { + ReactNode, cloneElement, createContext, forwardRef, isValidElement, - ReactNode, useCallback, useContext, useEffect, @@ -14,6 +13,8 @@ import React, { useState, } from 'react' +import { cn } from 'lib/utils/css-classes' + /** Imperative API handle for Combobox to call focusFirstItem() etc */ export interface ListBoxHandle { recalculateFocusableElements: () => void diff --git a/frontend/src/lib/ui/PopoverPrimitive/PopoverPrimitive.tsx b/frontend/src/lib/ui/PopoverPrimitive/PopoverPrimitive.tsx index f929e34353..bac8de57b9 100644 --- a/frontend/src/lib/ui/PopoverPrimitive/PopoverPrimitive.tsx +++ b/frontend/src/lib/ui/PopoverPrimitive/PopoverPrimitive.tsx @@ -1,7 +1,8 @@ import * as PopoverPrimitiveBase from '@radix-ui/react-popover' -import { cn } from 'lib/utils/css-classes' import * as React from 'react' +import { cn } from 'lib/utils/css-classes' + function PopoverPrimitive({ ...props }: React.ComponentProps): JSX.Element { return } diff --git a/frontend/src/lib/ui/SelectPrimitive/SelectPrimitive.stories.tsx b/frontend/src/lib/ui/SelectPrimitive/SelectPrimitive.stories.tsx index 1f7e8d4ddc..22f80c2a8c 100644 --- a/frontend/src/lib/ui/SelectPrimitive/SelectPrimitive.stories.tsx +++ b/frontend/src/lib/ui/SelectPrimitive/SelectPrimitive.stories.tsx @@ -1,4 +1,5 @@ import type { Meta } from '@storybook/react' + import { SelectPrimitive, SelectPrimitiveContent, diff --git a/frontend/src/lib/ui/SelectPrimitive/SelectPrimitive.tsx b/frontend/src/lib/ui/SelectPrimitive/SelectPrimitive.tsx index e0a8acad16..cb72f15198 100644 --- a/frontend/src/lib/ui/SelectPrimitive/SelectPrimitive.tsx +++ b/frontend/src/lib/ui/SelectPrimitive/SelectPrimitive.tsx @@ -1,8 +1,11 @@ -import { IconCheck, IconChevronRight } from '@posthog/icons' import * as SelectPrimitiveBase from '@radix-ui/react-select' +import * as React from 'react' + +import { IconCheck, IconChevronRight } from '@posthog/icons' + import { ScrollableShadows } from 'lib/components/ScrollableShadows/ScrollableShadows' import { cn } from 'lib/utils/css-classes' -import * as React from 'react' + import { ButtonPrimitive, ButtonPrimitiveProps } from '../Button/ButtonPrimitives' import { Label } from '../Label/Label' diff --git a/frontend/src/lib/ui/TabsPrimitive/TabsPrimitive.stories.tsx b/frontend/src/lib/ui/TabsPrimitive/TabsPrimitive.stories.tsx index f6c0fae939..dfcae3024b 100644 --- a/frontend/src/lib/ui/TabsPrimitive/TabsPrimitive.stories.tsx +++ b/frontend/src/lib/ui/TabsPrimitive/TabsPrimitive.stories.tsx @@ -1,6 +1,7 @@ -import { IconLogomark } from '@posthog/icons' import type { Meta } from '@storybook/react' +import { IconLogomark } from '@posthog/icons' + import { TabsPrimitive, TabsPrimitiveContent, TabsPrimitiveList, TabsPrimitiveTrigger } from './TabsPrimitive' const meta: Meta = { diff --git a/frontend/src/lib/ui/TabsPrimitive/TabsPrimitive.tsx b/frontend/src/lib/ui/TabsPrimitive/TabsPrimitive.tsx index 4309611d4d..512d5df706 100644 --- a/frontend/src/lib/ui/TabsPrimitive/TabsPrimitive.tsx +++ b/frontend/src/lib/ui/TabsPrimitive/TabsPrimitive.tsx @@ -1,6 +1,7 @@ import './TabsPrimitive.scss' import * as Tabs from '@radix-ui/react-tabs' + import { cn } from 'lib/utils/css-classes' export interface TabsPrimitiveProps extends Tabs.TabsProps {} diff --git a/frontend/src/lib/ui/TextInputPrimitive/TextInputPrimitive.tsx b/frontend/src/lib/ui/TextInputPrimitive/TextInputPrimitive.tsx index c04b2655de..13aadf4541 100644 --- a/frontend/src/lib/ui/TextInputPrimitive/TextInputPrimitive.tsx +++ b/frontend/src/lib/ui/TextInputPrimitive/TextInputPrimitive.tsx @@ -1,8 +1,10 @@ -import { cva, type VariantProps } from 'cva' -import { cn } from 'lib/utils/css-classes' -import { forwardRef, useCallback, useEffect, useRef } from 'react' import './TextInputPrimitive.css' +import { type VariantProps, cva } from 'cva' +import { forwardRef, useCallback, useEffect, useRef } from 'react' + +import { cn } from 'lib/utils/css-classes' + export const textInputVariants = cva({ base: 'text-input-primitive w-full rounded border border-primary p-2 text-sm outline-none focus-visible:border-secondary', variants: { diff --git a/frontend/src/lib/ui/TextareaPrimitive/TextareaPrimitive.tsx b/frontend/src/lib/ui/TextareaPrimitive/TextareaPrimitive.tsx index 3a6f65549d..5b52580f2d 100644 --- a/frontend/src/lib/ui/TextareaPrimitive/TextareaPrimitive.tsx +++ b/frontend/src/lib/ui/TextareaPrimitive/TextareaPrimitive.tsx @@ -1,9 +1,11 @@ -import { cn } from 'lib/utils/css-classes' -import TextareaAutosize, { TextareaAutosizeProps } from 'react-textarea-autosize' -import { TextInputBaseProps, textInputVariants } from '../TextInputPrimitive/TextInputPrimitive' import { forwardRef } from 'react' +import TextareaAutosize, { TextareaAutosizeProps } from 'react-textarea-autosize' + import { IconMarkdown } from 'lib/lemon-ui/icons/icons' +import { cn } from 'lib/utils/css-classes' + import { ButtonPrimitive } from '../Button/ButtonPrimitives' +import { TextInputBaseProps, textInputVariants } from '../TextInputPrimitive/TextInputPrimitive' type TextareaPrimitiveProps = TextareaAutosizeProps & TextInputBaseProps & { diff --git a/frontend/src/lib/ui/WrappingLoadingSkeleton/WrappingLoadingSkeleton.stories.tsx b/frontend/src/lib/ui/WrappingLoadingSkeleton/WrappingLoadingSkeleton.stories.tsx index 4793c4b5cf..87475e915c 100644 --- a/frontend/src/lib/ui/WrappingLoadingSkeleton/WrappingLoadingSkeleton.stories.tsx +++ b/frontend/src/lib/ui/WrappingLoadingSkeleton/WrappingLoadingSkeleton.stories.tsx @@ -1,4 +1,5 @@ import type { Meta } from '@storybook/react' + import { ButtonPrimitive } from '../Button/ButtonPrimitives' import { WrappingLoadingSkeleton } from './WrappingLoadingSkeleton' diff --git a/frontend/src/lib/ui/WrappingLoadingSkeleton/WrappingLoadingSkeleton.tsx b/frontend/src/lib/ui/WrappingLoadingSkeleton/WrappingLoadingSkeleton.tsx index d25298d084..3cf920fcde 100644 --- a/frontend/src/lib/ui/WrappingLoadingSkeleton/WrappingLoadingSkeleton.tsx +++ b/frontend/src/lib/ui/WrappingLoadingSkeleton/WrappingLoadingSkeleton.tsx @@ -1,6 +1,7 @@ -import { cn } from 'lib/utils/css-classes' import './WrappingLoadingSkeleton.scss' +import { cn } from 'lib/utils/css-classes' + interface WrappingLoadingSkeletonProps { fullWidth?: boolean children: React.ReactNode diff --git a/frontend/src/lib/utils.test.ts b/frontend/src/lib/utils.test.ts index 7f8a87a53d..68a9722b86 100644 --- a/frontend/src/lib/utils.test.ts +++ b/frontend/src/lib/utils.test.ts @@ -1,6 +1,7 @@ -import { dayjs } from 'lib/dayjs' import tk from 'timekeeper' +import { dayjs } from 'lib/dayjs' + import { ElementType, EventType, PropertyType, TimeUnitType } from '~/types' import { diff --git a/frontend/src/lib/utils.tsx b/frontend/src/lib/utils.tsx index f421aa5275..4b28502a6b 100644 --- a/frontend/src/lib/utils.tsx +++ b/frontend/src/lib/utils.tsx @@ -1,9 +1,10 @@ import equal from 'fast-deep-equal' +import posthog from 'posthog-js' +import { CSSProperties } from 'react' + import { tagColors } from 'lib/colors' import { WEBHOOK_SERVICES } from 'lib/constants' import { Dayjs, dayjs } from 'lib/dayjs' -import posthog from 'posthog-js' -import { CSSProperties } from 'react' import { ActionType, diff --git a/frontend/src/lib/utils/autocapture-previews.tsx b/frontend/src/lib/utils/autocapture-previews.tsx index c902889597..645e72da1b 100644 --- a/frontend/src/lib/utils/autocapture-previews.tsx +++ b/frontend/src/lib/utils/autocapture-previews.tsx @@ -1,6 +1,7 @@ -import { Tooltip } from 'lib/lemon-ui/Tooltip' import posthog from 'posthog-js' +import { Tooltip } from 'lib/lemon-ui/Tooltip' + import { ElementType } from '~/types' interface AutocapturedImage { diff --git a/frontend/src/lib/utils/concurrencyController.ts b/frontend/src/lib/utils/concurrencyController.ts index 7326165b62..bcb2e76fce 100644 --- a/frontend/src/lib/utils/concurrencyController.ts +++ b/frontend/src/lib/utils/concurrencyController.ts @@ -1,4 +1,5 @@ import FastPriorityQueue from 'fastpriorityqueue' + import { promiseResolveReject } from 'lib/utils' // Note that this file also exists in the plugin-server, please keep them in sync as the tests only exist for this version diff --git a/frontend/src/lib/utils/d3Utils.ts b/frontend/src/lib/utils/d3Utils.ts index 4c2814e612..c3a6d94c63 100644 --- a/frontend/src/lib/utils/d3Utils.ts +++ b/frontend/src/lib/utils/d3Utils.ts @@ -1,4 +1,5 @@ import * as d3 from 'd3' + import { D3Selector, D3Transition } from 'lib/hooks/useD3' import { INITIAL_CONFIG } from 'scenes/insights/views/Histogram/histogramUtils' diff --git a/frontend/src/lib/utils/dateRangeUtils.test.ts b/frontend/src/lib/utils/dateRangeUtils.test.ts index 2260e483bf..faf687b932 100644 --- a/frontend/src/lib/utils/dateRangeUtils.test.ts +++ b/frontend/src/lib/utils/dateRangeUtils.test.ts @@ -1,4 +1,5 @@ import { dayjs } from 'lib/dayjs' + import { getConstrainedWeekRange } from './dateTimeUtils' describe('getConstrainedWeekRange', () => { diff --git a/frontend/src/lib/utils/deleteWithUndo.tsx b/frontend/src/lib/utils/deleteWithUndo.tsx index 3b9188eca7..0709f8b6ae 100644 --- a/frontend/src/lib/utils/deleteWithUndo.tsx +++ b/frontend/src/lib/utils/deleteWithUndo.tsx @@ -1,4 +1,5 @@ import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { deleteFromTree, refreshTreeItem } from '~/layout/panel-layout/ProjectTree/projectTreeLogic' diff --git a/frontend/src/lib/utils/eventUsageLogic.ts b/frontend/src/lib/utils/eventUsageLogic.ts index d1b8ec565c..148e4f403d 100644 --- a/frontend/src/lib/utils/eventUsageLogic.ts +++ b/frontend/src/lib/utils/eventUsageLogic.ts @@ -1,14 +1,15 @@ import { actions, connect, kea, listeners, path } from 'kea' +import posthog from 'posthog-js' + import { BarStatus, ResultType } from 'lib/components/CommandBar/types' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import type { Dayjs } from 'lib/dayjs' import { now } from 'lib/dayjs' import { TimeToSeeDataPayload } from 'lib/internalMetrics' import { objectClean } from 'lib/utils' -import posthog from 'posthog-js' +import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { BillingUsageInteractionProps } from 'scenes/billing/types' import { SharedMetric } from 'scenes/experiments/SharedMetrics/sharedMetricLogic' -import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { NewSurvey, SurveyTemplateType } from 'scenes/surveys/constants' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/lib/utils/kea-logic-builders.ts b/frontend/src/lib/utils/kea-logic-builders.ts index 92c4ff8fb7..30c7d990f2 100644 --- a/frontend/src/lib/utils/kea-logic-builders.ts +++ b/frontend/src/lib/utils/kea-logic-builders.ts @@ -1,4 +1,5 @@ -import { afterMount, BuiltLogic } from 'kea' +import { BuiltLogic, afterMount } from 'kea' + /** * Some kea logics are used heavily across multiple areas so we keep it mounted once loaded with this trick. */ diff --git a/frontend/src/lib/utils/permissioning.ts b/frontend/src/lib/utils/permissioning.ts index 389e5ae230..10a008994c 100644 --- a/frontend/src/lib/utils/permissioning.ts +++ b/frontend/src/lib/utils/permissioning.ts @@ -1,9 +1,9 @@ import { EitherMemberType, ExplicitTeamMemberType, + OrganizationBasicType, OrganizationMemberType, UserType, - OrganizationBasicType, } from '../../types' import { EitherMembershipLevel, OrganizationMembershipLevel, TeamMembershipLevel } from '../constants' diff --git a/frontend/src/loadPostHogJS.tsx b/frontend/src/loadPostHogJS.tsx index 313ba09796..ce51940b41 100644 --- a/frontend/src/loadPostHogJS.tsx +++ b/frontend/src/loadPostHogJS.tsx @@ -1,7 +1,9 @@ +import posthog, { CaptureResult } from 'posthog-js' + import { lemonToast } from '@posthog/lemon-ui' + import { FEATURE_FLAGS } from 'lib/constants' import { getISOWeekString, inStorybook, inStorybookTestRunner } from 'lib/utils' -import posthog, { CaptureResult } from 'posthog-js' interface WindowWithCypressCaptures extends Window { // our Cypress tests will use this to check what events were sent to PostHog diff --git a/frontend/src/mocks/handlers.ts b/frontend/src/mocks/handlers.ts index 9f20a8774c..927ae25602 100644 --- a/frontend/src/mocks/handlers.ts +++ b/frontend/src/mocks/handlers.ts @@ -11,6 +11,7 @@ import { MOCK_PERSON_PROPERTIES, MOCK_SECOND_ORGANIZATION_MEMBER, } from 'lib/api.mock' + import { ResponseComposition, RestContext, RestRequest } from 'msw' import { SharingConfigurationType } from '~/types' @@ -20,7 +21,7 @@ import { billingJson } from './fixtures/_billing' import _hogFunctionTemplatesDestinations from './fixtures/_hogFunctionTemplatesDestinations.json' import _hogFunctionTemplatesTransformations from './fixtures/_hogFunctionTemplatesTransformations.json' import * as statusPageAllOK from './fixtures/_status_page_all_ok.json' -import { Mocks, MockSignature, mocksToHandlers } from './utils' +import { MockSignature, Mocks, mocksToHandlers } from './utils' export const EMPTY_PAGINATED_RESPONSE = { count: 0, results: [] as any[], next: null, previous: null } export const toPaginatedResponse = (results: any[]): typeof EMPTY_PAGINATED_RESPONSE => ({ diff --git a/frontend/src/models/actionsModel.ts b/frontend/src/models/actionsModel.ts index fae538ed68..ea13325fd3 100644 --- a/frontend/src/models/actionsModel.ts +++ b/frontend/src/models/actionsModel.ts @@ -1,5 +1,6 @@ import { connect, events, kea, path, props, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { permanentlyMount } from 'lib/utils/kea-logic-builders' import { isAuthenticatedTeam, teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/models/annotationsModel.ts b/frontend/src/models/annotationsModel.ts index f840f12e8f..2facb8e7c0 100644 --- a/frontend/src/models/annotationsModel.ts +++ b/frontend/src/models/annotationsModel.ts @@ -1,5 +1,6 @@ import { actions, afterMount, connect, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { dayjsUtcToTimezone } from 'lib/dayjs' import { deleteWithUndo } from 'lib/utils/deleteWithUndo' diff --git a/frontend/src/models/cohortsModel.test.ts b/frontend/src/models/cohortsModel.test.ts index 5d3121ef27..f35f500333 100644 --- a/frontend/src/models/cohortsModel.test.ts +++ b/frontend/src/models/cohortsModel.test.ts @@ -1,5 +1,6 @@ import { router } from 'kea-router' import { expectLogic } from 'kea-test-utils' + import api from 'lib/api' import { urls } from 'scenes/urls' diff --git a/frontend/src/models/cohortsModel.ts b/frontend/src/models/cohortsModel.ts index 0a9de7307d..21485c0313 100644 --- a/frontend/src/models/cohortsModel.ts +++ b/frontend/src/models/cohortsModel.ts @@ -1,9 +1,10 @@ import { actions, afterMount, beforeUnmount, connect, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { router } from 'kea-router' +import { v4 as uuidv4 } from 'uuid' + import api, { CountedPaginatedResponse } from 'lib/api' import { deleteWithUndo } from 'lib/utils/deleteWithUndo' -import { v4 as uuidv4 } from 'uuid' import { permanentlyMount } from 'lib/utils/kea-logic-builders' import { COHORT_EVENT_TYPES_WITH_EXPLICIT_DATETIME } from 'scenes/cohorts/CohortFilters/constants' import { BehavioralFilterKey } from 'scenes/cohorts/CohortFilters/types' diff --git a/frontend/src/models/dashboardsModel.test.ts b/frontend/src/models/dashboardsModel.test.ts index 27bec37777..525913469d 100644 --- a/frontend/src/models/dashboardsModel.test.ts +++ b/frontend/src/models/dashboardsModel.test.ts @@ -1,4 +1,5 @@ import { expectLogic } from 'kea-test-utils' + import { DashboardPrivilegeLevel, DashboardRestrictionLevel } from 'lib/constants' import { useMocks } from '~/mocks/jest' diff --git a/frontend/src/models/dashboardsModel.tsx b/frontend/src/models/dashboardsModel.tsx index d9bd2e8350..4f042f635b 100644 --- a/frontend/src/models/dashboardsModel.tsx +++ b/frontend/src/models/dashboardsModel.tsx @@ -1,6 +1,7 @@ import { actions, afterMount, connect, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { router } from 'kea-router' + import api, { PaginatedResponse } from 'lib/api' import { GENERATED_DASHBOARD_PREFIX } from 'lib/constants' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' @@ -10,7 +11,7 @@ import { permanentlyMount } from 'lib/utils/kea-logic-builders' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' -import { activationLogic, ActivationTask } from '~/layout/navigation-3000/sidepanel/panels/activation/activationLogic' +import { ActivationTask, activationLogic } from '~/layout/navigation-3000/sidepanel/panels/activation/activationLogic' import { deleteFromTree, refreshTreeItem } from '~/layout/panel-layout/ProjectTree/projectTreeLogic' import { tagsModel } from '~/models/tagsModel' import { getQueryBasedDashboard } from '~/queries/nodes/InsightViz/utils' diff --git a/frontend/src/models/groupPropertiesModel.ts b/frontend/src/models/groupPropertiesModel.ts index fa30b158f4..f3e7a63ddf 100644 --- a/frontend/src/models/groupPropertiesModel.ts +++ b/frontend/src/models/groupPropertiesModel.ts @@ -1,5 +1,6 @@ import { connect, events, kea, path, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { groupsAccessLogic } from 'lib/introductions/groupsAccessLogic' import { projectLogic } from 'scenes/projectLogic' diff --git a/frontend/src/models/groupsModel.ts b/frontend/src/models/groupsModel.ts index 52ebd7cca2..3129fbdf82 100644 --- a/frontend/src/models/groupsModel.ts +++ b/frontend/src/models/groupsModel.ts @@ -1,15 +1,17 @@ import { afterMount, connect, kea, listeners, path, selectors } from 'kea' import { loaders } from 'kea-loaders' import { subscriptions } from 'kea-subscriptions' + import api from 'lib/api' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' -import { groupsAccessLogic, GroupsAccessStatus } from 'lib/introductions/groupsAccessLogic' +import { GroupsAccessStatus, groupsAccessLogic } from 'lib/introductions/groupsAccessLogic' import { wordPluralize } from 'lib/utils' import { projectLogic } from 'scenes/projectLogic' import { GroupType, GroupTypeIndex } from '~/types' import type { groupsModelType } from './groupsModelType' + export interface Noun { singular: string plural: string diff --git a/frontend/src/models/insightsModel.tsx b/frontend/src/models/insightsModel.tsx index 25f4d9f7e1..dc5fd3b23f 100644 --- a/frontend/src/models/insightsModel.tsx +++ b/frontend/src/models/insightsModel.tsx @@ -1,5 +1,7 @@ -import { LemonDialog, LemonInput } from '@posthog/lemon-ui' import { actions, connect, kea, listeners, path } from 'kea' + +import { LemonDialog, LemonInput } from '@posthog/lemon-ui' + import { LemonField } from 'lib/lemon-ui/LemonField' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' import { insightsApi } from 'scenes/insights/utils/api' diff --git a/frontend/src/models/notebooksModel.ts b/frontend/src/models/notebooksModel.ts index 59361189d3..b8aa3fd68f 100644 --- a/frontend/src/models/notebooksModel.ts +++ b/frontend/src/models/notebooksModel.ts @@ -1,14 +1,17 @@ -import { actions, BuiltLogic, connect, kea, listeners, path, reducers } from 'kea' +import { BuiltLogic, actions, connect, kea, listeners, path, reducers } from 'kea' import { loaders } from 'kea-loaders' import { router } from 'kea-router' -import api from 'lib/api' -import { deleteWithUndo } from 'lib/utils/deleteWithUndo' import posthog from 'posthog-js' + +import api from 'lib/api' +import { EditorFocusPosition, JSONContent } from 'lib/components/RichContentEditor/types' +import { deleteWithUndo } from 'lib/utils/deleteWithUndo' import { notebookLogic } from 'scenes/notebooks/Notebook/notebookLogic' import type { notebookLogicType } from 'scenes/notebooks/Notebook/notebookLogicType' -import { defaultNotebookContent } from 'scenes/notebooks/utils' import { notebookPanelLogic } from 'scenes/notebooks/NotebookPanel/notebookPanelLogic' import { LOCAL_NOTEBOOK_TEMPLATES } from 'scenes/notebooks/NotebookTemplates/notebookTemplates' +import { NotebookListItemType, NotebookNodeType, NotebookTarget } from 'scenes/notebooks/types' +import { defaultNotebookContent } from 'scenes/notebooks/utils' import { projectLogic } from 'scenes/projectLogic' import { urls } from 'scenes/urls' @@ -17,8 +20,6 @@ import { InsightVizNode, Node } from '~/queries/schema/schema-general' import { DashboardType, QueryBasedInsightModel } from '~/types' import type { notebooksModelType } from './notebooksModelType' -import { EditorFocusPosition, JSONContent } from 'lib/components/RichContentEditor/types' -import { NotebookListItemType, NotebookNodeType, NotebookTarget } from 'scenes/notebooks/types' export const SCRATCHPAD_NOTEBOOK: NotebookListItemType = { id: 'scratchpad', diff --git a/frontend/src/models/propertyDefinitionsModel.test.ts b/frontend/src/models/propertyDefinitionsModel.test.ts index 6543579b6d..996814d841 100644 --- a/frontend/src/models/propertyDefinitionsModel.test.ts +++ b/frontend/src/models/propertyDefinitionsModel.test.ts @@ -1,4 +1,5 @@ import { expectLogic, partial } from 'kea-test-utils' + import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { useMocks } from '~/mocks/jest' diff --git a/frontend/src/models/propertyDefinitionsModel.ts b/frontend/src/models/propertyDefinitionsModel.ts index 2afc1a7a2f..ff6eb2176f 100644 --- a/frontend/src/models/propertyDefinitionsModel.ts +++ b/frontend/src/models/propertyDefinitionsModel.ts @@ -1,4 +1,5 @@ import { actions, connect, kea, listeners, path, reducers, selectors } from 'kea' + import api, { ApiMethodOptions, CountedPaginatedResponse } from 'lib/api' import { TaxonomicFilterValue } from 'lib/components/TaxonomicFilter/types' import { dayjs } from 'lib/dayjs' diff --git a/frontend/src/models/tagsModel.ts b/frontend/src/models/tagsModel.ts index 166cd44e54..56e9d25fd2 100644 --- a/frontend/src/models/tagsModel.ts +++ b/frontend/src/models/tagsModel.ts @@ -1,5 +1,6 @@ import { connect, kea, path } from 'kea' import { lazyLoaders } from 'kea-loaders' + import api from 'lib/api' import { organizationLogic } from 'scenes/organizationLogic' diff --git a/frontend/src/queries/Query/Query.tsx b/frontend/src/queries/Query/Query.tsx index 0aa987cfc7..3ef2008b9a 100644 --- a/frontend/src/queries/Query/Query.tsx +++ b/frontend/src/queries/Query/Query.tsx @@ -1,22 +1,17 @@ -import { LemonDivider } from 'lib/lemon-ui/LemonDivider' -import { - RevenueAnalyticsGrowthRateNode, - RevenueAnalyticsMetricsNode, - RevenueAnalyticsOverviewNode, - RevenueAnalyticsRevenueNode, - RevenueAnalyticsTopCustomersNode, -} from 'products/revenue_analytics/frontend/nodes' +import { BuiltLogic, LogicWrapper } from 'kea' import { useEffect, useState } from 'react' + +import { LemonDivider } from 'lib/lemon-ui/LemonDivider' import { HogDebug } from 'scenes/debug/HogDebug' import { WebActiveHoursHeatmap } from 'scenes/web-analytics/WebActiveHoursHeatmap/WebActiveHoursHeatmap' import { ErrorBoundary } from '~/layout/ErrorBoundary' +import { QueryEditor } from '~/queries/QueryEditor/QueryEditor' import { DataNode } from '~/queries/nodes/DataNode/DataNode' import { DataTable } from '~/queries/nodes/DataTable/DataTable' import { InsightViz, insightVizDataNodeKey } from '~/queries/nodes/InsightViz/InsightViz' import { WebOverview } from '~/queries/nodes/WebOverview/WebOverview' import { WebVitals } from '~/queries/nodes/WebVitals/WebVitals' -import { QueryEditor } from '~/queries/QueryEditor/QueryEditor' import { AnyResponseType, DashboardFilter, @@ -28,6 +23,14 @@ import { } from '~/queries/schema/schema-general' import { QueryContext } from '~/queries/types' +import { + RevenueAnalyticsGrowthRateNode, + RevenueAnalyticsMetricsNode, + RevenueAnalyticsOverviewNode, + RevenueAnalyticsRevenueNode, + RevenueAnalyticsTopCustomersNode, +} from 'products/revenue_analytics/frontend/nodes' + import { DataTableVisualization } from '../nodes/DataVisualization/DataVisualization' import { SavedInsight } from '../nodes/SavedInsight/SavedInsight' import { WebVitalsPathBreakdown } from '../nodes/WebVitals/WebVitalsPathBreakdown' @@ -47,7 +50,6 @@ import { isWebVitalsPathBreakdownQuery, isWebVitalsQuery, } from '../utils' -import { BuiltLogic, LogicWrapper } from 'kea' export interface QueryProps { /** An optional key to identify the query */ diff --git a/frontend/src/queries/QueryEditor/QueryEditor.tsx b/frontend/src/queries/QueryEditor/QueryEditor.tsx index d8f2155532..cb43c9d140 100644 --- a/frontend/src/queries/QueryEditor/QueryEditor.tsx +++ b/frontend/src/queries/QueryEditor/QueryEditor.tsx @@ -1,10 +1,11 @@ import clsx from 'clsx' import { useActions, useValues } from 'kea' +import { useState } from 'react' +import { AutoSizer } from 'react-virtualized/dist/es/AutoSizer' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { Link } from 'lib/lemon-ui/Link' import { CodeEditor } from 'lib/monaco/CodeEditor' -import { useState } from 'react' -import { AutoSizer } from 'react-virtualized/dist/es/AutoSizer' import { urls } from 'scenes/urls' import { queryEditorLogic } from '~/queries/QueryEditor/queryEditorLogic' diff --git a/frontend/src/queries/QueryEditor/queryEditorLogic.ts b/frontend/src/queries/QueryEditor/queryEditorLogic.ts index 3b559ee284..9ff51e2050 100644 --- a/frontend/src/queries/QueryEditor/queryEditorLogic.ts +++ b/frontend/src/queries/QueryEditor/queryEditorLogic.ts @@ -1,4 +1,5 @@ import { actions, kea, key, listeners, path, props, propsChanged, reducers, selectors } from 'kea' + import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' import { QueryEditorProps } from '~/queries/QueryEditor/QueryEditor' diff --git a/frontend/src/queries/nodes/DataNode/DataNode.stories.tsx b/frontend/src/queries/nodes/DataNode/DataNode.stories.tsx index 4868de5e4f..46ba2188ef 100644 --- a/frontend/src/queries/nodes/DataNode/DataNode.stories.tsx +++ b/frontend/src/queries/nodes/DataNode/DataNode.stories.tsx @@ -1,8 +1,8 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' import { mswDecorator } from '~/mocks/browser' -import { examples } from '~/queries/examples' import { Query } from '~/queries/Query/Query' +import { examples } from '~/queries/examples' import events from './__mocks__/EventsNode.json' import persons from './__mocks__/PersonsNode.json' diff --git a/frontend/src/queries/nodes/DataNode/DataNode.tsx b/frontend/src/queries/nodes/DataNode/DataNode.tsx index f3e57bff07..6ab915ac06 100644 --- a/frontend/src/queries/nodes/DataNode/DataNode.tsx +++ b/frontend/src/queries/nodes/DataNode/DataNode.tsx @@ -1,9 +1,10 @@ import { BuiltLogic, LogicWrapper, useValues } from 'kea' +import { useState } from 'react' +import { AutoSizer } from 'react-virtualized/dist/es/AutoSizer' + import { Spinner } from 'lib/lemon-ui/Spinner/Spinner' import { useAttachedLogic } from 'lib/logic/scenes/useAttachedLogic' import { CodeEditor } from 'lib/monaco/CodeEditor' -import { useState } from 'react' -import { AutoSizer } from 'react-virtualized/dist/es/AutoSizer' import { dataNodeLogic } from '~/queries/nodes/DataNode/dataNodeLogic' import { OpenEditorButton } from '~/queries/nodes/Node/OpenEditorButton' diff --git a/frontend/src/queries/nodes/DataNode/ElapsedTime.tsx b/frontend/src/queries/nodes/DataNode/ElapsedTime.tsx index 84369193e4..e379837a5a 100644 --- a/frontend/src/queries/nodes/DataNode/ElapsedTime.tsx +++ b/frontend/src/queries/nodes/DataNode/ElapsedTime.tsx @@ -1,8 +1,9 @@ import clsx from 'clsx' import { useValues } from 'kea' -import { Popover } from 'lib/lemon-ui/Popover' import { useState } from 'react' +import { Popover } from 'lib/lemon-ui/Popover' + import { dataNodeLogic } from '~/queries/nodes/DataNode/dataNodeLogic' import { QueryTiming } from '~/queries/schema/schema-general' diff --git a/frontend/src/queries/nodes/DataNode/LoadNext.tsx b/frontend/src/queries/nodes/DataNode/LoadNext.tsx index ad858dd1b1..0b215925b2 100644 --- a/frontend/src/queries/nodes/DataNode/LoadNext.tsx +++ b/frontend/src/queries/nodes/DataNode/LoadNext.tsx @@ -1,7 +1,8 @@ import { useActions, useValues } from 'kea' +import { useMemo } from 'react' + import { TZLabel } from 'lib/components/TZLabel' import { LemonButton } from 'lib/lemon-ui/LemonButton' -import { useMemo } from 'react' import { dataNodeLogic } from '~/queries/nodes/DataNode/dataNodeLogic' import { DataNode } from '~/queries/schema/schema-general' diff --git a/frontend/src/queries/nodes/DataNode/Reload.tsx b/frontend/src/queries/nodes/DataNode/Reload.tsx index 74a1cda5ac..8de9e3843e 100644 --- a/frontend/src/queries/nodes/DataNode/Reload.tsx +++ b/frontend/src/queries/nodes/DataNode/Reload.tsx @@ -1,7 +1,8 @@ import { useActions, useValues } from 'kea' -import { IconRefresh } from 'lib/lemon-ui/icons' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { Spinner } from 'lib/lemon-ui/Spinner' +import { IconRefresh } from 'lib/lemon-ui/icons' import { dataNodeCollectionLogic } from '~/queries/nodes/DataNode/dataNodeCollectionLogic' import { dataNodeLogic } from '~/queries/nodes/DataNode/dataNodeLogic' diff --git a/frontend/src/queries/nodes/DataNode/TestAccountFilters.tsx b/frontend/src/queries/nodes/DataNode/TestAccountFilters.tsx index d742d1863e..d7a6b32253 100644 --- a/frontend/src/queries/nodes/DataNode/TestAccountFilters.tsx +++ b/frontend/src/queries/nodes/DataNode/TestAccountFilters.tsx @@ -1,4 +1,5 @@ import { useActions, useValues } from 'kea' + import { TestAccountFilterSwitch } from 'lib/components/TestAccountFiltersSwitch' import { filterTestAccountsDefaultsLogic } from 'scenes/settings/environment/filterTestAccountDefaultsLogic' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/queries/nodes/DataNode/dataNodeLogic.queryCancellation.test.ts b/frontend/src/queries/nodes/DataNode/dataNodeLogic.queryCancellation.test.ts index ba43bd3911..c5328e0784 100644 --- a/frontend/src/queries/nodes/DataNode/dataNodeLogic.queryCancellation.test.ts +++ b/frontend/src/queries/nodes/DataNode/dataNodeLogic.queryCancellation.test.ts @@ -1,4 +1,5 @@ import { expectLogic } from 'kea-test-utils' + import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import * as libUtils from 'lib/utils' diff --git a/frontend/src/queries/nodes/DataNode/dataNodeLogic.ts b/frontend/src/queries/nodes/DataNode/dataNodeLogic.ts index a90fdb5350..d790bb7b09 100644 --- a/frontend/src/queries/nodes/DataNode/dataNodeLogic.ts +++ b/frontend/src/queries/nodes/DataNode/dataNodeLogic.ts @@ -15,6 +15,7 @@ import { } from 'kea' import { loaders } from 'kea-loaders' import { subscriptions } from 'kea-subscriptions' + import api, { ApiMethodOptions } from 'lib/api' import { FEATURE_FLAGS } from 'lib/constants' import { dayjs } from 'lib/dayjs' @@ -23,10 +24,11 @@ import { shouldCancelQuery, uuid } from 'lib/utils' import { ConcurrencyController } from 'lib/utils/concurrencyController' import { UNSAVED_INSIGHT_MIN_REFRESH_INTERVAL_MINUTES } from 'scenes/insights/insightLogic' import { compareDataNodeQuery, haveVariablesOrFiltersChanged, validateQuery } from 'scenes/insights/utils/queryUtils' +import { sceneLogic } from 'scenes/sceneLogic' import { teamLogic } from 'scenes/teamLogic' import { userLogic } from 'scenes/userLogic' -import { dataNodeCollectionLogic, DataNodeCollectionProps } from '~/queries/nodes/DataNode/dataNodeCollectionLogic' +import { DataNodeCollectionProps, dataNodeCollectionLogic } from '~/queries/nodes/DataNode/dataNodeCollectionLogic' import { removeExpressionComment } from '~/queries/nodes/DataTable/utils' import { performQuery } from '~/queries/query' import { @@ -69,7 +71,6 @@ import { import { TeamType } from '~/types' import type { dataNodeLogicType } from './dataNodeLogicType' -import { sceneLogic } from 'scenes/sceneLogic' export interface DataNodeLogicProps { key: string diff --git a/frontend/src/queries/nodes/DataTable/BackToSource.tsx b/frontend/src/queries/nodes/DataTable/BackToSource.tsx index 94b8a4e684..cb5c1c885a 100644 --- a/frontend/src/queries/nodes/DataTable/BackToSource.tsx +++ b/frontend/src/queries/nodes/DataTable/BackToSource.tsx @@ -1,5 +1,6 @@ import { useValues } from 'kea' import { router } from 'kea-router' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { summarizeInsightQuery } from 'scenes/insights/summarizeInsight' import { mathsLogic } from 'scenes/trends/mathsLogic' diff --git a/frontend/src/queries/nodes/DataTable/ColumnConfigurator/ColumnConfigurator.tsx b/frontend/src/queries/nodes/DataTable/ColumnConfigurator/ColumnConfigurator.tsx index f82629dcb8..b4bc272620 100644 --- a/frontend/src/queries/nodes/DataTable/ColumnConfigurator/ColumnConfigurator.tsx +++ b/frontend/src/queries/nodes/DataTable/ColumnConfigurator/ColumnConfigurator.tsx @@ -4,21 +4,23 @@ import { DndContext } from '@dnd-kit/core' import { restrictToParentElement, restrictToVerticalAxis } from '@dnd-kit/modifiers' import { SortableContext, useSortable, verticalListSortingStrategy } from '@dnd-kit/sortable' import { CSS } from '@dnd-kit/utilities' -import { IconPencil, IconX } from '@posthog/icons' import { BindLogic, useActions, useValues } from 'kea' +import { useState } from 'react' +import { AutoSizer } from 'react-virtualized/dist/es/AutoSizer' + +import { IconPencil, IconX } from '@posthog/icons' + import { PropertyFilterIcon } from 'lib/components/PropertyFilters/components/PropertyFilterIcon' import { PropertyKeyInfo } from 'lib/components/PropertyKeyInfo' import { RestrictionScope, useRestrictedArea } from 'lib/components/RestrictedArea' import { TaxonomicFilter } from 'lib/components/TaxonomicFilter/TaxonomicFilter' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { TeamMembershipLevel } from 'lib/constants' -import { IconTuning, SortableDragIcon } from 'lib/lemon-ui/icons' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonCheckbox } from 'lib/lemon-ui/LemonCheckbox' import { LemonModal } from 'lib/lemon-ui/LemonModal' import { Tooltip } from 'lib/lemon-ui/Tooltip' -import { useState } from 'react' -import { AutoSizer } from 'react-virtualized/dist/es/AutoSizer' +import { IconTuning, SortableDragIcon } from 'lib/lemon-ui/icons' import { dataTableLogic } from '~/queries/nodes/DataTable/dataTableLogic' import { DataTableNode } from '~/queries/schema/schema-general' @@ -32,7 +34,7 @@ import { import { GroupTypeIndex, PropertyFilterType } from '~/types' import { defaultDataTableColumns, extractExpressionComment, removeExpressionComment } from '../utils' -import { columnConfiguratorLogic, ColumnConfiguratorLogicProps } from './columnConfiguratorLogic' +import { ColumnConfiguratorLogicProps, columnConfiguratorLogic } from './columnConfiguratorLogic' let uniqueNode = 0 diff --git a/frontend/src/queries/nodes/DataTable/ColumnConfigurator/columnConfiguratorLogic.tsx b/frontend/src/queries/nodes/DataTable/ColumnConfigurator/columnConfiguratorLogic.tsx index 2f7f045af8..3e3c17ced2 100644 --- a/frontend/src/queries/nodes/DataTable/ColumnConfigurator/columnConfiguratorLogic.tsx +++ b/frontend/src/queries/nodes/DataTable/ColumnConfigurator/columnConfiguratorLogic.tsx @@ -1,4 +1,5 @@ import { actions, connect, kea, key, listeners, path, props, propsChanged, reducers, selectors } from 'kea' + import api from 'lib/api' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' diff --git a/frontend/src/queries/nodes/DataTable/DataTable.tsx b/frontend/src/queries/nodes/DataTable/DataTable.tsx index 0331339168..c2f9b1200c 100644 --- a/frontend/src/queries/nodes/DataTable/DataTable.tsx +++ b/frontend/src/queries/nodes/DataTable/DataTable.tsx @@ -2,33 +2,37 @@ import './DataTable.scss' import clsx from 'clsx' import { BindLogic, BuiltLogic, LogicWrapper, useActions, useValues } from 'kea' +import { useCallback, useState } from 'react' + import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { TaxonomicPopover } from 'lib/components/TaxonomicPopover/TaxonomicPopover' import { useFeatureFlag } from 'lib/hooks/useFeatureFlag' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonDivider } from 'lib/lemon-ui/LemonDivider' import { LemonTable, LemonTableColumn } from 'lib/lemon-ui/LemonTable' -import { useCallback, useState } from 'react' +import { useAttachedLogic } from 'lib/logic/scenes/useAttachedLogic' import { EventDetails } from 'scenes/activity/explore/EventDetails' +import { groupViewLogic } from 'scenes/groups/groupViewLogic' import { InsightEmptyState, InsightErrorState } from 'scenes/insights/EmptyStates' import { PersonDeleteModal } from 'scenes/persons/PersonDeleteModal' +import { createMarketingAnalyticsOrderBy } from 'scenes/web-analytics/tabs/marketing-analytics/frontend/logic/utils' -import { dataNodeLogic, DataNodeLogicProps } from '~/queries/nodes/DataNode/dataNodeLogic' import { DateRange } from '~/queries/nodes/DataNode/DateRange' import { ElapsedTime } from '~/queries/nodes/DataNode/ElapsedTime' import { LoadNext } from '~/queries/nodes/DataNode/LoadNext' import { Reload } from '~/queries/nodes/DataNode/Reload' import { TestAccountFilters } from '~/queries/nodes/DataNode/TestAccountFilters' +import { DataNodeLogicProps, dataNodeLogic } from '~/queries/nodes/DataNode/dataNodeLogic' import { BackToSource } from '~/queries/nodes/DataTable/BackToSource' import { ColumnConfigurator } from '~/queries/nodes/DataTable/ColumnConfigurator/ColumnConfigurator' import { DataTableExport } from '~/queries/nodes/DataTable/DataTableExport' -import { dataTableLogic, DataTableLogicProps, DataTableRow } from '~/queries/nodes/DataTable/dataTableLogic' import { EventRowActions } from '~/queries/nodes/DataTable/EventRowActions' import { InsightActorsQueryOptions } from '~/queries/nodes/DataTable/InsightActorsQueryOptions' +import { SavedQueries } from '~/queries/nodes/DataTable/SavedQueries' +import { DataTableLogicProps, DataTableRow, dataTableLogic } from '~/queries/nodes/DataTable/dataTableLogic' import { QueryFeature } from '~/queries/nodes/DataTable/queryFeatures' import { getContextColumn, renderColumn } from '~/queries/nodes/DataTable/renderColumn' import { renderColumnMeta } from '~/queries/nodes/DataTable/renderColumnMeta' -import { SavedQueries } from '~/queries/nodes/DataTable/SavedQueries' import { extractExpressionComment, getDataNodeDefaultColumns, @@ -75,9 +79,6 @@ import { EventType, InsightLogicProps } from '~/types' import { GroupPropertyFilters } from '../GroupsQuery/GroupPropertyFilters' import { GroupsSearch } from '../GroupsQuery/GroupsSearch' import { DataTableOpenEditor } from './DataTableOpenEditor' -import { createMarketingAnalyticsOrderBy } from 'scenes/web-analytics/tabs/marketing-analytics/frontend/logic/utils' -import { groupViewLogic } from 'scenes/groups/groupViewLogic' -import { useAttachedLogic } from 'lib/logic/scenes/useAttachedLogic' export enum ColumnFeature { canSort = 'canSort', diff --git a/frontend/src/queries/nodes/DataTable/DataTableExport.tsx b/frontend/src/queries/nodes/DataTable/DataTableExport.tsx index 3a5af017d9..d0aa67895f 100644 --- a/frontend/src/queries/nodes/DataTable/DataTableExport.tsx +++ b/frontend/src/queries/nodes/DataTable/DataTableExport.tsx @@ -1,12 +1,16 @@ +import { useActions, useValues } from 'kea' +import Papa from 'papaparse' + import { IconDownload } from '@posthog/icons' import { LemonButton, LemonDialog, LemonInput, LemonMenu, lemonToast } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { TriggerExportProps } from 'lib/components/ExportButton/exporter' import { exportsLogic } from 'lib/components/ExportButton/exportsLogic' +import { PERSON_DEFAULT_DISPLAY_NAME_PROPERTIES } from 'lib/constants' import { LemonField } from 'lib/lemon-ui/LemonField' import { copyToClipboard } from 'lib/utils/copyToClipboard' -import Papa from 'papaparse' import { asDisplay } from 'scenes/persons/person-utils' +import { teamLogic } from 'scenes/teamLogic' import { shouldOptimizeForExport, @@ -30,9 +34,7 @@ import { } from '~/queries/utils' import { ExporterFormat } from '~/types' -import { dataTableLogic, DataTableRow } from './dataTableLogic' -import { teamLogic } from 'scenes/teamLogic' -import { PERSON_DEFAULT_DISPLAY_NAME_PROPERTIES } from 'lib/constants' +import { DataTableRow, dataTableLogic } from './dataTableLogic' // Sync with posthog/hogql/constants.py export const MAX_SELECT_RETURNED_ROWS = 50000 diff --git a/frontend/src/queries/nodes/DataTable/DataTableOpenEditor.tsx b/frontend/src/queries/nodes/DataTable/DataTableOpenEditor.tsx index d0842af2f8..5b3d3c4c90 100644 --- a/frontend/src/queries/nodes/DataTable/DataTableOpenEditor.tsx +++ b/frontend/src/queries/nodes/DataTable/DataTableOpenEditor.tsx @@ -1,7 +1,9 @@ -import { LemonButton } from '@posthog/lemon-ui' import { useValues } from 'kea' -import { IconTableChart } from 'lib/lemon-ui/icons' + +import { LemonButton } from '@posthog/lemon-ui' + import { LemonMenuOverlay } from 'lib/lemon-ui/LemonMenu/LemonMenu' +import { IconTableChart } from 'lib/lemon-ui/icons' import { urls } from 'scenes/urls' import { DataTableNode } from '~/queries/schema/schema-general' diff --git a/frontend/src/queries/nodes/DataTable/EventRowActions.tsx b/frontend/src/queries/nodes/DataTable/EventRowActions.tsx index cc140ae5f8..3075d7460e 100644 --- a/frontend/src/queries/nodes/DataTable/EventRowActions.tsx +++ b/frontend/src/queries/nodes/DataTable/EventRowActions.tsx @@ -1,11 +1,13 @@ +import React from 'react' + import { IconAI, IconWarning } from '@posthog/icons' + import ViewRecordingButton from 'lib/components/ViewRecordingButton/ViewRecordingButton' -import { IconLink } from 'lib/lemon-ui/icons' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { More } from 'lib/lemon-ui/LemonButton/More' +import { IconLink } from 'lib/lemon-ui/icons' import { copyToClipboard } from 'lib/utils/copyToClipboard' import { getCurrentTeamId } from 'lib/utils/getAppContext' -import React from 'react' import { createActionFromEvent } from 'scenes/activity/explore/createActionFromEvent' import { insightUrlForEvent } from 'scenes/insights/utils' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/queries/nodes/DataTable/InsightActorsQueryOptions.tsx b/frontend/src/queries/nodes/DataTable/InsightActorsQueryOptions.tsx index 5bee75a9f7..19ed9c867b 100644 --- a/frontend/src/queries/nodes/DataTable/InsightActorsQueryOptions.tsx +++ b/frontend/src/queries/nodes/DataTable/InsightActorsQueryOptions.tsx @@ -1,4 +1,5 @@ import { useMountedLogic, useValues } from 'kea' + import { LemonSelect } from 'lib/lemon-ui/LemonSelect' import { cleanedInsightActorsQueryOptions } from 'scenes/trends/persons-modal/persons-modal-utils' diff --git a/frontend/src/queries/nodes/DataTable/SavedQueries.tsx b/frontend/src/queries/nodes/DataTable/SavedQueries.tsx index 4e4d99b01a..cdea6a7fd0 100644 --- a/frontend/src/queries/nodes/DataTable/SavedQueries.tsx +++ b/frontend/src/queries/nodes/DataTable/SavedQueries.tsx @@ -1,5 +1,6 @@ import equal from 'fast-deep-equal' import { useValues } from 'kea' + import { LemonButton, LemonButtonWithDropdown } from 'lib/lemon-ui/LemonButton' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/queries/nodes/DataTable/dataTableLogic.test.ts b/frontend/src/queries/nodes/DataTable/dataTableLogic.test.ts index 552d266e6f..bf4506f5b5 100644 --- a/frontend/src/queries/nodes/DataTable/dataTableLogic.test.ts +++ b/frontend/src/queries/nodes/DataTable/dataTableLogic.test.ts @@ -1,4 +1,5 @@ import { expectLogic, partial } from 'kea-test-utils' + import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { dataNodeLogic } from '~/queries/nodes/DataNode/dataNodeLogic' diff --git a/frontend/src/queries/nodes/DataTable/dataTableLogic.ts b/frontend/src/queries/nodes/DataTable/dataTableLogic.ts index 19d8031a63..8711604454 100644 --- a/frontend/src/queries/nodes/DataTable/dataTableLogic.ts +++ b/frontend/src/queries/nodes/DataTable/dataTableLogic.ts @@ -1,12 +1,13 @@ import equal from 'fast-deep-equal' import { actions, connect, kea, key, path, props, propsChanged, reducers, selectors } from 'kea' + import { FEATURE_FLAGS } from 'lib/constants' import { dayjs } from 'lib/dayjs' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { objectsEqual, sortedKeys } from 'lib/utils' import { dataNodeLogic } from '~/queries/nodes/DataNode/dataNodeLogic' -import { getQueryFeatures, QueryFeature } from '~/queries/nodes/DataTable/queryFeatures' +import { QueryFeature, getQueryFeatures } from '~/queries/nodes/DataTable/queryFeatures' import { insightVizDataCollectionId } from '~/queries/nodes/InsightViz/InsightViz' import { AnyDataNode, diff --git a/frontend/src/queries/nodes/DataTable/renderColumn.tsx b/frontend/src/queries/nodes/DataTable/renderColumn.tsx index 59eefc3b1a..f27dbadfa0 100644 --- a/frontend/src/queries/nodes/DataTable/renderColumn.tsx +++ b/frontend/src/queries/nodes/DataTable/renderColumn.tsx @@ -1,10 +1,11 @@ import { combineUrl, router } from 'kea-router' + import { CopyToClipboardInline } from 'lib/components/CopyToClipboard' import { JSONViewer } from 'lib/components/JSONViewer' import { Property } from 'lib/components/Property' import { PropertyKeyInfo } from 'lib/components/PropertyKeyInfo' -import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { TZLabel } from 'lib/components/TZLabel' +import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { LemonTag } from 'lib/lemon-ui/LemonTag/LemonTag' import { Link } from 'lib/lemon-ui/Link' import { Spinner } from 'lib/lemon-ui/Spinner/Spinner' @@ -35,6 +36,7 @@ import { trimQuotes, } from '~/queries/utils' import { AnyPropertyFilter, EventType, PersonType, PropertyFilterType, PropertyOperator } from '~/types' + import { extractExpressionComment, removeExpressionComment } from './utils' export function getContextColumn( diff --git a/frontend/src/queries/nodes/DataTable/renderColumnMeta.tsx b/frontend/src/queries/nodes/DataTable/renderColumnMeta.tsx index 14ae40dea3..84aec07dac 100644 --- a/frontend/src/queries/nodes/DataTable/renderColumnMeta.tsx +++ b/frontend/src/queries/nodes/DataTable/renderColumnMeta.tsx @@ -2,7 +2,7 @@ import { PropertyKeyInfo } from 'lib/components/PropertyKeyInfo' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { SortingIndicator } from 'lib/lemon-ui/LemonTable/sorting' -import { getQueryFeatures, QueryFeature } from '~/queries/nodes/DataTable/queryFeatures' +import { QueryFeature, getQueryFeatures } from '~/queries/nodes/DataTable/queryFeatures' import { extractExpressionComment, removeExpressionComment } from '~/queries/nodes/DataTable/utils' import { DataTableNode, diff --git a/frontend/src/queries/nodes/DataTable/utils.ts b/frontend/src/queries/nodes/DataTable/utils.ts index 7b778d0f60..a95a58a357 100644 --- a/frontend/src/queries/nodes/DataTable/utils.ts +++ b/frontend/src/queries/nodes/DataTable/utils.ts @@ -1,6 +1,6 @@ import { PERSON_DISPLAY_NAME_COLUMN_NAME } from 'lib/constants' -import { getQueryFeatures, QueryFeature } from '~/queries/nodes/DataTable/queryFeatures' +import { QueryFeature, getQueryFeatures } from '~/queries/nodes/DataTable/queryFeatures' import { DataNode, DataTableNode, EventsQuery, HogQLExpression, NodeKind } from '~/queries/schema/schema-general' export const defaultDataTableEventColumns: HogQLExpression[] = [ diff --git a/frontend/src/queries/nodes/DataVisualization/Components/Charts/LineGraph.tsx b/frontend/src/queries/nodes/DataVisualization/Components/Charts/LineGraph.tsx index ff915a86b0..7e76457b20 100644 --- a/frontend/src/queries/nodes/DataVisualization/Components/Charts/LineGraph.tsx +++ b/frontend/src/queries/nodes/DataVisualization/Components/Charts/LineGraph.tsx @@ -1,15 +1,18 @@ -import 'chartjs-adapter-dayjs-3' // TODO: Move the below scss to somewhere more common import '../../../../../scenes/insights/InsightTooltip/InsightTooltip.scss' -import { LemonTable } from '@posthog/lemon-ui' -import { lemonToast } from '@posthog/lemon-ui' +import 'chartjs-adapter-dayjs-3' import annotationPlugin, { AnnotationPluginOptions, LineAnnotationOptions } from 'chartjs-plugin-annotation' import dataLabelsPlugin from 'chartjs-plugin-datalabels' import ChartjsPluginStacked100 from 'chartjs-plugin-stacked100' import chartTrendline from 'chartjs-plugin-trendline' import clsx from 'clsx' import { useValues } from 'kea' +import { useEffect, useRef } from 'react' + +import { LemonTable } from '@posthog/lemon-ui' +import { lemonToast } from '@posthog/lemon-ui' + import { ChartData, ChartType, @@ -25,7 +28,6 @@ import { getGraphColors, getSeriesColor } from 'lib/colors' import { InsightLabel } from 'lib/components/InsightLabel' import { useResizeObserver } from 'lib/hooks/useResizeObserver' import { hexToRGBA } from 'lib/utils' -import { useEffect, useRef } from 'react' import { ensureTooltip } from 'scenes/insights/views/LineGraph/LineGraph' import { ChartSettings, YAxisSettings } from '~/queries/schema/schema-general' diff --git a/frontend/src/queries/nodes/DataVisualization/Components/ConditionalFormatting/ConditionalFormattingTab.tsx b/frontend/src/queries/nodes/DataVisualization/Components/ConditionalFormatting/ConditionalFormattingTab.tsx index 2926e5b20a..cdb6d0f897 100644 --- a/frontend/src/queries/nodes/DataVisualization/Components/ConditionalFormatting/ConditionalFormattingTab.tsx +++ b/frontend/src/queries/nodes/DataVisualization/Components/ConditionalFormatting/ConditionalFormattingTab.tsx @@ -1,9 +1,10 @@ import './ConditionalFormattingTab.scss' +import { useActions, useValues } from 'kea' + import { IconPlusSmall, IconTrash } from '@posthog/icons' import { LemonButton, LemonCollapse, LemonColorGlyph, LemonInput, LemonSelect, LemonTag } from '@posthog/lemon-ui' import { LemonColorPicker } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' import { ConditionalFormattingRule } from '~/queries/schema/schema-general' diff --git a/frontend/src/queries/nodes/DataVisualization/Components/ConditionalFormatting/conditionalFormattingLogic.ts b/frontend/src/queries/nodes/DataVisualization/Components/ConditionalFormatting/conditionalFormattingLogic.ts index 83860fabc7..19b30633b6 100644 --- a/frontend/src/queries/nodes/DataVisualization/Components/ConditionalFormatting/conditionalFormattingLogic.ts +++ b/frontend/src/queries/nodes/DataVisualization/Components/ConditionalFormatting/conditionalFormattingLogic.ts @@ -1,6 +1,7 @@ import { actions, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { subscriptions } from 'kea-subscriptions' + import api from 'lib/api' import { ConditionalFormattingRule } from '~/queries/schema/schema-general' diff --git a/frontend/src/queries/nodes/DataVisualization/Components/DisplayTab.tsx b/frontend/src/queries/nodes/DataVisualization/Components/DisplayTab.tsx index 01731b98aa..8ba598e713 100644 --- a/frontend/src/queries/nodes/DataVisualization/Components/DisplayTab.tsx +++ b/frontend/src/queries/nodes/DataVisualization/Components/DisplayTab.tsx @@ -1,9 +1,11 @@ +import { useActions, useValues } from 'kea' + import { IconEye, IconPlusSmall, IconTrash } from '@posthog/icons' import { LemonButton, LemonInput, LemonLabel, LemonSelect, LemonSwitch } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { SeriesLetter } from 'lib/components/SeriesGlyph' -import { IconEyeHidden } from 'lib/lemon-ui/icons' import { LemonField } from 'lib/lemon-ui/LemonField' +import { IconEyeHidden } from 'lib/lemon-ui/icons' import { ChartDisplayType } from '~/types' diff --git a/frontend/src/queries/nodes/DataVisualization/Components/SeriesTab.tsx b/frontend/src/queries/nodes/DataVisualization/Components/SeriesTab.tsx index 00e5e4b44e..3652fdb835 100644 --- a/frontend/src/queries/nodes/DataVisualization/Components/SeriesTab.tsx +++ b/frontend/src/queries/nodes/DataVisualization/Components/SeriesTab.tsx @@ -1,3 +1,6 @@ +import { useActions, useValues } from 'kea' +import { Form } from 'kea-forms' + import { IconGear, IconPlusSmall, IconTrash } from '@posthog/icons' import { LemonButton, @@ -12,14 +15,13 @@ import { Popover, } from '@posthog/lemon-ui' import { LemonColorPicker } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' -import { Form } from 'kea-forms' + import { getSeriesColor, getSeriesColorPalette } from 'lib/colors' import { LemonField } from 'lib/lemon-ui/LemonField' import { AxisSeries, dataVisualizationLogic } from '../dataVisualizationLogic' import { AxisBreakdownSeries, seriesBreakdownLogic } from './seriesBreakdownLogic' -import { ySeriesLogic, YSeriesLogicProps, YSeriesSettingsTab } from './ySeriesLogic' +import { YSeriesLogicProps, YSeriesSettingsTab, ySeriesLogic } from './ySeriesLogic' export const SeriesTab = (): JSX.Element => { const { diff --git a/frontend/src/queries/nodes/DataVisualization/Components/SideBar.tsx b/frontend/src/queries/nodes/DataVisualization/Components/SideBar.tsx index e07a995ada..dde31ce624 100644 --- a/frontend/src/queries/nodes/DataVisualization/Components/SideBar.tsx +++ b/frontend/src/queries/nodes/DataVisualization/Components/SideBar.tsx @@ -1,11 +1,12 @@ import './SideBar.scss' -import { LemonTab, LemonTabs } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' +import { LemonTab, LemonTabs } from '@posthog/lemon-ui' + import { ChartDisplayType } from '~/types' -import { dataVisualizationLogic, SideBarTab } from '../dataVisualizationLogic' +import { SideBarTab, dataVisualizationLogic } from '../dataVisualizationLogic' import { ConditionalFormattingTab } from './ConditionalFormatting/ConditionalFormattingTab' import { DisplayTab } from './DisplayTab' import { SeriesTab } from './SeriesTab' diff --git a/frontend/src/queries/nodes/DataVisualization/Components/Table.tsx b/frontend/src/queries/nodes/DataVisualization/Components/Table.tsx index d400afc1ee..04474859a5 100644 --- a/frontend/src/queries/nodes/DataVisualization/Components/Table.tsx +++ b/frontend/src/queries/nodes/DataVisualization/Components/Table.tsx @@ -1,5 +1,8 @@ -import { LemonTable, LemonTableColumn } from '@posthog/lemon-ui' import { useValues } from 'kea' +import posthog from 'posthog-js' + +import { LemonTable, LemonTableColumn } from '@posthog/lemon-ui' + import { execHog } from 'lib/hog' import { lightenDarkenColor } from 'lib/utils' import { InsightEmptyState, InsightErrorState } from 'scenes/insights/EmptyStates' @@ -11,8 +14,7 @@ import { QueryContext } from '~/queries/types' import { LoadNext } from '../../DataNode/LoadNext' import { renderColumn } from '../../DataTable/renderColumn' import { renderColumnMeta } from '../../DataTable/renderColumnMeta' -import { convertTableValue, dataVisualizationLogic, TableDataCell } from '../dataVisualizationLogic' -import posthog from 'posthog-js' +import { TableDataCell, convertTableValue, dataVisualizationLogic } from '../dataVisualizationLogic' interface TableProps { query: DataVisualizationNode diff --git a/frontend/src/queries/nodes/DataVisualization/Components/TableDisplay.tsx b/frontend/src/queries/nodes/DataVisualization/Components/TableDisplay.tsx index 2c8a007e71..d4dfc86c5f 100644 --- a/frontend/src/queries/nodes/DataVisualization/Components/TableDisplay.tsx +++ b/frontend/src/queries/nodes/DataVisualization/Components/TableDisplay.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconGraph, IconLifecycle, IconTrends } from '@posthog/icons' import { LemonSelect, LemonSelectOptions, LemonSelectProps } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { Icon123, IconAreaChart, IconTableChart } from 'lib/lemon-ui/icons' import { ChartDisplayType } from '~/types' diff --git a/frontend/src/queries/nodes/DataVisualization/Components/Variables/AddVariableButton.tsx b/frontend/src/queries/nodes/DataVisualization/Components/Variables/AddVariableButton.tsx index a0c238226b..18198ed5bc 100644 --- a/frontend/src/queries/nodes/DataVisualization/Components/Variables/AddVariableButton.tsx +++ b/frontend/src/queries/nodes/DataVisualization/Components/Variables/AddVariableButton.tsx @@ -1,6 +1,7 @@ +import { useActions, useValues } from 'kea' + import { IconGear, IconPlus } from '@posthog/icons' import { LemonButton, LemonButtonProps, LemonMenu } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' import { dataVisualizationLogic } from '../../dataVisualizationLogic' import { NewVariableModal } from './NewVariableModal' diff --git a/frontend/src/queries/nodes/DataVisualization/Components/Variables/NewVariableModal.tsx b/frontend/src/queries/nodes/DataVisualization/Components/Variables/NewVariableModal.tsx index 61812befe1..91b1174b2a 100644 --- a/frontend/src/queries/nodes/DataVisualization/Components/Variables/NewVariableModal.tsx +++ b/frontend/src/queries/nodes/DataVisualization/Components/Variables/NewVariableModal.tsx @@ -1,3 +1,5 @@ +import { useActions, useValues } from 'kea' + import { LemonButton, LemonDialog, @@ -7,7 +9,7 @@ import { LemonSegmentedButton, LemonSelect, } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { dayjs } from 'lib/dayjs' import { LemonField } from 'lib/lemon-ui/LemonField' diff --git a/frontend/src/queries/nodes/DataVisualization/Components/Variables/VariableCalendar.tsx b/frontend/src/queries/nodes/DataVisualization/Components/Variables/VariableCalendar.tsx index 22c07bb968..076afa0a2b 100644 --- a/frontend/src/queries/nodes/DataVisualization/Components/Variables/VariableCalendar.tsx +++ b/frontend/src/queries/nodes/DataVisualization/Components/Variables/VariableCalendar.tsx @@ -1,7 +1,9 @@ -import { LemonCalendarSelect } from '@posthog/lemon-ui' -import { dayjs } from 'lib/dayjs' import { useState } from 'react' +import { LemonCalendarSelect } from '@posthog/lemon-ui' + +import { dayjs } from 'lib/dayjs' + export const VariableCalendar = ({ value, updateVariable, diff --git a/frontend/src/queries/nodes/DataVisualization/Components/Variables/Variables.tsx b/frontend/src/queries/nodes/DataVisualization/Components/Variables/Variables.tsx index a002810a21..b3cb982cf1 100644 --- a/frontend/src/queries/nodes/DataVisualization/Components/Variables/Variables.tsx +++ b/frontend/src/queries/nodes/DataVisualization/Components/Variables/Variables.tsx @@ -1,5 +1,8 @@ import './Variables.scss' +import { useActions, useValues } from 'kea' +import { useEffect, useRef, useState } from 'react' + import { IconCopy, IconGear, IconTrash } from '@posthog/icons' import { LemonButton, @@ -10,11 +13,10 @@ import { LemonSwitch, Popover, } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { dayjs } from 'lib/dayjs' import { LemonField } from 'lib/lemon-ui/LemonField' import { copyToClipboard } from 'lib/utils/copyToClipboard' -import { useEffect, useRef, useState } from 'react' import { dashboardLogic } from 'scenes/dashboard/dashboardLogic' import { dataNodeLogic } from '~/queries/nodes/DataNode/dataNodeLogic' diff --git a/frontend/src/queries/nodes/DataVisualization/Components/Variables/variableDataLogic.ts b/frontend/src/queries/nodes/DataVisualization/Components/Variables/variableDataLogic.ts index 40f1d3e25d..5cc5672d33 100644 --- a/frontend/src/queries/nodes/DataVisualization/Components/Variables/variableDataLogic.ts +++ b/frontend/src/queries/nodes/DataVisualization/Components/Variables/variableDataLogic.ts @@ -1,6 +1,8 @@ -import { lemonToast } from '@posthog/lemon-ui' import { kea, path } from 'kea' import { lazyLoaders } from 'kea-loaders' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { Variable } from '../../types' diff --git a/frontend/src/queries/nodes/DataVisualization/Components/Variables/variableModalLogic.ts b/frontend/src/queries/nodes/DataVisualization/Components/Variables/variableModalLogic.ts index 6de49c0bb0..ac192b48ff 100644 --- a/frontend/src/queries/nodes/DataVisualization/Components/Variables/variableModalLogic.ts +++ b/frontend/src/queries/nodes/DataVisualization/Components/Variables/variableModalLogic.ts @@ -1,5 +1,7 @@ -import { lemonToast } from '@posthog/lemon-ui' import { actions, connect, kea, key, listeners, path, props, reducers } from 'kea' + +import { lemonToast } from '@posthog/lemon-ui' + import api, { ApiError } from 'lib/api' import { dayjs } from 'lib/dayjs' diff --git a/frontend/src/queries/nodes/DataVisualization/Components/Variables/variablesLogic.ts b/frontend/src/queries/nodes/DataVisualization/Components/Variables/variablesLogic.ts index dee763deea..2b441b98c5 100644 --- a/frontend/src/queries/nodes/DataVisualization/Components/Variables/variablesLogic.ts +++ b/frontend/src/queries/nodes/DataVisualization/Components/Variables/variablesLogic.ts @@ -1,5 +1,6 @@ import { actions, afterMount, connect, kea, key, listeners, path, props, propsChanged, reducers, selectors } from 'kea' import { subscriptions } from 'kea-subscriptions' + import { getVariablesFromQuery, haveVariablesOrFiltersChanged } from 'scenes/insights/utils/queryUtils' import { DataVisualizationNode, HogQLVariable } from '~/queries/schema/schema-general' diff --git a/frontend/src/queries/nodes/DataVisualization/Components/seriesBreakdownLogic.test.ts b/frontend/src/queries/nodes/DataVisualization/Components/seriesBreakdownLogic.test.ts index df9c0187c0..6dfb6d670e 100644 --- a/frontend/src/queries/nodes/DataVisualization/Components/seriesBreakdownLogic.test.ts +++ b/frontend/src/queries/nodes/DataVisualization/Components/seriesBreakdownLogic.test.ts @@ -1,4 +1,5 @@ import { expectLogic } from 'kea-test-utils' + import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { DataVisualizationNode, NodeKind } from '~/queries/schema/schema-general' @@ -6,7 +7,7 @@ import { initKeaTests } from '~/test/init' import { ChartDisplayType, ItemMode } from '~/types' import { dataNodeLogic } from '../../DataNode/dataNodeLogic' -import { dataVisualizationLogic, DataVisualizationLogicProps } from '../dataVisualizationLogic' +import { DataVisualizationLogicProps, dataVisualizationLogic } from '../dataVisualizationLogic' import { seriesBreakdownLogic } from './seriesBreakdownLogic' const testUniqueKey = 'testUniqueKey' diff --git a/frontend/src/queries/nodes/DataVisualization/Components/ySeriesLogic.ts b/frontend/src/queries/nodes/DataVisualization/Components/ySeriesLogic.ts index e938965aad..c6b5874b70 100644 --- a/frontend/src/queries/nodes/DataVisualization/Components/ySeriesLogic.ts +++ b/frontend/src/queries/nodes/DataVisualization/Components/ySeriesLogic.ts @@ -1,12 +1,13 @@ import { actions, connect, kea, key, path, props, reducers, selectors } from 'kea' import { forms } from 'kea-forms' + import { getSeriesColor } from 'lib/colors' import { AxisSeries, - dataVisualizationLogic, DataVisualizationLogicProps, EmptyYAxisSeries, + dataVisualizationLogic, } from '../dataVisualizationLogic' import type { ySeriesLogicType } from './ySeriesLogicType' diff --git a/frontend/src/queries/nodes/DataVisualization/DataVisualization.tsx b/frontend/src/queries/nodes/DataVisualization/DataVisualization.tsx index 9feb653bc6..aa8ebd4c26 100644 --- a/frontend/src/queries/nodes/DataVisualization/DataVisualization.tsx +++ b/frontend/src/queries/nodes/DataVisualization/DataVisualization.tsx @@ -1,10 +1,13 @@ -import { IconGear } from '@posthog/icons' -import { LemonButton, LemonDivider } from '@posthog/lemon-ui' import clsx from 'clsx' import { BindLogic, BuiltLogic, LogicWrapper, useActions, useValues } from 'kea' import { router } from 'kea-router' -import { ExportButton } from 'lib/components/ExportButton/ExportButton' import { useCallback, useState } from 'react' + +import { IconGear } from '@posthog/icons' +import { LemonButton, LemonDivider } from '@posthog/lemon-ui' + +import { ExportButton } from 'lib/components/ExportButton/ExportButton' +import { useAttachedLogic } from 'lib/logic/scenes/useAttachedLogic' import { InsightErrorState, StatelessInsightLoadingState } from 'scenes/insights/EmptyStates' import { insightDataLogic } from 'scenes/insights/insightDataLogic' import { insightSceneLogic } from 'scenes/insights/insightSceneLogic' @@ -24,21 +27,20 @@ import { QueryContext } from '~/queries/types' import { shouldQueryBeAsync } from '~/queries/utils' import { ChartDisplayType, ExportContext, ExporterFormat, InsightLogicProps } from '~/types' -import { dataNodeLogic, DataNodeLogicProps } from '../DataNode/dataNodeLogic' import { DateRange } from '../DataNode/DateRange' import { ElapsedTime } from '../DataNode/ElapsedTime' import { Reload } from '../DataNode/Reload' +import { DataNodeLogicProps, dataNodeLogic } from '../DataNode/dataNodeLogic' import { QueryFeature } from '../DataTable/queryFeatures' import { LineGraph } from './Components/Charts/LineGraph' import { Table } from './Components/Table' import { TableDisplay } from './Components/TableDisplay' import { AddVariableButton } from './Components/Variables/AddVariableButton' -import { variableModalLogic } from './Components/Variables/variableModalLogic' import { VariablesForInsight } from './Components/Variables/Variables' -import { variablesLogic, VariablesLogicProps } from './Components/Variables/variablesLogic' -import { dataVisualizationLogic, DataVisualizationLogicProps } from './dataVisualizationLogic' +import { variableModalLogic } from './Components/Variables/variableModalLogic' +import { VariablesLogicProps, variablesLogic } from './Components/Variables/variablesLogic' +import { DataVisualizationLogicProps, dataVisualizationLogic } from './dataVisualizationLogic' import { displayLogic } from './displayLogic' -import { useAttachedLogic } from 'lib/logic/scenes/useAttachedLogic' export interface DataTableVisualizationProps { uniqueKey?: string | number diff --git a/frontend/src/queries/nodes/DataVisualization/dataVisualizationLogic.ts b/frontend/src/queries/nodes/DataVisualization/dataVisualizationLogic.ts index 6a71b56e32..7383c27f11 100644 --- a/frontend/src/queries/nodes/DataVisualization/dataVisualizationLogic.ts +++ b/frontend/src/queries/nodes/DataVisualization/dataVisualizationLogic.ts @@ -1,8 +1,9 @@ import { actions, afterMount, connect, kea, key, listeners, path, props, propsChanged, reducers, selectors } from 'kea' import { subscriptions } from 'kea-subscriptions' -import { dayjs } from 'lib/dayjs' -import { lightenDarkenColor, objectsEqual, RGBToHex, uuid } from 'lib/utils' import mergeObject from 'lodash.merge' + +import { dayjs } from 'lib/dayjs' +import { RGBToHex, lightenDarkenColor, objectsEqual, uuid } from 'lib/utils' import { sceneLogic } from 'scenes/sceneLogic' import { Scene } from 'scenes/sceneTypes' import { teamLogic } from 'scenes/teamLogic' @@ -22,7 +23,7 @@ import { QueryContext } from '~/queries/types' import { ChartDisplayType, DashboardType, ItemMode } from '~/types' import { dataNodeLogic } from '../DataNode/dataNodeLogic' -import { getQueryFeatures, QueryFeature } from '../DataTable/queryFeatures' +import { QueryFeature, getQueryFeatures } from '../DataTable/queryFeatures' import type { dataVisualizationLogicType } from './dataVisualizationLogicType' import { ColumnScalar, FORMATTING_TEMPLATES } from './types' diff --git a/frontend/src/queries/nodes/EventsNode/EventName.tsx b/frontend/src/queries/nodes/EventsNode/EventName.tsx index 79a6cec27f..8d61aff635 100644 --- a/frontend/src/queries/nodes/EventsNode/EventName.tsx +++ b/frontend/src/queries/nodes/EventsNode/EventName.tsx @@ -1,7 +1,7 @@ -import { EventName as EventNameComponent } from 'products/actions/frontend/components/EventName' - import { EventsNode, EventsQuery } from '~/queries/schema/schema-general' +import { EventName as EventNameComponent } from 'products/actions/frontend/components/EventName' + interface EventNameProps { query: EventsNode | EventsQuery setQuery?: (query: EventsNode | EventsQuery) => void diff --git a/frontend/src/queries/nodes/EventsNode/EventPropertyFilters.tsx b/frontend/src/queries/nodes/EventsNode/EventPropertyFilters.tsx index 0aa2aca8ef..c0d97d517d 100644 --- a/frontend/src/queries/nodes/EventsNode/EventPropertyFilters.tsx +++ b/frontend/src/queries/nodes/EventsNode/EventPropertyFilters.tsx @@ -1,7 +1,8 @@ import { useValues } from 'kea' +import { useState } from 'react' + import { PropertyFilters } from 'lib/components/PropertyFilters/PropertyFilters' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' -import { useState } from 'react' import { groupsModel } from '~/models/groupsModel' import { diff --git a/frontend/src/queries/nodes/GroupsQuery/GroupPropertyFilters.tsx b/frontend/src/queries/nodes/GroupsQuery/GroupPropertyFilters.tsx index 0ce7af85f3..f4a6c20c75 100644 --- a/frontend/src/queries/nodes/GroupsQuery/GroupPropertyFilters.tsx +++ b/frontend/src/queries/nodes/GroupsQuery/GroupPropertyFilters.tsx @@ -1,6 +1,7 @@ +import { useState } from 'react' + import { PropertyFilters } from 'lib/components/PropertyFilters/PropertyFilters' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' -import { useState } from 'react' import { GroupsQuery, NodeKind } from '~/queries/schema/schema-general' import { GroupPropertyFilter } from '~/types' diff --git a/frontend/src/queries/nodes/GroupsQuery/GroupsSearch.tsx b/frontend/src/queries/nodes/GroupsQuery/GroupsSearch.tsx index 1aaa62dd2c..2cfad466e4 100644 --- a/frontend/src/queries/nodes/GroupsQuery/GroupsSearch.tsx +++ b/frontend/src/queries/nodes/GroupsQuery/GroupsSearch.tsx @@ -1,4 +1,5 @@ import { IconInfo } from '@posthog/icons' + import { LemonInput } from 'lib/lemon-ui/LemonInput/LemonInput' import { Tooltip } from 'lib/lemon-ui/Tooltip' diff --git a/frontend/src/queries/nodes/HogQLQuery/HogQLQueryEditor.tsx b/frontend/src/queries/nodes/HogQLQuery/HogQLQueryEditor.tsx index ea5d085f77..c771278154 100644 --- a/frontend/src/queries/nodes/HogQLQuery/HogQLQueryEditor.tsx +++ b/frontend/src/queries/nodes/HogQLQuery/HogQLQueryEditor.tsx @@ -1,24 +1,26 @@ import { Monaco } from '@monaco-editor/react' -import { IconMagicWand } from '@posthog/icons' -import { LemonInput, Link } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' import { router } from 'kea-router' +import type { IDisposable, editor as importedEditor } from 'monaco-editor' +import { useEffect, useRef, useState } from 'react' + +import { IconMagicWand } from '@posthog/icons' +import { LemonInput, Link } from '@posthog/lemon-ui' + import { FlaggedFeature } from 'lib/components/FlaggedFeature' import { FEATURE_FLAGS } from 'lib/constants' +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { CodeEditor } from 'lib/monaco/CodeEditor' -import { codeEditorLogic, CodeEditorLogicProps } from 'lib/monaco/codeEditorLogic' -import type { editor as importedEditor, IDisposable } from 'monaco-editor' -import { useEffect, useRef, useState } from 'react' +import { CodeEditorLogicProps, codeEditorLogic } from 'lib/monaco/codeEditorLogic' import { dataWarehouseSceneLogic } from 'scenes/data-warehouse/settings/dataWarehouseSceneLogic' import { urls } from 'scenes/urls' import { HogQLQuery } from '~/queries/schema/schema-general' import { hogQLQueryEditorLogic } from './hogQLQueryEditorLogic' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' export interface HogQLQueryEditorProps { query: HogQLQuery diff --git a/frontend/src/queries/nodes/HogQLQuery/hogQLQueryEditorLogic.tsx b/frontend/src/queries/nodes/HogQLQuery/hogQLQueryEditorLogic.tsx index ee62a61d56..5c3aeeb160 100644 --- a/frontend/src/queries/nodes/HogQLQuery/hogQLQueryEditorLogic.tsx +++ b/frontend/src/queries/nodes/HogQLQuery/hogQLQueryEditorLogic.tsx @@ -1,10 +1,6 @@ import type { Monaco } from '@monaco-editor/react' -import { LemonDialog, LemonInput } from '@posthog/lemon-ui' import { actions, connect, kea, key, listeners, path, props, propsChanged, reducers, selectors } from 'kea' import { combineUrl } from 'kea-router' -import api from 'lib/api' -import { LemonField } from 'lib/lemon-ui/LemonField' -import { featureFlagLogic } from 'lib/logic/featureFlagLogic' // Note: we can only import types and not values from monaco-editor, because otherwise some Monaco code breaks // auto reload in development. Specifically, on this line: // `export const suggestWidgetStatusbarMenu = new MenuId('suggestWidgetStatusBar')` @@ -13,9 +9,15 @@ import { featureFlagLogic } from 'lib/logic/featureFlagLogic' // esbuild doesn't support manual chunks as of 2023, so we can't just put Monaco in its own chunk, which would prevent // re-importing. As for @monaco-editor/react, it does some lazy loading and doesn't have this problem. import type { editor } from 'monaco-editor' + +import { LemonDialog, LemonInput } from '@posthog/lemon-ui' + +import api from 'lib/api' +import { LemonField } from 'lib/lemon-ui/LemonField' +import { featureFlagLogic } from 'lib/logic/featureFlagLogic' +import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { dataWarehouseViewsLogic } from 'scenes/data-warehouse/saved_queries/dataWarehouseViewsLogic' import { dataWarehouseSceneLogic } from 'scenes/data-warehouse/settings/dataWarehouseSceneLogic' -import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { DataNode, HogQLQuery, NodeKind } from '~/queries/schema/schema-general' diff --git a/frontend/src/queries/nodes/HogQLX/render.tsx b/frontend/src/queries/nodes/HogQLX/render.tsx index 0eb49d709e..f82c103887 100644 --- a/frontend/src/queries/nodes/HogQLX/render.tsx +++ b/frontend/src/queries/nodes/HogQLX/render.tsx @@ -1,6 +1,8 @@ import React from 'react' + import { IconAI } from '@posthog/icons' import { Link } from '@posthog/lemon-ui' + import { JSONViewer } from 'lib/components/JSONViewer' import { ExplainCSPViolationButton } from 'lib/components/LLMButton/ExplainCSPViolationButton' import { Sparkline } from 'lib/components/Sparkline' diff --git a/frontend/src/queries/nodes/InsightQuery/utils/filtersToQueryNode.test.ts b/frontend/src/queries/nodes/InsightQuery/utils/filtersToQueryNode.test.ts index c7d9a9c31b..6d9208bb1d 100644 --- a/frontend/src/queries/nodes/InsightQuery/utils/filtersToQueryNode.test.ts +++ b/frontend/src/queries/nodes/InsightQuery/utils/filtersToQueryNode.test.ts @@ -20,14 +20,14 @@ import { FilterType, FunnelConversionWindowTimeUnit, FunnelPathType, - FunnelsFilterType, FunnelStepReference, FunnelVizType, + FunnelsFilterType, GroupMathType, InsightType, LifecycleFilterType, - PathsFilterType, PathType, + PathsFilterType, PropertyFilterType, PropertyMathType, PropertyOperator, diff --git a/frontend/src/queries/nodes/InsightQuery/utils/filtersToQueryNode.ts b/frontend/src/queries/nodes/InsightQuery/utils/filtersToQueryNode.ts index 5812616d3f..4b9e92ebd6 100644 --- a/frontend/src/queries/nodes/InsightQuery/utils/filtersToQueryNode.ts +++ b/frontend/src/queries/nodes/InsightQuery/utils/filtersToQueryNode.ts @@ -1,5 +1,6 @@ -import { objectCleanWithEmpty } from 'lib/utils' import posthog from 'posthog-js' + +import { objectCleanWithEmpty } from 'lib/utils' import { transformLegacyHiddenLegendKeys } from 'scenes/funnels/funnelUtils' import { MathAvailability } from 'scenes/insights/filters/ActionFilter/ActionFilterRow/ActionFilterRow' import { @@ -62,11 +63,11 @@ import { GroupMathType, HogQLMathType, InsightType, - isDataWarehouseFilter, PathsFilterType, RetentionEntity, RetentionFilterType, TrendsFilterType, + isDataWarehouseFilter, } from '~/types' import { cleanEntityProperties, cleanGlobalProperties } from './cleanProperties' diff --git a/frontend/src/queries/nodes/InsightQuery/utils/queryNodeToFilter.test.ts b/frontend/src/queries/nodes/InsightQuery/utils/queryNodeToFilter.test.ts index d836e9de3c..c429eca902 100644 --- a/frontend/src/queries/nodes/InsightQuery/utils/queryNodeToFilter.test.ts +++ b/frontend/src/queries/nodes/InsightQuery/utils/queryNodeToFilter.test.ts @@ -14,13 +14,13 @@ import { ChartDisplayType, FunnelConversionWindowTimeUnit, FunnelPathType, - FunnelsFilterType, FunnelStepReference, FunnelVizType, + FunnelsFilterType, InsightType, LifecycleFilterType, - PathsFilterType, PathType, + PathsFilterType, StepOrderValue, StickinessFilterType, TrendsFilterType, diff --git a/frontend/src/queries/nodes/InsightViz/Breakdown.tsx b/frontend/src/queries/nodes/InsightViz/Breakdown.tsx index f2fae9a923..5370f391c9 100644 --- a/frontend/src/queries/nodes/InsightViz/Breakdown.tsx +++ b/frontend/src/queries/nodes/InsightViz/Breakdown.tsx @@ -1,4 +1,5 @@ import { useActions, useValues } from 'kea' + import { TaxonomicBreakdownFilter } from 'scenes/insights/filters/BreakdownFilter/TaxonomicBreakdownFilter' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' diff --git a/frontend/src/queries/nodes/InsightViz/CalendarHeatmapFilters.tsx b/frontend/src/queries/nodes/InsightViz/CalendarHeatmapFilters.tsx index 36b73807b9..ac7b6ef054 100644 --- a/frontend/src/queries/nodes/InsightViz/CalendarHeatmapFilters.tsx +++ b/frontend/src/queries/nodes/InsightViz/CalendarHeatmapFilters.tsx @@ -1,4 +1,5 @@ import { useActions, useValues } from 'kea' + import { ActionFilter } from 'scenes/insights/filters/ActionFilter/ActionFilter' import { MathAvailability } from 'scenes/insights/filters/ActionFilter/ActionFilterRow/ActionFilterRow' import { insightLogic } from 'scenes/insights/insightLogic' @@ -9,7 +10,7 @@ import { CalendarHeatmapQuery } from '~/queries/schema/schema-general' import { isInsightQueryNode } from '~/queries/utils' import { FilterType } from '~/types' -import { actionsAndEventsToSeries, FilterTypeActionsAndEvents } from '../InsightQuery/utils/filtersToQueryNode' +import { FilterTypeActionsAndEvents, actionsAndEventsToSeries } from '../InsightQuery/utils/filtersToQueryNode' import { queryNodeToFilter } from '../InsightQuery/utils/queryNodeToFilter' export function CalendarHeatmapFilters(): JSX.Element | null { diff --git a/frontend/src/queries/nodes/InsightViz/ComputationTimeWithRefresh.tsx b/frontend/src/queries/nodes/InsightViz/ComputationTimeWithRefresh.tsx index 5e2e2d62f0..5d22d55b67 100644 --- a/frontend/src/queries/nodes/InsightViz/ComputationTimeWithRefresh.tsx +++ b/frontend/src/queries/nodes/InsightViz/ComputationTimeWithRefresh.tsx @@ -1,10 +1,12 @@ -import { Link, Tooltip } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { Link, Tooltip } from '@posthog/lemon-ui' + import { dayjs } from 'lib/dayjs' import { usePeriodicRerender } from 'lib/hooks/usePeriodicRerender' +import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { insightDataLogic } from 'scenes/insights/insightDataLogic' import { insightLogic } from 'scenes/insights/insightLogic' -import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { userLogic } from 'scenes/userLogic' import { shouldQueryBeAsync } from '~/queries/utils' diff --git a/frontend/src/queries/nodes/InsightViz/CumulativeStickinessFilter.tsx b/frontend/src/queries/nodes/InsightViz/CumulativeStickinessFilter.tsx index 5eb128ffe6..d40a87fda2 100644 --- a/frontend/src/queries/nodes/InsightViz/CumulativeStickinessFilter.tsx +++ b/frontend/src/queries/nodes/InsightViz/CumulativeStickinessFilter.tsx @@ -1,5 +1,7 @@ -import { LemonSelect } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonSelect } from '@posthog/lemon-ui' + import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' import { StickinessComputationModes } from '~/queries/schema/schema-general' diff --git a/frontend/src/queries/nodes/InsightViz/EditorFilterGroup.tsx b/frontend/src/queries/nodes/InsightViz/EditorFilterGroup.tsx index 9e5b15df28..88c31a47db 100644 --- a/frontend/src/queries/nodes/InsightViz/EditorFilterGroup.tsx +++ b/frontend/src/queries/nodes/InsightViz/EditorFilterGroup.tsx @@ -1,9 +1,11 @@ -import { IconCollapse, IconExpand } from '@posthog/icons' import clsx from 'clsx' +import { Fragment, useState } from 'react' + +import { IconCollapse, IconExpand } from '@posthog/icons' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonField } from 'lib/lemon-ui/LemonField' import { inStorybook, inStorybookTestRunner, slugify } from 'lib/utils' -import { Fragment, useState } from 'react' import { InsightQueryNode } from '~/queries/schema/schema-general' import type { InsightEditorFilterGroup, InsightLogicProps } from '~/types' diff --git a/frontend/src/queries/nodes/InsightViz/EditorFilters.tsx b/frontend/src/queries/nodes/InsightViz/EditorFilters.tsx index c4724fc7ed..9abbe6d42c 100644 --- a/frontend/src/queries/nodes/InsightViz/EditorFilters.tsx +++ b/frontend/src/queries/nodes/InsightViz/EditorFilters.tsx @@ -1,12 +1,13 @@ -import { IconInfo, IconX } from '@posthog/icons' -import { LemonBanner, LemonButton, Link, Tooltip } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' import { useEffect, useRef } from 'react' +import { CSSTransition } from 'react-transition-group' + +import { IconInfo, IconX } from '@posthog/icons' +import { LemonBanner, LemonButton, Link, Tooltip } from '@posthog/lemon-ui' import { NON_BREAKDOWN_DISPLAY_TYPES } from 'lib/constants' - -import { CSSTransition } from 'react-transition-group' +import { pluralize } from 'lib/utils' import { funnelDataLogic } from 'scenes/funnels/funnelDataLogic' import { Attribution } from 'scenes/insights/EditorFilters/AttributionFilter' import { FunnelsAdvanced } from 'scenes/insights/EditorFilters/FunnelsAdvanced' @@ -24,7 +25,7 @@ import { RetentionOptions } from 'scenes/insights/EditorFilters/RetentionOptions import { SamplingFilter } from 'scenes/insights/EditorFilters/SamplingFilter' import { insightLogic } from 'scenes/insights/insightLogic' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' - +import { compareInsightTopLevelSections } from 'scenes/insights/utils' import MaxTool from 'scenes/max/MaxTool' import { castAssistantQuery } from 'scenes/max/utils' import { userLogic } from 'scenes/userLogic' @@ -56,8 +57,6 @@ import { LifecycleToggles } from './LifecycleToggles' import { TrendsFormula } from './TrendsFormula' import { TrendsSeries } from './TrendsSeries' import { TrendsSeriesLabel } from './TrendsSeriesLabel' -import { compareInsightTopLevelSections } from 'scenes/insights/utils' -import { pluralize } from 'lib/utils' export interface EditorFiltersProps { query: InsightQueryNode diff --git a/frontend/src/queries/nodes/InsightViz/GlobalAndOrFilters.tsx b/frontend/src/queries/nodes/InsightViz/GlobalAndOrFilters.tsx index 372ddec32e..fe18fe20a3 100644 --- a/frontend/src/queries/nodes/InsightViz/GlobalAndOrFilters.tsx +++ b/frontend/src/queries/nodes/InsightViz/GlobalAndOrFilters.tsx @@ -1,4 +1,5 @@ import { useActions, useValues } from 'kea' + import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' import { keyForInsightLogicProps } from 'scenes/insights/sharedUtils' diff --git a/frontend/src/queries/nodes/InsightViz/InsightDisplayConfig.tsx b/frontend/src/queries/nodes/InsightViz/InsightDisplayConfig.tsx index a3733689a3..60382de82b 100644 --- a/frontend/src/queries/nodes/InsightViz/InsightDisplayConfig.tsx +++ b/frontend/src/queries/nodes/InsightViz/InsightDisplayConfig.tsx @@ -1,6 +1,12 @@ +import { useActions, useValues } from 'kea' +import posthog from 'posthog-js' +import { ReactNode } from 'react' +import { useDebouncedCallback } from 'use-debounce' + import { IconInfo } from '@posthog/icons' import { LemonButton, LemonInput, Tooltip } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' +import { LemonSwitch } from '@posthog/lemon-ui' + import { ChartFilter } from 'lib/components/ChartFilter' import { CompareFilter } from 'lib/components/CompareFilter/CompareFilter' import { IntervalFilter } from 'lib/components/IntervalFilter' @@ -9,10 +15,7 @@ import { UnitPicker } from 'lib/components/UnitPicker/UnitPicker' import { NON_TIME_SERIES_DISPLAY_TYPES } from 'lib/constants' import { LemonMenu, LemonMenuItems } from 'lib/lemon-ui/LemonMenu' import { DEFAULT_DECIMAL_PLACES } from 'lib/utils' -import posthog from 'posthog-js' -import { ReactNode } from 'react' import { funnelDataLogic } from 'scenes/funnels/funnelDataLogic' -import { axisLabel } from 'scenes/insights/aggregationAxisFormat' import { PercentStackViewFilter } from 'scenes/insights/EditorFilters/PercentStackViewFilter' import { ResultCustomizationByPicker } from 'scenes/insights/EditorFilters/ResultCustomizationByPicker' import { ScalePicker } from 'scenes/insights/EditorFilters/ScalePicker' @@ -21,26 +24,25 @@ import { ShowLegendFilter } from 'scenes/insights/EditorFilters/ShowLegendFilter import { ShowMultipleYAxesFilter } from 'scenes/insights/EditorFilters/ShowMultipleYAxesFilter' import { ShowTrendLinesFilter } from 'scenes/insights/EditorFilters/ShowTrendLinesFilter' import { ValueOnSeriesFilter } from 'scenes/insights/EditorFilters/ValueOnSeriesFilter' +import { RetentionDatePicker } from 'scenes/insights/RetentionDatePicker' +import { axisLabel } from 'scenes/insights/aggregationAxisFormat' import { InsightDateFilter } from 'scenes/insights/filters/InsightDateFilter' import { RetentionChartPicker } from 'scenes/insights/filters/RetentionChartPicker' import { RetentionDashboardDisplayPicker } from 'scenes/insights/filters/RetentionDashboardDisplayPicker' import { insightLogic } from 'scenes/insights/insightLogic' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' -import { RetentionDatePicker } from 'scenes/insights/RetentionDatePicker' import { FunnelBinsPicker } from 'scenes/insights/views/Funnels/FunnelBinsPicker' import { FunnelDisplayLayoutPicker } from 'scenes/insights/views/Funnels/FunnelDisplayLayoutPicker' +import { ConfidenceLevelInput } from 'scenes/insights/views/LineGraph/ConfidenceLevelInput' +import { MovingAverageIntervalsInput } from 'scenes/insights/views/LineGraph/MovingAverageIntervalsInput' import { PathStepPicker } from 'scenes/insights/views/Paths/PathStepPicker' import { RetentionBreakdownFilter } from 'scenes/retention/RetentionBreakdownFilter' import { trendsDataLogic } from 'scenes/trends/trendsDataLogic' -import { useDebouncedCallback } from 'use-debounce' import { resultCustomizationsModalLogic } from '~/queries/nodes/InsightViz/resultCustomizationsModalLogic' import { isValidBreakdown } from '~/queries/utils' -import { ChartDisplayType } from '~/types' -import { ConfidenceLevelInput } from 'scenes/insights/views/LineGraph/ConfidenceLevelInput' -import { MovingAverageIntervalsInput } from 'scenes/insights/views/LineGraph/MovingAverageIntervalsInput' -import { LemonSwitch } from '@posthog/lemon-ui' import { isTrendsQuery } from '~/queries/utils' +import { ChartDisplayType } from '~/types' export function InsightDisplayConfig(): JSX.Element { const { insightProps, canEditInsight } = useValues(insightLogic) diff --git a/frontend/src/queries/nodes/InsightViz/InsightResultMetadata.tsx b/frontend/src/queries/nodes/InsightViz/InsightResultMetadata.tsx index 909d55e325..c324f20c5c 100644 --- a/frontend/src/queries/nodes/InsightViz/InsightResultMetadata.tsx +++ b/frontend/src/queries/nodes/InsightViz/InsightResultMetadata.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { insightLogic } from 'scenes/insights/insightLogic' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' diff --git a/frontend/src/queries/nodes/InsightViz/InsightViz.tsx b/frontend/src/queries/nodes/InsightViz/InsightViz.tsx index 32cb0e69a0..c3abbedd5a 100644 --- a/frontend/src/queries/nodes/InsightViz/InsightViz.tsx +++ b/frontend/src/queries/nodes/InsightViz/InsightViz.tsx @@ -2,8 +2,10 @@ import './InsightViz.scss' import clsx from 'clsx' import { BindLogic, BuiltLogic, LogicWrapper, useValues } from 'kea' -import { useFeatureFlag } from 'lib/hooks/useFeatureFlag' import { useState } from 'react' + +import { useFeatureFlag } from 'lib/hooks/useFeatureFlag' +import { useAttachedLogic } from 'lib/logic/scenes/useAttachedLogic' import { insightLogic } from 'scenes/insights/insightLogic' import { insightSceneLogic } from 'scenes/insights/insightSceneLogic' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' @@ -15,11 +17,10 @@ import { QueryContext } from '~/queries/types' import { isFunnelsQuery, isRetentionQuery } from '~/queries/utils' import { InsightLogicProps, ItemMode } from '~/types' -import { dataNodeLogic, DataNodeLogicProps } from '../DataNode/dataNodeLogic' +import { DataNodeLogicProps, dataNodeLogic } from '../DataNode/dataNodeLogic' import { EditorFilters } from './EditorFilters' import { InsightVizDisplay } from './InsightVizDisplay' import { getCachedResults } from './utils' -import { useAttachedLogic } from 'lib/logic/scenes/useAttachedLogic' /** The key for the dataNodeLogic mounted by an InsightViz for insight of insightProps */ export const insightVizDataNodeKey = (insightProps: InsightLogicProps): string => { diff --git a/frontend/src/queries/nodes/InsightViz/InsightVizDisplay.tsx b/frontend/src/queries/nodes/InsightViz/InsightVizDisplay.tsx index eab6f5b8ed..581e061c39 100644 --- a/frontend/src/queries/nodes/InsightViz/InsightVizDisplay.tsx +++ b/frontend/src/queries/nodes/InsightViz/InsightVizDisplay.tsx @@ -1,5 +1,6 @@ import clsx from 'clsx' import { useActions, useValues } from 'kea' + import { ExportButton } from 'lib/components/ExportButton/ExportButton' import { InsightLegend } from 'lib/components/InsightLegend/InsightLegend' import { FEATURE_FLAGS } from 'lib/constants' @@ -16,29 +17,29 @@ import { InsightTimeoutState, InsightValidationError, } from 'scenes/insights/EmptyStates' +import { insightNavLogic } from 'scenes/insights/InsightNav/insightNavLogic' import { insightDataLogic } from 'scenes/insights/insightDataLogic' import { insightLogic } from 'scenes/insights/insightLogic' -import { insightNavLogic } from 'scenes/insights/InsightNav/insightNavLogic' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' import { keyForInsightLogicProps } from 'scenes/insights/sharedUtils' import { FunnelCorrelation } from 'scenes/insights/views/Funnels/FunnelCorrelation' import { FunnelStepsTable } from 'scenes/insights/views/Funnels/FunnelStepsTable' import { InsightsTable } from 'scenes/insights/views/InsightsTable/InsightsTable' +import { PathsV2 } from 'scenes/paths-v2/PathsV2' import { Paths } from 'scenes/paths/Paths' import { PathCanvasLabel } from 'scenes/paths/PathsLabel' -import { PathsV2 } from 'scenes/paths-v2/PathsV2' import { RetentionContainer } from 'scenes/retention/RetentionContainer' import { TrendInsight } from 'scenes/trends/Trends' import { InsightCalendarHeatMapContainer } from 'scenes/web-analytics/CalendarHeatMap/InsightCalendarHeatMapContainer' +import { InsightVizNode } from '~/queries/schema/schema-general' import { QueryContext } from '~/queries/types' +import { shouldQueryBeAsync } from '~/queries/utils' import { ExporterFormat, FunnelVizType, InsightType, ItemMode } from '~/types' import { InsightDisplayConfig } from './InsightDisplayConfig' import { InsightResultMetadata } from './InsightResultMetadata' import { ResultCustomizationsModal } from './ResultCustomizationsModal' -import { shouldQueryBeAsync } from '~/queries/utils' -import { InsightVizNode } from '~/queries/schema/schema-general' export function InsightVizDisplay({ disableHeader, diff --git a/frontend/src/queries/nodes/InsightViz/LifecycleToggles.tsx b/frontend/src/queries/nodes/InsightViz/LifecycleToggles.tsx index 6ac8cc8888..43aa4bf2bc 100644 --- a/frontend/src/queries/nodes/InsightViz/LifecycleToggles.tsx +++ b/frontend/src/queries/nodes/InsightViz/LifecycleToggles.tsx @@ -1,5 +1,7 @@ -import { LemonCheckbox, LemonLabel } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonCheckbox, LemonLabel } from '@posthog/lemon-ui' + import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' import { LifecycleFilter } from '~/queries/schema/schema-general' diff --git a/frontend/src/queries/nodes/InsightViz/PropertyGroupFilters/PropertyGroupFilters.tsx b/frontend/src/queries/nodes/InsightViz/PropertyGroupFilters/PropertyGroupFilters.tsx index ff2a0011a7..a53232d8ad 100644 --- a/frontend/src/queries/nodes/InsightViz/PropertyGroupFilters/PropertyGroupFilters.tsx +++ b/frontend/src/queries/nodes/InsightViz/PropertyGroupFilters/PropertyGroupFilters.tsx @@ -1,13 +1,15 @@ import './PropertyGroupFilters.scss' +import clsx from 'clsx' +import { BindLogic, useActions, useValues } from 'kea' +import React from 'react' + import { IconCopy, IconPlusSmall, IconTrash } from '@posthog/icons' import { LemonButton, LemonDivider } from '@posthog/lemon-ui' -import clsx from 'clsx' -import { BindLogic, useActions, useValues } from 'kea' + import { PropertyFilters } from 'lib/components/PropertyFilters/PropertyFilters' import { isPropertyGroupFilterLike } from 'lib/components/PropertyFilters/utils' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' -import React from 'react' import { keyForInsightLogicProps } from 'scenes/insights/sharedUtils' import { InsightQueryNode, StickinessQuery, TrendsQuery } from '~/queries/schema/schema-general' diff --git a/frontend/src/queries/nodes/InsightViz/PropertyGroupFilters/propertyGroupFilterLogic.ts b/frontend/src/queries/nodes/InsightViz/PropertyGroupFilters/propertyGroupFilterLogic.ts index 0cc92685ab..dae4b3fbd2 100644 --- a/frontend/src/queries/nodes/InsightViz/PropertyGroupFilters/propertyGroupFilterLogic.ts +++ b/frontend/src/queries/nodes/InsightViz/PropertyGroupFilters/propertyGroupFilterLogic.ts @@ -1,4 +1,5 @@ import { actions, kea, key, listeners, path, props, propsChanged, reducers, selectors } from 'kea' + import { convertPropertiesToPropertyGroup } from 'lib/components/PropertyFilters/utils' import { objectsEqual } from 'lib/utils' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' diff --git a/frontend/src/queries/nodes/InsightViz/ResultCustomizationsModal.tsx b/frontend/src/queries/nodes/InsightViz/ResultCustomizationsModal.tsx index 6f3812b59b..a5e55bddaf 100644 --- a/frontend/src/queries/nodes/InsightViz/ResultCustomizationsModal.tsx +++ b/frontend/src/queries/nodes/InsightViz/ResultCustomizationsModal.tsx @@ -1,5 +1,7 @@ -import { LemonButton, LemonColorButton, LemonModal } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonButton, LemonColorButton, LemonModal } from '@posthog/lemon-ui' + import { DataColorToken } from 'lib/colors' import { EntityFilterInfo } from 'lib/components/EntityFilterInfo' import { dataThemeLogic } from 'scenes/dataThemeLogic' diff --git a/frontend/src/queries/nodes/InsightViz/StickinessCriteria.tsx b/frontend/src/queries/nodes/InsightViz/StickinessCriteria.tsx index 7f50e9d70b..30a927ce2b 100644 --- a/frontend/src/queries/nodes/InsightViz/StickinessCriteria.tsx +++ b/frontend/src/queries/nodes/InsightViz/StickinessCriteria.tsx @@ -1,5 +1,7 @@ -import { LemonInput } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonInput } from '@posthog/lemon-ui' + import { OperatorSelect } from 'lib/components/PropertyFilters/components/OperatorValueSelect' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' diff --git a/frontend/src/queries/nodes/InsightViz/TrendsFormula.tsx b/frontend/src/queries/nodes/InsightViz/TrendsFormula.tsx index 0df54b06f4..1d256360c2 100644 --- a/frontend/src/queries/nodes/InsightViz/TrendsFormula.tsx +++ b/frontend/src/queries/nodes/InsightViz/TrendsFormula.tsx @@ -1,7 +1,9 @@ -import { IconPlusSmall, IconTrash } from '@posthog/icons' -import { LemonButton, LemonInput } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { useEffect, useState } from 'react' + +import { IconPlusSmall, IconTrash } from '@posthog/icons' +import { LemonButton, LemonInput } from '@posthog/lemon-ui' + import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' import { TrendsFormulaNode } from '~/queries/schema/schema-general' diff --git a/frontend/src/queries/nodes/InsightViz/TrendsSeries.tsx b/frontend/src/queries/nodes/InsightViz/TrendsSeries.tsx index 045bfdac9e..d332701251 100644 --- a/frontend/src/queries/nodes/InsightViz/TrendsSeries.tsx +++ b/frontend/src/queries/nodes/InsightViz/TrendsSeries.tsx @@ -1,4 +1,5 @@ import { useActions, useValues } from 'kea' + import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { SINGLE_SERIES_DISPLAY_TYPES } from 'lib/constants' import { alphabet } from 'lib/utils' diff --git a/frontend/src/queries/nodes/InsightViz/TrendsSeriesLabel.tsx b/frontend/src/queries/nodes/InsightViz/TrendsSeriesLabel.tsx index a1fcf03be9..8b79d3ef78 100644 --- a/frontend/src/queries/nodes/InsightViz/TrendsSeriesLabel.tsx +++ b/frontend/src/queries/nodes/InsightViz/TrendsSeriesLabel.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconCalculator } from '@posthog/icons' import { LemonButton } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { Tooltip } from 'lib/lemon-ui/Tooltip' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' diff --git a/frontend/src/queries/nodes/InsightViz/filters/InsightTestAccountFilter.tsx b/frontend/src/queries/nodes/InsightViz/filters/InsightTestAccountFilter.tsx index 0fbd4a6989..2d72a92d40 100644 --- a/frontend/src/queries/nodes/InsightViz/filters/InsightTestAccountFilter.tsx +++ b/frontend/src/queries/nodes/InsightViz/filters/InsightTestAccountFilter.tsx @@ -1,4 +1,5 @@ import { useActions, useValues } from 'kea' + import { TestAccountFilterSwitch } from 'lib/components/TestAccountFiltersSwitch' import { filterTestAccountsDefaultsLogic } from 'scenes/settings/environment/filterTestAccountDefaultsLogic' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/queries/nodes/InsightViz/resultCustomizationsModalLogic.ts b/frontend/src/queries/nodes/InsightViz/resultCustomizationsModalLogic.ts index dfafecd78f..b609d94dc8 100644 --- a/frontend/src/queries/nodes/InsightViz/resultCustomizationsModalLogic.ts +++ b/frontend/src/queries/nodes/InsightViz/resultCustomizationsModalLogic.ts @@ -1,4 +1,5 @@ import { actions, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' + import { DataColorToken } from 'lib/colors' import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' diff --git a/frontend/src/queries/nodes/InsightViz/utils.ts b/frontend/src/queries/nodes/InsightViz/utils.ts index 69962b2bb6..1b53632006 100644 --- a/frontend/src/queries/nodes/InsightViz/utils.ts +++ b/frontend/src/queries/nodes/InsightViz/utils.ts @@ -1,4 +1,6 @@ import equal from 'fast-deep-equal' + +import { ApiError } from 'lib/api' import { getEventNamesForAction } from 'lib/utils' import { examples } from '~/queries/examples' @@ -25,7 +27,6 @@ import { import { nodeKindToDefaultQuery } from '../InsightQuery/defaults' import { filtersToQueryNode } from '../InsightQuery/utils/filtersToQueryNode' -import { ApiError } from 'lib/api' export const getAllEventNames = (query: InsightQueryNode, allActions: ActionType[]): string[] => { if (!isInsightQueryWithSeries(query)) { diff --git a/frontend/src/queries/nodes/Node/EditHogQLButton.tsx b/frontend/src/queries/nodes/Node/EditHogQLButton.tsx index 38f6e4accb..0519490831 100644 --- a/frontend/src/queries/nodes/Node/EditHogQLButton.tsx +++ b/frontend/src/queries/nodes/Node/EditHogQLButton.tsx @@ -1,5 +1,5 @@ -import { IconQueryEditor } from 'lib/lemon-ui/icons' import { LemonButton, LemonButtonWithoutSideActionProps } from 'lib/lemon-ui/LemonButton' +import { IconQueryEditor } from 'lib/lemon-ui/icons' import { urls } from 'scenes/urls' export interface EditHogQLButtonProps extends LemonButtonWithoutSideActionProps { diff --git a/frontend/src/queries/nodes/Node/OpenEditorButton.tsx b/frontend/src/queries/nodes/Node/OpenEditorButton.tsx index affb8ced2d..145b5f4fcd 100644 --- a/frontend/src/queries/nodes/Node/OpenEditorButton.tsx +++ b/frontend/src/queries/nodes/Node/OpenEditorButton.tsx @@ -1,5 +1,5 @@ -import { IconPreview } from 'lib/lemon-ui/icons' import { LemonButton, LemonButtonWithoutSideActionProps } from 'lib/lemon-ui/LemonButton' +import { IconPreview } from 'lib/lemon-ui/icons' import { urls } from 'scenes/urls' import { Node } from '~/queries/schema/schema-general' diff --git a/frontend/src/queries/nodes/PersonsNode/DeletePersonButton.tsx b/frontend/src/queries/nodes/PersonsNode/DeletePersonButton.tsx index 24d622c3b4..8e41b3a42b 100644 --- a/frontend/src/queries/nodes/PersonsNode/DeletePersonButton.tsx +++ b/frontend/src/queries/nodes/PersonsNode/DeletePersonButton.tsx @@ -1,5 +1,7 @@ -import { IconTrash } from '@posthog/icons' import { useActions } from 'kea' + +import { IconTrash } from '@posthog/icons' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { personDeleteModalLogic } from 'scenes/persons/personDeleteModalLogic' diff --git a/frontend/src/queries/nodes/PersonsNode/PersonPropertyFilters.tsx b/frontend/src/queries/nodes/PersonsNode/PersonPropertyFilters.tsx index 4664e3c461..f38ac87990 100644 --- a/frontend/src/queries/nodes/PersonsNode/PersonPropertyFilters.tsx +++ b/frontend/src/queries/nodes/PersonsNode/PersonPropertyFilters.tsx @@ -1,6 +1,7 @@ +import { useState } from 'react' + import { PropertyFilters } from 'lib/components/PropertyFilters/PropertyFilters' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' -import { useState } from 'react' import { ActorsQuery, NodeKind, PersonsNode } from '~/queries/schema/schema-general' import { isActorsQuery } from '~/queries/utils' diff --git a/frontend/src/queries/nodes/PersonsNode/PersonsSearch.tsx b/frontend/src/queries/nodes/PersonsNode/PersonsSearch.tsx index 68ab1df4e0..106d31ccc7 100644 --- a/frontend/src/queries/nodes/PersonsNode/PersonsSearch.tsx +++ b/frontend/src/queries/nodes/PersonsNode/PersonsSearch.tsx @@ -1,4 +1,5 @@ import { IconInfo } from '@posthog/icons' + import { LemonInput } from 'lib/lemon-ui/LemonInput/LemonInput' import { Tooltip } from 'lib/lemon-ui/Tooltip' diff --git a/frontend/src/queries/nodes/SavedInsight/SavedInsight.tsx b/frontend/src/queries/nodes/SavedInsight/SavedInsight.tsx index 249ec30500..4d72f4a48a 100644 --- a/frontend/src/queries/nodes/SavedInsight/SavedInsight.tsx +++ b/frontend/src/queries/nodes/SavedInsight/SavedInsight.tsx @@ -1,5 +1,7 @@ import { BuiltLogic, LogicWrapper, useValues } from 'kea' + import { LoadingBar } from 'lib/lemon-ui/LoadingBar' +import { useAttachedLogic } from 'lib/logic/scenes/useAttachedLogic' import { insightDataLogic } from 'scenes/insights/insightDataLogic' import { insightLogic } from 'scenes/insights/insightLogic' @@ -7,7 +9,6 @@ import { Query } from '~/queries/Query/Query' import { SavedInsightNode } from '~/queries/schema/schema-general' import { QueryContext } from '~/queries/types' import { InsightLogicProps } from '~/types' -import { useAttachedLogic } from 'lib/logic/scenes/useAttachedLogic' interface InsightProps { query: SavedInsightNode diff --git a/frontend/src/queries/nodes/WebOverview/WebOverview.tsx b/frontend/src/queries/nodes/WebOverview/WebOverview.tsx index e2c0e67867..0b1e714690 100644 --- a/frontend/src/queries/nodes/WebOverview/WebOverview.tsx +++ b/frontend/src/queries/nodes/WebOverview/WebOverview.tsx @@ -1,16 +1,18 @@ -import { IconDashboard, IconGear, IconTrending } from '@posthog/icons' -import { LemonButton, LemonSkeleton, LemonTag } from '@posthog/lemon-ui' import clsx from 'clsx' import { useValues } from 'kea' +import { useState } from 'react' + +import { IconDashboard, IconGear, IconTrending } from '@posthog/icons' +import { LemonButton, LemonSkeleton, LemonTag } from '@posthog/lemon-ui' + import { getColorVar } from 'lib/colors' import { useFeatureFlag } from 'lib/hooks/useFeatureFlag' -import { IconTrendingDown, IconTrendingFlat } from 'lib/lemon-ui/icons' import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { Tooltip } from 'lib/lemon-ui/Tooltip' +import { IconTrendingDown, IconTrendingFlat } from 'lib/lemon-ui/icons' import { humanFriendlyDuration, humanFriendlyLargeNumber, isNotNil, range } from 'lib/utils' import { getCurrencySymbol } from 'lib/utils/geography/currency' import { DEFAULT_CURRENCY } from 'lib/utils/geography/currency' -import { useState } from 'react' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' diff --git a/frontend/src/queries/nodes/WebVitals/WebVitals.stories.tsx b/frontend/src/queries/nodes/WebVitals/WebVitals.stories.tsx index 6dc8ee2cf7..5663a29894 100644 --- a/frontend/src/queries/nodes/WebVitals/WebVitals.stories.tsx +++ b/frontend/src/queries/nodes/WebVitals/WebVitals.stories.tsx @@ -1,8 +1,8 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' import { mswDecorator } from '~/mocks/browser' -import { examples } from '~/queries/examples' import { Query } from '~/queries/Query/Query' +import { examples } from '~/queries/examples' import webVitals from './__mocks__/WebVitals.json' import webVitalsTrends from './__mocks__/WebVitalsTrends.json' diff --git a/frontend/src/queries/nodes/WebVitals/WebVitals.tsx b/frontend/src/queries/nodes/WebVitals/WebVitals.tsx index 69d8673897..0dde3aa604 100644 --- a/frontend/src/queries/nodes/WebVitals/WebVitals.tsx +++ b/frontend/src/queries/nodes/WebVitals/WebVitals.tsx @@ -1,9 +1,11 @@ -import { Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' -import { IconOpenInNew } from 'lib/lemon-ui/icons' -import { LemonButton } from 'lib/lemon-ui/LemonButton' -import { addProductIntentForCrossSell, ProductIntentContext } from 'lib/utils/product-intents' import { useMemo, useState } from 'react' + +import { Link } from '@posthog/lemon-ui' + +import { LemonButton } from 'lib/lemon-ui/LemonButton' +import { IconOpenInNew } from 'lib/lemon-ui/icons' +import { ProductIntentContext, addProductIntentForCrossSell } from 'lib/utils/product-intents' import { urls } from 'scenes/urls' import { webAnalyticsLogic } from 'scenes/web-analytics/webAnalyticsLogic' @@ -13,9 +15,9 @@ import { QueryContext } from '~/queries/types' import { ProductKey } from '~/types' import { dataNodeLogic } from '../DataNode/dataNodeLogic' -import { getMetric } from './definitions' import { WebVitalsContent } from './WebVitalsContent' import { WebVitalsTab } from './WebVitalsTab' +import { getMetric } from './definitions' let uniqueNode = 0 export function WebVitals(props: { diff --git a/frontend/src/queries/nodes/WebVitals/WebVitalsContent.tsx b/frontend/src/queries/nodes/WebVitals/WebVitalsContent.tsx index c2770c8167..624778e206 100644 --- a/frontend/src/queries/nodes/WebVitals/WebVitalsContent.tsx +++ b/frontend/src/queries/nodes/WebVitals/WebVitalsContent.tsx @@ -1,16 +1,15 @@ -import { IconInfo } from '@posthog/icons' -import { LemonSkeleton, Tooltip } from '@posthog/lemon-ui' import { useValues } from 'kea' import { useMemo } from 'react' + +import { IconInfo } from '@posthog/icons' +import { LemonSkeleton, Tooltip } from '@posthog/lemon-ui' + import { webAnalyticsLogic } from 'scenes/web-analytics/webAnalyticsLogic' import { WebVitalsQueryResponse } from '~/queries/schema/schema-general' import { EXPERIENCE_PER_BAND, - getMetric, - getMetricBand, - getThresholdColor, GRADE_PER_BAND, ICON_PER_BAND, LONG_METRIC_NAME, @@ -19,6 +18,9 @@ import { QUANTIFIER_PER_BAND, VALUES_PER_BAND, WEB_VITALS_THRESHOLDS, + getMetric, + getMetricBand, + getThresholdColor, } from './definitions' type WebVitalsContentProps = { diff --git a/frontend/src/queries/nodes/WebVitals/WebVitalsPathBreakdown.stories.tsx b/frontend/src/queries/nodes/WebVitals/WebVitalsPathBreakdown.stories.tsx index 1e616d86ea..e3a9a26baf 100644 --- a/frontend/src/queries/nodes/WebVitals/WebVitalsPathBreakdown.stories.tsx +++ b/frontend/src/queries/nodes/WebVitals/WebVitalsPathBreakdown.stories.tsx @@ -1,8 +1,8 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' import { mswDecorator } from '~/mocks/browser' -import { examples } from '~/queries/examples' import { Query } from '~/queries/Query/Query' +import { examples } from '~/queries/examples' import webVitalsPathBreakdown from './__mocks__/WebVitalsPathBreakdown.json' diff --git a/frontend/src/queries/nodes/WebVitals/WebVitalsPathBreakdown.tsx b/frontend/src/queries/nodes/WebVitals/WebVitalsPathBreakdown.tsx index c601520d30..a72ba4df3e 100644 --- a/frontend/src/queries/nodes/WebVitals/WebVitalsPathBreakdown.tsx +++ b/frontend/src/queries/nodes/WebVitals/WebVitalsPathBreakdown.tsx @@ -1,8 +1,9 @@ import clsx from 'clsx' import { useActions, useValues } from 'kea' +import { useMemo, useState } from 'react' + import { parseAliasToReadable } from 'lib/components/PathCleanFilters/PathCleanFilterItem' import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' -import { useMemo, useState } from 'react' import { webAnalyticsLogic } from 'scenes/web-analytics/webAnalyticsLogic' import { @@ -16,11 +17,11 @@ import { PropertyFilterType } from '~/types' import { dataNodeLogic } from '../DataNode/dataNodeLogic' import { - computePositionInBand, - getValueWithUnit, ICON_PER_BAND, WEB_VITALS_COLORS, WEB_VITALS_THRESHOLDS, + computePositionInBand, + getValueWithUnit, } from './definitions' let uniqueNode = 0 diff --git a/frontend/src/queries/nodes/WebVitals/WebVitalsProgressBar.tsx b/frontend/src/queries/nodes/WebVitals/WebVitalsProgressBar.tsx index 4727b84ad8..ff611480e9 100644 --- a/frontend/src/queries/nodes/WebVitals/WebVitalsProgressBar.tsx +++ b/frontend/src/queries/nodes/WebVitals/WebVitalsProgressBar.tsx @@ -1,11 +1,11 @@ import { WebVitalsMetric, WebVitalsMetricBand } from '~/queries/schema/schema-general' import { + WEB_VITALS_COLORS, + WEB_VITALS_THRESHOLDS, computePositionInBand, getMetricBand, getThresholdColor, - WEB_VITALS_COLORS, - WEB_VITALS_THRESHOLDS, } from './definitions' interface WebVitalsProgressBarProps { diff --git a/frontend/src/queries/nodes/WebVitals/WebVitalsTab.tsx b/frontend/src/queries/nodes/WebVitals/WebVitalsTab.tsx index a91cfac17e..4c6aa0c56d 100644 --- a/frontend/src/queries/nodes/WebVitals/WebVitalsTab.tsx +++ b/frontend/src/queries/nodes/WebVitals/WebVitalsTab.tsx @@ -1,11 +1,12 @@ +import clsx from 'clsx' + import { IconInfo } from '@posthog/icons' import { LemonSkeleton, Tooltip } from '@posthog/lemon-ui' -import clsx from 'clsx' import { WebVitalsMetric } from '~/queries/schema/schema-general' -import { getThresholdColor, getValueWithUnit, LONG_METRIC_NAME, METRIC_DESCRIPTION } from './definitions' import { WebVitalsProgressBar } from './WebVitalsProgressBar' +import { LONG_METRIC_NAME, METRIC_DESCRIPTION, getThresholdColor, getValueWithUnit } from './definitions' type WebVitalsTabProps = { value: number | undefined diff --git a/frontend/src/queries/nodes/WebVitals/definitions.ts b/frontend/src/queries/nodes/WebVitals/definitions.ts index f26928ddac..6bb25b7f80 100644 --- a/frontend/src/queries/nodes/WebVitals/definitions.ts +++ b/frontend/src/queries/nodes/WebVitals/definitions.ts @@ -1,4 +1,5 @@ import { IconCheckCircle, IconWarning } from '@posthog/icons' + import { IconExclamation } from 'lib/lemon-ui/icons' import { WebVitalsPercentile } from 'scenes/web-analytics/common' diff --git a/frontend/src/queries/query.test.ts b/frontend/src/queries/query.test.ts index af29c00e56..1ab88afc9a 100644 --- a/frontend/src/queries/query.test.ts +++ b/frontend/src/queries/query.test.ts @@ -1,6 +1,7 @@ -import { ApiError } from 'lib/api' import posthog from 'posthog-js' +import { ApiError } from 'lib/api' + import { useMocks } from '~/mocks/jest' import { performQuery, queryExportContext } from '~/queries/query' import { EventsQuery, HogQLQuery, NodeKind } from '~/queries/schema/schema-general' diff --git a/frontend/src/queries/query.ts b/frontend/src/queries/query.ts index a0b1030240..5d662dc483 100644 --- a/frontend/src/queries/query.ts +++ b/frontend/src/queries/query.ts @@ -1,6 +1,7 @@ +import posthog from 'posthog-js' + import api, { ApiMethodOptions } from 'lib/api' import { delay } from 'lib/utils' -import posthog from 'posthog-js' import { DashboardFilter, diff --git a/frontend/src/queries/schema-guards.ts b/frontend/src/queries/schema-guards.ts index df069a7dcf..98cbc3d278 100644 --- a/frontend/src/queries/schema-guards.ts +++ b/frontend/src/queries/schema-guards.ts @@ -8,9 +8,8 @@ import { import { AnyPropertyFilter, SessionPropertyFilter } from '~/types' import schema from './schema.json' -const ajv = new Ajv({ - allowUnionTypes: true, -}) + +const ajv = new Ajv({ allowUnionTypes: true }) ajv.addSchema(schema) export const isAnyPropertyFilters = (data: unknown): data is AnyPropertyFilter[] => { diff --git a/frontend/src/queries/schema/index.ts b/frontend/src/queries/schema/index.ts index 5d4ea54de6..08560935ff 100644 --- a/frontend/src/queries/schema/index.ts +++ b/frontend/src/queries/schema/index.ts @@ -4,10 +4,9 @@ // For some reason Webpack (Storybook) and Sucrase (Jest) don't correctly process enums exported via `export * from ...` // (even though our actual app's esbuild setup compiles perfectly well.) -/* oxlint-disable simple-import-sort/exports */ +// sort-imports-ignore export * from './schema-assistant-messages' export * from './schema-assistant-queries' export * from './schema-assistant-replay' export * from './schema-general' export * from './schema-surveys' -/* oxlint-enable simple-import-sort/exports */ diff --git a/frontend/src/queries/schema/schema-assistant-messages.ts b/frontend/src/queries/schema/schema-assistant-messages.ts index 532a156a6d..b896dc151d 100644 --- a/frontend/src/queries/schema/schema-assistant-messages.ts +++ b/frontend/src/queries/schema/schema-assistant-messages.ts @@ -1,8 +1,5 @@ -import type { MaxUIContext } from 'scenes/max/maxTypes' import type { MaxBillingContext } from 'scenes/max/maxBillingContextLogic' - -// re-export MaxBillingContext to make it available in the schema -export type { MaxBillingContext } +import type { MaxUIContext } from 'scenes/max/maxTypes' import { AssistantFunnelsQuery, @@ -11,6 +8,9 @@ import { AssistantTrendsQuery, } from './schema-assistant-queries' +// re-export MaxBillingContext to make it available in the schema +export type { MaxBillingContext } + // Define ProsemirrorJSONContent locally to avoid exporting the TipTap type into schema.json // which leads to improper type naming // This matches the TipTap/Prosemirror JSONContent structure diff --git a/frontend/src/queries/types.ts b/frontend/src/queries/types.ts index b64a013c27..744e93ab77 100644 --- a/frontend/src/queries/types.ts +++ b/frontend/src/queries/types.ts @@ -9,6 +9,7 @@ import { RefreshType, } from '~/queries/schema/schema-general' import { InsightLogicProps, TrendResult } from '~/types' + import { ColumnFeature } from './nodes/DataTable/DataTable' /** Pass custom metadata to queries. Used for e.g. custom columns in the DataTable. */ diff --git a/frontend/src/queries/utils.test.ts b/frontend/src/queries/utils.test.ts index ec20158cd0..66a9a0fc41 100644 --- a/frontend/src/queries/utils.test.ts +++ b/frontend/src/queries/utils.test.ts @@ -1,12 +1,13 @@ import { MOCK_TEAM_ID } from 'lib/api.mock' + import { dayjs } from 'lib/dayjs' +import { getAppContext } from 'lib/utils/getAppContext' import { teamLogic } from 'scenes/teamLogic' import { initKeaTests } from '~/test/init' import { AppContext, TeamType } from '~/types' import { hogql } from './utils' -import { getAppContext } from 'lib/utils/getAppContext' window.POSTHOG_APP_CONTEXT = { current_team: { id: MOCK_TEAM_ID } } as unknown as AppContext diff --git a/frontend/src/queries/utils.ts b/frontend/src/queries/utils.ts index 011a6522ae..ec9cfdcd7c 100644 --- a/frontend/src/queries/utils.ts +++ b/frontend/src/queries/utils.ts @@ -1,6 +1,7 @@ import { TaxonomicFilterGroupType, TaxonomicFilterValue } from 'lib/components/TaxonomicFilter/types' import { PERCENT_STACK_VIEW_DISPLAY_TYPE } from 'lib/constants' import { dayjs } from 'lib/dayjs' +import { getAppContext } from 'lib/utils/getAppContext' import { ActionsNode, @@ -8,10 +9,10 @@ import { BreakdownFilter, CalendarHeatmapQuery, CompareFilter, - DatabaseSchemaQuery, DataTableNode, DataVisualizationNode, DataWarehouseNode, + DatabaseSchemaQuery, DateRange, ErrorTrackingIssueCorrelationQuery, ErrorTrackingQuery, @@ -63,7 +64,6 @@ import { import { BaseMathType, ChartDisplayType, IntervalType } from '~/types' import { LATEST_VERSIONS } from './latest-versions' -import { getAppContext } from 'lib/utils/getAppContext' export function isDataNode(node?: Record | null): node is EventsQuery | PersonsNode { return ( diff --git a/frontend/src/scenes/App.tsx b/frontend/src/scenes/App.tsx index a8369e3936..3f148b4dde 100644 --- a/frontend/src/scenes/App.tsx +++ b/frontend/src/scenes/App.tsx @@ -1,4 +1,7 @@ import { BindLogic, BuiltLogic, useMountedLogic, useValues } from 'kea' +import { Slide, ToastContainer } from 'react-toastify' + +import { KeaDevtools } from 'lib/KeaDevTools' import { FEATURE_FLAGS, MOCK_NODE_PROCESS } from 'lib/constants' import { useThemedHtml } from 'lib/hooks/useThemedHtml' import { ToastCloseButton } from 'lib/lemon-ui/LemonToast/LemonToast' @@ -6,19 +9,16 @@ import { SpinnerOverlay } from 'lib/lemon-ui/Spinner/Spinner' import { apiStatusLogic } from 'lib/logic/apiStatusLogic' import { eventIngestionRestrictionLogic } from 'lib/logic/eventIngestionRestrictionLogic' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { Slide, ToastContainer } from 'react-toastify' +import { appLogic } from 'scenes/appLogic' import { appScenes } from 'scenes/appScenes' import { sceneLogic } from 'scenes/sceneLogic' import { userLogic } from 'scenes/userLogic' import { ErrorBoundary } from '~/layout/ErrorBoundary' import { GlobalModals } from '~/layout/GlobalModals' -import { breadcrumbsLogic } from '~/layout/navigation/Breadcrumbs/breadcrumbsLogic' import { Navigation } from '~/layout/navigation-3000/Navigation' import { themeLogic } from '~/layout/navigation-3000/themeLogic' - -import { KeaDevtools } from 'lib/KeaDevTools' -import { appLogic } from 'scenes/appLogic' +import { breadcrumbsLogic } from '~/layout/navigation/Breadcrumbs/breadcrumbsLogic' window.process = MOCK_NODE_PROCESS diff --git a/frontend/src/scenes/PreflightCheck/PreflightCheck.tsx b/frontend/src/scenes/PreflightCheck/PreflightCheck.tsx index 5c2f8eaf0e..cec43abb5e 100644 --- a/frontend/src/scenes/PreflightCheck/PreflightCheck.tsx +++ b/frontend/src/scenes/PreflightCheck/PreflightCheck.tsx @@ -1,15 +1,17 @@ import './PreflightCheck.scss' +import clsx from 'clsx' +import { useActions, useValues } from 'kea' + import { IconCheckCircle, IconCollapse, IconExpand, IconWarning } from '@posthog/icons' import { Link, Spinner } from '@posthog/lemon-ui' -import clsx from 'clsx' -import { useActions, useValues } from 'kea' + import { AnimatedCollapsible } from 'lib/components/AnimatedCollapsible' import { BridgePage } from 'lib/components/BridgePage/BridgePage' -import { IconErrorOutline, IconRefresh } from 'lib/lemon-ui/icons' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonDivider } from 'lib/lemon-ui/LemonDivider' import { LemonRow } from 'lib/lemon-ui/LemonRow' +import { IconErrorOutline, IconRefresh } from 'lib/lemon-ui/icons' import { capitalizeFirstLetter } from 'lib/utils' import { SceneExport } from 'scenes/sceneTypes' diff --git a/frontend/src/scenes/PreflightCheck/preflightLogic.test.ts b/frontend/src/scenes/PreflightCheck/preflightLogic.test.ts index 9ef3b88c8c..e31eaecbf6 100644 --- a/frontend/src/scenes/PreflightCheck/preflightLogic.test.ts +++ b/frontend/src/scenes/PreflightCheck/preflightLogic.test.ts @@ -1,5 +1,6 @@ import { router } from 'kea-router' import { expectLogic } from 'kea-test-utils' + import { urls } from 'scenes/urls' import { initKeaTests } from '~/test/init' diff --git a/frontend/src/scenes/PreflightCheck/preflightLogic.tsx b/frontend/src/scenes/PreflightCheck/preflightLogic.tsx index bd4bc963ee..22ffb84d92 100644 --- a/frontend/src/scenes/PreflightCheck/preflightLogic.tsx +++ b/frontend/src/scenes/PreflightCheck/preflightLogic.tsx @@ -1,9 +1,10 @@ import { actions, events, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { actionToUrl, router, urlToAction } from 'kea-router' +import posthog from 'posthog-js' + import api from 'lib/api' import { getAppContext } from 'lib/utils/getAppContext' -import posthog from 'posthog-js' import { urls } from 'scenes/urls' import { PreflightStatus, Realm } from '~/types' diff --git a/frontend/src/scenes/Unsubscribe/Unsubscribe.tsx b/frontend/src/scenes/Unsubscribe/Unsubscribe.tsx index b7658b413e..fce56e7ba8 100644 --- a/frontend/src/scenes/Unsubscribe/Unsubscribe.tsx +++ b/frontend/src/scenes/Unsubscribe/Unsubscribe.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { BridgePage } from 'lib/components/BridgePage/BridgePage' import { SpinnerOverlay } from 'lib/lemon-ui/Spinner/Spinner' import { SceneExport } from 'scenes/sceneTypes' diff --git a/frontend/src/scenes/Unsubscribe/unsubscribeLogic.ts b/frontend/src/scenes/Unsubscribe/unsubscribeLogic.ts index c26c99c6a2..7a2bd77f57 100644 --- a/frontend/src/scenes/Unsubscribe/unsubscribeLogic.ts +++ b/frontend/src/scenes/Unsubscribe/unsubscribeLogic.ts @@ -1,6 +1,7 @@ import { actions, afterMount, kea, path } from 'kea' import { loaders } from 'kea-loaders' import { router } from 'kea-router' + import api from 'lib/api' import type { unsubscribeLogicType } from './unsubscribeLogicType' diff --git a/frontend/src/scenes/activity/explore/EventDetails.tsx b/frontend/src/scenes/activity/explore/EventDetails.tsx index eaa8cb566b..19feb650e5 100644 --- a/frontend/src/scenes/activity/explore/EventDetails.tsx +++ b/frontend/src/scenes/activity/explore/EventDetails.tsx @@ -1,15 +1,16 @@ +import { ErrorDisplay, idFrom } from 'lib/components/Errors/ErrorDisplay' +import { EventPropertyTabs } from 'lib/components/EventPropertyTabs/EventPropertyTabs' import { JSONViewer } from 'lib/components/JSONViewer' import { PropertiesTable } from 'lib/components/PropertiesTable' +import ViewRecordingButton from 'lib/components/ViewRecordingButton/ViewRecordingButton' +import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { LemonTableProps } from 'lib/lemon-ui/LemonTable' import { Link } from 'lib/lemon-ui/Link' -import { ConversationDisplay } from 'products/llm_observability/frontend/ConversationDisplay/ConversationDisplay' import { KNOWN_PROMOTED_PROPERTY_PARENTS } from '~/taxonomy/taxonomy' import { EventType, PropertyDefinitionType } from '~/types' -import { LemonBanner } from 'lib/lemon-ui/LemonBanner' -import { EventPropertyTabs } from 'lib/components/EventPropertyTabs/EventPropertyTabs' -import { ErrorDisplay, idFrom } from 'lib/components/Errors/ErrorDisplay' -import ViewRecordingButton from 'lib/components/ViewRecordingButton/ViewRecordingButton' + +import { ConversationDisplay } from 'products/llm_observability/frontend/ConversationDisplay/ConversationDisplay' interface EventDetailsProps { event: EventType diff --git a/frontend/src/scenes/activity/explore/Events.stories.tsx b/frontend/src/scenes/activity/explore/Events.stories.tsx index 67675e326d..ad66d6fa12 100644 --- a/frontend/src/scenes/activity/explore/Events.stories.tsx +++ b/frontend/src/scenes/activity/explore/Events.stories.tsx @@ -1,4 +1,5 @@ import { Meta, StoryObj } from '@storybook/react' + import { App } from 'scenes/App' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/activity/explore/EventsScene.tsx b/frontend/src/scenes/activity/explore/EventsScene.tsx index 37f699b7bf..9c0b220298 100644 --- a/frontend/src/scenes/activity/explore/EventsScene.tsx +++ b/frontend/src/scenes/activity/explore/EventsScene.tsx @@ -1,15 +1,16 @@ import { useActions, useValues } from 'kea' -import { QueryFeature } from '~/queries/nodes/DataTable/queryFeatures' -import { Query } from '~/queries/Query/Query' - -import { eventsSceneLogic } from './eventsSceneLogic' -import { SceneExport } from 'scenes/sceneTypes' import { PageHeader } from 'lib/components/PageHeader' import { LemonTabs } from 'lib/lemon-ui/LemonTabs' -import { ActivityTab } from '~/types' +import { SceneExport } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' +import { Query } from '~/queries/Query/Query' +import { QueryFeature } from '~/queries/nodes/DataTable/queryFeatures' +import { ActivityTab } from '~/types' + +import { eventsSceneLogic } from './eventsSceneLogic' + export function EventsScene({ tabId }: { tabId?: string } = {}): JSX.Element { const { query } = useValues(eventsSceneLogic) const { setQuery } = useActions(eventsSceneLogic) diff --git a/frontend/src/scenes/activity/explore/createActionFromEvent.test.js b/frontend/src/scenes/activity/explore/createActionFromEvent.test.js index 729fab0e3d..301959af7b 100644 --- a/frontend/src/scenes/activity/explore/createActionFromEvent.test.js +++ b/frontend/src/scenes/activity/explore/createActionFromEvent.test.js @@ -1,6 +1,7 @@ -import { router } from 'kea-router' import { api } from 'lib/api.mock' +import { router } from 'kea-router' + import { initKeaTests } from '~/test/init' import { createActionFromEvent } from './createActionFromEvent' diff --git a/frontend/src/scenes/activity/explore/createActionFromEvent.tsx b/frontend/src/scenes/activity/explore/createActionFromEvent.tsx index 3a4aea2c03..5ae7ce7a4a 100644 --- a/frontend/src/scenes/activity/explore/createActionFromEvent.tsx +++ b/frontend/src/scenes/activity/explore/createActionFromEvent.tsx @@ -1,4 +1,5 @@ import { router } from 'kea-router' + import { CLICK_TARGETS, elementToSelector, matchesDataAttribute } from 'lib/actionUtils' import api from 'lib/api' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' diff --git a/frontend/src/scenes/activity/explore/eventsSceneLogic.tsx b/frontend/src/scenes/activity/explore/eventsSceneLogic.tsx index 5b9755252d..faab1ec6af 100644 --- a/frontend/src/scenes/activity/explore/eventsSceneLogic.tsx +++ b/frontend/src/scenes/activity/explore/eventsSceneLogic.tsx @@ -1,10 +1,15 @@ import equal from 'fast-deep-equal' import { actions, connect, kea, path, reducers, selectors } from 'kea' import { UrlToActionPayload } from 'kea-router/lib/types' + import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' +import { tabAwareActionToUrl } from 'lib/logic/scenes/tabAwareActionToUrl' +import { tabAwareScene } from 'lib/logic/scenes/tabAwareScene' +import { tabAwareUrlToAction } from 'lib/logic/scenes/tabAwareUrlToAction' import { objectsEqual } from 'lib/utils' import { getDefaultEventsSceneQuery } from 'scenes/activity/explore/defaults' +import { Scene } from 'scenes/sceneTypes' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' @@ -13,10 +18,6 @@ import { Node } from '~/queries/schema/schema-general' import { ActivityTab, Breadcrumb } from '~/types' import type { eventsSceneLogicType } from './eventsSceneLogicType' -import { tabAwareScene } from 'lib/logic/scenes/tabAwareScene' -import { tabAwareActionToUrl } from 'lib/logic/scenes/tabAwareActionToUrl' -import { tabAwareUrlToAction } from 'lib/logic/scenes/tabAwareUrlToAction' -import { Scene } from 'scenes/sceneTypes' export const eventsSceneLogic = kea([ path(['scenes', 'events', 'eventsSceneLogic']), diff --git a/frontend/src/scenes/activity/live/LiveEventsTable.tsx b/frontend/src/scenes/activity/live/LiveEventsTable.tsx index d20c3061e9..5f7e1394b7 100644 --- a/frontend/src/scenes/activity/live/LiveEventsTable.tsx +++ b/frontend/src/scenes/activity/live/LiveEventsTable.tsx @@ -1,20 +1,24 @@ -import { IconPauseFilled, IconPlayFilled } from '@posthog/icons' -import { LemonButton, LemonTabs, Spinner, Tooltip } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' + +import { IconPauseFilled, IconPlayFilled } from '@posthog/icons' +import { LemonButton, LemonTabs, Spinner, Tooltip } from '@posthog/lemon-ui' + +import { PageHeader } from 'lib/components/PageHeader' import { PropertyKeyInfo } from 'lib/components/PropertyKeyInfo' -import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { TZLabel } from 'lib/components/TZLabel' +import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { More } from 'lib/lemon-ui/LemonButton/More' import { LemonTable, LemonTableColumns } from 'lib/lemon-ui/LemonTable' -import { EventName } from 'products/actions/frontend/components/EventName' import { liveEventsTableLogic } from 'scenes/activity/live/liveEventsTableLogic' import { PersonDisplay } from 'scenes/persons/PersonDisplay' +import { SceneExport } from 'scenes/sceneTypes' +import { urls } from 'scenes/urls' + import { EventCopyLinkButton } from '~/queries/nodes/DataTable/EventRowActions' import { ActivityTab, LiveEvent } from '~/types' -import { SceneExport } from 'scenes/sceneTypes' -import { PageHeader } from 'lib/components/PageHeader' -import { urls } from 'scenes/urls' + +import { EventName } from 'products/actions/frontend/components/EventName' const columns: LemonTableColumns = [ { diff --git a/frontend/src/scenes/activity/live/liveEventsTableLogic.tsx b/frontend/src/scenes/activity/live/liveEventsTableLogic.tsx index 7e3374fdf1..9417f305f5 100644 --- a/frontend/src/scenes/activity/live/liveEventsTableLogic.tsx +++ b/frontend/src/scenes/activity/live/liveEventsTableLogic.tsx @@ -1,15 +1,17 @@ -import { lemonToast, Spinner } from '@posthog/lemon-ui' import { actions, connect, events, kea, listeners, path, props, reducers, selectors } from 'kea' + +import { Spinner, lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' +import { tabAwareScene } from 'lib/logic/scenes/tabAwareScene' import { liveEventsHostOrigin } from 'lib/utils/apiHost' +import { Scene } from 'scenes/sceneTypes' import { teamLogic } from 'scenes/teamLogic' +import { urls } from 'scenes/urls' import { Breadcrumb, LiveEvent } from '~/types' import type { liveEventsTableLogicType } from './liveEventsTableLogicType' -import { tabAwareScene } from 'lib/logic/scenes/tabAwareScene' -import { Scene } from 'scenes/sceneTypes' -import { urls } from 'scenes/urls' const ERROR_TOAST_ID = 'live-stream-error' diff --git a/frontend/src/scenes/alerts/activityDescriptions.tsx b/frontend/src/scenes/alerts/activityDescriptions.tsx index d1b6591031..4f00202142 100644 --- a/frontend/src/scenes/alerts/activityDescriptions.tsx +++ b/frontend/src/scenes/alerts/activityDescriptions.tsx @@ -1,7 +1,7 @@ import { ActivityLogItem, - defaultDescriber, HumanizedChange, + defaultDescriber, userNameForLogItem, } from 'lib/components/ActivityLog/humanizeActivity' import { Link } from 'lib/lemon-ui/Link' diff --git a/frontend/src/scenes/annotations/AnnotationModal.tsx b/frontend/src/scenes/annotations/AnnotationModal.tsx index 1045fcc134..6af80d9dcb 100644 --- a/frontend/src/scenes/annotations/AnnotationModal.tsx +++ b/frontend/src/scenes/annotations/AnnotationModal.tsx @@ -1,3 +1,6 @@ +import { useActions, useValues } from 'kea' +import { Form } from 'kea-forms' + import { LemonButton, LemonCalendarSelectInput, @@ -8,8 +11,6 @@ import { LemonTextAreaMarkdown, Link, } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' -import { Form } from 'kea-forms' import { LemonField } from 'lib/lemon-ui/LemonField' import { shortTimeZone } from 'lib/utils' diff --git a/frontend/src/scenes/annotations/Annotations.stories.tsx b/frontend/src/scenes/annotations/Annotations.stories.tsx index 93893b9a71..b28cf71dbf 100644 --- a/frontend/src/scenes/annotations/Annotations.stories.tsx +++ b/frontend/src/scenes/annotations/Annotations.stories.tsx @@ -1,4 +1,5 @@ import { Meta, StoryObj } from '@storybook/react' + import { App } from 'scenes/App' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/annotations/Annotations.tsx b/frontend/src/scenes/annotations/Annotations.tsx index 6cdddf0065..96ced39033 100644 --- a/frontend/src/scenes/annotations/Annotations.tsx +++ b/frontend/src/scenes/annotations/Annotations.tsx @@ -1,8 +1,12 @@ +import { useActions, useValues } from 'kea' + import { IconPencil } from '@posthog/icons' import { LemonSelect, Link } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' -import { MicrophoneHog } from 'lib/components/hedgehogs' + +import { TextContent } from 'lib/components/Cards/TextCard/TextCard' import { ProductIntroduction } from 'lib/components/ProductIntroduction/ProductIntroduction' +import { TZLabel } from 'lib/components/TZLabel' +import { MicrophoneHog } from 'lib/components/hedgehogs' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonTable, LemonTableColumn, LemonTableColumns } from 'lib/lemon-ui/LemonTable' import { createdAtColumn } from 'lib/lemon-ui/LemonTable/columnUtils' @@ -19,8 +23,6 @@ import { AnnotationScope, AnnotationType, InsightShortId, ProductKey } from '~/t import { AnnotationModal } from './AnnotationModal' import { annotationModalLogic, annotationScopeToLevel, annotationScopeToName } from './annotationModalLogic' import { annotationScopesMenuOptions, annotationsLogic } from './annotationsLogic' -import { TextContent } from 'lib/components/Cards/TextCard/TextCard' -import { TZLabel } from 'lib/components/TZLabel' export function Annotations(): JSX.Element { const { currentTeam } = useValues(teamLogic) diff --git a/frontend/src/scenes/annotations/activityDescriptions.tsx b/frontend/src/scenes/annotations/activityDescriptions.tsx index 2c0929e3e8..766c5a9a22 100644 --- a/frontend/src/scenes/annotations/activityDescriptions.tsx +++ b/frontend/src/scenes/annotations/activityDescriptions.tsx @@ -1,7 +1,7 @@ import { ActivityLogItem, - defaultDescriber, HumanizedChange, + defaultDescriber, userNameForLogItem, } from 'lib/components/ActivityLog/humanizeActivity' import { Link } from 'lib/lemon-ui/Link' diff --git a/frontend/src/scenes/annotations/annotationModalLogic.ts b/frontend/src/scenes/annotations/annotationModalLogic.ts index d077a283da..05c92119d9 100644 --- a/frontend/src/scenes/annotations/annotationModalLogic.ts +++ b/frontend/src/scenes/annotations/annotationModalLogic.ts @@ -1,7 +1,9 @@ -import {} from '@posthog/lemon-ui' import { actions, connect, kea, listeners, path, reducers, selectors } from 'kea' import { forms } from 'kea-forms' import { urlToAction } from 'kea-router' + +import '@posthog/lemon-ui' + import api from 'lib/api' import { Dayjs, dayjs } from 'lib/dayjs' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/annotations/annotationsLogic.ts b/frontend/src/scenes/annotations/annotationsLogic.ts index 32d5d89259..0ef37414bf 100644 --- a/frontend/src/scenes/annotations/annotationsLogic.ts +++ b/frontend/src/scenes/annotations/annotationsLogic.ts @@ -1,6 +1,8 @@ -import { LemonSelectOption, LemonSelectOptions } from '@posthog/lemon-ui' import { actions, connect, kea, path, reducers, selectors } from 'kea' import { actionToUrl, router, urlToAction } from 'kea-router' + +import { LemonSelectOption, LemonSelectOptions } from '@posthog/lemon-ui' + import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/appContextLogic.ts b/frontend/src/scenes/appContextLogic.ts index 5cdd8349a4..a18f071416 100644 --- a/frontend/src/scenes/appContextLogic.ts +++ b/frontend/src/scenes/appContextLogic.ts @@ -1,7 +1,8 @@ import { afterMount, connect, kea, path } from 'kea' +import posthog from 'posthog-js' + import api from 'lib/api' import { getAppContext } from 'lib/utils/getAppContext' -import posthog from 'posthog-js' import { UserType } from '~/types' diff --git a/frontend/src/scenes/appLogic.tsx b/frontend/src/scenes/appLogic.tsx index 62bb75cf9e..75c512a1f9 100644 --- a/frontend/src/scenes/appLogic.tsx +++ b/frontend/src/scenes/appLogic.tsx @@ -1,10 +1,11 @@ import { actions, connect, events, kea, path, reducers, selectors } from 'kea' -import { teamLogic } from 'scenes/teamLogic' -import { organizationLogic } from 'scenes/organizationLogic' -import { userLogic } from 'scenes/userLogic' +import { urlToAction } from 'kea-router' + import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' -import { urlToAction } from 'kea-router' +import { organizationLogic } from 'scenes/organizationLogic' +import { teamLogic } from 'scenes/teamLogic' +import { userLogic } from 'scenes/userLogic' import type { appLogicType } from './appLogicType' diff --git a/frontend/src/scenes/appScenes.ts b/frontend/src/scenes/appScenes.ts index 8c5e8b222f..899e767193 100644 --- a/frontend/src/scenes/appScenes.ts +++ b/frontend/src/scenes/appScenes.ts @@ -1,5 +1,5 @@ -import { preloadedScenes } from 'scenes/scenes' import { Scene } from 'scenes/sceneTypes' +import { preloadedScenes } from 'scenes/scenes' import { productScenes } from '~/products' diff --git a/frontend/src/scenes/authentication/InviteSignup.stories.tsx b/frontend/src/scenes/authentication/InviteSignup.stories.tsx index f57aa683c8..9b41d58c9b 100644 --- a/frontend/src/scenes/authentication/InviteSignup.stories.tsx +++ b/frontend/src/scenes/authentication/InviteSignup.stories.tsx @@ -1,11 +1,12 @@ import { Meta } from '@storybook/react' +import { useDelayedOnMountEffect } from 'lib/hooks/useOnMountEffect' + import { mswDecorator, useStorybookMocks } from '~/mocks/browser' import preflightJson from '~/mocks/fixtures/_preflight.json' import { InviteSignup } from './InviteSignup' import { inviteSignupLogic } from './inviteSignupLogic' -import { useDelayedOnMountEffect } from 'lib/hooks/useOnMountEffect' const meta: Meta = { title: 'Scenes-Other/InviteSignup', diff --git a/frontend/src/scenes/authentication/InviteSignup.tsx b/frontend/src/scenes/authentication/InviteSignup.tsx index f4b9cde720..504f5f4f7b 100644 --- a/frontend/src/scenes/authentication/InviteSignup.tsx +++ b/frontend/src/scenes/authentication/InviteSignup.tsx @@ -1,17 +1,19 @@ -import { LemonButton, LemonDivider, LemonInput } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' +import { useEffect } from 'react' + +import { LemonButton, LemonDivider, LemonInput } from '@posthog/lemon-ui' + import { BridgePage } from 'lib/components/BridgePage/BridgePage' import PasswordStrength from 'lib/components/PasswordStrength' import SignupRoleSelect from 'lib/components/SignupRoleSelect' -import { SocialLoginButtons, SSOEnforcedLoginButton } from 'lib/components/SocialLoginButton/SocialLoginButton' -import { IconChevronLeft, IconChevronRight } from 'lib/lemon-ui/icons' +import { SSOEnforcedLoginButton, SocialLoginButtons } from 'lib/components/SocialLoginButton/SocialLoginButton' import { LemonField } from 'lib/lemon-ui/LemonField' import { Link } from 'lib/lemon-ui/Link' import { ProfilePicture } from 'lib/lemon-ui/ProfilePicture' import { SpinnerOverlay } from 'lib/lemon-ui/Spinner/Spinner' -import { useEffect } from 'react' +import { IconChevronLeft, IconChevronRight } from 'lib/lemon-ui/icons' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { SceneExport } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' @@ -19,9 +21,9 @@ import { userLogic } from 'scenes/userLogic' import { PrevalidatedInvite } from '~/types' +import { SupportModalButton } from './SupportModalButton' import { ErrorCodes, inviteSignupLogic } from './inviteSignupLogic' import { loginLogic } from './loginLogic' -import { SupportModalButton } from './SupportModalButton' export const scene: SceneExport = { component: InviteSignup, diff --git a/frontend/src/scenes/authentication/Login.stories.tsx b/frontend/src/scenes/authentication/Login.stories.tsx index a68e4268a7..b120a09c59 100644 --- a/frontend/src/scenes/authentication/Login.stories.tsx +++ b/frontend/src/scenes/authentication/Login.stories.tsx @@ -1,5 +1,7 @@ import { Meta, StoryFn } from '@storybook/react' import { router } from 'kea-router' + +import { useDelayedOnMountEffect } from 'lib/hooks/useOnMountEffect' import { urls } from 'scenes/urls' import { mswDecorator, useStorybookMocks } from '~/mocks/browser' @@ -8,7 +10,6 @@ import preflightJson from '../../mocks/fixtures/_preflight.json' import { Login } from './Login' import { Login2FA } from './Login2FA' import { loginLogic } from './loginLogic' -import { useDelayedOnMountEffect } from 'lib/hooks/useOnMountEffect' const meta: Meta = { title: 'Scenes-Other/Login', diff --git a/frontend/src/scenes/authentication/Login.tsx b/frontend/src/scenes/authentication/Login.tsx index 511853c5f4..2bca28aaa4 100644 --- a/frontend/src/scenes/authentication/Login.tsx +++ b/frontend/src/scenes/authentication/Login.tsx @@ -1,23 +1,25 @@ import './Login.scss' -import { LemonButton, LemonInput } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' +import { useEffect, useRef } from 'react' + +import { LemonButton, LemonInput } from '@posthog/lemon-ui' + import { BridgePage } from 'lib/components/BridgePage/BridgePage' -import { SocialLoginButtons, SSOEnforcedLoginButton } from 'lib/components/SocialLoginButton/SocialLoginButton' +import { SSOEnforcedLoginButton, SocialLoginButtons } from 'lib/components/SocialLoginButton/SocialLoginButton' import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { LemonField } from 'lib/lemon-ui/LemonField' import { Link } from 'lib/lemon-ui/Link' -import { useEffect, useRef } from 'react' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { SceneExport } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' -import { loginLogic } from './loginLogic' import { RedirectIfLoggedInOtherInstance } from './RedirectToLoggedInInstance' import RegionSelect from './RegionSelect' import { SupportModalButton } from './SupportModalButton' +import { loginLogic } from './loginLogic' export const ERROR_MESSAGES: Record = { no_new_organizations: diff --git a/frontend/src/scenes/authentication/Login2FA.tsx b/frontend/src/scenes/authentication/Login2FA.tsx index 1240cb8511..1d38e41538 100644 --- a/frontend/src/scenes/authentication/Login2FA.tsx +++ b/frontend/src/scenes/authentication/Login2FA.tsx @@ -1,6 +1,8 @@ -import { LemonButton, LemonInput } from '@posthog/lemon-ui' import { useValues } from 'kea' import { Form } from 'kea-forms' + +import { LemonButton, LemonInput } from '@posthog/lemon-ui' + import { BridgePage } from 'lib/components/BridgePage/BridgePage' import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { LemonField } from 'lib/lemon-ui/LemonField' diff --git a/frontend/src/scenes/authentication/PasswordReset.stories.tsx b/frontend/src/scenes/authentication/PasswordReset.stories.tsx index a61c434297..cb9b37af45 100644 --- a/frontend/src/scenes/authentication/PasswordReset.stories.tsx +++ b/frontend/src/scenes/authentication/PasswordReset.stories.tsx @@ -1,5 +1,7 @@ import { Meta } from '@storybook/react' import { router } from 'kea-router' + +import { useDelayedOnMountEffect } from 'lib/hooks/useOnMountEffect' import { passwordResetLogic } from 'scenes/authentication/passwordResetLogic' import { urls } from 'scenes/urls' @@ -7,7 +9,6 @@ import { useStorybookMocks } from '~/mocks/browser' import preflightJson from '~/mocks/fixtures/_preflight.json' import { PasswordReset } from './PasswordReset' -import { useDelayedOnMountEffect } from 'lib/hooks/useOnMountEffect' // some metadata and optional parameters const meta: Meta = { diff --git a/frontend/src/scenes/authentication/PasswordReset.tsx b/frontend/src/scenes/authentication/PasswordReset.tsx index 519dadb96e..07c16a34e1 100644 --- a/frontend/src/scenes/authentication/PasswordReset.tsx +++ b/frontend/src/scenes/authentication/PasswordReset.tsx @@ -1,21 +1,23 @@ /* Scene to request a password reset email. */ -import { IconCheckCircle } from '@posthog/icons' -import { LemonButton, LemonDivider, LemonInput, Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' import { router } from 'kea-router' + +import { IconCheckCircle } from '@posthog/icons' +import { LemonButton, LemonDivider, LemonInput, Link } from '@posthog/lemon-ui' + import { BridgePage } from 'lib/components/BridgePage/BridgePage' import { CodeSnippet, Language } from 'lib/components/CodeSnippet' -import { IconErrorOutline } from 'lib/lemon-ui/icons' import { LemonField } from 'lib/lemon-ui/LemonField' import { Spinner } from 'lib/lemon-ui/Spinner/Spinner' +import { IconErrorOutline } from 'lib/lemon-ui/icons' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { SceneExport } from 'scenes/sceneTypes' -import { passwordResetLogic } from './passwordResetLogic' import { SupportModalButton } from './SupportModalButton' +import { passwordResetLogic } from './passwordResetLogic' export const scene: SceneExport = { component: PasswordReset, diff --git a/frontend/src/scenes/authentication/PasswordResetComplete.stories.tsx b/frontend/src/scenes/authentication/PasswordResetComplete.stories.tsx index bc71ed757e..bd66f80c70 100644 --- a/frontend/src/scenes/authentication/PasswordResetComplete.stories.tsx +++ b/frontend/src/scenes/authentication/PasswordResetComplete.stories.tsx @@ -1,5 +1,6 @@ // PasswordResetComplete.stories.tsx import { Meta, StoryObj } from '@storybook/react' + import { urls } from 'scenes/urls' import { mswDecorator } from '~/mocks/browser' diff --git a/frontend/src/scenes/authentication/PasswordResetComplete.tsx b/frontend/src/scenes/authentication/PasswordResetComplete.tsx index 69cbad428b..813c9c342b 100644 --- a/frontend/src/scenes/authentication/PasswordResetComplete.tsx +++ b/frontend/src/scenes/authentication/PasswordResetComplete.tsx @@ -1,15 +1,17 @@ /* Scene to enter a new password from a received reset link */ -import { LemonButton, LemonInput } from '@posthog/lemon-ui' import { useValues } from 'kea' import { Form } from 'kea-forms' + +import { LemonButton, LemonInput } from '@posthog/lemon-ui' + import { BridgePage } from 'lib/components/BridgePage/BridgePage' import PasswordStrength from 'lib/components/PasswordStrength' -import { IconErrorOutline } from 'lib/lemon-ui/icons' import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { LemonField } from 'lib/lemon-ui/LemonField' import { Spinner } from 'lib/lemon-ui/Spinner/Spinner' +import { IconErrorOutline } from 'lib/lemon-ui/icons' import { SceneExport } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/authentication/RedirectToLoggedInInstance.tsx b/frontend/src/scenes/authentication/RedirectToLoggedInInstance.tsx index 47c80a006e..bd0be58fac 100644 --- a/frontend/src/scenes/authentication/RedirectToLoggedInInstance.tsx +++ b/frontend/src/scenes/authentication/RedirectToLoggedInInstance.tsx @@ -20,14 +20,15 @@ * And it will update the subdomain, taking you to the following link * http://eu.posthogtest.com:8000/login?next=/apps */ +import { posthog } from 'posthog-js' +import { useEffect, useState } from 'react' import { LemonButton, LemonModal } from '@posthog/lemon-ui' + import { getCookie } from 'lib/api' import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { LemonProgress } from 'lib/lemon-ui/LemonProgress' import { roundToDecimal } from 'lib/utils' -import { posthog } from 'posthog-js' -import { useEffect, useState } from 'react' // cookie values const PH_CURRENT_INSTANCE = 'ph_current_instance' diff --git a/frontend/src/scenes/authentication/RegionSelect.tsx b/frontend/src/scenes/authentication/RegionSelect.tsx index 9317e6570c..3486926279 100644 --- a/frontend/src/scenes/authentication/RegionSelect.tsx +++ b/frontend/src/scenes/authentication/RegionSelect.tsx @@ -1,10 +1,12 @@ -import { IconCheckCircle } from '@posthog/icons' -import { LemonModal, LemonSelect } from '@posthog/lemon-ui' import { useValues } from 'kea' import { router } from 'kea-router' +import { useState } from 'react' + +import { IconCheckCircle } from '@posthog/icons' +import { LemonModal, LemonSelect } from '@posthog/lemon-ui' + import { CLOUD_HOSTNAMES } from 'lib/constants' import { LemonField } from 'lib/lemon-ui/LemonField' -import { useState } from 'react' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { Region } from '~/types' diff --git a/frontend/src/scenes/authentication/SupportModalButton.tsx b/frontend/src/scenes/authentication/SupportModalButton.tsx index ecdebe98be..f38038786e 100644 --- a/frontend/src/scenes/authentication/SupportModalButton.tsx +++ b/frontend/src/scenes/authentication/SupportModalButton.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconBug } from '@posthog/icons' import { LemonButton } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { supportLogic } from 'lib/components/Support/supportLogic' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' diff --git a/frontend/src/scenes/authentication/TwoFactorSetup.tsx b/frontend/src/scenes/authentication/TwoFactorSetup.tsx index dad37a00d0..fa5cb3edf0 100644 --- a/frontend/src/scenes/authentication/TwoFactorSetup.tsx +++ b/frontend/src/scenes/authentication/TwoFactorSetup.tsx @@ -1,11 +1,13 @@ import './Setup2FA.scss' -import { LemonButton, LemonInput } from '@posthog/lemon-ui' import { useValues } from 'kea' import { Form } from 'kea-forms' + +import { LemonButton, LemonInput } from '@posthog/lemon-ui' + +import { CopyToClipboardInline } from 'lib/components/CopyToClipboard' import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { LemonField } from 'lib/lemon-ui/LemonField' -import { CopyToClipboardInline } from 'lib/components/CopyToClipboard' import { twoFactorLogic } from './twoFactorLogic' diff --git a/frontend/src/scenes/authentication/TwoFactorSetupModal.tsx b/frontend/src/scenes/authentication/TwoFactorSetupModal.tsx index ae63d8649e..06a088e847 100644 --- a/frontend/src/scenes/authentication/TwoFactorSetupModal.tsx +++ b/frontend/src/scenes/authentication/TwoFactorSetupModal.tsx @@ -1,11 +1,12 @@ import { useActions, useValues } from 'kea' + import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { LemonModal } from 'lib/lemon-ui/LemonModal' import { membersLogic } from 'scenes/organization/membersLogic' import { userLogic } from 'scenes/userLogic' -import { twoFactorLogic } from './twoFactorLogic' import { TwoFactorSetup } from './TwoFactorSetup' +import { twoFactorLogic } from './twoFactorLogic' export function TwoFactorSetupModal(): JSX.Element { const { isTwoFactorSetupModalOpen, forceOpenTwoFactorSetupModal } = useValues(twoFactorLogic) diff --git a/frontend/src/scenes/authentication/WelcomeLogo.tsx b/frontend/src/scenes/authentication/WelcomeLogo.tsx index 5cac170951..9249cd16c5 100644 --- a/frontend/src/scenes/authentication/WelcomeLogo.tsx +++ b/frontend/src/scenes/authentication/WelcomeLogo.tsx @@ -1,9 +1,12 @@ -import { Link } from '@posthog/lemon-ui' import { useValues } from 'kea' -import defaultLogo from 'public/posthog-logo.svg' + +import { Link } from '@posthog/lemon-ui' + +import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' + import cloudLogo from 'public/posthog-logo-cloud.svg' import demoLogo from 'public/posthog-logo-demo.svg' -import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' +import defaultLogo from 'public/posthog-logo.svg' export function WelcomeLogo({ view }: { view?: string }): JSX.Element { const UTM_TAGS = `utm_campaign=in-product&utm_tag=${view || 'welcome'}-header` diff --git a/frontend/src/scenes/authentication/inviteSignupLogic.ts b/frontend/src/scenes/authentication/inviteSignupLogic.ts index 2e5be913f1..46e698f9ac 100644 --- a/frontend/src/scenes/authentication/inviteSignupLogic.ts +++ b/frontend/src/scenes/authentication/inviteSignupLogic.ts @@ -2,6 +2,7 @@ import { actions, kea, listeners, path, reducers, selectors } from 'kea' import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' import { urlToAction } from 'kea-router' + import api from 'lib/api' import { ValidatedPasswordResult, validatePassword } from 'lib/components/PasswordStrength' diff --git a/frontend/src/scenes/authentication/login2FALogic.ts b/frontend/src/scenes/authentication/login2FALogic.ts index 2d80c064b2..7ec60b4d2f 100644 --- a/frontend/src/scenes/authentication/login2FALogic.ts +++ b/frontend/src/scenes/authentication/login2FALogic.ts @@ -1,5 +1,6 @@ import { actions, connect, kea, listeners, path, reducers } from 'kea' import { forms } from 'kea-forms' + import api from 'lib/api' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' diff --git a/frontend/src/scenes/authentication/loginLogic.test.ts b/frontend/src/scenes/authentication/loginLogic.test.ts index cf47c0b981..80e9c8eaab 100644 --- a/frontend/src/scenes/authentication/loginLogic.test.ts +++ b/frontend/src/scenes/authentication/loginLogic.test.ts @@ -1,10 +1,11 @@ import { router } from 'kea-router' import { testUtilsPlugin } from 'kea-test-utils' + +import { removeProjectIdIfPresent } from 'lib/utils/router-utils' import { handleLoginRedirect, loginLogic } from 'scenes/authentication/loginLogic' import { initKea } from '~/initKea' import { initKeaTests } from '~/test/init' -import { removeProjectIdIfPresent } from 'lib/utils/router-utils' describe('loginLogic', () => { describe('redirect vulnerability', () => { diff --git a/frontend/src/scenes/authentication/loginLogic.ts b/frontend/src/scenes/authentication/loginLogic.ts index 34883a6286..794aed521b 100644 --- a/frontend/src/scenes/authentication/loginLogic.ts +++ b/frontend/src/scenes/authentication/loginLogic.ts @@ -3,6 +3,7 @@ import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' import { encodeParams, urlToAction } from 'kea-router' import { router } from 'kea-router' + import api from 'lib/api' import { lemonToast } from 'lib/lemon-ui/LemonToast' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' diff --git a/frontend/src/scenes/authentication/passwordResetLogic.ts b/frontend/src/scenes/authentication/passwordResetLogic.ts index 03fbe73a37..a53c5327d2 100644 --- a/frontend/src/scenes/authentication/passwordResetLogic.ts +++ b/frontend/src/scenes/authentication/passwordResetLogic.ts @@ -2,10 +2,11 @@ import { kea, path, reducers, selectors } from 'kea' import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' import { urlToAction } from 'kea-router' +import posthog from 'posthog-js' + import api from 'lib/api' import { ValidatedPasswordResult, validatePassword } from 'lib/components/PasswordStrength' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' -import posthog from 'posthog-js' import type { passwordResetLogicType } from './passwordResetLogicType' diff --git a/frontend/src/scenes/authentication/signup/Signup.stories.tsx b/frontend/src/scenes/authentication/signup/Signup.stories.tsx index 93c9718710..cc79c5a56d 100644 --- a/frontend/src/scenes/authentication/signup/Signup.stories.tsx +++ b/frontend/src/scenes/authentication/signup/Signup.stories.tsx @@ -1,11 +1,12 @@ import { Meta } from '@storybook/react' + +import { useDelayedOnMountEffect } from 'lib/hooks/useOnMountEffect' import { userLogic } from 'scenes/userLogic' import { mswDecorator, useStorybookMocks } from '~/mocks/browser' import preflightJson from '~/mocks/fixtures/_preflight.json' import { SignupContainer } from './SignupContainer' -import { useDelayedOnMountEffect } from 'lib/hooks/useOnMountEffect' const meta: Meta = { title: 'Scenes-Other/Signup', diff --git a/frontend/src/scenes/authentication/signup/SignupContainer.tsx b/frontend/src/scenes/authentication/signup/SignupContainer.tsx index c0ff60ccbb..1af76085c2 100644 --- a/frontend/src/scenes/authentication/signup/SignupContainer.tsx +++ b/frontend/src/scenes/authentication/signup/SignupContainer.tsx @@ -1,6 +1,8 @@ -import { IconCheckCircle } from '@posthog/icons' import { useValues } from 'kea' import { router } from 'kea-router' + +import { IconCheckCircle } from '@posthog/icons' + import { BridgePage } from 'lib/components/BridgePage/BridgePage' import { CLOUD_HOSTNAMES } from 'lib/constants' import { Link } from 'lib/lemon-ui/Link' diff --git a/frontend/src/scenes/authentication/signup/signupForm/SignupForm.tsx b/frontend/src/scenes/authentication/signup/signupForm/SignupForm.tsx index a18c1c0e7b..67cbda7333 100644 --- a/frontend/src/scenes/authentication/signup/signupForm/SignupForm.tsx +++ b/frontend/src/scenes/authentication/signup/signupForm/SignupForm.tsx @@ -1,9 +1,11 @@ +import { useActions, useValues } from 'kea' +import { useEffect, useState } from 'react' + import { IconArrowLeft } from '@posthog/icons' import { LemonButton } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { SpinnerOverlay } from 'lib/lemon-ui/Spinner/Spinner' -import { useEffect, useState } from 'react' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { SceneExport } from 'scenes/sceneTypes' diff --git a/frontend/src/scenes/authentication/signup/signupForm/panels/SignupPanel1.tsx b/frontend/src/scenes/authentication/signup/signupForm/panels/SignupPanel1.tsx index a6edf76050..ee1220bb30 100644 --- a/frontend/src/scenes/authentication/signup/signupForm/panels/SignupPanel1.tsx +++ b/frontend/src/scenes/authentication/signup/signupForm/panels/SignupPanel1.tsx @@ -1,13 +1,15 @@ -import { LemonButton, LemonInput } from '@posthog/lemon-ui' import { useValues } from 'kea' import { Form } from 'kea-forms' +import { useEffect, useRef } from 'react' + +import { LemonButton, LemonInput } from '@posthog/lemon-ui' + import PasswordStrength from 'lib/components/PasswordStrength' import { SocialLoginButtons } from 'lib/components/SocialLoginButton/SocialLoginButton' import { LemonField } from 'lib/lemon-ui/LemonField' import { Link } from 'lib/lemon-ui/Link' -import { useEffect, useRef } from 'react' -import RegionSelect from 'scenes/authentication/RegionSelect' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' +import RegionSelect from 'scenes/authentication/RegionSelect' import { signupLogic } from '../signupLogic' diff --git a/frontend/src/scenes/authentication/signup/signupForm/panels/SignupPanel2.tsx b/frontend/src/scenes/authentication/signup/signupForm/panels/SignupPanel2.tsx index 31f50abcfe..91890ba7e5 100644 --- a/frontend/src/scenes/authentication/signup/signupForm/panels/SignupPanel2.tsx +++ b/frontend/src/scenes/authentication/signup/signupForm/panels/SignupPanel2.tsx @@ -1,6 +1,8 @@ -import { LemonButton, LemonInput, Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' + +import { LemonButton, LemonInput, Link } from '@posthog/lemon-ui' + import SignupReferralSource from 'lib/components/SignupReferralSource' import SignupRoleSelect from 'lib/components/SignupRoleSelect' import { LemonField } from 'lib/lemon-ui/LemonField' diff --git a/frontend/src/scenes/authentication/signup/signupForm/signupLogic.ts b/frontend/src/scenes/authentication/signup/signupForm/signupLogic.ts index 9c56d87e21..d19d244943 100644 --- a/frontend/src/scenes/authentication/signup/signupForm/signupLogic.ts +++ b/frontend/src/scenes/authentication/signup/signupForm/signupLogic.ts @@ -1,14 +1,16 @@ -import { lemonToast } from '@posthog/lemon-ui' import { isString } from '@tiptap/core' import { actions, connect, kea, listeners, path, reducers, selectors } from 'kea' import { forms } from 'kea-forms' import { router, urlToAction } from 'kea-router' +import posthog from 'posthog-js' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { ValidatedPasswordResult, validatePassword } from 'lib/components/PasswordStrength' import { CLOUD_HOSTNAMES, FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { getRelativeNextPath } from 'lib/utils' -import posthog from 'posthog-js' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/authentication/signup/verify-email/VerifyEmail.stories.tsx b/frontend/src/scenes/authentication/signup/verify-email/VerifyEmail.stories.tsx index 1a08fcf9f9..ed4b28f24e 100644 --- a/frontend/src/scenes/authentication/signup/verify-email/VerifyEmail.stories.tsx +++ b/frontend/src/scenes/authentication/signup/verify-email/VerifyEmail.stories.tsx @@ -1,8 +1,9 @@ import { Meta, Story } from '@storybook/react' +import { useDelayedOnMountEffect } from 'lib/hooks/useOnMountEffect' + import { VerifyEmail } from './VerifyEmail' import { verifyEmailLogic } from './verifyEmailLogic' -import { useDelayedOnMountEffect } from 'lib/hooks/useOnMountEffect' const meta: Meta = { title: 'Scenes-Other/Verify Email', diff --git a/frontend/src/scenes/authentication/signup/verify-email/VerifyEmail.tsx b/frontend/src/scenes/authentication/signup/verify-email/VerifyEmail.tsx index 1128addf83..20e0778e6e 100644 --- a/frontend/src/scenes/authentication/signup/verify-email/VerifyEmail.tsx +++ b/frontend/src/scenes/authentication/signup/verify-email/VerifyEmail.tsx @@ -1,10 +1,12 @@ -import { LemonButton, LemonCheckbox, LemonModal, Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' -import { BridgePage } from 'lib/components/BridgePage/BridgePage' -import { HeartHog, MailHog, SurprisedHog } from 'lib/components/hedgehogs' -import { supportLogic } from 'lib/components/Support/supportLogic' -import { Spinner } from 'lib/lemon-ui/Spinner/Spinner' import { useState } from 'react' + +import { LemonButton, LemonCheckbox, LemonModal, Link } from '@posthog/lemon-ui' + +import { BridgePage } from 'lib/components/BridgePage/BridgePage' +import { supportLogic } from 'lib/components/Support/supportLogic' +import { HeartHog, MailHog, SurprisedHog } from 'lib/components/hedgehogs' +import { Spinner } from 'lib/lemon-ui/Spinner/Spinner' import { SceneExport } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/authentication/signup/verify-email/verifyEmailLogic.ts b/frontend/src/scenes/authentication/signup/verify-email/verifyEmailLogic.ts index 121e07335c..a497727220 100644 --- a/frontend/src/scenes/authentication/signup/verify-email/verifyEmailLogic.ts +++ b/frontend/src/scenes/authentication/signup/verify-email/verifyEmailLogic.ts @@ -1,6 +1,7 @@ import { actions, connect, kea, path, reducers } from 'kea' import { loaders } from 'kea-loaders' import { urlToAction } from 'kea-router' + import api from 'lib/api' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' import { getRelativeNextPath } from 'lib/utils' diff --git a/frontend/src/scenes/authentication/twoFactorLogic.ts b/frontend/src/scenes/authentication/twoFactorLogic.ts index 7af56a6fbc..04a8c95af5 100644 --- a/frontend/src/scenes/authentication/twoFactorLogic.ts +++ b/frontend/src/scenes/authentication/twoFactorLogic.ts @@ -1,11 +1,13 @@ -import { lemonToast } from '@posthog/lemon-ui' import { actions, afterMount, connect, kea, listeners, path, props, reducers, selectors } from 'kea' import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { membersLogic } from 'scenes/organization/membersLogic' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' +import { membersLogic } from 'scenes/organization/membersLogic' import { userLogic } from 'scenes/userLogic' import type { twoFactorLogicType } from './twoFactorLogicType' diff --git a/frontend/src/scenes/billing/AddonFeatureLossNotice.tsx b/frontend/src/scenes/billing/AddonFeatureLossNotice.tsx index ab61165fd7..e40b8ebc4d 100644 --- a/frontend/src/scenes/billing/AddonFeatureLossNotice.tsx +++ b/frontend/src/scenes/billing/AddonFeatureLossNotice.tsx @@ -1,9 +1,11 @@ -import { LemonBanner } from '@posthog/lemon-ui' import { useValues } from 'kea' -import { AnimatedCollapsible } from 'lib/components/AnimatedCollapsible' import posthog from 'posthog-js' import { useState } from 'react' +import { LemonBanner } from '@posthog/lemon-ui' + +import { AnimatedCollapsible } from 'lib/components/AnimatedCollapsible' + import { BillingProductV2AddonType, BillingProductV2Type, ProductKey } from '~/types' import { BillingAddonFeaturesList } from './BillingAddonFeaturesList' diff --git a/frontend/src/scenes/billing/AuthorizationStatus.tsx b/frontend/src/scenes/billing/AuthorizationStatus.tsx index d61108a334..1c38e92232 100644 --- a/frontend/src/scenes/billing/AuthorizationStatus.tsx +++ b/frontend/src/scenes/billing/AuthorizationStatus.tsx @@ -1,9 +1,11 @@ -import { SpinnerOverlay } from '@posthog/lemon-ui' import { useActions } from 'kea' -import { paymentEntryLogic } from './paymentEntryLogic' +import { SpinnerOverlay } from '@posthog/lemon-ui' + import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' +import { paymentEntryLogic } from './paymentEntryLogic' + // note(@zach): this page is only used when a payment method is entered into the payment entry modal // that requires the user to be redirect to another url, this is where they get redirected back to export const AuthorizationStatus = (): JSX.Element => { diff --git a/frontend/src/scenes/billing/Billing.tsx b/frontend/src/scenes/billing/Billing.tsx index a834eeb55e..9a0058e6c0 100644 --- a/frontend/src/scenes/billing/Billing.tsx +++ b/frontend/src/scenes/billing/Billing.tsx @@ -1,13 +1,16 @@ import './Billing.scss' -import { LemonButton, LemonDivider, LemonInput, Link } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' import { Field, Form } from 'kea-forms' import { router } from 'kea-router' -import { JudgeHog } from 'lib/components/hedgehogs' +import { useEffect } from 'react' + +import { LemonButton, LemonDivider, LemonInput, Link } from '@posthog/lemon-ui' + import { RestrictionScope, useRestrictedArea } from 'lib/components/RestrictedArea' import { supportLogic } from 'lib/components/Support/supportLogic' +import { JudgeHog } from 'lib/components/hedgehogs' import { OrganizationMembershipLevel } from 'lib/constants' import { FEATURE_FLAGS } from 'lib/constants' import { dayjs } from 'lib/dayjs' @@ -15,7 +18,6 @@ import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { SpinnerOverlay } from 'lib/lemon-ui/Spinner/Spinner' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { toSentenceCase } from 'lib/utils' -import { useEffect } from 'react' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { SceneExport } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' @@ -23,13 +25,13 @@ import { urls } from 'scenes/urls' import { BillingProductV2Type, ProductKey } from '~/types' import { BillingHero } from './BillingHero' -import { billingLogic } from './billingLogic' import { BillingNoAccess } from './BillingNoAccess' import { BillingProduct } from './BillingProduct' import { BillingSummary } from './BillingSummary' import { CreditCTAHero } from './CreditCTAHero' import { StripePortalButton } from './StripePortalButton' import { UnsubscribeCard } from './UnsubscribeCard' +import { billingLogic } from './billingLogic' export const scene: SceneExport = { component: Billing, diff --git a/frontend/src/scenes/billing/BillingDataTable.tsx b/frontend/src/scenes/billing/BillingDataTable.tsx index bbc19ac277..c49cf585a8 100644 --- a/frontend/src/scenes/billing/BillingDataTable.tsx +++ b/frontend/src/scenes/billing/BillingDataTable.tsx @@ -1,7 +1,9 @@ +import { useMemo } from 'react' + import { LemonCheckbox, LemonTable, LemonTableColumn, LemonTableColumns } from '@posthog/lemon-ui' + import { getSeriesColor } from 'lib/colors' import { dayjs } from 'lib/dayjs' -import { useMemo } from 'react' import { BillingSeriesType, SeriesColorDot } from './BillingLineGraph' diff --git a/frontend/src/scenes/billing/BillingEarlyAccessBanner.tsx b/frontend/src/scenes/billing/BillingEarlyAccessBanner.tsx index e344712fa6..c97ed9c6f9 100644 --- a/frontend/src/scenes/billing/BillingEarlyAccessBanner.tsx +++ b/frontend/src/scenes/billing/BillingEarlyAccessBanner.tsx @@ -1,7 +1,9 @@ -import { Link } from '@posthog/lemon-ui' import { useActions } from 'kea' -import { BuilderHog3 } from 'lib/components/hedgehogs' + +import { Link } from '@posthog/lemon-ui' + import { supportLogic } from 'lib/components/Support/supportLogic' +import { BuilderHog3 } from 'lib/components/hedgehogs' import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { LemonTag } from 'lib/lemon-ui/LemonTag/LemonTag' diff --git a/frontend/src/scenes/billing/BillingEmptyState.tsx b/frontend/src/scenes/billing/BillingEmptyState.tsx index 59f4b986c8..87464895d5 100644 --- a/frontend/src/scenes/billing/BillingEmptyState.tsx +++ b/frontend/src/scenes/billing/BillingEmptyState.tsx @@ -1,6 +1,7 @@ -import { WarningHog } from 'lib/components/hedgehogs' import React from 'react' +import { WarningHog } from 'lib/components/hedgehogs' + export interface BillingEmptyStateProps { heading?: string detail?: string | React.ReactNode diff --git a/frontend/src/scenes/billing/BillingGauge.tsx b/frontend/src/scenes/billing/BillingGauge.tsx index 45673dd52a..adf68ef3a1 100644 --- a/frontend/src/scenes/billing/BillingGauge.tsx +++ b/frontend/src/scenes/billing/BillingGauge.tsx @@ -1,9 +1,10 @@ import './BillingGauge.scss' import clsx from 'clsx' +import { useMemo } from 'react' + import { Tooltip } from 'lib/lemon-ui/Tooltip' import { compactNumber } from 'lib/utils' -import { useMemo } from 'react' import { BillingProductV2AddonType, BillingProductV2Type } from '~/types' diff --git a/frontend/src/scenes/billing/BillingHero.tsx b/frontend/src/scenes/billing/BillingHero.tsx index 0a1673d8d9..bc1677c922 100644 --- a/frontend/src/scenes/billing/BillingHero.tsx +++ b/frontend/src/scenes/billing/BillingHero.tsx @@ -1,7 +1,12 @@ +import { useActions, useValues } from 'kea' + import { LemonButton } from '@posthog/lemon-ui' import { Link } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { BillingUpgradeCTA } from 'lib/components/BillingUpgradeCTA' + +import { BillingPlan, BillingProductV2Type, StartupProgramLabel } from '~/types' + import planEnterprise from 'public/plan_enterprise.png' import planFree from 'public/plan_free.svg' import planPaid from 'public/plan_paid.svg' @@ -9,12 +14,10 @@ import planStartup from 'public/plan_startup.svg' import planTeams from 'public/plan_teams.png' import planYc from 'public/plan_yc.svg' -import { BillingPlan, BillingProductV2Type, StartupProgramLabel } from '~/types' - +import { PlanComparisonModal } from './PlanComparison' import { billingLogic } from './billingLogic' import { billingProductLogic } from './billingProductLogic' import { paymentEntryLogic } from './paymentEntryLogic' -import { PlanComparisonModal } from './PlanComparison' const PLAN_BADGES: Record = { [BillingPlan.Free]: planFree, diff --git a/frontend/src/scenes/billing/BillingLimit.tsx b/frontend/src/scenes/billing/BillingLimit.tsx index ce280f9d96..b4f24726fe 100644 --- a/frontend/src/scenes/billing/BillingLimit.tsx +++ b/frontend/src/scenes/billing/BillingLimit.tsx @@ -1,9 +1,11 @@ -import { LemonButton, LemonInput } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' +import { useRef } from 'react' + +import { LemonButton, LemonInput } from '@posthog/lemon-ui' + import { LemonField } from 'lib/lemon-ui/LemonField' import { Tooltip } from 'lib/lemon-ui/Tooltip' -import { useRef } from 'react' import { BillingProductV2Type } from '~/types' diff --git a/frontend/src/scenes/billing/BillingLineGraph.tsx b/frontend/src/scenes/billing/BillingLineGraph.tsx index 5614bc516a..9ef3bbf4a9 100644 --- a/frontend/src/scenes/billing/BillingLineGraph.tsx +++ b/frontend/src/scenes/billing/BillingLineGraph.tsx @@ -1,21 +1,23 @@ import './BillingLineGraph.scss' -import 'chartjs-adapter-dayjs-3' +import 'chartjs-adapter-dayjs-3' import annotationPlugin from 'chartjs-plugin-annotation' import { useValues } from 'kea' +import { useCallback, useEffect, useRef, useState } from 'react' +import { Root, createRoot } from 'react-dom/client' + +import { IconInfo } from '@posthog/icons' + import { Chart, ChartDataset, ChartOptions, TooltipModel } from 'lib/Chart' import { getSeriesColor } from 'lib/colors' import { getGraphColors } from 'lib/colors' -import { useCallback, useEffect, useRef, useState } from 'react' -import { createRoot, Root } from 'react-dom/client' import { Dayjs } from 'lib/dayjs' +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { Tooltip } from 'lib/lemon-ui/Tooltip' -import { IconInfo } from '@posthog/icons' import { themeLogic } from '~/layout/navigation-3000/themeLogic' import { BillingLineGraphTooltip } from './BillingLineGraphTooltip' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { useBillingMarkersPositioning } from './useBillingMarkersPositioning' Chart.register(annotationPlugin) diff --git a/frontend/src/scenes/billing/BillingNoAccess.tsx b/frontend/src/scenes/billing/BillingNoAccess.tsx index 9a01b733d3..b348b74b61 100644 --- a/frontend/src/scenes/billing/BillingNoAccess.tsx +++ b/frontend/src/scenes/billing/BillingNoAccess.tsx @@ -1,4 +1,5 @@ import { LemonBanner, LemonButton } from '@posthog/lemon-ui' + import { urls } from 'scenes/urls' interface BillingNoAccessProps { diff --git a/frontend/src/scenes/billing/BillingProduct.tsx b/frontend/src/scenes/billing/BillingProduct.tsx index c462307501..1429d17bd6 100644 --- a/frontend/src/scenes/billing/BillingProduct.tsx +++ b/frontend/src/scenes/billing/BillingProduct.tsx @@ -1,31 +1,33 @@ -import { IconChevronDown, IconDocument, IconInfo } from '@posthog/icons' -import { LemonButton, LemonTag, Link } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' +import { useRef } from 'react' + +import { IconChevronDown, IconDocument, IconInfo } from '@posthog/icons' +import { LemonButton, LemonTag, Link } from '@posthog/lemon-ui' + import { BillingUpgradeCTA } from 'lib/components/BillingUpgradeCTA' import { UNSUBSCRIBE_SURVEY_ID } from 'lib/constants' import { useResizeBreakpoints } from 'lib/hooks/useResizeObserver' -import { IconChevronRight } from 'lib/lemon-ui/icons' import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { More } from 'lib/lemon-ui/LemonButton/More' import { Tooltip } from 'lib/lemon-ui/Tooltip' +import { IconChevronRight } from 'lib/lemon-ui/icons' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { capitalizeFirstLetter, humanFriendlyCurrency } from 'lib/utils' -import { useRef } from 'react' import { getProductIcon } from 'scenes/products/Products' import { BillingProductV2AddonType, BillingProductV2Type, BillingTierType, ProductKey } from '~/types' -import { summarizeUsage } from './billing-utils' import { BillingGauge } from './BillingGauge' import { BillingLimit } from './BillingLimit' -import { billingLogic } from './billingLogic' import { BillingProductAddon } from './BillingProductAddon' -import { billingProductLogic } from './billingProductLogic' import { BillingProductPricingTable } from './BillingProductPricingTable' -import { paymentEntryLogic } from './paymentEntryLogic' import { ProductPricingModal } from './ProductPricingModal' import { UnsubscribeSurveyModal } from './UnsubscribeSurveyModal' +import { summarizeUsage } from './billing-utils' +import { billingLogic } from './billingLogic' +import { billingProductLogic } from './billingProductLogic' +import { paymentEntryLogic } from './paymentEntryLogic' export const getTierDescription = ( tiers: BillingTierType[], diff --git a/frontend/src/scenes/billing/BillingProductAddon.tsx b/frontend/src/scenes/billing/BillingProductAddon.tsx index 56f7c26a21..c907b7a01b 100644 --- a/frontend/src/scenes/billing/BillingProductAddon.tsx +++ b/frontend/src/scenes/billing/BillingProductAddon.tsx @@ -1,22 +1,24 @@ -import { IconCheckCircle, IconChevronDown, IconChevronRight, IconInfo } from '@posthog/icons' -import { LemonButton, LemonSelectOptions, LemonTag, Link, Tooltip } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' -import { capitalizeFirstLetter, humanFriendlyCurrency } from 'lib/utils' import { ReactNode, useRef } from 'react' + +import { IconCheckCircle, IconChevronDown, IconChevronRight, IconInfo } from '@posthog/icons' +import { LemonButton, LemonSelectOptions, LemonTag, Link, Tooltip } from '@posthog/lemon-ui' + +import { capitalizeFirstLetter, humanFriendlyCurrency } from 'lib/utils' import { getProductIcon } from 'scenes/products/Products' import { BillingProductV2AddonType } from '~/types' import { BillingAddonFeaturesList } from './BillingAddonFeaturesList' import { BillingGauge } from './BillingGauge' -import { billingLogic } from './billingLogic' import { BillingProductAddonActions } from './BillingProductAddonActions' -import { billingProductAddonLogic } from './billingProductAddonLogic' -import { billingProductLogic } from './billingProductLogic' import { BillingProductPricingTable } from './BillingProductPricingTable' import { ProductPricingModal } from './ProductPricingModal' import { UnsubscribeSurveyModal } from './UnsubscribeSurveyModal' +import { billingLogic } from './billingLogic' +import { billingProductAddonLogic } from './billingProductAddonLogic' +import { billingProductLogic } from './billingProductLogic' export const formatFlatRate = (flatRate: number, unit: string | null): string | ReactNode => { if (!unit) { diff --git a/frontend/src/scenes/billing/BillingProductAddonActions.tsx b/frontend/src/scenes/billing/BillingProductAddonActions.tsx index 0e6f01b379..7fc475b679 100644 --- a/frontend/src/scenes/billing/BillingProductAddonActions.tsx +++ b/frontend/src/scenes/billing/BillingProductAddonActions.tsx @@ -1,17 +1,19 @@ +import { useActions, useValues } from 'kea' +import { useMemo } from 'react' + import { IconCheckCircle, IconPlus } from '@posthog/icons' import { LemonButton, LemonTag, Tooltip } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { UNSUBSCRIBE_SURVEY_ID } from 'lib/constants' import { dayjs } from 'lib/dayjs' import { More } from 'lib/lemon-ui/LemonButton/More' import { toSentenceCase } from 'lib/utils' -import { useMemo } from 'react' import { BillingProductV2AddonType } from '~/types' +import { formatFlatRate } from './BillingProductAddon' import { getProration } from './billing-utils' import { billingLogic } from './billingLogic' -import { formatFlatRate } from './BillingProductAddon' import { billingProductLogic } from './billingProductLogic' interface BillingProductAddonActionsProps { diff --git a/frontend/src/scenes/billing/BillingProductPricingTable.tsx b/frontend/src/scenes/billing/BillingProductPricingTable.tsx index d0373284c5..315f87fdfc 100644 --- a/frontend/src/scenes/billing/BillingProductPricingTable.tsx +++ b/frontend/src/scenes/billing/BillingProductPricingTable.tsx @@ -1,6 +1,8 @@ +import { useValues } from 'kea' + import { IconArrowRightDown, IconInfo } from '@posthog/icons' import { LemonBanner, LemonTable, LemonTableColumns, Tooltip } from '@posthog/lemon-ui' -import { useValues } from 'kea' + import { compactNumber } from 'lib/utils' import { @@ -10,8 +12,8 @@ import { ProductPricingTierSubrows, } from '~/types' -import { billingLogic } from './billingLogic' import { getTierDescription } from './BillingProduct' +import { billingLogic } from './billingLogic' import { billingProductLogic } from './billingProductLogic' function Subrows(props: ProductPricingTierSubrows): JSX.Element { diff --git a/frontend/src/scenes/billing/BillingSection.tsx b/frontend/src/scenes/billing/BillingSection.tsx index cac582c79e..2b43e7c2c9 100644 --- a/frontend/src/scenes/billing/BillingSection.tsx +++ b/frontend/src/scenes/billing/BillingSection.tsx @@ -1,15 +1,17 @@ import './Billing.scss' -import { LemonTabs } from '@posthog/lemon-ui' import { useValues } from 'kea' import { router } from 'kea-router' + +import { LemonTabs } from '@posthog/lemon-ui' + import { SceneExport } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' import { Billing } from './Billing' -import { billingLogic } from './billingLogic' import { BillingSpendView } from './BillingSpendView' import { BillingUsage } from './BillingUsage' +import { billingLogic } from './billingLogic' import { BillingSectionId } from './types' export const scene: SceneExport = { diff --git a/frontend/src/scenes/billing/BillingSpendView.tsx b/frontend/src/scenes/billing/BillingSpendView.tsx index 51e638e916..b5d0f4fca1 100644 --- a/frontend/src/scenes/billing/BillingSpendView.tsx +++ b/frontend/src/scenes/billing/BillingSpendView.tsx @@ -1,25 +1,28 @@ import './BillingUsage.scss' +import { useActions, useValues } from 'kea' + import { IconInfo } from '@posthog/icons' import { LemonButton, LemonCheckbox } from '@posthog/lemon-ui' import { LemonSelect } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { DateFilter } from 'lib/components/DateFilter/DateFilter' +import { exportsLogic } from 'lib/components/ExportButton/exportsLogic' import { RestrictionScope, useRestrictedArea } from 'lib/components/RestrictedArea' import { OrganizationMembershipLevel } from 'lib/constants' import { LemonInputSelect } from 'lib/lemon-ui/LemonInputSelect/LemonInputSelect' import { LemonLabel } from 'lib/lemon-ui/LemonLabel/LemonLabel' import { Tooltip } from 'lib/lemon-ui/Tooltip' -import { currencyFormatter, buildBillingCsv } from './billing-utils' +import { ExporterFormat } from '~/types' + import { BillingDataTable } from './BillingDataTable' import { BillingEarlyAccessBanner } from './BillingEarlyAccessBanner' import { BillingEmptyState } from './BillingEmptyState' import { BillingLineGraph } from './BillingLineGraph' import { BillingNoAccess } from './BillingNoAccess' +import { buildBillingCsv, currencyFormatter } from './billing-utils' import { billingSpendLogic } from './billingSpendLogic' -import { exportsLogic } from 'lib/components/ExportButton/exportsLogic' -import { ExporterFormat } from '~/types' import { USAGE_TYPES } from './constants' export function BillingSpendView(): JSX.Element { diff --git a/frontend/src/scenes/billing/BillingSummary.tsx b/frontend/src/scenes/billing/BillingSummary.tsx index 3d567f72b9..9bd65efc52 100644 --- a/frontend/src/scenes/billing/BillingSummary.tsx +++ b/frontend/src/scenes/billing/BillingSummary.tsx @@ -1,10 +1,11 @@ import { useValues } from 'kea' + import { dayjs } from 'lib/dayjs' import { LemonLabel } from 'lib/lemon-ui/LemonLabel/LemonLabel' import { humanFriendlyCurrency } from 'lib/utils' -import { billingLogic } from './billingLogic' import { StripePortalButton } from './StripePortalButton' +import { billingLogic } from './billingLogic' export const BillingSummary = (): JSX.Element => { const { billing } = useValues(billingLogic) diff --git a/frontend/src/scenes/billing/BillingUsage.tsx b/frontend/src/scenes/billing/BillingUsage.tsx index 09afc18dda..e03e8dc98b 100644 --- a/frontend/src/scenes/billing/BillingUsage.tsx +++ b/frontend/src/scenes/billing/BillingUsage.tsx @@ -1,25 +1,28 @@ import './BillingUsage.scss' +import { useActions, useValues } from 'kea' + import { IconInfo } from '@posthog/icons' import { LemonButton, LemonCheckbox, LemonSelect } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { DateFilter } from 'lib/components/DateFilter/DateFilter' +import { exportsLogic } from 'lib/components/ExportButton/exportsLogic' import { RestrictionScope, useRestrictedArea } from 'lib/components/RestrictedArea' import { OrganizationMembershipLevel } from 'lib/constants' import { LemonInputSelect } from 'lib/lemon-ui/LemonInputSelect/LemonInputSelect' import { LemonLabel } from 'lib/lemon-ui/LemonLabel/LemonLabel' import { Tooltip } from 'lib/lemon-ui/Tooltip' +import { ExporterFormat } from '~/types' + import { BillingDataTable } from './BillingDataTable' import { BillingEarlyAccessBanner } from './BillingEarlyAccessBanner' import { BillingEmptyState } from './BillingEmptyState' import { BillingLineGraph } from './BillingLineGraph' import { BillingNoAccess } from './BillingNoAccess' -import { billingUsageLogic } from './billingUsageLogic' -import { exportsLogic } from 'lib/components/ExportButton/exportsLogic' -import { ExporterFormat } from '~/types' -import { USAGE_TYPES } from './constants' import { buildBillingCsv } from './billing-utils' +import { billingUsageLogic } from './billingUsageLogic' +import { USAGE_TYPES } from './constants' export function BillingUsage(): JSX.Element { const restrictionReason = useRestrictedArea({ diff --git a/frontend/src/scenes/billing/CreditCTAHero.tsx b/frontend/src/scenes/billing/CreditCTAHero.tsx index e0fb8c149a..542d0caa22 100644 --- a/frontend/src/scenes/billing/CreditCTAHero.tsx +++ b/frontend/src/scenes/billing/CreditCTAHero.tsx @@ -1,10 +1,12 @@ +import { useActions, useValues } from 'kea' + import { IconX } from '@posthog/icons' import { LemonButton, LemonDivider } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { BurningMoneyHog } from 'lib/components/hedgehogs' -import { billingLogic } from './billingLogic' import { PurchaseCreditsModal } from './PurchaseCreditsModal' +import { billingLogic } from './billingLogic' export const DEFAULT_ESTIMATED_MONTHLY_CREDIT_AMOUNT_USD = 500 diff --git a/frontend/src/scenes/billing/ExportsUnsubscribeTable/ExportsUnsubscribeTable.tsx b/frontend/src/scenes/billing/ExportsUnsubscribeTable/ExportsUnsubscribeTable.tsx index 4d0f81fab3..1108a0e63c 100644 --- a/frontend/src/scenes/billing/ExportsUnsubscribeTable/ExportsUnsubscribeTable.tsx +++ b/frontend/src/scenes/billing/ExportsUnsubscribeTable/ExportsUnsubscribeTable.tsx @@ -1,5 +1,7 @@ -import { IconCheckCircle } from '@posthog/icons' import { useActions, useValues } from 'kea' + +import { IconCheckCircle } from '@posthog/icons' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonTable } from 'lib/lemon-ui/LemonTable' import { LemonTableLink } from 'lib/lemon-ui/LemonTable/LemonTableLink' diff --git a/frontend/src/scenes/billing/ExportsUnsubscribeTable/exportsUnsubscribeTableLogic.tsx b/frontend/src/scenes/billing/ExportsUnsubscribeTable/exportsUnsubscribeTableLogic.tsx index f78a0efb0e..2215a514bc 100644 --- a/frontend/src/scenes/billing/ExportsUnsubscribeTable/exportsUnsubscribeTableLogic.tsx +++ b/frontend/src/scenes/billing/ExportsUnsubscribeTable/exportsUnsubscribeTableLogic.tsx @@ -1,6 +1,8 @@ -import { IconDatabase } from '@posthog/icons' import { actions, afterMount, connect, kea, listeners, path, selectors } from 'kea' import { loaders } from 'kea-loaders' + +import { IconDatabase } from '@posthog/icons' + import api from 'lib/api' import { getCurrentTeamId } from 'lib/utils/getAppContext' import { HogFunctionIcon } from 'scenes/hog-functions/configuration/HogFunctionIcon' diff --git a/frontend/src/scenes/billing/InitialBillingLimitNotice.tsx b/frontend/src/scenes/billing/InitialBillingLimitNotice.tsx index aac5cade5a..011c38d134 100644 --- a/frontend/src/scenes/billing/InitialBillingLimitNotice.tsx +++ b/frontend/src/scenes/billing/InitialBillingLimitNotice.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/billing/PaymentEntryModal.tsx b/frontend/src/scenes/billing/PaymentEntryModal.tsx index 5a8315a58d..14541f0dc8 100644 --- a/frontend/src/scenes/billing/PaymentEntryModal.tsx +++ b/frontend/src/scenes/billing/PaymentEntryModal.tsx @@ -1,9 +1,10 @@ -import { LemonBanner, LemonButton, LemonModal } from '@posthog/lemon-ui' import { Elements, PaymentElement, useElements, useStripe } from '@stripe/react-stripe-js' import { useActions, useValues } from 'kea' import posthog from 'posthog-js' import { useEffect, useState } from 'react' +import { LemonBanner, LemonButton, LemonModal } from '@posthog/lemon-ui' + import { paymentEntryLogic } from './paymentEntryLogic' const stripeJs = async (): Promise => await import('@stripe/stripe-js') diff --git a/frontend/src/scenes/billing/PlanComparison.tsx b/frontend/src/scenes/billing/PlanComparison.tsx index 598af6dd08..ab02dfd5a9 100644 --- a/frontend/src/scenes/billing/PlanComparison.tsx +++ b/frontend/src/scenes/billing/PlanComparison.tsx @@ -1,22 +1,24 @@ import './PlanComparison.scss' +import clsx from 'clsx' +import { useValues } from 'kea' +import React, { useState } from 'react' +import useResizeObserver from 'use-resize-observer' + import { IconCheckCircle, IconWarning, IconX } from '@posthog/icons' import { LemonModal, LemonTag, Link } from '@posthog/lemon-ui' -import clsx from 'clsx' -import { useValues } from 'kea' + import { FEATURE_FLAGS } from 'lib/constants' import { Tooltip } from 'lib/lemon-ui/Tooltip' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import React, { useState } from 'react' import { getProductIcon } from 'scenes/products/Products' -import useResizeObserver from 'use-resize-observer' import { BillingFeatureType, BillingPlanType, BillingProductV2AddonType, BillingProductV2Type } from '~/types' +import { UnsubscribeSurveyModal } from './UnsubscribeSurveyModal' import { convertLargeNumberToWords, getProration } from './billing-utils' import { billingLogic } from './billingLogic' import { billingProductLogic } from './billingProductLogic' -import { UnsubscribeSurveyModal } from './UnsubscribeSurveyModal' export function PlanIcon({ feature, diff --git a/frontend/src/scenes/billing/ProductPricingModal.tsx b/frontend/src/scenes/billing/ProductPricingModal.tsx index ce3c0b9bd3..98a2806b18 100644 --- a/frontend/src/scenes/billing/ProductPricingModal.tsx +++ b/frontend/src/scenes/billing/ProductPricingModal.tsx @@ -1,4 +1,5 @@ import { LemonModal } from '@posthog/lemon-ui' + import { capitalizeFirstLetter } from 'lib/utils' import { BillingPlanType, BillingProductV2AddonType, BillingProductV2Type } from '~/types' diff --git a/frontend/src/scenes/billing/PurchaseCreditsModal.tsx b/frontend/src/scenes/billing/PurchaseCreditsModal.tsx index d3a43b93f5..e4a02f9ef4 100644 --- a/frontend/src/scenes/billing/PurchaseCreditsModal.tsx +++ b/frontend/src/scenes/billing/PurchaseCreditsModal.tsx @@ -1,14 +1,16 @@ -import { IconCheckCircle } from '@posthog/icons' -import { LemonButton, LemonDivider, LemonInput, LemonModal, LemonTable, Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' + +import { IconCheckCircle } from '@posthog/icons' +import { LemonButton, LemonDivider, LemonInput, LemonModal, LemonTable, Link } from '@posthog/lemon-ui' + import { supportLogic } from 'lib/components/Support/supportLogic' import { LemonField } from 'lib/lemon-ui/LemonField' import { LemonRadio } from 'lib/lemon-ui/LemonRadio' import { BillingGauge } from './BillingGauge' -import { billingLogic } from './billingLogic' import { DEFAULT_ESTIMATED_MONTHLY_CREDIT_AMOUNT_USD } from './CreditCTAHero' +import { billingLogic } from './billingLogic' import { BillingGaugeItemKind } from './types' export const PurchaseCreditsModal = (): JSX.Element | null => { diff --git a/frontend/src/scenes/billing/StripePortalButton.tsx b/frontend/src/scenes/billing/StripePortalButton.tsx index c10de0c641..c20c8e6ccc 100644 --- a/frontend/src/scenes/billing/StripePortalButton.tsx +++ b/frontend/src/scenes/billing/StripePortalButton.tsx @@ -1,6 +1,7 @@ -import { LemonButton } from '@posthog/lemon-ui' import { useValues } from 'kea' +import { LemonButton } from '@posthog/lemon-ui' + import { billingLogic } from './billingLogic' export const StripePortalButton = (): JSX.Element | null => { diff --git a/frontend/src/scenes/billing/UnsubscribeCard.tsx b/frontend/src/scenes/billing/UnsubscribeCard.tsx index 086b72fbc1..21e95bb3b9 100644 --- a/frontend/src/scenes/billing/UnsubscribeCard.tsx +++ b/frontend/src/scenes/billing/UnsubscribeCard.tsx @@ -1,5 +1,7 @@ -import { LemonButton, Link } from '@posthog/lemon-ui' import { useActions } from 'kea' + +import { LemonButton, Link } from '@posthog/lemon-ui' + import { supportLogic } from 'lib/components/Support/supportLogic' import { UNSUBSCRIBE_SURVEY_ID } from 'lib/constants' diff --git a/frontend/src/scenes/billing/UnsubscribeSurveyModal.tsx b/frontend/src/scenes/billing/UnsubscribeSurveyModal.tsx index ed606be2b4..8279d803ab 100644 --- a/frontend/src/scenes/billing/UnsubscribeSurveyModal.tsx +++ b/frontend/src/scenes/billing/UnsubscribeSurveyModal.tsx @@ -1,5 +1,9 @@ import './UnsubscribeSurveyModal.scss' +import { useActions, useValues } from 'kea' +import { SurveyEventProperties } from 'posthog-js' +import { useState } from 'react' + import { LemonBanner, LemonButton, @@ -11,24 +15,22 @@ import { Link, Tooltip, } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' -import { HeartHog } from 'lib/components/hedgehogs' + import { useHogfetti } from 'lib/components/Hogfetti/Hogfetti' import { supportLogic } from 'lib/components/Support/supportLogic' -import { SurveyEventProperties } from 'posthog-js' -import { useState } from 'react' +import { HeartHog } from 'lib/components/hedgehogs' import { BillingProductV2AddonType, BillingProductV2Type } from '~/types' import { AddonFeatureLossNotice } from './AddonFeatureLossNotice' +import { ExportsUnsubscribeTable, exportsUnsubscribeTableLogic } from './ExportsUnsubscribeTable' import { billingLogic } from './billingLogic' import { + UNSUBSCRIBE_REASONS, billingProductLogic, isPlatformAndSupportAddon, randomizeReasons, - UNSUBSCRIBE_REASONS, } from './billingProductLogic' -import { ExportsUnsubscribeTable, exportsUnsubscribeTableLogic } from './ExportsUnsubscribeTable' export const UnsubscribeSurveyModal = ({ product, diff --git a/frontend/src/scenes/billing/billing-utils.spec.ts b/frontend/src/scenes/billing/billing-utils.spec.ts index c20adf6aac..5863ce4a88 100644 --- a/frontend/src/scenes/billing/billing-utils.spec.ts +++ b/frontend/src/scenes/billing/billing-utils.spec.ts @@ -1,6 +1,7 @@ -import { dayjs } from 'lib/dayjs' import tk from 'timekeeper' +import { dayjs } from 'lib/dayjs' + import { billingJson } from '~/mocks/fixtures/_billing' import billingJsonWithFlatFee from '~/mocks/fixtures/_billing_with_flat_fee.json' diff --git a/frontend/src/scenes/billing/billing-utils.ts b/frontend/src/scenes/billing/billing-utils.ts index 4843690055..5a80a3586f 100644 --- a/frontend/src/scenes/billing/billing-utils.ts +++ b/frontend/src/scenes/billing/billing-utils.ts @@ -1,17 +1,18 @@ import equal from 'fast-deep-equal' -import Papa from 'papaparse' import { LogicWrapper } from 'kea' import { routerType } from 'kea-router/lib/routerType' +import Papa from 'papaparse' + import { FEATURE_FLAGS, OrganizationMembershipLevel } from 'lib/constants' import { dayjs } from 'lib/dayjs' import { dateStringToDayJs } from 'lib/utils' import { Params } from 'scenes/sceneTypes' import { OrganizationType } from '~/types' -import { BillingPeriod, BillingProductV2Type, BillingTierType, BillingType, BillingProductV2AddonType } from '~/types' +import { BillingPeriod, BillingProductV2AddonType, BillingProductV2Type, BillingTierType, BillingType } from '~/types' import { USAGE_TYPES } from './constants' -import type { BillingFilters, BillingUsageInteractionProps, BillingSeriesForCsv, BuildBillingCsvOptions } from './types' +import type { BillingFilters, BillingSeriesForCsv, BillingUsageInteractionProps, BuildBillingCsvOptions } from './types' export const summarizeUsage = (usage: number | null): string => { if (usage === null) { diff --git a/frontend/src/scenes/billing/billingLogic.tsx b/frontend/src/scenes/billing/billingLogic.tsx index c0c8b79372..d1423dadc7 100644 --- a/frontend/src/scenes/billing/billingLogic.tsx +++ b/frontend/src/scenes/billing/billingLogic.tsx @@ -1,8 +1,11 @@ -import { LemonDialog, lemonToast, Link } from '@posthog/lemon-ui' import { actions, connect, kea, listeners, path, reducers, selectors } from 'kea' -import { capitalizeFirstLetter, FieldNamePath, forms } from 'kea-forms' +import { FieldNamePath, capitalizeFirstLetter, forms } from 'kea-forms' import { lazyLoaders } from 'kea-loaders' import { router, urlToAction } from 'kea-router' +import posthog from 'posthog-js' + +import { LemonDialog, Link, lemonToast } from '@posthog/lemon-ui' + import api, { getJSONOrNull } from 'lib/api' import { FEATURE_FLAGS } from 'lib/constants' import { dayjs } from 'lib/dayjs' @@ -12,9 +15,8 @@ import { LemonButtonPropsBase } from 'lib/lemon-ui/LemonButton' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { pluralize } from 'lib/utils' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' -import posthog from 'posthog-js' -import { organizationLogic } from 'scenes/organizationLogic' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' +import { organizationLogic } from 'scenes/organizationLogic' import { userLogic } from 'scenes/userLogic' import { @@ -27,8 +29,8 @@ import { StartupProgramLabel, } from '~/types' -import type { billingLogicType } from './billingLogicType' import { DEFAULT_ESTIMATED_MONTHLY_CREDIT_AMOUNT_USD } from './CreditCTAHero' +import type { billingLogicType } from './billingLogicType' export const ALLOCATION_THRESHOLD_ALERT = 0.85 // Threshold to show warning of event usage near limit export const ALLOCATION_THRESHOLD_BLOCK = 1.2 // Threshold to block usage diff --git a/frontend/src/scenes/billing/billingProductLogic.ts b/frontend/src/scenes/billing/billingProductLogic.ts index 9d06fdc61b..2368ef3eb5 100644 --- a/frontend/src/scenes/billing/billingProductLogic.ts +++ b/frontend/src/scenes/billing/billingProductLogic.ts @@ -1,11 +1,13 @@ -import { LemonDialog, lemonToast } from '@posthog/lemon-ui' import { actions, connect, events, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { forms } from 'kea-forms' -import api from 'lib/api' -import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import posthog from 'posthog-js' import React from 'react' +import { LemonDialog, lemonToast } from '@posthog/lemon-ui' + +import api from 'lib/api' +import { featureFlagLogic } from 'lib/logic/featureFlagLogic' + import { BillingPlan, BillingPlanType, diff --git a/frontend/src/scenes/billing/billingSpendLogic.ts b/frontend/src/scenes/billing/billingSpendLogic.ts index b66077e95a..b840a5683a 100644 --- a/frontend/src/scenes/billing/billingSpendLogic.ts +++ b/frontend/src/scenes/billing/billingSpendLogic.ts @@ -1,19 +1,22 @@ -import { lemonToast } from '@posthog/lemon-ui' import equal from 'fast-deep-equal' import { actions, afterMount, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { actionToUrl, router, urlToAction } from 'kea-router' +import difference from 'lodash.difference' +import sortBy from 'lodash.sortby' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { dayjs } from 'lib/dayjs' import { dateMapping, toParams } from 'lib/utils' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' -import difference from 'lodash.difference' -import sortBy from 'lodash.sortby' import { organizationLogic } from 'scenes/organizationLogic' import { Params } from 'scenes/sceneTypes' import { DateMappingOption, OrganizationType } from '~/types' +import type { BillingPeriodMarker } from './BillingLineGraph' import { buildTrackingProperties, calculateBillingPeriodMarkers, @@ -24,7 +27,6 @@ import { import { billingLogic } from './billingLogic' import type { billingSpendLogicType } from './billingSpendLogicType' import type { BillingFilters } from './types' -import type { BillingPeriodMarker } from './BillingLineGraph' export enum BillingSpendResponseBreakdownType { TYPE = 'type', diff --git a/frontend/src/scenes/billing/billingUsageLogic.ts b/frontend/src/scenes/billing/billingUsageLogic.ts index 7655993f04..22d0f5747d 100644 --- a/frontend/src/scenes/billing/billingUsageLogic.ts +++ b/frontend/src/scenes/billing/billingUsageLogic.ts @@ -1,19 +1,22 @@ -import { lemonToast } from '@posthog/lemon-ui' import equal from 'fast-deep-equal' import { actions, afterMount, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { actionToUrl, router, urlToAction } from 'kea-router' +import difference from 'lodash.difference' +import sortBy from 'lodash.sortby' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { dayjs } from 'lib/dayjs' import { dateMapping, toParams } from 'lib/utils' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' -import difference from 'lodash.difference' -import sortBy from 'lodash.sortby' import { organizationLogic } from 'scenes/organizationLogic' import { Params } from 'scenes/sceneTypes' import { DateMappingOption, OrganizationType } from '~/types' +import type { BillingPeriodMarker } from './BillingLineGraph' import { buildTrackingProperties, calculateBillingPeriodMarkers, @@ -24,7 +27,6 @@ import { import { billingLogic } from './billingLogic' import type { billingUsageLogicType } from './billingUsageLogicType' import type { BillingFilters } from './types' -import type { BillingPeriodMarker } from './BillingLineGraph' // These date filters return correct data but there's an issue with filter label after selecting it, showing 'No date range override' instead const TEMPORARILY_EXCLUDED_DATE_FILTER_OPTIONS = ['This month', 'Year to date', 'All time'] diff --git a/frontend/src/scenes/billing/paymentEntryLogic.ts b/frontend/src/scenes/billing/paymentEntryLogic.ts index e51b87743b..735149d44a 100644 --- a/frontend/src/scenes/billing/paymentEntryLogic.ts +++ b/frontend/src/scenes/billing/paymentEntryLogic.ts @@ -1,7 +1,8 @@ import { kea } from 'kea' import { router } from 'kea-router' -import api from 'lib/api' import posthog from 'posthog-js' + +import api from 'lib/api' import { organizationLogic } from 'scenes/organizationLogic' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/scenes/billing/useBillingMarkersPositioning.ts b/frontend/src/scenes/billing/useBillingMarkersPositioning.ts index 469a103420..dcbbd1906d 100644 --- a/frontend/src/scenes/billing/useBillingMarkersPositioning.ts +++ b/frontend/src/scenes/billing/useBillingMarkersPositioning.ts @@ -1,5 +1,6 @@ -import { Chart } from 'lib/Chart' import { useMemo } from 'react' + +import { Chart } from 'lib/Chart' import { Dayjs } from 'lib/dayjs' export interface BillingMarkersPositioning { diff --git a/frontend/src/scenes/cohorts/CohortEdit.tsx b/frontend/src/scenes/cohorts/CohortEdit.tsx index 03388e0bfe..01354d40f2 100644 --- a/frontend/src/scenes/cohorts/CohortEdit.tsx +++ b/frontend/src/scenes/cohorts/CohortEdit.tsx @@ -1,12 +1,16 @@ -import { LemonBanner, LemonDivider, LemonFileInput, LemonSkeleton, Link, Tooltip } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' import { router } from 'kea-router' + +import { IconCopy, IconTrash } from '@posthog/icons' +import { LemonBanner, LemonDivider, LemonFileInput, LemonSkeleton, Link, Tooltip } from '@posthog/lemon-ui' + import { NotFound } from 'lib/components/NotFound' import { PageHeader } from 'lib/components/PageHeader' +import { SceneAddToDropdownMenu } from 'lib/components/Scenes/InsightOrDashboard/SceneAddToDropdownMenu' +import { SceneFile } from 'lib/components/Scenes/SceneFile' import { TZLabel } from 'lib/components/TZLabel' import { CohortTypeEnum, FEATURE_FLAGS } from 'lib/constants' -import { IconErrorOutline, IconUploadFile } from 'lib/lemon-ui/icons' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { More } from 'lib/lemon-ui/LemonButton/More' import { LemonField } from 'lib/lemon-ui/LemonField' @@ -15,27 +19,26 @@ import { LemonLabel } from 'lib/lemon-ui/LemonLabel/LemonLabel' import { LemonSelect } from 'lib/lemon-ui/LemonSelect' import { LemonTextArea } from 'lib/lemon-ui/LemonTextArea/LemonTextArea' import { Spinner } from 'lib/lemon-ui/Spinner/Spinner' +import { IconErrorOutline, IconUploadFile } from 'lib/lemon-ui/icons' +import { featureFlagLogic } from 'lib/logic/featureFlagLogic' +import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' +import { WrappingLoadingSkeleton } from 'lib/ui/WrappingLoadingSkeleton/WrappingLoadingSkeleton' import { pluralize } from 'lib/utils' -import { cohortEditLogic, CohortLogicProps } from 'scenes/cohorts/cohortEditLogic' +import { cn } from 'lib/utils/css-classes' import { CohortCriteriaGroups } from 'scenes/cohorts/CohortFilters/CohortCriteriaGroups' import { COHORT_TYPE_OPTIONS } from 'scenes/cohorts/CohortFilters/constants' +import { CohortLogicProps, cohortEditLogic } from 'scenes/cohorts/cohortEditLogic' import { NotebookSelectButton } from 'scenes/notebooks/NotebookSelectButton/NotebookSelectButton' import { NotebookNodeType } from 'scenes/notebooks/types' import { urls } from 'scenes/urls' -import { ScenePanel, ScenePanelActions, ScenePanelDivider, ScenePanelMetaInfo } from '~/layout/scenes/SceneLayout' -import { SceneAddToDropdownMenu } from 'lib/components/Scenes/InsightOrDashboard/SceneAddToDropdownMenu' -import { SceneFile } from 'lib/components/Scenes/SceneFile' -import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { AndOrFilterSelect } from '~/queries/nodes/InsightViz/PropertyGroupFilters/AndOrFilterSelect' -import { Query } from '~/queries/Query/Query' - -import { IconCopy, IconTrash } from '@posthog/icons' -import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' -import { createCohortDataNodeLogicKey } from './cohortUtils' import { SceneContent, SceneDivider, SceneSection, SceneTitleSection } from '~/layout/scenes/SceneContent' -import { cn } from 'lib/utils/css-classes' -import { WrappingLoadingSkeleton } from 'lib/ui/WrappingLoadingSkeleton/WrappingLoadingSkeleton' +import { ScenePanel, ScenePanelActions, ScenePanelDivider, ScenePanelMetaInfo } from '~/layout/scenes/SceneLayout' +import { Query } from '~/queries/Query/Query' +import { AndOrFilterSelect } from '~/queries/nodes/InsightViz/PropertyGroupFilters/AndOrFilterSelect' + +import { createCohortDataNodeLogicKey } from './cohortUtils' + const RESOURCE_TYPE = 'cohort' export function CohortEdit({ id }: CohortLogicProps): JSX.Element { diff --git a/frontend/src/scenes/cohorts/CohortFilters/CohortCriteriaGroups.tsx b/frontend/src/scenes/cohorts/CohortFilters/CohortCriteriaGroups.tsx index 1fbb75e5f6..561c25ea75 100644 --- a/frontend/src/scenes/cohorts/CohortFilters/CohortCriteriaGroups.tsx +++ b/frontend/src/scenes/cohorts/CohortFilters/CohortCriteriaGroups.tsx @@ -1,17 +1,19 @@ import './CohortCriteriaGroups.scss' -import { IconCopy, IconPlusSmall, IconTrash } from '@posthog/icons' import clsx from 'clsx' import { useActions, useValues } from 'kea' import { Group } from 'kea-forms' import { Field as KeaField } from 'kea-forms/lib/components' + +import { IconCopy, IconPlusSmall, IconTrash } from '@posthog/icons' + import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonDivider } from 'lib/lemon-ui/LemonDivider' import { Lettermark, LettermarkColor } from 'lib/lemon-ui/Lettermark' import { alphabet } from 'lib/utils' -import { cohortEditLogic, CohortLogicProps } from 'scenes/cohorts/cohortEditLogic' import { CohortCriteriaRowBuilder } from 'scenes/cohorts/CohortFilters/CohortCriteriaRowBuilder' +import { CohortLogicProps, cohortEditLogic } from 'scenes/cohorts/cohortEditLogic' import { criteriaToBehavioralFilterType, isCohortCriteriaGroup } from 'scenes/cohorts/cohortUtils' import { AndOrFilterSelect } from '~/queries/nodes/InsightViz/PropertyGroupFilters/AndOrFilterSelect' diff --git a/frontend/src/scenes/cohorts/CohortFilters/CohortCriteriaRowBuilder.stories.tsx b/frontend/src/scenes/cohorts/CohortFilters/CohortCriteriaRowBuilder.stories.tsx index 1827c457e1..b96192efaa 100644 --- a/frontend/src/scenes/cohorts/CohortFilters/CohortCriteriaRowBuilder.stories.tsx +++ b/frontend/src/scenes/cohorts/CohortFilters/CohortCriteriaRowBuilder.stories.tsx @@ -1,14 +1,15 @@ import { Meta } from '@storybook/react' import { useMountedLogic } from 'kea' import { Form } from 'kea-forms' -import { taxonomicFilterMocksDecorator } from 'lib/components/TaxonomicFilter/__mocks__/taxonomicFilterMocksDecorator' import { useState } from 'react' -import { cohortEditLogic } from 'scenes/cohorts/cohortEditLogic' + +import { taxonomicFilterMocksDecorator } from 'lib/components/TaxonomicFilter/__mocks__/taxonomicFilterMocksDecorator' import { CohortCriteriaRowBuilder, CohortCriteriaRowBuilderProps, } from 'scenes/cohorts/CohortFilters/CohortCriteriaRowBuilder' import { BehavioralFilterType } from 'scenes/cohorts/CohortFilters/types' +import { cohortEditLogic } from 'scenes/cohorts/cohortEditLogic' import { actionsModel } from '~/models/actionsModel' import { cohortsModel } from '~/models/cohortsModel' diff --git a/frontend/src/scenes/cohorts/CohortFilters/CohortCriteriaRowBuilder.tsx b/frontend/src/scenes/cohorts/CohortFilters/CohortCriteriaRowBuilder.tsx index 9caa7c5eeb..8b0136f462 100644 --- a/frontend/src/scenes/cohorts/CohortFilters/CohortCriteriaRowBuilder.tsx +++ b/frontend/src/scenes/cohorts/CohortFilters/CohortCriteriaRowBuilder.tsx @@ -1,15 +1,17 @@ import './CohortCriteriaRowBuilder.scss' -import { IconCopy, IconTrash } from '@posthog/icons' -import { LemonDivider } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions } from 'kea' import { Field as KeaField } from 'kea-forms' + +import { IconCopy, IconTrash } from '@posthog/icons' +import { LemonDivider } from '@posthog/lemon-ui' + import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { LemonButton } from 'lib/lemon-ui/LemonButton' -import { cohortEditLogic, CohortLogicProps } from 'scenes/cohorts/cohortEditLogic' -import { renderField, ROWS } from 'scenes/cohorts/CohortFilters/constants' +import { ROWS, renderField } from 'scenes/cohorts/CohortFilters/constants' import { BehavioralFilterType, CohortFieldProps, Field, FilterType } from 'scenes/cohorts/CohortFilters/types' +import { CohortLogicProps, cohortEditLogic } from 'scenes/cohorts/cohortEditLogic' import { cleanCriteria } from 'scenes/cohorts/cohortUtils' import { AnyCohortCriteriaType, BehavioralEventType, FilterLogicalOperator } from '~/types' diff --git a/frontend/src/scenes/cohorts/CohortFilters/CohortField.tsx b/frontend/src/scenes/cohorts/CohortFilters/CohortField.tsx index cb47d077f9..f2d6d6553a 100644 --- a/frontend/src/scenes/cohorts/CohortFilters/CohortField.tsx +++ b/frontend/src/scenes/cohorts/CohortFilters/CohortField.tsx @@ -2,9 +2,11 @@ import './CohortField.scss' import clsx from 'clsx' import { useActions, useValues } from 'kea' +import { useEffect, useMemo, useRef } from 'react' + import { DateFilter } from 'lib/components/DateFilter/DateFilter' -import { PropertyValue } from 'lib/components/PropertyFilters/components/PropertyValue' import { PropertyFilters } from 'lib/components/PropertyFilters/PropertyFilters' +import { PropertyValue } from 'lib/components/PropertyFilters/components/PropertyValue' import { PropertyKeyInfo } from 'lib/components/PropertyKeyInfo' import { TaxonomicFilterGroupType, TaxonomicFilterValue } from 'lib/components/TaxonomicFilter/types' import { TaxonomicPopover } from 'lib/components/TaxonomicPopover/TaxonomicPopover' @@ -13,7 +15,6 @@ import { LemonButton, LemonButtonWithDropdown } from 'lib/lemon-ui/LemonButton' import { LemonDivider } from 'lib/lemon-ui/LemonDivider' import { LemonInput } from 'lib/lemon-ui/LemonInput/LemonInput' import { formatDate } from 'lib/utils' -import { useEffect, useMemo, useRef } from 'react' import { cohortFieldLogic } from 'scenes/cohorts/CohortFilters/cohortFieldLogic' import { CohortEventFiltersFieldProps, diff --git a/frontend/src/scenes/cohorts/CohortFilters/CohortNumberField.stories.tsx b/frontend/src/scenes/cohorts/CohortFilters/CohortNumberField.stories.tsx index 3b61333f89..c4d1bbcfa5 100644 --- a/frontend/src/scenes/cohorts/CohortFilters/CohortNumberField.stories.tsx +++ b/frontend/src/scenes/cohorts/CohortFilters/CohortNumberField.stories.tsx @@ -1,9 +1,10 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' import { useMountedLogic } from 'kea' import { useState } from 'react' -import { cohortEditLogic } from 'scenes/cohorts/cohortEditLogic' + import { renderField } from 'scenes/cohorts/CohortFilters/constants' import { CohortNumberFieldProps, FilterType } from 'scenes/cohorts/CohortFilters/types' +import { cohortEditLogic } from 'scenes/cohorts/cohortEditLogic' import { CohortNumberField } from './CohortField' diff --git a/frontend/src/scenes/cohorts/CohortFilters/CohortPersonPropertiesValuesField.stories.tsx b/frontend/src/scenes/cohorts/CohortFilters/CohortPersonPropertiesValuesField.stories.tsx index 8f3c5e52b5..ae6168cac9 100644 --- a/frontend/src/scenes/cohorts/CohortFilters/CohortPersonPropertiesValuesField.stories.tsx +++ b/frontend/src/scenes/cohorts/CohortFilters/CohortPersonPropertiesValuesField.stories.tsx @@ -1,5 +1,6 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' import { useState } from 'react' + import { renderField } from 'scenes/cohorts/CohortFilters/constants' import { CohortPersonPropertiesValuesFieldProps, FilterType } from 'scenes/cohorts/CohortFilters/types' diff --git a/frontend/src/scenes/cohorts/CohortFilters/CohortSelectorField.stories.tsx b/frontend/src/scenes/cohorts/CohortFilters/CohortSelectorField.stories.tsx index 566d691ece..57f63a0d85 100644 --- a/frontend/src/scenes/cohorts/CohortFilters/CohortSelectorField.stories.tsx +++ b/frontend/src/scenes/cohorts/CohortFilters/CohortSelectorField.stories.tsx @@ -1,5 +1,6 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' import { useState } from 'react' + import { CohortSelectorFieldProps, FieldOptionsType } from 'scenes/cohorts/CohortFilters/types' import { CohortSelectorField } from './CohortField' diff --git a/frontend/src/scenes/cohorts/CohortFilters/CohortTaxonomicField.stories.tsx b/frontend/src/scenes/cohorts/CohortFilters/CohortTaxonomicField.stories.tsx index 8efe734e1b..efbb05ea4c 100644 --- a/frontend/src/scenes/cohorts/CohortFilters/CohortTaxonomicField.stories.tsx +++ b/frontend/src/scenes/cohorts/CohortFilters/CohortTaxonomicField.stories.tsx @@ -1,8 +1,9 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' import { useMountedLogic } from 'kea' +import { useState } from 'react' + import { taxonomicFilterMocksDecorator } from 'lib/components/TaxonomicFilter/__mocks__/taxonomicFilterMocksDecorator' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' -import { useState } from 'react' import { renderField } from 'scenes/cohorts/CohortFilters/constants' import { CohortTaxonomicFieldProps, FilterType } from 'scenes/cohorts/CohortFilters/types' diff --git a/frontend/src/scenes/cohorts/CohortFilters/CohortTextField.stories.tsx b/frontend/src/scenes/cohorts/CohortFilters/CohortTextField.stories.tsx index 95044ccf51..7cca52414c 100644 --- a/frontend/src/scenes/cohorts/CohortFilters/CohortTextField.stories.tsx +++ b/frontend/src/scenes/cohorts/CohortFilters/CohortTextField.stories.tsx @@ -1,4 +1,5 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' + import { renderField } from 'scenes/cohorts/CohortFilters/constants' import { CohortTextFieldProps, FilterType } from 'scenes/cohorts/CohortFilters/types' diff --git a/frontend/src/scenes/cohorts/CohortFilters/cohortFieldLogic.test.ts b/frontend/src/scenes/cohorts/CohortFilters/cohortFieldLogic.test.ts index 72c0142413..d51eab86d4 100644 --- a/frontend/src/scenes/cohorts/CohortFilters/cohortFieldLogic.test.ts +++ b/frontend/src/scenes/cohorts/CohortFilters/cohortFieldLogic.test.ts @@ -1,6 +1,8 @@ -import { expectLogic } from 'kea-test-utils' import { MOCK_GROUP_TYPES } from 'lib/api.mock' -import { cohortFieldLogic, CohortFieldLogicProps } from 'scenes/cohorts/CohortFilters/cohortFieldLogic' + +import { expectLogic } from 'kea-test-utils' + +import { CohortFieldLogicProps, cohortFieldLogic } from 'scenes/cohorts/CohortFilters/cohortFieldLogic' import { FIELD_VALUES } from 'scenes/cohorts/CohortFilters/constants' import { FieldOptionsType } from 'scenes/cohorts/CohortFilters/types' diff --git a/frontend/src/scenes/cohorts/CohortFilters/cohortFieldLogic.ts b/frontend/src/scenes/cohorts/CohortFilters/cohortFieldLogic.ts index c3198a4e2b..64980a05a4 100644 --- a/frontend/src/scenes/cohorts/CohortFilters/cohortFieldLogic.ts +++ b/frontend/src/scenes/cohorts/CohortFilters/cohortFieldLogic.ts @@ -1,4 +1,5 @@ import { actions, connect, kea, key, listeners, path, props, propsChanged, reducers, selectors } from 'kea' + import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { objectsEqual } from 'lib/utils' import { FIELD_VALUES, SCALE_FIELD_VALUES } from 'scenes/cohorts/CohortFilters/constants' diff --git a/frontend/src/scenes/cohorts/Cohorts.tsx b/frontend/src/scenes/cohorts/Cohorts.tsx index 766e27be23..5f70dd22b5 100644 --- a/frontend/src/scenes/cohorts/Cohorts.tsx +++ b/frontend/src/scenes/cohorts/Cohorts.tsx @@ -1,28 +1,30 @@ import './Cohorts.scss' -import { LemonInput } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { combineUrl, router } from 'kea-router' -import { ListHog } from 'lib/components/hedgehogs' +import { useState } from 'react' + +import { LemonInput } from '@posthog/lemon-ui' + import { ProductIntroduction } from 'lib/components/ProductIntroduction/ProductIntroduction' +import { ListHog } from 'lib/components/hedgehogs' import { dayjs } from 'lib/dayjs' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { More } from 'lib/lemon-ui/LemonButton/More' import { LemonDivider } from 'lib/lemon-ui/LemonDivider' import { LemonTable, LemonTableColumn, LemonTableColumns } from 'lib/lemon-ui/LemonTable' -import { createdAtColumn, createdByColumn } from 'lib/lemon-ui/LemonTable/columnUtils' import { LemonTableLink } from 'lib/lemon-ui/LemonTable/LemonTableLink' +import { createdAtColumn, createdByColumn } from 'lib/lemon-ui/LemonTable/columnUtils' import { Spinner } from 'lib/lemon-ui/Spinner/Spinner' -import { useState } from 'react' +import { cn } from 'lib/utils/css-classes' +import { cohortsSceneLogic } from 'scenes/cohorts/cohortsSceneLogic' +import { PersonsManagementSceneTabs } from 'scenes/persons-management/PersonsManagementSceneTabs' +import { SceneExport } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' +import { SceneContent, SceneDivider, SceneTitleSection } from '~/layout/scenes/SceneContent' import { CohortType, ProductKey } from '~/types' -import { SceneExport } from 'scenes/sceneTypes' -import { PersonsManagementSceneTabs } from 'scenes/persons-management/PersonsManagementSceneTabs' -import { cohortsSceneLogic } from 'scenes/cohorts/cohortsSceneLogic' -import { SceneContent, SceneDivider, SceneTitleSection } from '~/layout/scenes/SceneContent' -import { cn } from 'lib/utils/css-classes' const RESOURCE_TYPE = 'cohort' export const scene: SceneExport = { diff --git a/frontend/src/scenes/cohorts/activityDescriptions.tsx b/frontend/src/scenes/cohorts/activityDescriptions.tsx index ceb4726ce7..25e7c4df45 100644 --- a/frontend/src/scenes/cohorts/activityDescriptions.tsx +++ b/frontend/src/scenes/cohorts/activityDescriptions.tsx @@ -2,8 +2,8 @@ import '../../lib/components/Cards/InsightCard/InsightCard.scss' import { ActivityLogItem, - defaultDescriber, HumanizedChange, + defaultDescriber, userNameForLogItem, } from 'lib/components/ActivityLog/humanizeActivity' import { Link } from 'lib/lemon-ui/Link' diff --git a/frontend/src/scenes/cohorts/cohortEditLogic.test.ts b/frontend/src/scenes/cohorts/cohortEditLogic.test.ts index 46f16838d9..921fe1395e 100644 --- a/frontend/src/scenes/cohorts/cohortEditLogic.test.ts +++ b/frontend/src/scenes/cohorts/cohortEditLogic.test.ts @@ -1,11 +1,13 @@ +import { api } from 'lib/api.mock' + import { router } from 'kea-router' import { expectLogic, partial } from 'kea-test-utils' -import { api } from 'lib/api.mock' -import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { v4 as uuidv4 } from 'uuid' -import { cohortEditLogic, CohortLogicProps } from 'scenes/cohorts/cohortEditLogic' + +import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { CRITERIA_VALIDATIONS, NEW_CRITERIA, ROWS } from 'scenes/cohorts/CohortFilters/constants' import { BehavioralFilterKey } from 'scenes/cohorts/CohortFilters/types' +import { CohortLogicProps, cohortEditLogic } from 'scenes/cohorts/cohortEditLogic' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/cohorts/cohortEditLogic.ts b/frontend/src/scenes/cohorts/cohortEditLogic.ts index 6ab4e6172a..2d6a9d6ca5 100644 --- a/frontend/src/scenes/cohorts/cohortEditLogic.ts +++ b/frontend/src/scenes/cohorts/cohortEditLogic.ts @@ -2,11 +2,13 @@ import { actions, afterMount, beforeUnmount, connect, kea, key, listeners, path, import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' import { actionToUrl, router } from 'kea-router' +import posthog from 'posthog-js' +import { v4 as uuidv4 } from 'uuid' + import api from 'lib/api' import { ENTITY_MATCH_TYPE } from 'lib/constants' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' -import posthog from 'posthog-js' import { NEW_COHORT, NEW_CRITERIA, NEW_CRITERIA_GROUP } from 'scenes/cohorts/CohortFilters/constants' import { applyAllCriteriaGroup, @@ -19,10 +21,10 @@ import { } from 'scenes/cohorts/cohortUtils' import { personsLogic } from 'scenes/persons/personsLogic' import { urls } from 'scenes/urls' -import { v4 as uuidv4 } from 'uuid' import { refreshTreeItem } from '~/layout/panel-layout/ProjectTree/projectTreeLogic' import { cohortsModel, processCohort } from '~/models/cohortsModel' +import { dataNodeLogic } from '~/queries/nodes/DataNode/dataNodeLogic' import { DataTableNode, Node, NodeKind } from '~/queries/schema/schema-general' import { isDataTableNode } from '~/queries/utils' import { @@ -36,7 +38,6 @@ import { } from '~/types' import type { cohortEditLogicType } from './cohortEditLogicType' -import { dataNodeLogic } from '~/queries/nodes/DataNode/dataNodeLogic' export type CohortLogicProps = { id?: CohortType['id'] diff --git a/frontend/src/scenes/cohorts/cohortSceneLogic.ts b/frontend/src/scenes/cohorts/cohortSceneLogic.ts index 2a6ed5f110..b2ca7ba501 100644 --- a/frontend/src/scenes/cohorts/cohortSceneLogic.ts +++ b/frontend/src/scenes/cohorts/cohortSceneLogic.ts @@ -1,4 +1,5 @@ import { kea, key, path, props, selectors } from 'kea' + import { Scene } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/cohorts/cohortUtils.tsx b/frontend/src/scenes/cohorts/cohortUtils.tsx index 5985393123..893ae5fc18 100644 --- a/frontend/src/scenes/cohorts/cohortUtils.tsx +++ b/frontend/src/scenes/cohorts/cohortUtils.tsx @@ -1,5 +1,6 @@ import equal from 'fast-deep-equal' import { DeepPartialMap, ValidationErrorType } from 'kea-forms' + import { isEmptyProperty } from 'lib/components/PropertyFilters/utils' import { ENTITY_MATCH_TYPE, PROPERTY_MATCH_TYPE } from 'lib/constants' import { areObjectValuesEmpty, calculateDays, isNumeric } from 'lib/utils' diff --git a/frontend/src/scenes/cohorts/cohortsSceneLogic.test.ts b/frontend/src/scenes/cohorts/cohortsSceneLogic.test.ts index 193d83dfea..4cc9ddb4b5 100644 --- a/frontend/src/scenes/cohorts/cohortsSceneLogic.test.ts +++ b/frontend/src/scenes/cohorts/cohortsSceneLogic.test.ts @@ -1,10 +1,12 @@ import { router } from 'kea-router' import { expectLogic } from 'kea-test-utils' + import api from 'lib/api' import { urls } from 'scenes/urls' import { useMocks } from '~/mocks/jest' import { initKeaTests } from '~/test/init' + import { cohortsSceneLogic } from './cohortsSceneLogic' const MOCK_COHORTS = { diff --git a/frontend/src/scenes/cohorts/cohortsSceneLogic.ts b/frontend/src/scenes/cohorts/cohortsSceneLogic.ts index 5bb6c33c1e..44d5d95d20 100644 --- a/frontend/src/scenes/cohorts/cohortsSceneLogic.ts +++ b/frontend/src/scenes/cohorts/cohortsSceneLogic.ts @@ -1,18 +1,20 @@ -import { kea, selectors, path, reducers, actions, listeners, connect, beforeUnmount, afterMount } from 'kea' +import { actions, afterMount, beforeUnmount, connect, kea, listeners, path, reducers, selectors } from 'kea' +import { loaders } from 'kea-loaders' +import { actionToUrl, router, urlToAction } from 'kea-router' + +import { PaginationManual } from '@posthog/lemon-ui' + +import api, { CountedPaginatedResponse } from 'lib/api' +import { exportsLogic } from 'lib/components/ExportButton/exportsLogic' +import { deleteWithUndo } from 'lib/utils/deleteWithUndo' +import { personsLogic } from 'scenes/persons/personsLogic' import { urls } from 'scenes/urls' +import { deleteFromTree, refreshTreeItem } from '~/layout/panel-layout/ProjectTree/projectTreeLogic' +import { processCohort } from '~/models/cohortsModel' import { Breadcrumb, CohortType, ExporterFormat } from '~/types' import type { cohortsSceneLogicType } from './cohortsSceneLogicType' -import { loaders } from 'kea-loaders' -import api, { CountedPaginatedResponse } from 'lib/api' -import { personsLogic } from 'scenes/persons/personsLogic' -import { processCohort } from '~/models/cohortsModel' -import { PaginationManual } from '@posthog/lemon-ui' -import { actionToUrl, router, urlToAction } from 'kea-router' -import { deleteWithUndo } from 'lib/utils/deleteWithUndo' -import { deleteFromTree, refreshTreeItem } from '~/layout/panel-layout/ProjectTree/projectTreeLogic' -import { exportsLogic } from 'lib/components/ExportButton/exportsLogic' export interface CohortFilters { search?: string diff --git a/frontend/src/scenes/comments/Comment.tsx b/frontend/src/scenes/comments/Comment.tsx index cadede2fda..7ad2a48be7 100644 --- a/frontend/src/scenes/comments/Comment.tsx +++ b/frontend/src/scenes/comments/Comment.tsx @@ -1,15 +1,17 @@ -import { IconCheck, IconEllipsis, IconPencil, IconShare } from '@posthog/icons' -import { LemonButton, LemonMenu, LemonTextAreaMarkdown, ProfilePicture } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' +import { useEffect, useRef } from 'react' + +import { IconCheck, IconEllipsis, IconPencil, IconShare } from '@posthog/icons' +import { LemonButton, LemonMenu, LemonTextAreaMarkdown, ProfilePicture } from '@posthog/lemon-ui' + import { TZLabel } from 'lib/components/TZLabel' import { LemonMarkdown } from 'lib/lemon-ui/LemonMarkdown' -import { useEffect, useRef } from 'react' import { KeyboardShortcut } from '~/layout/navigation-3000/components/KeyboardShortcut' import { CommentType } from '~/types' -import { commentsLogic, CommentWithRepliesType } from './commentsLogic' +import { CommentWithRepliesType, commentsLogic } from './commentsLogic' export type CommentProps = { commentWithReplies: CommentWithRepliesType diff --git a/frontend/src/scenes/comments/CommentComposer.tsx b/frontend/src/scenes/comments/CommentComposer.tsx index f51e6ddf54..c469033719 100644 --- a/frontend/src/scenes/comments/CommentComposer.tsx +++ b/frontend/src/scenes/comments/CommentComposer.tsx @@ -1,11 +1,13 @@ -import { LemonButton, LemonTextAreaMarkdown } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' -import { humanizeScope } from 'lib/components/ActivityLog/humanizeActivity' import { useEffect } from 'react' +import { LemonButton, LemonTextAreaMarkdown } from '@posthog/lemon-ui' + +import { humanizeScope } from 'lib/components/ActivityLog/humanizeActivity' + import { KeyboardShortcut } from '~/layout/navigation-3000/components/KeyboardShortcut' -import { commentsLogic, CommentsLogicProps } from './commentsLogic' +import { CommentsLogicProps, commentsLogic } from './commentsLogic' export const CommentComposer = (props: CommentsLogicProps): JSX.Element => { const { key, composedComment, commentsLoading, replyingCommentId, itemContext } = useValues(commentsLogic(props)) diff --git a/frontend/src/scenes/comments/CommentsList.tsx b/frontend/src/scenes/comments/CommentsList.tsx index 93744615bb..491f8ad861 100644 --- a/frontend/src/scenes/comments/CommentsList.tsx +++ b/frontend/src/scenes/comments/CommentsList.tsx @@ -1,10 +1,12 @@ -import { LemonSkeleton } from '@posthog/lemon-ui' import { BindLogic, useActions, useValues } from 'kea' -import { PhonePairHogs } from 'lib/components/hedgehogs' import { useEffect } from 'react' +import { LemonSkeleton } from '@posthog/lemon-ui' + +import { PhonePairHogs } from 'lib/components/hedgehogs' + import { CommentWithReplies } from './Comment' -import { commentsLogic, CommentsLogicProps } from './commentsLogic' +import { CommentsLogicProps, commentsLogic } from './commentsLogic' export const CommentsList = (props: CommentsLogicProps): JSX.Element => { const { key, commentsWithReplies, commentsLoading } = useValues(commentsLogic(props)) diff --git a/frontend/src/scenes/comments/commentsLogic.ts b/frontend/src/scenes/comments/commentsLogic.ts index 17767504e6..12efc39f43 100644 --- a/frontend/src/scenes/comments/commentsLogic.ts +++ b/frontend/src/scenes/comments/commentsLogic.ts @@ -1,14 +1,15 @@ import { actions, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { subscriptions } from 'kea-subscriptions' + import api from 'lib/api' +import { isEmptyObject } from 'lib/utils' import { deleteWithUndo } from 'lib/utils/deleteWithUndo' +import { sidePanelDiscussionLogic } from '~/layout/navigation-3000/sidepanel/panels/discussion/sidePanelDiscussionLogic' import { CommentType } from '~/types' import type { commentsLogicType } from './commentsLogicType' -import { sidePanelDiscussionLogic } from '~/layout/navigation-3000/sidepanel/panels/discussion/sidePanelDiscussionLogic' -import { isEmptyObject } from 'lib/utils' export type CommentsLogicProps = { scope: CommentType['scope'] diff --git a/frontend/src/scenes/dashboard/AddInsightToDashboardModal.tsx b/frontend/src/scenes/dashboard/AddInsightToDashboardModal.tsx index 13be348731..e42c83adbc 100644 --- a/frontend/src/scenes/dashboard/AddInsightToDashboardModal.tsx +++ b/frontend/src/scenes/dashboard/AddInsightToDashboardModal.tsx @@ -1,11 +1,12 @@ import { useActions, useValues } from 'kea' import { BindLogic } from 'kea' + import { AccessControlledLemonButton } from 'lib/components/AccessControlledLemonButton' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonModal } from 'lib/lemon-ui/LemonModal' import { getAppContext } from 'lib/utils/getAppContext' -import { addSavedInsightsModalLogic } from 'scenes/saved-insights/addSavedInsightsModalLogic' import { AddSavedInsightsToDashboard } from 'scenes/saved-insights/AddSavedInsightsToDashboard' +import { addSavedInsightsModalLogic } from 'scenes/saved-insights/addSavedInsightsModalLogic' import { urls } from 'scenes/urls' import { AccessControlLevel, AccessControlResourceType } from '~/types' diff --git a/frontend/src/scenes/dashboard/Dashboard.tsx b/frontend/src/scenes/dashboard/Dashboard.tsx index d07ac71f71..420d8a28ec 100644 --- a/frontend/src/scenes/dashboard/Dashboard.tsx +++ b/frontend/src/scenes/dashboard/Dashboard.tsx @@ -1,16 +1,19 @@ import './Dashboard.scss' -import { LemonButton } from '@posthog/lemon-ui' import clsx from 'clsx' import { BindLogic, useActions, useMountedLogic, useValues } from 'kea' + +import { LemonButton } from '@posthog/lemon-ui' + import { AccessDenied } from 'lib/components/AccessDenied' import { NotFound } from 'lib/components/NotFound' import { useKeyboardHotkeys } from 'lib/hooks/useKeyboardHotkeys' +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { DashboardEventSource } from 'lib/utils/eventUsageLogic' import { DashboardEditBar } from 'scenes/dashboard/DashboardEditBar' import { DashboardItems } from 'scenes/dashboard/DashboardItems' -import { dashboardLogic, DashboardLogicProps } from 'scenes/dashboard/dashboardLogic' import { DashboardReloadAction, LastRefreshText } from 'scenes/dashboard/DashboardReloadAction' +import { DashboardLogicProps, dashboardLogic } from 'scenes/dashboard/dashboardLogic' import { dataThemeLogic } from 'scenes/dataThemeLogic' import { InsightErrorState } from 'scenes/insights/EmptyStates' import { SceneExport } from 'scenes/sceneTypes' @@ -21,7 +24,6 @@ import { DashboardMode, DashboardPlacement, DashboardType, DataColorThemeModel, import { AddInsightToDashboardModal } from './AddInsightToDashboardModal' import { DashboardHeader } from './DashboardHeader' import { EmptyDashboardComponent } from './EmptyDashboardComponent' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' interface DashboardProps { id?: string diff --git a/frontend/src/scenes/dashboard/DashboardCollaborators.tsx b/frontend/src/scenes/dashboard/DashboardCollaborators.tsx index 54d07d67ae..304087f28e 100644 --- a/frontend/src/scenes/dashboard/DashboardCollaborators.tsx +++ b/frontend/src/scenes/dashboard/DashboardCollaborators.tsx @@ -1,6 +1,8 @@ -import { IconLock, IconTrash, IconUnlock } from '@posthog/icons' import { useActions, useValues } from 'kea' import { router } from 'kea-router' + +import { IconLock, IconTrash, IconUnlock } from '@posthog/icons' + import { PayGateMini } from 'lib/components/PayGateMini/PayGateMini' import { usersLemonSelectOptions } from 'lib/components/UserSelectItem' import { DashboardPrivilegeLevel, DashboardRestrictionLevel, privilegeLevelToName } from 'lib/constants' diff --git a/frontend/src/scenes/dashboard/DashboardEditBar.tsx b/frontend/src/scenes/dashboard/DashboardEditBar.tsx index 517185b3d0..ac415b319b 100644 --- a/frontend/src/scenes/dashboard/DashboardEditBar.tsx +++ b/frontend/src/scenes/dashboard/DashboardEditBar.tsx @@ -1,7 +1,9 @@ -import { IconCalendar } from '@posthog/icons' -import { LemonButton, Popover } from '@posthog/lemon-ui' import clsx from 'clsx' import { BindLogic, useActions, useValues } from 'kea' + +import { IconCalendar } from '@posthog/icons' +import { LemonButton, Popover } from '@posthog/lemon-ui' + import { DateFilter } from 'lib/components/DateFilter/DateFilter' import { PropertyFilters } from 'lib/components/PropertyFilters/PropertyFilters' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' diff --git a/frontend/src/scenes/dashboard/DashboardHeader.tsx b/frontend/src/scenes/dashboard/DashboardHeader.tsx index bcb4084755..fa484bb9dc 100644 --- a/frontend/src/scenes/dashboard/DashboardHeader.tsx +++ b/frontend/src/scenes/dashboard/DashboardHeader.tsx @@ -1,5 +1,10 @@ import { useActions, useValues } from 'kea' import { router } from 'kea-router' +import { useEffect, useState } from 'react' + +import { IconGridMasonry, IconNotebook, IconPalette, IconScreen, IconTrash } from '@posthog/icons' + +import { AccessControlAction } from 'lib/components/AccessControlAction' import { AccessControlledLemonButton } from 'lib/components/AccessControlledLemonButton' import { TextCardModal } from 'lib/components/Cards/TextCard/TextCardModal' import { EditableField } from 'lib/components/EditableField/EditableField' @@ -7,6 +12,15 @@ import { ExportButton, ExportButtonItem } from 'lib/components/ExportButton/Expo import { FullScreen } from 'lib/components/FullScreen' import { ObjectTags } from 'lib/components/ObjectTags/ObjectTags' import { PageHeader } from 'lib/components/PageHeader' +import { SceneExportDropdownMenu } from 'lib/components/Scenes/InsightOrDashboard/SceneExportDropdownMenu' +import { SceneCommonButtons } from 'lib/components/Scenes/SceneCommonButtons' +import { SceneFile } from 'lib/components/Scenes/SceneFile' +import { SceneMetalyticsSummaryButton } from 'lib/components/Scenes/SceneMetalyticsSummaryButton' +import { SceneSubscribeButton } from 'lib/components/Scenes/SceneSubscribeButton' +import { SceneTags } from 'lib/components/Scenes/SceneTags' +import { SceneTextInput } from 'lib/components/Scenes/SceneTextInput' +import { SceneTextarea } from 'lib/components/Scenes/SceneTextarea' +import { SceneActivityIndicator } from 'lib/components/Scenes/SceneUpdateActivityInfo' import { SharingModal } from 'lib/components/Sharing/SharingModal' import { SubscribeButton, SubscriptionsModal } from 'lib/components/Subscriptions/SubscriptionsModal' import { FEATURE_FLAGS, privilegeLevelToName } from 'lib/constants' @@ -16,15 +30,25 @@ import { More } from 'lib/lemon-ui/LemonButton/More' import { LemonDivider } from 'lib/lemon-ui/LemonDivider' import { isLemonSelectSection } from 'lib/lemon-ui/LemonSelect' import { ProfileBubbles } from 'lib/lemon-ui/ProfilePicture/ProfileBubbles' +import { featureFlagLogic } from 'lib/logic/featureFlagLogic' +import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' import { humanFriendlyDetailedTime, slugify } from 'lib/utils' import { DashboardEventSource } from 'lib/utils/eventUsageLogic' -import { deleteDashboardLogic } from 'scenes/dashboard/deleteDashboardLogic' import { DeleteDashboardModal } from 'scenes/dashboard/DeleteDashboardModal' -import { duplicateDashboardLogic } from 'scenes/dashboard/duplicateDashboardLogic' import { DuplicateDashboardModal } from 'scenes/dashboard/DuplicateDashboardModal' +import { deleteDashboardLogic } from 'scenes/dashboard/deleteDashboardLogic' +import { duplicateDashboardLogic } from 'scenes/dashboard/duplicateDashboardLogic' import { urls } from 'scenes/urls' import { userLogic } from 'scenes/userLogic' +import { KeyboardShortcut } from '~/layout/navigation-3000/components/KeyboardShortcut' +import { + ScenePanel, + ScenePanelActions, + ScenePanelCommonActions, + ScenePanelDivider, + ScenePanelMetaInfo, +} from '~/layout/scenes/SceneLayout' import { dashboardsModel } from '~/models/dashboardsModel' import { notebooksModel } from '~/models/notebooksModel' import { tagsModel } from '~/models/tagsModel' @@ -37,32 +61,10 @@ import { QueryBasedInsightModel, } from '~/types' -import { IconGridMasonry, IconNotebook, IconPalette, IconScreen, IconTrash } from '@posthog/icons' -import { AccessControlAction } from 'lib/components/AccessControlAction' -import { SceneExportDropdownMenu } from 'lib/components/Scenes/InsightOrDashboard/SceneExportDropdownMenu' -import { SceneCommonButtons } from 'lib/components/Scenes/SceneCommonButtons' -import { SceneFile } from 'lib/components/Scenes/SceneFile' -import { SceneMetalyticsSummaryButton } from 'lib/components/Scenes/SceneMetalyticsSummaryButton' -import { SceneSubscribeButton } from 'lib/components/Scenes/SceneSubscribeButton' -import { SceneTags } from 'lib/components/Scenes/SceneTags' -import { SceneTextarea } from 'lib/components/Scenes/SceneTextarea' -import { SceneTextInput } from 'lib/components/Scenes/SceneTextInput' -import { SceneActivityIndicator } from 'lib/components/Scenes/SceneUpdateActivityInfo' -import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' -import { useEffect, useState } from 'react' -import { KeyboardShortcut } from '~/layout/navigation-3000/components/KeyboardShortcut' -import { - ScenePanel, - ScenePanelActions, - ScenePanelCommonActions, - ScenePanelDivider, - ScenePanelMetaInfo, -} from '~/layout/scenes/SceneLayout' -import { addInsightToDashboardLogic } from './addInsightToDashboardModalLogic' import { DASHBOARD_RESTRICTION_OPTIONS } from './DashboardCollaborators' -import { dashboardCollaboratorsLogic } from './dashboardCollaboratorsLogic' import { DashboardInsightColorsModal } from './DashboardInsightColorsModal' +import { addInsightToDashboardLogic } from './addInsightToDashboardModalLogic' +import { dashboardCollaboratorsLogic } from './dashboardCollaboratorsLogic' import { dashboardInsightColorsModalLogic } from './dashboardInsightColorsModalLogic' import { dashboardLogic } from './dashboardLogic' import { dashboardTemplateEditorLogic } from './dashboardTemplateEditorLogic' diff --git a/frontend/src/scenes/dashboard/DashboardInsightColorsModal.tsx b/frontend/src/scenes/dashboard/DashboardInsightColorsModal.tsx index 38359ef153..3221d4ed6d 100644 --- a/frontend/src/scenes/dashboard/DashboardInsightColorsModal.tsx +++ b/frontend/src/scenes/dashboard/DashboardInsightColorsModal.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { LemonLabel, LemonModal, LemonSelect } from '@posthog/lemon-ui' import { LemonButton, LemonColorPicker, LemonTable, LemonTableColumns } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { AnimationType } from 'lib/animations/animations' import { DataColorToken } from 'lib/colors' import { Animation } from 'lib/components/Animation/Animation' diff --git a/frontend/src/scenes/dashboard/DashboardItems.tsx b/frontend/src/scenes/dashboard/DashboardItems.tsx index b3ed6e2dc6..e12a132b00 100644 --- a/frontend/src/scenes/dashboard/DashboardItems.tsx +++ b/frontend/src/scenes/dashboard/DashboardItems.tsx @@ -3,19 +3,20 @@ import './DashboardItems.scss' import clsx from 'clsx' import { useActions, useValues } from 'kea' import { router } from 'kea-router' +import { useRef, useState } from 'react' +import { Responsive as ReactGridLayout } from 'react-grid-layout' + import { InsightCard } from 'lib/components/Cards/InsightCard' import { TextCard } from 'lib/components/Cards/TextCard/TextCard' import { useResizeObserver } from 'lib/hooks/useResizeObserver' import { LemonButton, LemonButtonWithDropdown } from 'lib/lemon-ui/LemonButton' import { LemonDivider } from 'lib/lemon-ui/LemonDivider' -import { useRef, useState } from 'react' -import { Responsive as ReactGridLayout } from 'react-grid-layout' import { dashboardLogic } from 'scenes/dashboard/dashboardLogic' -import { BREAKPOINT_COLUMN_COUNTS, BREAKPOINTS } from 'scenes/dashboard/dashboardUtils' +import { BREAKPOINTS, BREAKPOINT_COLUMN_COUNTS } from 'scenes/dashboard/dashboardUtils' import { urls } from 'scenes/urls' -import { dashboardsModel } from '~/models/dashboardsModel' import { getCurrentExporterData } from '~/exporter/exporterViewLogic' +import { dashboardsModel } from '~/models/dashboardsModel' import { insightsModel } from '~/models/insightsModel' import { DashboardMode, DashboardPlacement, DashboardType } from '~/types' diff --git a/frontend/src/scenes/dashboard/DashboardReloadAction.tsx b/frontend/src/scenes/dashboard/DashboardReloadAction.tsx index 53e9efb70e..7d2fe8d168 100644 --- a/frontend/src/scenes/dashboard/DashboardReloadAction.tsx +++ b/frontend/src/scenes/dashboard/DashboardReloadAction.tsx @@ -1,14 +1,16 @@ -import { IconCheck } from '@posthog/icons' -import { LemonBadge, LemonButton, LemonSwitch } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' + +import { IconCheck } from '@posthog/icons' +import { LemonBadge, LemonButton, LemonSwitch } from '@posthog/lemon-ui' + import { TZLabel } from 'lib/components/TZLabel' import { dayjs } from 'lib/dayjs' import { usePageVisibilityCb } from 'lib/hooks/usePageVisibility' -import { IconRefresh } from 'lib/lemon-ui/icons' import { LemonMenuOverlay } from 'lib/lemon-ui/LemonMenu/LemonMenu' import { LemonRadio } from 'lib/lemon-ui/LemonRadio' import { Spinner } from 'lib/lemon-ui/Spinner' +import { IconRefresh } from 'lib/lemon-ui/icons' import { humanFriendlyDuration } from 'lib/utils' import { dashboardLogic } from 'scenes/dashboard/dashboardLogic' diff --git a/frontend/src/scenes/dashboard/DashboardTemplateChooser.tsx b/frontend/src/scenes/dashboard/DashboardTemplateChooser.tsx index 1d46aa2932..9ea1233ecf 100644 --- a/frontend/src/scenes/dashboard/DashboardTemplateChooser.tsx +++ b/frontend/src/scenes/dashboard/DashboardTemplateChooser.tsx @@ -1,12 +1,13 @@ import './DashboardTemplateChooser.scss' -import { LemonTag } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' +import { useState } from 'react' + +import { LemonTag } from '@posthog/lemon-ui' + import { FallbackCoverImage } from 'lib/components/FallbackCoverImage/FallbackCoverImage' import { Spinner } from 'lib/lemon-ui/Spinner' -import BlankDashboardHog from 'public/blank-dashboard-hog.png' -import { useState } from 'react' import { DashboardTemplateProps, dashboardTemplatesLogic, @@ -15,6 +16,8 @@ import { newDashboardLogic } from 'scenes/dashboard/newDashboardLogic' import { DashboardTemplateType, TemplateAvailabilityContext } from '~/types' +import BlankDashboardHog from 'public/blank-dashboard-hog.png' + export function DashboardTemplateChooser({ scope = 'default', onItemClick, diff --git a/frontend/src/scenes/dashboard/DashboardTemplateEditor.tsx b/frontend/src/scenes/dashboard/DashboardTemplateEditor.tsx index 6c42ce27cd..b6e8d06c54 100644 --- a/frontend/src/scenes/dashboard/DashboardTemplateEditor.tsx +++ b/frontend/src/scenes/dashboard/DashboardTemplateEditor.tsx @@ -1,5 +1,7 @@ -import { LemonButton, LemonModal } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonButton, LemonModal } from '@posthog/lemon-ui' + import { CodeEditor } from 'lib/monaco/CodeEditor' import { dashboardTemplateEditorLogic } from './dashboardTemplateEditorLogic' diff --git a/frontend/src/scenes/dashboard/DashboardTemplateVariables.tsx b/frontend/src/scenes/dashboard/DashboardTemplateVariables.tsx index d455cd66c0..1b9815fda4 100644 --- a/frontend/src/scenes/dashboard/DashboardTemplateVariables.tsx +++ b/frontend/src/scenes/dashboard/DashboardTemplateVariables.tsx @@ -1,6 +1,8 @@ -import { LemonLabel } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { useEffect } from 'react' + +import { LemonLabel } from '@posthog/lemon-ui' + import { ActionFilter } from 'scenes/insights/filters/ActionFilter/ActionFilter' import { FilterType, InsightType } from '~/types' diff --git a/frontend/src/scenes/dashboard/Dashboards.stories.tsx b/frontend/src/scenes/dashboard/Dashboards.stories.tsx index 743fe17134..945ebf0ae0 100644 --- a/frontend/src/scenes/dashboard/Dashboards.stories.tsx +++ b/frontend/src/scenes/dashboard/Dashboards.stories.tsx @@ -1,4 +1,6 @@ import { Meta, StoryObj } from '@storybook/react' + +import { useDelayedOnMountEffect } from 'lib/hooks/useOnMountEffect' import { DashboardEventSource } from 'lib/utils/eventUsageLogic' import { App } from 'scenes/App' import { dashboardLogic } from 'scenes/dashboard/dashboardLogic' @@ -10,7 +12,6 @@ import { useAvailableFeatures } from '~/mocks/features' import { BaseMathType, DashboardMode, EntityTypes } from '~/types' import { dashboardTemplatesLogic } from './dashboards/templates/dashboardTemplatesLogic' -import { useDelayedOnMountEffect } from 'lib/hooks/useOnMountEffect' const dashboardRaw = require('./__mocks__/dashboard1.json') diff --git a/frontend/src/scenes/dashboard/DeleteDashboardModal.tsx b/frontend/src/scenes/dashboard/DeleteDashboardModal.tsx index 30106cfe88..ed5d0f6eef 100644 --- a/frontend/src/scenes/dashboard/DeleteDashboardModal.tsx +++ b/frontend/src/scenes/dashboard/DeleteDashboardModal.tsx @@ -1,5 +1,6 @@ import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonCheckbox } from 'lib/lemon-ui/LemonCheckbox' import { LemonField } from 'lib/lemon-ui/LemonField' diff --git a/frontend/src/scenes/dashboard/DuplicateDashboardModal.tsx b/frontend/src/scenes/dashboard/DuplicateDashboardModal.tsx index b877c9e6a5..ce71412e81 100644 --- a/frontend/src/scenes/dashboard/DuplicateDashboardModal.tsx +++ b/frontend/src/scenes/dashboard/DuplicateDashboardModal.tsx @@ -1,5 +1,6 @@ import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonCheckbox } from 'lib/lemon-ui/LemonCheckbox' import { LemonField } from 'lib/lemon-ui/LemonField' diff --git a/frontend/src/scenes/dashboard/EmptyDashboardComponent.tsx b/frontend/src/scenes/dashboard/EmptyDashboardComponent.tsx index c868b92d31..1192505c9b 100644 --- a/frontend/src/scenes/dashboard/EmptyDashboardComponent.tsx +++ b/frontend/src/scenes/dashboard/EmptyDashboardComponent.tsx @@ -1,13 +1,15 @@ import './EmptyDashboardComponent.scss' -import { IconPlus } from '@posthog/icons' import { useActions } from 'kea' -import { LemonButton } from 'lib/lemon-ui/LemonButton' -import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' import React from 'react' -import { addInsightToDashboardLogic } from './addInsightToDashboardModalLogic' +import { IconPlus } from '@posthog/icons' + +import { LemonButton } from 'lib/lemon-ui/LemonButton' +import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' + import { DASHBOARD_CANNOT_EDIT_MESSAGE } from './DashboardHeader' +import { addInsightToDashboardLogic } from './addInsightToDashboardModalLogic' function SkeletonCard({ children, active }: { children: React.ReactNode; active: boolean }): JSX.Element { return ( diff --git a/frontend/src/scenes/dashboard/NewDashboardModal.tsx b/frontend/src/scenes/dashboard/NewDashboardModal.tsx index 2d58b0cbe6..4846323345 100644 --- a/frontend/src/scenes/dashboard/NewDashboardModal.tsx +++ b/frontend/src/scenes/dashboard/NewDashboardModal.tsx @@ -1,5 +1,7 @@ -import { LemonButton, LemonInput } from '@posthog/lemon-ui' import { useActions, useMountedLogic, useValues } from 'kea' + +import { LemonButton, LemonInput } from '@posthog/lemon-ui' + import { LemonModal } from 'lib/lemon-ui/LemonModal' import { pluralize } from 'lib/utils' import { dashboardTemplatesLogic } from 'scenes/dashboard/dashboards/templates/dashboardTemplatesLogic' diff --git a/frontend/src/scenes/dashboard/dashboardCollaboratorsLogic.ts b/frontend/src/scenes/dashboard/dashboardCollaboratorsLogic.ts index 805e2db36a..be0bf56f21 100644 --- a/frontend/src/scenes/dashboard/dashboardCollaboratorsLogic.ts +++ b/frontend/src/scenes/dashboard/dashboardCollaboratorsLogic.ts @@ -1,5 +1,6 @@ import { actions, connect, events, kea, key, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { DashboardPrivilegeLevel, DashboardRestrictionLevel } from 'lib/constants' import { teamMembersLogic } from 'scenes/settings/environment/teamMembersLogic' diff --git a/frontend/src/scenes/dashboard/dashboardInsightColorsModalLogic.ts b/frontend/src/scenes/dashboard/dashboardInsightColorsModalLogic.ts index d1d6b1364d..e439536a85 100644 --- a/frontend/src/scenes/dashboard/dashboardInsightColorsModalLogic.ts +++ b/frontend/src/scenes/dashboard/dashboardInsightColorsModalLogic.ts @@ -1,4 +1,5 @@ import { actions, connect, kea, path, reducers, selectors } from 'kea' + import { getFunnelDatasetKey, getTrendDatasetKey, sortCohorts } from 'scenes/insights/utils' import { cohortsModel } from '~/models/cohortsModel' diff --git a/frontend/src/scenes/dashboard/dashboardLogic.test.ts b/frontend/src/scenes/dashboard/dashboardLogic.test.ts index d6e0ba810d..245c12d2f1 100644 --- a/frontend/src/scenes/dashboard/dashboardLogic.test.ts +++ b/frontend/src/scenes/dashboard/dashboardLogic.test.ts @@ -1,7 +1,9 @@ // let tiles assert an insight is present in tests i.e. `tile!.insight` when it must be present for tests to pass -import { expectLogic, truth } from 'kea-test-utils' -import api from 'lib/api' import { MOCK_TEAM_ID } from 'lib/api.mock' + +import { expectLogic, truth } from 'kea-test-utils' + +import api from 'lib/api' import { now } from 'lib/dayjs' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' import { DashboardLoadAction, dashboardLogic } from 'scenes/dashboard/dashboardLogic' diff --git a/frontend/src/scenes/dashboard/dashboardLogic.tsx b/frontend/src/scenes/dashboard/dashboardLogic.tsx index bf1b727399..5d52f9a946 100644 --- a/frontend/src/scenes/dashboard/dashboardLogic.tsx +++ b/frontend/src/scenes/dashboard/dashboardLogic.tsx @@ -1,8 +1,12 @@ -import { lemonToast } from '@posthog/lemon-ui' import { actions, connect, events, kea, key, listeners, path, props, reducers, selectors, sharedListeners } from 'kea' import { loaders } from 'kea-loaders' import { actionToUrl, router, urlToAction } from 'kea-router' import { subscriptions } from 'kea-subscriptions' +import uniqBy from 'lodash.uniqby' +import { Layout, Layouts } from 'react-grid-layout' + +import { lemonToast } from '@posthog/lemon-ui' + import api, { ApiMethodOptions, getJSONOrNull } from 'lib/api' import { DataColorTheme } from 'lib/colors' import { accessLevelSatisfied } from 'lib/components/AccessControlAction' @@ -12,11 +16,9 @@ import { Link } from 'lib/lemon-ui/Link' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { clearDOMTextSelection, getJSHeapMemory, shouldCancelQuery, toParams, uuid } from 'lib/utils' import { DashboardEventSource, eventUsageLogic } from 'lib/utils/eventUsageLogic' -import uniqBy from 'lodash.uniqby' -import { Layout, Layouts } from 'react-grid-layout' import { calculateLayouts } from 'scenes/dashboard/tileLayouts' import { dataThemeLogic } from 'scenes/dataThemeLogic' -import { createMaxContextHelpers, MaxContextInput } from 'scenes/max/maxTypes' +import { MaxContextInput, createMaxContextHelpers } from 'scenes/max/maxTypes' import { Scene } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' import { userLogic } from 'scenes/userLogic' @@ -62,13 +64,13 @@ import { AUTO_REFRESH_INITIAL_INTERVAL_SECONDS, BREAKPOINT_COLUMN_COUNTS, DASHBOARD_MIN_REFRESH_INTERVAL_MINUTES, + IS_TEST_MODE, + MAX_TILES_FOR_AUTOPREVIEW, + QUERY_VARIABLES_KEY, encodeURLVariables, getInsightWithRetry, - IS_TEST_MODE, layoutsByTile, - MAX_TILES_FOR_AUTOPREVIEW, parseURLVariables, - QUERY_VARIABLES_KEY, runWithLimit, } from './dashboardUtils' diff --git a/frontend/src/scenes/dashboard/dashboardTemplateEditorLogic.ts b/frontend/src/scenes/dashboard/dashboardTemplateEditorLogic.ts index 3bd7a99fd5..08d5827089 100644 --- a/frontend/src/scenes/dashboard/dashboardTemplateEditorLogic.ts +++ b/frontend/src/scenes/dashboard/dashboardTemplateEditorLogic.ts @@ -1,13 +1,15 @@ -import { lemonToast } from '@posthog/lemon-ui' import { actions, afterMount, connect, kea, listeners, path, reducers } from 'kea' import { loaders } from 'kea-loaders' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { DashboardTemplateEditorType, DashboardTemplateType, MonacoMarker } from '~/types' -import { dashboardTemplatesLogic } from './dashboards/templates/dashboardTemplatesLogic' import type { dashboardTemplateEditorLogicType } from './dashboardTemplateEditorLogicType' +import { dashboardTemplatesLogic } from './dashboards/templates/dashboardTemplatesLogic' export const dashboardTemplateEditorLogic = kea([ path(['scenes', 'dashboard', 'dashboardTemplateEditorLogic']), diff --git a/frontend/src/scenes/dashboard/dashboardTemplateVariablesLogic.ts b/frontend/src/scenes/dashboard/dashboardTemplateVariablesLogic.ts index 842a57ea90..a3adac08fd 100644 --- a/frontend/src/scenes/dashboard/dashboardTemplateVariablesLogic.ts +++ b/frontend/src/scenes/dashboard/dashboardTemplateVariablesLogic.ts @@ -1,4 +1,5 @@ import { actions, connect, kea, listeners, path, props, propsChanged, reducers, selectors } from 'kea' + import { iframedToolbarBrowserLogic } from 'lib/components/IframedToolbarBrowser/iframedToolbarBrowserLogic' import { PostHogAppToolbarEvent } from 'lib/components/IframedToolbarBrowser/utils' import { isEmptyObject } from 'lib/utils' diff --git a/frontend/src/scenes/dashboard/dashboardUtils.ts b/frontend/src/scenes/dashboard/dashboardUtils.ts index bf24a2cd72..3c6b3d862c 100644 --- a/frontend/src/scenes/dashboard/dashboardUtils.ts +++ b/frontend/src/scenes/dashboard/dashboardUtils.ts @@ -1,8 +1,10 @@ +import { Layouts } from 'react-grid-layout' + import { lemonToast } from '@posthog/lemon-ui' + import api, { ApiMethodOptions, getJSONOrNull } from 'lib/api' import { currentSessionId } from 'lib/internalMetrics' import { shouldCancelQuery, toParams } from 'lib/utils' -import { Layouts } from 'react-grid-layout' import { getQueryBasedInsightModel } from '~/queries/nodes/InsightViz/utils' import { pollForResults } from '~/queries/query' diff --git a/frontend/src/scenes/dashboard/dashboards/Dashboards.tsx b/frontend/src/scenes/dashboard/dashboards/Dashboards.tsx index 360b1624fe..269b9659a2 100644 --- a/frontend/src/scenes/dashboard/dashboards/Dashboards.tsx +++ b/frontend/src/scenes/dashboard/dashboards/Dashboards.tsx @@ -1,15 +1,16 @@ import { useActions, useValues } from 'kea' + import { AccessControlledLemonButton } from 'lib/components/AccessControlledLemonButton' import { PageHeader } from 'lib/components/PageHeader' import { LemonTab, LemonTabs } from 'lib/lemon-ui/LemonTabs' import { getAppContext } from 'lib/utils/getAppContext' -import { dashboardsLogic, DashboardsTab } from 'scenes/dashboard/dashboards/dashboardsLogic' -import { DashboardsTableContainer } from 'scenes/dashboard/dashboards/DashboardsTable' -import { DashboardTemplatesTable } from 'scenes/dashboard/dashboards/templates/DashboardTemplatesTable' import { DeleteDashboardModal } from 'scenes/dashboard/DeleteDashboardModal' import { DuplicateDashboardModal } from 'scenes/dashboard/DuplicateDashboardModal' -import { newDashboardLogic } from 'scenes/dashboard/newDashboardLogic' import { NewDashboardModal } from 'scenes/dashboard/NewDashboardModal' +import { DashboardsTableContainer } from 'scenes/dashboard/dashboards/DashboardsTable' +import { DashboardsTab, dashboardsLogic } from 'scenes/dashboard/dashboards/dashboardsLogic' +import { DashboardTemplatesTable } from 'scenes/dashboard/dashboards/templates/DashboardTemplatesTable' +import { newDashboardLogic } from 'scenes/dashboard/newDashboardLogic' import { SceneExport } from 'scenes/sceneTypes' import { dashboardsModel } from '~/models/dashboardsModel' diff --git a/frontend/src/scenes/dashboard/dashboards/DashboardsTable.tsx b/frontend/src/scenes/dashboard/dashboards/DashboardsTable.tsx index c802ff6faf..f37f137f42 100644 --- a/frontend/src/scenes/dashboard/dashboards/DashboardsTable.tsx +++ b/frontend/src/scenes/dashboard/dashboards/DashboardsTable.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconHome, IconLock, IconPin, IconPinFilled, IconShare } from '@posthog/icons' import { LemonInput } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { AccessControlledLemonButton } from 'lib/components/AccessControlledLemonButton' import { MemberSelect } from 'lib/components/MemberSelect' import { ObjectTags } from 'lib/components/ObjectTags/ObjectTags' @@ -10,13 +12,13 @@ import { More } from 'lib/lemon-ui/LemonButton/More' import { LemonDivider } from 'lib/lemon-ui/LemonDivider' import { LemonRow } from 'lib/lemon-ui/LemonRow' import { LemonTable, LemonTableColumn, LemonTableColumns } from 'lib/lemon-ui/LemonTable' -import { atColumn, createdAtColumn, createdByColumn } from 'lib/lemon-ui/LemonTable/columnUtils' import { LemonTableLink } from 'lib/lemon-ui/LemonTable/LemonTableLink' +import { atColumn, createdAtColumn, createdByColumn } from 'lib/lemon-ui/LemonTable/columnUtils' import { Link } from 'lib/lemon-ui/Link' import { Tooltip } from 'lib/lemon-ui/Tooltip' import { DashboardEventSource } from 'lib/utils/eventUsageLogic' import { dashboardLogic } from 'scenes/dashboard/dashboardLogic' -import { DashboardsFilters, dashboardsLogic, DashboardsTab } from 'scenes/dashboard/dashboards/dashboardsLogic' +import { DashboardsFilters, DashboardsTab, dashboardsLogic } from 'scenes/dashboard/dashboards/dashboardsLogic' import { deleteDashboardLogic } from 'scenes/dashboard/deleteDashboardLogic' import { duplicateDashboardLogic } from 'scenes/dashboard/duplicateDashboardLogic' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/dashboard/dashboards/dashboardsLogic.test.ts b/frontend/src/scenes/dashboard/dashboards/dashboardsLogic.test.ts index b2113ddee7..827c33212d 100644 --- a/frontend/src/scenes/dashboard/dashboards/dashboardsLogic.test.ts +++ b/frontend/src/scenes/dashboard/dashboards/dashboardsLogic.test.ts @@ -1,5 +1,8 @@ import { expectLogic, truth } from 'kea-test-utils' -import { dashboardsLogic, DashboardsTab } from 'scenes/dashboard/dashboards/dashboardsLogic' + +import { DashboardsTab, dashboardsLogic } from 'scenes/dashboard/dashboards/dashboardsLogic' +import { sceneLogic } from 'scenes/sceneLogic' +import { Scene } from 'scenes/sceneTypes' import { useMocks } from '~/mocks/jest' import { dashboardsModel } from '~/models/dashboardsModel' @@ -7,8 +10,6 @@ import { initKeaTests } from '~/test/init' import { DashboardType, UserBasicType } from '~/types' import dashboardJson from '../__mocks__/dashboard.json' -import { sceneLogic } from 'scenes/sceneLogic' -import { Scene } from 'scenes/sceneTypes' let dashboardId = 1234 const dashboard = (extras: Partial): DashboardType => { diff --git a/frontend/src/scenes/dashboard/dashboards/dashboardsLogic.ts b/frontend/src/scenes/dashboard/dashboards/dashboardsLogic.ts index e36cfcbec7..6537f3dd20 100644 --- a/frontend/src/scenes/dashboard/dashboards/dashboardsLogic.ts +++ b/frontend/src/scenes/dashboard/dashboards/dashboardsLogic.ts @@ -1,14 +1,14 @@ import Fuse from 'fuse.js' import { actions, connect, kea, path, reducers, selectors } from 'kea' import { router } from 'kea-router' + import { Sorting } from 'lib/lemon-ui/LemonTable/sorting' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { objectClean } from 'lib/utils' -import { userLogic } from 'scenes/userLogic' - +import { tabAwareActionToUrl } from 'lib/logic/scenes/tabAwareActionToUrl' import { tabAwareScene } from 'lib/logic/scenes/tabAwareScene' import { tabAwareUrlToAction } from 'lib/logic/scenes/tabAwareUrlToAction' -import { tabAwareActionToUrl } from 'lib/logic/scenes/tabAwareActionToUrl' +import { objectClean } from 'lib/utils' +import { userLogic } from 'scenes/userLogic' import { dashboardsModel } from '~/models/dashboardsModel' import { DashboardBasicType } from '~/types' diff --git a/frontend/src/scenes/dashboard/dashboards/templates/DashboardTemplatesTable.tsx b/frontend/src/scenes/dashboard/dashboards/templates/DashboardTemplatesTable.tsx index 9ddfc194a6..b33b75ffc6 100644 --- a/frontend/src/scenes/dashboard/dashboards/templates/DashboardTemplatesTable.tsx +++ b/frontend/src/scenes/dashboard/dashboards/templates/DashboardTemplatesTable.tsx @@ -1,12 +1,14 @@ -import { LemonButton, LemonDivider } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonButton, LemonDivider } from '@posthog/lemon-ui' + import { More } from 'lib/lemon-ui/LemonButton/More' import { LemonDialog } from 'lib/lemon-ui/LemonDialog' import { LemonSnack } from 'lib/lemon-ui/LemonSnack/LemonSnack' import { LemonTable, LemonTableColumns } from 'lib/lemon-ui/LemonTable' -import { dashboardTemplatesLogic } from 'scenes/dashboard/dashboards/templates/dashboardTemplatesLogic' import { DashboardTemplateEditor } from 'scenes/dashboard/DashboardTemplateEditor' import { dashboardTemplateEditorLogic } from 'scenes/dashboard/dashboardTemplateEditorLogic' +import { dashboardTemplatesLogic } from 'scenes/dashboard/dashboards/templates/dashboardTemplatesLogic' import { userLogic } from 'scenes/userLogic' import { DashboardTemplateType } from '~/types' diff --git a/frontend/src/scenes/dashboard/dashboards/templates/dashboardTemplatesLogic.tsx b/frontend/src/scenes/dashboard/dashboards/templates/dashboardTemplatesLogic.tsx index 678a3aabd4..063ae72771 100644 --- a/frontend/src/scenes/dashboard/dashboards/templates/dashboardTemplatesLogic.tsx +++ b/frontend/src/scenes/dashboard/dashboards/templates/dashboardTemplatesLogic.tsx @@ -3,6 +3,7 @@ import { lazyLoaders } from 'kea-loaders' import { router } from 'kea-router' import { actionToUrl } from 'kea-router' import { urlToAction } from 'kea-router' + import api from 'lib/api' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' diff --git a/frontend/src/scenes/dashboard/deleteDashboardLogic.ts b/frontend/src/scenes/dashboard/deleteDashboardLogic.ts index d4adcc5d57..8faccd0584 100644 --- a/frontend/src/scenes/dashboard/deleteDashboardLogic.ts +++ b/frontend/src/scenes/dashboard/deleteDashboardLogic.ts @@ -1,6 +1,7 @@ import { actions, connect, kea, listeners, path, reducers } from 'kea' import { forms } from 'kea-forms' import { router } from 'kea-router' + import { urls } from 'scenes/urls' import { dashboardsModel } from '~/models/dashboardsModel' diff --git a/frontend/src/scenes/dashboard/duplicateDashboardLogic.ts b/frontend/src/scenes/dashboard/duplicateDashboardLogic.ts index e81fe8244c..7694911e5b 100644 --- a/frontend/src/scenes/dashboard/duplicateDashboardLogic.ts +++ b/frontend/src/scenes/dashboard/duplicateDashboardLogic.ts @@ -1,6 +1,7 @@ import { actions, connect, kea, listeners, path, reducers } from 'kea' import { forms } from 'kea-forms' import { router } from 'kea-router' + import { urls } from 'scenes/urls' import { dashboardsModel } from '~/models/dashboardsModel' diff --git a/frontend/src/scenes/dashboard/newDashboardLogic.ts b/frontend/src/scenes/dashboard/newDashboardLogic.ts index 00d0a76e45..b2b65bc68b 100644 --- a/frontend/src/scenes/dashboard/newDashboardLogic.ts +++ b/frontend/src/scenes/dashboard/newDashboardLogic.ts @@ -1,6 +1,7 @@ import { actions, connect, isBreakpoint, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { forms } from 'kea-forms' import { actionToUrl, router, urlToAction } from 'kea-router' + import api from 'lib/api' import { DashboardRestrictionLevel } from 'lib/constants' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' diff --git a/frontend/src/scenes/dashboard/tileLayouts.ts b/frontend/src/scenes/dashboard/tileLayouts.ts index 88f501c33a..e87058a6f1 100644 --- a/frontend/src/scenes/dashboard/tileLayouts.ts +++ b/frontend/src/scenes/dashboard/tileLayouts.ts @@ -1,4 +1,5 @@ import { Layout } from 'react-grid-layout' + import { BREAKPOINT_COLUMN_COUNTS } from 'scenes/dashboard/dashboardUtils' import { getQueryBasedInsightModel } from '~/queries/nodes/InsightViz/utils' diff --git a/frontend/src/scenes/data-management/DataManagementScene.tsx b/frontend/src/scenes/data-management/DataManagementScene.tsx index bd75cb7732..c9ab71a43e 100644 --- a/frontend/src/scenes/data-management/DataManagementScene.tsx +++ b/frontend/src/scenes/data-management/DataManagementScene.tsx @@ -1,6 +1,9 @@ -import { IconInfo } from '@posthog/icons' import { actions, connect, kea, path, reducers, selectors, useValues } from 'kea' import { actionToUrl, combineUrl, router, urlToAction } from 'kea-router' +import React from 'react' + +import { IconInfo } from '@posthog/icons' + import { ActivityLog } from 'lib/components/ActivityLog/ActivityLog' import { PageHeader } from 'lib/components/PageHeader' import { TitleWithIcon } from 'lib/components/TitleWithIcon' @@ -10,12 +13,9 @@ import { LemonTag } from 'lib/lemon-ui/LemonTag' import { Tooltip } from 'lib/lemon-ui/Tooltip' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { capitalizeFirstLetter } from 'lib/utils' -import { RevenueAnalyticsSettings } from 'products/revenue_analytics/frontend/settings/RevenueAnalyticsSettings' -import React from 'react' -import { NewActionButton } from 'products/actions/frontend/components/NewActionButton' import { Annotations } from 'scenes/annotations' -import { Comments } from 'scenes/data-management/comments/Comments' import { NewAnnotationButton } from 'scenes/annotations/AnnotationModal' +import { Comments } from 'scenes/data-management/comments/Comments' import { Scene, SceneExport } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' import { MarketingAnalyticsSettings } from 'scenes/web-analytics/tabs/marketing-analytics/frontend/components/settings/MarketingAnalyticsSettings' @@ -23,6 +23,9 @@ import { MarketingAnalyticsSettings } from 'scenes/web-analytics/tabs/marketing- import { ActivityScope, Breadcrumb } from '~/types' import { ActionsTable } from 'products/actions/frontend/components/ActionsTable' +import { NewActionButton } from 'products/actions/frontend/components/NewActionButton' +import { RevenueAnalyticsSettings } from 'products/revenue_analytics/frontend/settings/RevenueAnalyticsSettings' + import type { dataManagementSceneLogicType } from './DataManagementSceneType' import { EventDefinitionsTable } from './events/EventDefinitionsTable' import { IngestionWarningsView } from './ingestion-warnings/IngestionWarningsView' diff --git a/frontend/src/scenes/data-management/comments/Comments.stories.tsx b/frontend/src/scenes/data-management/comments/Comments.stories.tsx index ca72ed79aa..1802f84d7a 100644 --- a/frontend/src/scenes/data-management/comments/Comments.stories.tsx +++ b/frontend/src/scenes/data-management/comments/Comments.stories.tsx @@ -1,4 +1,5 @@ import { Meta, StoryObj } from '@storybook/react' + import { App } from 'scenes/App' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/data-management/comments/Comments.tsx b/frontend/src/scenes/data-management/comments/Comments.tsx index 0347978ef0..4ea6f1510b 100644 --- a/frontend/src/scenes/data-management/comments/Comments.tsx +++ b/frontend/src/scenes/data-management/comments/Comments.tsx @@ -1,22 +1,24 @@ +import { useActions, useValues } from 'kea' +import { useEffect } from 'react' + import { IconTrash } from '@posthog/icons' import { LemonButton, LemonInput, LemonSelect } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' -import { MicrophoneHog } from 'lib/components/hedgehogs' + +import { MemberSelect } from 'lib/components/MemberSelect' import { ProductIntroduction } from 'lib/components/ProductIntroduction/ProductIntroduction' +import { TZLabel } from 'lib/components/TZLabel' +import { MicrophoneHog } from 'lib/components/hedgehogs' +import { dayjs } from 'lib/dayjs' import { LemonTable, LemonTableColumns } from 'lib/lemon-ui/LemonTable' import { LemonTag } from 'lib/lemon-ui/LemonTag/LemonTag' import { ProfilePicture } from 'lib/lemon-ui/ProfilePicture' import { Tooltip } from 'lib/lemon-ui/Tooltip' +import { IconOpenInApp } from 'lib/lemon-ui/icons' import { userLogic } from 'scenes/userLogic' -import { useEffect } from 'react' import { CommentType, ProductKey } from '~/types' -import { dayjs } from 'lib/dayjs' -import { commentsLogic, openURLFor, SCOPE_OPTIONS } from './commentsLogic' -import { MemberSelect } from 'lib/components/MemberSelect' -import { IconOpenInApp } from 'lib/lemon-ui/icons' -import { TZLabel } from 'lib/components/TZLabel' +import { SCOPE_OPTIONS, commentsLogic, openURLFor } from './commentsLogic' export function Comments(): JSX.Element { const { user } = useValues(userLogic) diff --git a/frontend/src/scenes/data-management/comments/commentsLogic.ts b/frontend/src/scenes/data-management/comments/commentsLogic.ts index a3c600a5f9..58ab944b0a 100644 --- a/frontend/src/scenes/data-management/comments/commentsLogic.ts +++ b/frontend/src/scenes/data-management/comments/commentsLogic.ts @@ -1,16 +1,18 @@ -import { LemonSelectOption, lemonToast } from '@posthog/lemon-ui' import { actions, connect, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' +import posthog from 'posthog-js' + +import { LemonSelectOption, lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' +import { capitalizeFirstLetter } from 'lib/utils' import { teamLogic } from 'scenes/teamLogic' +import { urls } from 'scenes/urls' import { userLogic } from 'scenes/userLogic' import { ActivityScope, CommentType, InsightShortId } from '~/types' import type { commentsLogicType } from './commentsLogicType' -import { capitalizeFirstLetter } from 'lib/utils' -import posthog from 'posthog-js' -import { urls } from 'scenes/urls' export const SCOPE_OPTIONS: LemonSelectOption[] = Object.values(ActivityScope).map((scope) => ({ value: scope, diff --git a/frontend/src/scenes/data-management/dataManagementDescribers.tsx b/frontend/src/scenes/data-management/dataManagementDescribers.tsx index b53f9911b6..47163e8a32 100644 --- a/frontend/src/scenes/data-management/dataManagementDescribers.tsx +++ b/frontend/src/scenes/data-management/dataManagementDescribers.tsx @@ -1,17 +1,17 @@ +import { SentenceList } from 'lib/components/ActivityLog/SentenceList' import { ActivityChange, ActivityLogItem, ChangeMapping, - defaultDescriber, Description, - detectBoolean, HumanizedChange, + defaultDescriber, + detectBoolean, userNameForLogItem, } from 'lib/components/ActivityLog/humanizeActivity' -import { SentenceList } from 'lib/components/ActivityLog/SentenceList' import { ObjectTags } from 'lib/components/ObjectTags/ObjectTags' -import { IconVerifiedEvent } from 'lib/lemon-ui/icons' import { Link } from 'lib/lemon-ui/Link' +import { IconVerifiedEvent } from 'lib/lemon-ui/icons' import { pluralize } from 'lib/utils' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/data-management/database/DatabaseTable.tsx b/frontend/src/scenes/data-management/database/DatabaseTable.tsx index 4d7fa0cd4e..8859079d70 100644 --- a/frontend/src/scenes/data-management/database/DatabaseTable.tsx +++ b/frontend/src/scenes/data-management/database/DatabaseTable.tsx @@ -1,11 +1,13 @@ -import { LemonButton, LemonSelect, lemonToast, Spinner } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' +import { useCallback } from 'react' + +import { LemonButton, LemonSelect, Spinner, lemonToast } from '@posthog/lemon-ui' + import { More } from 'lib/lemon-ui/LemonButton/More' import { LemonTable } from 'lib/lemon-ui/LemonTable' import { LemonTag, LemonTagType } from 'lib/lemon-ui/LemonTag/LemonTag' import { Link } from 'lib/lemon-ui/Link' import { deleteWithUndo } from 'lib/utils/deleteWithUndo' -import { useCallback } from 'react' import { dataWarehouseJoinsLogic } from 'scenes/data-warehouse/external/dataWarehouseJoinsLogic' import { dataWarehouseSceneLogic } from 'scenes/data-warehouse/settings/dataWarehouseSceneLogic' import { viewLinkLogic } from 'scenes/data-warehouse/viewLinkLogic' diff --git a/frontend/src/scenes/data-management/definition/DefinitionEdit.tsx b/frontend/src/scenes/data-management/definition/DefinitionEdit.tsx index a230aa95ef..cd5a0658fb 100644 --- a/frontend/src/scenes/data-management/definition/DefinitionEdit.tsx +++ b/frontend/src/scenes/data-management/definition/DefinitionEdit.tsx @@ -1,23 +1,25 @@ -import { LemonSkeleton, LemonTag } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' + +import { LemonSkeleton, LemonTag } from '@posthog/lemon-ui' + import { PropertyStatusControl } from 'lib/components/DefinitionPopover/DefinitionPopoverContents' import { NotFound } from 'lib/components/NotFound' import { ObjectTags } from 'lib/components/ObjectTags/ObjectTags' import { PageHeader } from 'lib/components/PageHeader' +import { PayGateMini } from 'lib/components/PayGateMini/PayGateMini' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonField } from 'lib/lemon-ui/LemonField' import { LemonSelect } from 'lib/lemon-ui/LemonSelect' import { LemonTextArea } from 'lib/lemon-ui/LemonTextArea/LemonTextArea' import { definitionEditLogic } from 'scenes/data-management/definition/definitionEditLogic' -import { definitionLogic, DefinitionLogicProps } from 'scenes/data-management/definition/definitionLogic' +import { DefinitionLogicProps, definitionLogic } from 'scenes/data-management/definition/definitionLogic' import { SceneExport } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' import { tagsModel } from '~/models/tagsModel' import { getFilterLabel, isCoreFilter } from '~/taxonomy/helpers' -import { PayGateMini } from 'lib/components/PayGateMini/PayGateMini' import { AvailableFeature } from '~/types' export const scene: SceneExport = { diff --git a/frontend/src/scenes/data-management/definition/DefinitionView.tsx b/frontend/src/scenes/data-management/definition/DefinitionView.tsx index fab8ab7bd0..d91ab74733 100644 --- a/frontend/src/scenes/data-management/definition/DefinitionView.tsx +++ b/frontend/src/scenes/data-management/definition/DefinitionView.tsx @@ -1,28 +1,30 @@ +import { useActions, useValues } from 'kea' +import { useMemo } from 'react' + import { IconBadge, IconEye, IconInfo } from '@posthog/icons' import { IconHide } from '@posthog/icons' import { LemonDivider, LemonTag, LemonTagType, Spinner, Tooltip } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { EditableField } from 'lib/components/EditableField/EditableField' import { NotFound } from 'lib/components/NotFound' import { ObjectTags } from 'lib/components/ObjectTags/ObjectTags' import { PageHeader } from 'lib/components/PageHeader' -import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { TZLabel } from 'lib/components/TZLabel' +import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { UserActivityIndicator } from 'lib/components/UserActivityIndicator/UserActivityIndicator' -import { IconPlayCircle } from 'lib/lemon-ui/icons' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonDialog } from 'lib/lemon-ui/LemonDialog' import { SpinnerOverlay } from 'lib/lemon-ui/Spinner/Spinner' -import { useMemo } from 'react' -import { definitionLogic, DefinitionLogicProps } from 'scenes/data-management/definition/definitionLogic' -import { EventDefinitionProperties } from 'scenes/data-management/events/EventDefinitionProperties' +import { IconPlayCircle } from 'lib/lemon-ui/icons' +import { DefinitionLogicProps, definitionLogic } from 'scenes/data-management/definition/definitionLogic' import { EventDefinitionInsights } from 'scenes/data-management/events/EventDefinitionInsights' +import { EventDefinitionProperties } from 'scenes/data-management/events/EventDefinitionProperties' import { LinkedHogFunctions } from 'scenes/hog-functions/list/LinkedHogFunctions' import { SceneExport } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' -import { defaultDataTableColumns } from '~/queries/nodes/DataTable/utils' import { Query } from '~/queries/Query/Query' +import { defaultDataTableColumns } from '~/queries/nodes/DataTable/utils' import { NodeKind } from '~/queries/schema/schema-general' import { getFilterLabel } from '~/taxonomy/helpers' import { FilterLogicalOperator, PropertyDefinition, PropertyDefinitionVerificationStatus, ReplayTabs } from '~/types' diff --git a/frontend/src/scenes/data-management/definition/definitionEditLogic.test.ts b/frontend/src/scenes/data-management/definition/definitionEditLogic.test.ts index c57332ef58..fa65deb5ea 100644 --- a/frontend/src/scenes/data-management/definition/definitionEditLogic.test.ts +++ b/frontend/src/scenes/data-management/definition/definitionEditLogic.test.ts @@ -1,5 +1,6 @@ import { router } from 'kea-router' import { expectLogic } from 'kea-test-utils' + import { definitionEditLogic } from 'scenes/data-management/definition/definitionEditLogic' import { definitionLogic } from 'scenes/data-management/definition/definitionLogic' import { eventDefinitionsTableLogic } from 'scenes/data-management/events/eventDefinitionsTableLogic' diff --git a/frontend/src/scenes/data-management/definition/definitionEditLogic.ts b/frontend/src/scenes/data-management/definition/definitionEditLogic.ts index 9998b270d2..e295feee3a 100644 --- a/frontend/src/scenes/data-management/definition/definitionEditLogic.ts +++ b/frontend/src/scenes/data-management/definition/definitionEditLogic.ts @@ -3,10 +3,11 @@ import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' import { beforeUnload, router } from 'kea-router' import { subscriptions } from 'kea-subscriptions' + import api from 'lib/api' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' import { capitalizeFirstLetter } from 'lib/utils' -import { definitionLogic, DefinitionLogicProps } from 'scenes/data-management/definition/definitionLogic' +import { DefinitionLogicProps, definitionLogic } from 'scenes/data-management/definition/definitionLogic' import { eventDefinitionsTableLogic } from 'scenes/data-management/events/eventDefinitionsTableLogic' import { propertyDefinitionsTableLogic } from 'scenes/data-management/properties/propertyDefinitionsTableLogic' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/data-management/definition/definitionLogic.test.ts b/frontend/src/scenes/data-management/definition/definitionLogic.test.ts index faea186096..495a483a97 100644 --- a/frontend/src/scenes/data-management/definition/definitionLogic.test.ts +++ b/frontend/src/scenes/data-management/definition/definitionLogic.test.ts @@ -1,5 +1,6 @@ import { router } from 'kea-router' import { expectLogic } from 'kea-test-utils' + import { createNewDefinition, definitionLogic } from 'scenes/data-management/definition/definitionLogic' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/data-management/definition/definitionLogic.ts b/frontend/src/scenes/data-management/definition/definitionLogic.ts index 634ef1dfd1..b62c1dbd58 100644 --- a/frontend/src/scenes/data-management/definition/definitionLogic.ts +++ b/frontend/src/scenes/data-management/definition/definitionLogic.ts @@ -1,6 +1,7 @@ import { actions, afterMount, connect, kea, key, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { router } from 'kea-router' + import api from 'lib/api' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { Scene } from 'scenes/sceneTypes' diff --git a/frontend/src/scenes/data-management/events/DefinitionHeader.tsx b/frontend/src/scenes/data-management/events/DefinitionHeader.tsx index c7c5e8bc25..f2f2fcdd54 100644 --- a/frontend/src/scenes/data-management/events/DefinitionHeader.tsx +++ b/frontend/src/scenes/data-management/events/DefinitionHeader.tsx @@ -1,11 +1,13 @@ +import React from 'react' + import { IconBadge, IconBolt, IconCursor, IconEye, IconLeave, IconList, IconLogomark } from '@posthog/icons' + import { PropertyKeyInfo } from 'lib/components/PropertyKeyInfo' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' -import { IconEyeHidden, IconSelectAll } from 'lib/lemon-ui/icons' import { LemonTableLink } from 'lib/lemon-ui/LemonTable/LemonTableLink' import { LinkProps } from 'lib/lemon-ui/Link' import { Tooltip } from 'lib/lemon-ui/Tooltip' -import React from 'react' +import { IconEyeHidden, IconSelectAll } from 'lib/lemon-ui/icons' import { getCoreFilterDefinition } from '~/taxonomy/helpers' import { CORE_FILTER_DEFINITIONS_BY_GROUP } from '~/taxonomy/taxonomy' diff --git a/frontend/src/scenes/data-management/events/EventDefinitionInsights.tsx b/frontend/src/scenes/data-management/events/EventDefinitionInsights.tsx index 75887fef9e..fe3bbc503a 100644 --- a/frontend/src/scenes/data-management/events/EventDefinitionInsights.tsx +++ b/frontend/src/scenes/data-management/events/EventDefinitionInsights.tsx @@ -1,17 +1,18 @@ -import { LemonInput } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonInput } from '@posthog/lemon-ui' + +import { TZLabel } from 'lib/components/TZLabel' import { LemonTable, LemonTableColumn, LemonTableColumns } from 'lib/lemon-ui/LemonTable' +import { LemonTableLink } from 'lib/lemon-ui/LemonTable/LemonTableLink' +import { createdAtColumn, createdByColumn } from 'lib/lemon-ui/LemonTable/columnUtils' +import { INSIGHTS_PER_PAGE, eventInsightsLogic } from 'scenes/data-management/events/eventInsightsLogic' +import { useSummarizeInsight } from 'scenes/insights/summarizeInsight' +import { InsightIcon } from 'scenes/saved-insights/SavedInsights' import { urls } from 'scenes/urls' import { EventDefinition, QueryBasedInsightModel } from '~/types' -import { eventInsightsLogic, INSIGHTS_PER_PAGE } from 'scenes/data-management/events/eventInsightsLogic' -import { InsightIcon } from 'scenes/saved-insights/SavedInsights' -import { createdAtColumn, createdByColumn } from 'lib/lemon-ui/LemonTable/columnUtils' -import { useSummarizeInsight } from 'scenes/insights/summarizeInsight' -import { LemonTableLink } from 'lib/lemon-ui/LemonTable/LemonTableLink' -import { TZLabel } from 'lib/components/TZLabel' - export function EventDefinitionInsights({ definition }: { definition: EventDefinition }): JSX.Element { const event = definition.name const { page, insights, filters, insightsLoading, sorting } = useValues(eventInsightsLogic({ event })) diff --git a/frontend/src/scenes/data-management/events/EventDefinitionProperties.tsx b/frontend/src/scenes/data-management/events/EventDefinitionProperties.tsx index 149b6f4323..7f40872494 100644 --- a/frontend/src/scenes/data-management/events/EventDefinitionProperties.tsx +++ b/frontend/src/scenes/data-management/events/EventDefinitionProperties.tsx @@ -1,8 +1,11 @@ -import { LemonTag } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonTag } from '@posthog/lemon-ui' + import { ObjectTags } from 'lib/components/ObjectTags/ObjectTags' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { PROPERTY_DEFINITIONS_PER_EVENT } from 'lib/constants' +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { LemonTable, LemonTableColumn, LemonTableColumns } from 'lib/lemon-ui/LemonTable' import { eventDefinitionsTableLogic } from 'scenes/data-management/events/eventDefinitionsTableLogic' import { organizationLogic } from 'scenes/organizationLogic' @@ -11,7 +14,6 @@ import { urls } from 'scenes/urls' import { EventDefinition, PropertyDefinition } from '~/types' import { DefinitionHeader } from './DefinitionHeader' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' export function EventDefinitionProperties({ definition }: { definition: EventDefinition }): JSX.Element { const { loadPropertiesForEvent } = useActions(eventDefinitionsTableLogic) diff --git a/frontend/src/scenes/data-management/events/EventDefinitionsTable.tsx b/frontend/src/scenes/data-management/events/EventDefinitionsTable.tsx index 0dab24b2e1..9d6ded4af3 100644 --- a/frontend/src/scenes/data-management/events/EventDefinitionsTable.tsx +++ b/frontend/src/scenes/data-management/events/EventDefinitionsTable.tsx @@ -1,13 +1,15 @@ -import { LemonButton, LemonInput, LemonSelect, LemonSelectOptions, Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonButton, LemonInput, LemonSelect, LemonSelectOptions, Link } from '@posthog/lemon-ui' + import { ObjectTags } from 'lib/components/ObjectTags/ObjectTags' -import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { TZLabel } from 'lib/components/TZLabel' +import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { EVENT_DEFINITIONS_PER_PAGE } from 'lib/constants' -import { IconPlayCircle } from 'lib/lemon-ui/icons' import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { More } from 'lib/lemon-ui/LemonButton/More' import { LemonTable, LemonTableColumn, LemonTableColumns } from 'lib/lemon-ui/LemonTable' +import { IconPlayCircle } from 'lib/lemon-ui/icons' import { DefinitionHeader, getEventDefinitionIcon } from 'scenes/data-management/events/DefinitionHeader' import { EventDefinitionProperties } from 'scenes/data-management/events/EventDefinitionProperties' import { eventDefinitionsTableLogic } from 'scenes/data-management/events/eventDefinitionsTableLogic' diff --git a/frontend/src/scenes/data-management/events/eventDefinitionsTableLogic.test.ts b/frontend/src/scenes/data-management/events/eventDefinitionsTableLogic.test.ts index b7da58a3e2..96b786e2db 100644 --- a/frontend/src/scenes/data-management/events/eventDefinitionsTableLogic.test.ts +++ b/frontend/src/scenes/data-management/events/eventDefinitionsTableLogic.test.ts @@ -1,6 +1,8 @@ +import { MOCK_TEAM_ID, api } from 'lib/api.mock' + import { combineUrl, router } from 'kea-router' import { expectLogic, partial } from 'kea-test-utils' -import { api, MOCK_TEAM_ID } from 'lib/api.mock' + import { EVENT_DEFINITIONS_PER_PAGE, PROPERTY_DEFINITIONS_PER_EVENT } from 'lib/constants' import { eventDefinitionsTableLogic } from 'scenes/data-management/events/eventDefinitionsTableLogic' import { organizationLogic } from 'scenes/organizationLogic' diff --git a/frontend/src/scenes/data-management/events/eventDefinitionsTableLogic.ts b/frontend/src/scenes/data-management/events/eventDefinitionsTableLogic.ts index 806de148dd..c766150c27 100644 --- a/frontend/src/scenes/data-management/events/eventDefinitionsTableLogic.ts +++ b/frontend/src/scenes/data-management/events/eventDefinitionsTableLogic.ts @@ -1,6 +1,7 @@ import { actions, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { actionToUrl, combineUrl, router, urlToAction } from 'kea-router' + import api, { PaginatedResponse } from 'lib/api' import { convertPropertyGroupToProperties } from 'lib/components/PropertyFilters/utils' import { EVENT_DEFINITIONS_PER_PAGE, PROPERTY_DEFINITIONS_PER_EVENT } from 'lib/constants' diff --git a/frontend/src/scenes/data-management/events/eventInsightsLogic.ts b/frontend/src/scenes/data-management/events/eventInsightsLogic.ts index f31331794e..589556e2c2 100644 --- a/frontend/src/scenes/data-management/events/eventInsightsLogic.ts +++ b/frontend/src/scenes/data-management/events/eventInsightsLogic.ts @@ -1,15 +1,15 @@ import { actions, connect, events, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { Sorting } from 'lib/lemon-ui/LemonTable' import { objectsEqual, toParams } from 'lib/utils' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' +import { InsightsResult, SavedInsightFilters, cleanFilters } from 'scenes/saved-insights/savedInsightsLogic' import { teamLogic } from 'scenes/teamLogic' import { getQueryBasedInsightModel } from '~/queries/nodes/InsightViz/utils' -import { cleanFilters, InsightsResult, SavedInsightFilters } from 'scenes/saved-insights/savedInsightsLogic' - import type { eventInsightsLogicType } from './eventInsightsLogicType' export interface EventInsightsLogicProps { diff --git a/frontend/src/scenes/data-management/ingestion-warnings/IngestionWarningsView.stories.tsx b/frontend/src/scenes/data-management/ingestion-warnings/IngestionWarningsView.stories.tsx index 4e23905f54..193f900bc9 100644 --- a/frontend/src/scenes/data-management/ingestion-warnings/IngestionWarningsView.stories.tsx +++ b/frontend/src/scenes/data-management/ingestion-warnings/IngestionWarningsView.stories.tsx @@ -1,4 +1,5 @@ import { Meta, StoryObj } from '@storybook/react' + import { FEATURE_FLAGS } from 'lib/constants' import { dayjs } from 'lib/dayjs' import { App } from 'scenes/App' diff --git a/frontend/src/scenes/data-management/ingestion-warnings/IngestionWarningsView.tsx b/frontend/src/scenes/data-management/ingestion-warnings/IngestionWarningsView.tsx index eee55092ab..d0f0e5250d 100644 --- a/frontend/src/scenes/data-management/ingestion-warnings/IngestionWarningsView.tsx +++ b/frontend/src/scenes/data-management/ingestion-warnings/IngestionWarningsView.tsx @@ -1,17 +1,19 @@ -import { LemonInput } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' -import { ReadingHog } from 'lib/components/hedgehogs' + +import { LemonInput } from '@posthog/lemon-ui' + import { ProductIntroduction } from 'lib/components/ProductIntroduction/ProductIntroduction' import { Sparkline } from 'lib/components/Sparkline' import { TZLabel } from 'lib/components/TZLabel' import ViewRecordingButton from 'lib/components/ViewRecordingButton/ViewRecordingButton' +import { ReadingHog } from 'lib/components/hedgehogs' import { LemonTable } from 'lib/lemon-ui/LemonTable' import { Link } from 'lib/lemon-ui/Link' import { urls } from 'scenes/urls' import { ProductKey } from '~/types' -import { IngestionWarning, ingestionWarningsLogic, IngestionWarningSummary } from './ingestionWarningsLogic' +import { IngestionWarning, IngestionWarningSummary, ingestionWarningsLogic } from './ingestionWarningsLogic' const WARNING_TYPE_TO_DESCRIPTION = { cannot_merge_already_identified: 'Refused to merge an already identified user', diff --git a/frontend/src/scenes/data-management/ingestion-warnings/ingestionWarningsLogic.ts b/frontend/src/scenes/data-management/ingestion-warnings/ingestionWarningsLogic.ts index 5257d4401d..4e493a2448 100644 --- a/frontend/src/scenes/data-management/ingestion-warnings/ingestionWarningsLogic.ts +++ b/frontend/src/scenes/data-management/ingestion-warnings/ingestionWarningsLogic.ts @@ -1,5 +1,6 @@ import { actions, afterMount, connect, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { dayjs, dayjsUtcToTimezone } from 'lib/dayjs' import { range } from 'lib/utils' diff --git a/frontend/src/scenes/data-management/properties/PropertyDefinitionsTable.tsx b/frontend/src/scenes/data-management/properties/PropertyDefinitionsTable.tsx index 078405a114..bc68e3c20d 100644 --- a/frontend/src/scenes/data-management/properties/PropertyDefinitionsTable.tsx +++ b/frontend/src/scenes/data-management/properties/PropertyDefinitionsTable.tsx @@ -1,7 +1,9 @@ import './PropertyDefinitionsTable.scss' -import { LemonInput, LemonSelect, LemonTag, Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonInput, LemonSelect, LemonTag, Link } from '@posthog/lemon-ui' + import { ObjectTags } from 'lib/components/ObjectTags/ObjectTags' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { EVENT_PROPERTY_DEFINITIONS_PER_PAGE } from 'lib/constants' diff --git a/frontend/src/scenes/data-management/properties/propertyDefinitionsTableLogic.test.ts b/frontend/src/scenes/data-management/properties/propertyDefinitionsTableLogic.test.ts index 7006a15342..017db2fe03 100644 --- a/frontend/src/scenes/data-management/properties/propertyDefinitionsTableLogic.test.ts +++ b/frontend/src/scenes/data-management/properties/propertyDefinitionsTableLogic.test.ts @@ -1,6 +1,8 @@ +import { MOCK_GROUP_TYPES, MOCK_TEAM_ID, api } from 'lib/api.mock' + import { combineUrl, router } from 'kea-router' import { expectLogic, partial } from 'kea-test-utils' -import { api, MOCK_GROUP_TYPES, MOCK_TEAM_ID } from 'lib/api.mock' + import { EVENT_PROPERTY_DEFINITIONS_PER_PAGE } from 'lib/constants' import { propertyDefinitionsTableLogic } from 'scenes/data-management/properties/propertyDefinitionsTableLogic' import { organizationLogic } from 'scenes/organizationLogic' diff --git a/frontend/src/scenes/data-management/properties/propertyDefinitionsTableLogic.ts b/frontend/src/scenes/data-management/properties/propertyDefinitionsTableLogic.ts index 2d8b640507..3e9ed5f55c 100644 --- a/frontend/src/scenes/data-management/properties/propertyDefinitionsTableLogic.ts +++ b/frontend/src/scenes/data-management/properties/propertyDefinitionsTableLogic.ts @@ -1,14 +1,15 @@ import { actions, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { actionToUrl, combineUrl, router, urlToAction } from 'kea-router' + import api from 'lib/api' import { EVENT_PROPERTY_DEFINITIONS_PER_PAGE } from 'lib/constants' import { LemonSelectOption } from 'lib/lemon-ui/LemonSelect' import { capitalizeFirstLetter, objectsEqual } from 'lib/utils' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' import { - normalizePropertyDefinitionEndpointUrl, PropertyDefinitionsPaginatedResponse, + normalizePropertyDefinitionEndpointUrl, } from 'scenes/data-management/events/eventDefinitionsTableLogic' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/data-model/TableFields.tsx b/frontend/src/scenes/data-model/TableFields.tsx index 9005391eda..d00d1c02be 100644 --- a/frontend/src/scenes/data-model/TableFields.tsx +++ b/frontend/src/scenes/data-model/TableFields.tsx @@ -1,7 +1,10 @@ +import { useActions } from 'kea' + import { IconPlus } from '@posthog/icons' import { LemonButton, LemonTable } from '@posthog/lemon-ui' -import { useActions } from 'kea' + import { viewLinkLogic } from 'scenes/data-warehouse/viewLinkLogic' + export interface FixedField { column: string type: string diff --git a/frontend/src/scenes/data-model/dataModelSceneLogic.tsx b/frontend/src/scenes/data-model/dataModelSceneLogic.tsx index 8ff631c00d..4db2dd5eb0 100644 --- a/frontend/src/scenes/data-model/dataModelSceneLogic.tsx +++ b/frontend/src/scenes/data-model/dataModelSceneLogic.tsx @@ -1,5 +1,6 @@ import { actions, connect, kea, listeners, path, reducers, selectors } from 'kea' import { subscriptions } from 'kea-subscriptions' + import api from 'lib/api' import { databaseTableListLogic } from 'scenes/data-management/database/databaseTableListLogic' diff --git a/frontend/src/scenes/data-pipelines/DataPipelinesHogFunctions.tsx b/frontend/src/scenes/data-pipelines/DataPipelinesHogFunctions.tsx index 787ae59b7b..9b66d588c0 100644 --- a/frontend/src/scenes/data-pipelines/DataPipelinesHogFunctions.tsx +++ b/frontend/src/scenes/data-pipelines/DataPipelinesHogFunctions.tsx @@ -1,13 +1,15 @@ +import { useActions, useValues } from 'kea' +import { useEffect } from 'react' + import { IconPlusSmall } from '@posthog/icons' import { LemonButton } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { PageHeader } from 'lib/components/PageHeader' import { ProductIntroduction } from 'lib/components/ProductIntroduction/ProductIntroduction' -import { useEffect } from 'react' import { humanizeHogFunctionType } from 'scenes/hog-functions/hog-function-utils' +import { HogFunctionTemplateList } from 'scenes/hog-functions/list/HogFunctionTemplateList' import { HogFunctionList } from 'scenes/hog-functions/list/HogFunctionsList' import { hogFunctionsListLogic } from 'scenes/hog-functions/list/hogFunctionsListLogic' -import { HogFunctionTemplateList } from 'scenes/hog-functions/list/HogFunctionTemplateList' import { urls } from 'scenes/urls' import { HogFunctionTypeType, ProductKey } from '~/types' diff --git a/frontend/src/scenes/data-pipelines/DataPipelinesNewScene.tsx b/frontend/src/scenes/data-pipelines/DataPipelinesNewScene.tsx index 393389f4ad..fa0e8f7a20 100644 --- a/frontend/src/scenes/data-pipelines/DataPipelinesNewScene.tsx +++ b/frontend/src/scenes/data-pipelines/DataPipelinesNewScene.tsx @@ -1,6 +1,8 @@ import { kea, path, props, selectors, useValues } from 'kea' + import { NotFound } from 'lib/components/NotFound' import { capitalizeFirstLetter } from 'lib/utils' +import { availableSourcesDataLogic } from 'scenes/data-warehouse/new/availableSourcesDataLogic' import { HogFunctionTemplateList } from 'scenes/hog-functions/list/HogFunctionTemplateList' import { Scene, SceneExport } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' @@ -9,7 +11,6 @@ import { Breadcrumb } from '~/types' import type { dataPipelinesNewSceneLogicType } from './DataPipelinesNewSceneType' import { nonHogFunctionTemplatesLogic } from './utils/nonHogFunctionTemplatesLogic' -import { availableSourcesDataLogic } from 'scenes/data-warehouse/new/availableSourcesDataLogic' export type DataPipelinesNewSceneProps = { kind: 'transformation' | 'destination' | 'source' | 'site_app' diff --git a/frontend/src/scenes/data-pipelines/DataPipelinesOverview.tsx b/frontend/src/scenes/data-pipelines/DataPipelinesOverview.tsx index 36708b7d22..82f543704b 100644 --- a/frontend/src/scenes/data-pipelines/DataPipelinesOverview.tsx +++ b/frontend/src/scenes/data-pipelines/DataPipelinesOverview.tsx @@ -1,8 +1,11 @@ +import { useActions, useValues } from 'kea' + import { IconPlusSmall } from '@posthog/icons' import { Link } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { FlaggedFeature } from 'lib/components/FlaggedFeature' import { PageHeader } from 'lib/components/PageHeader' +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonMenu, LemonMenuItems } from 'lib/lemon-ui/LemonMenu' import { DataWarehouseManagedSourcesTable } from 'scenes/data-warehouse/settings/DataWarehouseManagedSourcesTable' @@ -13,7 +16,6 @@ import { urls } from 'scenes/urls' import { PipelineTab } from '~/types' import { nonHogFunctionsLogic } from './utils/nonHogFunctionsLogic' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' function Section({ title, diff --git a/frontend/src/scenes/data-pipelines/DataPipelinesScene.tsx b/frontend/src/scenes/data-pipelines/DataPipelinesScene.tsx index a6eb0d6aa5..7e7042d4a0 100644 --- a/frontend/src/scenes/data-pipelines/DataPipelinesScene.tsx +++ b/frontend/src/scenes/data-pipelines/DataPipelinesScene.tsx @@ -1,5 +1,6 @@ import { actions, kea, listeners, path, props, reducers, selectors, useActions, useValues } from 'kea' import { router, urlToAction } from 'kea-router' + import { ActivityLog } from 'lib/components/ActivityLog/ActivityLog' import { LemonTab, LemonTabs } from 'lib/lemon-ui/LemonTabs' import { capitalizeFirstLetter } from 'lib/utils' diff --git a/frontend/src/scenes/data-pipelines/DataPipelinesSelfManagedSource.tsx b/frontend/src/scenes/data-pipelines/DataPipelinesSelfManagedSource.tsx index 26bd7a0d0e..e46dbf169a 100644 --- a/frontend/src/scenes/data-pipelines/DataPipelinesSelfManagedSource.tsx +++ b/frontend/src/scenes/data-pipelines/DataPipelinesSelfManagedSource.tsx @@ -1,6 +1,8 @@ -import { LemonButton } from '@posthog/lemon-ui' import { BindLogic, useActions, useValues } from 'kea' import { router } from 'kea-router' + +import { LemonButton } from '@posthog/lemon-ui' + import { PageHeader } from 'lib/components/PageHeader' import { DatawarehouseTableForm } from 'scenes/data-warehouse/new/DataWarehouseTableForm' import { dataWarehouseTableLogic } from 'scenes/data-warehouse/new/dataWarehouseTableLogic' diff --git a/frontend/src/scenes/data-pipelines/DataPipelinesSources.tsx b/frontend/src/scenes/data-pipelines/DataPipelinesSources.tsx index 12d09067d0..10f8255714 100644 --- a/frontend/src/scenes/data-pipelines/DataPipelinesSources.tsx +++ b/frontend/src/scenes/data-pipelines/DataPipelinesSources.tsx @@ -1,6 +1,8 @@ +import { useValues } from 'kea' + import { IconPlusSmall } from '@posthog/icons' import { LemonButton } from '@posthog/lemon-ui' -import { useValues } from 'kea' + import { FlaggedFeature } from 'lib/components/FlaggedFeature' import { PageHeader } from 'lib/components/PageHeader' import { ProductIntroduction } from 'lib/components/ProductIntroduction/ProductIntroduction' diff --git a/frontend/src/scenes/data-pipelines/batch-exports/BatchExportBackfillModal.tsx b/frontend/src/scenes/data-pipelines/batch-exports/BatchExportBackfillModal.tsx index b26f1196af..7eb9e2cb18 100644 --- a/frontend/src/scenes/data-pipelines/batch-exports/BatchExportBackfillModal.tsx +++ b/frontend/src/scenes/data-pipelines/batch-exports/BatchExportBackfillModal.tsx @@ -1,7 +1,9 @@ -import { IconInfo } from '@posthog/icons' -import { Tooltip } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' + +import { IconInfo } from '@posthog/icons' +import { Tooltip } from '@posthog/lemon-ui' + import { NotFound } from 'lib/components/NotFound' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonCalendarSelectInput } from 'lib/lemon-ui/LemonCalendar/LemonCalendarSelect' @@ -11,7 +13,7 @@ import { LemonInput } from 'lib/lemon-ui/LemonInput' import { LemonModal } from 'lib/lemon-ui/LemonModal' import { teamLogic } from 'scenes/teamLogic' -import { batchExportBackfillModalLogic, BatchExportBackfillModalLogicProps } from './batchExportBackfillModalLogic' +import { BatchExportBackfillModalLogicProps, batchExportBackfillModalLogic } from './batchExportBackfillModalLogic' export function BatchExportBackfillModal({ id }: BatchExportBackfillModalLogicProps): JSX.Element { const { timezone } = useValues(teamLogic) diff --git a/frontend/src/scenes/data-pipelines/batch-exports/BatchExportBackfills.tsx b/frontend/src/scenes/data-pipelines/batch-exports/BatchExportBackfills.tsx index 5c7753812d..3c3010c34b 100644 --- a/frontend/src/scenes/data-pipelines/batch-exports/BatchExportBackfills.tsx +++ b/frontend/src/scenes/data-pipelines/batch-exports/BatchExportBackfills.tsx @@ -1,17 +1,19 @@ -import { LemonButton, LemonDialog, LemonTable } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' + +import { LemonButton, LemonDialog, LemonTable } from '@posthog/lemon-ui' + import { NotFound } from 'lib/components/NotFound' import { PageHeader } from 'lib/components/PageHeader' import { TZLabel } from 'lib/components/TZLabel' -import { IconCancel, IconRefresh } from 'lib/lemon-ui/icons' import { LemonProgress } from 'lib/lemon-ui/LemonProgress' +import { IconCancel, IconRefresh } from 'lib/lemon-ui/icons' import { BatchExportBackfill } from '~/types' import { pipelineAccessLogic } from '../../pipeline/pipelineAccessLogic' import { BatchExportBackfillModal } from './BatchExportBackfillModal' -import { batchExportBackfillsLogic, BatchExportBackfillsLogicProps } from './batchExportBackfillsLogic' +import { BatchExportBackfillsLogicProps, batchExportBackfillsLogic } from './batchExportBackfillsLogic' export function BatchExportBackfills({ id }: BatchExportBackfillsLogicProps): JSX.Element { const logic = batchExportBackfillsLogic({ id }) diff --git a/frontend/src/scenes/data-pipelines/batch-exports/BatchExportConfiguration.tsx b/frontend/src/scenes/data-pipelines/batch-exports/BatchExportConfiguration.tsx index 8b38864d8f..57806a3a51 100644 --- a/frontend/src/scenes/data-pipelines/batch-exports/BatchExportConfiguration.tsx +++ b/frontend/src/scenes/data-pipelines/batch-exports/BatchExportConfiguration.tsx @@ -1,7 +1,9 @@ -import { IconCheckCircle, IconPlus, IconX } from '@posthog/icons' -import { LemonSelect, LemonSwitch } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' + +import { IconCheckCircle, IconPlus, IconX } from '@posthog/icons' +import { LemonSelect, LemonSwitch } from '@posthog/lemon-ui' + import { EventSelect } from 'lib/components/EventSelect/EventSelect' import { NotFound } from 'lib/components/NotFound' import { PageHeader } from 'lib/components/PageHeader' @@ -27,9 +29,9 @@ import { BatchExportService, } from '~/types' -import { batchExportConfigurationLogic, getDefaultConfiguration } from './batchExportConfigurationLogic' import { BatchExportGeneralEditFields, BatchExportsEditFields } from './BatchExportEditForm' import { RenderBatchExportIcon } from './BatchExportIcon' +import { batchExportConfigurationLogic, getDefaultConfiguration } from './batchExportConfigurationLogic' import { BatchExportConfigurationForm } from './types' import { humanizeBatchExportName, normalizeBatchExportService } from './utils' diff --git a/frontend/src/scenes/data-pipelines/batch-exports/BatchExportEditForm.tsx b/frontend/src/scenes/data-pipelines/batch-exports/BatchExportEditForm.tsx index af1f84f5fb..3dff0aed0f 100644 --- a/frontend/src/scenes/data-pipelines/batch-exports/BatchExportEditForm.tsx +++ b/frontend/src/scenes/data-pipelines/batch-exports/BatchExportEditForm.tsx @@ -1,3 +1,5 @@ +import React from 'react' + import { IconInfo } from '@posthog/icons' import { LemonCalendarSelectInput, @@ -9,8 +11,8 @@ import { Link, Tooltip, } from '@posthog/lemon-ui' + import { LemonField } from 'lib/lemon-ui/LemonField' -import React from 'react' import { BatchExportConfigurationForm } from './types' diff --git a/frontend/src/scenes/data-pipelines/batch-exports/BatchExportIcon.tsx b/frontend/src/scenes/data-pipelines/batch-exports/BatchExportIcon.tsx index 4dc2e8ffae..5cfdf29262 100644 --- a/frontend/src/scenes/data-pipelines/batch-exports/BatchExportIcon.tsx +++ b/frontend/src/scenes/data-pipelines/batch-exports/BatchExportIcon.tsx @@ -1,4 +1,7 @@ import { Link, Tooltip } from '@posthog/lemon-ui' + +import { BatchExportService } from '~/types' + import IconHTTP from 'public/hedgehog/running-hog.png' import IconS3 from 'public/services/aws-s3.png' import IconBigQuery from 'public/services/bigquery.png' @@ -6,8 +9,6 @@ import IconPostgres from 'public/services/postgres.png' import IconRedshift from 'public/services/redshift.png' import IconSnowflake from 'public/services/snowflake.png' -import { BatchExportService } from '~/types' - export function getBatchExportUrl(service: BatchExportService['type']): string { return `https://posthog.com/docs/cdp/batch-exports/${service.toLowerCase()}` } diff --git a/frontend/src/scenes/data-pipelines/batch-exports/BatchExportRuns.tsx b/frontend/src/scenes/data-pipelines/batch-exports/BatchExportRuns.tsx index 93cb9918df..131e03a0e7 100644 --- a/frontend/src/scenes/data-pipelines/batch-exports/BatchExportRuns.tsx +++ b/frontend/src/scenes/data-pipelines/batch-exports/BatchExportRuns.tsx @@ -1,7 +1,9 @@ -import { IconCalendar } from '@posthog/icons' -import { LemonButton, LemonDialog, LemonSwitch, LemonTable, Tooltip } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' + +import { IconCalendar } from '@posthog/icons' +import { LemonButton, LemonDialog, LemonSwitch, LemonTable, Tooltip } from '@posthog/lemon-ui' + import { DateFilter } from 'lib/components/DateFilter/DateFilter' import { NotFound } from 'lib/components/NotFound' import { TZLabel } from 'lib/components/TZLabel' @@ -11,7 +13,7 @@ import { BatchExportConfiguration, BatchExportRun, GroupedBatchExportRuns } from import { pipelineAccessLogic } from '../../pipeline/pipelineAccessLogic' import { BatchExportBackfillModal } from './BatchExportBackfillModal' -import { batchExportRunsLogic, BatchExportRunsLogicProps } from './batchExportRunsLogic' +import { BatchExportRunsLogicProps, batchExportRunsLogic } from './batchExportRunsLogic' function isRunInProgress(run: BatchExportRun): boolean { return ['Running', 'Starting'].includes(run.status) diff --git a/frontend/src/scenes/data-pipelines/batch-exports/BatchExportScene.tsx b/frontend/src/scenes/data-pipelines/batch-exports/BatchExportScene.tsx index fbf85f65a6..ae8c87eba0 100644 --- a/frontend/src/scenes/data-pipelines/batch-exports/BatchExportScene.tsx +++ b/frontend/src/scenes/data-pipelines/batch-exports/BatchExportScene.tsx @@ -1,5 +1,6 @@ import { actions, kea, key, path, props, reducers, selectors, useActions, useValues } from 'kea' import { actionToUrl, router, urlToAction } from 'kea-router' + import { LemonTab, LemonTabs } from 'lib/lemon-ui/LemonTabs' import { BatchExportBackfills } from 'scenes/data-pipelines/batch-exports/BatchExportBackfills' import { BatchExportRuns } from 'scenes/data-pipelines/batch-exports/BatchExportRuns' @@ -11,8 +12,8 @@ import { urls } from 'scenes/urls' import { BatchExportService, Breadcrumb, PipelineStage } from '~/types' import { BatchExportConfiguration } from './BatchExportConfiguration' -import { BatchExportConfigurationLogicProps } from './batchExportConfigurationLogic' import type { batchExportSceneLogicType } from './BatchExportSceneType' +import { BatchExportConfigurationLogicProps } from './batchExportConfigurationLogic' const BATCH_EXPORT_SCENE_TABS = ['configuration', 'metrics', 'logs', 'runs', 'backfills'] as const export type BatchExportSceneTab = (typeof BATCH_EXPORT_SCENE_TABS)[number] diff --git a/frontend/src/scenes/data-pipelines/batch-exports/batchExportBackfillModalLogic.tsx b/frontend/src/scenes/data-pipelines/batch-exports/batchExportBackfillModalLogic.tsx index d3e26d6aa3..22a2026376 100644 --- a/frontend/src/scenes/data-pipelines/batch-exports/batchExportBackfillModalLogic.tsx +++ b/frontend/src/scenes/data-pipelines/batch-exports/batchExportBackfillModalLogic.tsx @@ -1,6 +1,8 @@ -import { lemonToast } from '@posthog/lemon-ui' import { actions, connect, kea, key, path, props, reducers } from 'kea' import { forms } from 'kea-forms' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { Dayjs, dayjs } from 'lib/dayjs' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/data-pipelines/batch-exports/batchExportBackfillsLogic.tsx b/frontend/src/scenes/data-pipelines/batch-exports/batchExportBackfillsLogic.tsx index fdfba3ee96..ed144f9815 100644 --- a/frontend/src/scenes/data-pipelines/batch-exports/batchExportBackfillsLogic.tsx +++ b/frontend/src/scenes/data-pipelines/batch-exports/batchExportBackfillsLogic.tsx @@ -1,5 +1,6 @@ import { actions, afterMount, connect, kea, key, listeners, path, props, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api, { PaginatedResponse } from 'lib/api' import { dayjs } from 'lib/dayjs' import { lemonToast } from 'lib/lemon-ui/LemonToast' diff --git a/frontend/src/scenes/data-pipelines/batch-exports/batchExportConfigurationLogic.tsx b/frontend/src/scenes/data-pipelines/batch-exports/batchExportConfigurationLogic.tsx index 4e82defa42..642c7e323c 100644 --- a/frontend/src/scenes/data-pipelines/batch-exports/batchExportConfigurationLogic.tsx +++ b/frontend/src/scenes/data-pipelines/batch-exports/batchExportConfigurationLogic.tsx @@ -1,8 +1,10 @@ -import { lemonToast } from '@posthog/lemon-ui' import { actions, afterMount, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' import { beforeUnload, router } from 'kea-router' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/data-pipelines/batch-exports/batchExportRunsLogic.tsx b/frontend/src/scenes/data-pipelines/batch-exports/batchExportRunsLogic.tsx index 5d8318ffb9..c2247d6a9d 100644 --- a/frontend/src/scenes/data-pipelines/batch-exports/batchExportRunsLogic.tsx +++ b/frontend/src/scenes/data-pipelines/batch-exports/batchExportRunsLogic.tsx @@ -1,6 +1,8 @@ -import { lemonToast } from '@posthog/lemon-ui' import { actions, afterMount, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' + +import { lemonToast } from '@posthog/lemon-ui' + import api, { PaginatedResponse } from 'lib/api' import { dayjs } from 'lib/dayjs' diff --git a/frontend/src/scenes/data-pipelines/legacy-plugins/LegacyPluginScene.tsx b/frontend/src/scenes/data-pipelines/legacy-plugins/LegacyPluginScene.tsx index 3bdcf641f2..542077e4ec 100644 --- a/frontend/src/scenes/data-pipelines/legacy-plugins/LegacyPluginScene.tsx +++ b/frontend/src/scenes/data-pipelines/legacy-plugins/LegacyPluginScene.tsx @@ -1,5 +1,6 @@ import { actions, kea, key, path, props, reducers, selectors, useActions, useValues } from 'kea' import { actionToUrl, router, urlToAction } from 'kea-router' + import { ActivityLog } from 'lib/components/ActivityLog/ActivityLog' import { LemonTab, LemonTabs } from 'lib/lemon-ui/LemonTabs' import { PipelineNodeLogs } from 'scenes/pipeline/PipelineNodeLogs' diff --git a/frontend/src/scenes/data-pipelines/utils/nonHogFunctionTemplatesLogic.tsx b/frontend/src/scenes/data-pipelines/utils/nonHogFunctionTemplatesLogic.tsx index 27db5a7916..badac0a832 100644 --- a/frontend/src/scenes/data-pipelines/utils/nonHogFunctionTemplatesLogic.tsx +++ b/frontend/src/scenes/data-pipelines/utils/nonHogFunctionTemplatesLogic.tsx @@ -1,5 +1,7 @@ -import { Link } from '@posthog/lemon-ui' import { connect, kea, path, props, selectors } from 'kea' + +import { Link } from '@posthog/lemon-ui' + import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { humanizeBatchExportName } from 'scenes/data-pipelines/batch-exports/utils' @@ -7,11 +9,11 @@ import { sourceWizardLogic } from 'scenes/data-warehouse/new/sourceWizardLogic' import { DATA_WAREHOUSE_SOURCE_ICON_MAP } from 'scenes/data-warehouse/settings/DataWarehouseSourceIcon' import { userLogic } from 'scenes/userLogic' +import { SourceConfig } from '~/queries/schema/schema-general' import { BATCH_EXPORT_SERVICE_NAMES, HogFunctionTemplateType } from '~/types' import { BATCH_EXPORT_ICON_MAP } from '../batch-exports/BatchExportIcon' import type { nonHogFunctionTemplatesLogicType } from './nonHogFunctionTemplatesLogicType' -import { SourceConfig } from '~/queries/schema/schema-general' export interface NonHogFunctionTemplatesLogicProps { availableSources: Record diff --git a/frontend/src/scenes/data-pipelines/utils/nonHogFunctionsLogic.tsx b/frontend/src/scenes/data-pipelines/utils/nonHogFunctionsLogic.tsx index 0d5004c003..94f24fbc79 100644 --- a/frontend/src/scenes/data-pipelines/utils/nonHogFunctionsLogic.tsx +++ b/frontend/src/scenes/data-pipelines/utils/nonHogFunctionsLogic.tsx @@ -1,5 +1,6 @@ import { connect, kea, path } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { parseGithubRepoURL } from 'lib/utils' diff --git a/frontend/src/scenes/data-warehouse/DataWarehouseInitialBillingLimitNotice.tsx b/frontend/src/scenes/data-warehouse/DataWarehouseInitialBillingLimitNotice.tsx index 707b6c28d6..974c7d515e 100644 --- a/frontend/src/scenes/data-warehouse/DataWarehouseInitialBillingLimitNotice.tsx +++ b/frontend/src/scenes/data-warehouse/DataWarehouseInitialBillingLimitNotice.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { InitialBillingLimitNotice } from 'scenes/billing/InitialBillingLimitNotice' import { ProductKey } from '~/types' diff --git a/frontend/src/scenes/data-warehouse/DataWarehouseScene.tsx b/frontend/src/scenes/data-warehouse/DataWarehouseScene.tsx index 6ce41380ef..0f6744eb9a 100644 --- a/frontend/src/scenes/data-warehouse/DataWarehouseScene.tsx +++ b/frontend/src/scenes/data-warehouse/DataWarehouseScene.tsx @@ -1,8 +1,9 @@ -import { SceneExport } from 'scenes/sceneTypes' +import { useValues } from 'kea' + +import { NotFound } from 'lib/components/NotFound' import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { useValues } from 'kea' -import { NotFound } from 'lib/components/NotFound' +import { SceneExport } from 'scenes/sceneTypes' export const scene: SceneExport = { component: DataWarehouseScene, diff --git a/frontend/src/scenes/data-warehouse/ViewLinkModal.tsx b/frontend/src/scenes/data-warehouse/ViewLinkModal.tsx index 609e2155a8..5b4c3a19f7 100644 --- a/frontend/src/scenes/data-warehouse/ViewLinkModal.tsx +++ b/frontend/src/scenes/data-warehouse/ViewLinkModal.tsx @@ -1,5 +1,9 @@ import './ViewLinkModal.scss' +import { useActions, useValues } from 'kea' +import { Field, Form } from 'kea-forms' +import { useState } from 'react' + import { IconCollapse, IconExpand } from '@posthog/icons' import { LemonButton, @@ -10,12 +14,10 @@ import { LemonSelect, LemonTag, } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' -import { Field, Form } from 'kea-forms' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { HogQLDropdown } from 'lib/components/HogQLDropdown/HogQLDropdown' import { IconSwapHoriz } from 'lib/lemon-ui/icons' -import { useState } from 'react' import { viewLinkLogic } from 'scenes/data-warehouse/viewLinkLogic' import { DatabaseSchemaField } from '~/queries/schema/schema-general' diff --git a/frontend/src/scenes/data-warehouse/editor/EditorScene.tsx b/frontend/src/scenes/data-warehouse/editor/EditorScene.tsx index 7a77a0fe9a..1fff168125 100644 --- a/frontend/src/scenes/data-warehouse/editor/EditorScene.tsx +++ b/frontend/src/scenes/data-warehouse/editor/EditorScene.tsx @@ -10,8 +10,8 @@ import { DataNodeLogicProps } from '~/queries/nodes/DataNode/dataNodeLogic' import { dataNodeLogic } from '~/queries/nodes/DataNode/dataNodeLogic' import { variableModalLogic } from '~/queries/nodes/DataVisualization/Components/Variables/variableModalLogic' import { - variablesLogic, VariablesLogicProps, + variablesLogic, } from '~/queries/nodes/DataVisualization/Components/Variables/variablesLogic' import { DataVisualizationLogicProps } from '~/queries/nodes/DataVisualization/dataVisualizationLogic' import { dataVisualizationLogic } from '~/queries/nodes/DataVisualization/dataVisualizationLogic' @@ -19,10 +19,10 @@ import { displayLogic } from '~/queries/nodes/DataVisualization/displayLogic' import { ItemMode } from '~/types' import { ViewLinkModal } from '../ViewLinkModal' +import { QueryWindow } from './QueryWindow' import { editorSizingLogic } from './editorSizingLogic' import { multitabEditorLogic } from './multitabEditorLogic' import { outputPaneLogic } from './outputPaneLogic' -import { QueryWindow } from './QueryWindow' export function EditorScene(): JSX.Element { const ref = useRef(null) diff --git a/frontend/src/scenes/data-warehouse/editor/OutputPane.tsx b/frontend/src/scenes/data-warehouse/editor/OutputPane.tsx index 90354d2212..3cf6e365eb 100644 --- a/frontend/src/scenes/data-warehouse/editor/OutputPane.tsx +++ b/frontend/src/scenes/data-warehouse/editor/OutputPane.tsx @@ -1,5 +1,11 @@ -import 'react-data-grid/lib/styles.css' import './DataGrid.scss' +import 'react-data-grid/lib/styles.css' + +import clsx from 'clsx' +import { useActions, useValues } from 'kea' +import { useCallback, useMemo, useState } from 'react' +import DataGrid, { RenderHeaderCellProps, SortColumn } from 'react-data-grid' +import { DataGridProps } from 'react-data-grid' import { IconBolt, @@ -15,43 +21,38 @@ import { IconShare, } from '@posthog/icons' import { LemonButton, LemonModal, LemonTable, Tooltip } from '@posthog/lemon-ui' -import clsx from 'clsx' -import { useActions, useValues } from 'kea' + import { ExportButton } from 'lib/components/ExportButton/ExportButton' import { JSONViewer } from 'lib/components/JSONViewer' - -import { IconTableChart } from 'lib/lemon-ui/icons' import { LemonMenuOverlay } from 'lib/lemon-ui/LemonMenu/LemonMenu' import { LoadingBar } from 'lib/lemon-ui/LoadingBar' +import { IconTableChart } from 'lib/lemon-ui/icons' import { copyToClipboard } from 'lib/utils/copyToClipboard' -import { useCallback, useMemo, useState } from 'react' -import DataGrid, { SortColumn, RenderHeaderCellProps } from 'react-data-grid' -import { DataGridProps } from 'react-data-grid' import { InsightErrorState, StatelessInsightLoadingState } from 'scenes/insights/EmptyStates' import { HogQLBoldNumber } from 'scenes/insights/views/BoldNumber/BoldNumber' import { KeyboardShortcut } from '~/layout/navigation-3000/components/KeyboardShortcut' import { themeLogic } from '~/layout/navigation-3000/themeLogic' -import { dataNodeLogic } from '~/queries/nodes/DataNode/dataNodeLogic' import { DateRange } from '~/queries/nodes/DataNode/DateRange' import { ElapsedTime } from '~/queries/nodes/DataNode/ElapsedTime' import { LoadPreviewText } from '~/queries/nodes/DataNode/LoadNext' +import { dataNodeLogic } from '~/queries/nodes/DataNode/dataNodeLogic' import { LineGraph } from '~/queries/nodes/DataVisualization/Components/Charts/LineGraph' import { SideBar } from '~/queries/nodes/DataVisualization/Components/SideBar' import { Table } from '~/queries/nodes/DataVisualization/Components/Table' import { TableDisplay } from '~/queries/nodes/DataVisualization/Components/TableDisplay' import { DataTableVisualizationProps } from '~/queries/nodes/DataVisualization/DataVisualization' import { dataVisualizationLogic } from '~/queries/nodes/DataVisualization/dataVisualizationLogic' +import { renderHogQLX } from '~/queries/nodes/HogQLX/render' import { HogQLQueryResponse } from '~/queries/schema/schema-general' import { ChartDisplayType, ExporterFormat } from '~/types' +import TabScroller from './TabScroller' import { FixErrorButton } from './components/FixErrorButton' import { multitabEditorLogic } from './multitabEditorLogic' -import { outputPaneLogic, OutputTab } from './outputPaneLogic' +import { OutputTab, outputPaneLogic } from './outputPaneLogic' import { QueryInfo } from './sidebar/QueryInfo' import { QueryVariables } from './sidebar/QueryVariables' -import TabScroller from './TabScroller' -import { renderHogQLX } from '~/queries/nodes/HogQLX/render' interface RowDetailsModalProps { isOpen: boolean diff --git a/frontend/src/scenes/data-warehouse/editor/QueryHistoryModal.tsx b/frontend/src/scenes/data-warehouse/editor/QueryHistoryModal.tsx index 3de895ed9d..cb0948db3f 100644 --- a/frontend/src/scenes/data-warehouse/editor/QueryHistoryModal.tsx +++ b/frontend/src/scenes/data-warehouse/editor/QueryHistoryModal.tsx @@ -1,16 +1,18 @@ -import { IconCode } from '@posthog/icons' -import { LemonModal } from '@posthog/lemon-ui' -import { LemonButton } from '@posthog/lemon-ui' import useSize from '@react-hook/size' import clsx from 'clsx' import { useActions, useValues } from 'kea' +import { useRef, useState } from 'react' + +import { IconCode } from '@posthog/icons' +import { LemonModal } from '@posthog/lemon-ui' +import { LemonButton } from '@posthog/lemon-ui' + import { SkeletonLog } from 'lib/components/ActivityLog/ActivityLog' import { HumanizedActivityLogItem } from 'lib/components/ActivityLog/humanizeActivity' import MonacoDiffEditor from 'lib/components/MonacoDiffEditor' import { TZLabel } from 'lib/components/TZLabel' import { PaginationControl, usePagination } from 'lib/lemon-ui/PaginationControl' import { ProfilePicture } from 'lib/lemon-ui/ProfilePicture' -import { useRef, useState } from 'react' import { multitabEditorLogic } from './multitabEditorLogic' import { queryHistoryLogic } from './queryHistoryLogic' diff --git a/frontend/src/scenes/data-warehouse/editor/QueryPane.tsx b/frontend/src/scenes/data-warehouse/editor/QueryPane.tsx index b973730ead..7559e4bc4c 100644 --- a/frontend/src/scenes/data-warehouse/editor/QueryPane.tsx +++ b/frontend/src/scenes/data-warehouse/editor/QueryPane.tsx @@ -1,9 +1,11 @@ -import { IconCheck, IconX } from '@posthog/icons' import { useActions, useValues } from 'kea' +import { AutoSizer } from 'react-virtualized/dist/es/AutoSizer' + +import { IconCheck, IconX } from '@posthog/icons' + import { Resizer } from 'lib/components/Resizer/Resizer' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { CodeEditor, CodeEditorProps } from 'lib/monaco/CodeEditor' -import { AutoSizer } from 'react-virtualized/dist/es/AutoSizer' import MaxTool from 'scenes/max/MaxTool' import { HogQLQuery } from '~/queries/schema/schema-general' diff --git a/frontend/src/scenes/data-warehouse/editor/QueryTabs.stories.tsx b/frontend/src/scenes/data-warehouse/editor/QueryTabs.stories.tsx index 54915554ab..d4c463cc3e 100644 --- a/frontend/src/scenes/data-warehouse/editor/QueryTabs.stories.tsx +++ b/frontend/src/scenes/data-warehouse/editor/QueryTabs.stories.tsx @@ -2,8 +2,8 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' import { BindLogic } from 'kea' import { Uri, UriComponents } from 'monaco-editor' -import { multitabEditorLogic, QueryTab } from './multitabEditorLogic' import { QueryTabs } from './QueryTabs' +import { QueryTab, multitabEditorLogic } from './multitabEditorLogic' type Story = StoryObj const meta: Meta = { diff --git a/frontend/src/scenes/data-warehouse/editor/QueryTabs.tsx b/frontend/src/scenes/data-warehouse/editor/QueryTabs.tsx index 81ea8f725f..68e4d18149 100644 --- a/frontend/src/scenes/data-warehouse/editor/QueryTabs.tsx +++ b/frontend/src/scenes/data-warehouse/editor/QueryTabs.tsx @@ -1,11 +1,12 @@ -import { IconPlus, IconX } from '@posthog/icons' -import { LemonButton } from '@posthog/lemon-ui' import clsx from 'clsx' import { useValues } from 'kea' import { useEffect, useRef, useState } from 'react' +import { IconPlus, IconX } from '@posthog/icons' +import { LemonButton } from '@posthog/lemon-ui' + import AutoTab from './AutoTab' -import { multitabEditorLogic, NEW_QUERY, QueryTab } from './multitabEditorLogic' +import { NEW_QUERY, QueryTab, multitabEditorLogic } from './multitabEditorLogic' interface QueryTabsProps { models: QueryTab[] diff --git a/frontend/src/scenes/data-warehouse/editor/QueryWindow.tsx b/frontend/src/scenes/data-warehouse/editor/QueryWindow.tsx index 45dd67e872..e0f918d6fc 100644 --- a/frontend/src/scenes/data-warehouse/editor/QueryWindow.tsx +++ b/frontend/src/scenes/data-warehouse/editor/QueryWindow.tsx @@ -1,30 +1,32 @@ import { Monaco } from '@monaco-editor/react' -import { IconBook, IconDownload, IconInfo, IconPlayFilled, IconSidebarClose } from '@posthog/icons' -import { LemonDivider, Spinner } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { router } from 'kea-router' -import { IconCancel } from 'lib/lemon-ui/icons' -import { LemonButton } from 'lib/lemon-ui/LemonButton' -import { Link } from 'lib/lemon-ui/Link' import type { editor as importedEditor } from 'monaco-editor' import { useMemo } from 'react' + +import { IconBook, IconDownload, IconInfo, IconPlayFilled, IconSidebarClose } from '@posthog/icons' +import { LemonDivider, Spinner } from '@posthog/lemon-ui' + +import { FEATURE_FLAGS } from 'lib/constants' +import { LemonButton } from 'lib/lemon-ui/LemonButton' +import { Link } from 'lib/lemon-ui/Link' +import { IconCancel } from 'lib/lemon-ui/icons' +import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { urls } from 'scenes/urls' import { panelLayoutLogic } from '~/layout/panel-layout/panelLayoutLogic' import { dataNodeLogic } from '~/queries/nodes/DataNode/dataNodeLogic' +import { NodeKind } from '~/queries/schema/schema-general' -import { FixErrorButton } from './components/FixErrorButton' -import { editorSizingLogic } from './editorSizingLogic' -import { multitabEditorLogic } from './multitabEditorLogic' +import { dataWarehouseViewsLogic } from '../saved_queries/dataWarehouseViewsLogic' import { OutputPane } from './OutputPane' import { QueryHistoryModal } from './QueryHistoryModal' import { QueryPane } from './QueryPane' import { QueryTabs } from './QueryTabs' +import { FixErrorButton } from './components/FixErrorButton' import { draftsLogic } from './draftsLogic' -import { NodeKind } from '~/queries/schema/schema-general' -import { dataWarehouseViewsLogic } from '../saved_queries/dataWarehouseViewsLogic' -import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { FEATURE_FLAGS } from 'lib/constants' +import { editorSizingLogic } from './editorSizingLogic' +import { multitabEditorLogic } from './multitabEditorLogic' interface QueryWindowProps { onSetMonacoAndEditor: (monaco: Monaco, editor: importedEditor.IStandaloneCodeEditor) => void diff --git a/frontend/src/scenes/data-warehouse/editor/ViewLoadingState.tsx b/frontend/src/scenes/data-warehouse/editor/ViewLoadingState.tsx index d10d84d565..f9458048dc 100644 --- a/frontend/src/scenes/data-warehouse/editor/ViewLoadingState.tsx +++ b/frontend/src/scenes/data-warehouse/editor/ViewLoadingState.tsx @@ -1,4 +1,5 @@ import { useState } from 'react' + import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' const VIEW_EMPTY_STATE_COPY = [ diff --git a/frontend/src/scenes/data-warehouse/editor/components/FixErrorButton.tsx b/frontend/src/scenes/data-warehouse/editor/components/FixErrorButton.tsx index ee3a04a3dd..eed6967a9d 100644 --- a/frontend/src/scenes/data-warehouse/editor/components/FixErrorButton.tsx +++ b/frontend/src/scenes/data-warehouse/editor/components/FixErrorButton.tsx @@ -1,10 +1,12 @@ -import { IconMagicWand, IconWarning } from '@posthog/icons' -import { Spinner } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' -import { LemonButton, LemonButtonProps } from 'lib/lemon-ui/LemonButton' import posthog from 'posthog-js' import { useMemo } from 'react' +import { IconMagicWand, IconWarning } from '@posthog/icons' +import { Spinner } from '@posthog/lemon-ui' + +import { LemonButton, LemonButtonProps } from 'lib/lemon-ui/LemonButton' + import { dataNodeLogic } from '~/queries/nodes/DataNode/dataNodeLogic' import { fixSQLErrorsLogic } from '../fixSQLErrorsLogic' diff --git a/frontend/src/scenes/data-warehouse/editor/draftsLogic.tsx b/frontend/src/scenes/data-warehouse/editor/draftsLogic.tsx index ca4b80dd89..ad90817282 100644 --- a/frontend/src/scenes/data-warehouse/editor/draftsLogic.tsx +++ b/frontend/src/scenes/data-warehouse/editor/draftsLogic.tsx @@ -1,13 +1,15 @@ import { actions, kea, listeners, path, reducers, selectors } from 'kea' +import { loaders } from 'kea-loaders' +import posthog from 'posthog-js' + +import { lemonToast } from '@posthog/lemon-ui' + import api, { ApiError, PaginatedResponse } from 'lib/api' +import { HogQLQuery } from '~/queries/schema/schema-general' import { DataWarehouseSavedQueryDraft } from '~/types' import type { draftsLogicType } from './draftsLogicType' -import { loaders } from 'kea-loaders' -import { HogQLQuery } from '~/queries/schema/schema-general' -import { lemonToast } from '@posthog/lemon-ui' -import posthog from 'posthog-js' import { QueryTab } from './multitabEditorLogic' export const draftsLogic = kea([ diff --git a/frontend/src/scenes/data-warehouse/editor/editorSceneLogic.tsx b/frontend/src/scenes/data-warehouse/editor/editorSceneLogic.tsx index d3d0d6aab8..268f38c7bb 100644 --- a/frontend/src/scenes/data-warehouse/editor/editorSceneLogic.tsx +++ b/frontend/src/scenes/data-warehouse/editor/editorSceneLogic.tsx @@ -1,15 +1,16 @@ -import { IconDatabase, IconDocument } from '@posthog/icons' -import { LemonDialog, Tooltip } from '@posthog/lemon-ui' import Fuse from 'fuse.js' import { actions, connect, kea, listeners, path, reducers, selectors } from 'kea' import { router, urlToAction } from 'kea-router' import { subscriptions } from 'kea-subscriptions' +import posthog from 'posthog-js' + +import { IconDatabase, IconDocument } from '@posthog/icons' +import { LemonDialog, Tooltip } from '@posthog/lemon-ui' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { copyToClipboard } from 'lib/utils/copyToClipboard' import { ProductIntentContext } from 'lib/utils/product-intents' -import posthog from 'posthog-js' import { databaseTableListLogic } from 'scenes/data-management/database/databaseTableListLogic' import { sceneLogic } from 'scenes/sceneLogic' import { Scene } from 'scenes/sceneTypes' diff --git a/frontend/src/scenes/data-warehouse/editor/editorSizingLogic.tsx b/frontend/src/scenes/data-warehouse/editor/editorSizingLogic.tsx index 10a05ce1b5..cf01b5b49f 100644 --- a/frontend/src/scenes/data-warehouse/editor/editorSizingLogic.tsx +++ b/frontend/src/scenes/data-warehouse/editor/editorSizingLogic.tsx @@ -1,5 +1,6 @@ import { actions, connect, kea, listeners, path, props, selectors } from 'kea' -import { resizerLogic, ResizerLogicProps } from 'lib/components/Resizer/resizerLogic' + +import { ResizerLogicProps, resizerLogic } from 'lib/components/Resizer/resizerLogic' import type { editorSizingLogicType } from './editorSizingLogicType' diff --git a/frontend/src/scenes/data-warehouse/editor/fixSQLErrorsLogic.ts b/frontend/src/scenes/data-warehouse/editor/fixSQLErrorsLogic.ts index 505bb94d78..1c19b47a6d 100644 --- a/frontend/src/scenes/data-warehouse/editor/fixSQLErrorsLogic.ts +++ b/frontend/src/scenes/data-warehouse/editor/fixSQLErrorsLogic.ts @@ -1,5 +1,6 @@ import { actions, kea, path } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import type { fixSQLErrorsLogicType } from './fixSQLErrorsLogicType' diff --git a/frontend/src/scenes/data-warehouse/editor/multitabEditorLogic.test.ts b/frontend/src/scenes/data-warehouse/editor/multitabEditorLogic.test.ts index be9473331c..8016424255 100644 --- a/frontend/src/scenes/data-warehouse/editor/multitabEditorLogic.test.ts +++ b/frontend/src/scenes/data-warehouse/editor/multitabEditorLogic.test.ts @@ -1,5 +1,5 @@ -import { editorModelsStateKey } from './multitabEditorLogic' import { set } from './db' +import { editorModelsStateKey } from './multitabEditorLogic' jest.mock('posthog-js', () => ({ captureException: jest.fn() })) jest.mock('./db', () => ({ diff --git a/frontend/src/scenes/data-warehouse/editor/multitabEditorLogic.tsx b/frontend/src/scenes/data-warehouse/editor/multitabEditorLogic.tsx index 89e02445f9..060a598d40 100644 --- a/frontend/src/scenes/data-warehouse/editor/multitabEditorLogic.tsx +++ b/frontend/src/scenes/data-warehouse/editor/multitabEditorLogic.tsx @@ -1,18 +1,20 @@ import { Monaco } from '@monaco-editor/react' -import { LemonDialog, LemonInput, lemonToast } from '@posthog/lemon-ui' import { actions, afterMount, connect, kea, key, listeners, path, props, propsChanged, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { router, urlToAction } from 'kea-router' import { subscriptions } from 'kea-subscriptions' +import isEqual from 'lodash.isequal' +import { Uri, editor } from 'monaco-editor' +import posthog from 'posthog-js' + +import { LemonDialog, LemonInput, lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { LemonField } from 'lib/lemon-ui/LemonField' import { initModel } from 'lib/monaco/CodeEditor' import { codeEditorLogic } from 'lib/monaco/codeEditorLogic' import { removeUndefinedAndNull } from 'lib/utils' import { copyToClipboard } from 'lib/utils/copyToClipboard' -import isEqual from 'lodash.isequal' -import { editor, Uri } from 'monaco-editor' -import posthog from 'posthog-js' import { insightsApi } from 'scenes/insights/utils/api' import { urls } from 'scenes/urls' import { userLogic } from 'scenes/userLogic' @@ -21,8 +23,8 @@ import { dataNodeLogic } from '~/queries/nodes/DataNode/dataNodeLogic' import { insightVizDataNodeKey } from '~/queries/nodes/InsightViz/InsightViz' import { queryExportContext } from '~/queries/query' import { - DatabaseSchemaViewTable, DataVisualizationNode, + DatabaseSchemaViewTable, HogQLMetadataResponse, HogQLQuery, NodeKind, @@ -39,19 +41,19 @@ import { import { dataWarehouseViewsLogic } from '../saved_queries/dataWarehouseViewsLogic' import { DATAWAREHOUSE_EDITOR_ITEM_ID, sizeOfInBytes } from '../utils' +import { ViewEmptyState } from './ViewLoadingState' import { get, set } from './db' import { draftsLogic } from './draftsLogic' import { editorSceneLogic } from './editorSceneLogic' import { fixSQLErrorsLogic } from './fixSQLErrorsLogic' import type { multitabEditorLogicType } from './multitabEditorLogicType' -import { outputPaneLogic, OutputTab } from './outputPaneLogic' +import { OutputTab, outputPaneLogic } from './outputPaneLogic' import { aiSuggestionOnAccept, aiSuggestionOnAcceptText, aiSuggestionOnReject, aiSuggestionOnRejectText, } from './suggestions/aiSuggestion' -import { ViewEmptyState } from './ViewLoadingState' export interface MultitabEditorLogicProps { key: string diff --git a/frontend/src/scenes/data-warehouse/editor/queryHistoryLogic.ts b/frontend/src/scenes/data-warehouse/editor/queryHistoryLogic.ts index 60ae9bf5d4..3c9da583a5 100644 --- a/frontend/src/scenes/data-warehouse/editor/queryHistoryLogic.ts +++ b/frontend/src/scenes/data-warehouse/editor/queryHistoryLogic.ts @@ -1,4 +1,5 @@ import { connect, kea, path, props } from 'kea' + import { activityLogLogic } from 'lib/components/ActivityLog/activityLogLogic' import { ActivityScope } from '~/types' diff --git a/frontend/src/scenes/data-warehouse/editor/sidebar/DatabaseSearchField.tsx b/frontend/src/scenes/data-warehouse/editor/sidebar/DatabaseSearchField.tsx index 209dc149c6..f599964488 100644 --- a/frontend/src/scenes/data-warehouse/editor/sidebar/DatabaseSearchField.tsx +++ b/frontend/src/scenes/data-warehouse/editor/sidebar/DatabaseSearchField.tsx @@ -1,4 +1,5 @@ import { useActions, useValues } from 'kea' + import { SearchAutocomplete } from 'lib/components/SearchAutocomplete/SearchAutocomplete' import { queryDatabaseLogic } from './queryDatabaseLogic' diff --git a/frontend/src/scenes/data-warehouse/editor/sidebar/QueryDatabase.tsx b/frontend/src/scenes/data-warehouse/editor/sidebar/QueryDatabase.tsx index 18ea1f26db..7959bdafc7 100644 --- a/frontend/src/scenes/data-warehouse/editor/sidebar/QueryDatabase.tsx +++ b/frontend/src/scenes/data-warehouse/editor/sidebar/QueryDatabase.tsx @@ -1,26 +1,27 @@ -import { IconPlusSmall } from '@posthog/icons' -import { lemonToast } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { router } from 'kea-router' +import { useEffect, useRef } from 'react' +import { IconPlusSmall } from '@posthog/icons' +import { lemonToast } from '@posthog/lemon-ui' + +import api from 'lib/api' import { LemonTree, LemonTreeRef } from 'lib/lemon-ui/LemonTree/LemonTree' import { TreeNodeDisplayIcon } from 'lib/lemon-ui/LemonTree/LemonTreeUtils' import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' import { DropdownMenuGroup, DropdownMenuItem, DropdownMenuSeparator } from 'lib/ui/DropdownMenu/DropdownMenu' import { copyToClipboard } from 'lib/utils/copyToClipboard' -import { useEffect, useRef } from 'react' +import { deleteWithUndo } from 'lib/utils/deleteWithUndo' import { urls } from 'scenes/urls' import { SearchHighlightMultiple } from '~/layout/navigation-3000/components/SearchHighlight' import { PipelineStage } from '~/types' import { dataWarehouseViewsLogic } from '../../saved_queries/dataWarehouseViewsLogic' +import { draftsLogic } from '../draftsLogic' import { renderTableCount } from '../editorSceneLogic' import { multitabEditorLogic } from '../multitabEditorLogic' import { isJoined, queryDatabaseLogic } from './queryDatabaseLogic' -import { deleteWithUndo } from 'lib/utils/deleteWithUndo' -import api from 'lib/api' -import { draftsLogic } from '../draftsLogic' export const QueryDatabase = (): JSX.Element => { const { diff --git a/frontend/src/scenes/data-warehouse/editor/sidebar/QueryInfo.tsx b/frontend/src/scenes/data-warehouse/editor/sidebar/QueryInfo.tsx index 7fe813486b..146e7fd0f5 100644 --- a/frontend/src/scenes/data-warehouse/editor/sidebar/QueryInfo.tsx +++ b/frontend/src/scenes/data-warehouse/editor/sidebar/QueryInfo.tsx @@ -1,12 +1,13 @@ -import { IconRevert, IconTarget, IconX } from '@posthog/icons' - -import { LemonDialog, LemonTable, Link, Spinner } from '@posthog/lemon-ui' -import { LemonProgress } from 'lib/lemon-ui/LemonProgress' import { useActions, useValues } from 'kea' + +import { IconRevert, IconTarget, IconX } from '@posthog/icons' +import { LemonDialog, LemonTable, Link, Spinner } from '@posthog/lemon-ui' + import { FEATURE_FLAGS } from 'lib/constants' import { LemonButton } from 'lib/lemon-ui/LemonButton' -import { LemonSelect } from 'lib/lemon-ui/LemonSelect' +import { LemonProgress } from 'lib/lemon-ui/LemonProgress' import { LemonSegmentedButton } from 'lib/lemon-ui/LemonSegmentedButton' +import { LemonSelect } from 'lib/lemon-ui/LemonSelect' import { LemonTag, LemonTagType } from 'lib/lemon-ui/LemonTag' import { Tooltip } from 'lib/lemon-ui/Tooltip' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' @@ -16,8 +17,8 @@ import { dataWarehouseViewsLogic } from 'scenes/data-warehouse/saved_queries/dat import { DataModelingJob, DataWarehouseSyncInterval, LineageNode, OrNever } from '~/types' import { multitabEditorLogic } from '../multitabEditorLogic' -import { infoTabLogic } from './infoTabLogic' import { UpstreamGraph } from './graph/UpstreamGraph' +import { infoTabLogic } from './infoTabLogic' interface QueryInfoProps { codeEditorKey: string diff --git a/frontend/src/scenes/data-warehouse/editor/sidebar/QueryVariables.tsx b/frontend/src/scenes/data-warehouse/editor/sidebar/QueryVariables.tsx index 2c24f51915..f22d04137b 100644 --- a/frontend/src/scenes/data-warehouse/editor/sidebar/QueryVariables.tsx +++ b/frontend/src/scenes/data-warehouse/editor/sidebar/QueryVariables.tsx @@ -1,13 +1,14 @@ -import { Link } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions } from 'kea' import { useValues } from 'kea' +import { Link } from '@posthog/lemon-ui' + import { dataNodeLogic } from '~/queries/nodes/DataNode/dataNodeLogic' import { AddVariableButton } from '~/queries/nodes/DataVisualization/Components/Variables/AddVariableButton' import { NewVariableModal } from '~/queries/nodes/DataVisualization/Components/Variables/NewVariableModal' -import { variableModalLogic } from '~/queries/nodes/DataVisualization/Components/Variables/variableModalLogic' import { VariableComponent } from '~/queries/nodes/DataVisualization/Components/Variables/Variables' +import { variableModalLogic } from '~/queries/nodes/DataVisualization/Components/Variables/variableModalLogic' import { variablesLogic } from '~/queries/nodes/DataVisualization/Components/Variables/variablesLogic' import { dataVisualizationLogic } from '~/queries/nodes/DataVisualization/dataVisualizationLogic' diff --git a/frontend/src/scenes/data-warehouse/editor/sidebar/graph/UpstreamGraph.tsx b/frontend/src/scenes/data-warehouse/editor/sidebar/graph/UpstreamGraph.tsx index 252e4ad702..69eb6e7b0c 100644 --- a/frontend/src/scenes/data-warehouse/editor/sidebar/graph/UpstreamGraph.tsx +++ b/frontend/src/scenes/data-warehouse/editor/sidebar/graph/UpstreamGraph.tsx @@ -1,6 +1,6 @@ import '@xyflow/react/dist/style.css' -import React, { useState, useEffect, useMemo } from 'react' +import dagre from '@dagrejs/dagre' import { Background, BackgroundVariant, @@ -8,27 +8,29 @@ import { Edge, Handle, MarkerType, + MiniMap, Node, NodeTypes, Position, ReactFlow, ReactFlowProvider, - MiniMap, useReactFlow, } from '@xyflow/react' -import dagre from '@dagrejs/dagre' -import { IconArchive, IconTarget, IconPencil } from '@posthog/icons' -import { LemonTag, LemonTagType, LemonButton } from '@posthog/lemon-ui' -import { useValues, useActions } from 'kea' +import { useActions, useValues } from 'kea' +import { router } from 'kea-router' +import React, { useEffect, useMemo, useState } from 'react' + +import { IconArchive, IconPencil, IconTarget } from '@posthog/icons' +import { LemonButton, LemonTag, LemonTagType } from '@posthog/lemon-ui' + import { Tooltip } from 'lib/lemon-ui/Tooltip' import { humanFriendlyDetailedTime } from 'lib/utils' -import { router } from 'kea-router' +import { themeLogic } from '~/layout/navigation-3000/themeLogic' import { LineageNode as LineageNodeType } from '~/types' -import { multitabEditorLogic } from '../../multitabEditorLogic' -import { themeLogic } from '~/layout/navigation-3000/themeLogic' import { dataWarehouseViewsLogic } from '../../../saved_queries/dataWarehouseViewsLogic' +import { multitabEditorLogic } from '../../multitabEditorLogic' interface UpstreamGraphProps { codeEditorKey: string diff --git a/frontend/src/scenes/data-warehouse/editor/sidebar/infoTabLogic.ts b/frontend/src/scenes/data-warehouse/editor/sidebar/infoTabLogic.ts index cd5c4d5d27..f04ab9779f 100644 --- a/frontend/src/scenes/data-warehouse/editor/sidebar/infoTabLogic.ts +++ b/frontend/src/scenes/data-warehouse/editor/sidebar/infoTabLogic.ts @@ -1,4 +1,5 @@ import { connect, kea, key, path, props, selectors } from 'kea' + import { databaseTableListLogic } from 'scenes/data-management/database/databaseTableListLogic' import { dataWarehouseViewsLogic } from 'scenes/data-warehouse/saved_queries/dataWarehouseViewsLogic' diff --git a/frontend/src/scenes/data-warehouse/editor/sidebar/queryDatabaseLogic.tsx b/frontend/src/scenes/data-warehouse/editor/sidebar/queryDatabaseLogic.tsx index f8a46edefe..b47a2d4cac 100644 --- a/frontend/src/scenes/data-warehouse/editor/sidebar/queryDatabaseLogic.tsx +++ b/frontend/src/scenes/data-warehouse/editor/sidebar/queryDatabaseLogic.tsx @@ -1,12 +1,16 @@ -import { IconDatabase, IconDocument, IconPlug, IconPlus } from '@posthog/icons' -import { LemonMenuItem, lemonToast } from '@posthog/lemon-ui' -import { Spinner } from '@posthog/lemon-ui' import Fuse from 'fuse.js' import { actions, connect, events, kea, listeners, path, reducers, selectors } from 'kea' import { subscriptions } from 'kea-subscriptions' + +import { IconDatabase, IconDocument, IconPlug, IconPlus } from '@posthog/icons' +import { LemonMenuItem, lemonToast } from '@posthog/lemon-ui' +import { Spinner } from '@posthog/lemon-ui' + import api from 'lib/api' import { TreeItem } from 'lib/components/DatabaseTableTree/DatabaseTableTree' +import { FEATURE_FLAGS } from 'lib/constants' import { LemonTreeRef, TreeDataItem } from 'lib/lemon-ui/LemonTree/LemonTree' +import { FeatureFlagsSet, featureFlagLogic } from 'lib/logic/featureFlagLogic' import { deleteWithUndo } from 'lib/utils/deleteWithUndo' import { databaseTableListLogic } from 'scenes/data-management/database/databaseTableListLogic' import { DataWarehouseSourceIcon, mapUrlToProvider } from 'scenes/data-warehouse/settings/DataWarehouseSourceIcon' @@ -23,10 +27,8 @@ import { DataWarehouseSavedQuery, DataWarehouseSavedQueryDraft, DataWarehouseVie import { dataWarehouseJoinsLogic } from '../../external/dataWarehouseJoinsLogic' import { dataWarehouseViewsLogic } from '../../saved_queries/dataWarehouseViewsLogic' import { viewLinkLogic } from '../../viewLinkLogic' -import type { queryDatabaseLogicType } from './queryDatabaseLogicType' import { draftsLogic } from '../draftsLogic' -import { featureFlagLogic, FeatureFlagsSet } from 'lib/logic/featureFlagLogic' -import { FEATURE_FLAGS } from 'lib/constants' +import type { queryDatabaseLogicType } from './queryDatabaseLogicType' export type EditorSidebarTreeRef = React.RefObject | null diff --git a/frontend/src/scenes/data-warehouse/external/dataWarehouseJoinsLogic.ts b/frontend/src/scenes/data-warehouse/external/dataWarehouseJoinsLogic.ts index 8c9489dea8..e29a00d13f 100644 --- a/frontend/src/scenes/data-warehouse/external/dataWarehouseJoinsLogic.ts +++ b/frontend/src/scenes/data-warehouse/external/dataWarehouseJoinsLogic.ts @@ -1,5 +1,6 @@ import { afterMount, connect, kea, path, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { databaseTableListLogic } from 'scenes/data-management/database/databaseTableListLogic' diff --git a/frontend/src/scenes/data-warehouse/external/forms/DataWarehouseIntegrationChoice.tsx b/frontend/src/scenes/data-warehouse/external/forms/DataWarehouseIntegrationChoice.tsx index 2ac97310b8..318e061d0f 100644 --- a/frontend/src/scenes/data-warehouse/external/forms/DataWarehouseIntegrationChoice.tsx +++ b/frontend/src/scenes/data-warehouse/external/forms/DataWarehouseIntegrationChoice.tsx @@ -3,8 +3,8 @@ import { IntegrationConfigureProps, } from 'lib/components/CyclotronJob/integrations/IntegrationChoice' import { urls } from 'scenes/urls' -import { SourceConfig } from '~/queries/schema/schema-general' +import { SourceConfig } from '~/queries/schema/schema-general' import { PipelineStage } from '~/types' export type DataWarehouseIntegrationChoice = IntegrationConfigureProps & { diff --git a/frontend/src/scenes/data-warehouse/external/forms/SchemaForm.tsx b/frontend/src/scenes/data-warehouse/external/forms/SchemaForm.tsx index 9783ed2b80..e37678c38c 100644 --- a/frontend/src/scenes/data-warehouse/external/forms/SchemaForm.tsx +++ b/frontend/src/scenes/data-warehouse/external/forms/SchemaForm.tsx @@ -1,8 +1,10 @@ +import { useActions, useValues } from 'kea' + import { IconInfo } from '@posthog/icons' import { LemonButton, LemonCheckbox, LemonInput, LemonModal, LemonSwitch, LemonTable, Tooltip } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { dayjs } from 'lib/dayjs' -import { syncAnchorIntervalToHumanReadable, SyncTypeLabelMap } from 'scenes/data-warehouse/utils' +import { SyncTypeLabelMap, syncAnchorIntervalToHumanReadable } from 'scenes/data-warehouse/utils' import { teamLogic } from 'scenes/teamLogic' import { ExternalDataSourceSyncSchema } from '~/types' diff --git a/frontend/src/scenes/data-warehouse/external/forms/SourceForm.tsx b/frontend/src/scenes/data-warehouse/external/forms/SourceForm.tsx index 9d6cf86aa9..60344a24e7 100644 --- a/frontend/src/scenes/data-warehouse/external/forms/SourceForm.tsx +++ b/frontend/src/scenes/data-warehouse/external/forms/SourceForm.tsx @@ -1,3 +1,7 @@ +import { useValues } from 'kea' +import { FieldName, Form, Group } from 'kea-forms' +import React, { useEffect } from 'react' + import { LemonDivider, LemonFileInput, @@ -7,16 +11,15 @@ import { LemonSwitch, LemonTextArea, } from '@posthog/lemon-ui' -import { FieldName, Form, Group } from 'kea-forms' -import { LemonField } from 'lib/lemon-ui/LemonField' -import React, { useEffect } from 'react' -import { sourceWizardLogic, SSH_FIELD } from '../../new/sourceWizardLogic' +import { LemonField } from 'lib/lemon-ui/LemonField' +import { availableSourcesDataLogic } from 'scenes/data-warehouse/new/availableSourcesDataLogic' + +import { SourceConfig, SourceFieldConfig } from '~/queries/schema/schema-general' + +import { SSH_FIELD, sourceWizardLogic } from '../../new/sourceWizardLogic' import { DataWarehouseIntegrationChoice } from './DataWarehouseIntegrationChoice' import { parseConnectionString } from './parseConnectionString' -import { useValues } from 'kea' -import { SourceConfig, SourceFieldConfig } from '~/queries/schema/schema-general' -import { availableSourcesDataLogic } from 'scenes/data-warehouse/new/availableSourcesDataLogic' export interface SourceFormProps { sourceConfig: SourceConfig diff --git a/frontend/src/scenes/data-warehouse/external/forms/SyncMethodForm.tsx b/frontend/src/scenes/data-warehouse/external/forms/SyncMethodForm.tsx index 7e9f77d6b8..91fa4dc039 100644 --- a/frontend/src/scenes/data-warehouse/external/forms/SyncMethodForm.tsx +++ b/frontend/src/scenes/data-warehouse/external/forms/SyncMethodForm.tsx @@ -1,7 +1,9 @@ -import { LemonButton, LemonSelect, LemonTag, lemonToast } from '@posthog/lemon-ui' -import { LemonRadio } from 'lib/lemon-ui/LemonRadio' import { useEffect, useState } from 'react' +import { LemonButton, LemonSelect, LemonTag, lemonToast } from '@posthog/lemon-ui' + +import { LemonRadio } from 'lib/lemon-ui/LemonRadio' + import { ExternalDataSourceSyncSchema } from '~/types' const getIncrementalSyncSupported = ( diff --git a/frontend/src/scenes/data-warehouse/external/forms/SyncProgressStep.tsx b/frontend/src/scenes/data-warehouse/external/forms/SyncProgressStep.tsx index 4ce39a2038..392d0e4382 100644 --- a/frontend/src/scenes/data-warehouse/external/forms/SyncProgressStep.tsx +++ b/frontend/src/scenes/data-warehouse/external/forms/SyncProgressStep.tsx @@ -1,5 +1,7 @@ -import { LemonButton, LemonTable, LemonTableColumns, LemonTag, LemonTagType } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonButton, LemonTable, LemonTableColumns, LemonTag, LemonTagType } from '@posthog/lemon-ui' + import { sourceWizardLogic } from 'scenes/data-warehouse/new/sourceWizardLogic' import { dataWarehouseSettingsLogic } from 'scenes/data-warehouse/settings/dataWarehouseSettingsLogic' import { defaultQuery } from 'scenes/data-warehouse/utils' diff --git a/frontend/src/scenes/data-warehouse/externalDataSourcesLogic.test.ts b/frontend/src/scenes/data-warehouse/externalDataSourcesLogic.test.ts index 2ddea36560..b2fe2cbf49 100644 --- a/frontend/src/scenes/data-warehouse/externalDataSourcesLogic.test.ts +++ b/frontend/src/scenes/data-warehouse/externalDataSourcesLogic.test.ts @@ -1,8 +1,9 @@ import { expectLogic } from 'kea-test-utils' + import api, { PaginatedResponse } from 'lib/api' -import { DataWarehouseSyncInterval, ExternalDataSource } from '~/types' import { initKeaTests } from '~/test/init' +import { DataWarehouseSyncInterval, ExternalDataSource } from '~/types' import { externalDataSourcesLogic } from './externalDataSourcesLogic' diff --git a/frontend/src/scenes/data-warehouse/externalDataSourcesLogic.ts b/frontend/src/scenes/data-warehouse/externalDataSourcesLogic.ts index 830dfd0c72..15fa044216 100644 --- a/frontend/src/scenes/data-warehouse/externalDataSourcesLogic.ts +++ b/frontend/src/scenes/data-warehouse/externalDataSourcesLogic.ts @@ -1,5 +1,6 @@ import { actions, kea, listeners, path, reducers } from 'kea' import { loaders } from 'kea-loaders' + import api, { ApiMethodOptions, PaginatedResponse } from 'lib/api' import { ExternalDataSource } from '~/types' diff --git a/frontend/src/scenes/data-warehouse/new/DataWarehouseTableForm.tsx b/frontend/src/scenes/data-warehouse/new/DataWarehouseTableForm.tsx index d16b93c7d3..9dae653259 100644 --- a/frontend/src/scenes/data-warehouse/new/DataWarehouseTableForm.tsx +++ b/frontend/src/scenes/data-warehouse/new/DataWarehouseTableForm.tsx @@ -1,6 +1,8 @@ -import { LemonButton, LemonInput, LemonSelect, Link } from '@posthog/lemon-ui' import { useValues } from 'kea' import { Form } from 'kea-forms' + +import { LemonButton, LemonInput, LemonSelect, Link } from '@posthog/lemon-ui' + import { LemonField } from 'lib/lemon-ui/LemonField' import { ManualLinkSourceType } from '~/types' diff --git a/frontend/src/scenes/data-warehouse/new/NewSourceWizard.tsx b/frontend/src/scenes/data-warehouse/new/NewSourceWizard.tsx index 85f463e3ea..acda5ba089 100644 --- a/frontend/src/scenes/data-warehouse/new/NewSourceWizard.tsx +++ b/frontend/src/scenes/data-warehouse/new/NewSourceWizard.tsx @@ -1,12 +1,19 @@ -import { IconBell, IconCheck } from '@posthog/icons' -import { LemonButton, LemonSkeleton, LemonTable, LemonTag, lemonToast, Link } from '@posthog/lemon-ui' import { BindLogic, useActions, useValues } from 'kea' -import { PageHeader } from 'lib/components/PageHeader' import posthog from 'posthog-js' import { useCallback, useEffect } from 'react' + +import { IconBell, IconCheck } from '@posthog/icons' +import { LemonButton, LemonSkeleton, LemonTable, LemonTag, Link, lemonToast } from '@posthog/lemon-ui' + +import { PageHeader } from 'lib/components/PageHeader' +import { FEATURE_FLAGS } from 'lib/constants' +import { LemonMarkdown } from 'lib/lemon-ui/LemonMarkdown' +import { IconBlank } from 'lib/lemon-ui/icons' +import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { DataWarehouseSourceIcon } from 'scenes/data-warehouse/settings/DataWarehouseSourceIcon' import { SceneExport } from 'scenes/sceneTypes' +import { SourceConfig } from '~/queries/schema/schema-general' import { ManualLinkSourceType, SurveyEventName, SurveyEventProperties } from '~/types' import { DataWarehouseInitialBillingLimitNotice } from '../DataWarehouseInitialBillingLimitNotice' @@ -14,14 +21,9 @@ import SchemaForm from '../external/forms/SchemaForm' import SourceForm from '../external/forms/SourceForm' import { SyncProgressStep } from '../external/forms/SyncProgressStep' import { DatawarehouseTableForm } from '../new/DataWarehouseTableForm' +import { availableSourcesDataLogic } from './availableSourcesDataLogic' import { dataWarehouseTableLogic } from './dataWarehouseTableLogic' import { sourceWizardLogic } from './sourceWizardLogic' -import { availableSourcesDataLogic } from './availableSourcesDataLogic' -import { SourceConfig } from '~/queries/schema/schema-general' -import { LemonMarkdown } from 'lib/lemon-ui/LemonMarkdown' -import { IconBlank } from 'lib/lemon-ui/icons' -import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { FEATURE_FLAGS } from 'lib/constants' export const scene: SceneExport = { component: NewSourceWizardScene, diff --git a/frontend/src/scenes/data-warehouse/new/availableSourcesDataLogic.ts b/frontend/src/scenes/data-warehouse/new/availableSourcesDataLogic.ts index 21a0201dd8..9000f200c8 100644 --- a/frontend/src/scenes/data-warehouse/new/availableSourcesDataLogic.ts +++ b/frontend/src/scenes/data-warehouse/new/availableSourcesDataLogic.ts @@ -1,5 +1,6 @@ import { afterMount, kea, path } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { SourceConfig } from '~/queries/schema/schema-general' diff --git a/frontend/src/scenes/data-warehouse/new/dataWarehouseTableLogic.tsx b/frontend/src/scenes/data-warehouse/new/dataWarehouseTableLogic.tsx index 07464cadc9..317f6e931e 100644 --- a/frontend/src/scenes/data-warehouse/new/dataWarehouseTableLogic.tsx +++ b/frontend/src/scenes/data-warehouse/new/dataWarehouseTableLogic.tsx @@ -1,8 +1,10 @@ -import { lemonToast } from '@posthog/lemon-ui' import { actions, connect, events, kea, listeners, path, props, reducers } from 'kea' import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' import { router } from 'kea-router' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { databaseTableListLogic } from 'scenes/data-management/database/databaseTableListLogic' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/data-warehouse/new/sourceWizardLogic.tsx b/frontend/src/scenes/data-warehouse/new/sourceWizardLogic.tsx index 25ffdbc8a2..8dfac30e9a 100644 --- a/frontend/src/scenes/data-warehouse/new/sourceWizardLogic.tsx +++ b/frontend/src/scenes/data-warehouse/new/sourceWizardLogic.tsx @@ -1,37 +1,39 @@ -import { lemonToast } from '@posthog/lemon-ui' import { actions, connect, kea, listeners, path, props, reducers, selectors } from 'kea' import { forms } from 'kea-forms' import { router, urlToAction } from 'kea-router' +import posthog from 'posthog-js' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { ProductIntentContext } from 'lib/utils/product-intents' -import posthog from 'posthog-js' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { Scene } from 'scenes/sceneTypes' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' -import { activationLogic, ActivationTask } from '~/layout/navigation-3000/sidepanel/panels/activation/activationLogic' +import { ActivationTask, activationLogic } from '~/layout/navigation-3000/sidepanel/panels/activation/activationLogic' +import { + ExternalDataSourceType, + SourceConfig, + SourceFieldConfig, + SourceFieldSwitchGroupConfig, + externalDataSources, +} from '~/queries/schema/schema-general' import { Breadcrumb, ExternalDataSourceCreatePayload, ExternalDataSourceSyncSchema, - manualLinkSources, ManualLinkSourceType, PipelineStage, PipelineTab, ProductKey, + manualLinkSources, } from '~/types' import { dataWarehouseSettingsLogic } from '../settings/dataWarehouseSettingsLogic' import { dataWarehouseTableLogic } from './dataWarehouseTableLogic' import type { sourceWizardLogicType } from './sourceWizardLogicType' -import { - externalDataSources, - ExternalDataSourceType, - SourceConfig, - SourceFieldConfig, - SourceFieldSwitchGroupConfig, -} from '~/queries/schema/schema-general' export const SSH_FIELD: SourceFieldSwitchGroupConfig = { name: 'ssh_tunnel', diff --git a/frontend/src/scenes/data-warehouse/saved_queries/activityDescriptions.tsx b/frontend/src/scenes/data-warehouse/saved_queries/activityDescriptions.tsx index 0b9cb3c9e2..80c9c3a26f 100644 --- a/frontend/src/scenes/data-warehouse/saved_queries/activityDescriptions.tsx +++ b/frontend/src/scenes/data-warehouse/saved_queries/activityDescriptions.tsx @@ -1,10 +1,10 @@ +import { SentenceList } from 'lib/components/ActivityLog/SentenceList' import { ActivityLogItem, - defaultDescriber, HumanizedChange, + defaultDescriber, userNameForLogItem, } from 'lib/components/ActivityLog/humanizeActivity' -import { SentenceList } from 'lib/components/ActivityLog/SentenceList' export function dataWarehouseSavedQueryActivityDescriber( logItem: ActivityLogItem, diff --git a/frontend/src/scenes/data-warehouse/saved_queries/dataWarehouseViewsLogic.tsx b/frontend/src/scenes/data-warehouse/saved_queries/dataWarehouseViewsLogic.tsx index be5a14da62..a17a045428 100644 --- a/frontend/src/scenes/data-warehouse/saved_queries/dataWarehouseViewsLogic.tsx +++ b/frontend/src/scenes/data-warehouse/saved_queries/dataWarehouseViewsLogic.tsx @@ -1,8 +1,10 @@ -import { lemonToast } from '@posthog/lemon-ui' import { actions, connect, events, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' -import api, { PaginatedResponse } from 'lib/api' import posthog from 'posthog-js' + +import { lemonToast } from '@posthog/lemon-ui' + +import api, { PaginatedResponse } from 'lib/api' import { databaseTableListLogic } from 'scenes/data-management/database/databaseTableListLogic' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/scenes/data-warehouse/settings/DataWarehouseManagedSourcesTable.tsx b/frontend/src/scenes/data-warehouse/settings/DataWarehouseManagedSourcesTable.tsx index 30e10f2ddc..0089a3c6af 100644 --- a/frontend/src/scenes/data-warehouse/settings/DataWarehouseManagedSourcesTable.tsx +++ b/frontend/src/scenes/data-warehouse/settings/DataWarehouseManagedSourcesTable.tsx @@ -1,5 +1,7 @@ -import { LemonButton, LemonDialog, LemonSkeleton, LemonTable, LemonTag, Spinner, Tooltip } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonButton, LemonDialog, LemonSkeleton, LemonTable, LemonTag, Spinner, Tooltip } from '@posthog/lemon-ui' + import { TZLabel } from 'lib/components/TZLabel' import { More } from 'lib/lemon-ui/LemonButton/More' import { LemonTableLink } from 'lib/lemon-ui/LemonTable/LemonTableLink' @@ -8,8 +10,8 @@ import { urls } from 'scenes/urls' import { ExternalDataJobStatus } from '~/types' -import { dataWarehouseSettingsLogic } from './dataWarehouseSettingsLogic' import { availableSourcesDataLogic } from '../new/availableSourcesDataLogic' +import { dataWarehouseSettingsLogic } from './dataWarehouseSettingsLogic' export const StatusTagSetting: Record = { [ExternalDataJobStatus.Running]: 'primary', diff --git a/frontend/src/scenes/data-warehouse/settings/DataWarehouseSelfManagedSourcesTable.tsx b/frontend/src/scenes/data-warehouse/settings/DataWarehouseSelfManagedSourcesTable.tsx index 8529801dcc..3ab99b7ad6 100644 --- a/frontend/src/scenes/data-warehouse/settings/DataWarehouseSelfManagedSourcesTable.tsx +++ b/frontend/src/scenes/data-warehouse/settings/DataWarehouseSelfManagedSourcesTable.tsx @@ -1,5 +1,7 @@ -import { LemonButton, LemonDialog, LemonInput, LemonTable } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonButton, LemonDialog, LemonInput, LemonTable } from '@posthog/lemon-ui' + import { LemonTableLink } from 'lib/lemon-ui/LemonTable/LemonTableLink' import { DataWarehouseSourceIcon, mapUrlToProvider } from 'scenes/data-warehouse/settings/DataWarehouseSourceIcon' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/data-warehouse/settings/DataWarehouseSourceIcon.tsx b/frontend/src/scenes/data-warehouse/settings/DataWarehouseSourceIcon.tsx index f861011625..24ce482aa3 100644 --- a/frontend/src/scenes/data-warehouse/settings/DataWarehouseSourceIcon.tsx +++ b/frontend/src/scenes/data-warehouse/settings/DataWarehouseSourceIcon.tsx @@ -1,7 +1,11 @@ import { Link } from 'lib/lemon-ui/Link' import { Tooltip } from 'lib/lemon-ui/Tooltip' +import { getDataWarehouseSourceUrl } from 'scenes/data-warehouse/settings/DataWarehouseManagedSourcesTable' + import BlushingHog from 'public/hedgehog/blushing-hog.png' import IconPostHog from 'public/posthog-icon.svg' +import IconGoogleSheets from 'public/services/Google_Sheets.svg' +import IconMongodb from 'public/services/Mongodb.svg' import IconAwsS3 from 'public/services/aws-s3.png' import Iconazure from 'public/services/azure.png' import IconBigQuery from 'public/services/bigquery.png' @@ -9,7 +13,6 @@ import IconBraze from 'public/services/braze.png' import IconChargebee from 'public/services/chargebee.png' import IconCloudflare from 'public/services/cloudflare.png' import IconDoIt from 'public/services/doit.svg' -import IconGoogleSheets from 'public/services/Google_Sheets.svg' import IconGoogleAds from 'public/services/google-ads.png' import IconGoogleCloudStorage from 'public/services/google-cloud-storage.png' import IconHubspot from 'public/services/hubspot.png' @@ -17,7 +20,6 @@ import IconKlaviyo from 'public/services/klaviyo.png' import IconMailchimp from 'public/services/mailchimp.png' import IconMailjet from 'public/services/mailjet.png' import IconMetaAds from 'public/services/meta-ads.png' -import IconMongodb from 'public/services/Mongodb.svg' import IconMySQL from 'public/services/mysql.png' import IconPostgres from 'public/services/postgres.png' import IconRedshift from 'public/services/redshift.png' @@ -28,7 +30,6 @@ import IconStripe from 'public/services/stripe.png' import IconTemporalIO from 'public/services/temporal.png' import IconVitally from 'public/services/vitally.png' import IconZendesk from 'public/services/zendesk.png' -import { getDataWarehouseSourceUrl } from 'scenes/data-warehouse/settings/DataWarehouseManagedSourcesTable' /** * In some cases we don't have the backend telling us what provider we have for blob storage, so we can have some diff --git a/frontend/src/scenes/data-warehouse/settings/DataWarehouseSourceScene.tsx b/frontend/src/scenes/data-warehouse/settings/DataWarehouseSourceScene.tsx index 8ffd0dcf80..dad7b523ae 100644 --- a/frontend/src/scenes/data-warehouse/settings/DataWarehouseSourceScene.tsx +++ b/frontend/src/scenes/data-warehouse/settings/DataWarehouseSourceScene.tsx @@ -1,5 +1,6 @@ import { actions, kea, key, path, props, reducers, selectors, useActions, useValues } from 'kea' import { actionToUrl, urlToAction } from 'kea-router' + import { NotFound } from 'lib/components/NotFound' import { LemonTab, LemonTabs } from 'lib/lemon-ui/LemonTabs' import { DataPipelinesSelfManagedSource } from 'scenes/data-pipelines/DataPipelinesSelfManagedSource' diff --git a/frontend/src/scenes/data-warehouse/settings/dataWarehouseSceneLogic.ts b/frontend/src/scenes/data-warehouse/settings/dataWarehouseSceneLogic.ts index 150e577d43..fd41c9bbd2 100644 --- a/frontend/src/scenes/data-warehouse/settings/dataWarehouseSceneLogic.ts +++ b/frontend/src/scenes/data-warehouse/settings/dataWarehouseSceneLogic.ts @@ -1,10 +1,12 @@ import { Monaco } from '@monaco-editor/react' -import { lemonToast } from '@posthog/lemon-ui' import { actions, connect, kea, listeners, path, props, reducers, selectors } from 'kea' import { router, urlToAction } from 'kea-router' -import api from 'lib/api' import { editor } from 'monaco-editor' import posthog from 'posthog-js' + +import { lemonToast } from '@posthog/lemon-ui' + +import api from 'lib/api' import { databaseTableListLogic } from 'scenes/data-management/database/databaseTableListLogic' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/data-warehouse/settings/dataWarehouseSettingsLogic.ts b/frontend/src/scenes/data-warehouse/settings/dataWarehouseSettingsLogic.ts index fb39ee8dfe..6e6b7f1c56 100644 --- a/frontend/src/scenes/data-warehouse/settings/dataWarehouseSettingsLogic.ts +++ b/frontend/src/scenes/data-warehouse/settings/dataWarehouseSettingsLogic.ts @@ -1,9 +1,10 @@ import { actions, afterMount, beforeUnmount, connect, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { router, urlToAction } from 'kea-router' +import posthog from 'posthog-js' + import api from 'lib/api' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' -import posthog from 'posthog-js' import { databaseTableListLogic } from 'scenes/data-management/database/databaseTableListLogic' import { externalDataSourcesLogic } from 'scenes/data-warehouse/externalDataSourcesLogic' diff --git a/frontend/src/scenes/data-warehouse/settings/dataWarehouseSourcesTableSyncMethodModalLogic.ts b/frontend/src/scenes/data-warehouse/settings/dataWarehouseSourcesTableSyncMethodModalLogic.ts index d21813aa50..ccc2d50df2 100644 --- a/frontend/src/scenes/data-warehouse/settings/dataWarehouseSourcesTableSyncMethodModalLogic.ts +++ b/frontend/src/scenes/data-warehouse/settings/dataWarehouseSourcesTableSyncMethodModalLogic.ts @@ -1,5 +1,6 @@ import { actions, connect, kea, key, listeners, path, props, reducers } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { ExternalDataSourceSchema, SchemaIncrementalFieldsResponse } from '~/types' diff --git a/frontend/src/scenes/data-warehouse/settings/source/Logs.tsx b/frontend/src/scenes/data-warehouse/settings/source/Logs.tsx index 106cc6d445..b612fd61d8 100644 --- a/frontend/src/scenes/data-warehouse/settings/source/Logs.tsx +++ b/frontend/src/scenes/data-warehouse/settings/source/Logs.tsx @@ -1,5 +1,7 @@ -import { LemonButton, LemonTable, LemonTableColumns } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonButton, LemonTable, LemonTableColumns } from '@posthog/lemon-ui' + import { LOGS_PORTION_LIMIT } from 'lib/constants' import { dayjs } from 'lib/dayjs' import { pluralize } from 'lib/utils' diff --git a/frontend/src/scenes/data-warehouse/settings/source/Schemas.tsx b/frontend/src/scenes/data-warehouse/settings/source/Schemas.tsx index 899b07ef64..b87ffc3a1c 100644 --- a/frontend/src/scenes/data-warehouse/settings/source/Schemas.tsx +++ b/frontend/src/scenes/data-warehouse/settings/source/Schemas.tsx @@ -1,3 +1,7 @@ +import { BindLogic, useActions, useValues } from 'kea' +import { router } from 'kea-router' +import { useEffect, useState } from 'react' + import { IconInfo } from '@posthog/icons' import { LemonButton, @@ -13,17 +17,16 @@ import { Spinner, Tooltip, } from '@posthog/lemon-ui' -import { BindLogic, useActions, useValues } from 'kea' -import { router } from 'kea-router' + import { TZLabel } from 'lib/components/TZLabel' import { dayjs } from 'lib/dayjs' import { More } from 'lib/lemon-ui/LemonButton/More' import { ProductIntentContext } from 'lib/utils/product-intents' -import { useEffect, useState } from 'react' -import { defaultQuery, syncAnchorIntervalToHumanReadable, SyncTypeLabelMap } from 'scenes/data-warehouse/utils' +import { SyncTypeLabelMap, defaultQuery, syncAnchorIntervalToHumanReadable } from 'scenes/data-warehouse/utils' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' +import { ExternalDataSourceType } from '~/queries/schema/schema-general' import { DataWarehouseSyncInterval, ExternalDataJobStatus, @@ -36,7 +39,6 @@ import { SyncMethodForm } from '../../external/forms/SyncMethodForm' import { dataWarehouseSettingsLogic } from '../dataWarehouseSettingsLogic' import { dataWarehouseSourcesTableSyncMethodModalLogic } from '../dataWarehouseSourcesTableSyncMethodModalLogic' import { dataWarehouseSourceSettingsLogic } from './dataWarehouseSourceSettingsLogic' -import { ExternalDataSourceType } from '~/queries/schema/schema-general' interface SchemasProps { id: string diff --git a/frontend/src/scenes/data-warehouse/settings/source/SourceConfiguration.tsx b/frontend/src/scenes/data-warehouse/settings/source/SourceConfiguration.tsx index 4fc64d04fb..6f976fcb86 100644 --- a/frontend/src/scenes/data-warehouse/settings/source/SourceConfiguration.tsx +++ b/frontend/src/scenes/data-warehouse/settings/source/SourceConfiguration.tsx @@ -1,6 +1,8 @@ -import { LemonButton, LemonSkeleton } from '@posthog/lemon-ui' import { BindLogic, useActions, useValues } from 'kea' import { Form } from 'kea-forms' + +import { LemonButton, LemonSkeleton } from '@posthog/lemon-ui' + import { SourceFormComponent, SourceFormProps } from 'scenes/data-warehouse/external/forms/SourceForm' import { dataWarehouseSourceSettingsLogic } from './dataWarehouseSourceSettingsLogic' diff --git a/frontend/src/scenes/data-warehouse/settings/source/Syncs.tsx b/frontend/src/scenes/data-warehouse/settings/source/Syncs.tsx index bbe6a1118f..f02ec42eae 100644 --- a/frontend/src/scenes/data-warehouse/settings/source/Syncs.tsx +++ b/frontend/src/scenes/data-warehouse/settings/source/Syncs.tsx @@ -1,11 +1,13 @@ -import { LemonButton, LemonTable, LemonTag, LemonTagType, Tooltip } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonButton, LemonTable, LemonTag, LemonTagType, Tooltip } from '@posthog/lemon-ui' + import { TZLabel } from 'lib/components/TZLabel' import { ExternalDataJob, ExternalDataJobStatus } from '~/types' -import { dataWarehouseSourceSettingsLogic } from './dataWarehouseSourceSettingsLogic' import { LogsView } from './Logs' +import { dataWarehouseSourceSettingsLogic } from './dataWarehouseSourceSettingsLogic' const StatusTagSetting: Record = { Running: 'primary', diff --git a/frontend/src/scenes/data-warehouse/settings/source/dataWarehouseSourceSettingsLogic.ts b/frontend/src/scenes/data-warehouse/settings/source/dataWarehouseSourceSettingsLogic.ts index 4a5ec8cb45..49caf763b0 100644 --- a/frontend/src/scenes/data-warehouse/settings/source/dataWarehouseSourceSettingsLogic.ts +++ b/frontend/src/scenes/data-warehouse/settings/source/dataWarehouseSourceSettingsLogic.ts @@ -1,17 +1,19 @@ -import { lemonToast } from '@posthog/lemon-ui' import { actions, afterMount, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' -import api from 'lib/api' import posthog from 'posthog-js' + +import { lemonToast } from '@posthog/lemon-ui' + +import api from 'lib/api' +import { availableSourcesDataLogic } from 'scenes/data-warehouse/new/availableSourcesDataLogic' import { getErrorsForFields } from 'scenes/data-warehouse/new/sourceWizardLogic' import { ExternalDataJob, ExternalDataSchemaStatus, ExternalDataSource, ExternalDataSourceSchema } from '~/types' +import { externalDataSourcesLogic } from '../../externalDataSourcesLogic' import { dataWarehouseSourceSceneLogic } from '../DataWarehouseSourceScene' import type { dataWarehouseSourceSettingsLogicType } from './dataWarehouseSourceSettingsLogicType' -import { availableSourcesDataLogic } from 'scenes/data-warehouse/new/availableSourcesDataLogic' -import { externalDataSourcesLogic } from '../../externalDataSourcesLogic' export interface DataWarehouseSourceSettingsLogicProps { id: string diff --git a/frontend/src/scenes/data-warehouse/settings/source/schemaLogLogic.ts b/frontend/src/scenes/data-warehouse/settings/source/schemaLogLogic.ts index fe9a2db399..6a1b3543e0 100644 --- a/frontend/src/scenes/data-warehouse/settings/source/schemaLogLogic.ts +++ b/frontend/src/scenes/data-warehouse/settings/source/schemaLogLogic.ts @@ -1,5 +1,6 @@ import { actions, connect, events, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { LOGS_PORTION_LIMIT } from 'lib/constants' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/scenes/data-warehouse/utils.ts b/frontend/src/scenes/data-warehouse/utils.ts index ac728bf9f8..9c58706e16 100644 --- a/frontend/src/scenes/data-warehouse/utils.ts +++ b/frontend/src/scenes/data-warehouse/utils.ts @@ -1,4 +1,4 @@ -import { DatabaseSchemaField, DataVisualizationNode, NodeKind } from '~/queries/schema/schema-general' +import { DataVisualizationNode, DatabaseSchemaField, NodeKind } from '~/queries/schema/schema-general' import { DataWarehouseSyncInterval, ExternalDataSourceSyncSchema } from '~/types' export const DATAWAREHOUSE_EDITOR_ITEM_ID = 'new-SQL' diff --git a/frontend/src/scenes/data-warehouse/viewLinkLogic.tsx b/frontend/src/scenes/data-warehouse/viewLinkLogic.tsx index 2f758d320b..ac913cd28e 100644 --- a/frontend/src/scenes/data-warehouse/viewLinkLogic.tsx +++ b/frontend/src/scenes/data-warehouse/viewLinkLogic.tsx @@ -1,16 +1,17 @@ import { actions, connect, kea, listeners, path, reducers, selectors } from 'kea' import { forms } from 'kea-forms' import { subscriptions } from 'kea-subscriptions' -import api from 'lib/api' import posthog from 'posthog-js' + +import api from 'lib/api' import { databaseTableListLogic } from 'scenes/data-management/database/databaseTableListLogic' +import { DatabaseSchemaField } from '~/queries/schema/schema-general' import { DataWarehouseViewLink } from '~/types' +import { ViewLinkKeyLabel } from './ViewLinkModal' import { dataWarehouseJoinsLogic } from './external/dataWarehouseJoinsLogic' import type { viewLinkLogicType } from './viewLinkLogicType' -import { ViewLinkKeyLabel } from './ViewLinkModal' -import { DatabaseSchemaField } from '~/queries/schema/schema-general' const NEW_VIEW_LINK: DataWarehouseViewLink = { id: 'new', diff --git a/frontend/src/scenes/dataThemeLogic.tsx b/frontend/src/scenes/dataThemeLogic.tsx index af326b16a1..c2191202e5 100644 --- a/frontend/src/scenes/dataThemeLogic.tsx +++ b/frontend/src/scenes/dataThemeLogic.tsx @@ -1,5 +1,6 @@ import { actions, afterMount, connect, kea, path, props, reducers, selectors, useValues } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { DataColorTheme, DataColorToken } from 'lib/colors' diff --git a/frontend/src/scenes/debug/DebugScene.tsx b/frontend/src/scenes/debug/DebugScene.tsx index a22191ebf9..e5cd41a0ce 100644 --- a/frontend/src/scenes/debug/DebugScene.tsx +++ b/frontend/src/scenes/debug/DebugScene.tsx @@ -1,4 +1,5 @@ import { useActions, useValues } from 'kea' + import { PageHeader } from 'lib/components/PageHeader' import { FEATURE_FLAGS } from 'lib/constants' import { LemonButton } from 'lib/lemon-ui/LemonButton' diff --git a/frontend/src/scenes/debug/DebugSceneQuery.tsx b/frontend/src/scenes/debug/DebugSceneQuery.tsx index e74ba513f1..825b5ed4c7 100644 --- a/frontend/src/scenes/debug/DebugSceneQuery.tsx +++ b/frontend/src/scenes/debug/DebugSceneQuery.tsx @@ -1,12 +1,13 @@ import { useValues } from 'kea' + import { HogDebug } from 'scenes/debug/HogDebug' import { HogQLDebug } from 'scenes/debug/HogQLDebug' import { Modifiers } from 'scenes/debug/Modifiers' import { QueryTabs } from 'scenes/debug/QueryTabs' -import { dataNodeLogic, DataNodeLogicProps } from '~/queries/nodes/DataNode/dataNodeLogic' -import { insightVizDataNodeKey } from '~/queries/nodes/InsightViz/InsightViz' import { QueryEditor } from '~/queries/QueryEditor/QueryEditor' +import { DataNodeLogicProps, dataNodeLogic } from '~/queries/nodes/DataNode/dataNodeLogic' +import { insightVizDataNodeKey } from '~/queries/nodes/InsightViz/InsightViz' import { Node } from '~/queries/schema/schema-general' import { isDataTableNode, isHogQLQuery, isHogQuery, isInsightVizNode } from '~/queries/utils' diff --git a/frontend/src/scenes/debug/HogDebug.tsx b/frontend/src/scenes/debug/HogDebug.tsx index 925b1b7055..5781c24738 100644 --- a/frontend/src/scenes/debug/HogDebug.tsx +++ b/frontend/src/scenes/debug/HogDebug.tsx @@ -1,16 +1,17 @@ import clsx from 'clsx' import { BindLogic, useValues } from 'kea' +import type { IDisposable } from 'monaco-editor' +import { useEffect, useRef, useState } from 'react' + import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonDivider } from 'lib/lemon-ui/LemonDivider' import { LemonTabs } from 'lib/lemon-ui/LemonTabs' import { CodeEditor } from 'lib/monaco/CodeEditor' -import type { IDisposable } from 'monaco-editor' -import { useEffect, useRef, useState } from 'react' -import { dataNodeLogic, DataNodeLogicProps } from '~/queries/nodes/DataNode/dataNodeLogic' import { ElapsedTime } from '~/queries/nodes/DataNode/ElapsedTime' import { Reload } from '~/queries/nodes/DataNode/Reload' +import { DataNodeLogicProps, dataNodeLogic } from '~/queries/nodes/DataNode/dataNodeLogic' import { HogQuery, HogQueryResponse } from '~/queries/schema/schema-general' export interface HogQueryEditorProps { diff --git a/frontend/src/scenes/debug/HogQLDebug.tsx b/frontend/src/scenes/debug/HogQLDebug.tsx index f7a5129584..8113bb281b 100644 --- a/frontend/src/scenes/debug/HogQLDebug.tsx +++ b/frontend/src/scenes/debug/HogQLDebug.tsx @@ -1,11 +1,12 @@ import { BindLogic, useValues } from 'kea' + import { LemonDivider } from 'lib/lemon-ui/LemonDivider' import { Modifiers } from 'scenes/debug/Modifiers' -import { dataNodeLogic, DataNodeLogicProps } from '~/queries/nodes/DataNode/dataNodeLogic' import { DateRange } from '~/queries/nodes/DataNode/DateRange' import { ElapsedTime } from '~/queries/nodes/DataNode/ElapsedTime' import { Reload } from '~/queries/nodes/DataNode/Reload' +import { DataNodeLogicProps, dataNodeLogic } from '~/queries/nodes/DataNode/dataNodeLogic' import { EventPropertyFilters } from '~/queries/nodes/EventsNode/EventPropertyFilters' import { HogQLQueryEditor } from '~/queries/nodes/HogQLQuery/HogQLQueryEditor' import { HogQLQuery, HogQLQueryResponse } from '~/queries/schema/schema-general' diff --git a/frontend/src/scenes/debug/QueryTabs.tsx b/frontend/src/scenes/debug/QueryTabs.tsx index acb334a0dc..32a4d55c93 100644 --- a/frontend/src/scenes/debug/QueryTabs.tsx +++ b/frontend/src/scenes/debug/QueryTabs.tsx @@ -1,13 +1,14 @@ +import { useState } from 'react' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { LemonTable } from 'lib/lemon-ui/LemonTable' import { LemonTabs, LemonTabsProps } from 'lib/lemon-ui/LemonTabs' import { LemonTag } from 'lib/lemon-ui/LemonTag' import { CodeEditor } from 'lib/monaco/CodeEditor' -import { useState } from 'react' import { ErrorBoundary } from '~/layout/ErrorBoundary' -import { Timings } from '~/queries/nodes/DataNode/ElapsedTime' import { Query } from '~/queries/Query/Query' +import { Timings } from '~/queries/nodes/DataNode/ElapsedTime' import { HogQLMetadataResponse, InsightVizNode, Node, NodeKind, QueryTiming } from '~/queries/schema/schema-general' import { isDataTableNode, isInsightQueryNode, isInsightVizNode } from '~/queries/utils' diff --git a/frontend/src/scenes/debug/debugSceneLogic.ts b/frontend/src/scenes/debug/debugSceneLogic.ts index 9a0ee52e6c..6359476c29 100644 --- a/frontend/src/scenes/debug/debugSceneLogic.ts +++ b/frontend/src/scenes/debug/debugSceneLogic.ts @@ -1,5 +1,6 @@ import { actions, kea, path, reducers } from 'kea' import { actionToUrl, urlToAction } from 'kea-router' + import { urls } from 'scenes/urls' import { stringifiedExamples } from '~/queries/examples' diff --git a/frontend/src/scenes/debug/hog/HogRepl.tsx b/frontend/src/scenes/debug/hog/HogRepl.tsx index aa692843b4..9cd6633066 100644 --- a/frontend/src/scenes/debug/hog/HogRepl.tsx +++ b/frontend/src/scenes/debug/hog/HogRepl.tsx @@ -1,14 +1,16 @@ +import { useActions, useValues } from 'kea' +import React, { useState } from 'react' + import { printHogStringOutput } from '@posthog/hogvm' import { LemonButton, LemonTable, LemonTabs } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { JSONViewer } from 'lib/components/JSONViewer' import { CodeEditorInline } from 'lib/monaco/CodeEditorInline' -import React, { useState } from 'react' import { SceneExport } from 'scenes/sceneTypes' import { renderHogQLX } from '~/queries/nodes/HogQLX/render' -import { hogReplLogic, ReplChunk as ReplChunkType } from './hogReplLogic' +import { ReplChunk as ReplChunkType, hogReplLogic } from './hogReplLogic' export interface ReplResultsTableProps { response: { diff --git a/frontend/src/scenes/debug/hog/hogReplLogic.ts b/frontend/src/scenes/debug/hog/hogReplLogic.ts index ba964fcc3b..4288c751ae 100644 --- a/frontend/src/scenes/debug/hog/hogReplLogic.ts +++ b/frontend/src/scenes/debug/hog/hogReplLogic.ts @@ -1,6 +1,8 @@ -import { newHogCallable, newHogClosure, VMState } from '@posthog/hogvm' import { actions, kea, listeners, path, reducers, selectors } from 'kea' import { actionToUrl, urlToAction } from 'kea-router' + +import { VMState, newHogCallable, newHogClosure } from '@posthog/hogvm' + import api from 'lib/api' import { execHogAsync } from 'lib/hog' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/experiments/DuplicateExperimentModal.tsx b/frontend/src/scenes/experiments/DuplicateExperimentModal.tsx index 5ea6ff15cb..0aa8066387 100644 --- a/frontend/src/scenes/experiments/DuplicateExperimentModal.tsx +++ b/frontend/src/scenes/experiments/DuplicateExperimentModal.tsx @@ -1,7 +1,9 @@ -import { IconOpenInNew } from 'lib/lemon-ui/icons' -import { LemonModal, LemonTable, Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonModal, LemonTable, Link } from '@posthog/lemon-ui' + import { LemonButton } from 'lib/lemon-ui/LemonButton' +import { IconOpenInNew } from 'lib/lemon-ui/icons' import { experimentsLogic } from 'scenes/experiments/experimentsLogic' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/experiments/Experiment.tsx b/frontend/src/scenes/experiments/Experiment.tsx index e5637405fb..8678b03e4b 100644 --- a/frontend/src/scenes/experiments/Experiment.tsx +++ b/frontend/src/scenes/experiments/Experiment.tsx @@ -1,10 +1,11 @@ import { useValues } from 'kea' + import { NotFound } from 'lib/components/NotFound' import { SceneExport } from 'scenes/sceneTypes' import { ExperimentForm } from './ExperimentForm' -import { experimentLogic, ExperimentLogicProps, FORM_MODES } from './experimentLogic' import { ExperimentView } from './ExperimentView/ExperimentView' +import { ExperimentLogicProps, FORM_MODES, experimentLogic } from './experimentLogic' export const scene: SceneExport = { component: Experiment, diff --git a/frontend/src/scenes/experiments/ExperimentCodeSnippets.tsx b/frontend/src/scenes/experiments/ExperimentCodeSnippets.tsx index 89fc99afcc..cb9e9b1cdf 100644 --- a/frontend/src/scenes/experiments/ExperimentCodeSnippets.tsx +++ b/frontend/src/scenes/experiments/ExperimentCodeSnippets.tsx @@ -1,4 +1,5 @@ import { Link } from '@posthog/lemon-ui' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' function ServerSideWarning(): JSX.Element { diff --git a/frontend/src/scenes/experiments/ExperimentForm.tsx b/frontend/src/scenes/experiments/ExperimentForm.tsx index 38fa08d440..3637ba7dfb 100644 --- a/frontend/src/scenes/experiments/ExperimentForm.tsx +++ b/frontend/src/scenes/experiments/ExperimentForm.tsx @@ -1,3 +1,7 @@ +import { useActions, useValues } from 'kea' +import { Form, Group } from 'kea-forms' +import { useState } from 'react' + import { IconPlusSmall, IconToggle, IconTrash } from '@posthog/icons' import { LemonBanner, @@ -10,19 +14,17 @@ import { Link, Tooltip, } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' -import { Form, Group } from 'kea-forms' + import { ExperimentVariantNumber } from 'lib/components/SeriesGlyph' import { MAX_EXPERIMENT_VARIANTS } from 'lib/constants' -import { groupsAccessLogic, GroupsAccessStatus } from 'lib/introductions/groupsAccessLogic' -import { IconOpenInNew } from 'lib/lemon-ui/icons' +import { GroupsAccessStatus, groupsAccessLogic } from 'lib/introductions/groupsAccessLogic' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonField } from 'lib/lemon-ui/LemonField' import { LemonRadio } from 'lib/lemon-ui/LemonRadio' import { LemonSelect } from 'lib/lemon-ui/LemonSelect' +import { IconOpenInNew } from 'lib/lemon-ui/icons' import { capitalizeFirstLetter } from 'lib/utils' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' -import { useState } from 'react' import { experimentsLogic } from 'scenes/experiments/experimentsLogic' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/experiments/ExperimentImplementationDetails.tsx b/frontend/src/scenes/experiments/ExperimentImplementationDetails.tsx index 2c58f326bb..156bea1995 100644 --- a/frontend/src/scenes/experiments/ExperimentImplementationDetails.tsx +++ b/frontend/src/scenes/experiments/ExperimentImplementationDetails.tsx @@ -1,4 +1,7 @@ +import { useState } from 'react' + import { LemonSelect, Link } from '@posthog/lemon-ui' + import { IconAndroidOS, IconAppleIOS, @@ -10,7 +13,6 @@ import { IconPython, IconRuby, } from 'lib/lemon-ui/icons' -import { useState } from 'react' import { Experiment, MultivariateFlagVariant, SDKKey } from '~/types' @@ -23,8 +25,8 @@ import { NodeJSSnippet, PHPSnippet, PythonSnippet, - ReactSnippet, RNSnippet, + ReactSnippet, RubySnippet, } from './ExperimentCodeSnippets' diff --git a/frontend/src/scenes/experiments/ExperimentMetricForm.tsx b/frontend/src/scenes/experiments/ExperimentMetricForm.tsx index a490fed289..03e4bfdee9 100644 --- a/frontend/src/scenes/experiments/ExperimentMetricForm.tsx +++ b/frontend/src/scenes/experiments/ExperimentMetricForm.tsx @@ -1,18 +1,22 @@ +import { useEffect, useState } from 'react' + import { DataWarehousePopoverField } from 'lib/components/TaxonomicFilter/types' import { LemonLabel } from 'lib/lemon-ui/LemonLabel' import { LemonRadio } from 'lib/lemon-ui/LemonRadio' +import { lemonToast } from 'lib/lemon-ui/LemonToast' import { Link } from 'lib/lemon-ui/Link' -import { ActionFilter } from 'scenes/insights/filters/ActionFilter/ActionFilter' -import { useEffect, useState } from 'react' import { Spinner } from 'lib/lemon-ui/Spinner' +import { IconOpenInNew } from 'lib/lemon-ui/icons' +import { ActionFilter } from 'scenes/insights/filters/ActionFilter/ActionFilter' +import { urls } from 'scenes/urls' import { performQuery } from '~/queries/query' import { ExperimentMetric, ExperimentMetricType, + NodeKind, isExperimentFunnelMetric, isExperimentMeanMetric, - NodeKind, } from '~/queries/schema/schema-general' import { ExperimentMetricMathType, FilterType } from '~/types' @@ -20,19 +24,15 @@ import { ExperimentMetricConversionWindowFilter } from './ExperimentMetricConver import { ExperimentMetricFunnelOrderSelector } from './ExperimentMetricFunnelOrderSelector' import { ExperimentMetricOutlierHandling } from './ExperimentMetricOutlierHandling' import { commonActionFilterProps } from './Metrics/Selectors' +import { getFilter } from './metricQueryUtils' import { filterToMetricConfig, getAllowedMathTypes, getDefaultExperimentMetric, - getMathAvailability, getEventCountQuery, + getMathAvailability, } from './utils' -import { getFilter } from './metricQueryUtils' -import { IconOpenInNew } from 'lib/lemon-ui/icons' -import { urls } from 'scenes/urls' -import { lemonToast } from 'lib/lemon-ui/LemonToast' - const loadEventCount = async ( metric: ExperimentMetric, filterTestAccounts: boolean, diff --git a/frontend/src/scenes/experiments/ExperimentMetricOutlierHandling.tsx b/frontend/src/scenes/experiments/ExperimentMetricOutlierHandling.tsx index 5571cd8a02..2e04f54784 100644 --- a/frontend/src/scenes/experiments/ExperimentMetricOutlierHandling.tsx +++ b/frontend/src/scenes/experiments/ExperimentMetricOutlierHandling.tsx @@ -1,4 +1,5 @@ import { LemonCheckbox } from '@posthog/lemon-ui' + import { LemonInput } from 'lib/lemon-ui/LemonInput' import { LemonLabel } from 'lib/lemon-ui/LemonLabel' diff --git a/frontend/src/scenes/experiments/ExperimentView/DataCollection.tsx b/frontend/src/scenes/experiments/ExperimentView/DataCollection.tsx index eea9ca74d3..f7527d14d3 100644 --- a/frontend/src/scenes/experiments/ExperimentView/DataCollection.tsx +++ b/frontend/src/scenes/experiments/ExperimentView/DataCollection.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconInfo } from '@posthog/icons' import { LemonButton, LemonDivider, LemonModal, Link, Tooltip } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { LemonProgress } from 'lib/lemon-ui/LemonProgress' import { LoadingBar } from 'lib/lemon-ui/LoadingBar' import { humanFriendlyNumber } from 'lib/utils' @@ -8,10 +10,10 @@ import { humanFriendlyNumber } from 'lib/utils' import { Experiment, InsightType } from '~/types' import { experimentLogic } from '../experimentLogic' -import { formatUnitByQuantity } from '../utils' -import { EllipsisAnimation } from './components' -import { DataCollectionCalculator } from './DataCollectionCalculator' import { modalsLogic } from '../modalsLogic' +import { formatUnitByQuantity } from '../utils' +import { DataCollectionCalculator } from './DataCollectionCalculator' +import { EllipsisAnimation } from './components' export function DataCollection(): JSX.Element { const { diff --git a/frontend/src/scenes/experiments/ExperimentView/DataCollectionCalculator.tsx b/frontend/src/scenes/experiments/ExperimentView/DataCollectionCalculator.tsx index 02483e95a4..9052c4f6d6 100644 --- a/frontend/src/scenes/experiments/ExperimentView/DataCollectionCalculator.tsx +++ b/frontend/src/scenes/experiments/ExperimentView/DataCollectionCalculator.tsx @@ -1,6 +1,8 @@ +import { BindLogic, useActions, useValues } from 'kea' + import { IconInfo } from '@posthog/icons' import { LemonBanner, LemonInput, Link, Tooltip } from '@posthog/lemon-ui' -import { BindLogic, useActions, useValues } from 'kea' + import { LemonSlider } from 'lib/lemon-ui/LemonSlider' import { humanFriendlyNumber } from 'lib/utils' import { insightLogic } from 'scenes/insights/insightLogic' @@ -10,8 +12,9 @@ import { ExperimentFunnelsQuery, ExperimentTrendsQuery, NodeKind } from '~/queri import { ExperimentIdType, InsightType } from '~/types' import { MetricInsightId } from '../constants' -import { minimumSampleSizePerVariant, recommendedExposureForCountData } from '../legacyExperimentCalculations' import { experimentLogic } from '../experimentLogic' +import { minimumSampleSizePerVariant, recommendedExposureForCountData } from '../legacyExperimentCalculations' + interface ExperimentCalculatorProps { experimentId: ExperimentIdType } diff --git a/frontend/src/scenes/experiments/ExperimentView/DistributionTable.tsx b/frontend/src/scenes/experiments/ExperimentView/DistributionTable.tsx index e1ae31f6c2..3d8312a9b9 100644 --- a/frontend/src/scenes/experiments/ExperimentView/DistributionTable.tsx +++ b/frontend/src/scenes/experiments/ExperimentView/DistributionTable.tsx @@ -1,3 +1,5 @@ +import { useActions, useValues } from 'kea' + import { IconBalance, IconFlag } from '@posthog/icons' import { LemonBanner, @@ -8,18 +10,19 @@ import { LemonTable, LemonTableColumns, } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { AuthorizedUrlList } from 'lib/components/AuthorizedUrlList/AuthorizedUrlList' import { AuthorizedUrlListType } from 'lib/components/AuthorizedUrlList/authorizedUrlListLogic' import { IconOpenInApp } from 'lib/lemon-ui/icons' -import { featureFlagLogic, FeatureFlagLogicProps } from 'scenes/feature-flags/featureFlagLogic' +import { FeatureFlagLogicProps, featureFlagLogic } from 'scenes/feature-flags/featureFlagLogic' + import { Experiment, MultivariateFlagVariant } from '~/types' import { experimentLogic } from '../experimentLogic' -import { VariantTag } from './components' +import { modalsLogic } from '../modalsLogic' import { HoldoutSelector } from './HoldoutSelector' import { VariantScreenshot } from './VariantScreenshot' -import { modalsLogic } from '../modalsLogic' +import { VariantTag } from './components' export function DistributionModal({ experimentId }: { experimentId: Experiment['id'] }): JSX.Element { const { experiment, experimentLoading } = useValues(experimentLogic({ experimentId })) diff --git a/frontend/src/scenes/experiments/ExperimentView/ExperimentDate.tsx b/frontend/src/scenes/experiments/ExperimentView/ExperimentDate.tsx index f8da128cf4..af93dbc312 100644 --- a/frontend/src/scenes/experiments/ExperimentView/ExperimentDate.tsx +++ b/frontend/src/scenes/experiments/ExperimentView/ExperimentDate.tsx @@ -1,9 +1,11 @@ +import clsx from 'clsx' +import { useState } from 'react' + import { IconPencil } from '@posthog/icons' import { LemonButton, LemonCalendarSelectInput } from '@posthog/lemon-ui' -import clsx from 'clsx' + import { TZLabel } from 'lib/components/TZLabel' import { dayjs } from 'lib/dayjs' -import { useState } from 'react' const ExperimentDate = ({ label, diff --git a/frontend/src/scenes/experiments/ExperimentView/ExperimentDates.tsx b/frontend/src/scenes/experiments/ExperimentView/ExperimentDates.tsx index b56f92ca80..8ff03d5b07 100644 --- a/frontend/src/scenes/experiments/ExperimentView/ExperimentDates.tsx +++ b/frontend/src/scenes/experiments/ExperimentView/ExperimentDates.tsx @@ -1,4 +1,5 @@ import { useActions, useValues } from 'kea' + import { TZLabel } from 'lib/components/TZLabel' import { experimentLogic } from '../experimentLogic' diff --git a/frontend/src/scenes/experiments/ExperimentView/ExperimentView.tsx b/frontend/src/scenes/experiments/ExperimentView/ExperimentView.tsx index eb6ff412ad..6c68f3d297 100644 --- a/frontend/src/scenes/experiments/ExperimentView/ExperimentView.tsx +++ b/frontend/src/scenes/experiments/ExperimentView/ExperimentView.tsx @@ -1,20 +1,14 @@ -import { LemonTabs } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonTabs } from '@posthog/lemon-ui' + import { ActivityLog } from 'lib/components/ActivityLog/ActivityLog' import { WebExperimentImplementationDetails } from 'scenes/experiments/WebExperimentImplementationDetails' import type { CachedExperimentQueryResponse } from '~/queries/schema/schema-general' import { ActivityScope } from '~/types' -import { AISummary } from '../components/AISummary' -import { - ExploreAsInsightButton, - ResultsBreakdown, - ResultsBreakdownSkeleton, - ResultsInsightInfoBanner, - ResultsQuery, -} from '../components/ResultsBreakdown' + import { ExperimentImplementationDetails } from '../ExperimentImplementationDetails' -import { experimentLogic } from '../experimentLogic' import { ExperimentMetricModal } from '../Metrics/ExperimentMetricModal' import { LegacyMetricModal } from '../Metrics/LegacyMetricModal' import { MetricSourceModal } from '../Metrics/MetricSourceModal' @@ -23,15 +17,16 @@ import { MetricsViewLegacy } from '../MetricsView/legacy/MetricsViewLegacy' import { VariantDeltaTimeseries } from '../MetricsView/legacy/VariantDeltaTimeseries' import { Metrics } from '../MetricsView/new/Metrics' import { RunningTimeCalculatorModal } from '../RunningTimeCalculator/RunningTimeCalculatorModal' -import { isLegacyExperiment, isLegacyExperimentQuery } from '../utils' +import { AISummary } from '../components/AISummary' import { - EditConclusionModal, - LegacyExploreButton, - LegacyResultsQuery, - LoadingState, - PageHeaderCustom, - StopExperimentModal, -} from './components' + ExploreAsInsightButton, + ResultsBreakdown, + ResultsBreakdownSkeleton, + ResultsInsightInfoBanner, + ResultsQuery, +} from '../components/ResultsBreakdown' +import { experimentLogic } from '../experimentLogic' +import { isLegacyExperiment, isLegacyExperimentQuery } from '../utils' import { DistributionModal, DistributionTable } from './DistributionTable' import { ExperimentHeader } from './ExperimentHeader' import { ExposureCriteriaModal } from './ExposureCriteria' @@ -40,6 +35,14 @@ import { LegacyExperimentHeader } from './LegacyExperimentHeader' import { Overview } from './Overview' import { ReleaseConditionsModal, ReleaseConditionsTable } from './ReleaseConditionsTable' import { SummaryTable } from './SummaryTable' +import { + EditConclusionModal, + LegacyExploreButton, + LegacyResultsQuery, + LoadingState, + PageHeaderCustom, + StopExperimentModal, +} from './components' const ResultsTab = (): JSX.Element => { const { diff --git a/frontend/src/scenes/experiments/ExperimentView/ExposureCriteria.tsx b/frontend/src/scenes/experiments/ExperimentView/ExposureCriteria.tsx index d6529ea829..4e7a676cbb 100644 --- a/frontend/src/scenes/experiments/ExperimentView/ExposureCriteria.tsx +++ b/frontend/src/scenes/experiments/ExperimentView/ExposureCriteria.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { LemonButton, LemonSelect, LemonTag } from '@posthog/lemon-ui' import { LemonModal } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { TestAccountFilterSwitch } from 'lib/components/TestAccountFiltersSwitch' import { ActionFilter } from 'scenes/insights/filters/ActionFilter/ActionFilter' @@ -10,11 +12,11 @@ import { teamLogic } from 'scenes/teamLogic' import { NodeKind } from '~/queries/schema/schema-general' import { FilterType } from '~/types' -import { experimentLogic } from '../experimentLogic' import { commonActionFilterProps } from '../Metrics/Selectors' -import { exposureConfigToFilter, filterToExposureConfig } from '../utils' -import { modalsLogic } from '../modalsLogic' import { SelectableCard } from '../components/SelectableCard' +import { experimentLogic } from '../experimentLogic' +import { modalsLogic } from '../modalsLogic' +import { exposureConfigToFilter, filterToExposureConfig } from '../utils' export function ExposureCriteriaModal(): JSX.Element { const { experiment } = useValues(experimentLogic) diff --git a/frontend/src/scenes/experiments/ExperimentView/Exposures.tsx b/frontend/src/scenes/experiments/ExperimentView/Exposures.tsx index 871207a0a9..a18736086a 100644 --- a/frontend/src/scenes/experiments/ExperimentView/Exposures.tsx +++ b/frontend/src/scenes/experiments/ExperimentView/Exposures.tsx @@ -1,18 +1,20 @@ -import { IconCorrelationAnalysis, IconInfo, IconPencil } from '@posthog/icons' -import { LemonButton, LemonTable, Spinner, Tooltip } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' +import { useEffect, useRef } from 'react' + +import { IconCorrelationAnalysis, IconInfo, IconPencil } from '@posthog/icons' +import { LemonButton, LemonTable, Spinner, Tooltip } from '@posthog/lemon-ui' + import { Chart, ChartConfiguration } from 'lib/Chart' import { getSeriesBackgroundColor, getSeriesColor } from 'lib/colors' import { dayjs } from 'lib/dayjs' import { humanFriendlyNumber } from 'lib/utils' -import { useEffect, useRef } from 'react' import { ExperimentExposureCriteria } from '~/queries/schema/schema-general' import { experimentLogic } from '../experimentLogic' -import { VariantTag } from './components' import { modalsLogic } from '../modalsLogic' +import { VariantTag } from './components' function getExposureCriteriaLabel(exposureCriteria: ExperimentExposureCriteria | undefined): string { const exposureConfig = exposureCriteria?.exposure_config diff --git a/frontend/src/scenes/experiments/ExperimentView/HoldoutSelector.tsx b/frontend/src/scenes/experiments/ExperimentView/HoldoutSelector.tsx index 9293c8b61c..2f373fabc7 100644 --- a/frontend/src/scenes/experiments/ExperimentView/HoldoutSelector.tsx +++ b/frontend/src/scenes/experiments/ExperimentView/HoldoutSelector.tsx @@ -1,6 +1,7 @@ +import { useActions, useValues } from 'kea' + import { IconInfo } from '@posthog/icons' import { LemonSelect, Tooltip } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' import { experimentLogic } from '../experimentLogic' diff --git a/frontend/src/scenes/experiments/ExperimentView/Info.tsx b/frontend/src/scenes/experiments/ExperimentView/Info.tsx index fd6bfc6bbc..1dbda29f79 100644 --- a/frontend/src/scenes/experiments/ExperimentView/Info.tsx +++ b/frontend/src/scenes/experiments/ExperimentView/Info.tsx @@ -1,25 +1,27 @@ -import { IconGear, IconPencil, IconRefresh, IconWarning } from '@posthog/icons' -import { LemonButton, LemonModal, Link, ProfilePicture, Tooltip } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' +import { useEffect, useState } from 'react' + +import { IconGear, IconPencil, IconRefresh, IconWarning } from '@posthog/icons' +import { LemonButton, LemonModal, Link, ProfilePicture, Tooltip } from '@posthog/lemon-ui' + import { CopyToClipboardInline } from 'lib/components/CopyToClipboard' import { FEATURE_FLAGS } from 'lib/constants' import { dayjs } from 'lib/dayjs' -import { IconOpenInNew } from 'lib/lemon-ui/icons' +import { usePeriodicRerender } from 'lib/hooks/usePeriodicRerender' import { LemonTextArea } from 'lib/lemon-ui/LemonTextArea/LemonTextArea' -import { useEffect, useState } from 'react' +import { IconOpenInNew } from 'lib/lemon-ui/icons' import { urls } from 'scenes/urls' import { ExperimentStatsMethod, ProgressStatus } from '~/types' -import { usePeriodicRerender } from 'lib/hooks/usePeriodicRerender' import { CONCLUSION_DISPLAY_CONFIG } from '../constants' import { experimentLogic } from '../experimentLogic' import { getExperimentStatus } from '../experimentsLogic' import { modalsLogic } from '../modalsLogic' -import { StatusTag } from './components' import { ExperimentDates } from './ExperimentDates' import { StatsMethodModal } from './StatsMethodModal' +import { StatusTag } from './components' export const ExperimentLastRefresh = ({ isRefreshing, diff --git a/frontend/src/scenes/experiments/ExperimentView/Overview.tsx b/frontend/src/scenes/experiments/ExperimentView/Overview.tsx index 8641dbb8a9..a0db4496a1 100644 --- a/frontend/src/scenes/experiments/ExperimentView/Overview.tsx +++ b/frontend/src/scenes/experiments/ExperimentView/Overview.tsx @@ -7,8 +7,8 @@ import { } from '~/queries/schema/schema-general' import { ExperimentIdType } from '~/types' -import { getHighestProbabilityVariant, getIndexForVariant } from '../legacyExperimentCalculations' import { experimentLogic } from '../experimentLogic' +import { getHighestProbabilityVariant, getIndexForVariant } from '../legacyExperimentCalculations' import { VariantTag } from './components' export function WinningVariantText({ diff --git a/frontend/src/scenes/experiments/ExperimentView/PreLaunchChecklist.tsx b/frontend/src/scenes/experiments/ExperimentView/PreLaunchChecklist.tsx index fe1e55b1ba..d34021eb6c 100644 --- a/frontend/src/scenes/experiments/ExperimentView/PreLaunchChecklist.tsx +++ b/frontend/src/scenes/experiments/ExperimentView/PreLaunchChecklist.tsx @@ -1,6 +1,7 @@ +import { useActions, useValues } from 'kea' + import { IconCheckCircle } from '@posthog/icons' import { LemonButton } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' import { experimentLogic } from '../experimentLogic' import { modalsLogic } from '../modalsLogic' diff --git a/frontend/src/scenes/experiments/ExperimentView/ReleaseConditionsTable.tsx b/frontend/src/scenes/experiments/ExperimentView/ReleaseConditionsTable.tsx index be00b54a7b..e4771879e7 100644 --- a/frontend/src/scenes/experiments/ExperimentView/ReleaseConditionsTable.tsx +++ b/frontend/src/scenes/experiments/ExperimentView/ReleaseConditionsTable.tsx @@ -1,8 +1,10 @@ +import { useActions, useValues } from 'kea' + import { IconFlag } from '@posthog/icons' import { LemonBanner, LemonButton, LemonModal, LemonTable, LemonTableColumns, LemonTag } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' -import { featureFlagLogic, FeatureFlagLogicProps } from 'scenes/feature-flags/featureFlagLogic' + import { FeatureFlagReleaseConditions } from 'scenes/feature-flags/FeatureFlagReleaseConditions' +import { FeatureFlagLogicProps, featureFlagLogic } from 'scenes/feature-flags/featureFlagLogic' import { groupsModel } from '~/models/groupsModel' import { Experiment, FeatureFlagGroupType } from '~/types' diff --git a/frontend/src/scenes/experiments/ExperimentView/RunningTime.tsx b/frontend/src/scenes/experiments/ExperimentView/RunningTime.tsx index b21cb51ea8..11ee096ea4 100644 --- a/frontend/src/scenes/experiments/ExperimentView/RunningTime.tsx +++ b/frontend/src/scenes/experiments/ExperimentView/RunningTime.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconCalculator, IconPencil } from '@posthog/icons' import { LemonButton } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { LemonProgress } from 'lib/lemon-ui/LemonProgress' import { humanFriendlyNumber } from 'lib/utils' diff --git a/frontend/src/scenes/experiments/ExperimentView/StatsMethodModal.tsx b/frontend/src/scenes/experiments/ExperimentView/StatsMethodModal.tsx index 3211b8ade3..4e75e436b3 100644 --- a/frontend/src/scenes/experiments/ExperimentView/StatsMethodModal.tsx +++ b/frontend/src/scenes/experiments/ExperimentView/StatsMethodModal.tsx @@ -1,12 +1,13 @@ +import { useActions, useValues } from 'kea' + import { LemonButton } from '@posthog/lemon-ui' import { LemonModal } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' import { ExperimentStatsMethod } from '~/types' +import { SelectableCard } from '../components/SelectableCard' import { experimentLogic } from '../experimentLogic' import { modalsLogic } from '../modalsLogic' -import { SelectableCard } from '../components/SelectableCard' export function StatsMethodModal(): JSX.Element { const { experiment, statsMethod } = useValues(experimentLogic) diff --git a/frontend/src/scenes/experiments/ExperimentView/SummaryTable.tsx b/frontend/src/scenes/experiments/ExperimentView/SummaryTable.tsx index b3a2808b62..a61053bbfa 100644 --- a/frontend/src/scenes/experiments/ExperimentView/SummaryTable.tsx +++ b/frontend/src/scenes/experiments/ExperimentView/SummaryTable.tsx @@ -1,12 +1,13 @@ -import { IconInfo, IconRewindPlay } from '@posthog/icons' -import { LemonButton, LemonTable, LemonTableColumns, LemonTag, Tooltip } from '@posthog/lemon-ui' import { useValues } from 'kea' import { router } from 'kea-router' -import { EntityFilterInfo } from 'lib/components/EntityFilterInfo' +import posthog from 'posthog-js' +import { IconInfo, IconRewindPlay } from '@posthog/icons' +import { LemonButton, LemonTable, LemonTableColumns, LemonTag, Tooltip } from '@posthog/lemon-ui' + +import { EntityFilterInfo } from 'lib/components/EntityFilterInfo' import { LemonProgress } from 'lib/lemon-ui/LemonProgress' import { humanFriendlyNumber } from 'lib/utils' -import posthog from 'posthog-js' import { urls } from 'scenes/urls' import { @@ -15,7 +16,6 @@ import { ExperimentTrendsQuery, NodeKind, } from '~/queries/schema/schema-general' - import { FilterLogicalOperator, FunnelExperimentVariant, @@ -25,6 +25,7 @@ import { TrendExperimentVariant, } from '~/types' +import { experimentLogic } from '../experimentLogic' import { calculateDelta, conversionRateForVariant, @@ -33,7 +34,6 @@ import { exposureCountDataForVariant, getHighestProbabilityVariant, } from '../legacyExperimentCalculations' -import { experimentLogic } from '../experimentLogic' import { getViewRecordingFilters, getViewRecordingFiltersLegacy, isLegacyExperimentQuery } from '../utils' import { VariantTag } from './components' diff --git a/frontend/src/scenes/experiments/ExperimentView/VariantScreenshot.tsx b/frontend/src/scenes/experiments/ExperimentView/VariantScreenshot.tsx index f938fa4cfb..a83ec201e8 100644 --- a/frontend/src/scenes/experiments/ExperimentView/VariantScreenshot.tsx +++ b/frontend/src/scenes/experiments/ExperimentView/VariantScreenshot.tsx @@ -1,8 +1,10 @@ +import { useActions, useValues } from 'kea' +import { useState } from 'react' + import { IconX } from '@posthog/icons' import { LemonButton, LemonDivider, LemonFileInput, LemonModal, LemonSkeleton, lemonToast } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { useUploadFiles } from 'lib/hooks/useUploadFiles' -import { useState } from 'react' import { experimentLogic } from '../experimentLogic' import { VariantTag } from './components' diff --git a/frontend/src/scenes/experiments/ExperimentView/components.tsx b/frontend/src/scenes/experiments/ExperimentView/components.tsx index 3556e49e4b..1792300331 100644 --- a/frontend/src/scenes/experiments/ExperimentView/components.tsx +++ b/frontend/src/scenes/experiments/ExperimentView/components.tsx @@ -1,3 +1,7 @@ +import clsx from 'clsx' +import { useActions, useValues } from 'kea' +import { useEffect, useState } from 'react' + import { IconFlask } from '@posthog/icons' import { LemonBanner, @@ -14,17 +18,16 @@ import { Link, Tooltip, } from '@posthog/lemon-ui' -import clsx from 'clsx' -import { useActions, useValues } from 'kea' + import { InsightLabel } from 'lib/components/InsightLabel' import { PageHeader } from 'lib/components/PageHeader' import { PropertyFilterButton } from 'lib/components/PropertyFilters/components/PropertyFilterButton' -import { IconAreaChart } from 'lib/lemon-ui/icons' +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { More } from 'lib/lemon-ui/LemonButton/More' import { LoadingBar } from 'lib/lemon-ui/LoadingBar' -import { useEffect, useState } from 'react' -import { urls } from 'scenes/urls' +import { IconAreaChart } from 'lib/lemon-ui/icons' import { featureFlagLogic } from 'scenes/feature-flags/featureFlagLogic' +import { urls } from 'scenes/urls' import { groupsModel } from '~/models/groupsModel' import { Query } from '~/queries/Query/Query' @@ -47,14 +50,13 @@ import { ProgressStatus, } from '~/types' -import { CONCLUSION_DISPLAY_CONFIG, EXPERIMENT_VARIANT_MULTIPLE } from '../constants' import { DuplicateExperimentModal } from '../DuplicateExperimentModal' +import { CONCLUSION_DISPLAY_CONFIG, EXPERIMENT_VARIANT_MULTIPLE } from '../constants' import { experimentLogic } from '../experimentLogic' import { getExperimentStatusColor } from '../experimentsLogic' import { getIndexForVariant } from '../legacyExperimentCalculations' import { modalsLogic } from '../modalsLogic' import { getExperimentInsightColour } from '../utils' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' export function VariantTag({ experimentId, diff --git a/frontend/src/scenes/experiments/Experiments.tsx b/frontend/src/scenes/experiments/Experiments.tsx index dda8a0cf36..7955780c6b 100644 --- a/frontend/src/scenes/experiments/Experiments.tsx +++ b/frontend/src/scenes/experiments/Experiments.tsx @@ -1,34 +1,37 @@ -import { LemonDialog, LemonInput, LemonSelect, LemonTag, Tooltip } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { router } from 'kea-router' +import { useState } from 'react' +import { match } from 'ts-pattern' + +import { LemonDialog, LemonInput, LemonSelect, LemonTag, Tooltip } from '@posthog/lemon-ui' + import { ActivityLog } from 'lib/components/ActivityLog/ActivityLog' -import { ExperimentsHog } from 'lib/components/hedgehogs' import { MemberSelect } from 'lib/components/MemberSelect' import { PageHeader } from 'lib/components/PageHeader' import { ProductIntroduction } from 'lib/components/ProductIntroduction/ProductIntroduction' +import { ExperimentsHog } from 'lib/components/hedgehogs' import { dayjs } from 'lib/dayjs' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { More } from 'lib/lemon-ui/LemonButton/More' import { LemonDivider } from 'lib/lemon-ui/LemonDivider' import { LemonTable, LemonTableColumn, LemonTableColumns } from 'lib/lemon-ui/LemonTable' -import { atColumn, createdAtColumn, createdByColumn } from 'lib/lemon-ui/LemonTable/columnUtils' import { LemonTableLink } from 'lib/lemon-ui/LemonTable/LemonTableLink' +import { atColumn, createdAtColumn, createdByColumn } from 'lib/lemon-ui/LemonTable/columnUtils' import { LemonTabs } from 'lib/lemon-ui/LemonTabs' import { Link } from 'lib/lemon-ui/Link' import { deleteWithUndo } from 'lib/utils/deleteWithUndo' import stringWithWBR from 'lib/utils/stringWithWBR' -import { useState } from 'react' +import { featureFlagLogic } from 'scenes/feature-flags/featureFlagLogic' import { SceneExport } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' -import { match } from 'ts-pattern' -import { ActivityScope, Experiment, ExperimentsTabs, ProductKey, ProgressStatus } from '~/types' -import { ExperimentsSettings } from './ExperimentsSettings' -import { featureFlagLogic } from 'scenes/feature-flags/featureFlagLogic' +import { ActivityScope, Experiment, ExperimentsTabs, ProductKey, ProgressStatus } from '~/types' + import { DuplicateExperimentModal } from './DuplicateExperimentModal' -import { EXPERIMENTS_PER_PAGE, ExperimentsFilters, experimentsLogic, getExperimentStatus } from './experimentsLogic' import { StatusTag } from './ExperimentView/components' +import { ExperimentsSettings } from './ExperimentsSettings' import { Holdouts } from './Holdouts' +import { EXPERIMENTS_PER_PAGE, ExperimentsFilters, experimentsLogic, getExperimentStatus } from './experimentsLogic' import { isLegacyExperiment } from './utils' export const scene: SceneExport = { diff --git a/frontend/src/scenes/experiments/Holdouts.tsx b/frontend/src/scenes/experiments/Holdouts.tsx index 2890d8f0bd..840f40574d 100644 --- a/frontend/src/scenes/experiments/Holdouts.tsx +++ b/frontend/src/scenes/experiments/Holdouts.tsx @@ -1,3 +1,6 @@ +import { useActions, useValues } from 'kea' +import { useState } from 'react' + import { IconPencil, IconTrash } from '@posthog/icons' import { LemonBanner, @@ -10,13 +13,12 @@ import { LemonTable, LemonTableColumns, } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { LemonSlider } from 'lib/lemon-ui/LemonSlider' -import { useState } from 'react' import { ExperimentHoldoutType } from '~/types' -import { holdoutsLogic, NEW_HOLDOUT } from './holdoutsLogic' +import { NEW_HOLDOUT, holdoutsLogic } from './holdoutsLogic' export function Holdouts(): JSX.Element { const { holdouts, holdoutsLoading, holdout } = useValues(holdoutsLogic) diff --git a/frontend/src/scenes/experiments/Metrics/ExperimentMetricModal.tsx b/frontend/src/scenes/experiments/Metrics/ExperimentMetricModal.tsx index 14a8746e1f..50fdcb2320 100644 --- a/frontend/src/scenes/experiments/Metrics/ExperimentMetricModal.tsx +++ b/frontend/src/scenes/experiments/Metrics/ExperimentMetricModal.tsx @@ -1,12 +1,13 @@ -import { LemonButton, LemonDialog, LemonInput, LemonLabel, LemonModal } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { useCallback } from 'react' +import { LemonButton, LemonDialog, LemonInput, LemonLabel, LemonModal } from '@posthog/lemon-ui' + import { ExperimentMetric } from '~/queries/schema/schema-general' import { Experiment } from '~/types' -import { experimentLogic } from '../experimentLogic' import { ExperimentMetricForm } from '../ExperimentMetricForm' +import { experimentLogic } from '../experimentLogic' import { modalsLogic } from '../modalsLogic' export function ExperimentMetricModal({ diff --git a/frontend/src/scenes/experiments/Metrics/FunnelsMetricForm.tsx b/frontend/src/scenes/experiments/Metrics/FunnelsMetricForm.tsx index d95b99352a..373b0c7929 100644 --- a/frontend/src/scenes/experiments/Metrics/FunnelsMetricForm.tsx +++ b/frontend/src/scenes/experiments/Metrics/FunnelsMetricForm.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { LemonLabel } from '@posthog/lemon-ui' import { LemonInput } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { TestAccountFilterSwitch } from 'lib/components/TestAccountFiltersSwitch' import { EXPERIMENT_DEFAULT_DURATION } from 'lib/constants' @@ -10,19 +12,20 @@ import { MathAvailability } from 'scenes/insights/filters/ActionFilter/ActionFil import { getHogQLValue } from 'scenes/insights/filters/AggregationSelect' import { teamLogic } from 'scenes/teamLogic' +import { Query } from '~/queries/Query/Query' import { actionsAndEventsToSeries } from '~/queries/nodes/InsightQuery/utils/filtersToQueryNode' import { queryNodeToFilter } from '~/queries/nodes/InsightQuery/utils/queryNodeToFilter' -import { Query } from '~/queries/Query/Query' import { ExperimentFunnelsQuery, NodeKind } from '~/queries/schema/schema-general' import { BreakdownAttributionType, FilterType } from '~/types' import { experimentLogic } from '../experimentLogic' import { - commonActionFilterProps, FunnelAggregationSelect, FunnelAttributionSelect, FunnelConversionWindowFilter, + commonActionFilterProps, } from './Selectors' + export function FunnelsMetricForm({ isSecondary = false }: { isSecondary?: boolean }): JSX.Element { const { currentTeam } = useValues(teamLogic) const { experiment, isExperimentRunning, editingPrimaryMetricIndex, editingSecondaryMetricIndex } = diff --git a/frontend/src/scenes/experiments/Metrics/LegacyMetricModal.tsx b/frontend/src/scenes/experiments/Metrics/LegacyMetricModal.tsx index 236692b23d..11cab33a0b 100644 --- a/frontend/src/scenes/experiments/Metrics/LegacyMetricModal.tsx +++ b/frontend/src/scenes/experiments/Metrics/LegacyMetricModal.tsx @@ -1,14 +1,15 @@ -import { LemonButton, LemonDialog, LemonModal, LemonSelect } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' +import { LemonButton, LemonDialog, LemonModal, LemonSelect } from '@posthog/lemon-ui' + import { ExperimentFunnelsQuery, ExperimentTrendsQuery } from '~/queries/schema/schema-general' import { Experiment, InsightType } from '~/types' import { experimentLogic } from '../experimentLogic' +import { modalsLogic } from '../modalsLogic' import { getDefaultFunnelsMetric, getDefaultTrendsMetric } from '../utils' import { FunnelsMetricForm } from './FunnelsMetricForm' import { TrendsMetricForm } from './TrendsMetricForm' -import { modalsLogic } from '../modalsLogic' export function LegacyMetricModal({ experimentId, diff --git a/frontend/src/scenes/experiments/Metrics/MetricSourceModal.tsx b/frontend/src/scenes/experiments/Metrics/MetricSourceModal.tsx index f32f3cc46c..342c6b7f8f 100644 --- a/frontend/src/scenes/experiments/Metrics/MetricSourceModal.tsx +++ b/frontend/src/scenes/experiments/Metrics/MetricSourceModal.tsx @@ -1,11 +1,12 @@ -import { LemonModal } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' +import { LemonModal } from '@posthog/lemon-ui' + import { Experiment } from '~/types' import { experimentLogic } from '../experimentLogic' -import { getDefaultFunnelMetric, getDefaultFunnelsMetric } from '../utils' import { modalsLogic } from '../modalsLogic' +import { getDefaultFunnelMetric, getDefaultFunnelsMetric } from '../utils' export function MetricSourceModal({ experimentId, diff --git a/frontend/src/scenes/experiments/Metrics/Selectors.tsx b/frontend/src/scenes/experiments/Metrics/Selectors.tsx index 217f6d52c8..8c03805128 100644 --- a/frontend/src/scenes/experiments/Metrics/Selectors.tsx +++ b/frontend/src/scenes/experiments/Metrics/Selectors.tsx @@ -1,6 +1,8 @@ +import { useValues } from 'kea' + import { IconInfo } from '@posthog/icons' import { LemonInput, LemonSelect, LemonSelectOption, LemonSelectSection, Link } from '@posthog/lemon-ui' -import { useValues } from 'kea' + import { HogQLEditor } from 'lib/components/HogQLEditor/HogQLEditor' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { groupsAccessLogic } from 'lib/introductions/groupsAccessLogic' diff --git a/frontend/src/scenes/experiments/Metrics/SharedMetricModal.tsx b/frontend/src/scenes/experiments/Metrics/SharedMetricModal.tsx index 887966c05e..f0df61ad5d 100644 --- a/frontend/src/scenes/experiments/Metrics/SharedMetricModal.tsx +++ b/frontend/src/scenes/experiments/Metrics/SharedMetricModal.tsx @@ -1,20 +1,22 @@ -import { LemonBanner, LemonButton, LemonLabel, LemonModal, Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' -import { ObjectTags } from 'lib/components/ObjectTags/ObjectTags' -import { IconOpenInNew } from 'lib/lemon-ui/icons' -import { LemonTable } from 'lib/lemon-ui/LemonTable' import { useState } from 'react' + +import { LemonBanner, LemonButton, LemonLabel, LemonModal, Link } from '@posthog/lemon-ui' + +import { ObjectTags } from 'lib/components/ObjectTags/ObjectTags' +import { LemonTable } from 'lib/lemon-ui/LemonTable' +import { IconOpenInNew } from 'lib/lemon-ui/icons' import { urls } from 'scenes/urls' import { userLogic } from 'scenes/userLogic' import { NodeKind } from '~/queries/schema/schema-general' import { AvailableFeature, Experiment } from '~/types' +import { MetricDisplayFunnels, MetricDisplayTrends } from '../ExperimentView/components' +import { SharedMetric } from '../SharedMetrics/sharedMetricLogic' import { EXPERIMENT_MAX_PRIMARY_METRICS, EXPERIMENT_MAX_SECONDARY_METRICS } from '../constants' import { experimentLogic } from '../experimentLogic' -import { MetricDisplayFunnels, MetricDisplayTrends } from '../ExperimentView/components' import { modalsLogic } from '../modalsLogic' -import { SharedMetric } from '../SharedMetrics/sharedMetricLogic' export function SharedMetricModal({ experimentId, diff --git a/frontend/src/scenes/experiments/Metrics/TrendsMetricForm.tsx b/frontend/src/scenes/experiments/Metrics/TrendsMetricForm.tsx index d9fd6a89ac..28619295c6 100644 --- a/frontend/src/scenes/experiments/Metrics/TrendsMetricForm.tsx +++ b/frontend/src/scenes/experiments/Metrics/TrendsMetricForm.tsx @@ -1,23 +1,25 @@ -import { LemonInput, LemonLabel, LemonTabs, LemonTag } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' +import { useState } from 'react' + +import { LemonInput, LemonLabel, LemonTabs, LemonTag } from '@posthog/lemon-ui' + import { TestAccountFilterSwitch } from 'lib/components/TestAccountFiltersSwitch' import { EXPERIMENT_DEFAULT_DURATION } from 'lib/constants' import { dayjs } from 'lib/dayjs' import { LemonBanner } from 'lib/lemon-ui/LemonBanner' -import { useState } from 'react' import { ActionFilter } from 'scenes/insights/filters/ActionFilter/ActionFilter' import { MathAvailability } from 'scenes/insights/filters/ActionFilter/ActionFilterRow/ActionFilterRow' import { teamLogic } from 'scenes/teamLogic' +import { Query } from '~/queries/Query/Query' import { actionsAndEventsToSeries } from '~/queries/nodes/InsightQuery/utils/filtersToQueryNode' import { queryNodeToFilter } from '~/queries/nodes/InsightQuery/utils/queryNodeToFilter' -import { Query } from '~/queries/Query/Query' import { ExperimentTrendsQuery, InsightQueryNode, NodeKind } from '~/queries/schema/schema-general' import { BaseMathType, ChartDisplayType, FilterType } from '~/types' +import { SelectableCard } from '../components/SelectableCard' import { LEGACY_EXPERIMENT_ALLOWED_MATH_TYPES } from '../constants' import { experimentLogic } from '../experimentLogic' -import { SelectableCard } from '../components/SelectableCard' import { commonActionFilterProps } from './Selectors' export function TrendsMetricForm({ isSecondary = false }: { isSecondary?: boolean }): JSX.Element { diff --git a/frontend/src/scenes/experiments/MetricsView/legacy/ChartModal.tsx b/frontend/src/scenes/experiments/MetricsView/legacy/ChartModal.tsx index fd08042e42..e883a740af 100644 --- a/frontend/src/scenes/experiments/MetricsView/legacy/ChartModal.tsx +++ b/frontend/src/scenes/experiments/MetricsView/legacy/ChartModal.tsx @@ -6,6 +6,9 @@ import { ExperimentTrendsQuery, NodeKind, } from '~/queries/schema/schema-general' +import { SignificanceText, WinningVariantText } from '~/scenes/experiments/ExperimentView/Overview' +import { SummaryTable } from '~/scenes/experiments/ExperimentView/SummaryTable' +import { LegacyExploreButton, LegacyResultsQuery } from '~/scenes/experiments/ExperimentView/components' import { ExploreAsInsightButton, ResultsBreakdown, @@ -13,9 +16,6 @@ import { ResultsInsightInfoBanner, ResultsQuery, } from '~/scenes/experiments/components/ResultsBreakdown' -import { LegacyExploreButton, LegacyResultsQuery } from '~/scenes/experiments/ExperimentView/components' -import { SignificanceText, WinningVariantText } from '~/scenes/experiments/ExperimentView/Overview' -import { SummaryTable } from '~/scenes/experiments/ExperimentView/SummaryTable' import type { Experiment, ExperimentIdType } from '~/types' interface ChartModalProps { diff --git a/frontend/src/scenes/experiments/MetricsView/legacy/DeltaChart.tsx b/frontend/src/scenes/experiments/MetricsView/legacy/DeltaChart.tsx index f94bcefbdf..121a1098f1 100644 --- a/frontend/src/scenes/experiments/MetricsView/legacy/DeltaChart.tsx +++ b/frontend/src/scenes/experiments/MetricsView/legacy/DeltaChart.tsx @@ -1,18 +1,22 @@ +import { useActions, useValues } from 'kea' +import { createContext, useContext, useState } from 'react' + import { IconGraph } from '@posthog/icons' import { LemonButton } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { FEATURE_FLAGS } from 'lib/constants' -import { createContext, useContext, useState } from 'react' +import { modalsLogic } from 'scenes/experiments/modalsLogic' import { Experiment, ExperimentIdType, FunnelExperimentVariant, InsightType, TrendExperimentVariant } from '~/types' -import { modalsLogic } from 'scenes/experiments/modalsLogic' +import { VariantTag } from '../../ExperimentView/components' import { EXPERIMENT_MAX_PRIMARY_METRICS, EXPERIMENT_MAX_SECONDARY_METRICS, EXPERIMENT_MIN_EXPOSURES_FOR_RESULTS, EXPERIMENT_MIN_METRIC_VALUE_FOR_RESULTS, } from '../../constants' +import { experimentLogic } from '../../experimentLogic' import { calculateDelta, conversionRateForVariant, @@ -20,13 +24,11 @@ import { credibleIntervalForVariant, exposureCountDataForVariant, } from '../../legacyExperimentCalculations' -import { experimentLogic } from '../../experimentLogic' -import { VariantTag } from '../../ExperimentView/components' import { ChartEmptyState } from '../shared/ChartEmptyState' import { ChartLoadingState } from '../shared/ChartLoadingState' -import { useChartColors } from '../shared/colors' import { GridLines } from '../shared/GridLines' import { MetricHeader } from '../shared/MetricHeader' +import { useChartColors } from '../shared/colors' import { ChartModal } from './ChartModal' import { MetricsChartLayout } from './MetricsChartLayout' import { SignificanceHighlight } from './SignificanceHighlight' diff --git a/frontend/src/scenes/experiments/MetricsView/legacy/MetricsViewLegacy.tsx b/frontend/src/scenes/experiments/MetricsView/legacy/MetricsViewLegacy.tsx index 7ee7306e5d..5c6332dba2 100644 --- a/frontend/src/scenes/experiments/MetricsView/legacy/MetricsViewLegacy.tsx +++ b/frontend/src/scenes/experiments/MetricsView/legacy/MetricsViewLegacy.tsx @@ -1,11 +1,13 @@ +import { useValues } from 'kea' + import { IconInfo } from '@posthog/icons' import { LemonDivider, Tooltip } from '@posthog/lemon-ui' -import { useValues } from 'kea' + import { IconAreaChart } from 'lib/lemon-ui/icons' import { EXPERIMENT_MAX_PRIMARY_METRICS, EXPERIMENT_MAX_SECONDARY_METRICS } from '../../constants' -import { credibleIntervalForVariant } from '../../legacyExperimentCalculations' import { experimentLogic } from '../../experimentLogic' +import { credibleIntervalForVariant } from '../../legacyExperimentCalculations' import { AddPrimaryMetric, AddSecondaryMetric } from '../shared/AddMetric' import { getNiceTickValues } from '../shared/utils' import { DeltaChart } from './DeltaChart' diff --git a/frontend/src/scenes/experiments/MetricsView/legacy/SignificanceHighlight.tsx b/frontend/src/scenes/experiments/MetricsView/legacy/SignificanceHighlight.tsx index 7d69f88ba5..30f3030d82 100644 --- a/frontend/src/scenes/experiments/MetricsView/legacy/SignificanceHighlight.tsx +++ b/frontend/src/scenes/experiments/MetricsView/legacy/SignificanceHighlight.tsx @@ -1,8 +1,9 @@ -import { IconMinus, IconTrending } from '@posthog/icons' -import { LemonTagType, Tooltip } from '@posthog/lemon-ui' import clsx from 'clsx' import { useValues } from 'kea' +import { IconMinus, IconTrending } from '@posthog/icons' +import { LemonTagType, Tooltip } from '@posthog/lemon-ui' + import { experimentLogic } from '../../experimentLogic' interface SignificanceHighlightProps { diff --git a/frontend/src/scenes/experiments/MetricsView/legacy/VariantDeltaTimeseries.tsx b/frontend/src/scenes/experiments/MetricsView/legacy/VariantDeltaTimeseries.tsx index 429599ffbc..9c4d0be3ab 100644 --- a/frontend/src/scenes/experiments/MetricsView/legacy/VariantDeltaTimeseries.tsx +++ b/frontend/src/scenes/experiments/MetricsView/legacy/VariantDeltaTimeseries.tsx @@ -1,8 +1,9 @@ import { useActions, useValues } from 'kea' +import { useEffect } from 'react' + import { Chart, ChartConfiguration } from 'lib/Chart' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonModal } from 'lib/lemon-ui/LemonModal' -import { useEffect } from 'react' import { modalsLogic } from 'scenes/experiments/modalsLogic' const DELTA = [0.16, 0.17, 0.15, 0.16, 0.14, 0.15, 0.145, 0.15, 0.155, 0.148, 0.15, 0.147, 0.152, 0.15] diff --git a/frontend/src/scenes/experiments/MetricsView/legacy/VariantTooltip.tsx b/frontend/src/scenes/experiments/MetricsView/legacy/VariantTooltip.tsx index 1533a7e72c..ad1cc08694 100644 --- a/frontend/src/scenes/experiments/MetricsView/legacy/VariantTooltip.tsx +++ b/frontend/src/scenes/experiments/MetricsView/legacy/VariantTooltip.tsx @@ -4,8 +4,8 @@ import { humanFriendlyNumber } from 'lib/utils' import { InsightType, TrendExperimentVariant } from '~/types' import { ExperimentIdType } from '~/types' -import { calculateDelta } from '../../legacyExperimentCalculations' import { VariantTag } from '../../ExperimentView/components' +import { calculateDelta } from '../../legacyExperimentCalculations' interface VariantTooltipProps { tooltipData: { diff --git a/frontend/src/scenes/experiments/MetricsView/new/ChartCell.tsx b/frontend/src/scenes/experiments/MetricsView/new/ChartCell.tsx index 420b8a883d..3230198172 100644 --- a/frontend/src/scenes/experiments/MetricsView/new/ChartCell.tsx +++ b/frontend/src/scenes/experiments/MetricsView/new/ChartCell.tsx @@ -1,25 +1,25 @@ +import { generateViolinPath } from '../legacy/violinUtils' import { useChartColors } from '../shared/colors' import { type ExperimentVariantResult, - getVariantInterval, - getIntervalBounds, getDelta, - isBayesianResult, + getIntervalBounds, getNiceTickValues, + getVariantInterval, + isBayesianResult, } from '../shared/utils' -import { generateViolinPath } from '../legacy/violinUtils' +import { ChartGradients } from './ChartGradients' +import { GridLines } from './GridLines' import { + CELL_HEIGHT, + CHART_BAR_OPACITY, + CHART_CELL_BAR_HEIGHT_PERCENT, + CHART_CELL_VIEW_BOX_HEIGHT, + GRID_LINES_OPACITY, SVG_EDGE_MARGIN, VIEW_BOX_WIDTH, - CHART_CELL_VIEW_BOX_HEIGHT, - CHART_CELL_BAR_HEIGHT_PERCENT, - CHART_BAR_OPACITY, - GRID_LINES_OPACITY, - CELL_HEIGHT, } from './constants' -import { GridLines } from './GridLines' import { useAxisScale } from './useAxisScale' -import { ChartGradients } from './ChartGradients' interface ChartCellProps { variantResult: ExperimentVariantResult diff --git a/frontend/src/scenes/experiments/MetricsView/new/MetricRowGroup.tsx b/frontend/src/scenes/experiments/MetricsView/new/MetricRowGroup.tsx index e4dc8c58a0..3eb813dd72 100644 --- a/frontend/src/scenes/experiments/MetricsView/new/MetricRowGroup.tsx +++ b/frontend/src/scenes/experiments/MetricsView/new/MetricRowGroup.tsx @@ -1,24 +1,31 @@ -import { IconTrending } from '@posthog/icons' -import { IconTrendingDown } from 'lib/lemon-ui/icons' -import { humanFriendlyNumber } from 'lib/utils' import { useRef, useState } from 'react' import { createPortal } from 'react-dom' + +import { IconTrending } from '@posthog/icons' + +import { IconTrendingDown } from 'lib/lemon-ui/icons' +import { humanFriendlyNumber } from 'lib/utils' + import { ExperimentMetric, NewExperimentQueryResponse } from '~/queries/schema/schema-general' import { Experiment, InsightType } from '~/types' + import { ChartEmptyState } from '../shared/ChartEmptyState' import { ChartLoadingState } from '../shared/ChartLoadingState' -import { useChartColors } from '../shared/colors' import { MetricHeader } from '../shared/MetricHeader' +import { useChartColors } from '../shared/colors' import { + type ExperimentVariantResult, formatDeltaPercent, + getDelta, getNiceTickValues, isDeltaPositive, isSignificant, - type ExperimentVariantResult, - getDelta, } from '../shared/utils' import { ChartCell } from './ChartCell' - +import { DetailsButton } from './DetailsButton' +import { DetailsModal } from './DetailsModal' +import { GridLines } from './GridLines' +import { renderTooltipContent } from './MetricRowGroupTooltip' import { CELL_HEIGHT, CHART_CELL_VIEW_BOX_HEIGHT, @@ -26,10 +33,6 @@ import { SVG_EDGE_MARGIN, VIEW_BOX_WIDTH, } from './constants' -import { DetailsButton } from './DetailsButton' -import { DetailsModal } from './DetailsModal' -import { GridLines } from './GridLines' -import { renderTooltipContent } from './MetricRowGroupTooltip' import { useAxisScale } from './useAxisScale' interface MetricRowGroupProps { diff --git a/frontend/src/scenes/experiments/MetricsView/new/MetricRowGroupTooltip.tsx b/frontend/src/scenes/experiments/MetricsView/new/MetricRowGroupTooltip.tsx index 9c2ad3931a..cc42656e7f 100644 --- a/frontend/src/scenes/experiments/MetricsView/new/MetricRowGroupTooltip.tsx +++ b/frontend/src/scenes/experiments/MetricsView/new/MetricRowGroupTooltip.tsx @@ -1,15 +1,16 @@ import { LemonTag } from 'lib/lemon-ui/LemonTag' import { humanFriendlyNumber } from 'lib/utils' + import { + type ExperimentVariantResult, formatChanceToWin, + formatDeltaPercent, + formatIntervalPercent, formatPValue, getIntervalLabel, - formatIntervalPercent, - isSignificant, - isDeltaPositive, - formatDeltaPercent, isBayesianResult, - type ExperimentVariantResult, + isDeltaPositive, + isSignificant, } from '../shared/utils' export const renderTooltipContent = (variantResult: ExperimentVariantResult): JSX.Element => { diff --git a/frontend/src/scenes/experiments/MetricsView/new/Metrics.tsx b/frontend/src/scenes/experiments/MetricsView/new/Metrics.tsx index 073ed82238..7b450eef8f 100644 --- a/frontend/src/scenes/experiments/MetricsView/new/Metrics.tsx +++ b/frontend/src/scenes/experiments/MetricsView/new/Metrics.tsx @@ -1,11 +1,13 @@ +import { useValues } from 'kea' + import { IconInfo } from '@posthog/icons' import { Tooltip } from '@posthog/lemon-ui' -import { useValues } from 'kea' + import { IconAreaChart } from 'lib/lemon-ui/icons' +import { EXPERIMENT_MAX_PRIMARY_METRICS, EXPERIMENT_MAX_SECONDARY_METRICS } from 'scenes/experiments/constants' import { ExperimentMetric } from '~/queries/schema/schema-general' -import { EXPERIMENT_MAX_PRIMARY_METRICS, EXPERIMENT_MAX_SECONDARY_METRICS } from 'scenes/experiments/constants' import { experimentLogic } from '../../experimentLogic' import { AddPrimaryMetric, AddSecondaryMetric } from '../shared/AddMetric' import { MetricsTable } from './MetricsTable' diff --git a/frontend/src/scenes/experiments/MetricsView/new/MetricsTable.tsx b/frontend/src/scenes/experiments/MetricsView/new/MetricsTable.tsx index 88e6fa9de8..a5b41208f1 100644 --- a/frontend/src/scenes/experiments/MetricsView/new/MetricsTable.tsx +++ b/frontend/src/scenes/experiments/MetricsView/new/MetricsTable.tsx @@ -1,5 +1,7 @@ import { useActions, useValues } from 'kea' + import { EXPERIMENT_MAX_PRIMARY_METRICS, EXPERIMENT_MAX_SECONDARY_METRICS } from 'scenes/experiments/constants' + import { ExperimentFunnelsQuery, ExperimentMetric, @@ -7,8 +9,9 @@ import { NewExperimentQueryResponse, } from '~/queries/schema/schema-general' import { InsightType } from '~/types' + import { experimentLogic } from '../../experimentLogic' -import { getVariantInterval, type ExperimentVariantResult } from '../shared/utils' +import { type ExperimentVariantResult, getVariantInterval } from '../shared/utils' import { MetricRowGroup } from './MetricRowGroup' import { TableHeader } from './TableHeader' diff --git a/frontend/src/scenes/experiments/MetricsView/new/ResultDetails.tsx b/frontend/src/scenes/experiments/MetricsView/new/ResultDetails.tsx index 4af39ddda8..93de2bbea8 100644 --- a/frontend/src/scenes/experiments/MetricsView/new/ResultDetails.tsx +++ b/frontend/src/scenes/experiments/MetricsView/new/ResultDetails.tsx @@ -1,10 +1,13 @@ +import { router } from 'kea-router' +import posthog from 'posthog-js' + import { IconRewindPlay } from '@posthog/icons' import { LemonButton, LemonTable, LemonTableColumns } from '@posthog/lemon-ui' -import { router } from 'kea-router' + import { humanFriendlyNumber } from 'lib/utils' -import posthog from 'posthog-js' import { ResultsBreakdown } from 'scenes/experiments/components/ResultsBreakdown/ResultsBreakdown' import { ResultsBreakdownSkeleton } from 'scenes/experiments/components/ResultsBreakdown/ResultsBreakdownSkeleton' +import { ResultsInsightInfoBanner } from 'scenes/experiments/components/ResultsBreakdown/ResultsInsightInfoBanner' import { ResultsQuery } from 'scenes/experiments/components/ResultsBreakdown/ResultsQuery' import { getViewRecordingFilters } from 'scenes/experiments/utils' import { urls } from 'scenes/urls' @@ -12,15 +15,14 @@ import { urls } from 'scenes/urls' import { CachedExperimentQueryResponse, ExperimentMetric } from '~/queries/schema/schema-general' import { Experiment, FilterLogicalOperator, RecordingUniversalFilters, ReplayTabs } from '~/types' -import { ResultsInsightInfoBanner } from 'scenes/experiments/components/ResultsBreakdown/ResultsInsightInfoBanner' import { - formatPValue, + ExperimentVariantResult, formatChanceToWin, + formatPValue, + getIntervalLabel, + getVariantInterval, isBayesianResult, isFrequentistResult, - getVariantInterval, - getIntervalLabel, - ExperimentVariantResult, } from '../shared/utils' export function ResultDetails({ diff --git a/frontend/src/scenes/experiments/MetricsView/new/TableHeader.tsx b/frontend/src/scenes/experiments/MetricsView/new/TableHeader.tsx index 34bb253796..d07b8dda13 100644 --- a/frontend/src/scenes/experiments/MetricsView/new/TableHeader.tsx +++ b/frontend/src/scenes/experiments/MetricsView/new/TableHeader.tsx @@ -1,8 +1,9 @@ import { useEffect, useMemo, useState } from 'react' + import { useSvgResizeObserver } from '../hooks/useSvgResizeObserver' import { getNiceTickValues } from '../shared/utils' -import { SVG_EDGE_MARGIN, TICK_FONT_SIZE_NEW, TICK_PANEL_HEIGHT, VIEW_BOX_WIDTH } from './constants' import { TickLabels } from './TickLabels' +import { SVG_EDGE_MARGIN, TICK_FONT_SIZE_NEW, TICK_PANEL_HEIGHT, VIEW_BOX_WIDTH } from './constants' import { useAxisScale } from './useAxisScale' interface TableHeaderProps { diff --git a/frontend/src/scenes/experiments/MetricsView/new/useAxisScale.ts b/frontend/src/scenes/experiments/MetricsView/new/useAxisScale.ts index a5ffb523dc..7d29729464 100644 --- a/frontend/src/scenes/experiments/MetricsView/new/useAxisScale.ts +++ b/frontend/src/scenes/experiments/MetricsView/new/useAxisScale.ts @@ -1,4 +1,5 @@ import { useCallback } from 'react' + import { valueToXCoordinate } from '../shared/utils' /** diff --git a/frontend/src/scenes/experiments/MetricsView/shared/AddMetric.tsx b/frontend/src/scenes/experiments/MetricsView/shared/AddMetric.tsx index 8dcefafdc7..4a55b071c1 100644 --- a/frontend/src/scenes/experiments/MetricsView/shared/AddMetric.tsx +++ b/frontend/src/scenes/experiments/MetricsView/shared/AddMetric.tsx @@ -1,9 +1,10 @@ -import { IconPlus } from '@posthog/icons' import { useActions, useValues } from 'kea' -import { LemonButton } from 'lib/lemon-ui/LemonButton' -import { experimentLogic } from 'scenes/experiments/experimentLogic' +import { IconPlus } from '@posthog/icons' + +import { LemonButton } from 'lib/lemon-ui/LemonButton' import { EXPERIMENT_MAX_PRIMARY_METRICS, EXPERIMENT_MAX_SECONDARY_METRICS } from 'scenes/experiments/constants' +import { experimentLogic } from 'scenes/experiments/experimentLogic' import { modalsLogic } from 'scenes/experiments/modalsLogic' export function AddPrimaryMetric(): JSX.Element { diff --git a/frontend/src/scenes/experiments/MetricsView/shared/ErrorChecklist.tsx b/frontend/src/scenes/experiments/MetricsView/shared/ErrorChecklist.tsx index 81ed5335e6..10d4b77b39 100644 --- a/frontend/src/scenes/experiments/MetricsView/shared/ErrorChecklist.tsx +++ b/frontend/src/scenes/experiments/MetricsView/shared/ErrorChecklist.tsx @@ -1,7 +1,9 @@ -import { IconCheck, IconX } from '@posthog/icons' -import { Link, Tooltip } from '@posthog/lemon-ui' import { useValues } from 'kea' import { combineUrl } from 'kea-router/lib/utils' + +import { IconCheck, IconX } from '@posthog/icons' +import { Link, Tooltip } from '@posthog/lemon-ui' + import { IconOpenInNew } from 'lib/lemon-ui/icons' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/experiments/MetricsView/shared/MetricHeader.tsx b/frontend/src/scenes/experiments/MetricsView/shared/MetricHeader.tsx index 2e5056fb83..c45a4addb0 100644 --- a/frontend/src/scenes/experiments/MetricsView/shared/MetricHeader.tsx +++ b/frontend/src/scenes/experiments/MetricsView/shared/MetricHeader.tsx @@ -1,11 +1,14 @@ +import { useActions } from 'kea' + import { IconCopy, IconPencil } from '@posthog/icons' import { LemonButton, LemonDialog, LemonTag } from '@posthog/lemon-ui' -import { useActions } from 'kea' -import { urls } from 'scenes/urls' import { EXPERIMENT_MAX_PRIMARY_METRICS, EXPERIMENT_MAX_SECONDARY_METRICS } from 'scenes/experiments/constants' import { modalsLogic } from 'scenes/experiments/modalsLogic' +import { urls } from 'scenes/urls' + import type { ExperimentMetric } from '~/queries/schema/schema-general' + import { MetricTitle } from './MetricTitle' import { getMetricTag } from './utils' diff --git a/frontend/src/scenes/experiments/RunningTimeCalculator/EventSelectorStep.tsx b/frontend/src/scenes/experiments/RunningTimeCalculator/EventSelectorStep.tsx index fd636ae4de..18f51c9a71 100644 --- a/frontend/src/scenes/experiments/RunningTimeCalculator/EventSelectorStep.tsx +++ b/frontend/src/scenes/experiments/RunningTimeCalculator/EventSelectorStep.tsx @@ -5,8 +5,8 @@ import { MathAvailability } from 'scenes/insights/filters/ActionFilter/ActionFil import { NodeKind } from '~/queries/schema/schema-general' import { FilterType } from '~/types' -import { ExposureEstimateConfig } from './runningTimeCalculatorLogic' import { RunningTimeCalculatorModalStep } from './RunningTimeCalculatorModalStep' +import { ExposureEstimateConfig } from './runningTimeCalculatorLogic' /** * Converts an ExposureEstimateConfig to a FilterType diff --git a/frontend/src/scenes/experiments/RunningTimeCalculator/FunnelMetricDataPanel.tsx b/frontend/src/scenes/experiments/RunningTimeCalculator/FunnelMetricDataPanel.tsx index fdbf810920..740ae25b56 100644 --- a/frontend/src/scenes/experiments/RunningTimeCalculator/FunnelMetricDataPanel.tsx +++ b/frontend/src/scenes/experiments/RunningTimeCalculator/FunnelMetricDataPanel.tsx @@ -1,5 +1,7 @@ -import { IconInfo } from '@posthog/icons' import { useActions, useValues } from 'kea' + +import { IconInfo } from '@posthog/icons' + import { LemonInput } from 'lib/lemon-ui/LemonInput' import { LemonSegmentedButton } from 'lib/lemon-ui/LemonSegmentedButton' import { Tooltip } from 'lib/lemon-ui/Tooltip' diff --git a/frontend/src/scenes/experiments/RunningTimeCalculator/MetricSelectorStep.tsx b/frontend/src/scenes/experiments/RunningTimeCalculator/MetricSelectorStep.tsx index 8bb3ae441b..728163e652 100644 --- a/frontend/src/scenes/experiments/RunningTimeCalculator/MetricSelectorStep.tsx +++ b/frontend/src/scenes/experiments/RunningTimeCalculator/MetricSelectorStep.tsx @@ -1,14 +1,15 @@ -import { LemonSelect, LemonTag, Spinner } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' +import { LemonSelect, LemonTag, Spinner } from '@posthog/lemon-ui' + import { ExperimentMetric, ExperimentMetricType, NodeKind } from '~/queries/schema/schema-general' -import { experimentLogic } from '../experimentLogic' import { MetricTitle } from '../MetricsView/shared/MetricTitle' +import { experimentLogic } from '../experimentLogic' import { FunnelMetricDataPanel } from './FunnelMetricDataPanel' import { MeanMetricDataPanel } from './MeanMetricDataPanel' -import { ConversionRateInputType, runningTimeCalculatorLogic } from './runningTimeCalculatorLogic' import { RunningTimeCalculatorModalStep } from './RunningTimeCalculatorModalStep' +import { ConversionRateInputType, runningTimeCalculatorLogic } from './runningTimeCalculatorLogic' type MetricOption = { metric: ExperimentMetric diff --git a/frontend/src/scenes/experiments/RunningTimeCalculator/RunningTimeCalculatorModal.tsx b/frontend/src/scenes/experiments/RunningTimeCalculator/RunningTimeCalculatorModal.tsx index 3a1e443139..86739c0966 100644 --- a/frontend/src/scenes/experiments/RunningTimeCalculator/RunningTimeCalculatorModal.tsx +++ b/frontend/src/scenes/experiments/RunningTimeCalculator/RunningTimeCalculatorModal.tsx @@ -1,15 +1,18 @@ -import { LemonInput, LemonModal } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonInput, LemonModal } from '@posthog/lemon-ui' + import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { humanFriendlyNumber } from 'lib/utils' import { experimentLogic } from '../experimentLogic' +import { modalsLogic } from '../modalsLogic' import { EventSelectorStep } from './EventSelectorStep' import { MetricSelectorStep } from './MetricSelectorStep' -import { ConversionRateInputType, runningTimeCalculatorLogic } from './runningTimeCalculatorLogic' import { RunningTimeCalculatorModalFooter } from './RunningTimeCalculatorModalFooter' import { RunningTimeCalculatorModalStep } from './RunningTimeCalculatorModalStep' -import { modalsLogic } from '../modalsLogic' +import { ConversionRateInputType, runningTimeCalculatorLogic } from './runningTimeCalculatorLogic' + export function RunningTimeCalculatorModal(): JSX.Element { /** * Modal open/close is controlled from parent component. diff --git a/frontend/src/scenes/experiments/RunningTimeCalculator/components.tsx b/frontend/src/scenes/experiments/RunningTimeCalculator/components.tsx index 0a0ca74188..5e5f91e1a1 100644 --- a/frontend/src/scenes/experiments/RunningTimeCalculator/components.tsx +++ b/frontend/src/scenes/experiments/RunningTimeCalculator/components.tsx @@ -1,5 +1,6 @@ import { IconInfo } from '@posthog/icons' import { Tooltip } from '@posthog/lemon-ui' + import { humanFriendlyNumber } from 'lib/utils' import { TIMEFRAME_HISTORICAL_DATA_DAYS } from './runningTimeCalculatorLogic' diff --git a/frontend/src/scenes/experiments/RunningTimeCalculator/runningTimeCalculatorLogic.test.ts b/frontend/src/scenes/experiments/RunningTimeCalculator/runningTimeCalculatorLogic.test.ts index df366122e9..e844b5314b 100644 --- a/frontend/src/scenes/experiments/RunningTimeCalculator/runningTimeCalculatorLogic.test.ts +++ b/frontend/src/scenes/experiments/RunningTimeCalculator/runningTimeCalculatorLogic.test.ts @@ -1,4 +1,5 @@ import { expectLogic } from 'kea-test-utils' + import { experimentLogic } from 'scenes/experiments/experimentLogic' import { ExperimentMetric, ExperimentMetricType, NodeKind } from '~/queries/schema/schema-general' diff --git a/frontend/src/scenes/experiments/RunningTimeCalculator/runningTimeCalculatorLogic.tsx b/frontend/src/scenes/experiments/RunningTimeCalculator/runningTimeCalculatorLogic.tsx index 0fa6b4f1a6..f24d5b1795 100644 --- a/frontend/src/scenes/experiments/RunningTimeCalculator/runningTimeCalculatorLogic.tsx +++ b/frontend/src/scenes/experiments/RunningTimeCalculator/runningTimeCalculatorLogic.tsx @@ -1,22 +1,19 @@ import equal from 'fast-deep-equal' import { actions, afterMount, connect, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' + import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { DEFAULT_MDE, experimentLogic } from 'scenes/experiments/experimentLogic' + import { performQuery } from '~/queries/query' import { ExperimentMetric, FunnelsQuery, - isExperimentFunnelMetric, - isExperimentMeanMetric, TrendsQuery, TrendsQueryResponse, + isExperimentFunnelMetric, + isExperimentMeanMetric, } from '~/queries/schema/schema-general' -import { AnyPropertyFilter, BaseMathType, Experiment, ExperimentMetricMathType, FunnelVizType } from '~/types' - -import { calculateRecommendedSampleSize, calculateVariance } from './experimentStatisticsUtils' -import type { runningTimeCalculatorLogicType } from './runningTimeCalculatorLogicType' - import { addExposureToQuery, compose, @@ -24,6 +21,10 @@ import { getEventNode, getQuery, } from '~/scenes/experiments/metricQueryUtils' +import { AnyPropertyFilter, BaseMathType, Experiment, ExperimentMetricMathType, FunnelVizType } from '~/types' + +import { calculateRecommendedSampleSize, calculateVariance } from './experimentStatisticsUtils' +import type { runningTimeCalculatorLogicType } from './runningTimeCalculatorLogicType' export const TIMEFRAME_HISTORICAL_DATA_DAYS = 14 export const VARIANCE_SCALING_FACTOR_TOTAL_COUNT = 2 diff --git a/frontend/src/scenes/experiments/SharedMetrics/LegacySharedFunnelsMetricForm.tsx b/frontend/src/scenes/experiments/SharedMetrics/LegacySharedFunnelsMetricForm.tsx index 6be1413120..4a9f201357 100644 --- a/frontend/src/scenes/experiments/SharedMetrics/LegacySharedFunnelsMetricForm.tsx +++ b/frontend/src/scenes/experiments/SharedMetrics/LegacySharedFunnelsMetricForm.tsx @@ -1,5 +1,7 @@ -import { LemonBanner } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonBanner } from '@posthog/lemon-ui' + import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { TestAccountFilterSwitch } from 'lib/components/TestAccountFiltersSwitch' import { EXPERIMENT_DEFAULT_DURATION } from 'lib/constants' @@ -8,17 +10,17 @@ import { MathAvailability } from 'scenes/insights/filters/ActionFilter/ActionFil import { getHogQLValue } from 'scenes/insights/filters/AggregationSelect' import { teamLogic } from 'scenes/teamLogic' +import { Query } from '~/queries/Query/Query' import { actionsAndEventsToSeries } from '~/queries/nodes/InsightQuery/utils/filtersToQueryNode' import { queryNodeToFilter } from '~/queries/nodes/InsightQuery/utils/queryNodeToFilter' -import { Query } from '~/queries/Query/Query' import { ExperimentFunnelsQuery, NodeKind } from '~/queries/schema/schema-general' import { BreakdownAttributionType, FilterType } from '~/types' import { - commonActionFilterProps, FunnelAggregationSelect, FunnelAttributionSelect, FunnelConversionWindowFilter, + commonActionFilterProps, } from '../Metrics/Selectors' import { sharedMetricLogic } from './sharedMetricLogic' diff --git a/frontend/src/scenes/experiments/SharedMetrics/LegacySharedTrendsMetricForm.tsx b/frontend/src/scenes/experiments/SharedMetrics/LegacySharedTrendsMetricForm.tsx index 772d7df09a..8c40bd4be9 100644 --- a/frontend/src/scenes/experiments/SharedMetrics/LegacySharedTrendsMetricForm.tsx +++ b/frontend/src/scenes/experiments/SharedMetrics/LegacySharedTrendsMetricForm.tsx @@ -1,22 +1,24 @@ +import { useActions, useValues } from 'kea' +import { useState } from 'react' + import { IconCheckCircle } from '@posthog/icons' import { LemonBanner, LemonTabs, LemonTag } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { TestAccountFilterSwitch } from 'lib/components/TestAccountFiltersSwitch' import { EXPERIMENT_DEFAULT_DURATION } from 'lib/constants' import { dayjs } from 'lib/dayjs' -import { useState } from 'react' import { ActionFilter } from 'scenes/insights/filters/ActionFilter/ActionFilter' import { MathAvailability } from 'scenes/insights/filters/ActionFilter/ActionFilterRow/ActionFilterRow' import { teamLogic } from 'scenes/teamLogic' +import { Query } from '~/queries/Query/Query' import { actionsAndEventsToSeries } from '~/queries/nodes/InsightQuery/utils/filtersToQueryNode' import { queryNodeToFilter } from '~/queries/nodes/InsightQuery/utils/queryNodeToFilter' -import { Query } from '~/queries/Query/Query' import { ExperimentTrendsQuery, InsightQueryNode, NodeKind } from '~/queries/schema/schema-general' import { BaseMathType, ChartDisplayType, FilterType } from '~/types' -import { LEGACY_EXPERIMENT_ALLOWED_MATH_TYPES } from '../constants' import { commonActionFilterProps } from '../Metrics/Selectors' +import { LEGACY_EXPERIMENT_ALLOWED_MATH_TYPES } from '../constants' import { sharedMetricLogic } from './sharedMetricLogic' export function LegacySharedTrendsMetricForm(): JSX.Element { diff --git a/frontend/src/scenes/experiments/SharedMetrics/SharedMetric.tsx b/frontend/src/scenes/experiments/SharedMetrics/SharedMetric.tsx index 088d0019a3..225a84ad8f 100644 --- a/frontend/src/scenes/experiments/SharedMetrics/SharedMetric.tsx +++ b/frontend/src/scenes/experiments/SharedMetrics/SharedMetric.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconCheckCircle } from '@posthog/icons' import { LemonButton, LemonDialog, LemonInput, LemonLabel, Spinner } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { ObjectTags } from 'lib/components/ObjectTags/ObjectTags' import { SceneExport } from 'scenes/sceneTypes' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/experiments/SharedMetrics/SharedMetrics.tsx b/frontend/src/scenes/experiments/SharedMetrics/SharedMetrics.tsx index 77eec52703..8a6891ac3a 100644 --- a/frontend/src/scenes/experiments/SharedMetrics/SharedMetrics.tsx +++ b/frontend/src/scenes/experiments/SharedMetrics/SharedMetrics.tsx @@ -1,3 +1,6 @@ +import { useValues } from 'kea' +import { router } from 'kea-router' + import { IconArrowLeft, IconCopy, IconPencil } from '@posthog/icons' import { LemonBanner, @@ -8,11 +11,10 @@ import { LemonTag, Tooltip, } from '@posthog/lemon-ui' -import { useValues } from 'kea' -import { router } from 'kea-router' + import { ObjectTags } from 'lib/components/ObjectTags/ObjectTags' -import { createdAtColumn, createdByColumn } from 'lib/lemon-ui/LemonTable/columnUtils' import { LemonTableLink } from 'lib/lemon-ui/LemonTable/LemonTableLink' +import { createdAtColumn, createdByColumn } from 'lib/lemon-ui/LemonTable/columnUtils' import stringWithWBR from 'lib/utils/stringWithWBR' import { SceneExport } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' @@ -24,6 +26,7 @@ import { AvailableFeature } from '~/types' import { isLegacySharedMetric } from '../utils' import { SharedMetric } from './sharedMetricLogic' import { sharedMetricsLogic } from './sharedMetricsLogic' + export const scene: SceneExport = { component: SharedMetrics, logic: sharedMetricsLogic, diff --git a/frontend/src/scenes/experiments/SharedMetrics/sharedMetricLogic.tsx b/frontend/src/scenes/experiments/SharedMetrics/sharedMetricLogic.tsx index c76691ccac..9586533748 100644 --- a/frontend/src/scenes/experiments/SharedMetrics/sharedMetricLogic.tsx +++ b/frontend/src/scenes/experiments/SharedMetrics/sharedMetricLogic.tsx @@ -1,7 +1,9 @@ -import { lemonToast } from '@posthog/lemon-ui' import { actions, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { router, urlToAction } from 'kea-router' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' diff --git a/frontend/src/scenes/experiments/SharedMetrics/sharedMetricsLogic.tsx b/frontend/src/scenes/experiments/SharedMetrics/sharedMetricsLogic.tsx index 4d8becc00d..b2b5b43245 100644 --- a/frontend/src/scenes/experiments/SharedMetrics/sharedMetricsLogic.tsx +++ b/frontend/src/scenes/experiments/SharedMetrics/sharedMetricsLogic.tsx @@ -1,5 +1,6 @@ import { connect, events, kea, path } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import type { SharedMetric } from './sharedMetricLogic' diff --git a/frontend/src/scenes/experiments/WebExperimentImplementationDetails.tsx b/frontend/src/scenes/experiments/WebExperimentImplementationDetails.tsx index 096858a421..94cd5b5686 100644 --- a/frontend/src/scenes/experiments/WebExperimentImplementationDetails.tsx +++ b/frontend/src/scenes/experiments/WebExperimentImplementationDetails.tsx @@ -1,8 +1,8 @@ import { AuthorizedUrlList } from 'lib/components/AuthorizedUrlList/AuthorizedUrlList' import { AuthorizedUrlListType } from 'lib/components/AuthorizedUrlList/authorizedUrlListLogic' -import { IconOpenInApp } from 'lib/lemon-ui/icons' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonDialog } from 'lib/lemon-ui/LemonDialog' +import { IconOpenInApp } from 'lib/lemon-ui/icons' import { Experiment } from '~/types' diff --git a/frontend/src/scenes/experiments/activity-descriptions/experimentChangeDescription.tsx b/frontend/src/scenes/experiments/activity-descriptions/experimentChangeDescription.tsx index 7e6ff2ef86..a6378a8818 100644 --- a/frontend/src/scenes/experiments/activity-descriptions/experimentChangeDescription.tsx +++ b/frontend/src/scenes/experiments/activity-descriptions/experimentChangeDescription.tsx @@ -1,10 +1,12 @@ import clsx from 'clsx' +import { match } from 'ts-pattern' + import { ActivityChange } from 'lib/components/ActivityLog/humanizeActivity' import { dayjs } from 'lib/dayjs' import { Link } from 'lib/lemon-ui/Link' import { CONCLUSION_DISPLAY_CONFIG } from 'scenes/experiments/constants' import { urls } from 'scenes/urls' -import { match } from 'ts-pattern' + import { Experiment, ExperimentConclusion } from '~/types' const ExperimentConclusionTag = ({ conclusion }: { conclusion: ExperimentConclusion }): JSX.Element => ( diff --git a/frontend/src/scenes/experiments/activity-descriptions/sharedMetricChangeDescription.tsx b/frontend/src/scenes/experiments/activity-descriptions/sharedMetricChangeDescription.tsx index 4ee81aa11e..b95bf484a8 100644 --- a/frontend/src/scenes/experiments/activity-descriptions/sharedMetricChangeDescription.tsx +++ b/frontend/src/scenes/experiments/activity-descriptions/sharedMetricChangeDescription.tsx @@ -1,7 +1,9 @@ +import { match } from 'ts-pattern' + import { ActivityChange } from 'lib/components/ActivityLog/humanizeActivity' import { Link } from 'lib/lemon-ui/Link' import { urls } from 'scenes/urls' -import { match } from 'ts-pattern' + import { SharedMetric } from '../SharedMetrics/sharedMetricLogic' /** diff --git a/frontend/src/scenes/experiments/components/AISummary/AISummary.tsx b/frontend/src/scenes/experiments/components/AISummary/AISummary.tsx index d8522fcc44..ae962a4312 100644 --- a/frontend/src/scenes/experiments/components/AISummary/AISummary.tsx +++ b/frontend/src/scenes/experiments/components/AISummary/AISummary.tsx @@ -1,15 +1,18 @@ +import { useActions, useValues } from 'kea' + import { IconSparkles } from '@posthog/icons' import { LemonButton } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { ExperimentsHog } from 'lib/components/hedgehogs' import { useFeatureFlag } from 'lib/hooks/useFeatureFlag' import { LemonCard } from 'lib/lemon-ui/LemonCard' - import { experimentLogic } from 'scenes/experiments/experimentLogic' // import { maxGlobalLogic } from 'scenes/max/maxGlobalLogic' import { MaxTool } from 'scenes/max/MaxTool' import { AIConsentPopoverWrapper } from 'scenes/settings/organization/AIConsentPopoverWrapper' + import { ExperimentIdType } from '~/types' + import { experimentSummaryLogic } from './experimentSummaryLogic' /** diff --git a/frontend/src/scenes/experiments/components/AISummary/experimentSummaryLogic.ts b/frontend/src/scenes/experiments/components/AISummary/experimentSummaryLogic.ts index d8a8349fb7..f81eb3e2c4 100644 --- a/frontend/src/scenes/experiments/components/AISummary/experimentSummaryLogic.ts +++ b/frontend/src/scenes/experiments/components/AISummary/experimentSummaryLogic.ts @@ -1,9 +1,12 @@ import { actions, connect, kea, listeners, path, props, reducers, selectors } from 'kea' + import api from 'lib/api' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' import { experimentLogic } from 'scenes/experiments/experimentLogic' + import type { CachedNewExperimentQueryResponse } from '~/queries/schema/schema-general' import type { ExperimentIdType } from '~/types' + import type { experimentSummaryLogicType } from './experimentSummaryLogicType' export function formatExperimentResultsForAI( diff --git a/frontend/src/scenes/experiments/components/ResultsBreakdown/ExploreAsInsightButton.tsx b/frontend/src/scenes/experiments/components/ResultsBreakdown/ExploreAsInsightButton.tsx index 674ec83140..b41ddfbe0d 100644 --- a/frontend/src/scenes/experiments/components/ResultsBreakdown/ExploreAsInsightButton.tsx +++ b/frontend/src/scenes/experiments/components/ResultsBreakdown/ExploreAsInsightButton.tsx @@ -1,5 +1,5 @@ -import { IconAreaChart } from 'lib/lemon-ui/icons' import { LemonButton } from 'lib/lemon-ui/LemonButton' +import { IconAreaChart } from 'lib/lemon-ui/icons' import { urls } from 'scenes/urls' import type { ResultBreakdownRenderProps } from './types' diff --git a/frontend/src/scenes/experiments/components/ResultsBreakdown/ResultsBreakdownContent.tsx b/frontend/src/scenes/experiments/components/ResultsBreakdown/ResultsBreakdownContent.tsx index 6943e4ea0f..49fceacd0e 100644 --- a/frontend/src/scenes/experiments/components/ResultsBreakdown/ResultsBreakdownContent.tsx +++ b/frontend/src/scenes/experiments/components/ResultsBreakdown/ResultsBreakdownContent.tsx @@ -1,5 +1,7 @@ import { useValues } from 'kea' +import { isNewExperimentResponse } from 'scenes/experiments/experimentLogic' + import { CachedExperimentQueryResponse, CachedNewExperimentQueryResponse, @@ -8,7 +10,6 @@ import { } from '~/queries/schema/schema-general' import { FunnelStep } from '~/types' -import { isNewExperimentResponse } from 'scenes/experiments/experimentLogic' import { resultsBreakdownLogic } from './resultsBreakdownLogic' import type { ResultBreakdownRenderProps } from './types' diff --git a/frontend/src/scenes/experiments/components/ResultsBreakdown/resultsBreakdownLogic.ts b/frontend/src/scenes/experiments/components/ResultsBreakdown/resultsBreakdownLogic.ts index d69f32c394..ba47922cf3 100644 --- a/frontend/src/scenes/experiments/components/ResultsBreakdown/resultsBreakdownLogic.ts +++ b/frontend/src/scenes/experiments/components/ResultsBreakdown/resultsBreakdownLogic.ts @@ -1,7 +1,9 @@ import { actions, afterMount, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' +import { P, match } from 'ts-pattern' + import { FunnelLayout } from 'lib/constants' -import { match, P } from 'ts-pattern' +import { experimentLogic } from 'scenes/experiments/experimentLogic' import { performQuery } from '~/queries/query' import type { @@ -11,7 +13,7 @@ import type { InsightVizNode, TrendsQuery, } from '~/queries/schema/schema-general' -import { ExperimentMetricType, isExperimentFunnelMetric, NodeKind } from '~/queries/schema/schema-general' +import { ExperimentMetricType, NodeKind, isExperimentFunnelMetric } from '~/queries/schema/schema-general' import { addExposureToMetric, compose, @@ -29,7 +31,6 @@ import { StepOrderValue, } from '~/types' -import { experimentLogic } from 'scenes/experiments/experimentLogic' import type { resultsBreakdownLogicType } from './resultsBreakdownLogicType' const filterFunnelSteps = (steps: FunnelStep[], variants: string[]): FunnelStep[] => diff --git a/frontend/src/scenes/experiments/components/SelectableCard.tsx b/frontend/src/scenes/experiments/components/SelectableCard.tsx index b4ccdbbb62..17664fd701 100644 --- a/frontend/src/scenes/experiments/components/SelectableCard.tsx +++ b/frontend/src/scenes/experiments/components/SelectableCard.tsx @@ -1,7 +1,9 @@ +import { ReactNode } from 'react' + import { IconCheckCircle } from '@posthog/icons' + import { Tooltip } from 'lib/lemon-ui/Tooltip' import { cn } from 'lib/utils/css-classes' -import { ReactNode } from 'react' type SelectableCardProps = { title: string diff --git a/frontend/src/scenes/experiments/experimentActivityDescriber.tsx b/frontend/src/scenes/experiments/experimentActivityDescriber.tsx index 66e2626e83..4bbea19649 100644 --- a/frontend/src/scenes/experiments/experimentActivityDescriber.tsx +++ b/frontend/src/scenes/experiments/experimentActivityDescriber.tsx @@ -1,15 +1,18 @@ -import { ActivityLogItem, HumanizedChange, userNameForLogItem } from 'lib/components/ActivityLog/humanizeActivity' -import { SentenceList } from 'lib/components/ActivityLog/SentenceList' -import { LemonCard } from 'lib/lemon-ui/LemonCard' import { match } from 'ts-pattern' + +import { SentenceList } from 'lib/components/ActivityLog/SentenceList' +import { ActivityLogItem, HumanizedChange, userNameForLogItem } from 'lib/components/ActivityLog/humanizeActivity' +import { LemonCard } from 'lib/lemon-ui/LemonCard' + import { ProgressStatus } from '~/types' + +import { StatusTag } from './ExperimentView/components' import { getExperimentChangeDescription, getSharedMetricChangeDescription, nameOrLinkToExperiment, nameOrLinkToSharedMetric, } from './activity-descriptions' -import { StatusTag } from './ExperimentView/components' //exporting so the linter doesn't complain about this not being used export const ExperimentDetails = ({ diff --git a/frontend/src/scenes/experiments/experimentLogic.test.ts b/frontend/src/scenes/experiments/experimentLogic.test.ts index 9b208698cf..935c6f57b0 100644 --- a/frontend/src/scenes/experiments/experimentLogic.test.ts +++ b/frontend/src/scenes/experiments/experimentLogic.test.ts @@ -1,4 +1,5 @@ import { expectLogic } from 'kea-test-utils' + import { userLogic } from 'scenes/userLogic' import experimentJson from '~/mocks/fixtures/api/experiments/_experiment_launched_with_funnel_and_trends.json' diff --git a/frontend/src/scenes/experiments/experimentLogic.tsx b/frontend/src/scenes/experiments/experimentLogic.tsx index 74406d6726..de6a162d17 100644 --- a/frontend/src/scenes/experiments/experimentLogic.tsx +++ b/frontend/src/scenes/experiments/experimentLogic.tsx @@ -2,8 +2,8 @@ import { actions, connect, isBreakpoint, kea, key, listeners, path, props, reduc import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' import { router, urlToAction } from 'kea-router' -import api from 'lib/api' +import api from 'lib/api' import { dayjs } from 'lib/dayjs' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' @@ -27,11 +27,11 @@ import { teamLogic } from 'scenes/teamLogic' import { trendsDataLogic } from 'scenes/trends/trendsDataLogic' import { urls } from 'scenes/urls' -import { activationLogic, ActivationTask } from '~/layout/navigation-3000/sidepanel/panels/activation/activationLogic' +import { ActivationTask, activationLogic } from '~/layout/navigation-3000/sidepanel/panels/activation/activationLogic' import { refreshTreeItem } from '~/layout/panel-layout/ProjectTree/projectTreeLogic' import { cohortsModel } from '~/models/cohortsModel' import { groupsModel } from '~/models/groupsModel' -import { performQuery, QUERY_TIMEOUT_ERROR_MESSAGE } from '~/queries/query' +import { QUERY_TIMEOUT_ERROR_MESSAGE, performQuery } from '~/queries/query' import { AnyEntityNode, CachedExperimentFunnelsQueryResponse, @@ -69,12 +69,19 @@ import { PropertyMathType, TrendExperimentVariant, } from '~/types' + +import { getDefaultMetricTitle } from './MetricsView/shared/utils' +import { SharedMetric } from './SharedMetrics/sharedMetricLogic' +import { sharedMetricsLogic } from './SharedMetrics/sharedMetricsLogic' import { EXPERIMENT_MAX_PRIMARY_METRICS, EXPERIMENT_MAX_SECONDARY_METRICS, EXPERIMENT_MIN_EXPOSURES_FOR_RESULTS, MetricInsightId, } from './constants' +import type { experimentLogicType } from './experimentLogicType' +import { experimentsLogic } from './experimentsLogic' +import { holdoutsLogic } from './holdoutsLogic' import { conversionRateForVariant, expectedRunningTime, @@ -82,14 +89,8 @@ import { minimumSampleSizePerVariant, recommendedExposureForCountData, } from './legacyExperimentCalculations' -import type { experimentLogicType } from './experimentLogicType' -import { experimentsLogic } from './experimentsLogic' -import { holdoutsLogic } from './holdoutsLogic' import { addExposureToMetric, compose, getInsight, getQuery } from './metricQueryUtils' -import { getDefaultMetricTitle } from './MetricsView/shared/utils' import { modalsLogic } from './modalsLogic' -import { SharedMetric } from './SharedMetrics/sharedMetricLogic' -import { sharedMetricsLogic } from './SharedMetrics/sharedMetricsLogic' import { featureFlagEligibleForExperiment, isLegacyExperiment, diff --git a/frontend/src/scenes/experiments/experimentsLogic.ts b/frontend/src/scenes/experiments/experimentsLogic.ts index 94498b526d..db70344e88 100644 --- a/frontend/src/scenes/experiments/experimentsLogic.ts +++ b/frontend/src/scenes/experiments/experimentsLogic.ts @@ -1,13 +1,15 @@ -import { LemonTagType, PaginationManual } from '@posthog/lemon-ui' import { actions, connect, events, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { actionToUrl, router, urlToAction } from 'kea-router' + +import { LemonTagType, PaginationManual } from '@posthog/lemon-ui' + import api, { CountedPaginatedResponse } from 'lib/api' import { FEATURE_FLAGS } from 'lib/constants' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' -import { featureFlagLogic, FeatureFlagsSet } from 'lib/logic/featureFlagLogic' +import { FeatureFlagsSet, featureFlagLogic } from 'lib/logic/featureFlagLogic' import { objectsEqual, toParams } from 'lib/utils' -import { featureFlagsLogic, type FeatureFlagsResult } from 'scenes/feature-flags/featureFlagsLogic' +import { type FeatureFlagsResult, featureFlagsLogic } from 'scenes/feature-flags/featureFlagsLogic' import { projectLogic } from 'scenes/projectLogic' import { urls } from 'scenes/urls' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/scenes/experiments/holdoutsLogic.tsx b/frontend/src/scenes/experiments/holdoutsLogic.tsx index 94d1eb1d9e..b2a2129d4a 100644 --- a/frontend/src/scenes/experiments/holdoutsLogic.tsx +++ b/frontend/src/scenes/experiments/holdoutsLogic.tsx @@ -1,5 +1,6 @@ import { actions, connect, events, kea, listeners, path, reducers } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' diff --git a/frontend/src/scenes/experiments/metricQueryUtils.ts b/frontend/src/scenes/experiments/metricQueryUtils.ts index 56a8ab4746..4001b11be7 100644 --- a/frontend/src/scenes/experiments/metricQueryUtils.ts +++ b/frontend/src/scenes/experiments/metricQueryUtils.ts @@ -1,11 +1,13 @@ +import { match } from 'ts-pattern' + import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { EXPERIMENT_DEFAULT_DURATION, FunnelLayout } from 'lib/constants' import { dayjs } from 'lib/dayjs' import { MathAvailability } from 'scenes/insights/filters/ActionFilter/ActionFilterRow/ActionFilterRow' -import { match } from 'ts-pattern' + import { - actionsAndEventsToSeries, FilterTypeActionsAndEvents, + actionsAndEventsToSeries, } from '~/queries/nodes/InsightQuery/utils/filtersToQueryNode' import type { ActionsNode, @@ -29,6 +31,7 @@ import { ExperimentMetricSource, ExperimentMetricType, NodeKind } from '~/querie import { setLatestVersionsOnQuery } from '~/queries/utils' import type { Experiment, FilterType, IntervalType, MultivariateFlagVariant } from '~/types' import { ChartDisplayType, ExperimentMetricMathType, PropertyFilterType, PropertyOperator } from '~/types' + // TODO: extract types to a separate file, since this is a circular dependency import type { EventConfig } from './RunningTimeCalculator/runningTimeCalculatorLogic' diff --git a/frontend/src/scenes/experiments/modalsLogic.ts b/frontend/src/scenes/experiments/modalsLogic.ts index a00f590b50..ca20fe3006 100644 --- a/frontend/src/scenes/experiments/modalsLogic.ts +++ b/frontend/src/scenes/experiments/modalsLogic.ts @@ -1,10 +1,10 @@ -import { actions, connect, kea, reducers, path } from 'kea' +import { actions, connect, kea, path, reducers } from 'kea' + import { featureFlagsLogic } from 'scenes/feature-flags/featureFlagsLogic' import { projectLogic } from 'scenes/projectLogic' import { teamLogic } from 'scenes/teamLogic' import { SharedMetric } from './SharedMetrics/sharedMetricLogic' - import type { modalsLogicType } from './modalsLogicType' export const modalsLogic = kea([ diff --git a/frontend/src/scenes/experiments/stories/DraftExperiment.stories.tsx b/frontend/src/scenes/experiments/stories/DraftExperiment.stories.tsx index afe10081af..311dab0371 100644 --- a/frontend/src/scenes/experiments/stories/DraftExperiment.stories.tsx +++ b/frontend/src/scenes/experiments/stories/DraftExperiment.stories.tsx @@ -1,4 +1,5 @@ import { Meta, StoryObj } from '@storybook/react' + import { App } from 'scenes/App' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/experiments/stories/ExperimentAsymmetricIntervals.stories.tsx b/frontend/src/scenes/experiments/stories/ExperimentAsymmetricIntervals.stories.tsx index 0c8bb51103..6975f77765 100644 --- a/frontend/src/scenes/experiments/stories/ExperimentAsymmetricIntervals.stories.tsx +++ b/frontend/src/scenes/experiments/stories/ExperimentAsymmetricIntervals.stories.tsx @@ -1,4 +1,5 @@ import { Meta, StoryObj } from '@storybook/react' + import { makeDelay } from 'lib/utils' import { App } from 'scenes/App' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/experiments/stories/ExperimentFrequentistFiveVariants.stories.tsx b/frontend/src/scenes/experiments/stories/ExperimentFrequentistFiveVariants.stories.tsx index ea3ed3b0d3..c454a896ba 100644 --- a/frontend/src/scenes/experiments/stories/ExperimentFrequentistFiveVariants.stories.tsx +++ b/frontend/src/scenes/experiments/stories/ExperimentFrequentistFiveVariants.stories.tsx @@ -1,4 +1,5 @@ import { Meta, StoryObj } from '@storybook/react' + import { makeDelay } from 'lib/utils' import { mswDecorator } from '~/mocks/browser' diff --git a/frontend/src/scenes/experiments/stories/ExperimentFrequentistTwoVariants.stories.tsx b/frontend/src/scenes/experiments/stories/ExperimentFrequentistTwoVariants.stories.tsx index b7d0b50008..c7b626dbff 100644 --- a/frontend/src/scenes/experiments/stories/ExperimentFrequentistTwoVariants.stories.tsx +++ b/frontend/src/scenes/experiments/stories/ExperimentFrequentistTwoVariants.stories.tsx @@ -1,4 +1,5 @@ import { Meta, StoryObj } from '@storybook/react' + import { makeDelay } from 'lib/utils' import { App } from 'scenes/App' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/experiments/stories/ExperimentWithFunnelMetric.stories.tsx b/frontend/src/scenes/experiments/stories/ExperimentWithFunnelMetric.stories.tsx index 91f64d1807..fb293ee8a8 100644 --- a/frontend/src/scenes/experiments/stories/ExperimentWithFunnelMetric.stories.tsx +++ b/frontend/src/scenes/experiments/stories/ExperimentWithFunnelMetric.stories.tsx @@ -1,4 +1,5 @@ import { Meta, StoryObj } from '@storybook/react' + import { makeDelay } from 'lib/utils' import { App } from 'scenes/App' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/experiments/stories/ExperimentWithLegacyFunnelsQuery.stories.tsx b/frontend/src/scenes/experiments/stories/ExperimentWithLegacyFunnelsQuery.stories.tsx index 8c472fec38..95804480eb 100644 --- a/frontend/src/scenes/experiments/stories/ExperimentWithLegacyFunnelsQuery.stories.tsx +++ b/frontend/src/scenes/experiments/stories/ExperimentWithLegacyFunnelsQuery.stories.tsx @@ -1,4 +1,6 @@ import { Meta, StoryObj } from '@storybook/react' + +import { makeDelay } from 'lib/utils' import { App } from 'scenes/App' import { urls } from 'scenes/urls' @@ -7,7 +9,6 @@ import EXPERIMENT_WITH_FUNNELS_QUERY from '~/mocks/fixtures/api/experiments/expe import EXPOSURE_QUERY_RESULT from '~/mocks/fixtures/api/experiments/exposure_query_result.json' import FUNNELS_QUERY_RESULT from '~/mocks/fixtures/api/experiments/funnels_query_result.json' import { NodeKind } from '~/queries/schema/schema-general' -import { makeDelay } from 'lib/utils' const meta: Meta = { component: App, diff --git a/frontend/src/scenes/experiments/stories/ExperimentWithLegacyTrendsQuery.stories.tsx b/frontend/src/scenes/experiments/stories/ExperimentWithLegacyTrendsQuery.stories.tsx index c1ca401f16..016c820e5c 100644 --- a/frontend/src/scenes/experiments/stories/ExperimentWithLegacyTrendsQuery.stories.tsx +++ b/frontend/src/scenes/experiments/stories/ExperimentWithLegacyTrendsQuery.stories.tsx @@ -1,4 +1,6 @@ import { Meta, StoryObj } from '@storybook/react' + +import { makeDelay } from 'lib/utils' import { App } from 'scenes/App' import { urls } from 'scenes/urls' @@ -7,7 +9,6 @@ import EXPERIMENT_WITH_TRENDS_QUERY from '~/mocks/fixtures/api/experiments/exper import EXPOSURE_QUERY_RESULT from '~/mocks/fixtures/api/experiments/exposure_query_result.json' import TRENDS_QUERY_RESULT from '~/mocks/fixtures/api/experiments/trends_query_result.json' import { NodeKind } from '~/queries/schema/schema-general' -import { makeDelay } from 'lib/utils' const meta: Meta = { component: App, diff --git a/frontend/src/scenes/experiments/stories/ExperimentWithMeanMetric.stories.tsx b/frontend/src/scenes/experiments/stories/ExperimentWithMeanMetric.stories.tsx index 58f279488c..ad0dc9bb6b 100644 --- a/frontend/src/scenes/experiments/stories/ExperimentWithMeanMetric.stories.tsx +++ b/frontend/src/scenes/experiments/stories/ExperimentWithMeanMetric.stories.tsx @@ -1,4 +1,6 @@ import { Meta, StoryObj } from '@storybook/react' + +import { makeDelay } from 'lib/utils' import { App } from 'scenes/App' import { urls } from 'scenes/urls' @@ -7,7 +9,6 @@ import EXPERIMENT_WITH_MEAN_METRIC from '~/mocks/fixtures/api/experiments/experi import EXPOSURE_QUERY_RESULT from '~/mocks/fixtures/api/experiments/exposure_query_result.json' import MEAN_METRIC_RESULT from '~/mocks/fixtures/api/experiments/mean_metric_result.json' import { NodeKind } from '~/queries/schema/schema-general' -import { makeDelay } from 'lib/utils' const meta: Meta = { component: App, diff --git a/frontend/src/scenes/experiments/stories/ExperimentWithMultipleMetrics.stories.tsx b/frontend/src/scenes/experiments/stories/ExperimentWithMultipleMetrics.stories.tsx index 19145d6525..ef75a3939c 100644 --- a/frontend/src/scenes/experiments/stories/ExperimentWithMultipleMetrics.stories.tsx +++ b/frontend/src/scenes/experiments/stories/ExperimentWithMultipleMetrics.stories.tsx @@ -1,4 +1,6 @@ import { Meta, StoryObj } from '@storybook/react' + +import { makeDelay } from 'lib/utils' import { App } from 'scenes/App' import { urls } from 'scenes/urls' @@ -8,7 +10,6 @@ import EXPOSURE_QUERY_RESULT from '~/mocks/fixtures/api/experiments/exposure_que import FUNNEL_METRIC_RESULT from '~/mocks/fixtures/api/experiments/funnel_metric_result.json' import MEAN_METRIC_RESULT from '~/mocks/fixtures/api/experiments/mean_metric_result.json' import { NodeKind } from '~/queries/schema/schema-general' -import { makeDelay } from 'lib/utils' const meta: Meta = { component: App, diff --git a/frontend/src/scenes/experiments/stories/Experiments.stories.tsx b/frontend/src/scenes/experiments/stories/Experiments.stories.tsx index ef449d0c21..c32bc04c16 100644 --- a/frontend/src/scenes/experiments/stories/Experiments.stories.tsx +++ b/frontend/src/scenes/experiments/stories/Experiments.stories.tsx @@ -1,4 +1,5 @@ import { Meta, StoryObj } from '@storybook/react' + import { App } from 'scenes/App' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/experiments/utils.ts b/frontend/src/scenes/experiments/utils.ts index 4fa9c14296..23aa40e2ef 100644 --- a/frontend/src/scenes/experiments/utils.ts +++ b/frontend/src/scenes/experiments/utils.ts @@ -2,7 +2,6 @@ import { getSeriesColor } from 'lib/colors' import { EXPERIMENT_DEFAULT_DURATION, FunnelLayout } from 'lib/constants' import { dayjs } from 'lib/dayjs' import { uuid } from 'lib/utils' - import { MathAvailability } from 'scenes/insights/filters/ActionFilter/ActionFilterRow/ActionFilterRow' import { diff --git a/frontend/src/scenes/feature-flags/ConfirmationModal.tsx b/frontend/src/scenes/feature-flags/ConfirmationModal.tsx index b930cf8aa9..da66d2aff5 100644 --- a/frontend/src/scenes/feature-flags/ConfirmationModal.tsx +++ b/frontend/src/scenes/feature-flags/ConfirmationModal.tsx @@ -1,5 +1,7 @@ import { LemonDialog } from '@posthog/lemon-ui' + import { capitalizeFirstLetter } from 'lib/utils' + import { FeatureFlagType } from '~/types' type ConfirmationModalType = 'flag-status' | 'rollout' | 'multi-changes' diff --git a/frontend/src/scenes/feature-flags/FeatureFlag.tsx b/frontend/src/scenes/feature-flags/FeatureFlag.tsx index cf573e07bb..11188d2ed1 100644 --- a/frontend/src/scenes/feature-flags/FeatureFlag.tsx +++ b/frontend/src/scenes/feature-flags/FeatureFlag.tsx @@ -1,21 +1,26 @@ import './FeatureFlag.scss' +import { useActions, useValues } from 'kea' +import { Form, Group } from 'kea-forms' +import { router } from 'kea-router' +import posthog from 'posthog-js' +import { PostHogFeature } from 'posthog-js/react' +import { useEffect, useState } from 'react' + import { IconBalance, IconCollapse, IconExpand, + IconGlobe, IconInfo, + IconLaptop, IconPlus, IconRewindPlay, - IconTrash, - IconGlobe, IconServer, - IconLaptop, + IconTrash, } from '@posthog/icons' import { LemonDialog, LemonSegmentedButton, LemonSkeleton, LemonSwitch, Tooltip } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' -import { Form, Group } from 'kea-forms' -import { router } from 'kea-router' + import { AccessControlAction } from 'lib/components/AccessControlAction' import { AccessControlledLemonButton } from 'lib/components/AccessControlledLemonButton' import { AccessDenied } from 'lib/components/AccessDenied' @@ -40,25 +45,23 @@ import { Link } from 'lib/lemon-ui/Link' import { featureFlagLogic as enabledFeaturesLogic } from 'lib/logic/featureFlagLogic' import { alphabet, capitalizeFirstLetter } from 'lib/utils' import { ProductIntentContext } from 'lib/utils/product-intents' -import posthog from 'posthog-js' -import { PostHogFeature } from 'posthog-js/react' -import { useEffect, useState } from 'react' +import { FeatureFlagPermissions } from 'scenes/FeatureFlagPermissions' import { Dashboard } from 'scenes/dashboard/Dashboard' -import { dashboardLogic } from 'scenes/dashboard/dashboardLogic' import { EmptyDashboardComponent } from 'scenes/dashboard/EmptyDashboardComponent' +import { dashboardLogic } from 'scenes/dashboard/dashboardLogic' import { UTM_TAGS } from 'scenes/feature-flags/FeatureFlagSnippets' import { JSONEditorInput } from 'scenes/feature-flags/JSONEditorInput' -import { FeatureFlagPermissions } from 'scenes/FeatureFlagPermissions' import { concatWithPunctuation } from 'scenes/insights/utils' import { NotebookSelectButton } from 'scenes/notebooks/NotebookSelectButton/NotebookSelectButton' +import { NotebookNodeType } from 'scenes/notebooks/types' import { SceneExport } from 'scenes/sceneTypes' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' import { userLogic } from 'scenes/userLogic' import { tagsModel } from '~/models/tagsModel' -import { defaultDataTableColumns } from '~/queries/nodes/DataTable/utils' import { Query } from '~/queries/Query/Query' +import { defaultDataTableColumns } from '~/queries/nodes/DataTable/utils' import { NodeKind } from '~/queries/schema/schema-general' import { AccessControlLevel, @@ -82,15 +85,13 @@ import { import { AnalysisTab } from './FeatureFlagAnalysisTab' import { FeatureFlagAutoRollback } from './FeatureFlagAutoRollout' import { FeatureFlagCodeExample } from './FeatureFlagCodeExample' -import { featureFlagLogic, getRecordingFilterForFlagVariant } from './featureFlagLogic' - import FeatureFlagProjects from './FeatureFlagProjects' import { FeatureFlagReleaseConditions } from './FeatureFlagReleaseConditions' import FeatureFlagSchedule from './FeatureFlagSchedule' -import { featureFlagsLogic, FeatureFlagsTab } from './featureFlagsLogic' import { FeatureFlagStatusIndicator } from './FeatureFlagStatusIndicator' import { RecentFeatureFlagInsights } from './RecentFeatureFlagInsightsCard' -import { NotebookNodeType } from 'scenes/notebooks/types' +import { featureFlagLogic, getRecordingFilterForFlagVariant } from './featureFlagLogic' +import { FeatureFlagsTab, featureFlagsLogic } from './featureFlagsLogic' export const scene: SceneExport = { component: FeatureFlag, diff --git a/frontend/src/scenes/feature-flags/FeatureFlagAnalysisTab.tsx b/frontend/src/scenes/feature-flags/FeatureFlagAnalysisTab.tsx index 16e29e79a5..8d0fcdd99a 100644 --- a/frontend/src/scenes/feature-flags/FeatureFlagAnalysisTab.tsx +++ b/frontend/src/scenes/feature-flags/FeatureFlagAnalysisTab.tsx @@ -1,10 +1,12 @@ -import { LemonButton } from '@posthog/lemon-ui' import { BindLogic, useActions, useValues } from 'kea' -import { dashboardsLogic } from 'scenes/dashboard/dashboards/dashboardsLogic' -import { DashboardsTable } from 'scenes/dashboard/dashboards/DashboardsTable' + +import { LemonButton } from '@posthog/lemon-ui' + import { DashboardTemplateChooser } from 'scenes/dashboard/DashboardTemplateChooser' -import { newDashboardLogic } from 'scenes/dashboard/newDashboardLogic' import { NewDashboardModal } from 'scenes/dashboard/NewDashboardModal' +import { DashboardsTable } from 'scenes/dashboard/dashboards/DashboardsTable' +import { dashboardsLogic } from 'scenes/dashboard/dashboards/dashboardsLogic' +import { newDashboardLogic } from 'scenes/dashboard/newDashboardLogic' import { dashboardsModel } from '~/models/dashboardsModel' import { FeatureFlagType } from '~/types' diff --git a/frontend/src/scenes/feature-flags/FeatureFlagAutoRollout.tsx b/frontend/src/scenes/feature-flags/FeatureFlagAutoRollout.tsx index 859d41fa92..5c2d74f0ce 100644 --- a/frontend/src/scenes/feature-flags/FeatureFlagAutoRollout.tsx +++ b/frontend/src/scenes/feature-flags/FeatureFlagAutoRollout.tsx @@ -1,7 +1,9 @@ -import { IconTrash } from '@posthog/icons' -import { LemonButton, LemonDivider, LemonInput, LemonSelect, LemonTag, Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { Group } from 'kea-forms' + +import { IconTrash } from '@posthog/icons' +import { LemonButton, LemonDivider, LemonInput, LemonSelect, LemonTag, Link } from '@posthog/lemon-ui' + import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { LemonField } from 'lib/lemon-ui/LemonField' import { Spinner } from 'lib/lemon-ui/Spinner/Spinner' diff --git a/frontend/src/scenes/feature-flags/FeatureFlagCodeOptions.tsx b/frontend/src/scenes/feature-flags/FeatureFlagCodeOptions.tsx index ed4b49e80d..426cc037f1 100644 --- a/frontend/src/scenes/feature-flags/FeatureFlagCodeOptions.tsx +++ b/frontend/src/scenes/feature-flags/FeatureFlagCodeOptions.tsx @@ -1,4 +1,5 @@ import { IconServer } from '@posthog/icons' + import { IconAndroidOS, IconAppleIOS, @@ -16,13 +17,12 @@ import { import { SDKKey } from '~/types' import { - AndroidSnippet, APISnippet, + AndroidSnippet, CSharpSnippet, FeatureFlagSnippet, FlutterSnippet, GolangSnippet, - iOSSnippet, JSBootstrappingSnippet, JSSnippet, NodeJSSnippet, @@ -32,6 +32,7 @@ import { ReactSnippet, RubySnippet, UTM_TAGS, + iOSSnippet, } from './FeatureFlagSnippets' const DOC_BASE_URL = 'https://posthog.com/docs/' diff --git a/frontend/src/scenes/feature-flags/FeatureFlagInstructions.tsx b/frontend/src/scenes/feature-flags/FeatureFlagInstructions.tsx index 17bd0939bc..caf4095d8b 100644 --- a/frontend/src/scenes/feature-flags/FeatureFlagInstructions.tsx +++ b/frontend/src/scenes/feature-flags/FeatureFlagInstructions.tsx @@ -1,12 +1,14 @@ import './FeatureFlagInstructions.scss' +import { useActions, useValues } from 'kea' +import { useEffect, useState } from 'react' + import { IconInfo } from '@posthog/icons' import { LemonCheckbox, LemonSelect, Link } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { INSTANTLY_AVAILABLE_PROPERTIES } from 'lib/constants' import { Tooltip } from 'lib/lemon-ui/Tooltip' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' -import { useEffect, useState } from 'react' import { groupsModel } from '~/models/groupsModel' import { FeatureFlagType, GroupTypeIndex, SDKKey } from '~/types' @@ -15,12 +17,12 @@ import { BOOTSTRAPPING_OPTIONS, FF_ANCHOR, InstructionOption, - LibraryType, - LOCAL_EVAL_ANCHOR, LOCAL_EVALUATION_LIBRARIES, + LOCAL_EVAL_ANCHOR, + LibraryType, OPTIONS, - PAYLOAD_LIBRARIES, PAYLOADS_ANCHOR, + PAYLOAD_LIBRARIES, REMOTE_CONFIGURATION_LIBRARIES, } from './FeatureFlagCodeOptions' diff --git a/frontend/src/scenes/feature-flags/FeatureFlagProjects.tsx b/frontend/src/scenes/feature-flags/FeatureFlagProjects.tsx index 306299db90..9d1fe407e9 100644 --- a/frontend/src/scenes/feature-flags/FeatureFlagProjects.tsx +++ b/frontend/src/scenes/feature-flags/FeatureFlagProjects.tsx @@ -1,22 +1,24 @@ +import { useActions, useValues } from 'kea' + import { IconArrowRight } from '@posthog/icons' import { LemonBanner, LemonButton, LemonSelect, LemonTag } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { OrganizationMembershipLevel } from 'lib/constants' -import { IconSync } from 'lib/lemon-ui/icons' +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { LemonTable, LemonTableColumn, LemonTableColumns } from 'lib/lemon-ui/LemonTable' -import { createdAtColumn, createdByColumn } from 'lib/lemon-ui/LemonTable/columnUtils' import { LemonTableLink } from 'lib/lemon-ui/LemonTable/LemonTableLink' +import { createdAtColumn, createdByColumn } from 'lib/lemon-ui/LemonTable/columnUtils' +import { IconSync } from 'lib/lemon-ui/icons' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' import { cohortsModel } from '~/models/cohortsModel' -import { groupsModel, type Noun } from '~/models/groupsModel' +import { type Noun, groupsModel } from '~/models/groupsModel' import { CohortType, FeatureFlagType, OrganizationFeatureFlag, OrganizationType } from '~/types' import { organizationLogic } from '../organizationLogic' -import { featureFlagLogic } from './featureFlagLogic' import { groupFilters } from './FeatureFlags' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' +import { featureFlagLogic } from './featureFlagLogic' function checkHasStaticCohort(featureFlag: FeatureFlagType, cohorts: CohortType[]): boolean { const staticCohorts = new Set() diff --git a/frontend/src/scenes/feature-flags/FeatureFlagReleaseConditions.tsx b/frontend/src/scenes/feature-flags/FeatureFlagReleaseConditions.tsx index 97ec2e1f94..1c923243aa 100644 --- a/frontend/src/scenes/feature-flags/FeatureFlagReleaseConditions.tsx +++ b/frontend/src/scenes/feature-flags/FeatureFlagReleaseConditions.tsx @@ -1,19 +1,20 @@ import './FeatureFlag.scss' -import { IconCopy, IconPlus, IconTrash, IconFlag } from '@posthog/icons' -import { LemonInput, LemonSelect, LemonSnack, Link, Tooltip } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' import { router } from 'kea-router' + +import { IconCopy, IconFlag, IconPlus, IconTrash } from '@posthog/icons' +import { LemonInput, LemonSelect, LemonSnack, Link, Tooltip } from '@posthog/lemon-ui' + import { allOperatorsToHumanName } from 'lib/components/DefinitionPopover/utils' import { EditableField } from 'lib/components/EditableField/EditableField' import { PropertyFilters } from 'lib/components/PropertyFilters/PropertyFilters' import { isPropertyFilterWithOperator } from 'lib/components/PropertyFilters/utils' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { INSTANTLY_AVAILABLE_PROPERTIES } from 'lib/constants' -import { groupsAccessLogic, GroupsAccessStatus } from 'lib/introductions/groupsAccessLogic' import { GroupsIntroductionOption } from 'lib/introductions/GroupsIntroductionOption' -import { IconArrowDown, IconArrowUp, IconErrorOutline, IconOpenInNew, IconSubArrowRight } from 'lib/lemon-ui/icons' +import { GroupsAccessStatus, groupsAccessLogic } from 'lib/introductions/groupsAccessLogic' import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonDivider } from 'lib/lemon-ui/LemonDivider' @@ -21,15 +22,18 @@ import { LemonField } from 'lib/lemon-ui/LemonField' import { LemonSlider } from 'lib/lemon-ui/LemonSlider' import { LemonTag } from 'lib/lemon-ui/LemonTag/LemonTag' import { Spinner } from 'lib/lemon-ui/Spinner/Spinner' +import { IconArrowDown, IconArrowUp, IconErrorOutline, IconOpenInNew, IconSubArrowRight } from 'lib/lemon-ui/icons' import { capitalizeFirstLetter, dateFilterToText, dateStringToComponents, humanFriendlyNumber } from 'lib/utils' import { urls } from 'scenes/urls' + import { groupsModel } from '~/models/groupsModel' import { getFilterLabel } from '~/taxonomy/helpers' import { AnyPropertyFilter, FeatureFlagGroupType, PropertyFilterType, PropertyOperator } from '~/types' + import { featureFlagLogic } from './featureFlagLogic' import { - featureFlagReleaseConditionsLogic, FeatureFlagReleaseConditionsLogicProps, + featureFlagReleaseConditionsLogic, } from './featureFlagReleaseConditionsLogic' function PropertyValueComponent({ property }: { property: AnyPropertyFilter }): JSX.Element { diff --git a/frontend/src/scenes/feature-flags/FeatureFlagSchedule.tsx b/frontend/src/scenes/feature-flags/FeatureFlagSchedule.tsx index 413a4fa7c6..63f72a881f 100644 --- a/frontend/src/scenes/feature-flags/FeatureFlagSchedule.tsx +++ b/frontend/src/scenes/feature-flags/FeatureFlagSchedule.tsx @@ -1,3 +1,5 @@ +import { useActions, useValues } from 'kea' + import { LemonBanner, LemonButton, @@ -11,7 +13,7 @@ import { LemonTag, LemonTagType, } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { dayjs } from 'lib/dayjs' import { More } from 'lib/lemon-ui/LemonButton/More' import { atColumn, createdAtColumn, createdByColumn } from 'lib/lemon-ui/LemonTable/columnUtils' @@ -21,9 +23,9 @@ import { hasFormErrors } from 'lib/utils' import { groupsModel } from '~/models/groupsModel' import { ScheduledChangeOperationType, ScheduledChangeType } from '~/types' -import { featureFlagLogic } from './featureFlagLogic' import { FeatureFlagReleaseConditions } from './FeatureFlagReleaseConditions' import { groupFilters } from './FeatureFlags' +import { featureFlagLogic } from './featureFlagLogic' export const DAYJS_FORMAT = 'MMMM DD, YYYY h:mm A' diff --git a/frontend/src/scenes/feature-flags/FeatureFlagSettings.tsx b/frontend/src/scenes/feature-flags/FeatureFlagSettings.tsx index f8c2b565d1..41f5a03277 100644 --- a/frontend/src/scenes/feature-flags/FeatureFlagSettings.tsx +++ b/frontend/src/scenes/feature-flags/FeatureFlagSettings.tsx @@ -1,11 +1,13 @@ +import { useActions, useValues } from 'kea' +import { Form } from 'kea-forms' + import { IconTrash } from '@posthog/icons' import { LemonButton, LemonDialog, LemonSwitch, LemonTextArea, Link } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { CodeSnippet } from 'lib/components/CodeSnippet' +import { LemonField } from 'lib/lemon-ui/LemonField' import { IconRefresh } from 'lib/lemon-ui/icons' import { teamLogic } from 'scenes/teamLogic' -import { Form } from 'kea-forms' -import { LemonField } from 'lib/lemon-ui/LemonField' import { featureFlagConfirmationSettingsLogic } from './featureFlagConfirmationSettingsLogic' diff --git a/frontend/src/scenes/feature-flags/FeatureFlagSnippets.tsx b/frontend/src/scenes/feature-flags/FeatureFlagSnippets.tsx index 2a5b9d948a..e9e1853e9d 100644 --- a/frontend/src/scenes/feature-flags/FeatureFlagSnippets.tsx +++ b/frontend/src/scenes/feature-flags/FeatureFlagSnippets.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { apiHostOrigin } from 'lib/utils/apiHost' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/feature-flags/FeatureFlags.stories.tsx b/frontend/src/scenes/feature-flags/FeatureFlags.stories.tsx index 8e7d892fc6..b45f9c3639 100644 --- a/frontend/src/scenes/feature-flags/FeatureFlags.stories.tsx +++ b/frontend/src/scenes/feature-flags/FeatureFlags.stories.tsx @@ -1,4 +1,5 @@ import { Meta, StoryObj } from '@storybook/react' + import { App } from 'scenes/App' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/feature-flags/FeatureFlags.tsx b/frontend/src/scenes/feature-flags/FeatureFlags.tsx index 707fb562f9..a93808931b 100644 --- a/frontend/src/scenes/feature-flags/FeatureFlags.tsx +++ b/frontend/src/scenes/feature-flags/FeatureFlags.tsx @@ -1,24 +1,26 @@ -import { IconLock } from '@posthog/icons' -import { LemonDialog, LemonInput, LemonSelect, LemonTag, lemonToast } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { router } from 'kea-router' + +import { IconLock } from '@posthog/icons' +import { LemonDialog, LemonInput, LemonSelect, LemonTag, lemonToast } from '@posthog/lemon-ui' + import { AccessControlledLemonButton } from 'lib/components/AccessControlledLemonButton' import { ActivityLog } from 'lib/components/ActivityLog/ActivityLog' -import { FeatureFlagHog } from 'lib/components/hedgehogs' import { MemberSelect } from 'lib/components/MemberSelect' import { ObjectTags } from 'lib/components/ObjectTags/ObjectTags' import { PageHeader } from 'lib/components/PageHeader' import { ProductIntroduction } from 'lib/components/ProductIntroduction/ProductIntroduction' import PropertyFiltersDisplay from 'lib/components/PropertyFilters/components/PropertyFiltersDisplay' +import { FeatureFlagHog } from 'lib/components/hedgehogs' +import { FEATURE_FLAGS } from 'lib/constants' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { More } from 'lib/lemon-ui/LemonButton/More' import { LemonDivider } from 'lib/lemon-ui/LemonDivider' import { LemonTable, LemonTableColumn, LemonTableColumns } from 'lib/lemon-ui/LemonTable' -import { createdAtColumn, createdByColumn } from 'lib/lemon-ui/LemonTable/columnUtils' import { LemonTableLink } from 'lib/lemon-ui/LemonTable/LemonTableLink' +import { createdAtColumn, createdByColumn } from 'lib/lemon-ui/LemonTable/columnUtils' import { LemonTabs } from 'lib/lemon-ui/LemonTabs' import { Tooltip } from 'lib/lemon-ui/Tooltip' -import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic as enabledFeaturesLogic } from 'lib/logic/featureFlagLogic' import { copyToClipboard } from 'lib/utils/copyToClipboard' import { deleteWithUndo } from 'lib/utils/deleteWithUndo' @@ -29,7 +31,7 @@ import { SceneExport } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' import { userLogic } from 'scenes/userLogic' -import { groupsModel, Noun } from '~/models/groupsModel' +import { Noun, groupsModel } from '~/models/groupsModel' import { InsightVizNode, NodeKind } from '~/queries/schema/schema-general' import { AccessControlResourceType, ProductKey } from '~/types' import { @@ -44,7 +46,7 @@ import { } from '~/types' import { featureFlagLogic } from './featureFlagLogic' -import { featureFlagsLogic, FeatureFlagsTab, FLAGS_PER_PAGE } from './featureFlagsLogic' +import { FLAGS_PER_PAGE, FeatureFlagsTab, featureFlagsLogic } from './featureFlagsLogic' export const scene: SceneExport = { component: FeatureFlags, diff --git a/frontend/src/scenes/feature-flags/JSONEditorInput.tsx b/frontend/src/scenes/feature-flags/JSONEditorInput.tsx index 1fffbd1021..7177dd6e60 100644 --- a/frontend/src/scenes/feature-flags/JSONEditorInput.tsx +++ b/frontend/src/scenes/feature-flags/JSONEditorInput.tsx @@ -1,8 +1,9 @@ import './JSONEditorInput.scss' -import { CodeEditor } from 'lib/monaco/CodeEditor' import { useState } from 'react' +import { CodeEditor } from 'lib/monaco/CodeEditor' + import { JsonType } from '~/types' interface EditorProps { diff --git a/frontend/src/scenes/feature-flags/RecentFeatureFlagInsightsCard.tsx b/frontend/src/scenes/feature-flags/RecentFeatureFlagInsightsCard.tsx index 591b0302ea..599052ef4a 100644 --- a/frontend/src/scenes/feature-flags/RecentFeatureFlagInsightsCard.tsx +++ b/frontend/src/scenes/feature-flags/RecentFeatureFlagInsightsCard.tsx @@ -1,4 +1,5 @@ import { useActions, useValues } from 'kea' + import { CompactList } from 'lib/components/CompactList/CompactList' import { ProductIntentContext } from 'lib/utils/product-intents' import { InsightRow } from 'scenes/project-homepage/RecentInsights' diff --git a/frontend/src/scenes/feature-flags/activityDescriptions.tsx b/frontend/src/scenes/feature-flags/activityDescriptions.tsx index f4fe2036fe..0a0d3a742c 100644 --- a/frontend/src/scenes/feature-flags/activityDescriptions.tsx +++ b/frontend/src/scenes/feature-flags/activityDescriptions.tsx @@ -1,14 +1,14 @@ +import { SentenceList } from 'lib/components/ActivityLog/SentenceList' import { ActivityChange, ActivityLogItem, ChangeMapping, - defaultDescriber, Description, - detectBoolean, HumanizedChange, + defaultDescriber, + detectBoolean, userNameForLogItem, } from 'lib/components/ActivityLog/humanizeActivity' -import { SentenceList } from 'lib/components/ActivityLog/SentenceList' import { ObjectTags } from 'lib/components/ObjectTags/ObjectTags' import { PropertyFilterButton } from 'lib/components/PropertyFilters/components/PropertyFilterButton' import { Link } from 'lib/lemon-ui/Link' diff --git a/frontend/src/scenes/feature-flags/featureFlagConfirmationLogic.ts b/frontend/src/scenes/feature-flags/featureFlagConfirmationLogic.ts index 489fc7213b..c63b914e19 100644 --- a/frontend/src/scenes/feature-flags/featureFlagConfirmationLogic.ts +++ b/frontend/src/scenes/feature-flags/featureFlagConfirmationLogic.ts @@ -1,7 +1,8 @@ import { actions, kea, key, listeners, path, props, reducers, selectors } from 'kea' -import { FeatureFlagType } from '~/types' -import { openConfirmationModal } from './ConfirmationModal' +import { FeatureFlagType } from '~/types' + +import { openConfirmationModal } from './ConfirmationModal' import type { featureFlagConfirmationLogicType } from './featureFlagConfirmationLogicType' /** diff --git a/frontend/src/scenes/feature-flags/featureFlagConfirmationSettingsLogic.test.ts b/frontend/src/scenes/feature-flags/featureFlagConfirmationSettingsLogic.test.ts index 956dfe7ebb..0b134406d2 100644 --- a/frontend/src/scenes/feature-flags/featureFlagConfirmationSettingsLogic.test.ts +++ b/frontend/src/scenes/feature-flags/featureFlagConfirmationSettingsLogic.test.ts @@ -1,5 +1,7 @@ -import { expectLogic } from 'kea-test-utils' import { MOCK_DEFAULT_TEAM } from 'lib/api.mock' + +import { expectLogic } from 'kea-test-utils' + import { teamLogic } from 'scenes/teamLogic' import { useMocks } from '~/mocks/jest' diff --git a/frontend/src/scenes/feature-flags/featureFlagConfirmationSettingsLogic.ts b/frontend/src/scenes/feature-flags/featureFlagConfirmationSettingsLogic.ts index a41a841501..52dd58b8ff 100644 --- a/frontend/src/scenes/feature-flags/featureFlagConfirmationSettingsLogic.ts +++ b/frontend/src/scenes/feature-flags/featureFlagConfirmationSettingsLogic.ts @@ -1,6 +1,7 @@ import { afterMount, connect, kea, listeners, path } from 'kea' import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' + import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/feature-flags/featureFlagLogic.test.ts b/frontend/src/scenes/feature-flags/featureFlagLogic.test.ts index 8644e855b5..1246b53ceb 100644 --- a/frontend/src/scenes/feature-flags/featureFlagLogic.test.ts +++ b/frontend/src/scenes/feature-flags/featureFlagLogic.test.ts @@ -1,12 +1,13 @@ -import { expectLogic, partial } from 'kea-test-utils' import { MOCK_DEFAULT_PROJECT } from 'lib/api.mock' +import { expectLogic, partial } from 'kea-test-utils' + import { useMocks } from '~/mocks/jest' import { initKeaTests } from '~/test/init' import { FeatureFlagType, PropertyFilterType, PropertyOperator } from '~/types' -import { featureFlagLogic, NEW_FLAG } from './featureFlagLogic' import { detectFeatureFlagChanges } from './featureFlagConfirmationLogic' +import { NEW_FLAG, featureFlagLogic } from './featureFlagLogic' const MOCK_FEATURE_FLAG = { ...NEW_FLAG, diff --git a/frontend/src/scenes/feature-flags/featureFlagLogic.ts b/frontend/src/scenes/feature-flags/featureFlagLogic.ts index dc1d073ed5..66ca824de6 100644 --- a/frontend/src/scenes/feature-flags/featureFlagLogic.ts +++ b/frontend/src/scenes/feature-flags/featureFlagLogic.ts @@ -1,7 +1,8 @@ import { actions, afterMount, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' -import { DeepPartialMap, forms, ValidationErrorType } from 'kea-forms' +import { DeepPartialMap, ValidationErrorType, forms } from 'kea-forms' import { loaders } from 'kea-loaders' import { router, urlToAction } from 'kea-router' + import api, { PaginatedResponse } from 'lib/api' import { dayjs } from 'lib/dayjs' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' @@ -10,10 +11,9 @@ import { sum, toParams } from 'lib/utils' import { deleteWithUndo } from 'lib/utils/deleteWithUndo' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' import { ProductIntentContext } from 'lib/utils/product-intents' -import { NEW_EARLY_ACCESS_FEATURE } from 'products/early_access_features/frontend/earlyAccessFeatureLogic' import { newDashboardLogic } from 'scenes/dashboard/newDashboardLogic' import { experimentLogic } from 'scenes/experiments/experimentLogic' -import { featureFlagsLogic, FeatureFlagsTab } from 'scenes/feature-flags/featureFlagsLogic' +import { FeatureFlagsTab, featureFlagsLogic } from 'scenes/feature-flags/featureFlagsLogic' import { filterTrendsClientSideParams } from 'scenes/insights/sharedUtils' import { cleanFilters } from 'scenes/insights/utils/cleanFilters' import { projectLogic } from 'scenes/projectLogic' @@ -22,10 +22,11 @@ import { NEW_SURVEY, NewSurvey, SURVEY_CREATED_SOURCE } from 'scenes/surveys/con import { urls } from 'scenes/urls' import { userLogic } from 'scenes/userLogic' -import { activationLogic, ActivationTask } from '~/layout/navigation-3000/sidepanel/panels/activation/activationLogic' +import { ActivationTask, activationLogic } from '~/layout/navigation-3000/sidepanel/panels/activation/activationLogic' import { sidePanelStateLogic } from '~/layout/navigation-3000/sidepanel/sidePanelStateLogic' import { SIDE_PANEL_CONTEXT_KEY, SidePanelSceneContext } from '~/layout/navigation-3000/sidepanel/types' import { deleteFromTree, refreshTreeItem } from '~/layout/panel-layout/ProjectTree/projectTreeLogic' +import { dashboardsModel } from '~/models/dashboardsModel' import { groupsModel } from '~/models/groupsModel' import { getQueryBasedInsightModel } from '~/queries/nodes/InsightViz/utils' import { @@ -63,12 +64,13 @@ import { SurveyQuestionType, } from '~/types' +import { NEW_EARLY_ACCESS_FEATURE } from 'products/early_access_features/frontend/earlyAccessFeatureLogic' + import { organizationLogic } from '../organizationLogic' import { teamLogic } from '../teamLogic' import { checkFeatureFlagConfirmation } from './featureFlagConfirmationLogic' import type { featureFlagLogicType } from './featureFlagLogicType' import { featureFlagPermissionsLogic } from './featureFlagPermissionsLogic' -import { dashboardsModel } from '~/models/dashboardsModel' export type ScheduleFlagPayload = Pick diff --git a/frontend/src/scenes/feature-flags/featureFlagPermissionsLogic.tsx b/frontend/src/scenes/feature-flags/featureFlagPermissionsLogic.tsx index 8ab7b7bdc7..269c1e55e4 100644 --- a/frontend/src/scenes/feature-flags/featureFlagPermissionsLogic.tsx +++ b/frontend/src/scenes/feature-flags/featureFlagPermissionsLogic.tsx @@ -1,5 +1,6 @@ import { actions, afterMount, connect, kea, key, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' import { rolesLogic } from 'scenes/settings/organization/Permissions/Roles/rolesLogic' diff --git a/frontend/src/scenes/feature-flags/featureFlagReleaseConditionsLogic.test.ts b/frontend/src/scenes/feature-flags/featureFlagReleaseConditionsLogic.test.ts index 201533d232..ff53123536 100644 --- a/frontend/src/scenes/feature-flags/featureFlagReleaseConditionsLogic.test.ts +++ b/frontend/src/scenes/feature-flags/featureFlagReleaseConditionsLogic.test.ts @@ -1,4 +1,5 @@ import { expectLogic } from 'kea-test-utils' + import api from 'lib/api' import { useMocks } from '~/mocks/jest' diff --git a/frontend/src/scenes/feature-flags/featureFlagReleaseConditionsLogic.ts b/frontend/src/scenes/feature-flags/featureFlagReleaseConditionsLogic.ts index 5c0562240a..ea160b972d 100644 --- a/frontend/src/scenes/feature-flags/featureFlagReleaseConditionsLogic.ts +++ b/frontend/src/scenes/feature-flags/featureFlagReleaseConditionsLogic.ts @@ -13,13 +13,14 @@ import { selectors, } from 'kea' import { subscriptions } from 'kea-subscriptions' +import posthog from 'posthog-js' +import { v4 as uuidv4 } from 'uuid' + import api from 'lib/api' import { isEmptyProperty } from 'lib/components/PropertyFilters/utils' import { TaxonomicFilterGroupType, TaxonomicFilterProps } from 'lib/components/TaxonomicFilter/types' import { FEATURE_FLAGS } from 'lib/constants' import { objectsEqual, range } from 'lib/utils' -import { v4 as uuidv4 } from 'uuid' -import posthog from 'posthog-js' import { projectLogic } from 'scenes/projectLogic' import { groupsModel } from '~/models/groupsModel' @@ -32,6 +33,7 @@ import { PropertyFilterType, UserBlastRadiusType, } from '~/types' + import type { featureFlagReleaseConditionsLogicType } from './featureFlagReleaseConditionsLogicType' // Helper function to move a condition set to a new index diff --git a/frontend/src/scenes/feature-flags/featureFlagsLogic.test.ts b/frontend/src/scenes/feature-flags/featureFlagsLogic.test.ts index ce39c7481b..5ae203ef6b 100644 --- a/frontend/src/scenes/feature-flags/featureFlagsLogic.test.ts +++ b/frontend/src/scenes/feature-flags/featureFlagsLogic.test.ts @@ -1,6 +1,7 @@ import { router } from 'kea-router' import { expectLogic } from 'kea-test-utils' -import { featureFlagsLogic, FeatureFlagsTab } from 'scenes/feature-flags/featureFlagsLogic' + +import { FeatureFlagsTab, featureFlagsLogic } from 'scenes/feature-flags/featureFlagsLogic' import { urls } from 'scenes/urls' import { initKeaTests } from '~/test/init' diff --git a/frontend/src/scenes/feature-flags/featureFlagsLogic.ts b/frontend/src/scenes/feature-flags/featureFlagsLogic.ts index 4deb39134f..d7d520ca93 100644 --- a/frontend/src/scenes/feature-flags/featureFlagsLogic.ts +++ b/frontend/src/scenes/feature-flags/featureFlagsLogic.ts @@ -1,7 +1,9 @@ -import { PaginationManual } from '@posthog/lemon-ui' import { actions, connect, events, kea, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { actionToUrl, router, urlToAction } from 'kea-router' + +import { PaginationManual } from '@posthog/lemon-ui' + import api, { CountedPaginatedResponse } from 'lib/api' import { objectsEqual, toParams } from 'lib/utils' import { projectLogic } from 'scenes/projectLogic' diff --git a/frontend/src/scenes/funnels/Funnel.tsx b/frontend/src/scenes/funnels/Funnel.tsx index 8b695ef795..33178cfe73 100644 --- a/frontend/src/scenes/funnels/Funnel.tsx +++ b/frontend/src/scenes/funnels/Funnel.tsx @@ -1,6 +1,7 @@ import './Funnel.scss' import { useValues } from 'kea' + import { FunnelLayout } from 'lib/constants' import { FunnelLineGraph } from 'scenes/funnels/FunnelLineGraph' import { insightLogic } from 'scenes/insights/insightLogic' @@ -9,8 +10,8 @@ import { ChartParams, FunnelVizType } from '~/types' import { FunnelBarHorizontal } from './FunnelBarHorizontal/FunnelBarHorizontal' import { FunnelBarVertical } from './FunnelBarVertical/FunnelBarVertical' -import { funnelDataLogic } from './funnelDataLogic' import { FunnelHistogram } from './FunnelHistogram' +import { funnelDataLogic } from './funnelDataLogic' export function Funnel(props: ChartParams): JSX.Element { const { insightProps } = useValues(insightLogic) diff --git a/frontend/src/scenes/funnels/FunnelBarHorizontal/Bar.tsx b/frontend/src/scenes/funnels/FunnelBarHorizontal/Bar.tsx index 75c46fd0fa..2838fbeb07 100644 --- a/frontend/src/scenes/funnels/FunnelBarHorizontal/Bar.tsx +++ b/frontend/src/scenes/funnels/FunnelBarHorizontal/Bar.tsx @@ -1,5 +1,7 @@ -import { LemonDropdown } from '@posthog/lemon-ui' import { useValues } from 'kea' + +import { LemonDropdown } from '@posthog/lemon-ui' + import { capitalizeFirstLetter, percentage } from 'lib/utils' import { insightLogic } from 'scenes/insights/insightLogic' @@ -7,8 +9,8 @@ import { Noun } from '~/models/groupsModel' import { BreakdownFilter } from '~/queries/schema/schema-general' import { FunnelStepWithConversionMetrics } from '~/types' -import { funnelDataLogic } from '../funnelDataLogic' import { FunnelTooltip } from '../FunnelTooltip' +import { funnelDataLogic } from '../funnelDataLogic' import { getSeriesPositionName } from '../funnelUtils' interface BarProps { diff --git a/frontend/src/scenes/funnels/FunnelBarHorizontal/DuplicateStepIndicator.tsx b/frontend/src/scenes/funnels/FunnelBarHorizontal/DuplicateStepIndicator.tsx index aae138cb26..2a7f7b01a8 100644 --- a/frontend/src/scenes/funnels/FunnelBarHorizontal/DuplicateStepIndicator.tsx +++ b/frontend/src/scenes/funnels/FunnelBarHorizontal/DuplicateStepIndicator.tsx @@ -1,4 +1,5 @@ import { IconInfo } from '@posthog/icons' + import { Tooltip } from 'lib/lemon-ui/Tooltip' export function DuplicateStepIndicator(): JSX.Element { diff --git a/frontend/src/scenes/funnels/FunnelBarHorizontal/FunnelBarHorizontal.tsx b/frontend/src/scenes/funnels/FunnelBarHorizontal/FunnelBarHorizontal.tsx index 07d25c9023..79e6b7a43d 100644 --- a/frontend/src/scenes/funnels/FunnelBarHorizontal/FunnelBarHorizontal.tsx +++ b/frontend/src/scenes/funnels/FunnelBarHorizontal/FunnelBarHorizontal.tsx @@ -2,6 +2,7 @@ import './FunnelBarHorizontal.scss' import clsx from 'clsx' import { useActions, useValues } from 'kea' + import { EntityFilterInfo } from 'lib/components/EntityFilterInfo' import { SeriesGlyph } from 'lib/components/SeriesGlyph' import { IconInfinity, IconTrendingFlat, IconTrendingFlatDown } from 'lib/lemon-ui/icons' @@ -11,11 +12,11 @@ import { getActionFilterFromFunnelStep } from 'scenes/insights/views/Funnels/fun import { ChartParams, FunnelStepReference, StepOrderValue } from '~/types' +import { FunnelStepMore } from '../FunnelStepMore' +import { ValueInspectorButton } from '../ValueInspectorButton' import { funnelDataLogic } from '../funnelDataLogic' import { funnelPersonsModalLogic } from '../funnelPersonsModalLogic' -import { FunnelStepMore } from '../FunnelStepMore' import { getBreakdownMaxIndex, getReferenceStep } from '../funnelUtils' -import { ValueInspectorButton } from '../ValueInspectorButton' import { Bar } from './Bar' import { DuplicateStepIndicator } from './DuplicateStepIndicator' diff --git a/frontend/src/scenes/funnels/FunnelBarVertical/FunnelBarVertical.tsx b/frontend/src/scenes/funnels/FunnelBarVertical/FunnelBarVertical.tsx index 8b6213d99c..6b184706bc 100644 --- a/frontend/src/scenes/funnels/FunnelBarVertical/FunnelBarVertical.tsx +++ b/frontend/src/scenes/funnels/FunnelBarVertical/FunnelBarVertical.tsx @@ -1,16 +1,17 @@ import './FunnelBarVertical.scss' import { useValues } from 'kea' +import { useLayoutEffect, useRef, useState } from 'react' + import { ScrollableShadows } from 'lib/components/ScrollableShadows/ScrollableShadows' import { useResizeObserver } from 'lib/hooks/useResizeObserver' -import { useLayoutEffect, useRef, useState } from 'react' import { insightLogic } from 'scenes/insights/insightLogic' import { ChartParams } from '~/types' +import { useFunnelTooltip } from '../FunnelTooltip' import { funnelDataLogic } from '../funnelDataLogic' import { funnelPersonsModalLogic } from '../funnelPersonsModalLogic' -import { useFunnelTooltip } from '../FunnelTooltip' import { StepBarLabels } from './StepBarLabels' import { StepBars } from './StepBars' import { StepLegend } from './StepLegend' diff --git a/frontend/src/scenes/funnels/FunnelBarVertical/StepBar.tsx b/frontend/src/scenes/funnels/FunnelBarVertical/StepBar.tsx index f5224fcf54..38017a88ff 100644 --- a/frontend/src/scenes/funnels/FunnelBarVertical/StepBar.tsx +++ b/frontend/src/scenes/funnels/FunnelBarVertical/StepBar.tsx @@ -1,7 +1,8 @@ import clsx from 'clsx' import { useActions, useValues } from 'kea' -import { percentage } from 'lib/utils' import { useRef } from 'react' + +import { percentage } from 'lib/utils' import { insightLogic } from 'scenes/insights/insightLogic' import { FunnelStepWithConversionMetrics } from '~/types' diff --git a/frontend/src/scenes/funnels/FunnelBarVertical/StepLegend.tsx b/frontend/src/scenes/funnels/FunnelBarVertical/StepLegend.tsx index b0840df5c4..d0dc80c1c3 100644 --- a/frontend/src/scenes/funnels/FunnelBarVertical/StepLegend.tsx +++ b/frontend/src/scenes/funnels/FunnelBarVertical/StepLegend.tsx @@ -1,10 +1,12 @@ -import { IconClock } from '@posthog/icons' import { useActions, useValues } from 'kea' + +import { IconClock } from '@posthog/icons' + import { EntityFilterInfo } from 'lib/components/EntityFilterInfo' -import { IconTrendingFlat, IconTrendingFlatDown } from 'lib/lemon-ui/icons' import { LemonRow } from 'lib/lemon-ui/LemonRow' import { Lettermark, LettermarkColor } from 'lib/lemon-ui/Lettermark' import { Tooltip } from 'lib/lemon-ui/Tooltip' +import { IconTrendingFlat, IconTrendingFlatDown } from 'lib/lemon-ui/icons' import { capitalizeFirstLetter, humanFriendlyDuration, percentage, pluralize } from 'lib/utils' import { funnelDataLogic } from 'scenes/funnels/funnelDataLogic' import { insightLogic } from 'scenes/insights/insightLogic' @@ -13,9 +15,9 @@ import { userLogic } from 'scenes/userLogic' import { AvailableFeature, ChartParams, FunnelStepReference, FunnelStepWithConversionMetrics } from '~/types' -import { funnelPersonsModalLogic } from '../funnelPersonsModalLogic' import { FunnelStepMore } from '../FunnelStepMore' import { ValueInspectorButton } from '../ValueInspectorButton' +import { funnelPersonsModalLogic } from '../funnelPersonsModalLogic' type StepLegendProps = { step: FunnelStepWithConversionMetrics diff --git a/frontend/src/scenes/funnels/FunnelCanvasLabel.tsx b/frontend/src/scenes/funnels/FunnelCanvasLabel.tsx index 28b71245b1..476dfdf930 100644 --- a/frontend/src/scenes/funnels/FunnelCanvasLabel.tsx +++ b/frontend/src/scenes/funnels/FunnelCanvasLabel.tsx @@ -1,10 +1,12 @@ +import { useActions, useValues } from 'kea' +import React from 'react' + import { IconInfo, IconTestTube } from '@posthog/icons' import { LemonButton, Link } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { Tooltip } from 'lib/lemon-ui/Tooltip' import { humanFriendlyDuration, percentage } from 'lib/utils' import { ProductIntentContext } from 'lib/utils/product-intents' -import React from 'react' import { getExperimentMetricFromInsight } from 'scenes/experiments/utils' import { funnelDataLogic } from 'scenes/funnels/funnelDataLogic' import { insightLogic } from 'scenes/insights/insightLogic' diff --git a/frontend/src/scenes/funnels/FunnelHistogram.tsx b/frontend/src/scenes/funnels/FunnelHistogram.tsx index 39a157b7b8..42a1fbba63 100644 --- a/frontend/src/scenes/funnels/FunnelHistogram.tsx +++ b/frontend/src/scenes/funnels/FunnelHistogram.tsx @@ -3,8 +3,9 @@ import './FunnelHistogram.scss' import useSize from '@react-hook/size' import clsx from 'clsx' import { useValues } from 'kea' -import { hashCodeForString, humanFriendlyDuration } from 'lib/utils' import { useRef } from 'react' + +import { hashCodeForString, humanFriendlyDuration } from 'lib/utils' import { insightLogic } from 'scenes/insights/insightLogic' import { Histogram } from 'scenes/insights/views/Histogram' diff --git a/frontend/src/scenes/funnels/FunnelLineGraph.tsx b/frontend/src/scenes/funnels/FunnelLineGraph.tsx index 9555f25727..a5fe0e2bf7 100644 --- a/frontend/src/scenes/funnels/FunnelLineGraph.tsx +++ b/frontend/src/scenes/funnels/FunnelLineGraph.tsx @@ -1,9 +1,11 @@ import { useValues } from 'kea' + import { dayjs } from 'lib/dayjs' import { capitalizeFirstLetter, shortTimeZone } from 'lib/utils' -import { insightLogic } from 'scenes/insights/insightLogic' import { getFormattedDate } from 'scenes/insights/InsightTooltip/insightTooltipUtils' +import { insightLogic } from 'scenes/insights/insightLogic' import { LineGraph } from 'scenes/insights/views/LineGraph/LineGraph' +import { teamLogic } from 'scenes/teamLogic' import { openPersonsModal } from 'scenes/trends/persons-modal/PersonsModal' import { FunnelsActorsQuery, NodeKind, TrendsFilter } from '~/queries/schema/schema-general' @@ -12,7 +14,6 @@ import { ChartParams, GraphDataset, GraphType } from '~/types' import { funnelDataLogic } from './funnelDataLogic' import { funnelPersonsModalLogic } from './funnelPersonsModalLogic' -import { teamLogic } from 'scenes/teamLogic' const LineGraphWrapper = ({ inCardView, children }: { inCardView?: boolean; children: JSX.Element }): JSX.Element => { if (inCardView) { diff --git a/frontend/src/scenes/funnels/FunnelStepMore.tsx b/frontend/src/scenes/funnels/FunnelStepMore.tsx index 42e9476cc9..8fce145829 100644 --- a/frontend/src/scenes/funnels/FunnelStepMore.tsx +++ b/frontend/src/scenes/funnels/FunnelStepMore.tsx @@ -1,7 +1,8 @@ import { useValues } from 'kea' +import { useCallback } from 'react' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { More } from 'lib/lemon-ui/LemonButton/More' -import { useCallback } from 'react' import { insightLogic } from 'scenes/insights/insightLogic' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/funnels/FunnelTooltip.tsx b/frontend/src/scenes/funnels/FunnelTooltip.tsx index 433842cef0..8522577635 100644 --- a/frontend/src/scenes/funnels/FunnelTooltip.tsx +++ b/frontend/src/scenes/funnels/FunnelTooltip.tsx @@ -1,13 +1,14 @@ import clsx from 'clsx' import { useValues } from 'kea' +import { useEffect, useRef } from 'react' + import { EntityFilterInfo } from 'lib/components/EntityFilterInfo' import { LemonDivider } from 'lib/lemon-ui/LemonDivider' import { LemonRow } from 'lib/lemon-ui/LemonRow' import { Lettermark, LettermarkColor } from 'lib/lemon-ui/Lettermark' import { humanFriendlyDuration, humanFriendlyNumber, percentage } from 'lib/utils' -import { useEffect, useRef } from 'react' -import { insightLogic } from 'scenes/insights/insightLogic' import { ClickToInspectActors } from 'scenes/insights/InsightTooltip/InsightTooltip' +import { insightLogic } from 'scenes/insights/insightLogic' import { formatBreakdownLabel } from 'scenes/insights/utils' import { getActionFilterFromFunnelStep } from 'scenes/insights/views/Funnels/funnelStepTableUtils' import { ensureTooltip } from 'scenes/insights/views/LineGraph/LineGraph' diff --git a/frontend/src/scenes/funnels/ValueInspectorButton.tsx b/frontend/src/scenes/funnels/ValueInspectorButton.tsx index a9a0585190..93f1b039f2 100644 --- a/frontend/src/scenes/funnels/ValueInspectorButton.tsx +++ b/frontend/src/scenes/funnels/ValueInspectorButton.tsx @@ -1,6 +1,7 @@ -import { Link } from '@posthog/lemon-ui' import { forwardRef } from 'react' +import { Link } from '@posthog/lemon-ui' + interface ValueInspectorButtonProps { onClick?: (e?: React.MouseEvent) => void onMouseEnter?: (e?: React.MouseEvent) => void diff --git a/frontend/src/scenes/funnels/funnelCorrelationDetailsLogic.ts b/frontend/src/scenes/funnels/funnelCorrelationDetailsLogic.ts index fff9af0583..fae6a4d5a1 100644 --- a/frontend/src/scenes/funnels/funnelCorrelationDetailsLogic.ts +++ b/frontend/src/scenes/funnels/funnelCorrelationDetailsLogic.ts @@ -1,4 +1,5 @@ import { actions, connect, kea, key, path, props, reducers, selectors } from 'kea' + import { keyForInsightLogicProps } from 'scenes/insights/sharedUtils' import { FunnelCorrelation, InsightLogicProps } from '~/types' diff --git a/frontend/src/scenes/funnels/funnelCorrelationFeedbackLogic.test.ts b/frontend/src/scenes/funnels/funnelCorrelationFeedbackLogic.test.ts index e536baada7..b0f2068642 100644 --- a/frontend/src/scenes/funnels/funnelCorrelationFeedbackLogic.test.ts +++ b/frontend/src/scenes/funnels/funnelCorrelationFeedbackLogic.test.ts @@ -1,6 +1,7 @@ import { expectLogic } from 'kea-test-utils' -import { eventUsageLogic } from 'lib/utils/eventUsageLogic' import posthog from 'posthog-js' + +import { eventUsageLogic } from 'lib/utils/eventUsageLogic' import { teamLogic } from 'scenes/teamLogic' import { useAvailableFeatures } from '~/mocks/features' diff --git a/frontend/src/scenes/funnels/funnelCorrelationFeedbackLogic.ts b/frontend/src/scenes/funnels/funnelCorrelationFeedbackLogic.ts index 3277c70423..5ab9ac2e84 100644 --- a/frontend/src/scenes/funnels/funnelCorrelationFeedbackLogic.ts +++ b/frontend/src/scenes/funnels/funnelCorrelationFeedbackLogic.ts @@ -1,5 +1,7 @@ -import { lemonToast } from '@posthog/lemon-ui' import { actions, connect, kea, key, listeners, path, props, reducers } from 'kea' + +import { lemonToast } from '@posthog/lemon-ui' + import { eventUsageLogic } from 'lib/utils/eventUsageLogic' import { keyForInsightLogicProps } from 'scenes/insights/sharedUtils' diff --git a/frontend/src/scenes/funnels/funnelCorrelationLogic.ts b/frontend/src/scenes/funnels/funnelCorrelationLogic.ts index ad4a6b5819..c7db331731 100644 --- a/frontend/src/scenes/funnels/funnelCorrelationLogic.ts +++ b/frontend/src/scenes/funnels/funnelCorrelationLogic.ts @@ -1,6 +1,8 @@ -import { lemonToast } from '@posthog/lemon-ui' import { actions, connect, defaults, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { keyForInsightLogicProps } from 'scenes/insights/sharedUtils' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/funnels/funnelCorrelationUsageLogic.ts b/frontend/src/scenes/funnels/funnelCorrelationUsageLogic.ts index f564b9d642..74a94f88a3 100644 --- a/frontend/src/scenes/funnels/funnelCorrelationUsageLogic.ts +++ b/frontend/src/scenes/funnels/funnelCorrelationUsageLogic.ts @@ -1,4 +1,5 @@ import { BreakPointFunction, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' + import { visibilitySensorLogic } from 'lib/components/VisibilitySensor/visibilitySensorLogic' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' import { insightLogic } from 'scenes/insights/insightLogic' diff --git a/frontend/src/scenes/funnels/funnelDataLogic.test.ts b/frontend/src/scenes/funnels/funnelDataLogic.test.ts index 5c5ed45d27..738c7130d1 100644 --- a/frontend/src/scenes/funnels/funnelDataLogic.test.ts +++ b/frontend/src/scenes/funnels/funnelDataLogic.test.ts @@ -1,7 +1,8 @@ import { expectLogic } from 'kea-test-utils' -import { teamLogic } from 'scenes/teamLogic' import timekeeper from 'timekeeper' +import { teamLogic } from 'scenes/teamLogic' + import { dataNodeLogic } from '~/queries/nodes/DataNode/dataNodeLogic' import { DataNode, FunnelsQuery, NodeKind } from '~/queries/schema/schema-general' import { initKeaTests } from '~/test/init' diff --git a/frontend/src/scenes/funnels/funnelDataLogic.ts b/frontend/src/scenes/funnels/funnelDataLogic.ts index 7ce067eef6..9bc304c9ac 100644 --- a/frontend/src/scenes/funnels/funnelDataLogic.ts +++ b/frontend/src/scenes/funnels/funnelDataLogic.ts @@ -1,4 +1,5 @@ import { actions, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' + import { DataColorTheme, DataColorToken } from 'lib/colors' import { BIN_COUNT_AUTO } from 'lib/constants' import { dayjs } from 'lib/dayjs' @@ -10,7 +11,7 @@ import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' import { keyForInsightLogicProps } from 'scenes/insights/sharedUtils' import { getFunnelDatasetKey, getFunnelResultCustomizationColorToken } from 'scenes/insights/utils' -import { groupsModel, Noun } from '~/models/groupsModel' +import { Noun, groupsModel } from '~/models/groupsModel' import { NodeKind } from '~/queries/schema/schema-general' import { isFunnelsQuery } from '~/queries/utils' import { @@ -22,9 +23,9 @@ import { FunnelStepReference, FunnelStepWithConversionMetrics, FunnelStepWithNestedBreakdown, - FunnelsTimeConversionBins, FunnelTimeConversionMetrics, FunnelVizType, + FunnelsTimeConversionBins, HistogramGraphDatum, InsightLogicProps, InsightType, @@ -44,6 +45,7 @@ import { isBreakdownFunnelResults, stepsWithConversionMetrics, } from './funnelUtils' + const DEFAULT_FUNNEL_LOGIC_KEY = 'default_funnel_key' export const funnelDataLogic = kea([ diff --git a/frontend/src/scenes/funnels/funnelPersonsModalLogic.test.ts b/frontend/src/scenes/funnels/funnelPersonsModalLogic.test.ts index db52b4459b..a022e8d33d 100644 --- a/frontend/src/scenes/funnels/funnelPersonsModalLogic.test.ts +++ b/frontend/src/scenes/funnels/funnelPersonsModalLogic.test.ts @@ -1,5 +1,6 @@ import { router } from 'kea-router' import { expectLogic } from 'kea-test-utils' + import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { teamLogic } from 'scenes/teamLogic' import { openPersonsModal } from 'scenes/trends/persons-modal/PersonsModal' diff --git a/frontend/src/scenes/funnels/funnelPersonsModalLogic.ts b/frontend/src/scenes/funnels/funnelPersonsModalLogic.ts index 2883dbae88..247e83f833 100644 --- a/frontend/src/scenes/funnels/funnelPersonsModalLogic.ts +++ b/frontend/src/scenes/funnels/funnelPersonsModalLogic.ts @@ -1,9 +1,10 @@ import { actions, connect, kea, key, listeners, path, props, selectors } from 'kea' + import { elementsToAction } from 'scenes/activity/explore/createActionFromEvent' import { insightLogic } from 'scenes/insights/insightLogic' import { keyForInsightLogicProps } from 'scenes/insights/sharedUtils' -import { funnelTitle } from 'scenes/trends/persons-modal/persons-modal-utils' import { openPersonsModal } from 'scenes/trends/persons-modal/PersonsModal' +import { funnelTitle } from 'scenes/trends/persons-modal/persons-modal-utils' import { EventsNode, diff --git a/frontend/src/scenes/funnels/funnelPropertyCorrelationLogic.test.ts b/frontend/src/scenes/funnels/funnelPropertyCorrelationLogic.test.ts index a5e2d7a5a6..6a4ba164e8 100644 --- a/frontend/src/scenes/funnels/funnelPropertyCorrelationLogic.test.ts +++ b/frontend/src/scenes/funnels/funnelPropertyCorrelationLogic.test.ts @@ -1,5 +1,7 @@ -import { expectLogic, partial } from 'kea-test-utils' import { MOCK_DEFAULT_TEAM } from 'lib/api.mock' + +import { expectLogic, partial } from 'kea-test-utils' + import { teamLogic } from 'scenes/teamLogic' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/scenes/funnels/funnelPropertyCorrelationLogic.ts b/frontend/src/scenes/funnels/funnelPropertyCorrelationLogic.ts index 2dc1a75f06..1d71fcf428 100644 --- a/frontend/src/scenes/funnels/funnelPropertyCorrelationLogic.ts +++ b/frontend/src/scenes/funnels/funnelPropertyCorrelationLogic.ts @@ -1,6 +1,8 @@ -import { lemonToast } from '@posthog/lemon-ui' import { actions, connect, defaults, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { keyForInsightLogicProps } from 'scenes/insights/sharedUtils' diff --git a/frontend/src/scenes/funnels/funnelTooltipLogic.ts b/frontend/src/scenes/funnels/funnelTooltipLogic.ts index 3c29a96f58..a657fa29fb 100644 --- a/frontend/src/scenes/funnels/funnelTooltipLogic.ts +++ b/frontend/src/scenes/funnels/funnelTooltipLogic.ts @@ -1,4 +1,5 @@ import { actions, kea, key, path, props, reducers } from 'kea' + import { keyForInsightLogicProps } from 'scenes/insights/sharedUtils' import { FunnelStepWithConversionMetrics, InsightLogicProps } from '~/types' diff --git a/frontend/src/scenes/groups/Group.tsx b/frontend/src/scenes/groups/Group.tsx index d012d53a01..ffb2de4cee 100644 --- a/frontend/src/scenes/groups/Group.tsx +++ b/frontend/src/scenes/groups/Group.tsx @@ -1,5 +1,6 @@ import { useActions, useValues } from 'kea' import { router } from 'kea-router' + import { ActivityLog } from 'lib/components/ActivityLog/ActivityLog' import { CopyToClipboardInline } from 'lib/components/CopyToClipboard' import { NotFound } from 'lib/components/NotFound' @@ -14,8 +15,9 @@ import { lemonToast } from 'lib/lemon-ui/LemonToast' import { Link } from 'lib/lemon-ui/Link' import { Spinner, SpinnerOverlay } from 'lib/lemon-ui/Spinner/Spinner' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { groupLogic, GroupLogicProps } from 'scenes/groups/groupLogic' +import { GroupLogicProps, groupLogic } from 'scenes/groups/groupLogic' import { NotebookSelectButton } from 'scenes/notebooks/NotebookSelectButton/NotebookSelectButton' +import { NotebookNodeType } from 'scenes/notebooks/types' import { RelatedFeatureFlags } from 'scenes/persons/RelatedFeatureFlags' import { SceneExport } from 'scenes/sceneTypes' import { SessionRecordingsPlaylist } from 'scenes/session-recordings/playlist/SessionRecordingsPlaylist' @@ -37,7 +39,6 @@ import { import { GroupOverview } from './GroupOverview' import { RelatedGroups } from './RelatedGroups' -import { NotebookNodeType } from 'scenes/notebooks/types' import { GroupNotebookCard } from './cards/GroupNotebookCard' interface GroupSceneProps { diff --git a/frontend/src/scenes/groups/GroupOverview.tsx b/frontend/src/scenes/groups/GroupOverview.tsx index ac86f31741..2e617f8a47 100644 --- a/frontend/src/scenes/groups/GroupOverview.tsx +++ b/frontend/src/scenes/groups/GroupOverview.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { capitalizeFirstLetter } from 'lib/utils' import { Group } from '~/types' diff --git a/frontend/src/scenes/groups/Groups.tsx b/frontend/src/scenes/groups/Groups.tsx index aa90fa0d9e..3beee4e39a 100644 --- a/frontend/src/scenes/groups/Groups.tsx +++ b/frontend/src/scenes/groups/Groups.tsx @@ -1,28 +1,30 @@ import { useActions, useValues } from 'kea' +import { router } from 'kea-router' + +import { IconPeople } from '@posthog/icons' + import { useFeatureFlag } from 'lib/hooks/useFeatureFlag' -import { groupsAccessLogic, GroupsAccessStatus } from 'lib/introductions/groupsAccessLogic' +import { GroupsAccessStatus, groupsAccessLogic } from 'lib/introductions/groupsAccessLogic' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonInput } from 'lib/lemon-ui/LemonInput' import { LemonModal } from 'lib/lemon-ui/LemonModal' import { Link } from 'lib/lemon-ui/Link' -import { GroupsIntroduction } from 'scenes/groups/GroupsIntroduction' -import { SceneExport } from 'scenes/sceneTypes' - -import { Query } from '~/queries/Query/Query' -import { GroupTypeIndex } from '~/types' - -import { IconPeople } from '@posthog/icons' -import { router } from 'kea-router' import { capitalizeFirstLetter } from 'lib/utils' +import { GroupsIntroduction } from 'scenes/groups/GroupsIntroduction' import { PersonsManagementSceneTabs } from 'scenes/persons-management/PersonsManagementSceneTabs' +import { SceneExport } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' + import { SceneContent, SceneDivider, SceneTitleSection } from '~/layout/scenes/SceneContent' import { groupsModel } from '~/models/groupsModel' +import { Query } from '~/queries/Query/Query' import { QueryContext } from '~/queries/types' +import { GroupTypeIndex } from '~/types' + import { getCRMColumns } from './crm/utils' +import { groupViewLogic } from './groupViewLogic' import { groupsListLogic } from './groupsListLogic' import { groupsSceneLogic } from './groupsSceneLogic' -import { groupViewLogic } from './groupViewLogic' export function Groups({ groupTypeIndex }: { groupTypeIndex: GroupTypeIndex }): JSX.Element { const { groupTypeName, groupTypeNamePlural } = useValues(groupsSceneLogic) diff --git a/frontend/src/scenes/groups/GroupsIntroduction.tsx b/frontend/src/scenes/groups/GroupsIntroduction.tsx index d0626158a5..49e4589c0c 100644 --- a/frontend/src/scenes/groups/GroupsIntroduction.tsx +++ b/frontend/src/scenes/groups/GroupsIntroduction.tsx @@ -1,5 +1,6 @@ import { IconOpenSidebar } from '@posthog/icons' import { LemonButton, Link } from '@posthog/lemon-ui' + import { PayGateMini } from 'lib/components/PayGateMini/PayGateMini' import { AvailableFeature } from '~/types' diff --git a/frontend/src/scenes/groups/GroupsNew.tsx b/frontend/src/scenes/groups/GroupsNew.tsx index 61c73fea67..f080395f96 100644 --- a/frontend/src/scenes/groups/GroupsNew.tsx +++ b/frontend/src/scenes/groups/GroupsNew.tsx @@ -1,13 +1,15 @@ -import { LemonButton, LemonDivider, LemonInput, LemonSegmentedButton } from '@posthog/lemon-ui' -import { router } from 'kea-router' -import { PageHeader } from 'lib/components/PageHeader' -import { SceneExport } from 'scenes/sceneTypes' -import { urls } from 'scenes/urls' -import { groupsNewLogic } from 'scenes/groups/groupsNewLogic' import { useActions, useValues } from 'kea' import { Form, Group } from 'kea-forms' -import { LemonField } from 'lib/lemon-ui/LemonField' +import { router } from 'kea-router' + import { IconPlus, IconTrash } from '@posthog/icons' +import { LemonButton, LemonDivider, LemonInput, LemonSegmentedButton } from '@posthog/lemon-ui' + +import { PageHeader } from 'lib/components/PageHeader' +import { LemonField } from 'lib/lemon-ui/LemonField' +import { groupsNewLogic } from 'scenes/groups/groupsNewLogic' +import { SceneExport } from 'scenes/sceneTypes' +import { urls } from 'scenes/urls' interface GroupsNewSceneProps { groupTypeIndex?: string diff --git a/frontend/src/scenes/groups/RelatedGroups.tsx b/frontend/src/scenes/groups/RelatedGroups.tsx index 0a6a9ae2c7..e9df9669b6 100644 --- a/frontend/src/scenes/groups/RelatedGroups.tsx +++ b/frontend/src/scenes/groups/RelatedGroups.tsx @@ -1,5 +1,7 @@ -import { IconPerson } from '@posthog/icons' import { useValues } from 'kea' + +import { IconPerson } from '@posthog/icons' + import { LemonTable, LemonTableColumns } from 'lib/lemon-ui/LemonTable' import { capitalizeFirstLetter } from 'lib/utils' import { relatedGroupsLogic } from 'scenes/groups/relatedGroupsLogic' diff --git a/frontend/src/scenes/groups/activityDescriptions.tsx b/frontend/src/scenes/groups/activityDescriptions.tsx index 9f2f1b6cc9..f2c34ca9eb 100644 --- a/frontend/src/scenes/groups/activityDescriptions.tsx +++ b/frontend/src/scenes/groups/activityDescriptions.tsx @@ -1,7 +1,7 @@ import { ActivityLogItem, - defaultDescriber, HumanizedChange, + defaultDescriber, userNameForLogItem, } from 'lib/components/ActivityLog/humanizeActivity' diff --git a/frontend/src/scenes/groups/cards/GroupDashboardCard.tsx b/frontend/src/scenes/groups/cards/GroupDashboardCard.tsx index 006935dcfc..33a7a43709 100644 --- a/frontend/src/scenes/groups/cards/GroupDashboardCard.tsx +++ b/frontend/src/scenes/groups/cards/GroupDashboardCard.tsx @@ -1,8 +1,9 @@ import { useActions, useValues } from 'kea' +import { useEffect, useState } from 'react' + import { QueryCard } from 'lib/components/Cards/InsightCard/QueryCard' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' -import { useEffect, useState } from 'react' import { Dashboard } from 'scenes/dashboard/Dashboard' import { dashboardLogic } from 'scenes/dashboard/dashboardLogic' import { groupLogic } from 'scenes/groups/groupLogic' diff --git a/frontend/src/scenes/groups/cards/GroupPropertiesCard.tsx b/frontend/src/scenes/groups/cards/GroupPropertiesCard.tsx index b141a16c3f..00ccf53ca7 100644 --- a/frontend/src/scenes/groups/cards/GroupPropertiesCard.tsx +++ b/frontend/src/scenes/groups/cards/GroupPropertiesCard.tsx @@ -1,7 +1,8 @@ import { useActions } from 'kea' +import { useMemo } from 'react' + import { PropertiesTable } from 'lib/components/PropertiesTable' import { LemonButton } from 'lib/lemon-ui/LemonButton' -import { useMemo } from 'react' import { urls } from 'scenes/urls' import { Group, PropertyDefinitionType } from '~/types' diff --git a/frontend/src/scenes/groups/crm/utils.tsx b/frontend/src/scenes/groups/crm/utils.tsx index 022e79432a..c0287eb4d5 100644 --- a/frontend/src/scenes/groups/crm/utils.tsx +++ b/frontend/src/scenes/groups/crm/utils.tsx @@ -5,6 +5,7 @@ import stringWithWBR from 'lib/utils/stringWithWBR' import { currencyFormatter } from 'scenes/billing/billing-utils' import { PersonDisplay } from 'scenes/persons/PersonDisplay' import { urls } from 'scenes/urls' + import { GroupsQuery } from '~/queries/schema/schema-general' import { QueryContext } from '~/queries/types' import { GroupTypeIndex } from '~/types' diff --git a/frontend/src/scenes/groups/groupLogic.ts b/frontend/src/scenes/groups/groupLogic.ts index a83498a525..7dc5ab31e9 100644 --- a/frontend/src/scenes/groups/groupLogic.ts +++ b/frontend/src/scenes/groups/groupLogic.ts @@ -1,8 +1,11 @@ import { actions, afterMount, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { urlToAction } from 'kea-router' + import api from 'lib/api' +import { FEATURE_FLAGS } from 'lib/constants' import { lemonToast } from 'lib/lemon-ui/LemonToast' +import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { toParams } from 'lib/utils' import { capitalizeFirstLetter } from 'lib/utils' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' @@ -11,6 +14,7 @@ import { Scene } from 'scenes/sceneTypes' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' +import { SIDE_PANEL_CONTEXT_KEY, SidePanelSceneContext } from '~/layout/navigation-3000/sidepanel/types' import { groupsModel } from '~/models/groupsModel' import { defaultDataTableColumns } from '~/queries/nodes/DataTable/utils' import { DataTableNode, Node, NodeKind } from '~/queries/schema/schema-general' @@ -18,9 +22,6 @@ import { isDataTableNode } from '~/queries/utils' import { ActivityScope, Breadcrumb, Group, GroupTypeIndex, PropertyFilterType, PropertyOperator } from '~/types' import type { groupLogicType } from './groupLogicType' -import { SIDE_PANEL_CONTEXT_KEY, SidePanelSceneContext } from '~/layout/navigation-3000/sidepanel/types' -import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { FEATURE_FLAGS } from 'lib/constants' function getGroupEventsQuery(groupTypeIndex: number, groupKey: string): DataTableNode { return { diff --git a/frontend/src/scenes/groups/groupViewLogic.ts b/frontend/src/scenes/groups/groupViewLogic.ts index 7db164bcb7..ac6c8094ce 100644 --- a/frontend/src/scenes/groups/groupViewLogic.ts +++ b/frontend/src/scenes/groups/groupViewLogic.ts @@ -1,13 +1,17 @@ -import { lemonToast } from '@posthog/lemon-ui' import { actions, connect, kea, listeners, path, reducers } from 'kea' import posthog from 'posthog-js' -import type { groupViewLogicType } from './groupViewLogicType' + +import { lemonToast } from '@posthog/lemon-ui' + +import { eventUsageLogic } from 'lib/utils/eventUsageLogic' + import { projectTreeDataLogic } from '~/layout/panel-layout/ProjectTree/projectTreeDataLogic' import { panelLayoutLogic } from '~/layout/panel-layout/panelLayoutLogic' -import { eventUsageLogic } from 'lib/utils/eventUsageLogic' import { FileSystemEntry } from '~/queries/schema/schema-general' import { GroupTypeIndex } from '~/types' +import type { groupViewLogicType } from './groupViewLogicType' + export const groupViewLogic = kea([ path(['scenes', 'groups', 'groupView']), connect(() => ({ diff --git a/frontend/src/scenes/groups/groupsListLogic.test.ts b/frontend/src/scenes/groups/groupsListLogic.test.ts index 8c12f5243f..9fb51937b3 100644 --- a/frontend/src/scenes/groups/groupsListLogic.test.ts +++ b/frontend/src/scenes/groups/groupsListLogic.test.ts @@ -1,10 +1,12 @@ import { router } from 'kea-router' import { expectLogic } from 'kea-test-utils' + +import { GroupsQuery, NodeKind } from '~/queries/schema/schema-general' import { initKeaTests } from '~/test/init' -import { groupsListLogic } from './groupsListLogic' -import { NodeKind, GroupsQuery } from '~/queries/schema/schema-general' import { AppContext, GroupPropertyFilter, PropertyFilterType } from '~/types' +import { groupsListLogic } from './groupsListLogic' + describe('groupsListLogic', () => { let logic: ReturnType diff --git a/frontend/src/scenes/groups/groupsListLogic.ts b/frontend/src/scenes/groups/groupsListLogic.ts index 8775e11822..9edd1a8537 100644 --- a/frontend/src/scenes/groups/groupsListLogic.ts +++ b/frontend/src/scenes/groups/groupsListLogic.ts @@ -1,5 +1,7 @@ import { actions, afterMount, connect, kea, key, listeners, path, props, reducers } from 'kea' import { actionToUrl, router, urlToAction } from 'kea-router' +import posthog from 'posthog-js' + import { groupsAccessLogic } from 'lib/introductions/groupsAccessLogic' import { teamLogic } from 'scenes/teamLogic' @@ -10,7 +12,6 @@ import { DataTableNode } from '~/queries/schema/schema-general' import { GroupPropertyFilter, GroupTypeIndex } from '~/types' import type { groupsListLogicType } from './groupsListLogicType' -import posthog from 'posthog-js' export interface GroupsListLogicProps { groupTypeIndex: GroupTypeIndex diff --git a/frontend/src/scenes/groups/groupsNewLogic.test.ts b/frontend/src/scenes/groups/groupsNewLogic.test.ts index 8e76bbef2f..1cd8b8203f 100644 --- a/frontend/src/scenes/groups/groupsNewLogic.test.ts +++ b/frontend/src/scenes/groups/groupsNewLogic.test.ts @@ -1,7 +1,7 @@ import { initKeaTests } from '~/test/init' -import {} from '~/types' +import '~/types' -import { flattenProperties, groupsNewLogic, GroupsNewLogicProps } from './groupsNewLogic' +import { GroupsNewLogicProps, flattenProperties, groupsNewLogic } from './groupsNewLogic' describe('groupsNewLogic', () => { let logic: ReturnType diff --git a/frontend/src/scenes/groups/groupsNewLogic.ts b/frontend/src/scenes/groups/groupsNewLogic.ts index f48a40453e..57381214c7 100644 --- a/frontend/src/scenes/groups/groupsNewLogic.ts +++ b/frontend/src/scenes/groups/groupsNewLogic.ts @@ -1,19 +1,21 @@ import { actions, afterMount, beforeUnmount, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' +import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' import { actionToUrl } from 'kea-router' +import { router } from 'kea-router' + import api from 'lib/api' +import { FEATURE_FLAGS } from 'lib/constants' +import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' +import { featureFlagLogic } from 'lib/logic/featureFlagLogic' +import { capitalizeFirstLetter } from 'lib/utils' +import { Scene } from 'scenes/sceneTypes' +import { urls } from 'scenes/urls' + +import { groupsModel } from '~/models/groupsModel' +import { Breadcrumb, CreateGroupParams, Group, GroupTypeIndex } from '~/types' import type { groupsNewLogicType } from './groupsNewLogicType' -import { forms } from 'kea-forms' -import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' -import { CreateGroupParams, Group, GroupTypeIndex, Breadcrumb } from '~/types' -import { urls } from 'scenes/urls' -import { groupsModel } from '~/models/groupsModel' -import { Scene } from 'scenes/sceneTypes' -import { capitalizeFirstLetter } from 'lib/utils' -import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { FEATURE_FLAGS } from 'lib/constants' -import { router } from 'kea-router' export type GroupsNewLogicProps = { groupTypeIndex: number diff --git a/frontend/src/scenes/groups/groupsSceneLogic.ts b/frontend/src/scenes/groups/groupsSceneLogic.ts index a567532572..1e77b97aaf 100644 --- a/frontend/src/scenes/groups/groupsSceneLogic.ts +++ b/frontend/src/scenes/groups/groupsSceneLogic.ts @@ -1,5 +1,6 @@ import { actions, connect, kea, path, reducers, selectors } from 'kea' import { urlToAction } from 'kea-router' + import { GroupsAccessStatus } from 'lib/introductions/groupsAccessLogic' import { capitalizeFirstLetter } from 'lib/utils' import { Scene } from 'scenes/sceneTypes' diff --git a/frontend/src/scenes/groups/relatedGroupsLogic.ts b/frontend/src/scenes/groups/relatedGroupsLogic.ts index fc7d4f2d56..2b13927152 100644 --- a/frontend/src/scenes/groups/relatedGroupsLogic.ts +++ b/frontend/src/scenes/groups/relatedGroupsLogic.ts @@ -1,5 +1,6 @@ import { actions, connect, events, kea, key, path, props } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { toParams } from 'lib/utils' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/heatmaps/FilterPanel.tsx b/frontend/src/scenes/heatmaps/FilterPanel.tsx index b339d86cb6..dd25af33a0 100644 --- a/frontend/src/scenes/heatmaps/FilterPanel.tsx +++ b/frontend/src/scenes/heatmaps/FilterPanel.tsx @@ -1,15 +1,17 @@ -import { IconCollapse } from '@posthog/icons' import clsx from 'clsx' +import { useEffect, useState } from 'react' + +import { IconCollapse } from '@posthog/icons' + import { DateFilter } from 'lib/components/DateFilter/DateFilter' +import { heatmapDateOptions } from 'lib/components/IframedToolbarBrowser/utils' import { HeatmapsSettings } from 'lib/components/heatmaps/HeatMapsSettings' import { CommonFilters, HeatmapFilters, HeatmapFixedPositionMode } from 'lib/components/heatmaps/types' -import { heatmapDateOptions } from 'lib/components/IframedToolbarBrowser/utils' -import { IconChevronRight } from 'lib/lemon-ui/icons' import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LoadingBar } from 'lib/lemon-ui/LoadingBar' import { Tooltip } from 'lib/lemon-ui/Tooltip' -import { useEffect, useState } from 'react' +import { IconChevronRight } from 'lib/lemon-ui/icons' import { TestAccountFilter } from 'scenes/insights/filters/TestAccountFilter' const useDebounceLoading = (loading: boolean, delay = 200): boolean => { diff --git a/frontend/src/scenes/heatmaps/FixedReplayHeatmapBrowser.tsx b/frontend/src/scenes/heatmaps/FixedReplayHeatmapBrowser.tsx index d8932eaf49..670b883dfa 100644 --- a/frontend/src/scenes/heatmaps/FixedReplayHeatmapBrowser.tsx +++ b/frontend/src/scenes/heatmaps/FixedReplayHeatmapBrowser.tsx @@ -1,15 +1,17 @@ -import { IconLlmPromptEvaluation } from '@posthog/icons' import { useActions, useValues } from 'kea' -import { HeatmapCanvas } from 'lib/components/heatmaps/HeatmapCanvas' -import { heatmapDataLogic } from 'lib/components/heatmaps/heatmapDataLogic' +import React, { useEffect } from 'react' + +import { IconLlmPromptEvaluation } from '@posthog/icons' + import { ScreenShotEditor } from 'lib/components/TakeScreenshot/ScreenShotEditor' import { takeScreenshotLogic } from 'lib/components/TakeScreenshot/takeScreenshotLogic' +import { HeatmapCanvas } from 'lib/components/heatmaps/HeatmapCanvas' +import { heatmapDataLogic } from 'lib/components/heatmaps/heatmapDataLogic' import { FEATURE_FLAGS } from 'lib/constants' import { useResizeObserver } from 'lib/hooks/useResizeObserver' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { lemonToast } from 'lib/lemon-ui/LemonToast' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import React, { useEffect } from 'react' import { FilterPanel } from 'scenes/heatmaps/FilterPanel' import { heatmapsBrowserLogic } from 'scenes/heatmaps/heatmapsBrowserLogic' diff --git a/frontend/src/scenes/heatmaps/HeatmapsBrowser.stories.tsx b/frontend/src/scenes/heatmaps/HeatmapsBrowser.stories.tsx index 60f736f670..cdf977837d 100644 --- a/frontend/src/scenes/heatmaps/HeatmapsBrowser.stories.tsx +++ b/frontend/src/scenes/heatmaps/HeatmapsBrowser.stories.tsx @@ -1,10 +1,13 @@ import { Meta, StoryObj } from '@storybook/react' + import { App } from 'scenes/App' import { urls } from 'scenes/urls' -import heatmapResults from './__mocks__/heatmapResults.json' + import { mswDecorator, useStorybookMocks } from '~/mocks/browser' import { MockSignature } from '~/mocks/utils' +import heatmapResults from './__mocks__/heatmapResults.json' + const query = (topUrls: [string, number][] = []): MockSignature => { return async (req, res, ctx) => { const json = await req.clone().json() diff --git a/frontend/src/scenes/heatmaps/HeatmapsBrowser.tsx b/frontend/src/scenes/heatmaps/HeatmapsBrowser.tsx index fd8da67fe3..6265285479 100644 --- a/frontend/src/scenes/heatmaps/HeatmapsBrowser.tsx +++ b/frontend/src/scenes/heatmaps/HeatmapsBrowser.tsx @@ -1,3 +1,6 @@ +import { BindLogic, useActions, useValues } from 'kea' +import { useRef } from 'react' + import { IconGear, IconLaptop, IconPhone, IconRevert, IconTabletLandscape, IconTabletPortrait } from '@posthog/icons' import { LemonBanner, @@ -7,19 +10,18 @@ import { LemonSegmentedButton, LemonSkeleton, } from '@posthog/lemon-ui' -import { BindLogic, useActions, useValues } from 'kea' + import { AuthorizedUrlList } from 'lib/components/AuthorizedUrlList/AuthorizedUrlList' -import { appEditorUrl, AuthorizedUrlListType } from 'lib/components/AuthorizedUrlList/authorizedUrlListLogic' +import { AuthorizedUrlListType, appEditorUrl } from 'lib/components/AuthorizedUrlList/authorizedUrlListLogic' import { DetectiveHog, FilmCameraHog } from 'lib/components/hedgehogs' import { IconOpenInNew } from 'lib/lemon-ui/icons' -import { useRef } from 'react' import { FixedReplayHeatmapBrowser } from 'scenes/heatmaps/FixedReplayHeatmapBrowser' import { teamLogic } from 'scenes/teamLogic' import { sidePanelSettingsLogic } from '~/layout/navigation-3000/sidepanel/panels/sidePanelSettingsLogic' -import { heatmapsBrowserLogic } from './heatmapsBrowserLogic' import { IframeHeatmapBrowser } from './IframeHeatmapBrowser' +import { heatmapsBrowserLogic } from './heatmapsBrowserLogic' function UrlSearchHeader(): JSX.Element { const logic = heatmapsBrowserLogic() diff --git a/frontend/src/scenes/heatmaps/IframeHeatmapBrowser.tsx b/frontend/src/scenes/heatmaps/IframeHeatmapBrowser.tsx index ef33bff722..38c8a7aca7 100644 --- a/frontend/src/scenes/heatmaps/IframeHeatmapBrowser.tsx +++ b/frontend/src/scenes/heatmaps/IframeHeatmapBrowser.tsx @@ -1,17 +1,20 @@ -import { IconLlmPromptEvaluation } from '@posthog/icons' import { useActions, useValues } from 'kea' -import { HeatmapCanvas } from 'lib/components/heatmaps/HeatmapCanvas' -import { heatmapDataLogic } from 'lib/components/heatmaps/heatmapDataLogic' +import React, { useEffect } from 'react' + +import { IconLlmPromptEvaluation } from '@posthog/icons' + import { ScreenShotEditor } from 'lib/components/TakeScreenshot/ScreenShotEditor' import { takeScreenshotLogic } from 'lib/components/TakeScreenshot/takeScreenshotLogic' +import { HeatmapCanvas } from 'lib/components/heatmaps/HeatmapCanvas' +import { heatmapDataLogic } from 'lib/components/heatmaps/heatmapDataLogic' import { FEATURE_FLAGS } from 'lib/constants' import { useResizeObserver } from 'lib/hooks/useResizeObserver' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { lemonToast } from 'lib/lemon-ui/LemonToast' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import React, { useEffect } from 'react' import { FilterPanel } from 'scenes/heatmaps/FilterPanel' import { heatmapsBrowserLogic } from 'scenes/heatmaps/heatmapsBrowserLogic' + import { ViewportChooser } from './HeatmapsBrowser' export function IframeHeatmapBrowser({ diff --git a/frontend/src/scenes/heatmaps/heatmapsBrowserLogic.ts b/frontend/src/scenes/heatmaps/heatmapsBrowserLogic.ts index febd763326..369b640053 100644 --- a/frontend/src/scenes/heatmaps/heatmapsBrowserLogic.ts +++ b/frontend/src/scenes/heatmaps/heatmapsBrowserLogic.ts @@ -1,23 +1,24 @@ import { actions, afterMount, connect, kea, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { actionToUrl, router, urlToAction } from 'kea-router' -import api from 'lib/api' -import { - authorizedUrlListLogic, - AuthorizedUrlListType, - defaultAuthorizedUrlProperties, -} from 'lib/components/AuthorizedUrlList/authorizedUrlListLogic' -import { heatmapDataLogic } from 'lib/components/heatmaps/heatmapDataLogic' -import { CommonFilters, HeatmapFilters, HeatmapFixedPositionMode } from 'lib/components/heatmaps/types' -import { - calculateViewportRange, - DEFAULT_HEATMAP_FILTERS, - PostHogAppToolbarEvent, -} from 'lib/components/IframedToolbarBrowser/utils' -import { LemonBannerProps } from 'lib/lemon-ui/LemonBanner' -import { objectsEqual } from 'lib/utils' import posthog from 'posthog-js' import { RefObject } from 'react' + +import api from 'lib/api' +import { + AuthorizedUrlListType, + authorizedUrlListLogic, + defaultAuthorizedUrlProperties, +} from 'lib/components/AuthorizedUrlList/authorizedUrlListLogic' +import { + DEFAULT_HEATMAP_FILTERS, + PostHogAppToolbarEvent, + calculateViewportRange, +} from 'lib/components/IframedToolbarBrowser/utils' +import { heatmapDataLogic } from 'lib/components/heatmaps/heatmapDataLogic' +import { CommonFilters, HeatmapFilters, HeatmapFixedPositionMode } from 'lib/components/heatmaps/types' +import { LemonBannerProps } from 'lib/lemon-ui/LemonBanner' +import { objectsEqual } from 'lib/utils' import { removeReplayIframeDataFromLocalStorage } from 'scenes/session-recordings/player/sessionRecordingPlayerLogic' import { hogql } from '~/queries/utils' diff --git a/frontend/src/scenes/hog-functions/HogFunctionScene.tsx b/frontend/src/scenes/hog-functions/HogFunctionScene.tsx index a7011fa2e9..fbcbd88f27 100644 --- a/frontend/src/scenes/hog-functions/HogFunctionScene.tsx +++ b/frontend/src/scenes/hog-functions/HogFunctionScene.tsx @@ -1,5 +1,6 @@ import { actions, connect, kea, key, path, props, reducers, selectors, useActions, useValues } from 'kea' import { actionToUrl, router, urlToAction } from 'kea-router' + import { ActivityLog } from 'lib/components/ActivityLog/ActivityLog' import { NotFound } from 'lib/components/NotFound' import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' @@ -7,8 +8,8 @@ import { LemonTab, LemonTabs } from 'lib/lemon-ui/LemonTabs' import { capitalizeFirstLetter } from 'lib/utils' import { HogFunctionConfiguration } from 'scenes/hog-functions/configuration/HogFunctionConfiguration' import { - hogFunctionConfigurationLogic, HogFunctionConfigurationLogicProps, + hogFunctionConfigurationLogic, } from 'scenes/hog-functions/configuration/hogFunctionConfigurationLogic' import { HogFunctionLogs } from 'scenes/hog-functions/logs/HogFunctionLogs' import { HogFunctionMetrics } from 'scenes/hog-functions/metrics/HogFunctionMetrics' diff --git a/frontend/src/scenes/hog-functions/configuration/HogFunctionConfiguration.tsx b/frontend/src/scenes/hog-functions/configuration/HogFunctionConfiguration.tsx index 3aa56ea0bc..391784f5c4 100644 --- a/frontend/src/scenes/hog-functions/configuration/HogFunctionConfiguration.tsx +++ b/frontend/src/scenes/hog-functions/configuration/HogFunctionConfiguration.tsx @@ -1,3 +1,7 @@ +import clsx from 'clsx' +import { BindLogic, useActions, useValues } from 'kea' +import { Form } from 'kea-forms' + import { LemonBanner, LemonButton, @@ -7,9 +11,7 @@ import { LemonTag, SpinnerOverlay, } from '@posthog/lemon-ui' -import clsx from 'clsx' -import { BindLogic, useActions, useValues } from 'kea' -import { Form } from 'kea-forms' + import { NotFound } from 'lib/components/NotFound' import { PageHeader } from 'lib/components/PageHeader' import { PayGateMini } from 'lib/components/PayGateMini/PayGateMini' @@ -19,19 +21,19 @@ import { hogFunctionConfigurationLogic } from 'scenes/hog-functions/configuratio import { HogFunctionFilters } from 'scenes/hog-functions/filters/HogFunctionFilters' import { HogFunctionMappings } from 'scenes/hog-functions/mapping/HogFunctionMappings' import { HogFunctionEventEstimates } from 'scenes/hog-functions/metrics/HogFunctionEventEstimates' -import { HogFunctionInputs } from './components/HogFunctionInputs' import { AvailableFeature } from '~/types' +import { humanizeHogFunctionType } from '../hog-function-utils' import { HogFunctionStatusIndicator } from '../misc/HogFunctionStatusIndicator' import { HogFunctionStatusTag } from '../misc/HogFunctionStatusTag' -import { HogFunctionSourceWebhookInfo } from './components/HogFunctionSourceWebhookInfo' -import { HogFunctionSourceWebhookTest } from './components/HogFunctionSourceWebhookTest' import { HogFunctionIconEditable } from './HogFunctionIcon' import { HogFunctionTest } from './HogFunctionTest' import { HogFunctionCode } from './components/HogFunctionCode' +import { HogFunctionInputs } from './components/HogFunctionInputs' +import { HogFunctionSourceWebhookInfo } from './components/HogFunctionSourceWebhookInfo' +import { HogFunctionSourceWebhookTest } from './components/HogFunctionSourceWebhookTest' import { HogFunctionTemplateOptions } from './components/HogFunctionTemplateOptions' -import { humanizeHogFunctionType } from '../hog-function-utils' import { InlineEditableField } from './components/InlineEditableField' export interface HogFunctionConfigurationProps { diff --git a/frontend/src/scenes/hog-functions/configuration/HogFunctionIcon.tsx b/frontend/src/scenes/hog-functions/configuration/HogFunctionIcon.tsx index 5ef6f4e13d..e0a7bf7ad0 100644 --- a/frontend/src/scenes/hog-functions/configuration/HogFunctionIcon.tsx +++ b/frontend/src/scenes/hog-functions/configuration/HogFunctionIcon.tsx @@ -1,10 +1,12 @@ -import { LemonButton, LemonFileInput, LemonInput, LemonSkeleton, lemonToast, Popover, Spinner } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' -import { IconUploadFile } from 'lib/lemon-ui/icons' import { useState } from 'react' -import { hogFunctionIconLogic, HogFunctionIconLogicProps } from './hogFunctionIconLogic' +import { LemonButton, LemonFileInput, LemonInput, LemonSkeleton, Popover, Spinner, lemonToast } from '@posthog/lemon-ui' + +import { IconUploadFile } from 'lib/lemon-ui/icons' + +import { HogFunctionIconLogicProps, hogFunctionIconLogic } from './hogFunctionIconLogic' const fileToBase64 = (file?: File): Promise => { return new Promise((resolve) => { diff --git a/frontend/src/scenes/hog-functions/configuration/HogFunctionTest.tsx b/frontend/src/scenes/hog-functions/configuration/HogFunctionTest.tsx index e18337325e..8e24d2b8dd 100644 --- a/frontend/src/scenes/hog-functions/configuration/HogFunctionTest.tsx +++ b/frontend/src/scenes/hog-functions/configuration/HogFunctionTest.tsx @@ -1,3 +1,9 @@ +import clsx from 'clsx' +import { useActions, useValues } from 'kea' +import { Form } from 'kea-forms' +import { MarkerSeverity, editor as monacoEditor } from 'monaco-editor' +import { useRef } from 'react' + import { IconInfo, IconX } from '@posthog/icons' import { LemonBanner, @@ -10,15 +16,11 @@ import { Spinner, Tooltip, } from '@posthog/lemon-ui' -import clsx from 'clsx' -import { useActions, useValues } from 'kea' -import { Form } from 'kea-forms' + import { TZLabel } from 'lib/components/TZLabel' import { More } from 'lib/lemon-ui/LemonButton/More' import { LemonField } from 'lib/lemon-ui/LemonField' import { CodeEditorResizeable } from 'lib/monaco/CodeEditorResizable' -import { editor as monacoEditor, MarkerSeverity } from 'monaco-editor' -import { useRef } from 'react' import { hogFunctionConfigurationLogic } from './hogFunctionConfigurationLogic' import { hogFunctionTestLogic } from './hogFunctionTestLogic' diff --git a/frontend/src/scenes/hog-functions/configuration/components/HogFunctionCode.tsx b/frontend/src/scenes/hog-functions/configuration/components/HogFunctionCode.tsx index c4c2b4dcce..0f789c6c4b 100644 --- a/frontend/src/scenes/hog-functions/configuration/components/HogFunctionCode.tsx +++ b/frontend/src/scenes/hog-functions/configuration/components/HogFunctionCode.tsx @@ -1,12 +1,15 @@ -import { IconInfo } from '@posthog/icons' -import { LemonDropdown, LemonButton, Link, LemonBanner } from '@posthog/lemon-ui' import clsx from 'clsx' +import { useActions, useValues } from 'kea' +import { useRef } from 'react' + +import { IconInfo } from '@posthog/icons' +import { LemonBanner, LemonButton, LemonDropdown, Link } from '@posthog/lemon-ui' + import { LemonField } from 'lib/lemon-ui/LemonField' import { CodeEditorResizeable } from 'lib/monaco/CodeEditorResizable' import MaxTool from 'scenes/max/MaxTool' + import { hogFunctionConfigurationLogic } from '../hogFunctionConfigurationLogic' -import { useValues, useActions } from 'kea' -import { useRef } from 'react' import { HogFunctionTemplateOptions } from './HogFunctionTemplateOptions' export function HogFunctionCode(): JSX.Element { diff --git a/frontend/src/scenes/hog-functions/configuration/components/HogFunctionInputs.tsx b/frontend/src/scenes/hog-functions/configuration/components/HogFunctionInputs.tsx index 1a0a8908d4..abfddbaac3 100644 --- a/frontend/src/scenes/hog-functions/configuration/components/HogFunctionInputs.tsx +++ b/frontend/src/scenes/hog-functions/configuration/components/HogFunctionInputs.tsx @@ -1,11 +1,15 @@ -import { LemonButton, LemonBanner } from '@posthog/lemon-ui' import clsx from 'clsx' -import MaxTool from 'scenes/max/MaxTool' -import { useValues, useActions } from 'kea' -import { AvailableFeature, CyclotronJobInputSchemaType } from '~/types' -import { PayGateButton } from 'lib/components/PayGateMini/PayGateButton' -import { IconX, IconCheck, IconPlus } from '@posthog/icons' +import { useActions, useValues } from 'kea' + +import { IconCheck, IconPlus, IconX } from '@posthog/icons' +import { LemonBanner, LemonButton } from '@posthog/lemon-ui' + import { CyclotronJobInputs } from 'lib/components/CyclotronJob/CyclotronJobInputs' +import { PayGateButton } from 'lib/components/PayGateMini/PayGateButton' +import MaxTool from 'scenes/max/MaxTool' + +import { AvailableFeature, CyclotronJobInputSchemaType } from '~/types' + import { hogFunctionConfigurationLogic } from '../hogFunctionConfigurationLogic' export function HogFunctionInputs(): JSX.Element { diff --git a/frontend/src/scenes/hog-functions/configuration/components/HogFunctionSourceWebhookInfo.tsx b/frontend/src/scenes/hog-functions/configuration/components/HogFunctionSourceWebhookInfo.tsx index e3d2afcc21..382289e3fb 100644 --- a/frontend/src/scenes/hog-functions/configuration/components/HogFunctionSourceWebhookInfo.tsx +++ b/frontend/src/scenes/hog-functions/configuration/components/HogFunctionSourceWebhookInfo.tsx @@ -1,9 +1,10 @@ import { useValues } from 'kea' + import { CodeSnippet } from 'lib/components/CodeSnippet' import { LemonLabel } from 'lib/lemon-ui/LemonLabel' +import { publicWebhooksHostOrigin } from 'lib/utils/apiHost' import { hogFunctionConfigurationLogic } from '../hogFunctionConfigurationLogic' -import { publicWebhooksHostOrigin } from 'lib/utils/apiHost' export function HogFunctionSourceWebhookInfo(): JSX.Element { const { logicProps } = useValues(hogFunctionConfigurationLogic) diff --git a/frontend/src/scenes/hog-functions/configuration/components/HogFunctionSourceWebhookTest.tsx b/frontend/src/scenes/hog-functions/configuration/components/HogFunctionSourceWebhookTest.tsx index 15f54c2efd..209902316d 100644 --- a/frontend/src/scenes/hog-functions/configuration/components/HogFunctionSourceWebhookTest.tsx +++ b/frontend/src/scenes/hog-functions/configuration/components/HogFunctionSourceWebhookTest.tsx @@ -1,3 +1,8 @@ +import clsx from 'clsx' +import { useActions, useValues } from 'kea' +import { Form } from 'kea-forms' +import { useRef } from 'react' + import { IconInfo, IconX } from '@posthog/icons' import { LemonBanner, @@ -9,13 +14,10 @@ import { LemonTag, Tooltip, } from '@posthog/lemon-ui' -import clsx from 'clsx' -import { useActions, useValues } from 'kea' -import { Form } from 'kea-forms' + import { CodeSnippet } from 'lib/components/CodeSnippet' import { LemonField } from 'lib/lemon-ui/LemonField' import { CodeEditorResizeable } from 'lib/monaco/CodeEditorResizable' -import { useRef } from 'react' import { hogFunctionConfigurationLogic } from '../hogFunctionConfigurationLogic' import { hogFunctionSourceWebhookTestLogic } from './hogFunctionSourceWebhookTestLogic' diff --git a/frontend/src/scenes/hog-functions/configuration/components/HogFunctionTemplateOptions.tsx b/frontend/src/scenes/hog-functions/configuration/components/HogFunctionTemplateOptions.tsx index ceb4822c15..70185b7aaf 100644 --- a/frontend/src/scenes/hog-functions/configuration/components/HogFunctionTemplateOptions.tsx +++ b/frontend/src/scenes/hog-functions/configuration/components/HogFunctionTemplateOptions.tsx @@ -1,7 +1,9 @@ -import { hogFunctionConfigurationLogic } from '../hogFunctionConfigurationLogic' -import { useValues, useActions } from 'kea' +import { useActions, useValues } from 'kea' + import { LemonButton } from '@posthog/lemon-ui' +import { hogFunctionConfigurationLogic } from '../hogFunctionConfigurationLogic' + export function HogFunctionTemplateOptions(): JSX.Element { const { hogFunction, templateHasChanged } = useValues(hogFunctionConfigurationLogic) diff --git a/frontend/src/scenes/hog-functions/configuration/components/InlineEditableField.tsx b/frontend/src/scenes/hog-functions/configuration/components/InlineEditableField.tsx index e41f4809b0..ec35dbd526 100644 --- a/frontend/src/scenes/hog-functions/configuration/components/InlineEditableField.tsx +++ b/frontend/src/scenes/hog-functions/configuration/components/InlineEditableField.tsx @@ -1,3 +1,6 @@ +import clsx from 'clsx' +import { useEffect, useState } from 'react' + import { LemonButton, LemonDivider, @@ -6,8 +9,7 @@ import { LemonInputPropsText, LemonTextArea, } from '@posthog/lemon-ui' -import clsx from 'clsx' -import { useEffect, useState } from 'react' + import { KeyboardShortcut } from '~/layout/navigation-3000/components/KeyboardShortcut' export interface InlineEditableFieldProps extends Pick { diff --git a/frontend/src/scenes/hog-functions/configuration/components/hogFunctionSourceWebhookTestLogic.tsx b/frontend/src/scenes/hog-functions/configuration/components/hogFunctionSourceWebhookTestLogic.tsx index 90d785bfb9..311f841612 100644 --- a/frontend/src/scenes/hog-functions/configuration/components/hogFunctionSourceWebhookTestLogic.tsx +++ b/frontend/src/scenes/hog-functions/configuration/components/hogFunctionSourceWebhookTestLogic.tsx @@ -1,11 +1,12 @@ import { actions, connect, kea, key, path, props, reducers, selectors } from 'kea' import { forms } from 'kea-forms' -import { tryJsonParse } from 'lib/utils' -import { hogFunctionConfigurationLogic, HogFunctionConfigurationLogicProps } from '../hogFunctionConfigurationLogic' -import type { hogFunctionSourceWebhookTestLogicType } from './hogFunctionSourceWebhookTestLogicType' +import { tryJsonParse } from 'lib/utils' import { publicWebhooksHostOrigin } from 'lib/utils/apiHost' +import { HogFunctionConfigurationLogicProps, hogFunctionConfigurationLogic } from '../hogFunctionConfigurationLogic' +import type { hogFunctionSourceWebhookTestLogicType } from './hogFunctionSourceWebhookTestLogicType' + export type HogFunctionSourceWebhookTestForm = { headers: string body: string diff --git a/frontend/src/scenes/hog-functions/configuration/hogFunctionConfigurationLogic.test.ts b/frontend/src/scenes/hog-functions/configuration/hogFunctionConfigurationLogic.test.ts index 47858aaf7b..22ca5f31f8 100644 --- a/frontend/src/scenes/hog-functions/configuration/hogFunctionConfigurationLogic.test.ts +++ b/frontend/src/scenes/hog-functions/configuration/hogFunctionConfigurationLogic.test.ts @@ -1,9 +1,12 @@ import { expectLogic } from 'kea-test-utils' + import api from 'lib/api' import { initKeaTests } from '~/test/init' import { HogFunctionTemplateType, HogFunctionType } from '~/types' +import { hogFunctionConfigurationLogic } from './hogFunctionConfigurationLogic' + jest.mock('lib/api', () => ({ ...jest.requireActual('lib/api'), hogFunctions: { @@ -18,8 +21,6 @@ jest.mock('lib/api', () => ({ const mockApi = api.hogFunctions as jest.Mocked -import { hogFunctionConfigurationLogic } from './hogFunctionConfigurationLogic' - const HOG_TEMPLATE: HogFunctionTemplateType = { free: false, status: 'beta', diff --git a/frontend/src/scenes/hog-functions/configuration/hogFunctionConfigurationLogic.tsx b/frontend/src/scenes/hog-functions/configuration/hogFunctionConfigurationLogic.tsx index a781d5b38f..08b7ecf0f9 100644 --- a/frontend/src/scenes/hog-functions/configuration/hogFunctionConfigurationLogic.tsx +++ b/frontend/src/scenes/hog-functions/configuration/hogFunctionConfigurationLogic.tsx @@ -1,4 +1,3 @@ -import { lemonToast } from '@posthog/lemon-ui' import equal from 'fast-deep-equal' import { actions, afterMount, connect, isBreakpoint, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { forms } from 'kea-forms' @@ -6,13 +5,16 @@ import { loaders } from 'kea-loaders' import { beforeUnload, router } from 'kea-router' import { CombinedLocation } from 'kea-router/lib/utils' import { subscriptions } from 'kea-subscriptions' +import posthog from 'posthog-js' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { dayjs } from 'lib/dayjs' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { uuid } from 'lib/utils' import { deleteWithUndo } from 'lib/utils/deleteWithUndo' import { LiquidRenderer } from 'lib/utils/liquid' -import posthog from 'posthog-js' import { asDisplay } from 'scenes/persons/person-utils' import { pipelineNodeLogic } from 'scenes/pipeline/pipelineNodeLogic' import { projectLogic } from 'scenes/projectLogic' diff --git a/frontend/src/scenes/hog-functions/configuration/hogFunctionIconLogic.ts b/frontend/src/scenes/hog-functions/configuration/hogFunctionIconLogic.ts index 28c3076c3c..9121f2b304 100644 --- a/frontend/src/scenes/hog-functions/configuration/hogFunctionIconLogic.ts +++ b/frontend/src/scenes/hog-functions/configuration/hogFunctionIconLogic.ts @@ -1,5 +1,6 @@ import { actions, kea, key, listeners, path, props, reducers } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { HogFunctionIconResponse } from '~/types' diff --git a/frontend/src/scenes/hog-functions/configuration/hogFunctionTestLogic.tsx b/frontend/src/scenes/hog-functions/configuration/hogFunctionTestLogic.tsx index ed5b7a97f0..998c042900 100644 --- a/frontend/src/scenes/hog-functions/configuration/hogFunctionTestLogic.tsx +++ b/frontend/src/scenes/hog-functions/configuration/hogFunctionTestLogic.tsx @@ -1,17 +1,19 @@ -import { lemonToast } from '@posthog/lemon-ui' import { actions, afterMount, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { forms } from 'kea-forms' +import { editor } from 'monaco-editor' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { tryJsonParse } from 'lib/utils' import { getCurrentTeamId } from 'lib/utils/getAppContext' -import { editor } from 'monaco-editor' import { groupsModel } from '~/models/groupsModel' import { CyclotronJobInvocationGlobals, CyclotronJobTestInvocationResult } from '~/types' import { - hogFunctionConfigurationLogic, HogFunctionConfigurationLogicProps, + hogFunctionConfigurationLogic, sanitizeConfiguration, } from './hogFunctionConfigurationLogic' import type { hogFunctionTestLogicType } from './hogFunctionTestLogicType' diff --git a/frontend/src/scenes/hog-functions/email-templater/EmailTemplater.tsx b/frontend/src/scenes/hog-functions/email-templater/EmailTemplater.tsx index e48a130642..a2227ba1ee 100644 --- a/frontend/src/scenes/hog-functions/email-templater/EmailTemplater.tsx +++ b/frontend/src/scenes/hog-functions/email-templater/EmailTemplater.tsx @@ -1,19 +1,20 @@ -import { LemonButton, LemonLabel, LemonModal, LemonSelect } from '@posthog/lemon-ui' +import clsx from 'clsx' import { BindLogic, useActions, useValues } from 'kea' import { Form } from 'kea-forms' +import EmailEditor from 'react-email-editor' + +import { IconExternal } from '@posthog/icons' +import { LemonButton, LemonLabel, LemonModal, LemonSelect } from '@posthog/lemon-ui' + import { FEATURE_FLAGS } from 'lib/constants' +import { integrationsLogic } from 'lib/integrations/integrationsLogic' import { LemonField } from 'lib/lemon-ui/LemonField' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { CodeEditorInline } from 'lib/monaco/CodeEditorInline' -import EmailEditor from 'react-email-editor' - -import { emailTemplaterLogic, EmailTemplaterLogicProps } from './emailTemplaterLogic' +import { urls } from 'scenes/urls' import { unsubscribeLinkToolCustomJs } from './custom-tools/unsubscribeLinkTool' -import { integrationsLogic } from 'lib/integrations/integrationsLogic' -import { IconExternal } from '@posthog/icons' -import { urls } from 'scenes/urls' -import clsx from 'clsx' +import { EmailTemplaterLogicProps, emailTemplaterLogic } from './emailTemplaterLogic' export type EmailEditorMode = 'full' | 'preview' diff --git a/frontend/src/scenes/hog-functions/email-templater/emailTemplaterLogic.tsx b/frontend/src/scenes/hog-functions/email-templater/emailTemplaterLogic.tsx index c3d8ea8699..89b770a6dd 100644 --- a/frontend/src/scenes/hog-functions/email-templater/emailTemplaterLogic.tsx +++ b/frontend/src/scenes/hog-functions/email-templater/emailTemplaterLogic.tsx @@ -1,17 +1,20 @@ -import { LemonDialog } from '@posthog/lemon-ui' import { actions, afterMount, connect, kea, listeners, path, props, propsChanged, reducers, selectors } from 'kea' import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' +import { Editor, EmailEditorProps, EditorRef as _EditorRef } from 'react-email-editor' + +import { LemonDialog } from '@posthog/lemon-ui' + import api from 'lib/api' import { objectsEqual } from 'lib/utils' -import { MessageTemplate } from 'products/messaging/frontend/TemplateLibrary/messageTemplatesLogic' -import { Editor, EditorRef as _EditorRef, EmailEditorProps } from 'react-email-editor' +import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { PreflightStatus, PropertyDefinition, PropertyDefinitionType, Realm } from '~/types' -import type { emailTemplaterLogicType } from './emailTemplaterLogicType' -import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' +import { MessageTemplate } from 'products/messaging/frontend/TemplateLibrary/messageTemplatesLogic' + import { EmailTemplaterType } from './EmailTemplater' +import type { emailTemplaterLogicType } from './emailTemplaterLogicType' export type UnlayerMergeTags = NonNullable['mergeTags'] diff --git a/frontend/src/scenes/hog-functions/filters/HogFunctionFilters.tsx b/frontend/src/scenes/hog-functions/filters/HogFunctionFilters.tsx index 1fd03831b3..a51d35d23c 100644 --- a/frontend/src/scenes/hog-functions/filters/HogFunctionFilters.tsx +++ b/frontend/src/scenes/hog-functions/filters/HogFunctionFilters.tsx @@ -1,13 +1,16 @@ -import { IconCheck, IconX } from '@posthog/icons' -import { LemonBanner, LemonButton, LemonLabel, LemonSelect } from '@posthog/lemon-ui' import { id } from 'chartjs-plugin-trendline' import clsx from 'clsx' import { useActions, useValues } from 'kea' +import { useMemo } from 'react' + +import { IconCheck, IconX } from '@posthog/icons' +import { LemonBanner, LemonButton, LemonLabel, LemonSelect } from '@posthog/lemon-ui' + import { PropertyFilters } from 'lib/components/PropertyFilters/PropertyFilters' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { TestAccountFilterSwitch } from 'lib/components/TestAccountFiltersSwitch' +import { useFeatureFlag } from 'lib/hooks/useFeatureFlag' import { LemonField } from 'lib/lemon-ui/LemonField' -import { useMemo } from 'react' import { ActionFilter } from 'scenes/insights/filters/ActionFilter/ActionFilter' import { MathAvailability } from 'scenes/insights/filters/ActionFilter/ActionFilterRow/ActionFilterRow' import MaxTool from 'scenes/max/MaxTool' @@ -17,7 +20,6 @@ import { AnyPropertyFilter, CyclotronJobFiltersType, EntityTypes, FilterType } f import { hogFunctionConfigurationLogic } from '../configuration/hogFunctionConfigurationLogic' import { HogFunctionFiltersInternal } from './HogFunctionFiltersInternal' -import { useFeatureFlag } from 'lib/hooks/useFeatureFlag' function sanitizeActionFilters(filters?: FilterType): Partial { if (!filters) { diff --git a/frontend/src/scenes/hog-functions/filters/HogFunctionFiltersInternal.tsx b/frontend/src/scenes/hog-functions/filters/HogFunctionFiltersInternal.tsx index c7bab1f28e..75b79090fd 100644 --- a/frontend/src/scenes/hog-functions/filters/HogFunctionFiltersInternal.tsx +++ b/frontend/src/scenes/hog-functions/filters/HogFunctionFiltersInternal.tsx @@ -1,10 +1,11 @@ -import { LemonSelect } from '@posthog/lemon-ui' import { useValues } from 'kea' +import { useMemo } from 'react' + +import { LemonSelect } from '@posthog/lemon-ui' + import { PropertyFilters } from 'lib/components/PropertyFilters/PropertyFilters' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' - import { LemonField } from 'lib/lemon-ui/LemonField' -import { useMemo } from 'react' import { AnyPropertyFilter, CyclotronJobFiltersType, HogFunctionConfigurationContextId } from '~/types' diff --git a/frontend/src/scenes/hog-functions/list/HogFunctionOrderModal.tsx b/frontend/src/scenes/hog-functions/list/HogFunctionOrderModal.tsx index b6633cfe4c..73c96f5a09 100644 --- a/frontend/src/scenes/hog-functions/list/HogFunctionOrderModal.tsx +++ b/frontend/src/scenes/hog-functions/list/HogFunctionOrderModal.tsx @@ -1,12 +1,13 @@ import { DndContext, DragEndEvent } from '@dnd-kit/core' import { restrictToParentElement, restrictToVerticalAxis } from '@dnd-kit/modifiers' -import { arrayMove, SortableContext, useSortable, verticalListSortingStrategy } from '@dnd-kit/sortable' +import { SortableContext, arrayMove, useSortable, verticalListSortingStrategy } from '@dnd-kit/sortable' import { CSS } from '@dnd-kit/utilities' -import { LemonBadge, LemonButton, LemonModal } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' import { useEffect, useState } from 'react' +import { LemonBadge, LemonButton, LemonModal } from '@posthog/lemon-ui' + import { HogFunctionType } from '~/types' import { hogFunctionsListLogic } from './hogFunctionsListLogic' diff --git a/frontend/src/scenes/hog-functions/list/HogFunctionTemplateList.tsx b/frontend/src/scenes/hog-functions/list/HogFunctionTemplateList.tsx index f66a71228e..427e38f063 100644 --- a/frontend/src/scenes/hog-functions/list/HogFunctionTemplateList.tsx +++ b/frontend/src/scenes/hog-functions/list/HogFunctionTemplateList.tsx @@ -1,16 +1,18 @@ +import { useActions, useValues } from 'kea' +import { useEffect } from 'react' + import { IconMegaphone, IconPlusSmall } from '@posthog/icons' import { LemonButton, LemonInput, LemonTable, Link } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { PayGateButton } from 'lib/components/PayGateMini/PayGateButton' import { LemonTableLink } from 'lib/lemon-ui/LemonTable/LemonTableLink' -import { useEffect } from 'react' import { AvailableFeature } from '~/types' import { HogFunctionIcon } from '../configuration/HogFunctionIcon' import { HogFunctionStatusTag } from '../misc/HogFunctionStatusTag' import { hogFunctionRequestModalLogic } from './hogFunctionRequestModalLogic' -import { hogFunctionTemplateListLogic, HogFunctionTemplateListLogicProps } from './hogFunctionTemplateListLogic' +import { HogFunctionTemplateListLogicProps, hogFunctionTemplateListLogic } from './hogFunctionTemplateListLogic' export function HogFunctionTemplateList({ extraControls, diff --git a/frontend/src/scenes/hog-functions/list/HogFunctionsList.tsx b/frontend/src/scenes/hog-functions/list/HogFunctionsList.tsx index bf6b858939..7f1b4c0712 100644 --- a/frontend/src/scenes/hog-functions/list/HogFunctionsList.tsx +++ b/frontend/src/scenes/hog-functions/list/HogFunctionsList.tsx @@ -1,3 +1,6 @@ +import { BindLogic, useActions, useValues } from 'kea' +import { useCallback, useMemo } from 'react' + import { LemonBadge, LemonButton, @@ -8,12 +11,12 @@ import { Link, Tooltip, } from '@posthog/lemon-ui' -import { BindLogic, useActions, useValues } from 'kea' + +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { More } from 'lib/lemon-ui/LemonButton/More' import { LemonMenuOverlay } from 'lib/lemon-ui/LemonMenu/LemonMenu' -import { updatedAtColumn } from 'lib/lemon-ui/LemonTable/columnUtils' import { LemonTableLink } from 'lib/lemon-ui/LemonTable/LemonTableLink' -import { useCallback, useMemo } from 'react' +import { updatedAtColumn } from 'lib/lemon-ui/LemonTable/columnUtils' import { HogFunctionMetricSparkLine } from 'scenes/hog-functions/metrics/HogFunctionMetricsSparkline' import { urls } from 'scenes/urls' @@ -25,7 +28,6 @@ import { HogFunctionStatusIndicator } from '../misc/HogFunctionStatusIndicator' import { HogFunctionOrderModal } from './HogFunctionOrderModal' import { hogFunctionRequestModalLogic } from './hogFunctionRequestModalLogic' import { HogFunctionListLogicProps, hogFunctionsListLogic } from './hogFunctionsListLogic' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' const urlForHogFunction = (hogFunction: HogFunctionType): string => { if (hogFunction.id.startsWith('plugin-')) { diff --git a/frontend/src/scenes/hog-functions/list/LinkedHogFunctions.tsx b/frontend/src/scenes/hog-functions/list/LinkedHogFunctions.tsx index cab1590bd3..d22bb90d52 100644 --- a/frontend/src/scenes/hog-functions/list/LinkedHogFunctions.tsx +++ b/frontend/src/scenes/hog-functions/list/LinkedHogFunctions.tsx @@ -1,11 +1,12 @@ -import { LemonButton } from '@posthog/lemon-ui' import { useMemo, useState } from 'react' +import { LemonButton } from '@posthog/lemon-ui' + import { CyclotronJobFiltersType, HogFunctionSubTemplateIdType, HogFunctionTypeType } from '~/types' import { HOG_FUNCTION_SUB_TEMPLATE_COMMON_PROPERTIES } from '../sub-templates/sub-templates' -import { HogFunctionList } from './HogFunctionsList' import { HogFunctionTemplateList } from './HogFunctionTemplateList' +import { HogFunctionList } from './HogFunctionsList' export type LinkedHogFunctionsProps = { type: HogFunctionTypeType diff --git a/frontend/src/scenes/hog-functions/list/hogFunctionRequestModalLogic.tsx b/frontend/src/scenes/hog-functions/list/hogFunctionRequestModalLogic.tsx index dbe604c2ea..0faf0831e2 100644 --- a/frontend/src/scenes/hog-functions/list/hogFunctionRequestModalLogic.tsx +++ b/frontend/src/scenes/hog-functions/list/hogFunctionRequestModalLogic.tsx @@ -1,8 +1,10 @@ -import { LemonDialog, LemonInput, LemonTextArea, lemonToast } from '@posthog/lemon-ui' import { actions, connect, kea, listeners, path } from 'kea' +import posthog from 'posthog-js' + +import { LemonDialog, LemonInput, LemonTextArea, lemonToast } from '@posthog/lemon-ui' + import { LemonField } from 'lib/lemon-ui/LemonField' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import posthog from 'posthog-js' import { userLogic } from 'scenes/userLogic' import { HogFunctionTypeType } from '~/types' diff --git a/frontend/src/scenes/hog-functions/list/hogFunctionTemplateListLogic.tsx b/frontend/src/scenes/hog-functions/list/hogFunctionTemplateListLogic.tsx index e0cb6e5930..1242ad54ff 100644 --- a/frontend/src/scenes/hog-functions/list/hogFunctionTemplateListLogic.tsx +++ b/frontend/src/scenes/hog-functions/list/hogFunctionTemplateListLogic.tsx @@ -1,12 +1,14 @@ -import { lemonToast } from '@posthog/lemon-ui' import FuseClass from 'fuse.js' import { actions, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { actionToUrl, combineUrl, router, urlToAction } from 'kea-router' +import posthog from 'posthog-js' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { objectsEqual } from 'lib/utils' -import posthog from 'posthog-js' import { pipelineAccessLogic } from 'scenes/pipeline/pipelineAccessLogic' import { urls } from 'scenes/urls' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/scenes/hog-functions/list/hogFunctionsListLogic.tsx b/frontend/src/scenes/hog-functions/list/hogFunctionsListLogic.tsx index da5a5cf614..f7366580af 100644 --- a/frontend/src/scenes/hog-functions/list/hogFunctionsListLogic.tsx +++ b/frontend/src/scenes/hog-functions/list/hogFunctionsListLogic.tsx @@ -1,8 +1,10 @@ -import { lemonToast } from '@posthog/lemon-ui' import FuseClass from 'fuse.js' import { actions, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { actionToUrl, router, urlToAction } from 'kea-router' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { objectsEqual } from 'lib/utils' diff --git a/frontend/src/scenes/hog-functions/logs/HogFunctionLogs.tsx b/frontend/src/scenes/hog-functions/logs/HogFunctionLogs.tsx index 248ba79313..3aeae67605 100644 --- a/frontend/src/scenes/hog-functions/logs/HogFunctionLogs.tsx +++ b/frontend/src/scenes/hog-functions/logs/HogFunctionLogs.tsx @@ -1,18 +1,20 @@ -import { IconEllipsis } from '@posthog/icons' -import { LemonButton, LemonCheckbox, LemonDialog, LemonMenu, LemonTag } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { router } from 'kea-router' +import { useMemo } from 'react' + +import { IconEllipsis } from '@posthog/icons' +import { LemonButton, LemonCheckbox, LemonDialog, LemonMenu, LemonTag } from '@posthog/lemon-ui' + import { PageHeader } from 'lib/components/PageHeader' import { LemonTableColumns } from 'lib/lemon-ui/LemonTable' import { capitalizeFirstLetter } from 'lib/utils' -import { useMemo } from 'react' import { urls } from 'scenes/urls' -import { hogFunctionTestLogic } from '../configuration/hogFunctionTestLogic' -import { hogFunctionLogsLogic } from './hogFunctionLogsLogic' -import { LogsViewer } from './LogsViewer' -import { GroupedLogEntry, LogsViewerLogicProps } from './logsViewerLogic' import { hogFunctionConfigurationLogic } from '../configuration/hogFunctionConfigurationLogic' +import { hogFunctionTestLogic } from '../configuration/hogFunctionTestLogic' +import { LogsViewer } from './LogsViewer' +import { hogFunctionLogsLogic } from './hogFunctionLogsLogic' +import { GroupedLogEntry, LogsViewerLogicProps } from './logsViewerLogic' export function HogFunctionLogs(props: { hogFunctionId: string }): JSX.Element { const logicProps: LogsViewerLogicProps = { diff --git a/frontend/src/scenes/hog-functions/logs/LogsViewer.tsx b/frontend/src/scenes/hog-functions/logs/LogsViewer.tsx index b87ec0f62b..932e30c8b7 100644 --- a/frontend/src/scenes/hog-functions/logs/LogsViewer.tsx +++ b/frontend/src/scenes/hog-functions/logs/LogsViewer.tsx @@ -1,3 +1,5 @@ +import { useActions, useValues } from 'kea' + import { IconCalendar, IconSearch } from '@posthog/icons' import { LemonButton, @@ -10,7 +12,7 @@ import { LemonTagProps, Link, } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { DateFilter } from 'lib/components/DateFilter/DateFilter' import { TZLabel } from 'lib/components/TZLabel' import { pluralize } from 'lib/utils' diff --git a/frontend/src/scenes/hog-functions/logs/hogFunctionLogsLogic.ts b/frontend/src/scenes/hog-functions/logs/hogFunctionLogsLogic.ts index 35fa2cb915..dbe3428d92 100644 --- a/frontend/src/scenes/hog-functions/logs/hogFunctionLogsLogic.ts +++ b/frontend/src/scenes/hog-functions/logs/hogFunctionLogsLogic.ts @@ -1,6 +1,8 @@ -import { lemonToast } from '@posthog/lemon-ui' import { actions, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { beforeUnload } from 'kea-router' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { Dayjs, dayjs } from 'lib/dayjs' @@ -8,7 +10,7 @@ import { hogql } from '~/queries/utils' import { LogEntryLevel } from '~/types' import type { hogFunctionLogsLogicType } from './hogFunctionLogsLogicType' -import { GroupedLogEntry, logsViewerLogic, LogsViewerLogicProps } from './logsViewerLogic' +import { GroupedLogEntry, LogsViewerLogicProps, logsViewerLogic } from './logsViewerLogic' export type RetryInvocationState = 'pending' | 'success' | 'failure' diff --git a/frontend/src/scenes/hog-functions/logs/logsViewerLogic.tsx b/frontend/src/scenes/hog-functions/logs/logsViewerLogic.tsx index 9740a3f8bb..e24755f94f 100644 --- a/frontend/src/scenes/hog-functions/logs/logsViewerLogic.tsx +++ b/frontend/src/scenes/hog-functions/logs/logsViewerLogic.tsx @@ -1,5 +1,6 @@ import { actions, events, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { Dayjs, dayjs } from 'lib/dayjs' diff --git a/frontend/src/scenes/hog-functions/mapping/HogFunctionMappings.tsx b/frontend/src/scenes/hog-functions/mapping/HogFunctionMappings.tsx index f32f460d7b..6f4c9ebc13 100644 --- a/frontend/src/scenes/hog-functions/mapping/HogFunctionMappings.tsx +++ b/frontend/src/scenes/hog-functions/mapping/HogFunctionMappings.tsx @@ -1,3 +1,7 @@ +import { useValues } from 'kea' +import { Group } from 'kea-forms' +import { memo, useEffect, useState } from 'react' + import { IconArrowRight, IconEllipsis, IconFilter, IconPlus } from '@posthog/icons' import { LemonBanner, @@ -11,12 +15,10 @@ import { LemonTag, Tooltip, } from '@posthog/lemon-ui' -import { useValues } from 'kea' -import { Group } from 'kea-forms' + import { CyclotronJobInputs } from 'lib/components/CyclotronJob/CyclotronJobInputs' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { LemonField } from 'lib/lemon-ui/LemonField' -import { memo, useEffect, useState } from 'react' import { ActionFilter } from 'scenes/insights/filters/ActionFilter/ActionFilter' import { MathAvailability } from 'scenes/insights/filters/ActionFilter/ActionFilterRow/ActionFilterRow' diff --git a/frontend/src/scenes/hog-functions/metrics/HogFunctionEventEstimates.tsx b/frontend/src/scenes/hog-functions/metrics/HogFunctionEventEstimates.tsx index b1fa652ad6..975e71fdde 100644 --- a/frontend/src/scenes/hog-functions/metrics/HogFunctionEventEstimates.tsx +++ b/frontend/src/scenes/hog-functions/metrics/HogFunctionEventEstimates.tsx @@ -1,5 +1,7 @@ -import { LemonLabel, LemonSelect, SpinnerOverlay } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonLabel, LemonSelect, SpinnerOverlay } from '@posthog/lemon-ui' + import { Sparkline } from 'lib/components/Sparkline' import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { LemonButton } from 'lib/lemon-ui/LemonButton' @@ -10,6 +12,7 @@ import { DataTableNode } from '~/queries/schema/schema-general' import { InsightType } from '~/types' import { hogFunctionConfigurationLogic } from '../configuration/hogFunctionConfigurationLogic' + const EVENT_THRESHOLD_ALERT_LEVEL = 8000 export function HogFunctionEventEstimates(): JSX.Element | null { diff --git a/frontend/src/scenes/hog-functions/metrics/HogFunctionMetrics.tsx b/frontend/src/scenes/hog-functions/metrics/HogFunctionMetrics.tsx index ef825f1c8e..8b74e300ee 100644 --- a/frontend/src/scenes/hog-functions/metrics/HogFunctionMetrics.tsx +++ b/frontend/src/scenes/hog-functions/metrics/HogFunctionMetrics.tsx @@ -1,3 +1,6 @@ +import { BindLogic, useActions, useValues } from 'kea' +import { useEffect, useRef, useState } from 'react' + import { IconCalendar } from '@posthog/icons' import { LemonButton, @@ -9,17 +12,16 @@ import { SpinnerOverlay, Tooltip, } from '@posthog/lemon-ui' -import { BindLogic, useActions, useValues } from 'kea' + import { Chart, ChartDataset, ChartItem } from 'lib/Chart' import { getColorVar } from 'lib/colors' import { DateFilter } from 'lib/components/DateFilter/DateFilter' +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { humanFriendlyNumber, inStorybookTestRunner } from 'lib/utils' -import { useEffect, useRef, useState } from 'react' import { hogFunctionConfigurationLogic } from 'scenes/hog-functions/configuration/hogFunctionConfigurationLogic' import { InsightTooltip } from 'scenes/insights/InsightTooltip/InsightTooltip' -import { ALL_METRIC_TYPES, hogFunctionMetricsLogic, HogFunctionMetricsLogicProps } from './hogFunctionMetricsLogic' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' +import { ALL_METRIC_TYPES, HogFunctionMetricsLogicProps, hogFunctionMetricsLogic } from './hogFunctionMetricsLogic' const METRICS_INFO = { succeeded: 'Total number of events processed successfully', diff --git a/frontend/src/scenes/hog-functions/metrics/HogFunctionMetricsSparkline.tsx b/frontend/src/scenes/hog-functions/metrics/HogFunctionMetricsSparkline.tsx index fedce7362e..bb2dd90a93 100644 --- a/frontend/src/scenes/hog-functions/metrics/HogFunctionMetricsSparkline.tsx +++ b/frontend/src/scenes/hog-functions/metrics/HogFunctionMetricsSparkline.tsx @@ -1,11 +1,13 @@ -import { LemonSkeleton } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' -import { Sparkline, SparklineTimeSeries } from 'lib/components/Sparkline' -import { inStorybookTestRunner } from 'lib/utils' import { useEffect } from 'react' import { useInView } from 'react-intersection-observer' -import { hogFunctionMetricsLogic, HogFunctionMetricsLogicProps } from './hogFunctionMetricsLogic' +import { LemonSkeleton } from '@posthog/lemon-ui' + +import { Sparkline, SparklineTimeSeries } from 'lib/components/Sparkline' +import { inStorybookTestRunner } from 'lib/utils' + +import { HogFunctionMetricsLogicProps, hogFunctionMetricsLogic } from './hogFunctionMetricsLogic' export function HogFunctionMetricSparkLine({ id }: HogFunctionMetricsLogicProps): JSX.Element { const logic = hogFunctionMetricsLogic({ id }) diff --git a/frontend/src/scenes/hog-functions/metrics/hogFunctionMetricsLogic.tsx b/frontend/src/scenes/hog-functions/metrics/hogFunctionMetricsLogic.tsx index 90265bef2c..25c35a89f9 100644 --- a/frontend/src/scenes/hog-functions/metrics/hogFunctionMetricsLogic.tsx +++ b/frontend/src/scenes/hog-functions/metrics/hogFunctionMetricsLogic.tsx @@ -1,5 +1,6 @@ import { actions, kea, key, listeners, path, props, reducers } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { AppMetricsTotalsV2Response, AppMetricsV2RequestParams, AppMetricsV2Response } from '~/types' diff --git a/frontend/src/scenes/hog-functions/misc/HogFunctionStatusTag.tsx b/frontend/src/scenes/hog-functions/misc/HogFunctionStatusTag.tsx index c8d6cb859d..dec555817b 100644 --- a/frontend/src/scenes/hog-functions/misc/HogFunctionStatusTag.tsx +++ b/frontend/src/scenes/hog-functions/misc/HogFunctionStatusTag.tsx @@ -1,4 +1,5 @@ import { LemonTag } from '@posthog/lemon-ui' + import { capitalizeFirstLetter } from 'lib/utils' import { HogFunctionTemplateStatus } from '~/types' diff --git a/frontend/src/scenes/hog-functions/misc/activityDescriptions.tsx b/frontend/src/scenes/hog-functions/misc/activityDescriptions.tsx index 458b5d4d3d..654ffe250c 100644 --- a/frontend/src/scenes/hog-functions/misc/activityDescriptions.tsx +++ b/frontend/src/scenes/hog-functions/misc/activityDescriptions.tsx @@ -1,8 +1,9 @@ import { DiffEditor } from '@monaco-editor/react' + import { ActivityLogItem, - defaultDescriber, HumanizedChange, + defaultDescriber, userNameForLogItem, } from 'lib/components/ActivityLog/humanizeActivity' import { LemonDropdown } from 'lib/lemon-ui/LemonDropdown' diff --git a/frontend/src/scenes/hog-functions/sub-templates/sub-templates.ts b/frontend/src/scenes/hog-functions/sub-templates/sub-templates.ts index d8fda1b682..a12cf24725 100644 --- a/frontend/src/scenes/hog-functions/sub-templates/sub-templates.ts +++ b/frontend/src/scenes/hog-functions/sub-templates/sub-templates.ts @@ -1,4 +1,5 @@ import { INSIGHT_ALERT_FIRING_SUB_TEMPLATE_ID } from 'lib/constants' + import { HogFunctionConfigurationContextId, HogFunctionSubTemplateIdType, diff --git a/frontend/src/scenes/hog-functions/testing/HogFunctionTesting.tsx b/frontend/src/scenes/hog-functions/testing/HogFunctionTesting.tsx index 66d4d82318..b6fcab36c2 100644 --- a/frontend/src/scenes/hog-functions/testing/HogFunctionTesting.tsx +++ b/frontend/src/scenes/hog-functions/testing/HogFunctionTesting.tsx @@ -1,3 +1,9 @@ +import clsx from 'clsx' +import { BindLogic, useActions, useValues } from 'kea' +import { Form } from 'kea-forms' +import { router } from 'kea-router' +import { useState } from 'react' + import { IconEllipsis } from '@posthog/icons' import { LemonBanner, @@ -12,20 +18,16 @@ import { SpinnerOverlay, Tooltip, } from '@posthog/lemon-ui' -import clsx from 'clsx' -import { BindLogic, useActions, useValues } from 'kea' -import { Form } from 'kea-forms' -import { router } from 'kea-router' + import { DateFilter } from 'lib/components/DateFilter/DateFilter' import { NotFound } from 'lib/components/NotFound' import { PageHeader } from 'lib/components/PageHeader' import { PayGateMini } from 'lib/components/PayGateMini/PayGateMini' import { PropertyKeyInfo } from 'lib/components/PropertyKeyInfo' -import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { TZLabel } from 'lib/components/TZLabel' +import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { IconRefresh } from 'lib/lemon-ui/icons' import { capitalizeFirstLetter } from 'lib/utils' -import { useState } from 'react' import { InsightEmptyState } from 'scenes/insights/EmptyStates' import { PersonDisplay } from 'scenes/persons/PersonDisplay' import { urls } from 'scenes/urls' @@ -41,8 +43,8 @@ import { HogFunctionFilters } from '../filters/HogFunctionFilters' import { tagTypeForLevel } from '../logs/LogsViewer' import { CyclotronJobTestInvocationResultWithEventId, - hogFunctionTestingLogic, HogFunctionTestingLogicProps, + hogFunctionTestingLogic, } from './hogFunctionTestingLogic' const buildGlobals = ( diff --git a/frontend/src/scenes/hog-functions/testing/hogFunctionTestingLogic.tsx b/frontend/src/scenes/hog-functions/testing/hogFunctionTestingLogic.tsx index ad90ec05e6..5f00647f0e 100644 --- a/frontend/src/scenes/hog-functions/testing/hogFunctionTestingLogic.tsx +++ b/frontend/src/scenes/hog-functions/testing/hogFunctionTestingLogic.tsx @@ -1,9 +1,11 @@ -import { lemonToast } from '@posthog/lemon-ui' import equal from 'fast-deep-equal' import { actions, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { beforeUnload } from 'kea-router' import { subscriptions } from 'kea-subscriptions' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { groupsModel } from '~/models/groupsModel' diff --git a/frontend/src/scenes/insights/EditorFilters/AttributionFilter.tsx b/frontend/src/scenes/insights/EditorFilters/AttributionFilter.tsx index 398df8b47c..197aa1149c 100644 --- a/frontend/src/scenes/insights/EditorFilters/AttributionFilter.tsx +++ b/frontend/src/scenes/insights/EditorFilters/AttributionFilter.tsx @@ -1,5 +1,7 @@ -import { LemonSelect } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonSelect } from '@posthog/lemon-ui' + import { funnelDataLogic } from 'scenes/funnels/funnelDataLogic' import { FunnelsFilter } from '~/queries/schema/schema-general' diff --git a/frontend/src/scenes/insights/EditorFilters/FunnelsAdvanced.tsx b/frontend/src/scenes/insights/EditorFilters/FunnelsAdvanced.tsx index 23bbef5df2..4389f706bf 100644 --- a/frontend/src/scenes/insights/EditorFilters/FunnelsAdvanced.tsx +++ b/frontend/src/scenes/insights/EditorFilters/FunnelsAdvanced.tsx @@ -1,4 +1,5 @@ import { useActions, useValues } from 'kea' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonField } from 'lib/lemon-ui/LemonField' import { funnelDataLogic } from 'scenes/funnels/funnelDataLogic' diff --git a/frontend/src/scenes/insights/EditorFilters/FunnelsQuerySteps.tsx b/frontend/src/scenes/insights/EditorFilters/FunnelsQuerySteps.tsx index b2c51fae22..4aae4dd448 100644 --- a/frontend/src/scenes/insights/EditorFilters/FunnelsQuerySteps.tsx +++ b/frontend/src/scenes/insights/EditorFilters/FunnelsQuerySteps.tsx @@ -1,5 +1,7 @@ -import { Tooltip } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { Tooltip } from '@posthog/lemon-ui' + import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { LemonLabel } from 'lib/lemon-ui/LemonLabel/LemonLabel' import { MathAvailability } from 'scenes/insights/filters/ActionFilter/ActionFilterRow/ActionFilterRow' diff --git a/frontend/src/scenes/insights/EditorFilters/GoalLines.tsx b/frontend/src/scenes/insights/EditorFilters/GoalLines.tsx index 1df963c85f..3a90623278 100644 --- a/frontend/src/scenes/insights/EditorFilters/GoalLines.tsx +++ b/frontend/src/scenes/insights/EditorFilters/GoalLines.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconEye, IconPlusSmall, IconTrash } from '@posthog/icons' import { LemonButton, LemonInput } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { SeriesLetter } from 'lib/components/SeriesGlyph' import { IconEyeHidden } from 'lib/lemon-ui/icons' diff --git a/frontend/src/scenes/insights/EditorFilters/PathsAdvanced.tsx b/frontend/src/scenes/insights/EditorFilters/PathsAdvanced.tsx index 564c392b76..c9acb2651f 100644 --- a/frontend/src/scenes/insights/EditorFilters/PathsAdvanced.tsx +++ b/frontend/src/scenes/insights/EditorFilters/PathsAdvanced.tsx @@ -1,8 +1,10 @@ -import { LemonInput } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' +import { useState } from 'react' + +import { LemonInput } from '@posthog/lemon-ui' + import { PayGateMini } from 'lib/components/PayGateMini/PayGateMini' import { LemonLabel } from 'lib/lemon-ui/LemonLabel/LemonLabel' -import { useState } from 'react' import { pathsDataLogic } from 'scenes/paths/pathsDataLogic' import { AvailableFeature, EditorFilterProps, PathEdgeParameters } from '~/types' diff --git a/frontend/src/scenes/insights/EditorFilters/PathsEventTypes.tsx b/frontend/src/scenes/insights/EditorFilters/PathsEventTypes.tsx index 9aae859d78..5b9542325a 100644 --- a/frontend/src/scenes/insights/EditorFilters/PathsEventTypes.tsx +++ b/frontend/src/scenes/insights/EditorFilters/PathsEventTypes.tsx @@ -1,4 +1,5 @@ import { useActions, useValues } from 'kea' + import { LemonButton, LemonButtonWithDropdown } from 'lib/lemon-ui/LemonButton' import { LemonCheckbox } from 'lib/lemon-ui/LemonCheckbox' import { capitalizeFirstLetter } from 'lib/utils' diff --git a/frontend/src/scenes/insights/EditorFilters/PathsExclusions.tsx b/frontend/src/scenes/insights/EditorFilters/PathsExclusions.tsx index ec25dd80ad..a5fa5036a7 100644 --- a/frontend/src/scenes/insights/EditorFilters/PathsExclusions.tsx +++ b/frontend/src/scenes/insights/EditorFilters/PathsExclusions.tsx @@ -1,4 +1,5 @@ import { useActions, useValues } from 'kea' + import { PathItemFilters } from 'lib/components/PropertyFilters/PathItemFilters' import { keyForInsightLogicProps } from 'scenes/insights/sharedUtils' import { pathsDataLogic } from 'scenes/paths/pathsDataLogic' diff --git a/frontend/src/scenes/insights/EditorFilters/PathsHogQL.tsx b/frontend/src/scenes/insights/EditorFilters/PathsHogQL.tsx index 14392b1d5a..e5b70ef5d2 100644 --- a/frontend/src/scenes/insights/EditorFilters/PathsHogQL.tsx +++ b/frontend/src/scenes/insights/EditorFilters/PathsHogQL.tsx @@ -1,4 +1,5 @@ import { useActions, useValues } from 'kea' + import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { TaxonomicPopover } from 'lib/components/TaxonomicPopover/TaxonomicPopover' import { pathsDataLogic } from 'scenes/paths/pathsDataLogic' diff --git a/frontend/src/scenes/insights/EditorFilters/PathsTarget.tsx b/frontend/src/scenes/insights/EditorFilters/PathsTarget.tsx index 2750d31227..0aa1636249 100644 --- a/frontend/src/scenes/insights/EditorFilters/PathsTarget.tsx +++ b/frontend/src/scenes/insights/EditorFilters/PathsTarget.tsx @@ -1,9 +1,11 @@ -import { IconX } from '@posthog/icons' import { useActions, useValues } from 'kea' import { combineUrl, encodeParams, router } from 'kea-router' + +import { IconX } from '@posthog/icons' + import { PathItemSelector } from 'lib/components/PropertyFilters/components/PathItemSelector' -import { IconFunnelVertical } from 'lib/lemon-ui/icons' import { LemonButton } from 'lib/lemon-ui/LemonButton' +import { IconFunnelVertical } from 'lib/lemon-ui/icons' import { pathsDataLogic } from 'scenes/paths/pathsDataLogic' import { queryNodeToFilter } from '~/queries/nodes/InsightQuery/utils/queryNodeToFilter' diff --git a/frontend/src/scenes/insights/EditorFilters/PathsWildcardGroups.tsx b/frontend/src/scenes/insights/EditorFilters/PathsWildcardGroups.tsx index 0325fc2358..e3a353fbe2 100644 --- a/frontend/src/scenes/insights/EditorFilters/PathsWildcardGroups.tsx +++ b/frontend/src/scenes/insights/EditorFilters/PathsWildcardGroups.tsx @@ -1,4 +1,5 @@ import { useActions, useValues } from 'kea' + import { LemonInputSelect } from 'lib/lemon-ui/LemonInputSelect/LemonInputSelect' import { pathsDataLogic } from 'scenes/paths/pathsDataLogic' diff --git a/frontend/src/scenes/insights/EditorFilters/PercentStackViewFilter.tsx b/frontend/src/scenes/insights/EditorFilters/PercentStackViewFilter.tsx index 88a4a688a5..027319b6eb 100644 --- a/frontend/src/scenes/insights/EditorFilters/PercentStackViewFilter.tsx +++ b/frontend/src/scenes/insights/EditorFilters/PercentStackViewFilter.tsx @@ -1,4 +1,5 @@ import { useActions, useValues } from 'kea' + import { LemonCheckbox } from 'lib/lemon-ui/LemonCheckbox' import { trendsDataLogic } from 'scenes/trends/trendsDataLogic' diff --git a/frontend/src/scenes/insights/EditorFilters/PoeFilter.tsx b/frontend/src/scenes/insights/EditorFilters/PoeFilter.tsx index c8613430b3..139f9dc905 100644 --- a/frontend/src/scenes/insights/EditorFilters/PoeFilter.tsx +++ b/frontend/src/scenes/insights/EditorFilters/PoeFilter.tsx @@ -1,6 +1,7 @@ -import { LemonLabel, LemonSwitch } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' +import { LemonLabel, LemonSwitch } from '@posthog/lemon-ui' + import { InsightLogicProps } from '~/types' import { poeFilterLogic } from './poeFilterLogic' diff --git a/frontend/src/scenes/insights/EditorFilters/ResultCustomizationByPicker.tsx b/frontend/src/scenes/insights/EditorFilters/ResultCustomizationByPicker.tsx index 7185c345cd..adcb4d675d 100644 --- a/frontend/src/scenes/insights/EditorFilters/ResultCustomizationByPicker.tsx +++ b/frontend/src/scenes/insights/EditorFilters/ResultCustomizationByPicker.tsx @@ -1,5 +1,7 @@ -import { LemonSegmentedButton } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonSegmentedButton } from '@posthog/lemon-ui' + import { insightLogic } from 'scenes/insights/insightLogic' import { ResultCustomizationBy } from '~/queries/schema/schema-general' diff --git a/frontend/src/scenes/insights/EditorFilters/RetentionCondition.tsx b/frontend/src/scenes/insights/EditorFilters/RetentionCondition.tsx index 631ce35503..426fc6172b 100644 --- a/frontend/src/scenes/insights/EditorFilters/RetentionCondition.tsx +++ b/frontend/src/scenes/insights/EditorFilters/RetentionCondition.tsx @@ -1,8 +1,10 @@ +import { useActions, useValues } from 'kea' +import { toast } from 'react-toastify' + import { IconInfo } from '@posthog/icons' import { LemonInput, LemonSelect } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { Tooltip } from 'lib/lemon-ui/Tooltip' -import { toast } from 'react-toastify' import { AggregationSelect } from 'scenes/insights/filters/AggregationSelect' import { keyForInsightLogicProps } from 'scenes/insights/sharedUtils' import { diff --git a/frontend/src/scenes/insights/EditorFilters/RetentionOptions.tsx b/frontend/src/scenes/insights/EditorFilters/RetentionOptions.tsx index b942b56469..c000520cd9 100644 --- a/frontend/src/scenes/insights/EditorFilters/RetentionOptions.tsx +++ b/frontend/src/scenes/insights/EditorFilters/RetentionOptions.tsx @@ -1,12 +1,14 @@ +import { useValues } from 'kea' + import { Link } from '@posthog/lemon-ui' +import { insightLogic } from 'scenes/insights/insightLogic' +import { retentionLogic } from 'scenes/retention/retentionLogic' + +import { MinimumOccurrencesInput } from '../filters/MinimumOccurrencesInput' import { RetentionCumulativeButton } from '../filters/RetentionCumulativeButton' import { RetentionMeanDropdown } from '../filters/RetentionMeanDropdown' import { RetentionReferencePicker } from '../filters/RetentionReferencePicker' -import { MinimumOccurrencesInput } from '../filters/MinimumOccurrencesInput' -import { retentionLogic } from 'scenes/retention/retentionLogic' -import { useValues } from 'kea' -import { insightLogic } from 'scenes/insights/insightLogic' export function RetentionOptions(): JSX.Element { const { insightProps } = useValues(insightLogic) diff --git a/frontend/src/scenes/insights/EditorFilters/SamplingFilter.tsx b/frontend/src/scenes/insights/EditorFilters/SamplingFilter.tsx index f62630b9f5..23a88ab038 100644 --- a/frontend/src/scenes/insights/EditorFilters/SamplingFilter.tsx +++ b/frontend/src/scenes/insights/EditorFilters/SamplingFilter.tsx @@ -1,7 +1,8 @@ -import { LemonLabel, LemonSegmentedButton, LemonSwitch, LemonTag } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import posthog from 'posthog-js' +import { LemonLabel, LemonSegmentedButton, LemonSwitch, LemonTag } from '@posthog/lemon-ui' + import { InsightLogicProps } from '~/types' import { insightVizDataLogic } from '../insightVizDataLogic' diff --git a/frontend/src/scenes/insights/EditorFilters/ScalePicker.tsx b/frontend/src/scenes/insights/EditorFilters/ScalePicker.tsx index c6e339d19a..4b002a687d 100644 --- a/frontend/src/scenes/insights/EditorFilters/ScalePicker.tsx +++ b/frontend/src/scenes/insights/EditorFilters/ScalePicker.tsx @@ -1,5 +1,7 @@ -import { LemonSegmentedButton } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonSegmentedButton } from '@posthog/lemon-ui' + import { insightLogic } from 'scenes/insights/insightLogic' import { insightVizDataLogic } from '../insightVizDataLogic' diff --git a/frontend/src/scenes/insights/EditorFilters/ShowAlertThresholdLinesFilter.tsx b/frontend/src/scenes/insights/EditorFilters/ShowAlertThresholdLinesFilter.tsx index 17948bec59..a6fda8aa45 100644 --- a/frontend/src/scenes/insights/EditorFilters/ShowAlertThresholdLinesFilter.tsx +++ b/frontend/src/scenes/insights/EditorFilters/ShowAlertThresholdLinesFilter.tsx @@ -1,5 +1,7 @@ -import { LemonCheckbox } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonCheckbox } from '@posthog/lemon-ui' + import { insightLogic } from 'scenes/insights/insightLogic' import { insightVizDataLogic } from '../insightVizDataLogic' diff --git a/frontend/src/scenes/insights/EditorFilters/ShowLegendFilter.tsx b/frontend/src/scenes/insights/EditorFilters/ShowLegendFilter.tsx index ee2a55ea53..b5655c6e07 100644 --- a/frontend/src/scenes/insights/EditorFilters/ShowLegendFilter.tsx +++ b/frontend/src/scenes/insights/EditorFilters/ShowLegendFilter.tsx @@ -1,5 +1,7 @@ -import { LemonCheckbox } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonCheckbox } from '@posthog/lemon-ui' + import { insightLogic } from 'scenes/insights/insightLogic' import { insightVizDataLogic } from '../insightVizDataLogic' diff --git a/frontend/src/scenes/insights/EditorFilters/ShowMultipleYAxesFilter.tsx b/frontend/src/scenes/insights/EditorFilters/ShowMultipleYAxesFilter.tsx index 17ccebad92..4d62933b8a 100644 --- a/frontend/src/scenes/insights/EditorFilters/ShowMultipleYAxesFilter.tsx +++ b/frontend/src/scenes/insights/EditorFilters/ShowMultipleYAxesFilter.tsx @@ -1,5 +1,7 @@ -import { LemonCheckbox } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonCheckbox } from '@posthog/lemon-ui' + import { insightLogic } from 'scenes/insights/insightLogic' import { insightVizDataLogic } from '../insightVizDataLogic' diff --git a/frontend/src/scenes/insights/EditorFilters/ShowTrendLinesFilter.tsx b/frontend/src/scenes/insights/EditorFilters/ShowTrendLinesFilter.tsx index 9f9877a8a9..37d2c77e95 100644 --- a/frontend/src/scenes/insights/EditorFilters/ShowTrendLinesFilter.tsx +++ b/frontend/src/scenes/insights/EditorFilters/ShowTrendLinesFilter.tsx @@ -1,5 +1,7 @@ -import { LemonCheckbox } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonCheckbox } from '@posthog/lemon-ui' + import { insightLogic } from 'scenes/insights/insightLogic' import { isRetentionQuery, isTrendsQuery } from '~/queries/utils' diff --git a/frontend/src/scenes/insights/EditorFilters/ValueOnSeriesFilter.tsx b/frontend/src/scenes/insights/EditorFilters/ValueOnSeriesFilter.tsx index db5d6ac290..690d91419d 100644 --- a/frontend/src/scenes/insights/EditorFilters/ValueOnSeriesFilter.tsx +++ b/frontend/src/scenes/insights/EditorFilters/ValueOnSeriesFilter.tsx @@ -1,4 +1,5 @@ import { useActions, useValues } from 'kea' + import { LemonCheckbox } from 'lib/lemon-ui/LemonCheckbox' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' diff --git a/frontend/src/scenes/insights/EditorFilters/goalLinesLogic.ts b/frontend/src/scenes/insights/EditorFilters/goalLinesLogic.ts index fab52eb718..d7dd9fb5e6 100644 --- a/frontend/src/scenes/insights/EditorFilters/goalLinesLogic.ts +++ b/frontend/src/scenes/insights/EditorFilters/goalLinesLogic.ts @@ -1,5 +1,6 @@ import { actions, connect, kea, key, listeners, path, props, reducers } from 'kea' import { subscriptions } from 'kea-subscriptions' + import { keyForInsightLogicProps } from 'scenes/insights/sharedUtils' import { GoalLine, HogQLQueryModifiers, TrendsQuery } from '~/queries/schema/schema-general' diff --git a/frontend/src/scenes/insights/EditorFilters/poeFilterLogic.ts b/frontend/src/scenes/insights/EditorFilters/poeFilterLogic.ts index d63a6dd313..080615b5e1 100644 --- a/frontend/src/scenes/insights/EditorFilters/poeFilterLogic.ts +++ b/frontend/src/scenes/insights/EditorFilters/poeFilterLogic.ts @@ -1,5 +1,6 @@ import { actions, connect, kea, key, listeners, path, props, reducers } from 'kea' import { subscriptions } from 'kea-subscriptions' + import { keyForInsightLogicProps } from 'scenes/insights/sharedUtils' import { HogQLQueryModifiers } from '~/queries/schema/schema-general' diff --git a/frontend/src/scenes/insights/EditorFilters/samplingFilterLogic.ts b/frontend/src/scenes/insights/EditorFilters/samplingFilterLogic.ts index 0bf44492c7..fc1fd8e069 100644 --- a/frontend/src/scenes/insights/EditorFilters/samplingFilterLogic.ts +++ b/frontend/src/scenes/insights/EditorFilters/samplingFilterLogic.ts @@ -1,5 +1,6 @@ import { actions, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { subscriptions } from 'kea-subscriptions' + import { keyForInsightLogicProps } from 'scenes/insights/sharedUtils' import { InsightLogicProps } from '~/types' diff --git a/frontend/src/scenes/insights/EmptyStates/EmptyStates.stories.tsx b/frontend/src/scenes/insights/EmptyStates/EmptyStates.stories.tsx index 8650abc3af..894b8da1e1 100644 --- a/frontend/src/scenes/insights/EmptyStates/EmptyStates.stories.tsx +++ b/frontend/src/scenes/insights/EmptyStates/EmptyStates.stories.tsx @@ -1,4 +1,6 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' + +import { useDelayedOnMountEffect } from 'lib/hooks/useOnMountEffect' import { App } from 'scenes/App' import { createInsightStory } from 'scenes/insights/__mocks__/createInsightScene' @@ -8,7 +10,6 @@ import { InsightShortId } from '~/types' import insight from '../../../mocks/fixtures/api/projects/team_id/insights/trendsLine.json' import { insightVizDataLogic } from '../insightVizDataLogic' import funnelOneStep from './funnelOneStep.json' -import { useDelayedOnMountEffect } from 'lib/hooks/useOnMountEffect' type Story = StoryObj const meta: Meta = { diff --git a/frontend/src/scenes/insights/EmptyStates/EmptyStates.tsx b/frontend/src/scenes/insights/EmptyStates/EmptyStates.tsx index 9f5d054d74..a6e0324f66 100644 --- a/frontend/src/scenes/insights/EmptyStates/EmptyStates.tsx +++ b/frontend/src/scenes/insights/EmptyStates/EmptyStates.tsx @@ -1,5 +1,10 @@ import './EmptyStates.scss' +import clsx from 'clsx' +import { useActions, useValues } from 'kea' +import posthog from 'posthog-js' +import { useEffect, useState } from 'react' + import { IconArchive, IconHourglass, @@ -11,27 +16,25 @@ import { IconWarning, } from '@posthog/icons' import { LemonButton } from '@posthog/lemon-ui' -import { LemonMenuOverlay } from 'lib/lemon-ui/LemonMenu/LemonMenu' -import clsx from 'clsx' -import { useActions, useValues } from 'kea' + import { AccessControlledLemonButton } from 'lib/components/AccessControlledLemonButton' -import { BuilderHog3 } from 'lib/components/hedgehogs' import { supportLogic } from 'lib/components/Support/supportLogic' +import { BuilderHog3 } from 'lib/components/hedgehogs' import { FEATURE_FLAGS } from 'lib/constants' import { dayjs } from 'lib/dayjs' -import { IconErrorOutline, IconOpenInNew } from 'lib/lemon-ui/icons' +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' +import { LemonMenuOverlay } from 'lib/lemon-ui/LemonMenu/LemonMenu' import { Link } from 'lib/lemon-ui/Link' import { LoadingBar } from 'lib/lemon-ui/LoadingBar' import { Tooltip } from 'lib/lemon-ui/Tooltip' +import { IconErrorOutline, IconOpenInNew } from 'lib/lemon-ui/icons' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { humanFriendlyNumber, humanizeBytes, inStorybook, inStorybookTestRunner } from 'lib/utils' import { getAppContext } from 'lib/utils/getAppContext' -import posthog from 'posthog-js' -import { useEffect, useState } from 'react' +import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { funnelDataLogic } from 'scenes/funnels/funnelDataLogic' import { entityFilterLogic } from 'scenes/insights/filters/ActionFilter/entityFilterLogic' import { insightLogic } from 'scenes/insights/insightLogic' -import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { SavedInsightFilters } from 'scenes/saved-insights/savedInsightsLogic' import { Scene } from 'scenes/sceneTypes' import { teamLogic } from 'scenes/teamLogic' @@ -52,7 +55,6 @@ import { samplingFilterLogic } from '../EditorFilters/samplingFilterLogic' import { MathAvailability } from '../filters/ActionFilter/ActionFilterRow/ActionFilterRow' import { insightDataLogic } from '../insightDataLogic' import { insightVizDataLogic } from '../insightVizDataLogic' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' export function InsightEmptyState({ heading = 'There are no matching events for this query', diff --git a/frontend/src/scenes/insights/Funnels.stories.tsx b/frontend/src/scenes/insights/Funnels.stories.tsx index b83f956540..c4c83598d7 100644 --- a/frontend/src/scenes/insights/Funnels.stories.tsx +++ b/frontend/src/scenes/insights/Funnels.stories.tsx @@ -1,7 +1,9 @@ +import { samplePersonProperties, sampleRetentionPeopleResponse } from 'scenes/insights/__mocks__/insight.mocks' + import { Meta, StoryObj } from '@storybook/react' + import { App } from 'scenes/App' import { createInsightStory } from 'scenes/insights/__mocks__/createInsightScene' -import { samplePersonProperties, sampleRetentionPeopleResponse } from 'scenes/insights/__mocks__/insight.mocks' import { mswDecorator } from '~/mocks/browser' diff --git a/frontend/src/scenes/insights/Insight.tsx b/frontend/src/scenes/insights/Insight.tsx index 5b80e5c2dc..685c047499 100644 --- a/frontend/src/scenes/insights/Insight.tsx +++ b/frontend/src/scenes/insights/Insight.tsx @@ -1,5 +1,7 @@ -import { LemonBanner, LemonButton } from '@posthog/lemon-ui' import { BindLogic, useActions, useMountedLogic, useValues } from 'kea' + +import { LemonBanner, LemonButton } from '@posthog/lemon-ui' + import { AccessDenied } from 'lib/components/AccessDenied' import { DebugCHQueries } from 'lib/components/CommandPalette/DebugCHQueries' import { isEmptyObject, isObject } from 'lib/utils' @@ -13,10 +15,11 @@ import { Node } from '~/queries/schema/schema-general' import { containsHogQLQuery, isInsightVizNode } from '~/queries/utils' import { InsightShortId, ItemMode } from '~/types' +import { InsightsNav } from './InsightNav/InsightsNav' import { insightCommandLogic } from './insightCommandLogic' import { insightDataLogic } from './insightDataLogic' import { insightLogic } from './insightLogic' -import { InsightsNav } from './InsightNav/InsightsNav' + export interface InsightSceneProps { insightId: InsightShortId | 'new' } diff --git a/frontend/src/scenes/insights/InsightNav/InsightsNav.tsx b/frontend/src/scenes/insights/InsightNav/InsightsNav.tsx index d2805d69ac..745d893774 100644 --- a/frontend/src/scenes/insights/InsightNav/InsightsNav.tsx +++ b/frontend/src/scenes/insights/InsightNav/InsightsNav.tsx @@ -1,4 +1,5 @@ import { useActions, useValues } from 'kea' + import { AlertDeletionWarning } from 'lib/components/Alerts/AlertDeletionWarning' import { FEATURE_FLAGS } from 'lib/constants' import { LemonTabs } from 'lib/lemon-ui/LemonTabs' diff --git a/frontend/src/scenes/insights/InsightNav/insightNavLogic.test.ts b/frontend/src/scenes/insights/InsightNav/insightNavLogic.test.ts index c9a9b693b5..55ad1bb7b4 100644 --- a/frontend/src/scenes/insights/InsightNav/insightNavLogic.test.ts +++ b/frontend/src/scenes/insights/InsightNav/insightNavLogic.test.ts @@ -1,7 +1,9 @@ -import { expectLogic } from 'kea-test-utils' import { MOCK_DEFAULT_TEAM } from 'lib/api.mock' -import { insightLogic } from 'scenes/insights/insightLogic' + +import { expectLogic } from 'kea-test-utils' + import { insightNavLogic } from 'scenes/insights/InsightNav/insightNavLogic' +import { insightLogic } from 'scenes/insights/insightLogic' import { useMocks } from '~/mocks/jest' import { examples } from '~/queries/examples' diff --git a/frontend/src/scenes/insights/InsightNav/insightNavLogic.tsx b/frontend/src/scenes/insights/InsightNav/insightNavLogic.tsx index 23e4a90145..2c0b814679 100644 --- a/frontend/src/scenes/insights/InsightNav/insightNavLogic.tsx +++ b/frontend/src/scenes/insights/InsightNav/insightNavLogic.tsx @@ -1,6 +1,8 @@ -import { IconExternal } from '@posthog/icons' import { actions, afterMount, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { router } from 'kea-router' + +import { IconExternal } from '@posthog/icons' + import { FEATURE_FLAGS } from 'lib/constants' import { LemonTag } from 'lib/lemon-ui/LemonTag/LemonTag' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' diff --git a/frontend/src/scenes/insights/InsightPageHeader.tsx b/frontend/src/scenes/insights/InsightPageHeader.tsx index f906626b51..620d0fc29c 100644 --- a/frontend/src/scenes/insights/InsightPageHeader.tsx +++ b/frontend/src/scenes/insights/InsightPageHeader.tsx @@ -1,6 +1,10 @@ -import { IconInfo, IconPencil, IconShare, IconTrash, IconWarning } from '@posthog/icons' import { useActions, useMountedLogic, useValues } from 'kea' import { router } from 'kea-router' +import { useState } from 'react' + +import { IconInfo, IconPencil, IconShare, IconTrash, IconWarning } from '@posthog/icons' + +import { AccessControlAction } from 'lib/components/AccessControlAction' import { AccessControlledLemonButton } from 'lib/components/AccessControlledLemonButton' import { AddToDashboard } from 'lib/components/AddToDashboard/AddToDashboard' import { AddToDashboardModal } from 'lib/components/AddToDashboard/AddToDashboardModal' @@ -14,20 +18,25 @@ import { ExportButton } from 'lib/components/ExportButton/ExportButton' import { exportsLogic } from 'lib/components/ExportButton/exportsLogic' import { ObjectTags } from 'lib/components/ObjectTags/ObjectTags' import { PageHeader } from 'lib/components/PageHeader' +import { SceneAddToDropdownMenu } from 'lib/components/Scenes/InsightOrDashboard/SceneAddToDropdownMenu' import { SceneExportDropdownMenu } from 'lib/components/Scenes/InsightOrDashboard/SceneExportDropdownMenu' +import { SceneAlertsButton } from 'lib/components/Scenes/SceneAlertsButton' import { SceneCommonButtons } from 'lib/components/Scenes/SceneCommonButtons' import { SceneFile } from 'lib/components/Scenes/SceneFile' import { SceneMetalyticsSummaryButton } from 'lib/components/Scenes/SceneMetalyticsSummaryButton' import { SceneShareButton } from 'lib/components/Scenes/SceneShareButton' +import { SceneSubscribeButton } from 'lib/components/Scenes/SceneSubscribeButton' import { SceneTags } from 'lib/components/Scenes/SceneTags' +import { SceneTextInput } from 'lib/components/Scenes/SceneTextInput' +import { SceneTextarea } from 'lib/components/Scenes/SceneTextarea' import { SceneActivityIndicator } from 'lib/components/Scenes/SceneUpdateActivityInfo' import { SharingModal } from 'lib/components/Sharing/SharingModal' +import { TemplateLinkSection } from 'lib/components/Sharing/TemplateLinkSection' import { TEMPLATE_LINK_HEADING, TEMPLATE_LINK_PII_WARNING, TEMPLATE_LINK_TOOLTIP, } from 'lib/components/Sharing/templateLinkMessages' -import { TemplateLinkSection } from 'lib/components/Sharing/TemplateLinkSection' import { SubscribeButton, SubscriptionsModal } from 'lib/components/Subscriptions/SubscriptionsModal' import { TitleWithIcon } from 'lib/components/TitleWithIcon' import { UserActivityIndicator } from 'lib/components/UserActivityIndicator/UserActivityIndicator' @@ -41,22 +50,25 @@ import { LemonInput } from 'lib/lemon-ui/LemonInput' import { LemonSwitch } from 'lib/lemon-ui/LemonSwitch' import { Tooltip } from 'lib/lemon-ui/Tooltip' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' +import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' import { isEmptyObject, isObject } from 'lib/utils' import { deleteInsightWithUndo } from 'lib/utils/deleteWithUndo' import { getInsightDefinitionUrl } from 'lib/utils/insightLinks' -import { useState } from 'react' +import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { NewDashboardModal } from 'scenes/dashboard/NewDashboardModal' +import { InsightSaveButton } from 'scenes/insights/InsightSaveButton' import { insightCommandLogic } from 'scenes/insights/insightCommandLogic' import { insightDataLogic } from 'scenes/insights/insightDataLogic' import { insightLogic } from 'scenes/insights/insightLogic' -import { InsightSaveButton } from 'scenes/insights/InsightSaveButton' import { insightSceneLogic } from 'scenes/insights/insightSceneLogic' import { insightsApi } from 'scenes/insights/utils/api' import { NotebookSelectButton } from 'scenes/notebooks/NotebookSelectButton/NotebookSelectButton' -import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' +import { NotebookNodeType } from 'scenes/notebooks/types' import { projectLogic } from 'scenes/projectLogic' import { urls } from 'scenes/urls' import { userLogic } from 'scenes/userLogic' + +import { breadcrumbsLogic } from '~/layout/navigation/Breadcrumbs/breadcrumbsLogic' import { ScenePanel, ScenePanelActions, @@ -64,16 +76,6 @@ import { ScenePanelDivider, ScenePanelMetaInfo, } from '~/layout/scenes/SceneLayout' - -import { AccessControlAction } from 'lib/components/AccessControlAction' -import { SceneAddToDropdownMenu } from 'lib/components/Scenes/InsightOrDashboard/SceneAddToDropdownMenu' -import { SceneAlertsButton } from 'lib/components/Scenes/SceneAlertsButton' -import { SceneSubscribeButton } from 'lib/components/Scenes/SceneSubscribeButton' -import { SceneTextarea } from 'lib/components/Scenes/SceneTextarea' -import { SceneTextInput } from 'lib/components/Scenes/SceneTextInput' -import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' -import { NotebookNodeType } from 'scenes/notebooks/types' -import { breadcrumbsLogic } from '~/layout/navigation/Breadcrumbs/breadcrumbsLogic' import { tagsModel } from '~/models/tagsModel' import { NodeKind } from '~/queries/schema/schema-general' import { isDataTableNode, isDataVisualizationNode, isEventsQuery, isHogQLQuery } from '~/queries/utils' diff --git a/frontend/src/scenes/insights/InsightScene.tsx b/frontend/src/scenes/insights/InsightScene.tsx index a9c2a515d9..b3f47c1029 100644 --- a/frontend/src/scenes/insights/InsightScene.tsx +++ b/frontend/src/scenes/insights/InsightScene.tsx @@ -1,10 +1,11 @@ import { useValues } from 'kea' import { router } from 'kea-router' -import { NotFound } from 'lib/components/NotFound' import { useEffect } from 'react' + +import { NotFound } from 'lib/components/NotFound' import { Insight } from 'scenes/insights/Insight' -import { insightSceneLogic } from 'scenes/insights/insightSceneLogic' import { InsightSkeleton } from 'scenes/insights/InsightSkeleton' +import { insightSceneLogic } from 'scenes/insights/insightSceneLogic' import { SceneExport } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/insights/InsightTooltip/InsightTooltip.stories.tsx b/frontend/src/scenes/insights/InsightTooltip/InsightTooltip.stories.tsx index 9497bf2668..7ee9c5f8bf 100644 --- a/frontend/src/scenes/insights/InsightTooltip/InsightTooltip.stories.tsx +++ b/frontend/src/scenes/insights/InsightTooltip/InsightTooltip.stories.tsx @@ -1,5 +1,6 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' import { useMountedLogic } from 'kea' + import { SeriesLetter } from 'lib/components/SeriesGlyph' import { humanFriendlyNumber } from 'lib/utils' diff --git a/frontend/src/scenes/insights/InsightTooltip/InsightTooltip.tsx b/frontend/src/scenes/insights/InsightTooltip/InsightTooltip.tsx index 37e1dd99f1..025655a8bc 100644 --- a/frontend/src/scenes/insights/InsightTooltip/InsightTooltip.tsx +++ b/frontend/src/scenes/insights/InsightTooltip/InsightTooltip.tsx @@ -2,11 +2,12 @@ import './InsightTooltip.scss' import clsx from 'clsx' import { useValues } from 'kea' -import { InsightLabel } from 'lib/components/InsightLabel' -import { IconHandClick } from 'lib/lemon-ui/icons' -import { LemonTable, LemonTableColumn, LemonTableColumns } from 'lib/lemon-ui/LemonTable' -import { shortTimeZone } from 'lib/utils' import { ReactNode } from 'react' + +import { InsightLabel } from 'lib/components/InsightLabel' +import { LemonTable, LemonTableColumn, LemonTableColumns } from 'lib/lemon-ui/LemonTable' +import { IconHandClick } from 'lib/lemon-ui/icons' +import { shortTimeZone } from 'lib/utils' import { formatAggregationValue } from 'scenes/insights/utils' import { teamLogic } from 'scenes/teamLogic' @@ -14,13 +15,13 @@ import { FormatPropertyValueForDisplayFunction, propertyDefinitionsModel } from import { COL_CUTOFF, - getFormattedDate, - getTooltipTitle, InsightTooltipProps, - invertDataSource, InvertedSeriesDatum, ROW_CUTOFF, SeriesDatum, + getFormattedDate, + getTooltipTitle, + invertDataSource, } from './insightTooltipUtils' export function ClickToInspectActors({ diff --git a/frontend/src/scenes/insights/InsightTooltip/insightTooltipUtils.tsx b/frontend/src/scenes/insights/InsightTooltip/insightTooltipUtils.tsx index d74db2aadc..a158edb77e 100644 --- a/frontend/src/scenes/insights/InsightTooltip/insightTooltipUtils.tsx +++ b/frontend/src/scenes/insights/InsightTooltip/insightTooltipUtils.tsx @@ -1,6 +1,8 @@ +import React from 'react' + import { dayjs } from 'lib/dayjs' import { capitalizeFirstLetter, midEllipsis, pluralize } from 'lib/utils' -import React from 'react' +import { getConstrainedWeekRange } from 'lib/utils/dateTimeUtils' import { cohortsModel } from '~/models/cohortsModel' import { propertyDefinitionsModel } from '~/models/propertyDefinitionsModel' @@ -8,7 +10,6 @@ import { BreakdownFilter, DateRange } from '~/queries/schema/schema-general' import { ActionFilter, CompareLabelType, FilterType, IntervalType } from '~/types' import { formatBreakdownLabel } from '../utils' -import { getConstrainedWeekRange } from 'lib/utils/dateTimeUtils' export interface SeriesDatum { id: number // determines order that series will be displayed in diff --git a/frontend/src/scenes/insights/Lifecycle.stories.tsx b/frontend/src/scenes/insights/Lifecycle.stories.tsx index 9bf1c17a24..b31ae35413 100644 --- a/frontend/src/scenes/insights/Lifecycle.stories.tsx +++ b/frontend/src/scenes/insights/Lifecycle.stories.tsx @@ -1,7 +1,9 @@ +import { samplePersonProperties, sampleRetentionPeopleResponse } from 'scenes/insights/__mocks__/insight.mocks' + import { Meta, StoryObj } from '@storybook/react' + import { App } from 'scenes/App' import { createInsightStory } from 'scenes/insights/__mocks__/createInsightScene' -import { samplePersonProperties, sampleRetentionPeopleResponse } from 'scenes/insights/__mocks__/insight.mocks' import { mswDecorator } from '~/mocks/browser' diff --git a/frontend/src/scenes/insights/Retention.stories.tsx b/frontend/src/scenes/insights/Retention.stories.tsx index 232cc3c398..1d0461f52a 100644 --- a/frontend/src/scenes/insights/Retention.stories.tsx +++ b/frontend/src/scenes/insights/Retention.stories.tsx @@ -1,7 +1,9 @@ +import { samplePersonProperties, sampleRetentionPeopleResponse } from 'scenes/insights/__mocks__/insight.mocks' + import { Meta, StoryObj } from '@storybook/react' + import { App } from 'scenes/App' import { createInsightStory } from 'scenes/insights/__mocks__/createInsightScene' -import { samplePersonProperties, sampleRetentionPeopleResponse } from 'scenes/insights/__mocks__/insight.mocks' import { mswDecorator } from '~/mocks/browser' diff --git a/frontend/src/scenes/insights/RetentionDatePicker.tsx b/frontend/src/scenes/insights/RetentionDatePicker.tsx index d9f5fb68cf..9b9fcf2050 100644 --- a/frontend/src/scenes/insights/RetentionDatePicker.tsx +++ b/frontend/src/scenes/insights/RetentionDatePicker.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconCalendar, IconInfo } from '@posthog/icons' import { Tooltip } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { DateFilter } from 'lib/components/DateFilter/DateFilter' import { insightLogic } from 'scenes/insights/insightLogic' import { retentionLogic } from 'scenes/retention/retentionLogic' diff --git a/frontend/src/scenes/insights/UserPaths.stories.tsx b/frontend/src/scenes/insights/UserPaths.stories.tsx index bdc59fa816..aa6e0526fe 100644 --- a/frontend/src/scenes/insights/UserPaths.stories.tsx +++ b/frontend/src/scenes/insights/UserPaths.stories.tsx @@ -1,7 +1,9 @@ +import { samplePersonProperties, sampleRetentionPeopleResponse } from 'scenes/insights/__mocks__/insight.mocks' + import { Meta, StoryObj } from '@storybook/react' + import { App } from 'scenes/App' import { createInsightStory } from 'scenes/insights/__mocks__/createInsightScene' -import { samplePersonProperties, sampleRetentionPeopleResponse } from 'scenes/insights/__mocks__/insight.mocks' import { mswDecorator } from '~/mocks/browser' diff --git a/frontend/src/scenes/insights/__mocks__/createInsightScene.tsx b/frontend/src/scenes/insights/__mocks__/createInsightScene.tsx index be80e789ab..4152ed2559 100644 --- a/frontend/src/scenes/insights/__mocks__/createInsightScene.tsx +++ b/frontend/src/scenes/insights/__mocks__/createInsightScene.tsx @@ -1,5 +1,6 @@ import { StoryFn } from '@storybook/react' import { router } from 'kea-router' + import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { App } from 'scenes/App' diff --git a/frontend/src/scenes/insights/filters/ActionFilter/ActionFilter.stories.tsx b/frontend/src/scenes/insights/filters/ActionFilter/ActionFilter.stories.tsx index 288a506b92..3853e363e9 100644 --- a/frontend/src/scenes/insights/filters/ActionFilter/ActionFilter.stories.tsx +++ b/frontend/src/scenes/insights/filters/ActionFilter/ActionFilter.stories.tsx @@ -1,10 +1,11 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' import { BindLogic, useMountedLogic, useValues } from 'kea' +import { useRef, useState } from 'react' + import { taxonomicFilterMocksDecorator } from 'lib/components/TaxonomicFilter/__mocks__/taxonomicFilterMocksDecorator' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { SINGLE_SERIES_DISPLAY_TYPES } from 'lib/constants' import { alphabet, uuid } from 'lib/utils' -import { useRef, useState } from 'react' import { insightLogic } from 'scenes/insights/insightLogic' import { isFilterWithDisplay, isLifecycleFilter } from 'scenes/insights/sharedUtils' diff --git a/frontend/src/scenes/insights/filters/ActionFilter/ActionFilter.tsx b/frontend/src/scenes/insights/filters/ActionFilter/ActionFilter.tsx index 10da6def04..89da214d79 100644 --- a/frontend/src/scenes/insights/filters/ActionFilter/ActionFilter.tsx +++ b/frontend/src/scenes/insights/filters/ActionFilter/ActionFilter.tsx @@ -3,15 +3,17 @@ import './ActionFilter.scss' import { DndContext } from '@dnd-kit/core' import { restrictToParentElement, restrictToVerticalAxis } from '@dnd-kit/modifiers' import { SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable' -import { IconPlusSmall } from '@posthog/icons' import clsx from 'clsx' import { BindLogic, useActions, useValues } from 'kea' +import React, { useEffect } from 'react' + +import { IconPlusSmall } from '@posthog/icons' + import { DataWarehousePopoverField, TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { DISPLAY_TYPES_TO_CATEGORIES as DISPLAY_TYPES_TO_CATEGORY } from 'lib/constants' import { LemonButton, LemonButtonProps } from 'lib/lemon-ui/LemonButton' import { verticalSortableListCollisionDetection } from 'lib/sortable' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' -import React, { useEffect } from 'react' import { RenameModal } from 'scenes/insights/filters/ActionFilter/RenameModal' import { isTrendsFilter } from 'scenes/insights/sharedUtils' @@ -26,7 +28,7 @@ import { import { teamLogic } from '../../../teamLogic' import { ActionFilterRow, MathAvailability } from './ActionFilterRow/ActionFilterRow' -import { entityFilterLogic, LocalFilter, toFilters } from './entityFilterLogic' +import { LocalFilter, entityFilterLogic, toFilters } from './entityFilterLogic' export interface ActionFilterProps { setFilters: (filters: FilterType) => void diff --git a/frontend/src/scenes/insights/filters/ActionFilter/ActionFilterRow/ActionFilterRow.tsx b/frontend/src/scenes/insights/filters/ActionFilter/ActionFilterRow/ActionFilterRow.tsx index 3f12136263..24fddf8bc9 100644 --- a/frontend/src/scenes/insights/filters/ActionFilter/ActionFilterRow/ActionFilterRow.tsx +++ b/frontend/src/scenes/insights/filters/ActionFilter/ActionFilterRow/ActionFilterRow.tsx @@ -3,6 +3,9 @@ import './ActionFilterRow.scss' import { DraggableSyntheticListeners } from '@dnd-kit/core' import { useSortable } from '@dnd-kit/sortable' import { CSS } from '@dnd-kit/utilities' +import { BuiltLogic, useActions, useValues } from 'kea' +import { useState } from 'react' + import { IconCopy, IconEllipsis, IconFilter, IconPencil, IconTrash, IconWarning } from '@posthog/icons' import { LemonBadge, @@ -12,7 +15,7 @@ import { LemonSelectOption, LemonSelectOptions, } from '@posthog/lemon-ui' -import { BuiltLogic, useActions, useValues } from 'kea' + import { EntityFilterInfo } from 'lib/components/EntityFilterInfo' import { HogQLEditor } from 'lib/components/HogQLEditor/HogQLEditor' import { PropertyFilters } from 'lib/components/PropertyFilters/PropertyFilters' @@ -21,33 +24,32 @@ import { SeriesGlyph, SeriesLetter } from 'lib/components/SeriesGlyph' import { defaultDataWarehousePopoverFields } from 'lib/components/TaxonomicFilter/taxonomicFilterLogic' import { DataWarehousePopoverField, TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { TaxonomicPopover, TaxonomicStringPopover } from 'lib/components/TaxonomicPopover/TaxonomicPopover' -import { IconWithCount, SortableDragIcon } from 'lib/lemon-ui/icons' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonDropdown } from 'lib/lemon-ui/LemonDropdown' import { Tooltip } from 'lib/lemon-ui/Tooltip' +import { IconWithCount, SortableDragIcon } from 'lib/lemon-ui/icons' import { capitalizeFirstLetter, getEventNamesForAction } from 'lib/utils' -import { useState } from 'react' import { databaseTableListLogic } from 'scenes/data-management/database/databaseTableListLogic' import { GroupIntroductionFooter } from 'scenes/groups/GroupsIntroduction' import { insightDataLogic } from 'scenes/insights/insightDataLogic' import { isAllEventsEntityFilter } from 'scenes/insights/utils' import { - apiValueToMathType, COUNT_PER_ACTOR_MATH_DEFINITIONS, MathCategory, - mathsLogic, - mathTypeToApiValues, PROPERTY_MATH_DEFINITIONS, + apiValueToMathType, + mathTypeToApiValues, + mathsLogic, } from 'scenes/trends/mathsLogic' import { actionsModel } from '~/models/actionsModel' import { MathType, NodeKind } from '~/queries/schema/schema-general' import { + TRAILING_MATH_TYPES, getMathTypeWarning, isCalendarHeatmapQuery, isInsightVizNode, isStickinessQuery, - TRAILING_MATH_TYPES, } from '~/queries/utils' import { ActionFilter, diff --git a/frontend/src/scenes/insights/filters/ActionFilter/RenameModal.tsx b/frontend/src/scenes/insights/filters/ActionFilter/RenameModal.tsx index 442e5915ee..c4ab5e4899 100644 --- a/frontend/src/scenes/insights/filters/ActionFilter/RenameModal.tsx +++ b/frontend/src/scenes/insights/filters/ActionFilter/RenameModal.tsx @@ -1,5 +1,7 @@ -import { LemonButton, LemonInput, LemonModal } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonButton, LemonInput, LemonModal } from '@posthog/lemon-ui' + import { entityFilterLogic } from 'scenes/insights/filters/ActionFilter/entityFilterLogic' import { renameModalLogic } from 'scenes/insights/filters/ActionFilter/renameModalLogic' import { getDisplayNameFromEntityFilter } from 'scenes/insights/utils' diff --git a/frontend/src/scenes/insights/filters/ActionFilter/entityFilterLogic.test.ts b/frontend/src/scenes/insights/filters/ActionFilter/entityFilterLogic.test.ts index a1b2d13e5c..db3db82ce2 100644 --- a/frontend/src/scenes/insights/filters/ActionFilter/entityFilterLogic.test.ts +++ b/frontend/src/scenes/insights/filters/ActionFilter/entityFilterLogic.test.ts @@ -1,4 +1,5 @@ import { expectLogic } from 'kea-test-utils' + import * as libUtils from 'lib/utils' import { entityFilterLogic, toLocalFilters } from 'scenes/insights/filters/ActionFilter/entityFilterLogic' diff --git a/frontend/src/scenes/insights/filters/ActionFilter/entityFilterLogic.ts b/frontend/src/scenes/insights/filters/ActionFilter/entityFilterLogic.ts index f4ef598174..3bd4824524 100644 --- a/frontend/src/scenes/insights/filters/ActionFilter/entityFilterLogic.ts +++ b/frontend/src/scenes/insights/filters/ActionFilter/entityFilterLogic.ts @@ -1,9 +1,10 @@ import { actions, connect, events, kea, key, listeners, path, props, reducers, selectors } from 'kea' + import { convertPropertyGroupToProperties } from 'lib/components/PropertyFilters/utils' import { defaultDataWarehousePopoverFields } from 'lib/components/TaxonomicFilter/taxonomicFilterLogic' import { DataWarehousePopoverField } from 'lib/components/TaxonomicFilter/types' import { uuid } from 'lib/utils' -import { eventUsageLogic, GraphSeriesAddedSource } from 'lib/utils/eventUsageLogic' +import { GraphSeriesAddedSource, eventUsageLogic } from 'lib/utils/eventUsageLogic' import { getDefaultEventLabel, getDefaultEventName } from 'lib/utils/getAppContext' import { insightDataLogic } from 'scenes/insights/insightDataLogic' diff --git a/frontend/src/scenes/insights/filters/ActionFilter/renameModalLogic.test.ts b/frontend/src/scenes/insights/filters/ActionFilter/renameModalLogic.test.ts index 6d5be07be1..d772f2c006 100644 --- a/frontend/src/scenes/insights/filters/ActionFilter/renameModalLogic.test.ts +++ b/frontend/src/scenes/insights/filters/ActionFilter/renameModalLogic.test.ts @@ -1,4 +1,5 @@ import { expectLogic } from 'kea-test-utils' + import { entityFilterLogic } from 'scenes/insights/filters/ActionFilter/entityFilterLogic' import { renameModalLogic } from 'scenes/insights/filters/ActionFilter/renameModalLogic' import { insightDataLogic } from 'scenes/insights/insightDataLogic' diff --git a/frontend/src/scenes/insights/filters/ActionFilter/renameModalLogic.ts b/frontend/src/scenes/insights/filters/ActionFilter/renameModalLogic.ts index 4f79644839..759e346e8f 100644 --- a/frontend/src/scenes/insights/filters/ActionFilter/renameModalLogic.ts +++ b/frontend/src/scenes/insights/filters/ActionFilter/renameModalLogic.ts @@ -1,4 +1,5 @@ import { actions, connect, kea, key, path, props, reducers } from 'kea' + import { entityFilterLogic } from 'scenes/insights/filters/ActionFilter/entityFilterLogic' import { getDisplayNameFromEntityFilter } from 'scenes/insights/utils' diff --git a/frontend/src/scenes/insights/filters/AggregationSelect.tsx b/frontend/src/scenes/insights/filters/AggregationSelect.tsx index 383c7129c8..abbcd4abec 100644 --- a/frontend/src/scenes/insights/filters/AggregationSelect.tsx +++ b/frontend/src/scenes/insights/filters/AggregationSelect.tsx @@ -1,5 +1,7 @@ -import { LemonSelect, LemonSelectSection } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonSelect, LemonSelectSection } from '@posthog/lemon-ui' + import { HogQLEditor } from 'lib/components/HogQLEditor/HogQLEditor' import { groupsAccessLogic } from 'lib/introductions/groupsAccessLogic' import { GroupIntroductionFooter } from 'scenes/groups/GroupsIntroduction' diff --git a/frontend/src/scenes/insights/filters/BreakdownFilter/BreakdownTag.stories.tsx b/frontend/src/scenes/insights/filters/BreakdownFilter/BreakdownTag.stories.tsx index b3dc837b77..bb0804b330 100644 --- a/frontend/src/scenes/insights/filters/BreakdownFilter/BreakdownTag.stories.tsx +++ b/frontend/src/scenes/insights/filters/BreakdownFilter/BreakdownTag.stories.tsx @@ -1,4 +1,5 @@ import { Meta, StoryObj } from '@storybook/react' + import { BreakdownTag as BreakdownTagComponent } from 'scenes/insights/filters/BreakdownFilter/BreakdownTag' const meta: Meta = { diff --git a/frontend/src/scenes/insights/filters/BreakdownFilter/BreakdownTag.tsx b/frontend/src/scenes/insights/filters/BreakdownFilter/BreakdownTag.tsx index 6076e58eef..cd254f0346 100644 --- a/frontend/src/scenes/insights/filters/BreakdownFilter/BreakdownTag.tsx +++ b/frontend/src/scenes/insights/filters/BreakdownFilter/BreakdownTag.tsx @@ -1,22 +1,24 @@ -import { LemonTag, LemonTagProps } from '@posthog/lemon-ui' import { BindLogic, useActions, useValues } from 'kea' +import { useState } from 'react' + +import { LemonTag, LemonTagProps } from '@posthog/lemon-ui' + import { HoqQLPropertyInfo } from 'lib/components/HoqQLPropertyInfo' import { PROPERTY_FILTER_TYPE_TO_TAXONOMIC_FILTER_GROUP_TYPE } from 'lib/components/PropertyFilters/utils' import { PropertyKeyInfo } from 'lib/components/PropertyKeyInfo' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { PopoverReferenceContext } from 'lib/lemon-ui/Popover/Popover' -import { useState } from 'react' import { insightLogic } from 'scenes/insights/insightLogic' import { cohortsModel } from '~/models/cohortsModel' import { groupsModel } from '~/models/groupsModel' +import { extractExpressionComment } from '~/queries/nodes/DataTable/utils' import { BreakdownType, GroupTypeIndex } from '~/types' -import { breakdownTagLogic } from './breakdownTagLogic' import { BreakdownTagMenu } from './BreakdownTagMenu' -import { isAllCohort, isCohort } from './taxonomicBreakdownFilterUtils' import { TaxonomicBreakdownPopover } from './TaxonomicBreakdownPopover' -import { extractExpressionComment } from '~/queries/nodes/DataTable/utils' +import { breakdownTagLogic } from './breakdownTagLogic' +import { isAllCohort, isCohort } from './taxonomicBreakdownFilterUtils' type EditableBreakdownTagProps = { breakdown: string | number diff --git a/frontend/src/scenes/insights/filters/BreakdownFilter/BreakdownTagMenu.tsx b/frontend/src/scenes/insights/filters/BreakdownFilter/BreakdownTagMenu.tsx index 33e25854b1..c9b50fa69c 100644 --- a/frontend/src/scenes/insights/filters/BreakdownFilter/BreakdownTagMenu.tsx +++ b/frontend/src/scenes/insights/filters/BreakdownFilter/BreakdownTagMenu.tsx @@ -1,12 +1,14 @@ import './BreakdownTagMenu.scss' +import { useActions, useValues } from 'kea' + import { IconInfo } from '@posthog/icons' import { LemonButton, LemonDivider, LemonInput, LemonSwitch } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { Tooltip } from 'lib/lemon-ui/Tooltip' -import { breakdownTagLogic } from './breakdownTagLogic' import { GlobalBreakdownOptionsMenu } from './GlobalBreakdownOptionsMenu' +import { breakdownTagLogic } from './breakdownTagLogic' import { taxonomicBreakdownFilterLogic } from './taxonomicBreakdownFilterLogic' export const BreakdownTagMenu = (): JSX.Element => { diff --git a/frontend/src/scenes/insights/filters/BreakdownFilter/GlobalBreakdownOptionsMenu.tsx b/frontend/src/scenes/insights/filters/BreakdownFilter/GlobalBreakdownOptionsMenu.tsx index 8118f05dc4..50ed8c3d41 100644 --- a/frontend/src/scenes/insights/filters/BreakdownFilter/GlobalBreakdownOptionsMenu.tsx +++ b/frontend/src/scenes/insights/filters/BreakdownFilter/GlobalBreakdownOptionsMenu.tsx @@ -1,8 +1,10 @@ import './BreakdownTagMenu.scss' +import { useActions, useValues } from 'kea' + import { IconInfo } from '@posthog/icons' import { LemonInput, LemonLabel, LemonSwitch } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { Tooltip } from 'lib/lemon-ui/Tooltip' import { insightLogic } from 'scenes/insights/insightLogic' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' diff --git a/frontend/src/scenes/insights/filters/BreakdownFilter/TaxonomicBreakdownButton.tsx b/frontend/src/scenes/insights/filters/BreakdownFilter/TaxonomicBreakdownButton.tsx index dfab1ea80d..b5114a99da 100644 --- a/frontend/src/scenes/insights/filters/BreakdownFilter/TaxonomicBreakdownButton.tsx +++ b/frontend/src/scenes/insights/filters/BreakdownFilter/TaxonomicBreakdownButton.tsx @@ -1,11 +1,13 @@ -import { IconPlusSmall } from '@posthog/icons' -import { LemonButton } from '@posthog/lemon-ui' import { useValues } from 'kea' -import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { useState } from 'react' -import { taxonomicBreakdownFilterLogic } from './taxonomicBreakdownFilterLogic' +import { IconPlusSmall } from '@posthog/icons' +import { LemonButton } from '@posthog/lemon-ui' + +import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' + import { TaxonomicBreakdownPopover } from './TaxonomicBreakdownPopover' +import { taxonomicBreakdownFilterLogic } from './taxonomicBreakdownFilterLogic' interface TaxonomicBreakdownButtonProps { disabledReason?: string diff --git a/frontend/src/scenes/insights/filters/BreakdownFilter/TaxonomicBreakdownFilter.tsx b/frontend/src/scenes/insights/filters/BreakdownFilter/TaxonomicBreakdownFilter.tsx index d50f4dbff8..472ef74fce 100644 --- a/frontend/src/scenes/insights/filters/BreakdownFilter/TaxonomicBreakdownFilter.tsx +++ b/frontend/src/scenes/insights/filters/BreakdownFilter/TaxonomicBreakdownFilter.tsx @@ -1,6 +1,7 @@ -import { IconGear } from '@posthog/icons' import { BindLogic, useActions, useValues } from 'kea' +import { IconGear } from '@posthog/icons' + import { LemonButton } from '~/lib/lemon-ui/LemonButton' import { LemonLabel } from '~/lib/lemon-ui/LemonLabel' import { Popover } from '~/lib/lemon-ui/Popover' @@ -10,7 +11,7 @@ import { ChartDisplayType, InsightLogicProps } from '~/types' import { EditableBreakdownTag } from './BreakdownTag' import { GlobalBreakdownOptionsMenu } from './GlobalBreakdownOptionsMenu' import { TaxonomicBreakdownButton } from './TaxonomicBreakdownButton' -import { taxonomicBreakdownFilterLogic, TaxonomicBreakdownFilterLogicProps } from './taxonomicBreakdownFilterLogic' +import { TaxonomicBreakdownFilterLogicProps, taxonomicBreakdownFilterLogic } from './taxonomicBreakdownFilterLogic' export interface TaxonomicBreakdownFilterProps { insightProps: InsightLogicProps diff --git a/frontend/src/scenes/insights/filters/BreakdownFilter/TaxonomicBreakdownPopover.tsx b/frontend/src/scenes/insights/filters/BreakdownFilter/TaxonomicBreakdownPopover.tsx index 340a116b72..25983ebfa4 100644 --- a/frontend/src/scenes/insights/filters/BreakdownFilter/TaxonomicBreakdownPopover.tsx +++ b/frontend/src/scenes/insights/filters/BreakdownFilter/TaxonomicBreakdownPopover.tsx @@ -1,4 +1,5 @@ import { useActions, useValues } from 'kea' + import { TaxonomicFilter } from 'lib/components/TaxonomicFilter/TaxonomicFilter' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { Popover } from 'lib/lemon-ui/Popover/Popover' diff --git a/frontend/src/scenes/insights/filters/BreakdownFilter/breakdownTagLogic.ts b/frontend/src/scenes/insights/filters/BreakdownFilter/breakdownTagLogic.ts index dc001fc0e9..f1385f9726 100644 --- a/frontend/src/scenes/insights/filters/BreakdownFilter/breakdownTagLogic.ts +++ b/frontend/src/scenes/insights/filters/BreakdownFilter/breakdownTagLogic.ts @@ -1,4 +1,5 @@ import { actions, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' + import { breakdownFilterToTaxonomicFilterType, filterToTaxonomicFilterType, diff --git a/frontend/src/scenes/insights/filters/BreakdownFilter/taxonomicBreakdownFilterLogic.test.ts b/frontend/src/scenes/insights/filters/BreakdownFilter/taxonomicBreakdownFilterLogic.test.ts index 43935ffe47..12300c77eb 100644 --- a/frontend/src/scenes/insights/filters/BreakdownFilter/taxonomicBreakdownFilterLogic.test.ts +++ b/frontend/src/scenes/insights/filters/BreakdownFilter/taxonomicBreakdownFilterLogic.test.ts @@ -1,4 +1,5 @@ import { expectLogic } from 'kea-test-utils' + import { TaxonomicFilterGroup, TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { initKeaTests } from '~/test/init' diff --git a/frontend/src/scenes/insights/filters/BreakdownFilter/taxonomicBreakdownFilterLogic.ts b/frontend/src/scenes/insights/filters/BreakdownFilter/taxonomicBreakdownFilterLogic.ts index 4313c98cc7..e88b2d7318 100644 --- a/frontend/src/scenes/insights/filters/BreakdownFilter/taxonomicBreakdownFilterLogic.ts +++ b/frontend/src/scenes/insights/filters/BreakdownFilter/taxonomicBreakdownFilterLogic.ts @@ -1,4 +1,5 @@ import { actions, connect, defaults, kea, key, listeners, path, props, reducers, selectors } from 'kea' + import { breakdownFilterToTaxonomicFilterType, propertyFilterTypeToPropertyDefinitionType, diff --git a/frontend/src/scenes/insights/filters/FunnelExclusionsFilter/ExclusionRowSuffix.tsx b/frontend/src/scenes/insights/filters/FunnelExclusionsFilter/ExclusionRowSuffix.tsx index 6d814842cc..23c0e4890b 100644 --- a/frontend/src/scenes/insights/filters/FunnelExclusionsFilter/ExclusionRowSuffix.tsx +++ b/frontend/src/scenes/insights/filters/FunnelExclusionsFilter/ExclusionRowSuffix.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconFilter, IconTrash } from '@posthog/icons' import { LemonButton, LemonSelect } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { IconWithCount } from 'lib/lemon-ui/icons' import { getClampedFunnelStepRange } from 'scenes/funnels/funnelUtils' import { entityFilterLogic } from 'scenes/insights/filters/ActionFilter/entityFilterLogic' diff --git a/frontend/src/scenes/insights/filters/FunnelExclusionsFilter/FunnelExclusionsFilter.tsx b/frontend/src/scenes/insights/filters/FunnelExclusionsFilter/FunnelExclusionsFilter.tsx index 4baba260dd..f41f5868f4 100644 --- a/frontend/src/scenes/insights/filters/FunnelExclusionsFilter/FunnelExclusionsFilter.tsx +++ b/frontend/src/scenes/insights/filters/FunnelExclusionsFilter/FunnelExclusionsFilter.tsx @@ -1,6 +1,7 @@ import { useActions, useValues } from 'kea' -import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { useRef } from 'react' + +import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { ActionFilter } from 'scenes/insights/filters/ActionFilter/ActionFilter' import { MathAvailability } from 'scenes/insights/filters/ActionFilter/ActionFilterRow/ActionFilterRow' import { insightLogic } from 'scenes/insights/insightLogic' diff --git a/frontend/src/scenes/insights/filters/FunnelStepReferencePicker.tsx b/frontend/src/scenes/insights/filters/FunnelStepReferencePicker.tsx index 095f0b949a..e38c7a66a7 100644 --- a/frontend/src/scenes/insights/filters/FunnelStepReferencePicker.tsx +++ b/frontend/src/scenes/insights/filters/FunnelStepReferencePicker.tsx @@ -1,5 +1,7 @@ -import { LemonSelect } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonSelect } from '@posthog/lemon-ui' + import { funnelDataLogic } from 'scenes/funnels/funnelDataLogic' import { insightLogic } from 'scenes/insights/insightLogic' diff --git a/frontend/src/scenes/insights/filters/InsightDateFilter/InsightDateFilter.tsx b/frontend/src/scenes/insights/filters/InsightDateFilter/InsightDateFilter.tsx index 0c2adb6749..387a526c67 100644 --- a/frontend/src/scenes/insights/filters/InsightDateFilter/InsightDateFilter.tsx +++ b/frontend/src/scenes/insights/filters/InsightDateFilter/InsightDateFilter.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconCalendar, IconInfo } from '@posthog/icons' import { Tooltip } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { DateFilter } from 'lib/components/DateFilter/DateFilter' import { dateMapping } from 'lib/utils' import { insightLogic } from 'scenes/insights/insightLogic' diff --git a/frontend/src/scenes/insights/filters/MinimumOccurrencesInput.tsx b/frontend/src/scenes/insights/filters/MinimumOccurrencesInput.tsx index 0566acc031..68997eb553 100644 --- a/frontend/src/scenes/insights/filters/MinimumOccurrencesInput.tsx +++ b/frontend/src/scenes/insights/filters/MinimumOccurrencesInput.tsx @@ -1,9 +1,12 @@ -import { LemonInput, Tooltip } from '@posthog/lemon-ui' -import { toast } from 'react-toastify' -import { insightLogic } from '../insightLogic' import { useActions, useValues } from 'kea' +import { toast } from 'react-toastify' + +import { LemonInput, Tooltip } from '@posthog/lemon-ui' + import { retentionLogic } from 'scenes/retention/retentionLogic' +import { insightLogic } from '../insightLogic' + export function MinimumOccurrencesInput(): JSX.Element | null { const { insightProps } = useValues(insightLogic) const { retentionFilter } = useValues(retentionLogic(insightProps)) diff --git a/frontend/src/scenes/insights/filters/PathCleaningFilter.tsx b/frontend/src/scenes/insights/filters/PathCleaningFilter.tsx index a6115074c0..33b919b2f2 100644 --- a/frontend/src/scenes/insights/filters/PathCleaningFilter.tsx +++ b/frontend/src/scenes/insights/filters/PathCleaningFilter.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconGear } from '@posthog/icons' import { LemonButton, LemonSwitch } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { PathCleanFilters } from 'lib/components/PathCleanFilters/PathCleanFilters' import { Tooltip } from 'lib/lemon-ui/Tooltip' import { pathsDataLogic } from 'scenes/paths/pathsDataLogic' diff --git a/frontend/src/scenes/insights/filters/RetentionChartPicker.tsx b/frontend/src/scenes/insights/filters/RetentionChartPicker.tsx index 0be3e1bc46..d348aa8094 100644 --- a/frontend/src/scenes/insights/filters/RetentionChartPicker.tsx +++ b/frontend/src/scenes/insights/filters/RetentionChartPicker.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconGraph, IconTrends } from '@posthog/icons' import { LemonSelect, LemonSelectOptions } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { insightLogic } from 'scenes/insights/insightLogic' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' diff --git a/frontend/src/scenes/insights/filters/RetentionCumulativeButton.tsx b/frontend/src/scenes/insights/filters/RetentionCumulativeButton.tsx index 93d50a25ad..f0b91d8b89 100644 --- a/frontend/src/scenes/insights/filters/RetentionCumulativeButton.tsx +++ b/frontend/src/scenes/insights/filters/RetentionCumulativeButton.tsx @@ -1,5 +1,7 @@ -import { LemonSegmentedButton } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonSegmentedButton } from '@posthog/lemon-ui' + import { insightLogic } from 'scenes/insights/insightLogic' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' diff --git a/frontend/src/scenes/insights/filters/RetentionDashboardDisplayPicker.tsx b/frontend/src/scenes/insights/filters/RetentionDashboardDisplayPicker.tsx index 89148824df..50fa3a488e 100644 --- a/frontend/src/scenes/insights/filters/RetentionDashboardDisplayPicker.tsx +++ b/frontend/src/scenes/insights/filters/RetentionDashboardDisplayPicker.tsx @@ -1,5 +1,7 @@ -import { LemonSelect } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonSelect } from '@posthog/lemon-ui' + import { insightLogic } from 'scenes/insights/insightLogic' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' diff --git a/frontend/src/scenes/insights/filters/RetentionMeanDropdown.tsx b/frontend/src/scenes/insights/filters/RetentionMeanDropdown.tsx index 2f59a88580..ccd295f356 100644 --- a/frontend/src/scenes/insights/filters/RetentionMeanDropdown.tsx +++ b/frontend/src/scenes/insights/filters/RetentionMeanDropdown.tsx @@ -1,5 +1,7 @@ -import { LemonSelect } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonSelect } from '@posthog/lemon-ui' + import { insightLogic } from 'scenes/insights/insightLogic' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' diff --git a/frontend/src/scenes/insights/filters/RetentionReferencePicker.tsx b/frontend/src/scenes/insights/filters/RetentionReferencePicker.tsx index 786139a9cd..b029e90722 100644 --- a/frontend/src/scenes/insights/filters/RetentionReferencePicker.tsx +++ b/frontend/src/scenes/insights/filters/RetentionReferencePicker.tsx @@ -1,5 +1,7 @@ -import { LemonSelect } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonSelect } from '@posthog/lemon-ui' + import { insightLogic } from 'scenes/insights/insightLogic' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' diff --git a/frontend/src/scenes/insights/filters/TestAccountFilter/TestAccountFilter.tsx b/frontend/src/scenes/insights/filters/TestAccountFilter/TestAccountFilter.tsx index 1d620846c9..659a149b1b 100644 --- a/frontend/src/scenes/insights/filters/TestAccountFilter/TestAccountFilter.tsx +++ b/frontend/src/scenes/insights/filters/TestAccountFilter/TestAccountFilter.tsx @@ -1,5 +1,7 @@ -import { IconGear } from '@posthog/icons' import { useActions, useValues } from 'kea' + +import { IconGear } from '@posthog/icons' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonSwitch, LemonSwitchProps } from 'lib/lemon-ui/LemonSwitch/LemonSwitch' import { filterTestAccountsDefaultsLogic } from 'scenes/settings/environment/filterTestAccountDefaultsLogic' diff --git a/frontend/src/scenes/insights/insightCommandLogic.ts b/frontend/src/scenes/insights/insightCommandLogic.ts index e08d168468..94c9366ad8 100644 --- a/frontend/src/scenes/insights/insightCommandLogic.ts +++ b/frontend/src/scenes/insights/insightCommandLogic.ts @@ -1,5 +1,7 @@ -import { IconTrending } from '@posthog/icons' import { connect, events, kea, key, path, props } from 'kea' + +import { IconTrending } from '@posthog/icons' + import { Command, commandPaletteLogic } from 'lib/components/CommandPalette/commandPaletteLogic' import { dateMapping } from 'lib/utils' import { keyForInsightLogicProps } from 'scenes/insights/sharedUtils' diff --git a/frontend/src/scenes/insights/insightDataLogic.test.ts b/frontend/src/scenes/insights/insightDataLogic.test.ts index 4f75b543ea..99d3984a37 100644 --- a/frontend/src/scenes/insights/insightDataLogic.test.ts +++ b/frontend/src/scenes/insights/insightDataLogic.test.ts @@ -1,4 +1,5 @@ import { expectLogic } from 'kea-test-utils' + import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { insightLogic } from 'scenes/insights/insightLogic' diff --git a/frontend/src/scenes/insights/insightDataLogic.tsx b/frontend/src/scenes/insights/insightDataLogic.tsx index a22b567fbb..8a15ece5e3 100644 --- a/frontend/src/scenes/insights/insightDataLogic.tsx +++ b/frontend/src/scenes/insights/insightDataLogic.tsx @@ -1,13 +1,15 @@ import { actions, connect, kea, key, listeners, path, props, propsChanged, reducers, selectors } from 'kea' import { actionToUrl, router } from 'kea-router' + import { objectsEqual } from 'lib/utils' import { DATAWAREHOUSE_EDITOR_ITEM_ID } from 'scenes/data-warehouse/utils' import { keyForInsightLogicProps } from 'scenes/insights/sharedUtils' +import { sceneLogic } from 'scenes/sceneLogic' import { Scene } from 'scenes/sceneTypes' import { filterTestAccountsDefaultsLogic } from 'scenes/settings/environment/filterTestAccountDefaultsLogic' import { examples } from '~/queries/examples' -import { dataNodeLogic, DataNodeLogicProps } from '~/queries/nodes/DataNode/dataNodeLogic' +import { DataNodeLogicProps, dataNodeLogic } from '~/queries/nodes/DataNode/dataNodeLogic' import { nodeKindToInsightType } from '~/queries/nodes/InsightQuery/utils/queryNodeToFilter' import { insightVizDataNodeKey } from '~/queries/nodes/InsightViz/InsightViz' import { getDefaultQuery, queryFromKind } from '~/queries/nodes/InsightViz/utils' @@ -24,7 +26,6 @@ import { insightSceneLogic } from './insightSceneLogic' import { insightUsageLogic } from './insightUsageLogic' import { crushDraftQueryForLocalStorage, crushDraftQueryForURL, isQueryTooLarge } from './utils' import { compareQuery } from './utils/queryUtils' -import { sceneLogic } from 'scenes/sceneLogic' export const insightDataLogic = kea([ props({} as InsightLogicProps), diff --git a/frontend/src/scenes/insights/insightDataTimingLogic.ts b/frontend/src/scenes/insights/insightDataTimingLogic.ts index 8da118e748..229fd68f12 100644 --- a/frontend/src/scenes/insights/insightDataTimingLogic.ts +++ b/frontend/src/scenes/insights/insightDataTimingLogic.ts @@ -1,8 +1,9 @@ import { actions, connect, kea, key, listeners, path, props, reducers } from 'kea' + import { eventUsageLogic } from 'lib/utils/eventUsageLogic' import { teamLogic } from 'scenes/teamLogic' -import { dataNodeLogic, DataNodeLogicProps } from '~/queries/nodes/DataNode/dataNodeLogic' +import { DataNodeLogicProps, dataNodeLogic } from '~/queries/nodes/DataNode/dataNodeLogic' import { insightVizDataNodeKey } from '~/queries/nodes/InsightViz/InsightViz' import { InsightLogicProps } from '~/types' diff --git a/frontend/src/scenes/insights/insightLogic.test.ts b/frontend/src/scenes/insights/insightLogic.test.ts index 82705dd180..1f319473ef 100644 --- a/frontend/src/scenes/insights/insightLogic.test.ts +++ b/frontend/src/scenes/insights/insightLogic.test.ts @@ -1,7 +1,9 @@ +import { MOCK_DEFAULT_TEAM, MOCK_TEAM_ID } from 'lib/api.mock' + import { router } from 'kea-router' import { expectLogic, partial, truth } from 'kea-test-utils' + import api from 'lib/api' -import { MOCK_DEFAULT_TEAM, MOCK_TEAM_ID } from 'lib/api.mock' import { DashboardPrivilegeLevel, DashboardRestrictionLevel } from 'lib/constants' import { dashboardLogic } from 'scenes/dashboard/dashboardLogic' import { savedInsightsLogic } from 'scenes/saved-insights/savedInsightsLogic' diff --git a/frontend/src/scenes/insights/insightLogic.tsx b/frontend/src/scenes/insights/insightLogic.tsx index 1f7972a4cb..0a7608c120 100644 --- a/frontend/src/scenes/insights/insightLogic.tsx +++ b/frontend/src/scenes/insights/insightLogic.tsx @@ -1,14 +1,16 @@ -import { LemonDialog, LemonInput } from '@posthog/lemon-ui' -import { actions, connect, events, kea, key, listeners, LogicWrapper, path, props, reducers, selectors } from 'kea' +import { LogicWrapper, actions, connect, events, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { router } from 'kea-router' + +import { LemonDialog, LemonInput } from '@posthog/lemon-ui' + import { accessLevelSatisfied } from 'lib/components/AccessControlAction' import { FEATURE_FLAGS } from 'lib/constants' import { LemonField } from 'lib/lemon-ui/LemonField' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { objectsEqual } from 'lib/utils' -import { eventUsageLogic, InsightEventSource } from 'lib/utils/eventUsageLogic' +import { InsightEventSource, eventUsageLogic } from 'lib/utils/eventUsageLogic' import { DashboardLoadAction, dashboardLogic } from 'scenes/dashboard/dashboardLogic' import { insightSceneLogic } from 'scenes/insights/insightSceneLogic' import { keyForInsightLogicProps } from 'scenes/insights/sharedUtils' @@ -20,7 +22,7 @@ import { mathsLogic } from 'scenes/trends/mathsLogic' import { urls } from 'scenes/urls' import { userLogic } from 'scenes/userLogic' -import { activationLogic, ActivationTask } from '~/layout/navigation-3000/sidepanel/panels/activation/activationLogic' +import { ActivationTask, activationLogic } from '~/layout/navigation-3000/sidepanel/panels/activation/activationLogic' import { getLastNewFolder, refreshTreeItem } from '~/layout/panel-layout/ProjectTree/projectTreeLogic' import { cohortsModel } from '~/models/cohortsModel' import { dashboardsModel } from '~/models/dashboardsModel' diff --git a/frontend/src/scenes/insights/insightSceneLogic.test.ts b/frontend/src/scenes/insights/insightSceneLogic.test.ts index 25262d8f28..fb87e2e057 100644 --- a/frontend/src/scenes/insights/insightSceneLogic.test.ts +++ b/frontend/src/scenes/insights/insightSceneLogic.test.ts @@ -1,6 +1,8 @@ +import { MOCK_TEAM_ID } from 'lib/api.mock' + import { combineUrl, router } from 'kea-router' import { expectLogic, partial } from 'kea-test-utils' -import { MOCK_TEAM_ID } from 'lib/api.mock' + import { addProjectIdIfMissing } from 'lib/utils/router-utils' import { insightSceneLogic } from 'scenes/insights/insightSceneLogic' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/insights/insightSceneLogic.tsx b/frontend/src/scenes/insights/insightSceneLogic.tsx index cc70eeee5d..418fd347f2 100644 --- a/frontend/src/scenes/insights/insightSceneLogic.tsx +++ b/frontend/src/scenes/insights/insightSceneLogic.tsx @@ -1,14 +1,17 @@ -import { actions, BuiltLogic, connect, kea, listeners, path, reducers, selectors, sharedListeners } from 'kea' +import { BuiltLogic, actions, connect, kea, listeners, path, reducers, selectors, sharedListeners } from 'kea' import { actionToUrl, beforeUnload, router, urlToAction } from 'kea-router' import { CombinedLocation } from 'kea-router/lib/utils' import { objectsEqual } from 'kea-test-utils' + +import api from 'lib/api' import { AlertType } from 'lib/components/Alerts/types' import { isEmptyObject } from 'lib/utils' -import { eventUsageLogic, InsightEventSource } from 'lib/utils/eventUsageLogic' +import { InsightEventSource, eventUsageLogic } from 'lib/utils/eventUsageLogic' +import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { dashboardLogic } from 'scenes/dashboard/dashboardLogic' import { createEmptyInsight, insightLogic } from 'scenes/insights/insightLogic' import { insightLogicType } from 'scenes/insights/insightLogicType' -import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' +import { MaxContextInput, createMaxContextHelpers } from 'scenes/max/maxTypes' import { sceneLogic } from 'scenes/sceneLogic' import { Scene } from 'scenes/sceneTypes' import { filterTestAccountsDefaultsLogic } from 'scenes/settings/environment/filterTestAccountDefaultsLogic' @@ -18,6 +21,7 @@ import { urls } from 'scenes/urls' import { SIDE_PANEL_CONTEXT_KEY, SidePanelSceneContext } from '~/layout/navigation-3000/sidepanel/types' import { getDefaultQuery } from '~/queries/nodes/InsightViz/utils' import { DashboardFilter, HogQLVariable, Node } from '~/queries/schema/schema-general' +import { checkLatestVersionsOnQuery } from '~/queries/utils' import { ActivityScope, Breadcrumb, @@ -33,10 +37,6 @@ import { insightDataLogic } from './insightDataLogic' import { insightDataLogicType } from './insightDataLogicType' import type { insightSceneLogicType } from './insightSceneLogicType' import { parseDraftQueryFromLocalStorage, parseDraftQueryFromURL } from './utils' -import api from 'lib/api' -import { checkLatestVersionsOnQuery } from '~/queries/utils' - -import { MaxContextInput, createMaxContextHelpers } from 'scenes/max/maxTypes' const NEW_INSIGHT = 'new' as const export type InsightId = InsightShortId | typeof NEW_INSIGHT | null diff --git a/frontend/src/scenes/insights/insightUsageLogic.ts b/frontend/src/scenes/insights/insightUsageLogic.ts index a7ae8c14aa..b5fbeafef5 100644 --- a/frontend/src/scenes/insights/insightUsageLogic.ts +++ b/frontend/src/scenes/insights/insightUsageLogic.ts @@ -1,11 +1,12 @@ import { actions, connect, kea, key, listeners, path, props, reducers } from 'kea' import { subscriptions } from 'kea-subscriptions' + import api from 'lib/api' import { objectsEqual } from 'lib/utils' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' import { projectLogic } from 'scenes/projectLogic' -import { dataNodeLogic, DataNodeLogicProps } from '~/queries/nodes/DataNode/dataNodeLogic' +import { DataNodeLogicProps, dataNodeLogic } from '~/queries/nodes/DataNode/dataNodeLogic' import { insightVizDataNodeKey } from '~/queries/nodes/InsightViz/InsightViz' import { Node } from '~/queries/schema/schema-general' import { InsightLogicProps } from '~/types' diff --git a/frontend/src/scenes/insights/insightVizDataLogic.test.ts b/frontend/src/scenes/insights/insightVizDataLogic.test.ts index 123849b705..01138d272d 100644 --- a/frontend/src/scenes/insights/insightVizDataLogic.test.ts +++ b/frontend/src/scenes/insights/insightVizDataLogic.test.ts @@ -1,4 +1,5 @@ import { expectLogic } from 'kea-test-utils' + import { FunnelLayout } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { funnelInvalidExclusionError, funnelResult } from 'scenes/funnels/__mocks__/funnelDataLogicMocks' diff --git a/frontend/src/scenes/insights/insightVizDataLogic.ts b/frontend/src/scenes/insights/insightVizDataLogic.ts index 524e8f4ebc..ebcb98334c 100644 --- a/frontend/src/scenes/insights/insightVizDataLogic.ts +++ b/frontend/src/scenes/insights/insightVizDataLogic.ts @@ -1,5 +1,8 @@ -import { lemonToast } from '@posthog/lemon-ui' import { actions, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' +import posthog from 'posthog-js' + +import { lemonToast } from '@posthog/lemon-ui' + import { DISPLAY_TYPES_WITHOUT_DETAILED_RESULTS, DISPLAY_TYPES_WITHOUT_LEGEND, @@ -9,7 +12,6 @@ import { parseProperties } from 'lib/components/PropertyFilters/utils' import { NON_TIME_SERIES_DISPLAY_TYPES, NON_VALUES_ON_SERIES_DISPLAY_TYPES } from 'lib/constants' import { dayjs } from 'lib/dayjs' import { dateMapping, is12HoursOrLess, isLessThan2Days } from 'lib/utils' -import posthog from 'posthog-js' import { databaseTableListLogic } from 'scenes/data-management/database/databaseTableListLogic' import { dataThemeLogic } from 'scenes/dataThemeLogic' import { getClampedFunnelStepRange } from 'scenes/funnels/funnelUtils' @@ -25,8 +27,8 @@ import { extractValidationError, getAllEventNames, queryFromKind } from '~/queri import { BreakdownFilter, CompareFilter, - DatabaseSchemaField, DataWarehouseNode, + DatabaseSchemaField, DateRange, FunnelExclusionSteps, FunnelsFilter, diff --git a/frontend/src/scenes/insights/sharedUtils.ts b/frontend/src/scenes/insights/sharedUtils.ts index ec7c7c997e..d9ab195ee0 100644 --- a/frontend/src/scenes/insights/sharedUtils.ts +++ b/frontend/src/scenes/insights/sharedUtils.ts @@ -1,5 +1,4 @@ // This is separate from utils.ts because here we don't include `funnelLogic`, `retentionLogic`, etc - import { CalendarHeatmapFilterType, ChartDisplayType, diff --git a/frontend/src/scenes/insights/stories/TrendsLine.stories.tsx b/frontend/src/scenes/insights/stories/TrendsLine.stories.tsx index dcbd9d9fcf..9c6b0b6cc6 100644 --- a/frontend/src/scenes/insights/stories/TrendsLine.stories.tsx +++ b/frontend/src/scenes/insights/stories/TrendsLine.stories.tsx @@ -1,7 +1,9 @@ +import { samplePersonProperties, sampleRetentionPeopleResponse } from 'scenes/insights/__mocks__/insight.mocks' + import { Meta, StoryObj } from '@storybook/react' + import { App } from 'scenes/App' import { createInsightStory } from 'scenes/insights/__mocks__/createInsightScene' -import { samplePersonProperties, sampleRetentionPeopleResponse } from 'scenes/insights/__mocks__/insight.mocks' import { mswDecorator } from '~/mocks/browser' diff --git a/frontend/src/scenes/insights/stories/TrendsPie.stories.tsx b/frontend/src/scenes/insights/stories/TrendsPie.stories.tsx index e5f8e9c4ad..cedfb921ad 100644 --- a/frontend/src/scenes/insights/stories/TrendsPie.stories.tsx +++ b/frontend/src/scenes/insights/stories/TrendsPie.stories.tsx @@ -1,7 +1,9 @@ +import { samplePersonProperties, sampleRetentionPeopleResponse } from 'scenes/insights/__mocks__/insight.mocks' + import { Meta, StoryObj } from '@storybook/react' + import { App } from 'scenes/App' import { createInsightStory } from 'scenes/insights/__mocks__/createInsightScene' -import { samplePersonProperties, sampleRetentionPeopleResponse } from 'scenes/insights/__mocks__/insight.mocks' import { mswDecorator } from '~/mocks/browser' diff --git a/frontend/src/scenes/insights/stories/TrendsValue.stories.tsx b/frontend/src/scenes/insights/stories/TrendsValue.stories.tsx index 11b75eba93..5975b6fadc 100644 --- a/frontend/src/scenes/insights/stories/TrendsValue.stories.tsx +++ b/frontend/src/scenes/insights/stories/TrendsValue.stories.tsx @@ -1,7 +1,9 @@ +import { samplePersonProperties, sampleRetentionPeopleResponse } from 'scenes/insights/__mocks__/insight.mocks' + import { Meta, StoryObj } from '@storybook/react' + import { App } from 'scenes/App' import { createInsightStory } from 'scenes/insights/__mocks__/createInsightScene' -import { samplePersonProperties, sampleRetentionPeopleResponse } from 'scenes/insights/__mocks__/insight.mocks' import { mswDecorator } from '~/mocks/browser' diff --git a/frontend/src/scenes/insights/summarizeInsight.test.ts b/frontend/src/scenes/insights/summarizeInsight.test.ts index c7c4f55942..53b55fdeaa 100644 --- a/frontend/src/scenes/insights/summarizeInsight.test.ts +++ b/frontend/src/scenes/insights/summarizeInsight.test.ts @@ -1,5 +1,5 @@ import { RETENTION_FIRST_TIME, RETENTION_RECURRING } from 'lib/constants' -import { summarizeInsight, SummaryContext } from 'scenes/insights/summarizeInsight' +import { SummaryContext, summarizeInsight } from 'scenes/insights/summarizeInsight' import { BASE_MATH_DEFINITIONS, COUNT_PER_ACTOR_MATH_DEFINITIONS, diff --git a/frontend/src/scenes/insights/summarizeInsight.ts b/frontend/src/scenes/insights/summarizeInsight.ts index bf55c1032f..6365e78900 100644 --- a/frontend/src/scenes/insights/summarizeInsight.ts +++ b/frontend/src/scenes/insights/summarizeInsight.ts @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { PROPERTY_FILTER_TYPE_TO_TAXONOMIC_FILTER_GROUP_TYPE } from 'lib/components/PropertyFilters/utils' import { RETENTION_FIRST_TIME } from 'lib/constants' import { alphabet, capitalizeFirstLetter } from 'lib/utils' @@ -8,7 +9,7 @@ import { humanizePathsEventTypes, } from 'scenes/insights/utils' import { retentionOptions } from 'scenes/retention/constants' -import { apiValueToMathType, MathCategory, MathDefinition, mathsLogic } from 'scenes/trends/mathsLogic' +import { MathCategory, MathDefinition, apiValueToMathType, mathsLogic } from 'scenes/trends/mathsLogic' import { mathsLogicType } from 'scenes/trends/mathsLogicType' import { cohortsModel } from '~/models/cohortsModel' diff --git a/frontend/src/scenes/insights/utils.test.ts b/frontend/src/scenes/insights/utils.test.ts index b0224c835c..70b54afec0 100644 --- a/frontend/src/scenes/insights/utils.test.ts +++ b/frontend/src/scenes/insights/utils.test.ts @@ -11,7 +11,7 @@ import { } from 'scenes/insights/utils' import { IndexedTrendResult } from 'scenes/trends/types' -import { ActionsNode, BreakdownFilter, EventsNode, NodeKind, InsightQueryNode } from '~/queries/schema/schema-general' +import { ActionsNode, BreakdownFilter, EventsNode, InsightQueryNode, NodeKind } from '~/queries/schema/schema-general' import { isEventsNode } from '~/queries/utils' import { CompareLabelType, Entity, EntityFilter, FilterType, InsightType } from '~/types' diff --git a/frontend/src/scenes/insights/utils.tsx b/frontend/src/scenes/insights/utils.tsx index 7835d4353e..1a323b3375 100644 --- a/frontend/src/scenes/insights/utils.tsx +++ b/frontend/src/scenes/insights/utils.tsx @@ -1,14 +1,16 @@ +import isEqual from 'lodash.isequal' +import { ReactNode } from 'react' + import api from 'lib/api' import { DataColorTheme, DataColorToken } from 'lib/colors' import { dayjs } from 'lib/dayjs' import { ensureStringIsNotBlank, humanFriendlyNumber, objectsEqual } from 'lib/utils' import { getCurrentTeamId } from 'lib/utils/getAppContext' -import { ReactNode } from 'react' import { IndexedTrendResult } from 'scenes/trends/types' import { urls } from 'scenes/urls' -import isEqual from 'lodash.isequal' import { propertyFilterTypeToPropertyDefinitionType } from '~/lib/components/PropertyFilters/utils' +import { removeUndefinedAndNull } from '~/lib/utils' import { FormatPropertyValueForDisplayFunction } from '~/models/propertyDefinitionsModel' import { examples } from '~/queries/examples' import { @@ -27,6 +29,7 @@ import { ResultCustomizationByValue, } from '~/queries/schema/schema-general' import { isDataWarehouseNode, isEventsNode } from '~/queries/utils' +import { cleanInsightQuery } from '~/scenes/insights/utils/queryUtils' import { CORE_FILTER_DEFINITIONS_BY_GROUP } from '~/taxonomy/taxonomy' import { ActionFilter, @@ -49,8 +52,6 @@ import { import { RESULT_CUSTOMIZATION_DEFAULT } from './EditorFilters/ResultCustomizationByPicker' import { insightLogic } from './insightLogic' -import { cleanInsightQuery } from '~/scenes/insights/utils/queryUtils' -import { removeUndefinedAndNull } from '~/lib/utils' export const isAllEventsEntityFilter = (filter: EntityFilter | ActionFilter | null): boolean => { return ( diff --git a/frontend/src/scenes/insights/utils/cleanFilters.test.ts b/frontend/src/scenes/insights/utils/cleanFilters.test.ts index ea0cb6156f..ceaf6c2673 100644 --- a/frontend/src/scenes/insights/utils/cleanFilters.test.ts +++ b/frontend/src/scenes/insights/utils/cleanFilters.test.ts @@ -3,9 +3,9 @@ import { NON_VALUES_ON_SERIES_DISPLAY_TYPES, ShownAsValue } from 'lib/constants' import { ChartDisplayType, FilterType, - FunnelsFilterType, FunnelStepReference, FunnelVizType, + FunnelsFilterType, InsightType, TrendsFilterType, } from '~/types' diff --git a/frontend/src/scenes/insights/utils/cleanFilters.ts b/frontend/src/scenes/insights/utils/cleanFilters.ts index 905727d3e0..c9e65e4989 100644 --- a/frontend/src/scenes/insights/utils/cleanFilters.ts +++ b/frontend/src/scenes/insights/utils/cleanFilters.ts @@ -30,13 +30,13 @@ import { EntityTypes, FilterType, FunnelExclusionLegacy, - FunnelsFilterType, FunnelVizType, + FunnelsFilterType, InsightType, IntervalType, LifecycleFilterType, - PathsFilterType, PathType, + PathsFilterType, RetentionFilterType, RetentionPeriod, StickinessFilterType, diff --git a/frontend/src/scenes/insights/views/BoldNumber/BoldNumber.tsx b/frontend/src/scenes/insights/views/BoldNumber/BoldNumber.tsx index 5185e06514..e0513e64fe 100644 --- a/frontend/src/scenes/insights/views/BoldNumber/BoldNumber.tsx +++ b/frontend/src/scenes/insights/views/BoldNumber/BoldNumber.tsx @@ -1,17 +1,19 @@ import './BoldNumber.scss' -import { IconTrending } from '@posthog/icons' -import { LemonRow, Link } from '@posthog/lemon-ui' import clsx from 'clsx' import { useValues } from 'kea' -import { IconFlare, IconTrendingDown, IconTrendingFlat } from 'lib/lemon-ui/icons' -import { percentage } from 'lib/utils' import { useLayoutEffect, useRef, useState } from 'react' import { useEffect } from 'react' import React from 'react' -import { formatAggregationAxisValue } from 'scenes/insights/aggregationAxisFormat' + +import { IconTrending } from '@posthog/icons' +import { LemonRow, Link } from '@posthog/lemon-ui' + +import { IconFlare, IconTrendingDown, IconTrendingFlat } from 'lib/lemon-ui/icons' +import { percentage } from 'lib/utils' import { InsightEmptyState } from 'scenes/insights/EmptyStates' import { InsightTooltip } from 'scenes/insights/InsightTooltip/InsightTooltip' +import { formatAggregationAxisValue } from 'scenes/insights/aggregationAxisFormat' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' import { openPersonsModal } from 'scenes/trends/persons-modal/PersonsModal' diff --git a/frontend/src/scenes/insights/views/Funnels/CorrelationActionsCell.tsx b/frontend/src/scenes/insights/views/Funnels/CorrelationActionsCell.tsx index 5f221e1f4e..52bd99572f 100644 --- a/frontend/src/scenes/insights/views/Funnels/CorrelationActionsCell.tsx +++ b/frontend/src/scenes/insights/views/Funnels/CorrelationActionsCell.tsx @@ -1,8 +1,10 @@ -import { IconEllipsis } from '@posthog/icons' import { useActions, useValues } from 'kea' +import { useState } from 'react' + +import { IconEllipsis } from '@posthog/icons' + import { LemonButton, LemonButtonProps } from 'lib/lemon-ui/LemonButton' import { Popover } from 'lib/lemon-ui/Popover/Popover' -import { useState } from 'react' import { funnelCorrelationDetailsLogic } from 'scenes/funnels/funnelCorrelationDetailsLogic' import { funnelCorrelationLogic } from 'scenes/funnels/funnelCorrelationLogic' import { funnelPropertyCorrelationLogic } from 'scenes/funnels/funnelPropertyCorrelationLogic' diff --git a/frontend/src/scenes/insights/views/Funnels/CorrelationMatrix.tsx b/frontend/src/scenes/insights/views/Funnels/CorrelationMatrix.tsx index 25c21b11ff..77844bbc0d 100644 --- a/frontend/src/scenes/insights/views/Funnels/CorrelationMatrix.tsx +++ b/frontend/src/scenes/insights/views/Funnels/CorrelationMatrix.tsx @@ -1,15 +1,17 @@ import './CorrelationMatrix.scss' +import clsx from 'clsx' +import { useActions, useValues } from 'kea' + import { IconCheckCircle } from '@posthog/icons' import { LemonButton, LemonModal } from '@posthog/lemon-ui' -import clsx from 'clsx' -import { useActions, useValues } from 'kea' + import { PropertyKeyInfo } from 'lib/components/PropertyKeyInfo' -import { IconCancel, IconErrorOutline, IconTrendingFlat, IconTrendingFlatDown } from 'lib/lemon-ui/icons' import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { Link } from 'lib/lemon-ui/Link' import { Spinner } from 'lib/lemon-ui/Spinner/Spinner' import { Tooltip } from 'lib/lemon-ui/Tooltip' +import { IconCancel, IconErrorOutline, IconTrendingFlat, IconTrendingFlatDown } from 'lib/lemon-ui/icons' import { capitalizeFirstLetter, percentage, pluralize } from 'lib/utils' import { funnelCorrelationDetailsLogic } from 'scenes/funnels/funnelCorrelationDetailsLogic' import { funnelCorrelationLogic } from 'scenes/funnels/funnelCorrelationLogic' diff --git a/frontend/src/scenes/insights/views/Funnels/FunnelBinsPicker.tsx b/frontend/src/scenes/insights/views/Funnels/FunnelBinsPicker.tsx index 28dc397258..5ee263045a 100644 --- a/frontend/src/scenes/insights/views/Funnels/FunnelBinsPicker.tsx +++ b/frontend/src/scenes/insights/views/Funnels/FunnelBinsPicker.tsx @@ -1,8 +1,10 @@ +import { useActions, useValues } from 'kea' +import { useState } from 'react' + import { IconGraph } from '@posthog/icons' import { LemonButton, LemonDropdown, LemonInput } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { BIN_COUNT_AUTO } from 'lib/constants' -import { useState } from 'react' import { funnelDataLogic } from 'scenes/funnels/funnelDataLogic' import { insightLogic } from 'scenes/insights/insightLogic' diff --git a/frontend/src/scenes/insights/views/Funnels/FunnelConversionWindowFilter.tsx b/frontend/src/scenes/insights/views/Funnels/FunnelConversionWindowFilter.tsx index 89d87a52ee..b413250e6d 100644 --- a/frontend/src/scenes/insights/views/Funnels/FunnelConversionWindowFilter.tsx +++ b/frontend/src/scenes/insights/views/Funnels/FunnelConversionWindowFilter.tsx @@ -1,11 +1,13 @@ +import { useActions, useValues } from 'kea' +import { useState } from 'react' +import { useDebouncedCallback } from 'use-debounce' + import { IconInfo } from '@posthog/icons' import { LemonInput, LemonSelect, LemonSelectOption } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { Tooltip } from 'lib/lemon-ui/Tooltip' import { capitalizeFirstLetter, pluralize } from 'lib/utils' -import { useState } from 'react' import { funnelDataLogic } from 'scenes/funnels/funnelDataLogic' -import { useDebouncedCallback } from 'use-debounce' import { FunnelsFilter } from '~/queries/schema/schema-general' import { EditorFilterProps, FunnelConversionWindow, FunnelConversionWindowTimeUnit } from '~/types' diff --git a/frontend/src/scenes/insights/views/Funnels/FunnelCorrelation.tsx b/frontend/src/scenes/insights/views/Funnels/FunnelCorrelation.tsx index 33821dd498..266559a48c 100644 --- a/frontend/src/scenes/insights/views/Funnels/FunnelCorrelation.tsx +++ b/frontend/src/scenes/insights/views/Funnels/FunnelCorrelation.tsx @@ -1,6 +1,7 @@ import './FunnelCorrelation.scss' import { useMountedLogic, useValues } from 'kea' + import { PayGateMini } from 'lib/components/PayGateMini/PayGateMini' import { funnelCorrelationUsageLogic } from 'scenes/funnels/funnelCorrelationUsageLogic' import { funnelDataLogic } from 'scenes/funnels/funnelDataLogic' diff --git a/frontend/src/scenes/insights/views/Funnels/FunnelCorrelationFeedbackForm.tsx b/frontend/src/scenes/insights/views/Funnels/FunnelCorrelationFeedbackForm.tsx index 37baa09e29..c22d17873a 100644 --- a/frontend/src/scenes/insights/views/Funnels/FunnelCorrelationFeedbackForm.tsx +++ b/frontend/src/scenes/insights/views/Funnels/FunnelCorrelationFeedbackForm.tsx @@ -1,8 +1,10 @@ +import { useActions, useValues } from 'kea' +import { useRef } from 'react' + import { IconX } from '@posthog/icons' import { LemonButton, LemonTextArea } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { IconComment } from 'lib/lemon-ui/icons' -import { useRef } from 'react' import { funnelCorrelationFeedbackLogic } from 'scenes/funnels/funnelCorrelationFeedbackLogic' import { insightLogic } from 'scenes/insights/insightLogic' diff --git a/frontend/src/scenes/insights/views/Funnels/FunnelCorrelationSkewWarning.tsx b/frontend/src/scenes/insights/views/Funnels/FunnelCorrelationSkewWarning.tsx index f53c1d6904..e53023d467 100644 --- a/frontend/src/scenes/insights/views/Funnels/FunnelCorrelationSkewWarning.tsx +++ b/frontend/src/scenes/insights/views/Funnels/FunnelCorrelationSkewWarning.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconX } from '@posthog/icons' import { LemonButton } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { IconFeedback } from 'lib/lemon-ui/icons' import { funnelDataLogic } from 'scenes/funnels/funnelDataLogic' import { insightLogic } from 'scenes/insights/insightLogic' diff --git a/frontend/src/scenes/insights/views/Funnels/FunnelCorrelationTable.stories.tsx b/frontend/src/scenes/insights/views/Funnels/FunnelCorrelationTable.stories.tsx index 9d81fdcffe..441d0023cf 100644 --- a/frontend/src/scenes/insights/views/Funnels/FunnelCorrelationTable.stories.tsx +++ b/frontend/src/scenes/insights/views/Funnels/FunnelCorrelationTable.stories.tsx @@ -1,11 +1,12 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' import { BindLogic } from 'kea' import { useState } from 'react' + import { insightLogic } from 'scenes/insights/insightLogic' import { mswDecorator } from '~/mocks/browser' import funnelCorrelation from '~/mocks/fixtures/api/projects/team_id/insights/funnelCorrelation.json' -import { dataNodeLogic, DataNodeLogicProps } from '~/queries/nodes/DataNode/dataNodeLogic' +import { DataNodeLogicProps, dataNodeLogic } from '~/queries/nodes/DataNode/dataNodeLogic' import { insightVizDataNodeKey } from '~/queries/nodes/InsightViz/InsightViz' import { getCachedResults } from '~/queries/nodes/InsightViz/utils' import { InsightLogicProps } from '~/types' diff --git a/frontend/src/scenes/insights/views/Funnels/FunnelCorrelationTable.tsx b/frontend/src/scenes/insights/views/Funnels/FunnelCorrelationTable.tsx index e1160ff702..22236561e0 100644 --- a/frontend/src/scenes/insights/views/Funnels/FunnelCorrelationTable.tsx +++ b/frontend/src/scenes/insights/views/Funnels/FunnelCorrelationTable.tsx @@ -1,22 +1,24 @@ import './FunnelCorrelationTable.scss' +import { useActions, useValues } from 'kea' +import { useEffect } from 'react' + import { IconArchive, IconTrending } from '@posthog/icons' import { LemonCheckbox, LemonTable } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { PropertyKeyInfo } from 'lib/components/PropertyKeyInfo' import { VisibilitySensor } from 'lib/components/VisibilitySensor/VisibilitySensor' -import { IconSelectEvents, IconTrendingDown } from 'lib/lemon-ui/icons' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { Link } from 'lib/lemon-ui/Link' import { Spinner } from 'lib/lemon-ui/Spinner/Spinner' +import { IconSelectEvents, IconTrendingDown } from 'lib/lemon-ui/icons' import { capitalizeFirstLetter } from 'lib/utils' -import { useEffect } from 'react' +import { ValueInspectorButton } from 'scenes/funnels/ValueInspectorButton' import { funnelCorrelationLogic } from 'scenes/funnels/funnelCorrelationLogic' import { funnelCorrelationUsageLogic } from 'scenes/funnels/funnelCorrelationUsageLogic' import { funnelDataLogic } from 'scenes/funnels/funnelDataLogic' import { funnelPersonsModalLogic } from 'scenes/funnels/funnelPersonsModalLogic' import { parseDisplayNameForCorrelation } from 'scenes/funnels/funnelUtils' -import { ValueInspectorButton } from 'scenes/funnels/ValueInspectorButton' import { insightLogic } from 'scenes/insights/insightLogic' import { FunnelCorrelation, FunnelCorrelationResultsType, FunnelCorrelationType } from '~/types' diff --git a/frontend/src/scenes/insights/views/Funnels/FunnelDisplayLayoutPicker.tsx b/frontend/src/scenes/insights/views/Funnels/FunnelDisplayLayoutPicker.tsx index 1a21527301..6888938d47 100644 --- a/frontend/src/scenes/insights/views/Funnels/FunnelDisplayLayoutPicker.tsx +++ b/frontend/src/scenes/insights/views/Funnels/FunnelDisplayLayoutPicker.tsx @@ -1,5 +1,7 @@ -import { LemonSelect } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonSelect } from '@posthog/lemon-ui' + import { FunnelLayout } from 'lib/constants' import { IconFunnelHorizontal, IconFunnelVertical } from 'lib/lemon-ui/icons' import { funnelDataLogic } from 'scenes/funnels/funnelDataLogic' diff --git a/frontend/src/scenes/insights/views/Funnels/FunnelPropertyCorrelationTable.stories.tsx b/frontend/src/scenes/insights/views/Funnels/FunnelPropertyCorrelationTable.stories.tsx index 3aa58223bd..794110e95b 100644 --- a/frontend/src/scenes/insights/views/Funnels/FunnelPropertyCorrelationTable.stories.tsx +++ b/frontend/src/scenes/insights/views/Funnels/FunnelPropertyCorrelationTable.stories.tsx @@ -1,12 +1,13 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' import { BindLogic } from 'kea' -import { taxonomicFilterMocksDecorator } from 'lib/components/TaxonomicFilter/__mocks__/taxonomicFilterMocksDecorator' import { useState } from 'react' + +import { taxonomicFilterMocksDecorator } from 'lib/components/TaxonomicFilter/__mocks__/taxonomicFilterMocksDecorator' import { insightLogic } from 'scenes/insights/insightLogic' import { mswDecorator } from '~/mocks/browser' import funnelCorrelation from '~/mocks/fixtures/api/projects/team_id/insights/funnelCorrelation.json' -import { dataNodeLogic, DataNodeLogicProps } from '~/queries/nodes/DataNode/dataNodeLogic' +import { DataNodeLogicProps, dataNodeLogic } from '~/queries/nodes/DataNode/dataNodeLogic' import { insightVizDataNodeKey } from '~/queries/nodes/InsightViz/InsightViz' import { getCachedResults } from '~/queries/nodes/InsightViz/utils' import { InsightLogicProps } from '~/types' diff --git a/frontend/src/scenes/insights/views/Funnels/FunnelPropertyCorrelationTable.tsx b/frontend/src/scenes/insights/views/Funnels/FunnelPropertyCorrelationTable.tsx index dc35ca4d72..4515874ed6 100644 --- a/frontend/src/scenes/insights/views/Funnels/FunnelPropertyCorrelationTable.tsx +++ b/frontend/src/scenes/insights/views/Funnels/FunnelPropertyCorrelationTable.tsx @@ -1,24 +1,26 @@ import './FunnelCorrelationTable.scss' +import { useActions, useValues } from 'kea' +import { useEffect } from 'react' +import { useState } from 'react' + import { IconArchive, IconTrending } from '@posthog/icons' import { LemonButton, LemonCheckbox, LemonTable } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { PropertyKeyInfo } from 'lib/components/PropertyKeyInfo' import { PropertySelect } from 'lib/components/PropertySelect/PropertySelect' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { VisibilitySensor } from 'lib/components/VisibilitySensor/VisibilitySensor' -import { IconSelectProperties, IconTrendingDown } from 'lib/lemon-ui/icons' import { Link } from 'lib/lemon-ui/Link' import { Popover } from 'lib/lemon-ui/Popover' +import { IconSelectProperties, IconTrendingDown } from 'lib/lemon-ui/icons' import { capitalizeFirstLetter } from 'lib/utils' -import { useEffect } from 'react' -import { useState } from 'react' +import { ValueInspectorButton } from 'scenes/funnels/ValueInspectorButton' import { funnelCorrelationUsageLogic } from 'scenes/funnels/funnelCorrelationUsageLogic' import { funnelDataLogic } from 'scenes/funnels/funnelDataLogic' import { funnelPersonsModalLogic } from 'scenes/funnels/funnelPersonsModalLogic' import { funnelPropertyCorrelationLogic } from 'scenes/funnels/funnelPropertyCorrelationLogic' import { parseDisplayNameForCorrelation } from 'scenes/funnels/funnelUtils' -import { ValueInspectorButton } from 'scenes/funnels/ValueInspectorButton' import { insightLogic } from 'scenes/insights/insightLogic' import { FunnelCorrelation, FunnelCorrelationResultsType, FunnelCorrelationType } from '~/types' diff --git a/frontend/src/scenes/insights/views/Funnels/FunnelStepOrderPicker.tsx b/frontend/src/scenes/insights/views/Funnels/FunnelStepOrderPicker.tsx index b8bf34d1ae..90fefd082b 100644 --- a/frontend/src/scenes/insights/views/Funnels/FunnelStepOrderPicker.tsx +++ b/frontend/src/scenes/insights/views/Funnels/FunnelStepOrderPicker.tsx @@ -1,5 +1,7 @@ -import { LemonSelect } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonSelect } from '@posthog/lemon-ui' + import { funnelDataLogic } from 'scenes/funnels/funnelDataLogic' import { insightLogic } from 'scenes/insights/insightLogic' diff --git a/frontend/src/scenes/insights/views/Funnels/FunnelStepsPicker.tsx b/frontend/src/scenes/insights/views/Funnels/FunnelStepsPicker.tsx index a34ee65d16..312d2e5213 100644 --- a/frontend/src/scenes/insights/views/Funnels/FunnelStepsPicker.tsx +++ b/frontend/src/scenes/insights/views/Funnels/FunnelStepsPicker.tsx @@ -1,5 +1,7 @@ -import { LemonSelect, LemonSelectOption, LemonSelectOptions } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonSelect, LemonSelectOption, LemonSelectOptions } from '@posthog/lemon-ui' + import { EntityFilterInfo } from 'lib/components/EntityFilterInfo' import { insightLogic } from 'scenes/insights/insightLogic' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' diff --git a/frontend/src/scenes/insights/views/Funnels/FunnelStepsTable.tsx b/frontend/src/scenes/insights/views/Funnels/FunnelStepsTable.tsx index 25e9227841..540481e8e8 100644 --- a/frontend/src/scenes/insights/views/Funnels/FunnelStepsTable.tsx +++ b/frontend/src/scenes/insights/views/Funnels/FunnelStepsTable.tsx @@ -1,17 +1,19 @@ +import { useActions, useValues } from 'kea' +import { compare as compareFn } from 'natural-orderby' + import { IconFlag } from '@posthog/icons' import { LemonColorButton } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { EntityFilterInfo } from 'lib/components/EntityFilterInfo' import { LemonCheckbox } from 'lib/lemon-ui/LemonCheckbox' import { LemonRow } from 'lib/lemon-ui/LemonRow' import { LemonTable, LemonTableColumn, LemonTableColumnGroup } from 'lib/lemon-ui/LemonTable' import { Lettermark, LettermarkColor } from 'lib/lemon-ui/Lettermark' import { humanFriendlyDuration, humanFriendlyNumber, percentage } from 'lib/utils' -import { compare as compareFn } from 'natural-orderby' +import { ValueInspectorButton } from 'scenes/funnels/ValueInspectorButton' import { funnelDataLogic } from 'scenes/funnels/funnelDataLogic' import { funnelPersonsModalLogic } from 'scenes/funnels/funnelPersonsModalLogic' import { getVisibilityKey } from 'scenes/funnels/funnelUtils' -import { ValueInspectorButton } from 'scenes/funnels/ValueInspectorButton' import { insightLogic } from 'scenes/insights/insightLogic' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' import { formatBreakdownLabel } from 'scenes/insights/utils' diff --git a/frontend/src/scenes/insights/views/Funnels/FunnelVizType.tsx b/frontend/src/scenes/insights/views/Funnels/FunnelVizType.tsx index 714dc6752d..42fedfbc77 100644 --- a/frontend/src/scenes/insights/views/Funnels/FunnelVizType.tsx +++ b/frontend/src/scenes/insights/views/Funnels/FunnelVizType.tsx @@ -1,5 +1,7 @@ -import { IconClock, IconFilter, IconTrending } from '@posthog/icons' import { useActions, useValues } from 'kea' + +import { IconClock, IconFilter, IconTrending } from '@posthog/icons' + import { LemonSelect } from 'lib/lemon-ui/LemonSelect' import { funnelDataLogic } from 'scenes/funnels/funnelDataLogic' diff --git a/frontend/src/scenes/insights/views/Histogram/Histogram.tsx b/frontend/src/scenes/insights/views/Histogram/Histogram.tsx index d4802783e6..bd0bc8c0eb 100644 --- a/frontend/src/scenes/insights/views/Histogram/Histogram.tsx +++ b/frontend/src/scenes/insights/views/Histogram/Histogram.tsx @@ -2,15 +2,16 @@ import './Histogram.scss' import * as d3 from 'd3' import { useActions, useValues } from 'kea' +import { useEffect } from 'react' + import { FunnelLayout } from 'lib/constants' import { D3Selector, D3Transition, useD3 } from 'lib/hooks/useD3' import { animate, getOrCreateEl, wrap } from 'lib/utils/d3Utils' -import { useEffect } from 'react' import { insightLogic } from 'scenes/insights/insightLogic' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' import { histogramLogic } from 'scenes/insights/views/Histogram/histogramLogic' -import { createRoundedRectPath, D3HistogramDatum, getConfig, INITIAL_CONFIG } from './histogramUtils' +import { D3HistogramDatum, INITIAL_CONFIG, createRoundedRectPath, getConfig } from './histogramUtils' export interface HistogramDatum { id: string | number diff --git a/frontend/src/scenes/insights/views/Histogram/histogramLogic.ts b/frontend/src/scenes/insights/views/Histogram/histogramLogic.ts index 2993434027..22380f0f38 100644 --- a/frontend/src/scenes/insights/views/Histogram/histogramLogic.ts +++ b/frontend/src/scenes/insights/views/Histogram/histogramLogic.ts @@ -1,6 +1,7 @@ import { actions, kea, path, reducers } from 'kea' + import { FunnelLayout } from 'lib/constants' -import { getConfig, HistogramConfig } from 'scenes/insights/views/Histogram/histogramUtils' +import { HistogramConfig, getConfig } from 'scenes/insights/views/Histogram/histogramUtils' import type { histogramLogicType } from './histogramLogicType' diff --git a/frontend/src/scenes/insights/views/Histogram/histogramUtils.ts b/frontend/src/scenes/insights/views/Histogram/histogramUtils.ts index a6ddbb3b21..a186fb2729 100644 --- a/frontend/src/scenes/insights/views/Histogram/histogramUtils.ts +++ b/frontend/src/scenes/insights/views/Histogram/histogramUtils.ts @@ -1,4 +1,5 @@ import * as d3 from 'd3' + import { FunnelLayout } from 'lib/constants' import { HistogramDatum } from 'scenes/insights/views/Histogram/Histogram' diff --git a/frontend/src/scenes/insights/views/InsightsTable/DashboardInsightsTable.tsx b/frontend/src/scenes/insights/views/InsightsTable/DashboardInsightsTable.tsx index f01085a698..6ed7c8f0c9 100644 --- a/frontend/src/scenes/insights/views/InsightsTable/DashboardInsightsTable.tsx +++ b/frontend/src/scenes/insights/views/InsightsTable/DashboardInsightsTable.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { insightLogic } from 'scenes/insights/insightLogic' import { InsightsTable } from './InsightsTable' diff --git a/frontend/src/scenes/insights/views/InsightsTable/InsightsTable.stories.tsx b/frontend/src/scenes/insights/views/InsightsTable/InsightsTable.stories.tsx index 05b3a134ce..2853a05c31 100644 --- a/frontend/src/scenes/insights/views/InsightsTable/InsightsTable.stories.tsx +++ b/frontend/src/scenes/insights/views/InsightsTable/InsightsTable.stories.tsx @@ -1,9 +1,10 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' import { BindLogic } from 'kea' import { useState } from 'react' + import { insightLogic } from 'scenes/insights/insightLogic' -import { dataNodeLogic, DataNodeLogicProps } from '~/queries/nodes/DataNode/dataNodeLogic' +import { DataNodeLogicProps, dataNodeLogic } from '~/queries/nodes/DataNode/dataNodeLogic' import { insightVizDataNodeKey } from '~/queries/nodes/InsightViz/InsightViz' import { getCachedResults } from '~/queries/nodes/InsightViz/utils' import { BaseMathType, InsightLogicProps } from '~/types' diff --git a/frontend/src/scenes/insights/views/InsightsTable/InsightsTable.tsx b/frontend/src/scenes/insights/views/InsightsTable/InsightsTable.tsx index 1259107e57..d319cf6bcf 100644 --- a/frontend/src/scenes/insights/views/InsightsTable/InsightsTable.tsx +++ b/frontend/src/scenes/insights/views/InsightsTable/InsightsTable.tsx @@ -1,21 +1,23 @@ import './InsightsTable.scss' import { useActions, useValues } from 'kea' -import { LemonTable, LemonTableColumn } from 'lib/lemon-ui/LemonTable' -import { COUNTRY_CODE_TO_LONG_NAME } from 'lib/utils/geography/country' import { compare as compareFn } from 'natural-orderby' import { useMemo } from 'react' + +import { LemonTable, LemonTableColumn } from 'lib/lemon-ui/LemonTable' +import { COUNTRY_CODE_TO_LONG_NAME } from 'lib/utils/geography/country' import { insightLogic } from 'scenes/insights/insightLogic' import { insightSceneLogic } from 'scenes/insights/insightSceneLogic' import { formatBreakdownLabel } from 'scenes/insights/utils' +import { teamLogic } from 'scenes/teamLogic' import { trendsDataLogic } from 'scenes/trends/trendsDataLogic' import { IndexedTrendResult } from 'scenes/trends/types' import { cohortsModel } from '~/models/cohortsModel' import { propertyDefinitionsModel } from '~/models/propertyDefinitionsModel' +import { extractExpressionComment } from '~/queries/nodes/DataTable/utils' import { resultCustomizationsModalLogic } from '~/queries/nodes/InsightViz/resultCustomizationsModalLogic' import { isValidBreakdown } from '~/queries/utils' -import { extractExpressionComment } from '~/queries/nodes/DataTable/utils' import { ChartDisplayType, ItemMode } from '~/types' import { entityFilterLogic } from '../../filters/ActionFilter/entityFilterLogic' @@ -27,7 +29,6 @@ import { SeriesColumnItem } from './columns/SeriesColumn' import { ValueColumnItem, ValueColumnTitle } from './columns/ValueColumn' import { WorldMapColumnItem, WorldMapColumnTitle } from './columns/WorldMapColumn' import { AggregationType, insightsTableDataLogic } from './insightsTableDataLogic' -import { teamLogic } from 'scenes/teamLogic' export type CalcColumnState = 'total' | 'average' | 'median' diff --git a/frontend/src/scenes/insights/views/InsightsTable/columns/AggregationColumn.tsx b/frontend/src/scenes/insights/views/InsightsTable/columns/AggregationColumn.tsx index ce2debf639..7d8f38b771 100644 --- a/frontend/src/scenes/insights/views/InsightsTable/columns/AggregationColumn.tsx +++ b/frontend/src/scenes/insights/views/InsightsTable/columns/AggregationColumn.tsx @@ -1,8 +1,10 @@ import './AggregationColumn.scss' +import { useActions, useValues } from 'kea' + import { IconChevronDown } from '@posthog/icons' import { LemonMenu, LemonMenuItem } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { average, median } from 'lib/utils' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' import { formatAggregationAxisValue } from 'scenes/insights/aggregationAxisFormat' diff --git a/frontend/src/scenes/insights/views/InsightsTable/columns/BreakdownColumn.tsx b/frontend/src/scenes/insights/views/InsightsTable/columns/BreakdownColumn.tsx index 8b944e0611..0a8481f2b6 100644 --- a/frontend/src/scenes/insights/views/InsightsTable/columns/BreakdownColumn.tsx +++ b/frontend/src/scenes/insights/views/InsightsTable/columns/BreakdownColumn.tsx @@ -1,4 +1,5 @@ import { Link } from '@posthog/lemon-ui' + import { PropertyKeyInfo } from 'lib/components/PropertyKeyInfo' import { isURL } from 'lib/utils' import stringWithWBR from 'lib/utils/stringWithWBR' diff --git a/frontend/src/scenes/insights/views/InsightsTable/columns/ColorCustomizationColumn.tsx b/frontend/src/scenes/insights/views/InsightsTable/columns/ColorCustomizationColumn.tsx index 8b501984c8..03263c6256 100644 --- a/frontend/src/scenes/insights/views/InsightsTable/columns/ColorCustomizationColumn.tsx +++ b/frontend/src/scenes/insights/views/InsightsTable/columns/ColorCustomizationColumn.tsx @@ -1,5 +1,7 @@ -import { LemonColorButton } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonColorButton } from '@posthog/lemon-ui' + import { insightLogic } from 'scenes/insights/insightLogic' import { trendsDataLogic } from 'scenes/trends/trendsDataLogic' import { IndexedTrendResult } from 'scenes/trends/types' diff --git a/frontend/src/scenes/insights/views/InsightsTable/columns/SeriesColumn.tsx b/frontend/src/scenes/insights/views/InsightsTable/columns/SeriesColumn.tsx index caaf58133c..383d545241 100644 --- a/frontend/src/scenes/insights/views/InsightsTable/columns/SeriesColumn.tsx +++ b/frontend/src/scenes/insights/views/InsightsTable/columns/SeriesColumn.tsx @@ -1,5 +1,7 @@ -import { Tooltip } from '@posthog/lemon-ui' import clsx from 'clsx' + +import { Tooltip } from '@posthog/lemon-ui' + import { InsightLabel } from 'lib/components/InsightLabel' import { capitalizeFirstLetter } from 'lib/utils' import { IndexedTrendResult } from 'scenes/trends/types' diff --git a/frontend/src/scenes/insights/views/InsightsTable/columns/ValueColumn.tsx b/frontend/src/scenes/insights/views/InsightsTable/columns/ValueColumn.tsx index c9b2f95dca..efe490fd2a 100644 --- a/frontend/src/scenes/insights/views/InsightsTable/columns/ValueColumn.tsx +++ b/frontend/src/scenes/insights/views/InsightsTable/columns/ValueColumn.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { DateDisplay } from 'lib/components/DateDisplay' import { formatAggregationAxisValue } from 'scenes/insights/aggregationAxisFormat' import { insightLogic } from 'scenes/insights/insightLogic' diff --git a/frontend/src/scenes/insights/views/InsightsTable/insightsTableDataLogic.test.ts b/frontend/src/scenes/insights/views/InsightsTable/insightsTableDataLogic.test.ts index efe218f543..8dd3c99624 100644 --- a/frontend/src/scenes/insights/views/InsightsTable/insightsTableDataLogic.test.ts +++ b/frontend/src/scenes/insights/views/InsightsTable/insightsTableDataLogic.test.ts @@ -1,4 +1,5 @@ import { expectLogic } from 'kea-test-utils' + import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' import { NodeKind, TrendsQuery } from '~/queries/schema/schema-general' diff --git a/frontend/src/scenes/insights/views/InsightsTable/insightsTableDataLogic.ts b/frontend/src/scenes/insights/views/InsightsTable/insightsTableDataLogic.ts index 1d9a280644..9cbcdf8695 100644 --- a/frontend/src/scenes/insights/views/InsightsTable/insightsTableDataLogic.ts +++ b/frontend/src/scenes/insights/views/InsightsTable/insightsTableDataLogic.ts @@ -1,4 +1,5 @@ import { actions, connect, kea, key, path, props, reducers, selectors } from 'kea' + import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' import { keyForInsightLogicProps } from 'scenes/insights/sharedUtils' diff --git a/frontend/src/scenes/insights/views/LineGraph/ConfidenceLevelInput.tsx b/frontend/src/scenes/insights/views/LineGraph/ConfidenceLevelInput.tsx index 51392237da..0d47d1e5d7 100644 --- a/frontend/src/scenes/insights/views/LineGraph/ConfidenceLevelInput.tsx +++ b/frontend/src/scenes/insights/views/LineGraph/ConfidenceLevelInput.tsx @@ -1,11 +1,14 @@ -import { LemonInput, Tooltip } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' -import { trendsDataLogic } from 'scenes/trends/trendsDataLogic' +import { useEffect, useState } from 'react' +import { useDebouncedCallback } from 'use-debounce' + +import { LemonInput, Tooltip } from '@posthog/lemon-ui' + import { insightLogic } from 'scenes/insights/insightLogic' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' +import { trendsDataLogic } from 'scenes/trends/trendsDataLogic' + import { isTrendsQuery } from '~/queries/utils' -import { useDebouncedCallback } from 'use-debounce' -import { useState, useEffect } from 'react' export function ConfidenceLevelInput(): JSX.Element { const { insightProps } = useValues(insightLogic) diff --git a/frontend/src/scenes/insights/views/LineGraph/LineGraph.tsx b/frontend/src/scenes/insights/views/LineGraph/LineGraph.tsx index 06eb1a7c94..6a912e478b 100644 --- a/frontend/src/scenes/insights/views/LineGraph/LineGraph.tsx +++ b/frontend/src/scenes/insights/views/LineGraph/LineGraph.tsx @@ -1,12 +1,15 @@ -import 'chartjs-adapter-dayjs-3' - import { DeepPartial } from 'chart.js/dist/types/utils' +import 'chartjs-adapter-dayjs-3' import annotationPlugin from 'chartjs-plugin-annotation' import ChartDataLabels from 'chartjs-plugin-datalabels' import ChartjsPluginStacked100, { ExtendedChartData } from 'chartjs-plugin-stacked100' import chartTrendline from 'chartjs-plugin-trendline' import clsx from 'clsx' import { useValues } from 'kea' +import posthog from 'posthog-js' +import { useEffect, useRef, useState } from 'react' +import { Root, createRoot } from 'react-dom/client' + import { ActiveElement, Chart, @@ -28,20 +31,17 @@ import { import { getBarColorFromStatus, getGraphColors } from 'lib/colors' import { AnnotationsOverlay } from 'lib/components/AnnotationsOverlay' import { SeriesLetter } from 'lib/components/SeriesGlyph' +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { useResizeObserver } from 'lib/hooks/useResizeObserver' -import posthog from 'posthog-js' -import { useEffect, useRef, useState } from 'react' -import { createRoot, Root } from 'react-dom/client' -import { formatAggregationAxisValue, formatPercentStackAxisValue } from 'scenes/insights/aggregationAxisFormat' -import { insightLogic } from 'scenes/insights/insightLogic' import { InsightTooltip } from 'scenes/insights/InsightTooltip/InsightTooltip' import { TooltipConfig } from 'scenes/insights/InsightTooltip/insightTooltipUtils' +import { formatAggregationAxisValue, formatPercentStackAxisValue } from 'scenes/insights/aggregationAxisFormat' +import { insightLogic } from 'scenes/insights/insightLogic' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' import { PieChart } from 'scenes/insights/views/LineGraph/PieChart' import { createTooltipData } from 'scenes/insights/views/LineGraph/tooltip-data' import { trendsDataLogic } from 'scenes/trends/trendsDataLogic' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { ErrorBoundary } from '~/layout/ErrorBoundary' import { themeLogic } from '~/layout/navigation-3000/themeLogic' import { hexToRGBA, lightenDarkenColor } from '~/lib/utils' diff --git a/frontend/src/scenes/insights/views/LineGraph/MovingAverageIntervalsInput.tsx b/frontend/src/scenes/insights/views/LineGraph/MovingAverageIntervalsInput.tsx index 3c58469b0e..e2c53c53b2 100644 --- a/frontend/src/scenes/insights/views/LineGraph/MovingAverageIntervalsInput.tsx +++ b/frontend/src/scenes/insights/views/LineGraph/MovingAverageIntervalsInput.tsx @@ -1,11 +1,14 @@ -import { LemonInput, Tooltip } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' -import { INTERVAL_TO_DEFAULT_MOVING_AVERAGE_PERIOD, trendsDataLogic } from 'scenes/trends/trendsDataLogic' +import { useEffect, useState } from 'react' +import { useDebouncedCallback } from 'use-debounce' + +import { LemonInput, Tooltip } from '@posthog/lemon-ui' + import { insightLogic } from 'scenes/insights/insightLogic' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' +import { INTERVAL_TO_DEFAULT_MOVING_AVERAGE_PERIOD, trendsDataLogic } from 'scenes/trends/trendsDataLogic' + import { isTrendsQuery } from '~/queries/utils' -import { useDebouncedCallback } from 'use-debounce' -import { useState, useEffect } from 'react' export function MovingAverageIntervalsInput(): JSX.Element { const { insightProps } = useValues(insightLogic) diff --git a/frontend/src/scenes/insights/views/LineGraph/PieChart.tsx b/frontend/src/scenes/insights/views/LineGraph/PieChart.tsx index f99ee9270d..0f18ef3927 100644 --- a/frontend/src/scenes/insights/views/LineGraph/PieChart.tsx +++ b/frontend/src/scenes/insights/views/LineGraph/PieChart.tsx @@ -1,7 +1,8 @@ import 'chartjs-adapter-dayjs-3' - import ChartDataLabels, { Context } from 'chartjs-plugin-datalabels' import { useActions, useValues } from 'kea' +import { useEffect, useRef } from 'react' + import { ActiveElement, Chart, @@ -14,15 +15,15 @@ import { TooltipModel, } from 'lib/Chart' import { SeriesLetter } from 'lib/components/SeriesGlyph' -import { useEffect, useRef } from 'react' -import { formatAggregationAxisValue } from 'scenes/insights/aggregationAxisFormat' -import { insightLogic } from 'scenes/insights/insightLogic' +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { InsightTooltip } from 'scenes/insights/InsightTooltip/InsightTooltip' import { SeriesDatum } from 'scenes/insights/InsightTooltip/insightTooltipUtils' +import { formatAggregationAxisValue } from 'scenes/insights/aggregationAxisFormat' +import { insightLogic } from 'scenes/insights/insightLogic' import { + LineGraphProps, ensureTooltip, filterNestedDataset, - LineGraphProps, onChartClick, onChartHover, } from 'scenes/insights/views/LineGraph/LineGraph' @@ -31,7 +32,6 @@ import { createTooltipData } from 'scenes/insights/views/LineGraph/tooltip-data' import { groupsModel } from '~/models/groupsModel' import { BreakdownFilter } from '~/queries/schema/schema-general' import { GraphType } from '~/types' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' let timer: NodeJS.Timeout | null = null diff --git a/frontend/src/scenes/insights/views/Paths/PathStepPicker.tsx b/frontend/src/scenes/insights/views/Paths/PathStepPicker.tsx index aa43412468..945c3b9c7f 100644 --- a/frontend/src/scenes/insights/views/Paths/PathStepPicker.tsx +++ b/frontend/src/scenes/insights/views/Paths/PathStepPicker.tsx @@ -1,5 +1,7 @@ -import { LemonSelect } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonSelect } from '@posthog/lemon-ui' + import { insightLogic } from 'scenes/insights/insightLogic' import { DEFAULT_STEP_LIMIT } from 'scenes/paths/pathsDataLogic' import { pathsDataLogic } from 'scenes/paths/pathsDataLogic' diff --git a/frontend/src/scenes/insights/views/Trends/FunnelsCue.tsx b/frontend/src/scenes/insights/views/Trends/FunnelsCue.tsx index 8393142088..df921bcbf3 100644 --- a/frontend/src/scenes/insights/views/Trends/FunnelsCue.tsx +++ b/frontend/src/scenes/insights/views/Trends/FunnelsCue.tsx @@ -1,4 +1,5 @@ import { useActions, useValues } from 'kea' + import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { insightLogic } from 'scenes/insights/insightLogic' import { funnelsCueLogic } from 'scenes/insights/views/Trends/funnelsCueLogic' diff --git a/frontend/src/scenes/insights/views/Trends/funnelsCueLogic.tsx b/frontend/src/scenes/insights/views/Trends/funnelsCueLogic.tsx index 63d3b81691..4bb89ad490 100644 --- a/frontend/src/scenes/insights/views/Trends/funnelsCueLogic.tsx +++ b/frontend/src/scenes/insights/views/Trends/funnelsCueLogic.tsx @@ -1,7 +1,8 @@ import { actions, connect, events, kea, key, listeners, path, props, reducers, selectors } from 'kea' +import posthog from 'posthog-js' + import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import posthog from 'posthog-js' import { insightUsageLogic } from 'scenes/insights/insightUsageLogic' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' import { keyForInsightLogicProps } from 'scenes/insights/sharedUtils' diff --git a/frontend/src/scenes/insights/views/WorldMap/WorldMap.tsx b/frontend/src/scenes/insights/views/WorldMap/WorldMap.tsx index 82db9c484d..ea034aa75f 100644 --- a/frontend/src/scenes/insights/views/WorldMap/WorldMap.tsx +++ b/frontend/src/scenes/insights/views/WorldMap/WorldMap.tsx @@ -2,12 +2,13 @@ import './WorldMap.scss' import { style } from 'd3' import { props, useActions, useValues } from 'kea' +import React, { useEffect, useRef } from 'react' + import { gradateColor } from 'lib/utils' import { COUNTRY_CODE_TO_LONG_NAME, countryCodeToFlag } from 'lib/utils/geography/country' -import React, { useEffect, useRef } from 'react' +import { InsightTooltip } from 'scenes/insights/InsightTooltip/InsightTooltip' import { formatAggregationAxisValue } from 'scenes/insights/aggregationAxisFormat' import { insightLogic } from 'scenes/insights/insightLogic' -import { InsightTooltip } from 'scenes/insights/InsightTooltip/InsightTooltip' import { openPersonsModal } from 'scenes/trends/persons-modal/PersonsModal' import { groupsModel } from '~/models/groupsModel' diff --git a/frontend/src/scenes/insights/views/WorldMap/worldMapLogic.tsx b/frontend/src/scenes/insights/views/WorldMap/worldMapLogic.tsx index 29cfb84947..beb4a7471c 100644 --- a/frontend/src/scenes/insights/views/WorldMap/worldMapLogic.tsx +++ b/frontend/src/scenes/insights/views/WorldMap/worldMapLogic.tsx @@ -1,4 +1,5 @@ import { actions, connect, kea, key, path, props, reducers, selectors } from 'kea' + import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' import { InsightLogicProps, TrendResult } from '~/types' diff --git a/frontend/src/scenes/instance/AsyncMigrations/AsyncMigrationDetails.tsx b/frontend/src/scenes/instance/AsyncMigrations/AsyncMigrationDetails.tsx index b0e523bef5..3488fe3335 100644 --- a/frontend/src/scenes/instance/AsyncMigrations/AsyncMigrationDetails.tsx +++ b/frontend/src/scenes/instance/AsyncMigrations/AsyncMigrationDetails.tsx @@ -1,8 +1,9 @@ import { useActions, useValues } from 'kea' -import { IconRefresh } from 'lib/lemon-ui/icons' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonTable, LemonTableColumns } from 'lib/lemon-ui/LemonTable' import { Spinner } from 'lib/lemon-ui/Spinner/Spinner' +import { IconRefresh } from 'lib/lemon-ui/icons' import { humanFriendlyDetailedTime } from 'lib/utils' import { AsyncMigration, AsyncMigrationError, asyncMigrationsLogic } from './asyncMigrationsLogic' diff --git a/frontend/src/scenes/instance/AsyncMigrations/AsyncMigrationParametersModal.tsx b/frontend/src/scenes/instance/AsyncMigrations/AsyncMigrationParametersModal.tsx index dab9a7629c..9ced6ff621 100644 --- a/frontend/src/scenes/instance/AsyncMigrations/AsyncMigrationParametersModal.tsx +++ b/frontend/src/scenes/instance/AsyncMigrations/AsyncMigrationParametersModal.tsx @@ -1,11 +1,13 @@ -import { Link } from '@posthog/lemon-ui' import { useActions } from 'kea' import { Field, Form } from 'kea-forms' +import { useState } from 'react' + +import { Link } from '@posthog/lemon-ui' + import { AnimatedCollapsible } from 'lib/components/AnimatedCollapsible' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonInput } from 'lib/lemon-ui/LemonInput/LemonInput' import { LemonModal } from 'lib/lemon-ui/LemonModal' -import { useState } from 'react' import { asyncMigrationParameterFormLogic } from 'scenes/instance/AsyncMigrations/asyncMigrationParameterFormLogic' import { AsyncMigrationModalProps, asyncMigrationsLogic } from 'scenes/instance/AsyncMigrations/asyncMigrationsLogic' diff --git a/frontend/src/scenes/instance/AsyncMigrations/AsyncMigrations.tsx b/frontend/src/scenes/instance/AsyncMigrations/AsyncMigrations.tsx index ce454b9ba4..ac5c928f93 100644 --- a/frontend/src/scenes/instance/AsyncMigrations/AsyncMigrations.tsx +++ b/frontend/src/scenes/instance/AsyncMigrations/AsyncMigrations.tsx @@ -1,7 +1,9 @@ -import { Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' +import { useEffect } from 'react' + +import { Link } from '@posthog/lemon-ui' + import { PageHeader } from 'lib/components/PageHeader' -import { IconPlayCircle, IconRefresh, IconReplay } from 'lib/lemon-ui/icons' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { More } from 'lib/lemon-ui/LemonButton/More' import { LemonProgress } from 'lib/lemon-ui/LemonProgress' @@ -11,21 +13,21 @@ import { LemonTabs } from 'lib/lemon-ui/LemonTabs' import { LemonTag, LemonTagType } from 'lib/lemon-ui/LemonTag/LemonTag' import { Spinner } from 'lib/lemon-ui/Spinner/Spinner' import { Tooltip } from 'lib/lemon-ui/Tooltip' +import { IconPlayCircle, IconRefresh, IconReplay } from 'lib/lemon-ui/icons' import { humanFriendlyDetailedTime } from 'lib/utils' -import { useEffect } from 'react' import { AsyncMigrationParametersModal } from 'scenes/instance/AsyncMigrations/AsyncMigrationParametersModal' import { SceneExport } from 'scenes/sceneTypes' import { userLogic } from 'scenes/userLogic' import { AsyncMigrationDetails } from './AsyncMigrationDetails' +import { SettingUpdateField } from './SettingUpdateField' import { AsyncMigration, - asyncMigrationsLogic, - AsyncMigrationsTab, AsyncMigrationStatus, + AsyncMigrationsTab, + asyncMigrationsLogic, migrationStatusNumberToMessage, } from './asyncMigrationsLogic' -import { SettingUpdateField } from './SettingUpdateField' export const scene: SceneExport = { component: AsyncMigrations, diff --git a/frontend/src/scenes/instance/AsyncMigrations/SettingUpdateField.tsx b/frontend/src/scenes/instance/AsyncMigrations/SettingUpdateField.tsx index f6e6e85a0a..03b5a8013b 100644 --- a/frontend/src/scenes/instance/AsyncMigrations/SettingUpdateField.tsx +++ b/frontend/src/scenes/instance/AsyncMigrations/SettingUpdateField.tsx @@ -1,7 +1,8 @@ -import { LemonButton, LemonDivider, LemonInput } from '@posthog/lemon-ui' import { useActions } from 'kea' import { useState } from 'react' +import { LemonButton, LemonDivider, LemonInput } from '@posthog/lemon-ui' + import { InstanceSetting } from '~/types' import { asyncMigrationsLogic } from './asyncMigrationsLogic' diff --git a/frontend/src/scenes/instance/AsyncMigrations/asyncMigrationParameterFormLogic.ts b/frontend/src/scenes/instance/AsyncMigrations/asyncMigrationParameterFormLogic.ts index 8cee7669a4..0bbd97d08d 100644 --- a/frontend/src/scenes/instance/AsyncMigrations/asyncMigrationParameterFormLogic.ts +++ b/frontend/src/scenes/instance/AsyncMigrations/asyncMigrationParameterFormLogic.ts @@ -1,5 +1,6 @@ import { kea, key, path, props } from 'kea' import { forms } from 'kea-forms' + import { AsyncMigrationModalProps, asyncMigrationsLogic } from 'scenes/instance/AsyncMigrations/asyncMigrationsLogic' import type { asyncMigrationParameterFormLogicType } from './asyncMigrationParameterFormLogicType' diff --git a/frontend/src/scenes/instance/AsyncMigrations/asyncMigrationsLogic.ts b/frontend/src/scenes/instance/AsyncMigrations/asyncMigrationsLogic.ts index eaca140682..b23af25c78 100644 --- a/frontend/src/scenes/instance/AsyncMigrations/asyncMigrationsLogic.ts +++ b/frontend/src/scenes/instance/AsyncMigrations/asyncMigrationsLogic.ts @@ -1,15 +1,17 @@ import { actions, connect, events, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { actionToUrl, urlToAction } from 'kea-router' + import api from 'lib/api' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' -import { systemStatusLogic } from 'scenes/instance/SystemStatus/systemStatusLogic' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' +import { systemStatusLogic } from 'scenes/instance/SystemStatus/systemStatusLogic' import { userLogic } from 'scenes/userLogic' import { InstanceSetting } from '~/types' import type { asyncMigrationsLogicType } from './asyncMigrationsLogicType' + export type TabName = 'overview' | 'internal_metrics' // keep in sync with MigrationStatus in posthog/models/async_migration.py diff --git a/frontend/src/scenes/instance/DeadLetterQueue/DeadLetterQueue.tsx b/frontend/src/scenes/instance/DeadLetterQueue/DeadLetterQueue.tsx index 21974b6a3b..24048d458c 100644 --- a/frontend/src/scenes/instance/DeadLetterQueue/DeadLetterQueue.tsx +++ b/frontend/src/scenes/instance/DeadLetterQueue/DeadLetterQueue.tsx @@ -1,11 +1,12 @@ import { useActions, useValues } from 'kea' + import { PageHeader } from 'lib/components/PageHeader' import { LemonTabs } from 'lib/lemon-ui/LemonTabs' import { SceneExport } from 'scenes/sceneTypes' import { userLogic } from 'scenes/userLogic' -import { deadLetterQueueLogic, DeadLetterQueueTab } from './deadLetterQueueLogic' import { MetricsTab } from './MetricsTab' +import { DeadLetterQueueTab, deadLetterQueueLogic } from './deadLetterQueueLogic' export const scene: SceneExport = { component: DeadLetterQueue, diff --git a/frontend/src/scenes/instance/DeadLetterQueue/MetricsTab.tsx b/frontend/src/scenes/instance/DeadLetterQueue/MetricsTab.tsx index 148e0aa5c7..3fe8571af7 100644 --- a/frontend/src/scenes/instance/DeadLetterQueue/MetricsTab.tsx +++ b/frontend/src/scenes/instance/DeadLetterQueue/MetricsTab.tsx @@ -1,15 +1,17 @@ -import { LemonDivider } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' -import { IconRefresh } from 'lib/lemon-ui/icons' + +import { IconCalendar } from '@posthog/icons' +import { LemonDivider } from '@posthog/lemon-ui' + +import { DateFilter } from 'lib/components/DateFilter/DateFilter' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonTable } from 'lib/lemon-ui/LemonTable' import { Spinner } from 'lib/lemon-ui/Spinner/Spinner' -import { userLogic } from 'scenes/userLogic' +import { IconRefresh } from 'lib/lemon-ui/icons' import { copyToClipboard } from 'lib/utils/copyToClipboard' +import { userLogic } from 'scenes/userLogic' import { deadLetterQueueLogic } from './deadLetterQueueLogic' -import { DateFilter } from 'lib/components/DateFilter/DateFilter' -import { IconCalendar } from '@posthog/icons' // keep in sync with posthog/api/dead_letter_queue.py const ROWS_LIMIT = 10 diff --git a/frontend/src/scenes/instance/DeadLetterQueue/deadLetterQueueLogic.ts b/frontend/src/scenes/instance/DeadLetterQueue/deadLetterQueueLogic.ts index 1c31bcbb53..15f44aeeda 100644 --- a/frontend/src/scenes/instance/DeadLetterQueue/deadLetterQueueLogic.ts +++ b/frontend/src/scenes/instance/DeadLetterQueue/deadLetterQueueLogic.ts @@ -1,10 +1,12 @@ import { actions, afterMount, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { userLogic } from 'scenes/userLogic' import { AppMetricsV2RequestParams, SystemStatusRow } from './../../../types' import type { deadLetterQueueLogicType } from './deadLetterQueueLogicType' + export type TabName = 'overview' | 'internal_metrics' export enum DeadLetterQueueTab { diff --git a/frontend/src/scenes/instance/SystemStatus/InstanceConfigSaveModal.tsx b/frontend/src/scenes/instance/SystemStatus/InstanceConfigSaveModal.tsx index 62b862d5ee..c3f4b20d8f 100644 --- a/frontend/src/scenes/instance/SystemStatus/InstanceConfigSaveModal.tsx +++ b/frontend/src/scenes/instance/SystemStatus/InstanceConfigSaveModal.tsx @@ -1,5 +1,7 @@ -import { LemonButton, LemonModal } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonButton, LemonModal } from '@posthog/lemon-ui' + import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { pluralize } from 'lib/utils' diff --git a/frontend/src/scenes/instance/SystemStatus/InstanceConfigTab.tsx b/frontend/src/scenes/instance/SystemStatus/InstanceConfigTab.tsx index f833e54b11..29fb9b9286 100644 --- a/frontend/src/scenes/instance/SystemStatus/InstanceConfigTab.tsx +++ b/frontend/src/scenes/instance/SystemStatus/InstanceConfigTab.tsx @@ -1,9 +1,12 @@ +import { useActions, useValues } from 'kea' + import { IconWarning } from '@posthog/icons' import { LemonButton, Link } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { useKeyboardHotkeys } from 'lib/hooks/useKeyboardHotkeys' -import { IconOpenInNew } from 'lib/lemon-ui/icons' +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { LemonTable, LemonTableColumns } from 'lib/lemon-ui/LemonTable' +import { IconOpenInNew } from 'lib/lemon-ui/icons' import { pluralize } from 'lib/utils' import { EnvironmentConfigOption, preflightLogic } from 'scenes/PreflightCheck/preflightLogic' @@ -13,7 +16,6 @@ import { InstanceConfigSaveModal } from './InstanceConfigSaveModal' import { MetricValue, RenderMetricValue } from './RenderMetricValue' import { RenderMetricValueEdit } from './RenderMetricValueEdit' import { ConfigMode, systemStatusLogic } from './systemStatusLogic' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' export function InstanceConfigTab(): JSX.Element { const { configOptions, preflightLoading } = useValues(preflightLogic) diff --git a/frontend/src/scenes/instance/SystemStatus/InternalMetricsTab.tsx b/frontend/src/scenes/instance/SystemStatus/InternalMetricsTab.tsx index 6ee6548c0b..0361e9b9fa 100644 --- a/frontend/src/scenes/instance/SystemStatus/InternalMetricsTab.tsx +++ b/frontend/src/scenes/instance/SystemStatus/InternalMetricsTab.tsx @@ -1,8 +1,10 @@ -import { LemonButton, LemonCheckbox, LemonTable, LemonTableColumns } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' -import { IconRefresh } from 'lib/lemon-ui/icons' -import { LemonCollapse } from 'lib/lemon-ui/LemonCollapse' import { useMemo, useState } from 'react' + +import { LemonButton, LemonCheckbox, LemonTable, LemonTableColumns } from '@posthog/lemon-ui' + +import { LemonCollapse } from 'lib/lemon-ui/LemonCollapse' +import { IconRefresh } from 'lib/lemon-ui/icons' import { systemStatusLogic } from 'scenes/instance/SystemStatus/systemStatusLogic' import { QuerySummary } from '~/types' diff --git a/frontend/src/scenes/instance/SystemStatus/OverviewTab.tsx b/frontend/src/scenes/instance/SystemStatus/OverviewTab.tsx index 71ed29426d..8967730aa7 100644 --- a/frontend/src/scenes/instance/SystemStatus/OverviewTab.tsx +++ b/frontend/src/scenes/instance/SystemStatus/OverviewTab.tsx @@ -1,7 +1,9 @@ -import { LemonTable } from '@posthog/lemon-ui' import { useValues } from 'kea' -import { IconOpenInNew } from 'lib/lemon-ui/icons' + +import { LemonTable } from '@posthog/lemon-ui' + import { Link } from 'lib/lemon-ui/Link' +import { IconOpenInNew } from 'lib/lemon-ui/icons' import { SystemStatusRow, SystemStatusSubrows } from '~/types' diff --git a/frontend/src/scenes/instance/SystemStatus/RenderMetricValue.tsx b/frontend/src/scenes/instance/SystemStatus/RenderMetricValue.tsx index f11c660759..6c3ba1400d 100644 --- a/frontend/src/scenes/instance/SystemStatus/RenderMetricValue.tsx +++ b/frontend/src/scenes/instance/SystemStatus/RenderMetricValue.tsx @@ -1,4 +1,5 @@ import { IconLock } from '@posthog/icons' + import { TZLabel } from 'lib/components/TZLabel' import { LemonTag } from 'lib/lemon-ui/LemonTag/LemonTag' diff --git a/frontend/src/scenes/instance/SystemStatus/RenderMetricValueEdit.tsx b/frontend/src/scenes/instance/SystemStatus/RenderMetricValueEdit.tsx index 5f8f3acc99..cdbaf7dd14 100644 --- a/frontend/src/scenes/instance/SystemStatus/RenderMetricValueEdit.tsx +++ b/frontend/src/scenes/instance/SystemStatus/RenderMetricValueEdit.tsx @@ -1,4 +1,5 @@ import { LemonCheckbox, LemonInput } from '@posthog/lemon-ui' + import { LemonTag } from 'lib/lemon-ui/LemonTag/LemonTag' import { MetricValue } from './RenderMetricValue' diff --git a/frontend/src/scenes/instance/SystemStatus/StaffUsersTab.tsx b/frontend/src/scenes/instance/SystemStatus/StaffUsersTab.tsx index 0a2988d806..2440dd34b1 100644 --- a/frontend/src/scenes/instance/SystemStatus/StaffUsersTab.tsx +++ b/frontend/src/scenes/instance/SystemStatus/StaffUsersTab.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconTrash } from '@posthog/icons' import { LemonDivider, LemonModal, Link } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { usersLemonSelectOptions } from 'lib/components/UserSelectItem' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonInputSelect } from 'lib/lemon-ui/LemonInputSelect/LemonInputSelect' diff --git a/frontend/src/scenes/instance/SystemStatus/index.tsx b/frontend/src/scenes/instance/SystemStatus/index.tsx index b6192e4629..f054b9bea4 100644 --- a/frontend/src/scenes/instance/SystemStatus/index.tsx +++ b/frontend/src/scenes/instance/SystemStatus/index.tsx @@ -1,15 +1,17 @@ import './index.scss' +import { useActions, useValues } from 'kea' + import { IconInfo } from '@posthog/icons' import { LemonBanner, Link } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { PageHeader } from 'lib/components/PageHeader' import { LemonTab, LemonTabs } from 'lib/lemon-ui/LemonTabs' import { LemonTag } from 'lib/lemon-ui/LemonTag/LemonTag' import { Tooltip } from 'lib/lemon-ui/Tooltip' +import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { InternalMetricsTab } from 'scenes/instance/SystemStatus/InternalMetricsTab' import { OverviewTab } from 'scenes/instance/SystemStatus/OverviewTab' -import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { SceneExport } from 'scenes/sceneTypes' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/scenes/instance/SystemStatus/staffUsersLogic.ts b/frontend/src/scenes/instance/SystemStatus/staffUsersLogic.ts index b6c5141aa3..90aec8cd59 100644 --- a/frontend/src/scenes/instance/SystemStatus/staffUsersLogic.ts +++ b/frontend/src/scenes/instance/SystemStatus/staffUsersLogic.ts @@ -1,6 +1,7 @@ import { actions, connect, events, kea, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { router } from 'kea-router' + import api from 'lib/api' import { urls } from 'scenes/urls' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/scenes/instance/SystemStatus/systemStatusLogic.ts b/frontend/src/scenes/instance/SystemStatus/systemStatusLogic.ts index fc88dc7263..29e420fe6a 100644 --- a/frontend/src/scenes/instance/SystemStatus/systemStatusLogic.ts +++ b/frontend/src/scenes/instance/SystemStatus/systemStatusLogic.ts @@ -1,6 +1,7 @@ import { actions, events, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { actionToUrl, urlToAction } from 'kea-router' + import api from 'lib/api' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' import { isUserLoggedIn } from 'lib/utils' diff --git a/frontend/src/scenes/max/Context.tsx b/frontend/src/scenes/max/Context.tsx index 02f40b231c..d505179e31 100644 --- a/frontend/src/scenes/max/Context.tsx +++ b/frontend/src/scenes/max/Context.tsx @@ -1,14 +1,16 @@ -import { IconAtSign, IconDashboard, IconGraph, IconPageChart } from '@posthog/icons' -import { LemonTag, Tooltip } from '@posthog/lemon-ui' +import clsx from 'clsx' import { useActions, useValues } from 'kea' -import { TaxonomicPopover } from 'lib/components/TaxonomicPopover/TaxonomicPopover' -import { IconAction, IconEvent } from 'lib/lemon-ui/icons' import { useMemo } from 'react' import React from 'react' +import { IconAtSign, IconDashboard, IconGraph, IconPageChart } from '@posthog/icons' +import { LemonTag, Tooltip } from '@posthog/lemon-ui' + +import { TaxonomicPopover } from 'lib/components/TaxonomicPopover/TaxonomicPopover' +import { IconAction, IconEvent } from 'lib/lemon-ui/icons' + import { maxContextLogic } from './maxContextLogic' import { MaxActionContext, MaxDashboardContext, MaxEventContext, MaxInsightContext } from './maxTypes' -import clsx from 'clsx' function pluralize(count: number, word: string): string { return `${count} ${word}${count > 1 ? 's' : ''}` diff --git a/frontend/src/scenes/max/ConversationHistory.tsx b/frontend/src/scenes/max/ConversationHistory.tsx index 01c25f6632..078dc45acb 100644 --- a/frontend/src/scenes/max/ConversationHistory.tsx +++ b/frontend/src/scenes/max/ConversationHistory.tsx @@ -1,7 +1,9 @@ -import { IconChevronLeft, IconPlus } from '@posthog/icons' -import { LemonButton, LemonSkeleton, Link, Spinner } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { router } from 'kea-router' + +import { IconChevronLeft, IconPlus } from '@posthog/icons' +import { LemonButton, LemonSkeleton, Link, Spinner } from '@posthog/lemon-ui' + import { ProductIntroduction } from 'lib/components/ProductIntroduction/ProductIntroduction' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/scenes/max/HistoryPreview.tsx b/frontend/src/scenes/max/HistoryPreview.tsx index 82f8909c0e..d485d049a3 100644 --- a/frontend/src/scenes/max/HistoryPreview.tsx +++ b/frontend/src/scenes/max/HistoryPreview.tsx @@ -1,7 +1,8 @@ -import { LemonButton, LemonSkeleton, Link, Spinner } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { router } from 'kea-router' +import { LemonButton, LemonSkeleton, Link, Spinner } from '@posthog/lemon-ui' + import { ConversationStatus } from '~/types' import { maxLogic } from './maxLogic' diff --git a/frontend/src/scenes/max/Intro.tsx b/frontend/src/scenes/max/Intro.tsx index 8d5c4b87d0..d204b7488b 100644 --- a/frontend/src/scenes/max/Intro.tsx +++ b/frontend/src/scenes/max/Intro.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { HedgehogBuddy } from 'lib/components/HedgehogBuddy/HedgehogBuddy' import { hedgehogBuddyLogic } from 'lib/components/HedgehogBuddy/hedgehogBuddyLogic' diff --git a/frontend/src/scenes/max/MarkdownMessage.tsx b/frontend/src/scenes/max/MarkdownMessage.tsx index 40835024ae..096acb4c81 100644 --- a/frontend/src/scenes/max/MarkdownMessage.tsx +++ b/frontend/src/scenes/max/MarkdownMessage.tsx @@ -1,7 +1,8 @@ -import { LemonMarkdown } from 'lib/lemon-ui/LemonMarkdown' import { marked } from 'marked' import { memo, useMemo } from 'react' +import { LemonMarkdown } from 'lib/lemon-ui/LemonMarkdown' + function parseMarkdownIntoBlocks(markdown: string): string[] { const tokens = marked.lexer(markdown) return tokens.map((token) => token.raw) diff --git a/frontend/src/scenes/max/Max.stories.tsx b/frontend/src/scenes/max/Max.stories.tsx index 27068e7a91..49922a3ee6 100644 --- a/frontend/src/scenes/max/Max.stories.tsx +++ b/frontend/src/scenes/max/Max.stories.tsx @@ -1,36 +1,37 @@ -import { Meta, StoryFn } from '@storybook/react' -import { useActions, useValues } from 'kea' -import { MOCK_DEFAULT_ORGANIZATION } from 'lib/api.mock' -import { useEffect } from 'react' -import { twMerge } from 'tailwind-merge' - -import { mswDecorator, useStorybookMocks } from '~/mocks/browser' -import { FunnelsQuery, TrendsQuery } from '~/queries/schema/schema-general' -import { InsightShortId } from '~/types' - import { + CONVERSATION_ID, chatResponseChunk, chatResponseWithEventContext, - CONVERSATION_ID, failureChunk, formChunk, generationFailureChunk, humanMessage, longResponseChunk, } from './__mocks__/chatResponse.mocks' -import conversationList from './__mocks__/conversationList.json' -import { MaxInstance, MaxInstanceProps } from './Max' -import { maxContextLogic } from './maxContextLogic' -import { MaxFloatingInput } from './MaxFloatingInput' -import { maxGlobalLogic } from './maxGlobalLogic' -import { maxLogic, QUESTION_SUGGESTIONS_DATA } from './maxLogic' -import { maxThreadLogic } from './maxThreadLogic' +import { MOCK_DEFAULT_ORGANIZATION } from 'lib/api.mock' + +import { Meta, StoryFn } from '@storybook/react' +import { useActions, useValues } from 'kea' +import { useEffect } from 'react' +import { twMerge } from 'tailwind-merge' -import { sidePanelLogic } from '~/layout/navigation-3000/sidepanel/sidePanelLogic' -import type { AssistantContextualTool } from '~/queries/schema/schema-assistant-messages' import { FEATURE_FLAGS } from 'lib/constants' import { useDelayedOnMountEffect } from 'lib/hooks/useOnMountEffect' +import { sidePanelLogic } from '~/layout/navigation-3000/sidepanel/sidePanelLogic' +import { mswDecorator, useStorybookMocks } from '~/mocks/browser' +import type { AssistantContextualTool } from '~/queries/schema/schema-assistant-messages' +import { FunnelsQuery, TrendsQuery } from '~/queries/schema/schema-general' +import { InsightShortId } from '~/types' + +import { MaxInstance, MaxInstanceProps } from './Max' +import { MaxFloatingInput } from './MaxFloatingInput' +import conversationList from './__mocks__/conversationList.json' +import { maxContextLogic } from './maxContextLogic' +import { maxGlobalLogic } from './maxGlobalLogic' +import { QUESTION_SUGGESTIONS_DATA, maxLogic } from './maxLogic' +import { maxThreadLogic } from './maxThreadLogic' + const meta: Meta = { title: 'Scenes-App/Max AI', decorators: [ diff --git a/frontend/src/scenes/max/Max.tsx b/frontend/src/scenes/max/Max.tsx index 63867b3cb3..90e0c283e9 100644 --- a/frontend/src/scenes/max/Max.tsx +++ b/frontend/src/scenes/max/Max.tsx @@ -1,3 +1,7 @@ +import clsx from 'clsx' +import { BindLogic, useActions, useValues } from 'kea' +import React from 'react' + import { IconArrowLeft, IconChevronLeft, @@ -9,14 +13,13 @@ import { IconSidePanel, } from '@posthog/icons' import { LemonSkeleton, LemonTag } from '@posthog/lemon-ui' -import { BindLogic, useActions, useValues } from 'kea' import { NotFound } from 'lib/components/NotFound' import { PageHeader } from 'lib/components/PageHeader' import { FEATURE_FLAGS } from 'lib/constants' import { LemonButton } from 'lib/lemon-ui/LemonButton' +import { IconArrowUp } from 'lib/lemon-ui/icons' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import React from 'react' import { SceneExport } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' @@ -24,19 +27,17 @@ import { SidePanelPaneHeader } from '~/layout/navigation-3000/sidepanel/componen import { sidePanelLogic } from '~/layout/navigation-3000/sidepanel/sidePanelLogic' import { SidePanelTab } from '~/types' -import clsx from 'clsx' -import { IconArrowUp } from 'lib/lemon-ui/icons' +import { ConversationHistory } from './ConversationHistory' +import { HistoryPreview } from './HistoryPreview' +import { Intro } from './Intro' +import { Thread } from './Thread' import { AnimatedBackButton } from './components/AnimatedBackButton' import { SidebarQuestionInput } from './components/SidebarQuestionInput' import { SidebarQuestionInputWithSuggestions } from './components/SidebarQuestionInputWithSuggestions' import { ThreadAutoScroller } from './components/ThreadAutoScroller' -import { ConversationHistory } from './ConversationHistory' -import { HistoryPreview } from './HistoryPreview' -import { Intro } from './Intro' import { maxGlobalLogic } from './maxGlobalLogic' import { maxLogic } from './maxLogic' -import { maxThreadLogic, MaxThreadLogicProps } from './maxThreadLogic' -import { Thread } from './Thread' +import { MaxThreadLogicProps, maxThreadLogic } from './maxThreadLogic' export const scene: SceneExport = { component: Max, diff --git a/frontend/src/scenes/max/MaxFloatingInput.tsx b/frontend/src/scenes/max/MaxFloatingInput.tsx index a7dc9a6cf8..decd4f6ef4 100644 --- a/frontend/src/scenes/max/MaxFloatingInput.tsx +++ b/frontend/src/scenes/max/MaxFloatingInput.tsx @@ -1,14 +1,16 @@ -import { BindLogic, useActions, useValues } from 'kea' -import clsx from 'clsx' +import './MaxFloatingInput.scss' + +import clsx from 'clsx' +import { BindLogic, useActions, useValues } from 'kea' + +import { WithinSidePanelContext } from '~/layout/navigation-3000/sidepanel/sidePanelStateLogic' -import { ExpandedFloatingMax } from './components/ExpandedFloatingMax' import { CollapsedFloatingMax } from './components/CollapsedFloatingMax' +import { ExpandedFloatingMax } from './components/ExpandedFloatingMax' import { maxGlobalLogic } from './maxGlobalLogic' import { maxLogic } from './maxLogic' -import { maxThreadLogic, MaxThreadLogicProps } from './maxThreadLogic' -import './MaxFloatingInput.scss' +import { MaxThreadLogicProps, maxThreadLogic } from './maxThreadLogic' import { useFloatingMaxPosition } from './utils/floatingMaxPositioning' -import { WithinSidePanelContext } from '~/layout/navigation-3000/sidepanel/sidePanelStateLogic' export function MaxFloatingInput(): JSX.Element | null { const { threadLogicKey, conversation } = useValues(maxLogic) diff --git a/frontend/src/scenes/max/MaxTool.tsx b/frontend/src/scenes/max/MaxTool.tsx index bd6088d48d..1e01e13bbf 100644 --- a/frontend/src/scenes/max/MaxTool.tsx +++ b/frontend/src/scenes/max/MaxTool.tsx @@ -1,17 +1,19 @@ -import { IconSparkles, IconWrench } from '@posthog/icons' -import { Tooltip } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' +import React, { useEffect } from 'react' + +import { IconSparkles, IconWrench } from '@posthog/icons' +import { Tooltip } from '@posthog/lemon-ui' + import { useFeatureFlag } from 'lib/hooks/useFeatureFlag' import { ProfilePicture } from 'lib/lemon-ui/ProfilePicture' -import React, { useEffect } from 'react' import { userLogic } from 'scenes/userLogic' import { sidePanelLogic } from '~/layout/navigation-3000/sidepanel/sidePanelLogic' import { SidePanelTab } from '~/types' -import { maxGlobalLogic } from './maxGlobalLogic' import { TOOL_DEFINITIONS, ToolRegistration } from './max-constants' +import { maxGlobalLogic } from './maxGlobalLogic' import { generateBurstPoints } from './utils' interface MaxToolProps extends Omit { diff --git a/frontend/src/scenes/max/Thread.tsx b/frontend/src/scenes/max/Thread.tsx index 78a8da83ef..5441baf870 100644 --- a/frontend/src/scenes/max/Thread.tsx +++ b/frontend/src/scenes/max/Thread.tsx @@ -1,3 +1,9 @@ +import clsx from 'clsx' +import { useActions, useValues } from 'kea' +import posthog from 'posthog-js' +import React, { useEffect, useMemo, useState } from 'react' +import { twMerge } from 'tailwind-merge' + import { IconCheck, IconCollapse, @@ -20,28 +26,27 @@ import { ProfilePicture, Tooltip, } from '@posthog/lemon-ui' -import clsx from 'clsx' -import { useActions, useValues } from 'kea' + import { BreakdownSummary, PropertiesSummary, SeriesSummary } from 'lib/components/Cards/InsightCard/InsightDetails' import { TopHeading } from 'lib/components/Cards/InsightCard/TopHeading' import { ProductIntroduction } from 'lib/components/ProductIntroduction/ProductIntroduction' +import { supportLogic } from 'lib/components/Support/supportLogic' import { IconOpenInNew } from 'lib/lemon-ui/icons' -import posthog from 'posthog-js' -import React, { useEffect, useMemo, useState } from 'react' -import { insightSceneLogic } from 'scenes/insights/insightSceneLogic' import { insightLogic } from 'scenes/insights/insightLogic' +import { insightSceneLogic } from 'scenes/insights/insightSceneLogic' +import { NotebookTarget } from 'scenes/notebooks/types' import { urls } from 'scenes/urls' import { userLogic } from 'scenes/userLogic' -import { twMerge } from 'tailwind-merge' +import { openNotebook } from '~/models/notebooksModel' import { Query } from '~/queries/Query/Query' import { AssistantForm, AssistantMessage, AssistantToolCallMessage, FailureMessage, - VisualizationMessage, NotebookUpdateMessage, + VisualizationMessage, } from '~/queries/schema/schema-assistant-messages' import { DataVisualizationNode, InsightVizNode, NodeKind } from '~/queries/schema/schema-general' import { isHogQLQuery } from '~/queries/utils' @@ -50,22 +55,19 @@ import { ProductKey } from '~/types' import { ContextSummary } from './Context' import { MarkdownMessage } from './MarkdownMessage' import { maxGlobalLogic } from './maxGlobalLogic' -import { maxLogic, MessageStatus, ThreadMessage } from './maxLogic' +import { MessageStatus, ThreadMessage, maxLogic } from './maxLogic' import { maxThreadLogic } from './maxThreadLogic' +import { MAX_SLASH_COMMANDS } from './slash-commands' import { castAssistantQuery, isAssistantMessage, isAssistantToolCallMessage, isFailureMessage, isHumanMessage, + isNotebookUpdateMessage, isReasoningMessage, isVisualizationMessage, - isNotebookUpdateMessage, } from './utils' -import { supportLogic } from 'lib/components/Support/supportLogic' -import { MAX_SLASH_COMMANDS } from './slash-commands' -import { openNotebook } from '~/models/notebooksModel' -import { NotebookTarget } from 'scenes/notebooks/types' export function Thread({ className }: { className?: string }): JSX.Element | null { const { conversationLoading, conversationId } = useValues(maxLogic) diff --git a/frontend/src/scenes/max/__mocks__/chatResponse.mocks.ts b/frontend/src/scenes/max/__mocks__/chatResponse.mocks.ts index fa1512aff6..84ca819f49 100644 --- a/frontend/src/scenes/max/__mocks__/chatResponse.mocks.ts +++ b/frontend/src/scenes/max/__mocks__/chatResponse.mocks.ts @@ -6,8 +6,8 @@ import { HumanMessage, ReasoningMessage, } from '~/queries/schema/schema-assistant-messages' -import { MaxContextType } from '../maxTypes' +import { MaxContextType } from '../maxTypes' import failureMessage from './failureMessage.json' import summaryMessage from './summaryMessage.json' import visualizationMessage from './visualizationMessage.json' diff --git a/frontend/src/scenes/max/components/CollapsedFloatingMax.tsx b/frontend/src/scenes/max/components/CollapsedFloatingMax.tsx index 903b61a631..8497eaf270 100644 --- a/frontend/src/scenes/max/components/CollapsedFloatingMax.tsx +++ b/frontend/src/scenes/max/components/CollapsedFloatingMax.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { maxGlobalLogic } from '../maxGlobalLogic' import { HedgehogAvatar } from './HedgehogAvatar' diff --git a/frontend/src/scenes/max/components/ExpandedFloatingMax.tsx b/frontend/src/scenes/max/components/ExpandedFloatingMax.tsx index 4d168124d0..5bdd4cb69b 100644 --- a/frontend/src/scenes/max/components/ExpandedFloatingMax.tsx +++ b/frontend/src/scenes/max/components/ExpandedFloatingMax.tsx @@ -1,16 +1,18 @@ -import { useRef, useEffect } from 'react' import { useActions, useValues } from 'kea' -import { LemonButton } from '@posthog/lemon-ui' +import { useEffect, useRef } from 'react' + import { IconDrag } from '@posthog/icons' +import { LemonButton } from '@posthog/lemon-ui' + +import { Thread } from '../Thread' import { maxGlobalLogic } from '../maxGlobalLogic' import { maxLogic } from '../maxLogic' import { maxThreadLogic } from '../maxThreadLogic' import { useDragAndSnap } from '../utils/useDragAndSnap' -import { FloatingSuggestionsDisplay } from './FloatingSuggestionsDisplay' import { FloatingInputActions } from './FloatingInputActions' -import { ThreadAutoScroller } from './ThreadAutoScroller' -import { Thread } from '../Thread' +import { FloatingSuggestionsDisplay } from './FloatingSuggestionsDisplay' import { QuestionInput } from './QuestionInput' +import { ThreadAutoScroller } from './ThreadAutoScroller' interface ExpandedFloatingMaxProps { onCollapse: () => void diff --git a/frontend/src/scenes/max/components/FloatingInputActions.tsx b/frontend/src/scenes/max/components/FloatingInputActions.tsx index 46a64bcc1c..18a8065d47 100644 --- a/frontend/src/scenes/max/components/FloatingInputActions.tsx +++ b/frontend/src/scenes/max/components/FloatingInputActions.tsx @@ -1,6 +1,7 @@ +import { useActions, useValues } from 'kea' + import { IconChevronDown, IconLightBulb, IconOpenSidebar, IconPlus, IconX } from '@posthog/icons' import { LemonButton, Tooltip } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' import { sidePanelLogic } from '~/layout/navigation-3000/sidepanel/sidePanelLogic' import { SidePanelTab } from '~/types' diff --git a/frontend/src/scenes/max/components/FloatingSuggestionsDisplay.tsx b/frontend/src/scenes/max/components/FloatingSuggestionsDisplay.tsx index b774dda2b1..4e7ee8c3b3 100644 --- a/frontend/src/scenes/max/components/FloatingSuggestionsDisplay.tsx +++ b/frontend/src/scenes/max/components/FloatingSuggestionsDisplay.tsx @@ -1,9 +1,10 @@ -import { IconChevronLeft } from '@posthog/icons' -import { LemonButton, Tooltip } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { router } from 'kea-router' -import { maxLogic, QUESTION_SUGGESTIONS_DATA, SuggestionGroup } from '../maxLogic' +import { IconChevronLeft } from '@posthog/icons' +import { LemonButton, Tooltip } from '@posthog/lemon-ui' + +import { QUESTION_SUGGESTIONS_DATA, SuggestionGroup, maxLogic } from '../maxLogic' import { maxThreadLogic } from '../maxThreadLogic' import { checkSuggestionRequiresUserInput, stripSuggestionPlaceholders } from '../utils' diff --git a/frontend/src/scenes/max/components/HedgehogAvatar.tsx b/frontend/src/scenes/max/components/HedgehogAvatar.tsx index d30b491a1b..ec9310fe68 100644 --- a/frontend/src/scenes/max/components/HedgehogAvatar.tsx +++ b/frontend/src/scenes/max/components/HedgehogAvatar.tsx @@ -1,8 +1,10 @@ +import { useActions, useValues } from 'kea' +import { useEffect, useRef } from 'react' + import { IconSparkles } from '@posthog/icons' import { Tooltip } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { HedgehogActor, HedgehogBuddy } from 'lib/components/HedgehogBuddy/HedgehogBuddy' -import { useEffect, useRef } from 'react' import { userLogic } from 'scenes/userLogic' import { maxGlobalLogic } from '../maxGlobalLogic' diff --git a/frontend/src/scenes/max/components/QuestionInput.tsx b/frontend/src/scenes/max/components/QuestionInput.tsx index e20616c9ed..295dfaecaf 100644 --- a/frontend/src/scenes/max/components/QuestionInput.tsx +++ b/frontend/src/scenes/max/components/QuestionInput.tsx @@ -1,24 +1,25 @@ +import './QuestionInput.scss' + import { offset } from '@floating-ui/react' -import { IconArrowRight, IconStopFilled } from '@posthog/icons' -import { LemonButton, LemonTextArea } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' -import { ReactNode, useState, useEffect } from 'react' +import posthog from 'posthog-js' +import { ReactNode, useEffect, useState } from 'react' import React from 'react' + +import { IconArrowRight, IconStopFilled } from '@posthog/icons' +import { LemonButton, LemonTextArea } from '@posthog/lemon-ui' + import { AIConsentPopoverWrapper } from 'scenes/settings/organization/AIConsentPopoverWrapper' import { KeyboardShortcut } from '~/layout/navigation-3000/components/KeyboardShortcut' +import { ContextDisplay } from '../Context' import { maxGlobalLogic } from '../maxGlobalLogic' import { maxLogic } from '../maxLogic' import { maxThreadLogic } from '../maxThreadLogic' -import { ContextDisplay } from '../Context' -import { SlashCommandAutocomplete } from './SlashCommandAutocomplete' -import posthog from 'posthog-js' import { MAX_SLASH_COMMANDS } from '../slash-commands' - -import './QuestionInput.scss' - +import { SlashCommandAutocomplete } from './SlashCommandAutocomplete' import { ToolsDisplay } from './ToolsDisplay' interface QuestionInputProps { diff --git a/frontend/src/scenes/max/components/SidebarQuestionInput.tsx b/frontend/src/scenes/max/components/SidebarQuestionInput.tsx index 5afbdc50ed..f1355bf0a3 100644 --- a/frontend/src/scenes/max/components/SidebarQuestionInput.tsx +++ b/frontend/src/scenes/max/components/SidebarQuestionInput.tsx @@ -1,13 +1,13 @@ import './QuestionInput.scss' -import { LemonButton } from '@posthog/lemon-ui' import { ToggleGroup, ToggleGroupItem } from '@radix-ui/react-toggle-group' - import { useActions, useValues } from 'kea' import { useEffect, useRef } from 'react' import { CSSTransition } from 'react-transition-group' -import { maxLogic, SuggestionGroup } from '../maxLogic' +import { LemonButton } from '@posthog/lemon-ui' + +import { SuggestionGroup, maxLogic } from '../maxLogic' import { maxThreadLogic } from '../maxThreadLogic' import { checkSuggestionRequiresUserInput, formatSuggestion, stripSuggestionPlaceholders } from '../utils' import { QuestionInput } from './QuestionInput' diff --git a/frontend/src/scenes/max/components/SidebarQuestionInputWithSuggestions.tsx b/frontend/src/scenes/max/components/SidebarQuestionInputWithSuggestions.tsx index b56f6a6091..0ef4937ad0 100644 --- a/frontend/src/scenes/max/components/SidebarQuestionInputWithSuggestions.tsx +++ b/frontend/src/scenes/max/components/SidebarQuestionInputWithSuggestions.tsx @@ -1,13 +1,14 @@ -import { IconGear } from '@posthog/icons' -import { LemonButton } from '@posthog/lemon-ui' import { DismissableLayer } from '@radix-ui/react-dismissable-layer' import { useActions, useValues } from 'kea' +import { IconGear } from '@posthog/icons' +import { LemonButton } from '@posthog/lemon-ui' + import { sidePanelSettingsLogic } from '~/layout/navigation-3000/sidepanel/panels/sidePanelSettingsLogic' import { maxLogic } from '../maxLogic' -import { SidebarQuestionInput } from './SidebarQuestionInput' import { FloatingSuggestionsDisplay } from './FloatingSuggestionsDisplay' +import { SidebarQuestionInput } from './SidebarQuestionInput' export function SidebarQuestionInputWithSuggestions(): JSX.Element { const { dataProcessingAccepted, activeSuggestionGroup } = useValues(maxLogic) diff --git a/frontend/src/scenes/max/components/SlashCommandAutocomplete.tsx b/frontend/src/scenes/max/components/SlashCommandAutocomplete.tsx index f21b315e26..72fe0e09c7 100644 --- a/frontend/src/scenes/max/components/SlashCommandAutocomplete.tsx +++ b/frontend/src/scenes/max/components/SlashCommandAutocomplete.tsx @@ -1,7 +1,9 @@ import { offset } from '@floating-ui/react' -import { LemonMenu, LemonMenuItem } from 'lib/lemon-ui/LemonMenu' -import { useEffect, useState } from 'react' import { useActions, useValues } from 'kea' +import { useEffect, useState } from 'react' + +import { LemonMenu, LemonMenuItem } from 'lib/lemon-ui/LemonMenu' + import { maxThreadLogic } from '../maxThreadLogic' import { MAX_SLASH_COMMANDS, SlashCommand } from '../slash-commands' diff --git a/frontend/src/scenes/max/components/ToolsDisplay.tsx b/frontend/src/scenes/max/components/ToolsDisplay.tsx index 4d27000d5a..7f3dfe0a77 100644 --- a/frontend/src/scenes/max/components/ToolsDisplay.tsx +++ b/frontend/src/scenes/max/components/ToolsDisplay.tsx @@ -1,25 +1,27 @@ -import { IconX, IconWrench, IconInfo, IconArrowRight } from '@posthog/icons' -import { Tooltip } from '@posthog/lemon-ui' +import './QuestionInput.scss' + import clsx from 'clsx' import { useValues } from 'kea' -import { ReactNode, useState, useRef, useCallback, useMemo, useLayoutEffect } from 'react' +import { ReactNode, useCallback, useLayoutEffect, useMemo, useRef, useState } from 'react' import React from 'react' +import { IconArrowRight, IconInfo, IconWrench, IconX } from '@posthog/icons' +import { Tooltip } from '@posthog/lemon-ui' + +import { featureFlagLogic } from 'lib/logic/featureFlagLogic' +import { identifierToHuman } from 'lib/utils' +import { Scene } from 'scenes/sceneTypes' +import { sceneConfigurations } from 'scenes/scenes' + import { useResizeObserver } from '~/lib/hooks/useResizeObserver' import { - ToolDefinition, - TOOL_DEFINITIONS, - ToolRegistration, MAX_GENERALLY_CAN, MAX_GENERALLY_CANNOT, + TOOL_DEFINITIONS, + ToolDefinition, + ToolRegistration, } from '../max-constants' -import { identifierToHuman } from 'lib/utils' -import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { sceneConfigurations } from 'scenes/scenes' -import { Scene } from 'scenes/sceneTypes' - -import './QuestionInput.scss' export interface ToolsDisplayProps { isFloating?: boolean diff --git a/frontend/src/scenes/max/max-constants.tsx b/frontend/src/scenes/max/max-constants.tsx index ec16415b18..82d5920a81 100644 --- a/frontend/src/scenes/max/max-constants.tsx +++ b/frontend/src/scenes/max/max-constants.tsx @@ -1,12 +1,12 @@ -import {} from 'kea' - -import { FEATURE_FLAGS } from 'lib/constants' - -import { AssistantContextualTool } from '~/queries/schema/schema-assistant-messages' +import 'kea' import { IconAtSign, IconMemory } from '@posthog/icons' + +import { FEATURE_FLAGS } from 'lib/constants' import { Scene } from 'scenes/sceneTypes' +import { AssistantContextualTool } from '~/queries/schema/schema-assistant-messages' + /** Static tool definition for display purposes. */ export interface ToolDefinition { /** A user-friendly display name for the tool. Must be a verb phrase, like "Create surveys" or "Search docs" */ diff --git a/frontend/src/scenes/max/max.test.ts b/frontend/src/scenes/max/max.test.ts index 665792df53..fb0fcba90f 100644 --- a/frontend/src/scenes/max/max.test.ts +++ b/frontend/src/scenes/max/max.test.ts @@ -8,7 +8,7 @@ import { maxGlobalLogic } from './maxGlobalLogic' import { maxLogic } from './maxLogic' import { maxThreadLogic } from './maxThreadLogic' import { MOCK_IN_PROGRESS_CONVERSATION, mockStream } from './testUtils' -import { maxMocks, MOCK_CONVERSATION_ID } from './testUtils' +import { MOCK_CONVERSATION_ID, maxMocks } from './testUtils' describe('Max Logics Integration Tests', () => { let logic: ReturnType diff --git a/frontend/src/scenes/max/maxBillingContextLogic.test.ts b/frontend/src/scenes/max/maxBillingContextLogic.test.ts index 983aea6984..5efec8ee14 100644 --- a/frontend/src/scenes/max/maxBillingContextLogic.test.ts +++ b/frontend/src/scenes/max/maxBillingContextLogic.test.ts @@ -1,15 +1,16 @@ import { expectLogic } from 'kea-test-utils' + import { dayjs } from 'lib/dayjs' +import * as billingUtils from 'scenes/billing/billing-utils' +import { BillingSpendResponse, BillingSpendResponseBreakdownType } from 'scenes/billing/billingSpendLogic' +import { BillingUsageResponse, BillingUsageResponseBreakdownType } from 'scenes/billing/billingUsageLogic' +import { Destination } from 'scenes/pipeline/types' import { useMocks } from '~/mocks/jest' import { initKeaTests } from '~/test/init' import { BillingPlan, BillingType, StartupProgramLabel, TeamType } from '~/types' -import { Destination } from 'scenes/pipeline/types' -import { maxBillingContextLogic, billingToMaxContext } from './maxBillingContextLogic' -import { BillingUsageResponse, BillingUsageResponseBreakdownType } from 'scenes/billing/billingUsageLogic' -import { BillingSpendResponse, BillingSpendResponseBreakdownType } from 'scenes/billing/billingSpendLogic' -import * as billingUtils from 'scenes/billing/billing-utils' +import { billingToMaxContext, maxBillingContextLogic } from './maxBillingContextLogic' const mockBilling: BillingType = { customer_id: '123', diff --git a/frontend/src/scenes/max/maxBillingContextLogic.tsx b/frontend/src/scenes/max/maxBillingContextLogic.tsx index 039ba89336..c1e49be7e5 100644 --- a/frontend/src/scenes/max/maxBillingContextLogic.tsx +++ b/frontend/src/scenes/max/maxBillingContextLogic.tsx @@ -1,19 +1,21 @@ import { connect, kea, path, selectors } from 'kea' + +import { dayjs } from 'lib/dayjs' +import { featureFlagLogic } from 'lib/logic/featureFlagLogic' +import { isAddonVisible } from 'scenes/billing/billing-utils' +import { billingLogic } from 'scenes/billing/billingLogic' +import { BillingSpendResponse, billingSpendLogic } from 'scenes/billing/billingSpendLogic' +import { billingUsageLogic } from 'scenes/billing/billingUsageLogic' +import { BillingUsageResponse } from 'scenes/billing/billingUsageLogic' +import { organizationLogic } from 'scenes/organizationLogic' +import { DESTINATION_TYPES } from 'scenes/pipeline/destinations/constants' +import { pipelineDestinationsLogic } from 'scenes/pipeline/destinations/destinationsLogic' +import { Destination } from 'scenes/pipeline/types' +import { teamLogic } from 'scenes/teamLogic' + import { BillingType, TeamType } from '~/types' -import { billingLogic } from 'scenes/billing/billingLogic' -import { billingUsageLogic } from 'scenes/billing/billingUsageLogic' -import { organizationLogic } from 'scenes/organizationLogic' -import { teamLogic } from 'scenes/teamLogic' -import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { pipelineDestinationsLogic } from 'scenes/pipeline/destinations/destinationsLogic' -import { DESTINATION_TYPES } from 'scenes/pipeline/destinations/constants' -import { Destination } from 'scenes/pipeline/types' -import { BillingUsageResponse } from 'scenes/billing/billingUsageLogic' -import { isAddonVisible } from 'scenes/billing/billing-utils' import type { maxBillingContextLogicType } from './maxBillingContextLogicType' -import { billingSpendLogic, BillingSpendResponse } from 'scenes/billing/billingSpendLogic' -import { dayjs } from 'lib/dayjs' export const DEFAULT_BILLING_DATE_FROM = dayjs().subtract(1, 'month').subtract(1, 'day').format('YYYY-MM-DD') export const DEFAULT_BILLING_DATE_TO = dayjs().subtract(1, 'day').format('YYYY-MM-DD') diff --git a/frontend/src/scenes/max/maxContextLogic.test.ts b/frontend/src/scenes/max/maxContextLogic.test.ts index 267f405b5a..3a40c99fc7 100644 --- a/frontend/src/scenes/max/maxContextLogic.test.ts +++ b/frontend/src/scenes/max/maxContextLogic.test.ts @@ -1,6 +1,8 @@ -import {} from '@posthog/icons' import { router } from 'kea-router' import { expectLogic, partial } from 'kea-test-utils' + +import '@posthog/icons' + import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { dashboardLogic } from 'scenes/dashboard/dashboardLogic' import { insightLogic } from 'scenes/insights/insightLogic' diff --git a/frontend/src/scenes/max/maxContextLogic.ts b/frontend/src/scenes/max/maxContextLogic.ts index ffd04314dd..1461392e56 100644 --- a/frontend/src/scenes/max/maxContextLogic.ts +++ b/frontend/src/scenes/max/maxContextLogic.ts @@ -1,8 +1,11 @@ -import { IconDashboard, IconGraph } from '@posthog/icons' import { actions, afterMount, connect, kea, listeners, path, reducers, selectors } from 'kea' import { router } from 'kea-router' + +import { IconDashboard, IconGraph } from '@posthog/icons' + import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { objectsEqual } from 'lib/utils' +import { DashboardLoadAction, RefreshStatus, dashboardLogic } from 'scenes/dashboard/dashboardLogic' import { insightLogic } from 'scenes/insights/insightLogic' import { insightSceneLogic } from 'scenes/insights/insightSceneLogic' import { sceneLogic } from 'scenes/sceneLogic' @@ -14,17 +17,15 @@ import type { maxContextLogicType } from './maxContextLogicType' import { InsightWithQuery, MaxActionContext, + MaxContextInput, MaxContextItem, MaxContextTaxonomicFilterOption, - MaxUIContext, MaxContextType, MaxDashboardContext, MaxEventContext, MaxInsightContext, - MaxContextInput, + MaxUIContext, } from './maxTypes' - -import { DashboardLoadAction, dashboardLogic, RefreshStatus } from 'scenes/dashboard/dashboardLogic' import { actionToMaxContextPayload, dashboardToMaxContext, diff --git a/frontend/src/scenes/max/maxGlobalLogic.tsx b/frontend/src/scenes/max/maxGlobalLogic.tsx index 1b10c2c825..67e0b1104e 100644 --- a/frontend/src/scenes/max/maxGlobalLogic.tsx +++ b/frontend/src/scenes/max/maxGlobalLogic.tsx @@ -1,20 +1,22 @@ import { actions, connect, kea, listeners, path, reducers, selectors } from 'kea' +import { router } from 'kea-router' + +import { IconBook, IconCompass, IconEye } from '@posthog/icons' import { FEATURE_FLAGS, OrganizationMembershipLevel } from 'lib/constants' -import { organizationLogic } from 'scenes/organizationLogic' - -import type { maxGlobalLogicType } from './maxGlobalLogicType' -import { sceneLogic } from 'scenes/sceneLogic' -import { urls } from 'scenes/urls' -import { router } from 'kea-router' -import { AssistantNavigateUrls } from '~/queries/schema/schema-assistant-messages' -import { routes } from 'scenes/scenes' -import { IconBook, IconCompass, IconEye } from '@posthog/icons' -import { Scene } from 'scenes/sceneTypes' -import { SidePanelTab } from '~/types' -import { sidePanelLogic } from '~/layout/navigation-3000/sidepanel/sidePanelLogic' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' +import { organizationLogic } from 'scenes/organizationLogic' +import { sceneLogic } from 'scenes/sceneLogic' +import { Scene } from 'scenes/sceneTypes' +import { routes } from 'scenes/scenes' +import { urls } from 'scenes/urls' + +import { sidePanelLogic } from '~/layout/navigation-3000/sidepanel/sidePanelLogic' +import { AssistantNavigateUrls } from '~/queries/schema/schema-assistant-messages' +import { SidePanelTab } from '~/types' + import { TOOL_DEFINITIONS, ToolRegistration } from './max-constants' +import type { maxGlobalLogicType } from './maxGlobalLogicType' /** Tools available everywhere. These CAN be shadowed by contextual tools for scene-specific handling (e.g. to intercept insight creation). */ export const STATIC_TOOLS: ToolRegistration[] = [ diff --git a/frontend/src/scenes/max/maxLogic.test.ts b/frontend/src/scenes/max/maxLogic.test.ts index 4a1fd26502..487521a90c 100644 --- a/frontend/src/scenes/max/maxLogic.test.ts +++ b/frontend/src/scenes/max/maxLogic.test.ts @@ -5,7 +5,7 @@ import { sidePanelStateLogic } from '~/layout/navigation-3000/sidepanel/sidePane import { useMocks } from '~/mocks/jest' import { initKeaTests } from '~/test/init' -import { maxLogic, QUESTION_SUGGESTIONS_DATA } from './maxLogic' +import { QUESTION_SUGGESTIONS_DATA, maxLogic } from './maxLogic' import { maxMocks, mockStream } from './testUtils' describe('maxLogic', () => { diff --git a/frontend/src/scenes/max/maxLogic.tsx b/frontend/src/scenes/max/maxLogic.tsx index af1a06d678..e3a1282575 100644 --- a/frontend/src/scenes/max/maxLogic.tsx +++ b/frontend/src/scenes/max/maxLogic.tsx @@ -1,10 +1,13 @@ -import { IconBook, IconGraph, IconHogQL, IconPlug, IconRewindPlay } from '@posthog/icons' import { actions, afterMount, connect, defaults, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { actionToUrl, decodeParams, router, urlToAction } from 'kea-router' + +import { IconBook, IconGraph, IconHogQL, IconPlug, IconRewindPlay } from '@posthog/icons' + import api from 'lib/api' import { dayjs } from 'lib/dayjs' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' +import { IconSurveys } from 'lib/lemon-ui/icons' import { objectsEqual, uuid } from 'lib/utils' import { permanentlyMount } from 'lib/utils/kea-logic-builders' import { maxSettingsLogic } from 'scenes/settings/environment/maxSettingsLogic' @@ -16,7 +19,6 @@ import { productUrls } from '~/products' import { RootAssistantMessage } from '~/queries/schema/schema-assistant-messages' import { Conversation, ConversationDetail, ConversationStatus, SidePanelTab } from '~/types' -import { IconSurveys } from 'lib/lemon-ui/icons' import { maxContextLogic } from './maxContextLogic' import { maxGlobalLogic } from './maxGlobalLogic' import type { maxLogicType } from './maxLogicType' diff --git a/frontend/src/scenes/max/maxThreadLogic.test.ts b/frontend/src/scenes/max/maxThreadLogic.test.ts index 5101e7e049..44348eb0bb 100644 --- a/frontend/src/scenes/max/maxThreadLogic.test.ts +++ b/frontend/src/scenes/max/maxThreadLogic.test.ts @@ -1,29 +1,30 @@ +import { router } from 'kea-router' import { partial } from 'kea-test-utils' import { expectLogic } from 'kea-test-utils' import React from 'react' +import { notebookLogic } from 'scenes/notebooks/Notebook/notebookLogic' +import { NotebookTarget } from 'scenes/notebooks/types' +import { urls } from 'scenes/urls' + import { sidePanelStateLogic } from '~/layout/navigation-3000/sidepanel/sidePanelStateLogic' import { useMocks } from '~/mocks/jest' +import * as notebooksModel from '~/models/notebooksModel' import { AssistantMessageType } from '~/queries/schema/schema-assistant-messages' import { initKeaTests } from '~/test/init' import { ConversationDetail, ConversationStatus } from '~/types' -import { notebookLogic } from 'scenes/notebooks/Notebook/notebookLogic' -import { NotebookTarget } from 'scenes/notebooks/types' -import { router } from 'kea-router' -import * as notebooksModel from '~/models/notebooksModel' import { maxContextLogic } from './maxContextLogic' import { maxGlobalLogic } from './maxGlobalLogic' import { maxLogic } from './maxLogic' import { maxThreadLogic } from './maxThreadLogic' import { - maxMocks, MOCK_CONVERSATION_ID, MOCK_IN_PROGRESS_CONVERSATION, MOCK_TEMP_CONVERSATION_ID, + maxMocks, mockStream, } from './testUtils' -import { urls } from 'scenes/urls' describe('maxThreadLogic', () => { let logic: ReturnType diff --git a/frontend/src/scenes/max/maxThreadLogic.tsx b/frontend/src/scenes/max/maxThreadLogic.tsx index 5fcfc47628..d2578c2c38 100644 --- a/frontend/src/scenes/max/maxThreadLogic.tsx +++ b/frontend/src/scenes/max/maxThreadLogic.tsx @@ -1,9 +1,9 @@ import { createParser } from 'eventsource-parser' import { + BuiltLogic, actions, afterMount, beforeUnmount, - BuiltLogic, connect, kea, key, @@ -14,14 +14,23 @@ import { reducers, selectors, } from 'kea' +import { router } from 'kea-router' +import posthog from 'posthog-js' + import api, { ApiError } from 'lib/api' +import { JSONContent } from 'lib/components/RichContentEditor/types' +import { FEATURE_FLAGS } from 'lib/constants' import { dayjs } from 'lib/dayjs' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' +import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { uuid } from 'lib/utils' -import posthog from 'posthog-js' import { maxContextLogic } from 'scenes/max/maxContextLogic' -import { JSONContent } from 'lib/components/RichContentEditor/types' +import { notebookLogic } from 'scenes/notebooks/Notebook/notebookLogic' +import { NotebookTarget } from 'scenes/notebooks/types' +import { urls } from 'scenes/urls' +import { breadcrumbsLogic } from '~/layout/navigation/Breadcrumbs/breadcrumbsLogic' +import { openNotebook } from '~/models/notebooksModel' import { AssistantEventType, AssistantGenerationStatusEvent, @@ -34,9 +43,11 @@ import { } from '~/queries/schema/schema-assistant-messages' import { Conversation, ConversationDetail, ConversationStatus } from '~/types' +import { maxBillingContextLogic } from './maxBillingContextLogic' import { maxGlobalLogic } from './maxGlobalLogic' import { maxLogic } from './maxLogic' import type { maxThreadLogicType } from './maxThreadLogicType' +import { MAX_SLASH_COMMANDS, SlashCommand } from './slash-commands' import { isAssistantMessage, isAssistantToolCallMessage, @@ -44,17 +55,7 @@ import { isNotebookUpdateMessage, isReasoningMessage, } from './utils' -import { breadcrumbsLogic } from '~/layout/navigation/Breadcrumbs/breadcrumbsLogic' -import { maxBillingContextLogic } from './maxBillingContextLogic' -import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { FEATURE_FLAGS } from 'lib/constants' import { getRandomThinkingMessage } from './utils/thinkingMessages' -import { MAX_SLASH_COMMANDS, SlashCommand } from './slash-commands' -import { NotebookTarget } from 'scenes/notebooks/types' -import { notebookLogic } from 'scenes/notebooks/Notebook/notebookLogic' -import { router } from 'kea-router' -import { urls } from 'scenes/urls' -import { openNotebook } from '~/models/notebooksModel' export type MessageStatus = 'loading' | 'completed' | 'error' diff --git a/frontend/src/scenes/max/utils.ts b/frontend/src/scenes/max/utils.ts index 8117ca4919..70b1650965 100644 --- a/frontend/src/scenes/max/utils.ts +++ b/frontend/src/scenes/max/utils.ts @@ -1,4 +1,5 @@ import { decodeParams, encodeParams } from 'kea-router' + import { dayjs } from 'lib/dayjs' import { humanFriendlyDuration } from 'lib/utils' @@ -22,6 +23,7 @@ import { import { FunnelsQuery, HogQLQuery, RetentionQuery, TrendsQuery } from '~/queries/schema/schema-general' import { isFunnelsQuery, isHogQLQuery, isRetentionQuery, isTrendsQuery } from '~/queries/utils' import { ActionType, DashboardType, EventDefinition, QueryBasedInsightModel, SidePanelTab } from '~/types' + import { MaxActionContext, MaxContextType, MaxDashboardContext, MaxEventContext, MaxInsightContext } from './maxTypes' export function isReasoningMessage(message: RootAssistantMessage | undefined | null): message is ReasoningMessage { diff --git a/frontend/src/scenes/max/utils/floatingMaxPositioning.test.ts b/frontend/src/scenes/max/utils/floatingMaxPositioning.test.ts index 406eb27124..1a87633097 100644 --- a/frontend/src/scenes/max/utils/floatingMaxPositioning.test.ts +++ b/frontend/src/scenes/max/utils/floatingMaxPositioning.test.ts @@ -1,8 +1,8 @@ import { - getPanelDimensions, calculateCSSPosition, - getFloatingMaxDimensions, calculateSnapPosition, + getFloatingMaxDimensions, + getPanelDimensions, } from './floatingMaxPositioning' // Mock DOM elements and methods diff --git a/frontend/src/scenes/max/utils/floatingMaxPositioning.ts b/frontend/src/scenes/max/utils/floatingMaxPositioning.ts index 590b210fb0..46de847138 100644 --- a/frontend/src/scenes/max/utils/floatingMaxPositioning.ts +++ b/frontend/src/scenes/max/utils/floatingMaxPositioning.ts @@ -1,8 +1,10 @@ -import { useLayoutEffect, useRef, useState } from 'react' import { useValues } from 'kea' -import { panelLayoutLogic } from '~/layout/panel-layout/panelLayoutLogic' -import { maxGlobalLogic } from '../maxGlobalLogic' +import { useLayoutEffect, useRef, useState } from 'react' + import { sidePanelStateLogic } from '~/layout/navigation-3000/sidepanel/sidePanelStateLogic' +import { panelLayoutLogic } from '~/layout/panel-layout/panelLayoutLogic' + +import { maxGlobalLogic } from '../maxGlobalLogic' /** * Positioning utilities and drag behavior for Max AI floating components diff --git a/frontend/src/scenes/max/utils/useDragAndSnap.test.ts b/frontend/src/scenes/max/utils/useDragAndSnap.test.ts index 3f8096c7ec..efd5197e56 100644 --- a/frontend/src/scenes/max/utils/useDragAndSnap.test.ts +++ b/frontend/src/scenes/max/utils/useDragAndSnap.test.ts @@ -1,4 +1,5 @@ -import { renderHook, act } from '@testing-library/react' +import { act, renderHook } from '@testing-library/react' + import { useDragAndSnap } from './useDragAndSnap' describe('useDragAndSnap', () => { diff --git a/frontend/src/scenes/max/utils/useDragAndSnap.ts b/frontend/src/scenes/max/utils/useDragAndSnap.ts index 8e250ff6fe..68db7d3121 100644 --- a/frontend/src/scenes/max/utils/useDragAndSnap.ts +++ b/frontend/src/scenes/max/utils/useDragAndSnap.ts @@ -1,10 +1,11 @@ import { useEffect, useRef, useState } from 'react' + import { - calculateSnapPosition, - getFloatingMaxDimensions, - getElementDimensions, Position, PositionWithSide, + calculateSnapPosition, + getElementDimensions, + getFloatingMaxDimensions, } from './floatingMaxPositioning' const DRAG_THRESHOLD = 5 // pixels diff --git a/frontend/src/scenes/moveToPostHogCloud/MoveToPostHogCloud.tsx b/frontend/src/scenes/moveToPostHogCloud/MoveToPostHogCloud.tsx index 7735dc45b0..f6b8d1b50a 100644 --- a/frontend/src/scenes/moveToPostHogCloud/MoveToPostHogCloud.tsx +++ b/frontend/src/scenes/moveToPostHogCloud/MoveToPostHogCloud.tsx @@ -11,6 +11,7 @@ import { IconUpload, } from '@posthog/icons' import { LemonButton, Link } from '@posthog/lemon-ui' + import { ExperimentsHog } from 'lib/components/hedgehogs' import { SceneExport } from 'scenes/sceneTypes' diff --git a/frontend/src/scenes/new-tab/NewTabScene.tsx b/frontend/src/scenes/new-tab/NewTabScene.tsx index 897ec7997f..949401e9af 100644 --- a/frontend/src/scenes/new-tab/NewTabScene.tsx +++ b/frontend/src/scenes/new-tab/NewTabScene.tsx @@ -1,9 +1,10 @@ -import { SceneExport } from 'scenes/sceneTypes' import { useValues } from 'kea' import { useState } from 'react' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { Link } from 'lib/lemon-ui/Link' import { newTabSceneLogic } from 'scenes/new-tab/newTabSceneLogic' +import { SceneExport } from 'scenes/sceneTypes' export const scene: SceneExport = { component: NewTabScene, diff --git a/frontend/src/scenes/new-tab/newTabSceneLogic.tsx b/frontend/src/scenes/new-tab/newTabSceneLogic.tsx index b6c569a1f5..3d034bb71f 100644 --- a/frontend/src/scenes/new-tab/newTabSceneLogic.tsx +++ b/frontend/src/scenes/new-tab/newTabSceneLogic.tsx @@ -1,11 +1,14 @@ +import { kea, path, selectors } from 'kea' + +import { IconDatabase, IconHogQL } from '@posthog/icons' + import { getDefaultTreeData, getDefaultTreeNew, getDefaultTreeProducts, iconForType, } from '~/layout/panel-layout/ProjectTree/defaultTree' -import { kea, path, selectors } from 'kea' -import { IconDatabase, IconHogQL } from '@posthog/icons' + import type { newTabSceneLogicType } from './newTabSceneLogicType' export interface ItemsGridItem { diff --git a/frontend/src/scenes/notebooks/AddToNotebook/DraggableToNotebook.tsx b/frontend/src/scenes/notebooks/AddToNotebook/DraggableToNotebook.tsx index c6bf2965a9..2f32a6c2cd 100644 --- a/frontend/src/scenes/notebooks/AddToNotebook/DraggableToNotebook.tsx +++ b/frontend/src/scenes/notebooks/AddToNotebook/DraggableToNotebook.tsx @@ -2,9 +2,10 @@ import './DraggableToNotebook.scss' import clsx from 'clsx' import { useActions } from 'kea' -import { useKeyHeld } from 'lib/hooks/useKeyHeld' import React, { useState } from 'react' +import { useKeyHeld } from 'lib/hooks/useKeyHeld' + import { useNotebookNode } from '../Nodes/NotebookNodeContext' import { notebookPanelLogic } from '../NotebookPanel/notebookPanelLogic' import { NotebookNodeType } from '../types' diff --git a/frontend/src/scenes/notebooks/Marks/NotebookMarkComment.tsx b/frontend/src/scenes/notebooks/Marks/NotebookMarkComment.tsx index 3351acd08e..f32decea64 100644 --- a/frontend/src/scenes/notebooks/Marks/NotebookMarkComment.tsx +++ b/frontend/src/scenes/notebooks/Marks/NotebookMarkComment.tsx @@ -1,7 +1,7 @@ import { Mark, MarkViewProps, mergeAttributes } from '@tiptap/core' +import { MarkViewContent, ReactMarkViewRenderer } from '@tiptap/react' import { useMountedLogic } from 'kea' -import { MarkViewContent, ReactMarkViewRenderer } from '@tiptap/react' import { notebookLogic } from '../Notebook/notebookLogic' export const NotebookMarkComment = Mark.create({ diff --git a/frontend/src/scenes/notebooks/Marks/NotebookMarkLink.tsx b/frontend/src/scenes/notebooks/Marks/NotebookMarkLink.tsx index 5af0f8ed1d..feb21ebf02 100644 --- a/frontend/src/scenes/notebooks/Marks/NotebookMarkLink.tsx +++ b/frontend/src/scenes/notebooks/Marks/NotebookMarkLink.tsx @@ -1,4 +1,4 @@ -import { getMarkRange, Mark, mergeAttributes } from '@tiptap/core' +import { Mark, getMarkRange, mergeAttributes } from '@tiptap/core' import { Plugin, PluginKey } from '@tiptap/pm/state' import { linkPasteRule } from '../Nodes/utils' diff --git a/frontend/src/scenes/notebooks/Nodes/NodeWrapper.tsx b/frontend/src/scenes/notebooks/Nodes/NodeWrapper.tsx index 4393d63db1..758029ae8f 100644 --- a/frontend/src/scenes/notebooks/Nodes/NodeWrapper.tsx +++ b/frontend/src/scenes/notebooks/Nodes/NodeWrapper.tsx @@ -1,3 +1,7 @@ +// sort-imports-ignore + +// KLUDGE: Do NOT remove the `sort-imports-ignore` comment. It's used to sort the imports. +// Our KNOWN_NODES resolution will NOT work if the imports here are sorted in a different way. import { Node, NodeViewWrapper, diff --git a/frontend/src/scenes/notebooks/Nodes/NotebookNodeBacklink.tsx b/frontend/src/scenes/notebooks/Nodes/NotebookNodeBacklink.tsx index b45cf71a2b..ebbb20ef64 100644 --- a/frontend/src/scenes/notebooks/Nodes/NotebookNodeBacklink.tsx +++ b/frontend/src/scenes/notebooks/Nodes/NotebookNodeBacklink.tsx @@ -1,17 +1,10 @@ -import { mergeAttributes, Node, NodeViewProps } from '@tiptap/core' +import { Node, NodeViewProps, mergeAttributes } from '@tiptap/core' import { NodeViewWrapper, ReactNodeViewRenderer } from '@tiptap/react' -import { QueryBasedInsightModel } from '~/types' -import { Link } from '@posthog/lemon-ui' -import { IconCohort } from 'lib/lemon-ui/icons' -import { urls } from 'scenes/urls' import clsx from 'clsx' -import { router } from 'kea-router' -import { posthogNodePasteRule } from './utils' -import api from 'lib/api' import { useValues } from 'kea' -import { notebookLogic } from '../Notebook/notebookLogic' +import { router } from 'kea-router' +import { useEffect } from 'react' -import { openNotebook } from '~/models/notebooksModel' import { IconChat, IconDashboard, @@ -25,8 +18,18 @@ import { IconPlaylist, IconRewindPlay, } from '@posthog/icons' -import { useEffect } from 'react' +import { Link } from '@posthog/lemon-ui' + +import api from 'lib/api' +import { IconCohort } from 'lib/lemon-ui/icons' +import { urls } from 'scenes/urls' + +import { openNotebook } from '~/models/notebooksModel' +import { QueryBasedInsightModel } from '~/types' + +import { notebookLogic } from '../Notebook/notebookLogic' import { NotebookNodeType, NotebookTarget } from '../types' +import { posthogNodePasteRule } from './utils' type BackLinkMapper = { regex: RegExp diff --git a/frontend/src/scenes/notebooks/Nodes/NotebookNodeCohort.tsx b/frontend/src/scenes/notebooks/Nodes/NotebookNodeCohort.tsx index e6529c3a97..db8f317614 100644 --- a/frontend/src/scenes/notebooks/Nodes/NotebookNodeCohort.tsx +++ b/frontend/src/scenes/notebooks/Nodes/NotebookNodeCohort.tsx @@ -1,19 +1,23 @@ -import { createPostHogWidgetNode } from 'scenes/notebooks/Nodes/NodeWrapper' -import { PropertyFilterType } from '~/types' -import { useActions, useValues } from 'kea' -import { urls } from 'scenes/urls' -import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' -import { notebookNodeLogic } from './notebookNodeLogic' -import { useEffect, useMemo } from 'react' import clsx from 'clsx' -import { NotFound } from 'lib/components/NotFound' -import { cohortEditLogic } from 'scenes/cohorts/cohortEditLogic' +import { useActions, useValues } from 'kea' +import { useEffect, useMemo } from 'react' + import { IconPeople, IconPerson, IconTrends } from '@posthog/icons' -import { Query } from '~/queries/Query/Query' import { LemonDivider, LemonTag } from '@posthog/lemon-ui' + +import { NotFound } from 'lib/components/NotFound' +import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' +import { cohortEditLogic } from 'scenes/cohorts/cohortEditLogic' +import { createPostHogWidgetNode } from 'scenes/notebooks/Nodes/NodeWrapper' +import { urls } from 'scenes/urls' + +import { Query } from '~/queries/Query/Query' import { DataTableNode, NodeKind } from '~/queries/schema/schema-general' -import { INTEGER_REGEX_MATCH_GROUPS } from './utils' +import { PropertyFilterType } from '~/types' + import { NotebookNodeProps, NotebookNodeType } from '../types' +import { notebookNodeLogic } from './notebookNodeLogic' +import { INTEGER_REGEX_MATCH_GROUPS } from './utils' const Component = ({ attributes }: NotebookNodeProps): JSX.Element => { const { id } = attributes diff --git a/frontend/src/scenes/notebooks/Nodes/NotebookNodeContext.ts b/frontend/src/scenes/notebooks/Nodes/NotebookNodeContext.ts index d5db3c5035..80a85d8d5d 100644 --- a/frontend/src/scenes/notebooks/Nodes/NotebookNodeContext.ts +++ b/frontend/src/scenes/notebooks/Nodes/NotebookNodeContext.ts @@ -1,5 +1,6 @@ import { BuiltLogic } from 'kea' import { createContext, useContext } from 'react' + import type { notebookNodeLogicType } from './notebookNodeLogicType' export const NotebookNodeContext = createContext | undefined>(undefined) diff --git a/frontend/src/scenes/notebooks/Nodes/NotebookNodeEarlyAccessFeature.tsx b/frontend/src/scenes/notebooks/Nodes/NotebookNodeEarlyAccessFeature.tsx index e96b62d2f8..8964a379ef 100644 --- a/frontend/src/scenes/notebooks/Nodes/NotebookNodeEarlyAccessFeature.tsx +++ b/frontend/src/scenes/notebooks/Nodes/NotebookNodeEarlyAccessFeature.tsx @@ -1,23 +1,27 @@ -import { createPostHogWidgetNode } from 'scenes/notebooks/Nodes/NodeWrapper' -import { EarlyAccessFeatureStage, EarlyAccessFeatureType } from '~/types' import { BindLogic, useActions, useValues } from 'kea' -import { LemonDivider, LemonTag } from '@posthog/lemon-ui' -import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' -import { notebookNodeLogic } from './notebookNodeLogic' +import { useEffect } from 'react' +import { IconFlag, IconRocket } from '@posthog/icons' +import { LemonDivider, LemonTag } from '@posthog/lemon-ui' + +import { NotFound } from 'lib/components/NotFound' +import { JSONContent } from 'lib/components/RichContentEditor/types' +import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' +import { createPostHogWidgetNode } from 'scenes/notebooks/Nodes/NodeWrapper' + +import { urls } from '~/scenes/urls' +import { EarlyAccessFeatureStage, EarlyAccessFeatureType } from '~/types' + +import { PersonList } from 'products/early_access_features/frontend/EarlyAccessFeature' import { EarlyAccessFeatureLogicProps, earlyAccessFeatureLogic, } from 'products/early_access_features/frontend/earlyAccessFeatureLogic' -import { PersonList } from 'products/early_access_features/frontend/EarlyAccessFeature' -import { urls } from '~/scenes/urls' -import { buildFlagContent } from './NotebookNodeFlag' -import { useEffect } from 'react' -import { NotFound } from 'lib/components/NotFound' -import { IconFlag, IconRocket } from '@posthog/icons' -import { UUID_REGEX_MATCH_GROUPS } from './utils' -import { JSONContent } from 'lib/components/RichContentEditor/types' + import { NotebookNodeProps, NotebookNodeType } from '../types' +import { buildFlagContent } from './NotebookNodeFlag' +import { notebookNodeLogic } from './notebookNodeLogic' +import { UUID_REGEX_MATCH_GROUPS } from './utils' const Component = ({ attributes }: NotebookNodeProps): JSX.Element => { const { id } = attributes diff --git a/frontend/src/scenes/notebooks/Nodes/NotebookNodeEmbed.tsx b/frontend/src/scenes/notebooks/Nodes/NotebookNodeEmbed.tsx index aa172b4a7b..1035a2a4f6 100644 --- a/frontend/src/scenes/notebooks/Nodes/NotebookNodeEmbed.tsx +++ b/frontend/src/scenes/notebooks/Nodes/NotebookNodeEmbed.tsx @@ -1,10 +1,13 @@ -import { createPostHogWidgetNode } from 'scenes/notebooks/Nodes/NodeWrapper' -import { LemonButton, LemonInput, SpinnerOverlay } from '@posthog/lemon-ui' -import { useEffect, useMemo, useState } from 'react' import { useActions } from 'kea' -import { notebookNodeLogic } from './notebookNodeLogic' +import { useEffect, useMemo, useState } from 'react' + +import { LemonButton, LemonInput, SpinnerOverlay } from '@posthog/lemon-ui' + import { JSONContent } from 'lib/components/RichContentEditor/types' +import { createPostHogWidgetNode } from 'scenes/notebooks/Nodes/NodeWrapper' + import { NotebookNodeAttributeProperties, NotebookNodeProps, NotebookNodeType } from '../types' +import { notebookNodeLogic } from './notebookNodeLogic' type NotebookNodeEmbedAttributes = { src?: string diff --git a/frontend/src/scenes/notebooks/Nodes/NotebookNodeExperiment.tsx b/frontend/src/scenes/notebooks/Nodes/NotebookNodeExperiment.tsx index 712a0fbb35..7a480d953b 100644 --- a/frontend/src/scenes/notebooks/Nodes/NotebookNodeExperiment.tsx +++ b/frontend/src/scenes/notebooks/Nodes/NotebookNodeExperiment.tsx @@ -1,20 +1,23 @@ +import { BindLogic, useActions, useValues } from 'kea' +import { useEffect } from 'react' + import { IconFlag, IconFlask } from '@posthog/icons' import { LemonDivider } from '@posthog/lemon-ui' -import { BindLogic, useActions, useValues } from 'kea' + import { NotFound } from 'lib/components/NotFound' import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' -import { useEffect } from 'react' -import { experimentLogic } from 'scenes/experiments/experimentLogic' -import { getExperimentStatus } from 'scenes/experiments/experimentsLogic' -import { LegacyResultsQuery, ResultsTag, StatusTag } from 'scenes/experiments/ExperimentView/components' import { Info } from 'scenes/experiments/ExperimentView/Info' import { SummaryTable } from 'scenes/experiments/ExperimentView/SummaryTable' +import { LegacyResultsQuery, ResultsTag, StatusTag } from 'scenes/experiments/ExperimentView/components' +import { experimentLogic } from 'scenes/experiments/experimentLogic' +import { getExperimentStatus } from 'scenes/experiments/experimentsLogic' import { createPostHogWidgetNode } from 'scenes/notebooks/Nodes/NodeWrapper' import { urls } from 'scenes/urls' + +import { NotebookNodeProps, NotebookNodeType } from '../types' import { buildFlagContent } from './NotebookNodeFlag' import { notebookNodeLogic } from './notebookNodeLogic' import { INTEGER_REGEX_MATCH_GROUPS } from './utils' -import { NotebookNodeProps, NotebookNodeType } from '../types' const Component = ({ attributes }: NotebookNodeProps): JSX.Element => { const { id } = attributes diff --git a/frontend/src/scenes/notebooks/Nodes/NotebookNodeFlag.tsx b/frontend/src/scenes/notebooks/Nodes/NotebookNodeFlag.tsx index 881099e0e8..ebce9eecb5 100644 --- a/frontend/src/scenes/notebooks/Nodes/NotebookNodeFlag.tsx +++ b/frontend/src/scenes/notebooks/Nodes/NotebookNodeFlag.tsx @@ -1,24 +1,27 @@ -import { createPostHogWidgetNode } from 'scenes/notebooks/Nodes/NodeWrapper' -import { BindLogic, useActions, useValues } from 'kea' -import { featureFlagLogic, FeatureFlagLogicProps } from 'scenes/feature-flags/featureFlagLogic' -import { IconRecording, IconSurveys } from 'lib/lemon-ui/icons' import clsx from 'clsx' -import { LemonDivider } from '@posthog/lemon-ui' -import { urls } from 'scenes/urls' -import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' -import { notebookNodeLogic } from './notebookNodeLogic' -import { buildPlaylistContent } from './NotebookNodePlaylist' -import { buildCodeExampleContent } from './NotebookNodeFlagCodeExample' -import { FeatureFlagReleaseConditions } from 'scenes/feature-flags/FeatureFlagReleaseConditions' -import { buildEarlyAccessFeatureContent } from './NotebookNodeEarlyAccessFeature' -import { notebookNodeFlagLogic } from './NotebookNodeFlagLogic' -import { buildSurveyContent } from './NotebookNodeSurvey' +import { BindLogic, useActions, useValues } from 'kea' import { useEffect } from 'react' -import { NotFound } from 'lib/components/NotFound' + import { IconFlag, IconRocket } from '@posthog/icons' -import { INTEGER_REGEX_MATCH_GROUPS } from './utils' +import { LemonDivider } from '@posthog/lemon-ui' + +import { NotFound } from 'lib/components/NotFound' import { JSONContent } from 'lib/components/RichContentEditor/types' +import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' +import { IconRecording, IconSurveys } from 'lib/lemon-ui/icons' +import { FeatureFlagReleaseConditions } from 'scenes/feature-flags/FeatureFlagReleaseConditions' +import { FeatureFlagLogicProps, featureFlagLogic } from 'scenes/feature-flags/featureFlagLogic' +import { createPostHogWidgetNode } from 'scenes/notebooks/Nodes/NodeWrapper' +import { urls } from 'scenes/urls' + import { NotebookNodeProps, NotebookNodeType } from '../types' +import { buildEarlyAccessFeatureContent } from './NotebookNodeEarlyAccessFeature' +import { buildCodeExampleContent } from './NotebookNodeFlagCodeExample' +import { notebookNodeFlagLogic } from './NotebookNodeFlagLogic' +import { buildPlaylistContent } from './NotebookNodePlaylist' +import { buildSurveyContent } from './NotebookNodeSurvey' +import { notebookNodeLogic } from './notebookNodeLogic' +import { INTEGER_REGEX_MATCH_GROUPS } from './utils' const Component = ({ attributes }: NotebookNodeProps): JSX.Element => { const { id } = attributes diff --git a/frontend/src/scenes/notebooks/Nodes/NotebookNodeFlagCodeExample.tsx b/frontend/src/scenes/notebooks/Nodes/NotebookNodeFlagCodeExample.tsx index 9f3e8b7f91..830b0f68aa 100644 --- a/frontend/src/scenes/notebooks/Nodes/NotebookNodeFlagCodeExample.tsx +++ b/frontend/src/scenes/notebooks/Nodes/NotebookNodeFlagCodeExample.tsx @@ -1,13 +1,15 @@ -import { createPostHogWidgetNode } from 'scenes/notebooks/Nodes/NodeWrapper' import { useActions, useValues } from 'kea' -import { FeatureFlagLogicProps, featureFlagLogic } from 'scenes/feature-flags/featureFlagLogic' -import { FeatureFlagCodeExample } from 'scenes/feature-flags/FeatureFlagCodeExample' -import { urls } from 'scenes/urls' -import { notebookNodeLogic } from './notebookNodeLogic' import { useEffect } from 'react' + import { NotFound } from 'lib/components/NotFound' import { JSONContent } from 'lib/components/RichContentEditor/types' +import { FeatureFlagCodeExample } from 'scenes/feature-flags/FeatureFlagCodeExample' +import { FeatureFlagLogicProps, featureFlagLogic } from 'scenes/feature-flags/featureFlagLogic' +import { createPostHogWidgetNode } from 'scenes/notebooks/Nodes/NodeWrapper' +import { urls } from 'scenes/urls' + import { NotebookNodeProps, NotebookNodeType } from '../types' +import { notebookNodeLogic } from './notebookNodeLogic' const Component = ({ attributes }: NotebookNodeProps): JSX.Element => { const { id } = attributes diff --git a/frontend/src/scenes/notebooks/Nodes/NotebookNodeFlagLogic.tsx b/frontend/src/scenes/notebooks/Nodes/NotebookNodeFlagLogic.tsx index 051bf200a1..738dc0dfb7 100644 --- a/frontend/src/scenes/notebooks/Nodes/NotebookNodeFlagLogic.tsx +++ b/frontend/src/scenes/notebooks/Nodes/NotebookNodeFlagLogic.tsx @@ -1,11 +1,12 @@ import { connect, kea, key, listeners, path, props, selectors } from 'kea' -import { FeatureFlagLogicProps, featureFlagLogic } from 'scenes/feature-flags/featureFlagLogic' -import { buildEarlyAccessFeatureContent } from './NotebookNodeEarlyAccessFeature' +import { JSONContent, RichContentNode } from 'lib/components/RichContentEditor/types' +import { FeatureFlagLogicProps, featureFlagLogic } from 'scenes/feature-flags/featureFlagLogic' + +import { NotebookNodeType } from '../types' +import { buildEarlyAccessFeatureContent } from './NotebookNodeEarlyAccessFeature' import type { notebookNodeFlagLogicType } from './NotebookNodeFlagLogicType' import { buildSurveyContent } from './NotebookNodeSurvey' -import { JSONContent, RichContentNode } from 'lib/components/RichContentEditor/types' -import { NotebookNodeType } from '../types' export type NotebookNodeFlagLogicProps = { id: FeatureFlagLogicProps['id'] diff --git a/frontend/src/scenes/notebooks/Nodes/NotebookNodeGroup.tsx b/frontend/src/scenes/notebooks/Nodes/NotebookNodeGroup.tsx index 1b905e16ca..ed51d16d0a 100644 --- a/frontend/src/scenes/notebooks/Nodes/NotebookNodeGroup.tsx +++ b/frontend/src/scenes/notebooks/Nodes/NotebookNodeGroup.tsx @@ -1,18 +1,21 @@ -import { createPostHogWidgetNode } from 'scenes/notebooks/Nodes/NodeWrapper' -import { PropertyFilterType, PropertyOperator } from '~/types' -import { useActions, useValues } from 'kea' -import { urls } from 'scenes/urls' -import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' -import { notebookNodeLogic } from './notebookNodeLogic' -import { useEffect } from 'react' import clsx from 'clsx' +import { useActions, useValues } from 'kea' +import { useEffect } from 'react' + import { NotFound } from 'lib/components/NotFound' -import { groupLogic } from 'scenes/groups/groupLogic' -import { groupDisplayId } from 'scenes/persons/GroupActorDisplay' +import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' import { GroupCaption } from 'scenes/groups/Group' -import { NodeKind } from '~/queries/schema/schema-general' +import { groupLogic } from 'scenes/groups/groupLogic' +import { createPostHogWidgetNode } from 'scenes/notebooks/Nodes/NodeWrapper' +import { groupDisplayId } from 'scenes/persons/GroupActorDisplay' +import { urls } from 'scenes/urls' + import { defaultDataTableColumns } from '~/queries/nodes/DataTable/utils' +import { NodeKind } from '~/queries/schema/schema-general' +import { PropertyFilterType, PropertyOperator } from '~/types' + import { NotebookNodeProps, NotebookNodeType } from '../types' +import { notebookNodeLogic } from './notebookNodeLogic' const Component = ({ attributes }: NotebookNodeProps): JSX.Element => { const { id, groupTypeIndex } = attributes diff --git a/frontend/src/scenes/notebooks/Nodes/NotebookNodeImage.tsx b/frontend/src/scenes/notebooks/Nodes/NotebookNodeImage.tsx index 09d903e7e0..083c72440e 100644 --- a/frontend/src/scenes/notebooks/Nodes/NotebookNodeImage.tsx +++ b/frontend/src/scenes/notebooks/Nodes/NotebookNodeImage.tsx @@ -1,8 +1,10 @@ +import { ReactEventHandler, useEffect, useMemo, useState } from 'react' + +import { uploadFile } from 'lib/hooks/useUploadFiles' import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { SpinnerOverlay } from 'lib/lemon-ui/Spinner' -import { ReactEventHandler, useEffect, useMemo, useState } from 'react' import { createPostHogWidgetNode } from 'scenes/notebooks/Nodes/NodeWrapper' -import { uploadFile } from 'lib/hooks/useUploadFiles' + import { NotebookNodeProps, NotebookNodeType } from '../types' const MAX_DEFAULT_HEIGHT = 1000 diff --git a/frontend/src/scenes/notebooks/Nodes/NotebookNodeLatex.tsx b/frontend/src/scenes/notebooks/Nodes/NotebookNodeLatex.tsx index 7375554b40..bd07af8a5e 100644 --- a/frontend/src/scenes/notebooks/Nodes/NotebookNodeLatex.tsx +++ b/frontend/src/scenes/notebooks/Nodes/NotebookNodeLatex.tsx @@ -3,10 +3,13 @@ import { RegisterHTMLHandler } from 'mathjax-full/js/handlers/html.js' import { TeX } from 'mathjax-full/js/input/tex.js' import { mathjax } from 'mathjax-full/js/mathjax.js' import { SVG } from 'mathjax-full/js/output/svg.js' -import { createPostHogWidgetNode } from 'scenes/notebooks/Nodes/NodeWrapper' import { useEffect, useRef, useState } from 'react' + import { LemonTextArea } from '@posthog/lemon-ui' -import { NotebookNodeProps, NotebookNodeType, CustomNotebookNodeAttributes } from '../types' + +import { createPostHogWidgetNode } from 'scenes/notebooks/Nodes/NodeWrapper' + +import { CustomNotebookNodeAttributes, NotebookNodeProps, NotebookNodeType } from '../types' RegisterHTMLHandler(browserAdaptor()) const tex = new TeX({ diff --git a/frontend/src/scenes/notebooks/Nodes/NotebookNodeMap.tsx b/frontend/src/scenes/notebooks/Nodes/NotebookNodeMap.tsx index b718d5a587..6dbfc32e55 100644 --- a/frontend/src/scenes/notebooks/Nodes/NotebookNodeMap.tsx +++ b/frontend/src/scenes/notebooks/Nodes/NotebookNodeMap.tsx @@ -1,14 +1,16 @@ +import { useValues } from 'kea' import { Marker } from 'maplibre-gl' +import { LemonSkeleton } from '@posthog/lemon-ui' + +import { NotFound } from 'lib/components/NotFound' import { createPostHogWidgetNode } from 'scenes/notebooks/Nodes/NodeWrapper' import { personLogic } from 'scenes/persons/personLogic' -import { useValues } from 'kea' -import { LemonSkeleton } from '@posthog/lemon-ui' -import { NotFound } from 'lib/components/NotFound' + import { Map } from '../../../lib/components/Map/Map' -import { notebookNodeLogic } from './notebookNodeLogic' -import { NotebookNodeEmptyState } from './components/NotebookNodeEmptyState' import { NotebookNodeProps, NotebookNodeType } from '../types' +import { NotebookNodeEmptyState } from './components/NotebookNodeEmptyState' +import { notebookNodeLogic } from './notebookNodeLogic' const Component = ({ attributes }: NotebookNodeProps): JSX.Element | null => { const { id } = attributes diff --git a/frontend/src/scenes/notebooks/Nodes/NotebookNodePerson.tsx b/frontend/src/scenes/notebooks/Nodes/NotebookNodePerson.tsx index 5285c8c1f3..be4cb06c88 100644 --- a/frontend/src/scenes/notebooks/Nodes/NotebookNodePerson.tsx +++ b/frontend/src/scenes/notebooks/Nodes/NotebookNodePerson.tsx @@ -1,21 +1,25 @@ -import { createPostHogWidgetNode } from 'scenes/notebooks/Nodes/NodeWrapper' -import { PropertyDefinitionType } from '~/types' -import { useActions, useValues } from 'kea' -import { LemonDivider, Tooltip } from '@posthog/lemon-ui' -import { urls } from 'scenes/urls' -import { PersonIcon } from 'scenes/persons/PersonDisplay' -import { TZLabel } from 'lib/components/TZLabel' -import { personLogic } from 'scenes/persons/personLogic' -import { PropertiesTable } from 'lib/components/PropertiesTable' -import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' -import { notebookNodeLogic } from './notebookNodeLogic' -import { asDisplay } from 'scenes/persons/person-utils' -import { useEffect } from 'react' -import { PropertyIcon } from 'lib/components/PropertyIcon/PropertyIcon' import clsx from 'clsx' -import { NodeKind } from '~/queries/schema/schema-general' +import { useActions, useValues } from 'kea' +import { useEffect } from 'react' + +import { LemonDivider, Tooltip } from '@posthog/lemon-ui' + import { NotFound } from 'lib/components/NotFound' +import { PropertiesTable } from 'lib/components/PropertiesTable' +import { PropertyIcon } from 'lib/components/PropertyIcon/PropertyIcon' +import { TZLabel } from 'lib/components/TZLabel' +import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' +import { createPostHogWidgetNode } from 'scenes/notebooks/Nodes/NodeWrapper' +import { PersonIcon } from 'scenes/persons/PersonDisplay' +import { asDisplay } from 'scenes/persons/person-utils' +import { personLogic } from 'scenes/persons/personLogic' +import { urls } from 'scenes/urls' + +import { NodeKind } from '~/queries/schema/schema-general' +import { PropertyDefinitionType } from '~/types' + import { NotebookNodeProps, NotebookNodeType } from '../types' +import { notebookNodeLogic } from './notebookNodeLogic' const Component = ({ attributes }: NotebookNodeProps): JSX.Element => { const { id } = attributes diff --git a/frontend/src/scenes/notebooks/Nodes/NotebookNodePersonFeed/EventIcon.tsx b/frontend/src/scenes/notebooks/Nodes/NotebookNodePersonFeed/EventIcon.tsx index 5fcae623ec..ad8f47ee50 100644 --- a/frontend/src/scenes/notebooks/Nodes/NotebookNodePersonFeed/EventIcon.tsx +++ b/frontend/src/scenes/notebooks/Nodes/NotebookNodePersonFeed/EventIcon.tsx @@ -1,5 +1,6 @@ import { IconCode, IconEye } from '@posthog/icons' import { Tooltip } from '@posthog/lemon-ui' + import { IconAdsClick, IconExclamation, IconEyeHidden } from 'lib/lemon-ui/icons' import { CORE_FILTER_DEFINITIONS_BY_GROUP } from '~/taxonomy/taxonomy' diff --git a/frontend/src/scenes/notebooks/Nodes/NotebookNodePersonFeed/NotebookNodePersonFeed.tsx b/frontend/src/scenes/notebooks/Nodes/NotebookNodePersonFeed/NotebookNodePersonFeed.tsx index 13e533dd21..e5565a71f6 100644 --- a/frontend/src/scenes/notebooks/Nodes/NotebookNodePersonFeed/NotebookNodePersonFeed.tsx +++ b/frontend/src/scenes/notebooks/Nodes/NotebookNodePersonFeed/NotebookNodePersonFeed.tsx @@ -1,13 +1,16 @@ -import { LemonSkeleton } from '@posthog/lemon-ui' import { useValues } from 'kea' + +import { LemonSkeleton } from '@posthog/lemon-ui' + import { NotFound } from 'lib/components/NotFound' +import { NotebookNodeProps, NotebookNodeType } from 'scenes/notebooks/types' import { personLogic } from 'scenes/persons/personLogic' -import { createPostHogWidgetNode } from '../NodeWrapper' -import { notebookNodePersonFeedLogic } from './notebookNodePersonFeedLogic' -import { Session } from './Session' import { PersonType } from '~/types' -import { NotebookNodeProps, NotebookNodeType } from 'scenes/notebooks/types' + +import { createPostHogWidgetNode } from '../NodeWrapper' +import { Session } from './Session' +import { notebookNodePersonFeedLogic } from './notebookNodePersonFeedLogic' const FeedSkeleton = (): JSX.Element => (
diff --git a/frontend/src/scenes/notebooks/Nodes/NotebookNodePersonFeed/Session.tsx b/frontend/src/scenes/notebooks/Nodes/NotebookNodePersonFeed/Session.tsx index 0e1173828b..b2e81d117c 100644 --- a/frontend/src/scenes/notebooks/Nodes/NotebookNodePersonFeed/Session.tsx +++ b/frontend/src/scenes/notebooks/Nodes/NotebookNodePersonFeed/Session.tsx @@ -1,13 +1,15 @@ +import { useActions, useValues } from 'kea' +import { useState } from 'react' + import { IconCollapse, IconExpand, IconRewindPlay } from '@posthog/icons' import { LemonButton } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { dayjs } from 'lib/dayjs' import { humanFriendlyDetailedTime, humanFriendlyDuration } from 'lib/utils' -import { useState } from 'react' +import { NotebookNodeType } from 'scenes/notebooks/types' import { notebookNodeLogic } from '../notebookNodeLogic' import { SessionEvent } from './SessionEvent' -import { NotebookNodeType } from 'scenes/notebooks/types' type SessionProps = { session: any // TimelineEntry diff --git a/frontend/src/scenes/notebooks/Nodes/NotebookNodePlaylist.tsx b/frontend/src/scenes/notebooks/Nodes/NotebookNodePlaylist.tsx index f70f583848..ea48e9178f 100644 --- a/frontend/src/scenes/notebooks/Nodes/NotebookNodePlaylist.tsx +++ b/frontend/src/scenes/notebooks/Nodes/NotebookNodePlaylist.tsx @@ -1,24 +1,28 @@ +import { BuiltLogic, useActions, useValues } from 'kea' +import { PostHogErrorBoundary } from 'posthog-js/react' +import { useEffect, useMemo } from 'react' + +import { IconComment } from '@posthog/icons' + +import { JSONContent } from 'lib/components/RichContentEditor/types' +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { createPostHogWidgetNode } from 'scenes/notebooks/Nodes/NodeWrapper' -import { FilterType, RecordingUniversalFilters, ReplayTabs } from '~/types' +import { RecordingsUniversalFiltersEmbed } from 'scenes/session-recordings/filters/RecordingsUniversalFiltersEmbed' +import { sessionRecordingPlayerLogic } from 'scenes/session-recordings/player/sessionRecordingPlayerLogic' +import { sessionRecordingPlayerLogicType } from 'scenes/session-recordings/player/sessionRecordingPlayerLogicType' +import { SessionRecordingsPlaylist } from 'scenes/session-recordings/playlist/SessionRecordingsPlaylist' import { DEFAULT_RECORDING_FILTERS, SessionRecordingPlaylistLogicProps, convertLegacyFiltersToUniversalFilters, sessionRecordingsPlaylistLogic, } from 'scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic' -import { BuiltLogic, useActions, useValues } from 'kea' -import { useEffect, useMemo } from 'react' import { urls } from 'scenes/urls' -import { notebookNodeLogic } from './notebookNodeLogic' -import { SessionRecordingsPlaylist } from 'scenes/session-recordings/playlist/SessionRecordingsPlaylist' -import { sessionRecordingPlayerLogic } from 'scenes/session-recordings/player/sessionRecordingPlayerLogic' -import { sessionRecordingPlayerLogicType } from 'scenes/session-recordings/player/sessionRecordingPlayerLogicType' -import { RecordingsUniversalFiltersEmbed } from 'scenes/session-recordings/filters/RecordingsUniversalFiltersEmbed' -import { PostHogErrorBoundary } from 'posthog-js/react' -import { IconComment } from '@posthog/icons' -import { JSONContent } from 'lib/components/RichContentEditor/types' + +import { FilterType, RecordingUniversalFilters, ReplayTabs } from '~/types' + import { NotebookNodeAttributeProperties, NotebookNodeProps, NotebookNodeType } from '../types' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' +import { notebookNodeLogic } from './notebookNodeLogic' const Component = ({ attributes, diff --git a/frontend/src/scenes/notebooks/Nodes/NotebookNodeProperties.tsx b/frontend/src/scenes/notebooks/Nodes/NotebookNodeProperties.tsx index c0fc896572..097d86c059 100644 --- a/frontend/src/scenes/notebooks/Nodes/NotebookNodeProperties.tsx +++ b/frontend/src/scenes/notebooks/Nodes/NotebookNodeProperties.tsx @@ -1,13 +1,17 @@ -import { PropertyDefinitionType } from '~/types' -import { createPostHogWidgetNode } from 'scenes/notebooks/Nodes/NodeWrapper' -import { LemonLabel, LemonSkeleton } from '@posthog/lemon-ui' -import { PropertyKeyInfo } from 'lib/components/PropertyKeyInfo' -import { PropertiesTable } from 'lib/components/PropertiesTable' import { useValues } from 'kea' -import { personLogic } from 'scenes/persons/personLogic' + +import { LemonLabel, LemonSkeleton } from '@posthog/lemon-ui' + import { NotFound } from 'lib/components/NotFound' -import { notebookNodeLogic } from './notebookNodeLogic' +import { PropertiesTable } from 'lib/components/PropertiesTable' +import { PropertyKeyInfo } from 'lib/components/PropertyKeyInfo' +import { createPostHogWidgetNode } from 'scenes/notebooks/Nodes/NodeWrapper' +import { personLogic } from 'scenes/persons/personLogic' + +import { PropertyDefinitionType } from '~/types' + import { NotebookNodeProps, NotebookNodeType } from '../types' +import { notebookNodeLogic } from './notebookNodeLogic' const Component = ({ attributes }: NotebookNodeProps): JSX.Element | null => { const { id } = attributes diff --git a/frontend/src/scenes/notebooks/Nodes/NotebookNodeQuery.tsx b/frontend/src/scenes/notebooks/Nodes/NotebookNodeQuery.tsx index 3479bf7027..fddc71a9a0 100644 --- a/frontend/src/scenes/notebooks/Nodes/NotebookNodeQuery.tsx +++ b/frontend/src/scenes/notebooks/Nodes/NotebookNodeQuery.tsx @@ -1,20 +1,23 @@ -import { Query } from '~/queries/Query/Query' -import { DataTableNode, InsightQueryNode, InsightVizNode, NodeKind, QuerySchema } from '~/queries/schema/schema-general' -import { createPostHogWidgetNode } from 'scenes/notebooks/Nodes/NodeWrapper' -import { InsightLogicProps, InsightShortId } from '~/types' +import { JSONContent } from '@tiptap/core' import { BindLogic, useActions, useMountedLogic, useValues } from 'kea' import { useEffect, useMemo } from 'react' -import { notebookNodeLogic } from './notebookNodeLogic' -import { containsHogQLQuery, isHogQLQuery, isInsightVizNode, isNodeWithSource } from '~/queries/utils' + import { LemonButton } from '@posthog/lemon-ui' -import { urls } from 'scenes/urls' import { insightDataLogic } from 'scenes/insights/insightDataLogic' import { insightLogic } from 'scenes/insights/insightLogic' -import { JSONContent } from '@tiptap/core' import { useSummarizeInsight } from 'scenes/insights/summarizeInsight' -import { SHORT_CODE_REGEX_MATCH_GROUPS } from './utils' +import { createPostHogWidgetNode } from 'scenes/notebooks/Nodes/NodeWrapper' +import { urls } from 'scenes/urls' + +import { Query } from '~/queries/Query/Query' +import { DataTableNode, InsightQueryNode, InsightVizNode, NodeKind, QuerySchema } from '~/queries/schema/schema-general' +import { containsHogQLQuery, isHogQLQuery, isInsightVizNode, isNodeWithSource } from '~/queries/utils' +import { InsightLogicProps, InsightShortId } from '~/types' + import { NotebookNodeAttributeProperties, NotebookNodeProps, NotebookNodeType } from '../types' +import { notebookNodeLogic } from './notebookNodeLogic' +import { SHORT_CODE_REGEX_MATCH_GROUPS } from './utils' const DEFAULT_QUERY: QuerySchema = { kind: NodeKind.DataTableNode, diff --git a/frontend/src/scenes/notebooks/Nodes/NotebookNodeRecording.tsx b/frontend/src/scenes/notebooks/Nodes/NotebookNodeRecording.tsx index 1192b6cce3..5cdfc90553 100644 --- a/frontend/src/scenes/notebooks/Nodes/NotebookNodeRecording.tsx +++ b/frontend/src/scenes/notebooks/Nodes/NotebookNodeRecording.tsx @@ -1,31 +1,35 @@ +import { useActions, useValues } from 'kea' +import { useEffect } from 'react' + +import { IconComment, IconPerson } from '@posthog/icons' +import { LemonSwitch } from '@posthog/lemon-ui' + +import { NotFound } from 'lib/components/NotFound' +import { JSONContent } from 'lib/components/RichContentEditor/types' +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' +import { createPostHogWidgetNode } from 'scenes/notebooks/Nodes/NodeWrapper' +import { asDisplay } from 'scenes/persons/person-utils' import { SessionRecordingPlayer, SessionRecordingPlayerProps, } from 'scenes/session-recordings/player/SessionRecordingPlayer' -import { createPostHogWidgetNode } from 'scenes/notebooks/Nodes/NodeWrapper' -import { SessionRecordingId } from '~/types' -import { urls } from 'scenes/urls' +import { sessionRecordingDataLogic } from 'scenes/session-recordings/player/sessionRecordingDataLogic' import { SessionRecordingPlayerMode, getCurrentPlayerTime, sessionRecordingPlayerLogic, } from 'scenes/session-recordings/player/sessionRecordingPlayerLogic' -import { useActions, useValues } from 'kea' -import { sessionRecordingDataLogic } from 'scenes/session-recordings/player/sessionRecordingDataLogic' -import { useEffect } from 'react' import { SessionRecordingPreview, SessionRecordingPreviewSkeleton, } from 'scenes/session-recordings/playlist/SessionRecordingPreview' -import { notebookNodeLogic } from './notebookNodeLogic' -import { LemonSwitch } from '@posthog/lemon-ui' -import { asDisplay } from 'scenes/persons/person-utils' -import { NotFound } from 'lib/components/NotFound' -import { IconComment, IconPerson } from '@posthog/icons' -import { UUID_REGEX_MATCH_GROUPS } from './utils' -import { JSONContent } from 'lib/components/RichContentEditor/types' +import { urls } from 'scenes/urls' + +import { SessionRecordingId } from '~/types' + import { NotebookNodeAttributeProperties, NotebookNodeProps, NotebookNodeType } from '../types' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' +import { notebookNodeLogic } from './notebookNodeLogic' +import { UUID_REGEX_MATCH_GROUPS } from './utils' const HEIGHT = 500 const MIN_HEIGHT = '20rem' diff --git a/frontend/src/scenes/notebooks/Nodes/NotebookNodeReplayTimestamp.tsx b/frontend/src/scenes/notebooks/Nodes/NotebookNodeReplayTimestamp.tsx index fb7d1da1e8..bf0b9b9af8 100644 --- a/frontend/src/scenes/notebooks/Nodes/NotebookNodeReplayTimestamp.tsx +++ b/frontend/src/scenes/notebooks/Nodes/NotebookNodeReplayTimestamp.tsx @@ -1,14 +1,18 @@ -import { mergeAttributes, Node, NodeViewProps } from '@tiptap/core' +import { Node, NodeViewProps, mergeAttributes } from '@tiptap/core' import { NodeViewWrapper, ReactNodeViewRenderer } from '@tiptap/react' -import { dayjs } from 'lib/dayjs' import clsx from 'clsx' -import { urls } from 'scenes/urls' -import { LemonButton } from '@posthog/lemon-ui' -import { notebookLogic } from '../Notebook/notebookLogic' import { useValues } from 'kea' import { useMemo } from 'react' -import { openNotebook } from '~/models/notebooksModel' + +import { LemonButton } from '@posthog/lemon-ui' + import { JSONContent } from 'lib/components/RichContentEditor/types' +import { dayjs } from 'lib/dayjs' +import { urls } from 'scenes/urls' + +import { openNotebook } from '~/models/notebooksModel' + +import { notebookLogic } from '../Notebook/notebookLogic' import { NotebookNodeType, NotebookTarget } from '../types' export interface NotebookNodeReplayTimestampAttrs { diff --git a/frontend/src/scenes/notebooks/Nodes/NotebookNodeSurvey.tsx b/frontend/src/scenes/notebooks/Nodes/NotebookNodeSurvey.tsx index 4e318c6f0c..ae81e58c85 100644 --- a/frontend/src/scenes/notebooks/Nodes/NotebookNodeSurvey.tsx +++ b/frontend/src/scenes/notebooks/Nodes/NotebookNodeSurvey.tsx @@ -1,22 +1,26 @@ -import { createPostHogWidgetNode } from 'scenes/notebooks/Nodes/NodeWrapper' -import { FeatureFlagBasicType, Survey } from '~/types' import { BindLogic, useActions, useValues } from 'kea' -import { IconSurveys } from 'lib/lemon-ui/icons' -import { LemonDivider } from '@posthog/lemon-ui' -import { urls } from 'scenes/urls' -import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' -import { notebookNodeLogic } from './notebookNodeLogic' -import { buildFlagContent } from './NotebookNodeFlag' -import { surveyLogic } from 'scenes/surveys/surveyLogic' -import { StatusTag } from 'scenes/surveys/Surveys' -import { SurveyResult } from 'scenes/surveys/SurveyView' -import { SurveyDisplaySummary } from 'scenes/surveys/Survey' import { useEffect } from 'react' + +import { LemonDivider } from '@posthog/lemon-ui' + import { NotFound } from 'lib/components/NotFound' -import { SurveyAppearancePreview } from 'scenes/surveys/SurveyAppearancePreview' -import { UUID_REGEX_MATCH_GROUPS } from './utils' import { JSONContent } from 'lib/components/RichContentEditor/types' +import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' +import { IconSurveys } from 'lib/lemon-ui/icons' +import { createPostHogWidgetNode } from 'scenes/notebooks/Nodes/NodeWrapper' +import { SurveyDisplaySummary } from 'scenes/surveys/Survey' +import { SurveyAppearancePreview } from 'scenes/surveys/SurveyAppearancePreview' +import { SurveyResult } from 'scenes/surveys/SurveyView' +import { StatusTag } from 'scenes/surveys/Surveys' +import { surveyLogic } from 'scenes/surveys/surveyLogic' +import { urls } from 'scenes/urls' + +import { FeatureFlagBasicType, Survey } from '~/types' + import { NotebookNodeProps, NotebookNodeType } from '../types' +import { buildFlagContent } from './NotebookNodeFlag' +import { notebookNodeLogic } from './notebookNodeLogic' +import { UUID_REGEX_MATCH_GROUPS } from './utils' const Component = ({ attributes }: NotebookNodeProps): JSX.Element => { const { id } = attributes diff --git a/frontend/src/scenes/notebooks/Nodes/components/NotebookNodeTitle.tsx b/frontend/src/scenes/notebooks/Nodes/components/NotebookNodeTitle.tsx index 61fb6d559f..9d3bb443b8 100644 --- a/frontend/src/scenes/notebooks/Nodes/components/NotebookNodeTitle.tsx +++ b/frontend/src/scenes/notebooks/Nodes/components/NotebookNodeTitle.tsx @@ -1,8 +1,10 @@ -import { LemonInput, Tooltip } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import posthog from 'posthog-js' import { KeyboardEvent } from 'react' import { useEffect, useState } from 'react' + +import { LemonInput, Tooltip } from '@posthog/lemon-ui' + import { notebookLogic } from 'scenes/notebooks/Notebook/notebookLogic' import { notebookNodeLogic } from '../notebookNodeLogic' diff --git a/frontend/src/scenes/notebooks/Nodes/notebookNodeLogic.ts b/frontend/src/scenes/notebooks/Nodes/notebookNodeLogic.ts index f40031ea2c..9e7c9504b0 100644 --- a/frontend/src/scenes/notebooks/Nodes/notebookNodeLogic.ts +++ b/frontend/src/scenes/notebooks/Nodes/notebookNodeLogic.ts @@ -1,8 +1,8 @@ import { + BuiltLogic, actions, afterMount, beforeUnmount, - BuiltLogic, connect, kea, key, @@ -12,11 +12,11 @@ import { reducers, selectors, } from 'kea' -import type { notebookNodeLogicType } from './notebookNodeLogicType' -import { notebookLogicType } from '../Notebook/notebookLogicType' import posthog from 'posthog-js' -import { NotebookNodeMessages, NotebookNodeMessagesListeners } from './messaging/notebook-node-messages' + import { JSONContent, RichContentNode } from 'lib/components/RichContentEditor/types' + +import { notebookLogicType } from '../Notebook/notebookLogicType' import { CustomNotebookNodeAttributes, NotebookNodeAction, @@ -26,6 +26,8 @@ import { NotebookNodeSettings, NotebookNodeType, } from '../types' +import { NotebookNodeMessages, NotebookNodeMessagesListeners } from './messaging/notebook-node-messages' +import type { notebookNodeLogicType } from './notebookNodeLogicType' export type NotebookNodeLogicProps = { nodeType: NotebookNodeType diff --git a/frontend/src/scenes/notebooks/Nodes/utils.test.tsx b/frontend/src/scenes/notebooks/Nodes/utils.test.tsx index 0b78bc6e98..d74d991ab3 100644 --- a/frontend/src/scenes/notebooks/Nodes/utils.test.tsx +++ b/frontend/src/scenes/notebooks/Nodes/utils.test.tsx @@ -1,14 +1,17 @@ +import { act, renderHook } from '@testing-library/react' import { NodeViewProps } from '@tiptap/core' + +import { urls } from 'scenes/urls' + +import { InsightShortId } from '~/types' + import { - createUrlRegex, INTEGER_REGEX_MATCH_GROUPS, SHORT_CODE_REGEX_MATCH_GROUPS, - useSyncedAttributes, UUID_REGEX_MATCH_GROUPS, + createUrlRegex, + useSyncedAttributes, } from './utils' -import { renderHook, act } from '@testing-library/react' -import { urls } from 'scenes/urls' -import { InsightShortId } from '~/types' describe('notebook node utils', () => { jest.useFakeTimers() diff --git a/frontend/src/scenes/notebooks/Nodes/utils.tsx b/frontend/src/scenes/notebooks/Nodes/utils.tsx index df2ecfe1db..3e2dc8b42d 100644 --- a/frontend/src/scenes/notebooks/Nodes/utils.tsx +++ b/frontend/src/scenes/notebooks/Nodes/utils.tsx @@ -1,9 +1,11 @@ import { ExtendedRegExpMatchArray, InputRule, NodeViewProps, PasteRule } from '@tiptap/core' -import posthog from 'posthog-js' import { NodeType } from '@tiptap/pm/model' +import posthog from 'posthog-js' import { useCallback, useMemo, useRef } from 'react' -import { tryJsonParse, uuid } from 'lib/utils' + import { TTEditor } from 'lib/components/RichContentEditor/types' +import { tryJsonParse, uuid } from 'lib/utils' + import { CustomNotebookNodeAttributes, NotebookNodeAttributes } from '../types' export const INTEGER_REGEX_MATCH_GROUPS = '([0-9]*)(.*)' diff --git a/frontend/src/scenes/notebooks/Notebook/DropAndPasteHandlerExtension.tsx b/frontend/src/scenes/notebooks/Notebook/DropAndPasteHandlerExtension.tsx index b69defcdd1..3a01cb5b84 100644 --- a/frontend/src/scenes/notebooks/Notebook/DropAndPasteHandlerExtension.tsx +++ b/frontend/src/scenes/notebooks/Notebook/DropAndPasteHandlerExtension.tsx @@ -1,9 +1,11 @@ -import { Extension } from '@tiptap/react' import { Plugin, PluginKey } from '@tiptap/pm/state' +import { Extension } from '@tiptap/react' import posthog from 'posthog-js' -import { NotebookNodeType } from '../types' + import { lemonToast } from '@posthog/lemon-ui' +import { NotebookNodeType } from '../types' + export const DropAndPasteHandlerExtension = Extension.create({ name: 'DropAndPasteHandlerExtension', diff --git a/frontend/src/scenes/notebooks/Notebook/Editor.tsx b/frontend/src/scenes/notebooks/Notebook/Editor.tsx index 7a36b8c366..a38135ef67 100644 --- a/frontend/src/scenes/notebooks/Notebook/Editor.tsx +++ b/frontend/src/scenes/notebooks/Notebook/Editor.tsx @@ -1,12 +1,23 @@ import ExtensionDocument from '@tiptap/extension-document' import { FloatingMenu } from '@tiptap/extension-floating-menu' -import { Placeholder } from '@tiptap/extensions' import { TaskItem, TaskList } from '@tiptap/extension-list' +import TableOfContents, { getHierarchicalIndexes } from '@tiptap/extension-table-of-contents' +import { Placeholder } from '@tiptap/extensions' import StarterKit from '@tiptap/starter-kit' import { useActions, useValues } from 'kea' -import { sampleOne, uuid } from 'lib/utils' import { useCallback, useMemo } from 'react' +import { IconComment } from '@posthog/icons' +import { LemonButton, LemonDivider } from '@posthog/lemon-ui' + +import { RichContentEditor } from 'lib/components/RichContentEditor' +import { RichContentNodeMention } from 'lib/components/RichContentEditor/RichContentNodeMention' +import { RichContentNode, TTEditor } from 'lib/components/RichContentEditor/types' +import { createEditor } from 'lib/components/RichContentEditor/utils' +import { useFeatureFlag } from 'lib/hooks/useFeatureFlag' +import { sampleOne, uuid } from 'lib/utils' + +import { MentionsExtension } from '../../../lib/components/RichContentEditor/MentionsExtension' import { NotebookMarkComment } from '../Marks/NotebookMarkComment' import { NotebookMarkLink } from '../Marks/NotebookMarkLink' import { NotebookNodeBacklink } from '../Nodes/NotebookNodeBacklink' @@ -30,21 +41,12 @@ import { NotebookNodeReplayTimestamp } from '../Nodes/NotebookNodeReplayTimestam import { NotebookNodeSurvey } from '../Nodes/NotebookNodeSurvey' import { FloatingSuggestions } from '../Suggestions/FloatingSuggestions' import { insertionSuggestionsLogic } from '../Suggestions/insertionSuggestionsLogic' -import { InlineMenu } from './InlineMenu' -import { MentionsExtension } from '../../../lib/components/RichContentEditor/MentionsExtension' -import { notebookLogic } from './notebookLogic' -import { SlashCommandsExtension } from './SlashCommands' -import TableOfContents, { getHierarchicalIndexes } from '@tiptap/extension-table-of-contents' -import { RichContentNodeMention } from 'lib/components/RichContentEditor/RichContentNodeMention' -import { createEditor } from 'lib/components/RichContentEditor/utils' -import { textContent } from '../utils' -import { RichContentNode, TTEditor } from 'lib/components/RichContentEditor/types' -import { RichContentEditor } from 'lib/components/RichContentEditor' -import { LemonButton, LemonDivider } from '@posthog/lemon-ui' import { NotebookEditor } from '../types' -import { useFeatureFlag } from 'lib/hooks/useFeatureFlag' -import { IconComment } from '@posthog/icons' +import { textContent } from '../utils' import { DropAndPasteHandlerExtension } from './DropAndPasteHandlerExtension' +import { InlineMenu } from './InlineMenu' +import { SlashCommandsExtension } from './SlashCommands' +import { notebookLogic } from './notebookLogic' const CustomDocument = ExtensionDocument.extend({ content: 'heading block*', diff --git a/frontend/src/scenes/notebooks/Notebook/InlineMenu.tsx b/frontend/src/scenes/notebooks/Notebook/InlineMenu.tsx index b453bc1c2e..b04e1fa876 100644 --- a/frontend/src/scenes/notebooks/Notebook/InlineMenu.tsx +++ b/frontend/src/scenes/notebooks/Notebook/InlineMenu.tsx @@ -1,15 +1,17 @@ -import { IconTrash } from '@posthog/icons' -import { LemonButton, LemonDivider, LemonInput } from '@posthog/lemon-ui' import { isTextSelection } from '@tiptap/core' import { BubbleMenu } from '@tiptap/react/menus' import { useValues } from 'kea' -import { IconBold, IconItalic, IconLink, IconOpenInNew } from 'lib/lemon-ui/icons' -import { isURL } from 'lib/utils' import { useRef } from 'react' -import NotebookIconHeading from './NotebookIconHeading' +import { IconTrash } from '@posthog/icons' +import { LemonButton, LemonDivider, LemonInput } from '@posthog/lemon-ui' + import { richContentEditorLogic } from 'lib/components/RichContentEditor/richContentEditorLogic' import { RichContentEditorType } from 'lib/components/RichContentEditor/types' +import { IconBold, IconItalic, IconLink, IconOpenInNew } from 'lib/lemon-ui/icons' +import { isURL } from 'lib/utils' + +import NotebookIconHeading from './NotebookIconHeading' export const InlineMenu = ({ extra = () => null, diff --git a/frontend/src/scenes/notebooks/Notebook/Notebook.stories.tsx b/frontend/src/scenes/notebooks/Notebook/Notebook.stories.tsx index 268aebb66a..5f8a8ad679 100644 --- a/frontend/src/scenes/notebooks/Notebook/Notebook.stories.tsx +++ b/frontend/src/scenes/notebooks/Notebook/Notebook.stories.tsx @@ -1,12 +1,13 @@ import { Meta, StoryObj } from '@storybook/react' + import { App } from 'scenes/App' import { urls } from 'scenes/urls' import { mswDecorator } from '~/mocks/browser' +import { NotebookType } from '../types' import notebook12345Json from './__mocks__/notebook-12345.json' import { notebookTestTemplate } from './__mocks__/notebook-template-for-snapshot' -import { NotebookType } from '../types' // a list of test cases to run, showing different types of content in notebooks const testCases: Record = { diff --git a/frontend/src/scenes/notebooks/Notebook/Notebook.tsx b/frontend/src/scenes/notebooks/Notebook/Notebook.tsx index 12392c2530..6b4ff05c51 100644 --- a/frontend/src/scenes/notebooks/Notebook/Notebook.tsx +++ b/frontend/src/scenes/notebooks/Notebook/Notebook.tsx @@ -2,12 +2,15 @@ import './Notebook.scss' import clsx from 'clsx' import { BindLogic, useActions, useValues } from 'kea' +import { useEffect } from 'react' + import { NotFound } from 'lib/components/NotFound' +import { EditorFocusPosition, JSONContent } from 'lib/components/RichContentEditor/types' +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { useResizeBreakpoints } from 'lib/hooks/useResizeObserver' import { useWhyDidIRender } from 'lib/hooks/useWhyDidIRender' import { LemonBanner } from 'lib/lemon-ui/LemonBanner' -import { useEffect } from 'react' -import { notebookLogic, NotebookLogicProps } from 'scenes/notebooks/Notebook/notebookLogic' +import { NotebookLogicProps, notebookLogic } from 'scenes/notebooks/Notebook/notebookLogic' import { ErrorBoundary } from '~/layout/ErrorBoundary' import { SCRATCHPAD_NOTEBOOK } from '~/models/notebooksModel' @@ -19,8 +22,6 @@ import { NotebookConflictWarning } from './NotebookConflictWarning' import { NotebookHistoryWarning } from './NotebookHistory' import { NotebookLoadingState } from './NotebookLoadingState' import { notebookSettingsLogic } from './notebookSettingsLogic' -import { EditorFocusPosition, JSONContent } from 'lib/components/RichContentEditor/types' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' export type NotebookProps = NotebookLogicProps & { initialAutofocus?: EditorFocusPosition diff --git a/frontend/src/scenes/notebooks/Notebook/NotebookColumnLeft.tsx b/frontend/src/scenes/notebooks/Notebook/NotebookColumnLeft.tsx index ea8f39301e..737fca823b 100644 --- a/frontend/src/scenes/notebooks/Notebook/NotebookColumnLeft.tsx +++ b/frontend/src/scenes/notebooks/Notebook/NotebookColumnLeft.tsx @@ -1,16 +1,18 @@ -import { LemonButton } from '@posthog/lemon-ui' import clsx from 'clsx' import { BindLogic, BuiltLogic, useActions, useValues } from 'kea' -import { LemonWidget } from 'lib/lemon-ui/LemonWidget' import { useEffect, useRef, useState } from 'react' +import { LemonButton } from '@posthog/lemon-ui' + +import { LemonWidget } from 'lib/lemon-ui/LemonWidget' + import { ErrorBoundary } from '~/layout/ErrorBoundary' import { notebookNodeLogic } from '../Nodes/notebookNodeLogic' import { notebookNodeLogicType } from '../Nodes/notebookNodeLogicType' import { NotebookHistory } from './NotebookHistory' -import { notebookLogic } from './notebookLogic' import { NotebookTableOfContents } from './NotebookTableOfContents' +import { notebookLogic } from './notebookLogic' export const NotebookColumnLeft = (): JSX.Element | null => { const { editingNodeLogic, isShowingLeftColumn, showHistory, showTableOfContents } = useValues(notebookLogic) diff --git a/frontend/src/scenes/notebooks/Notebook/NotebookColumnRight.tsx b/frontend/src/scenes/notebooks/Notebook/NotebookColumnRight.tsx index 8230450376..b480437eaa 100644 --- a/frontend/src/scenes/notebooks/Notebook/NotebookColumnRight.tsx +++ b/frontend/src/scenes/notebooks/Notebook/NotebookColumnRight.tsx @@ -1,5 +1,6 @@ import clsx from 'clsx' import { BuiltLogic, useValues } from 'kea' + import { uuid } from 'lib/utils' import { NotebookNodeChildRenderer } from '../Nodes/NodeWrapper' diff --git a/frontend/src/scenes/notebooks/Notebook/NotebookConflictWarning.tsx b/frontend/src/scenes/notebooks/Notebook/NotebookConflictWarning.tsx index c74fc4e1f9..2c8106c709 100644 --- a/frontend/src/scenes/notebooks/Notebook/NotebookConflictWarning.tsx +++ b/frontend/src/scenes/notebooks/Notebook/NotebookConflictWarning.tsx @@ -1,4 +1,5 @@ import { useActions } from 'kea' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { notebookLogic } from './notebookLogic' diff --git a/frontend/src/scenes/notebooks/Notebook/NotebookHistory.tsx b/frontend/src/scenes/notebooks/Notebook/NotebookHistory.tsx index 17f9814d0e..4935e1519e 100644 --- a/frontend/src/scenes/notebooks/Notebook/NotebookHistory.tsx +++ b/frontend/src/scenes/notebooks/Notebook/NotebookHistory.tsx @@ -1,19 +1,21 @@ +import { JSONContent } from '@tiptap/core' +import { useActions, useValues } from 'kea' +import { useMemo } from 'react' + import { LemonBanner, LemonButton, LemonSkeleton, - lemonToast, LemonWidget, PaginationControl, ProfilePicture, + lemonToast, usePagination, } from '@posthog/lemon-ui' -import { JSONContent } from '@tiptap/core' -import { useActions, useValues } from 'kea' + import { activityLogLogic } from 'lib/components/ActivityLog/activityLogLogic' import { ActivityLogItem, userNameForLogItem } from 'lib/components/ActivityLog/humanizeActivity' import { TZLabel } from 'lib/components/TZLabel' -import { useMemo } from 'react' import { ActivityScope } from '~/types' diff --git a/frontend/src/scenes/notebooks/Notebook/NotebookListMini.tsx b/frontend/src/scenes/notebooks/Notebook/NotebookListMini.tsx index 0618982678..72b0938763 100644 --- a/frontend/src/scenes/notebooks/Notebook/NotebookListMini.tsx +++ b/frontend/src/scenes/notebooks/Notebook/NotebookListMini.tsx @@ -1,6 +1,7 @@ -import { LemonButton } from '@posthog/lemon-ui' import { useValues } from 'kea' +import { LemonButton } from '@posthog/lemon-ui' + import { notebooksModel } from '~/models/notebooksModel' import { NotebookSelectPopover } from '../NotebookSelectButton/NotebookSelectButton' diff --git a/frontend/src/scenes/notebooks/Notebook/NotebookMeta.tsx b/frontend/src/scenes/notebooks/Notebook/NotebookMeta.tsx index 89f8b768c6..2ee603ad52 100644 --- a/frontend/src/scenes/notebooks/Notebook/NotebookMeta.tsx +++ b/frontend/src/scenes/notebooks/Notebook/NotebookMeta.tsx @@ -1,14 +1,16 @@ -import { LemonButton, LemonButtonProps, LemonTag } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' -import { IconDocumentExpand } from 'lib/lemon-ui/icons' -import { Spinner } from 'lib/lemon-ui/Spinner' -import { Tooltip } from 'lib/lemon-ui/Tooltip' import { useCallback, useEffect, useState } from 'react' -import { notebookLogic, NotebookLogicProps } from './notebookLogic' -import { notebookSettingsLogic } from './notebookSettingsLogic' import { IconBook } from '@posthog/icons' +import { LemonButton, LemonButtonProps, LemonTag } from '@posthog/lemon-ui' + +import { Spinner } from 'lib/lemon-ui/Spinner' +import { Tooltip } from 'lib/lemon-ui/Tooltip' +import { IconDocumentExpand } from 'lib/lemon-ui/icons' + import { NotebookSyncStatus } from '../types' +import { NotebookLogicProps, notebookLogic } from './notebookLogic' +import { notebookSettingsLogic } from './notebookSettingsLogic' const syncStatusMap: Record = { synced: { diff --git a/frontend/src/scenes/notebooks/Notebook/NotebookShareModal.tsx b/frontend/src/scenes/notebooks/Notebook/NotebookShareModal.tsx index 64a302b3cc..bd9141ec9d 100644 --- a/frontend/src/scenes/notebooks/Notebook/NotebookShareModal.tsx +++ b/frontend/src/scenes/notebooks/Notebook/NotebookShareModal.tsx @@ -1,11 +1,13 @@ +import { useActions, useValues } from 'kea' +import posthog from 'posthog-js' +import { useState } from 'react' + import { IconCopy } from '@posthog/icons' import { LemonBanner, LemonButton, LemonDivider, LemonModal } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { SHARING_MODAL_WIDTH } from 'lib/components/Sharing/SharingModal' import { base64Encode } from 'lib/utils' import { copyToClipboard } from 'lib/utils/copyToClipboard' -import posthog from 'posthog-js' -import { useState } from 'react' import { urls } from 'scenes/urls' import { AccessControlPopoutCTA } from '~/layout/navigation-3000/sidepanel/panels/access_control/AccessControlPopoutCTA' diff --git a/frontend/src/scenes/notebooks/Notebook/NotebookTableOfContents.tsx b/frontend/src/scenes/notebooks/Notebook/NotebookTableOfContents.tsx index acd4709ad2..f3902e2478 100644 --- a/frontend/src/scenes/notebooks/Notebook/NotebookTableOfContents.tsx +++ b/frontend/src/scenes/notebooks/Notebook/NotebookTableOfContents.tsx @@ -1,6 +1,8 @@ import { useActions, useValues } from 'kea' -import { notebookLogic } from './notebookLogic' + import { LemonWidget, Link } from '@posthog/lemon-ui' + +import { notebookLogic } from './notebookLogic' import { notebookSettingsLogic } from './notebookSettingsLogic' export function NotebookTableOfContents(): JSX.Element { diff --git a/frontend/src/scenes/notebooks/Notebook/SlashCommands.tsx b/frontend/src/scenes/notebooks/Notebook/SlashCommands.tsx index 42fc13b8c7..92cdc4f0e9 100644 --- a/frontend/src/scenes/notebooks/Notebook/SlashCommands.tsx +++ b/frontend/src/scenes/notebooks/Notebook/SlashCommands.tsx @@ -1,3 +1,10 @@ +import { Extension } from '@tiptap/core' +import { ReactRenderer } from '@tiptap/react' +import Suggestion from '@tiptap/suggestion' +import Fuse from 'fuse.js' +import { useValues } from 'kea' +import { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useState } from 'react' + import { IconCursor, IconFunnels, @@ -15,17 +22,13 @@ import { } from '@posthog/icons' import { IconCode } from '@posthog/icons' import { LemonButton, LemonDivider, lemonToast } from '@posthog/lemon-ui' -import { Extension } from '@tiptap/core' -import { ReactRenderer } from '@tiptap/react' -import Suggestion from '@tiptap/suggestion' -import Fuse from 'fuse.js' -import { useValues } from 'kea' + +import { EditorCommands, EditorRange } from 'lib/components/RichContentEditor/types' import { FEATURE_FLAGS } from 'lib/constants' -import { IconBold, IconItalic } from 'lib/lemon-ui/icons' import { Popover } from 'lib/lemon-ui/Popover' +import { IconBold, IconItalic } from 'lib/lemon-ui/icons' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { selectFiles } from 'lib/utils/file-utils' -import { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useState } from 'react' import { KeyboardShortcut } from '~/layout/navigation-3000/components/KeyboardShortcut' import { defaultDataTableColumns } from '~/queries/nodes/DataTable/utils' @@ -34,10 +37,9 @@ import { BaseMathType, ChartDisplayType, FunnelVizType, PathType, RetentionPerio import { buildNodeEmbed } from '../Nodes/NotebookNodeEmbed' import { buildInsightVizQueryContent, buildNodeQueryContent } from '../Nodes/NotebookNodeQuery' +import { NotebookNodeType } from '../types' import NotebookIconHeading from './NotebookIconHeading' import { notebookLogic } from './notebookLogic' -import { EditorCommands, EditorRange } from 'lib/components/RichContentEditor/types' -import { NotebookNodeType } from '../types' type SlashCommandConditionalProps = | { diff --git a/frontend/src/scenes/notebooks/Notebook/__mocks__/notebook-template-for-snapshot.ts b/frontend/src/scenes/notebooks/Notebook/__mocks__/notebook-template-for-snapshot.ts index d5c8f649c7..090d9ed9f7 100644 --- a/frontend/src/scenes/notebooks/Notebook/__mocks__/notebook-template-for-snapshot.ts +++ b/frontend/src/scenes/notebooks/Notebook/__mocks__/notebook-template-for-snapshot.ts @@ -1,4 +1,5 @@ import { MOCK_DEFAULT_BASIC_USER } from 'lib/api.mock' + import { JSONContent } from 'lib/components/RichContentEditor/types' import { NotebookType } from 'scenes/notebooks/types' diff --git a/frontend/src/scenes/notebooks/Notebook/migrations/migrate.test.ts b/frontend/src/scenes/notebooks/Notebook/migrations/migrate.test.ts index 2208093c35..240404c78e 100644 --- a/frontend/src/scenes/notebooks/Notebook/migrations/migrate.test.ts +++ b/frontend/src/scenes/notebooks/Notebook/migrations/migrate.test.ts @@ -1,11 +1,12 @@ +import { JSONContent } from 'lib/components/RichContentEditor/types' +import { NotebookType } from 'scenes/notebooks/types' + +import { useMocks } from '~/mocks/jest' +import { initKeaTests } from '~/test/init' import { AccessControlLevel } from '~/types' import mockNotebook from '../__mocks__/notebook-12345.json' import { migrate } from './migrate' -import { initKeaTests } from '~/test/init' -import { useMocks } from '~/mocks/jest' -import { JSONContent } from 'lib/components/RichContentEditor/types' -import { NotebookType } from 'scenes/notebooks/types' describe('migrate()', () => { beforeEach(() => { diff --git a/frontend/src/scenes/notebooks/Notebook/migrations/migrate.ts b/frontend/src/scenes/notebooks/Notebook/migrations/migrate.ts index 411721e20a..e28aa1d434 100644 --- a/frontend/src/scenes/notebooks/Notebook/migrations/migrate.ts +++ b/frontend/src/scenes/notebooks/Notebook/migrations/migrate.ts @@ -1,4 +1,5 @@ import { JSONContent } from '@tiptap/core' + import api from 'lib/api' import { isEmptyObject } from 'lib/utils' import { NotebookNodePlaylistAttributes } from 'scenes/notebooks/Nodes/NotebookNodePlaylist' diff --git a/frontend/src/scenes/notebooks/Notebook/notebookActivityDescriber.tsx b/frontend/src/scenes/notebooks/Notebook/notebookActivityDescriber.tsx index 1756eb91c2..b95daf0e0e 100644 --- a/frontend/src/scenes/notebooks/Notebook/notebookActivityDescriber.tsx +++ b/frontend/src/scenes/notebooks/Notebook/notebookActivityDescriber.tsx @@ -1,13 +1,13 @@ +import { SentenceList } from 'lib/components/ActivityLog/SentenceList' import { ActivityChange, ActivityLogItem, ChangeMapping, - defaultDescriber, Description, HumanizedChange, + defaultDescriber, userNameForLogItem, } from 'lib/components/ActivityLog/humanizeActivity' -import { SentenceList } from 'lib/components/ActivityLog/SentenceList' import { Link } from 'lib/lemon-ui/Link' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/notebooks/Notebook/notebookLogic.ts b/frontend/src/scenes/notebooks/Notebook/notebookLogic.ts index 7c1add44e8..82ffc6ec93 100644 --- a/frontend/src/scenes/notebooks/Notebook/notebookLogic.ts +++ b/frontend/src/scenes/notebooks/Notebook/notebookLogic.ts @@ -1,39 +1,41 @@ -import { lemonToast } from '@posthog/lemon-ui' -import { actions, beforeUnmount, BuiltLogic, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' +import { BuiltLogic, actions, beforeUnmount, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { router, urlToAction } from 'kea-router' import { subscriptions } from 'kea-subscriptions' -import api from 'lib/api' -import { base64Decode, base64Encode, downloadFile, slugify } from 'lib/utils' import posthog from 'posthog-js' + +import { lemonToast } from '@posthog/lemon-ui' + +import api from 'lib/api' +import { accessLevelSatisfied } from 'lib/components/AccessControlAction' +import { EditorRange, JSONContent } from 'lib/components/RichContentEditor/types' +import { base64Decode, base64Encode, downloadFile, slugify } from 'lib/utils' import { commentsLogic } from 'scenes/comments/commentsLogic' import { - buildTimestampCommentContent, NotebookNodeReplayTimestampAttrs, + buildTimestampCommentContent, } from 'scenes/notebooks/Nodes/NotebookNodeReplayTimestamp' import { urls } from 'scenes/urls' import { sidePanelStateLogic } from '~/layout/navigation-3000/sidepanel/sidePanelStateLogic' import { refreshTreeItem } from '~/layout/panel-layout/ProjectTree/projectTreeLogic' -import { notebooksModel, openNotebook, SCRATCHPAD_NOTEBOOK } from '~/models/notebooksModel' +import { SCRATCHPAD_NOTEBOOK, notebooksModel, openNotebook } from '~/models/notebooksModel' import { AccessControlLevel, AccessControlResourceType, ActivityScope, CommentType, SidePanelTab } from '~/types' import { notebookNodeLogicType } from '../Nodes/notebookNodeLogicType' -import { migrate, NOTEBOOKS_VERSION } from './migrations/migrate' -import type { notebookLogicType } from './notebookLogicType' -import { notebookSettingsLogic } from './notebookSettingsLogic' -import { accessLevelSatisfied } from 'lib/components/AccessControlAction' -import { EditorRange, JSONContent } from 'lib/components/RichContentEditor/types' // NOTE: Annoyingly, if we import this then kea logic type-gen generates // two imports and fails so, we reimport it from the types file import { - NotebookTarget, - NotebookNodeType, NotebookEditor, - NotebookType, + NotebookNodeType, NotebookSyncStatus, + NotebookTarget, + NotebookType, TableOfContentData, } from '../types' +import { NOTEBOOKS_VERSION, migrate } from './migrations/migrate' +import type { notebookLogicType } from './notebookLogicType' +import { notebookSettingsLogic } from './notebookSettingsLogic' const SYNC_DELAY = 1000 const NOTEBOOK_REFRESH_MS = window.location.origin === 'http://localhost:8000' ? 5000 : 30000 diff --git a/frontend/src/scenes/notebooks/NotebookCanvasScene.tsx b/frontend/src/scenes/notebooks/NotebookCanvasScene.tsx index db78d79b3e..62797bd3ef 100644 --- a/frontend/src/scenes/notebooks/NotebookCanvasScene.tsx +++ b/frontend/src/scenes/notebooks/NotebookCanvasScene.tsx @@ -1,17 +1,19 @@ import './NotebookScene.scss' +import { useActions } from 'kea' +import { useMemo } from 'react' + import { IconEllipsis } from '@posthog/icons' import { LemonBanner, LemonButton, LemonMenu, lemonToast } from '@posthog/lemon-ui' -import { useActions } from 'kea' + import { PageHeader } from 'lib/components/PageHeader' import { uuid } from 'lib/utils' import { copyToClipboard } from 'lib/utils/copyToClipboard' import { getTextFromFile, selectFiles } from 'lib/utils/file-utils' -import { useMemo } from 'react' import { SceneExport } from 'scenes/sceneTypes' import { Notebook } from './Notebook/Notebook' -import { notebookLogic, NotebookLogicProps } from './Notebook/notebookLogic' +import { NotebookLogicProps, notebookLogic } from './Notebook/notebookLogic' export const scene: SceneExport = { component: NotebookCanvas, diff --git a/frontend/src/scenes/notebooks/NotebookMenu.tsx b/frontend/src/scenes/notebooks/NotebookMenu.tsx index 271fa6a596..5b1913f4a9 100644 --- a/frontend/src/scenes/notebooks/NotebookMenu.tsx +++ b/frontend/src/scenes/notebooks/NotebookMenu.tsx @@ -1,18 +1,20 @@ import './NotebookScene.scss' +import { useActions, useValues } from 'kea' +import { router } from 'kea-router' + import { IconClock, IconDownload, IconEllipsis, IconShare, IconTrash } from '@posthog/icons' import { LemonButton } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' -import { router } from 'kea-router' + +import { accessLevelSatisfied } from 'lib/components/AccessControlAction' import { LemonMenu } from 'lib/lemon-ui/LemonMenu' import { urls } from 'scenes/urls' import { notebooksModel } from '~/models/notebooksModel' - -import { notebookLogic, NotebookLogicProps } from './Notebook/notebookLogic' -import { accessLevelSatisfied } from 'lib/components/AccessControlAction' import { AccessControlResourceType } from '~/types' +import { NotebookLogicProps, notebookLogic } from './Notebook/notebookLogic' + export function NotebookMenu({ shortId }: NotebookLogicProps): JSX.Element { const { notebook, showHistory, isLocalOnly } = useValues(notebookLogic({ shortId })) const { openShareModal } = useActions(notebookLogic({ shortId })) diff --git a/frontend/src/scenes/notebooks/NotebookPanel/NotebookPanel.tsx b/frontend/src/scenes/notebooks/NotebookPanel/NotebookPanel.tsx index a79c9c8a5b..9e444a83bb 100644 --- a/frontend/src/scenes/notebooks/NotebookPanel/NotebookPanel.tsx +++ b/frontend/src/scenes/notebooks/NotebookPanel/NotebookPanel.tsx @@ -1,22 +1,24 @@ import './NotebookPanel.scss' +import { useActions, useValues } from 'kea' +import { useMemo } from 'react' + import { IconExternal } from '@posthog/icons' import { LemonButton } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { useResizeBreakpoints } from 'lib/hooks/useResizeObserver' -import { useMemo } from 'react' import { urls } from 'scenes/urls' import { SidePanelPaneHeader } from '~/layout/navigation-3000/sidepanel/components/SidePanelPaneHeader' import { Notebook } from '../Notebook/Notebook' import { NotebookListMini } from '../Notebook/NotebookListMini' -import { notebookLogic } from '../Notebook/notebookLogic' import { NotebookExpandButton, NotebookSyncInfo } from '../Notebook/NotebookMeta' +import { notebookLogic } from '../Notebook/notebookLogic' import { NotebookMenu } from '../NotebookMenu' +import { NotebookTarget } from '../types' import { NotebookPanelDropzone } from './NotebookPanelDropzone' import { notebookPanelLogic } from './notebookPanelLogic' -import { NotebookTarget } from '../types' export function NotebookPanel(): JSX.Element | null { const { selectedNotebook, initialAutofocus, droppedResource, dropProperties } = useValues(notebookPanelLogic) diff --git a/frontend/src/scenes/notebooks/NotebookPanel/NotebookPanelDropzone.tsx b/frontend/src/scenes/notebooks/NotebookPanel/NotebookPanelDropzone.tsx index c6421de13c..526eaaf77c 100644 --- a/frontend/src/scenes/notebooks/NotebookPanel/NotebookPanelDropzone.tsx +++ b/frontend/src/scenes/notebooks/NotebookPanel/NotebookPanelDropzone.tsx @@ -1,12 +1,13 @@ -import { LemonButton } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' import { DragEventHandler, useState } from 'react' +import { LemonButton } from '@posthog/lemon-ui' + import { notebookLogicType } from '../Notebook/notebookLogicType' import { NotebookSelectList } from '../NotebookSelectButton/NotebookSelectButton' -import { notebookPanelLogic } from './notebookPanelLogic' import { NotebookNodeType } from '../types' +import { notebookPanelLogic } from './notebookPanelLogic' export function NotebookPanelDropzone(): JSX.Element | null { const [isDragActive, setIsDragActive] = useState(false) diff --git a/frontend/src/scenes/notebooks/NotebookPanel/notebookPanelLogic.ts b/frontend/src/scenes/notebooks/NotebookPanel/notebookPanelLogic.ts index dfc5e7d6ed..058aef3b8b 100644 --- a/frontend/src/scenes/notebooks/NotebookPanel/notebookPanelLogic.ts +++ b/frontend/src/scenes/notebooks/NotebookPanel/notebookPanelLogic.ts @@ -1,13 +1,14 @@ import { actions, connect, kea, listeners, path, reducers, selectors } from 'kea' -import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { HTMLProps } from 'react' +import { EditorFocusPosition } from 'lib/components/RichContentEditor/types' +import { featureFlagLogic } from 'lib/logic/featureFlagLogic' + import { sidePanelStateLogic } from '~/layout/navigation-3000/sidepanel/sidePanelStateLogic' import { SidePanelTab } from '~/types' -import type { notebookPanelLogicType } from './notebookPanelLogicType' -import { EditorFocusPosition } from 'lib/components/RichContentEditor/types' import { NotebookNodeResource } from '../types' +import type { notebookPanelLogicType } from './notebookPanelLogicType' export const notebookPanelLogic = kea([ path(['scenes', 'notebooks', 'Notebook', 'notebookPanelLogic']), diff --git a/frontend/src/scenes/notebooks/NotebookScene.tsx b/frontend/src/scenes/notebooks/NotebookScene.tsx index cc18c44cc8..ad65017b8b 100644 --- a/frontend/src/scenes/notebooks/NotebookScene.tsx +++ b/frontend/src/scenes/notebooks/NotebookScene.tsx @@ -1,23 +1,25 @@ import './NotebookScene.scss' +import { useActions, useValues } from 'kea' +import { useEffect } from 'react' + import { IconInfo, IconOpenSidebar } from '@posthog/icons' import { LemonButton, LemonTag } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { AccessDenied } from 'lib/components/AccessDenied' import { NotFound } from 'lib/components/NotFound' import { UserActivityIndicator } from 'lib/components/UserActivityIndicator/UserActivityIndicator' -import { useEffect } from 'react' import { SceneExport } from 'scenes/sceneTypes' import { Notebook } from './Notebook/Notebook' import { NotebookLoadingState } from './Notebook/NotebookLoadingState' -import { notebookLogic } from './Notebook/notebookLogic' import { NotebookExpandButton, NotebookSyncInfo, NotebookTableOfContentsButton } from './Notebook/NotebookMeta' import { NotebookShareModal } from './Notebook/NotebookShareModal' +import { notebookLogic } from './Notebook/notebookLogic' import { NotebookMenu } from './NotebookMenu' import { notebookPanelLogic } from './NotebookPanel/notebookPanelLogic' -import { notebookSceneLogic, NotebookSceneLogicProps } from './notebookSceneLogic' import { LOCAL_NOTEBOOK_TEMPLATES } from './NotebookTemplates/notebookTemplates' +import { NotebookSceneLogicProps, notebookSceneLogic } from './notebookSceneLogic' import { NotebookTarget } from './types' interface NotebookSceneProps { diff --git a/frontend/src/scenes/notebooks/NotebookSelectButton/NotebookSelectButton.stories.tsx b/frontend/src/scenes/notebooks/NotebookSelectButton/NotebookSelectButton.stories.tsx index 2268986df0..f028a23769 100644 --- a/frontend/src/scenes/notebooks/NotebookSelectButton/NotebookSelectButton.stories.tsx +++ b/frontend/src/scenes/notebooks/NotebookSelectButton/NotebookSelectButton.stories.tsx @@ -1,7 +1,9 @@ import { Meta, StoryFn } from '@storybook/react' + import { NotebookSelectButton } from 'scenes/notebooks/NotebookSelectButton/NotebookSelectButton' import { useStorybookMocks } from '~/mocks/browser' + import { NotebookNodeType } from '../types' export default { diff --git a/frontend/src/scenes/notebooks/NotebookSelectButton/NotebookSelectButton.tsx b/frontend/src/scenes/notebooks/NotebookSelectButton/NotebookSelectButton.tsx index 94cacd10d0..85f4fd7c1d 100644 --- a/frontend/src/scenes/notebooks/NotebookSelectButton/NotebookSelectButton.tsx +++ b/frontend/src/scenes/notebooks/NotebookSelectButton/NotebookSelectButton.tsx @@ -1,18 +1,20 @@ +import { BuiltLogic, useActions, useValues } from 'kea' +import { ReactChild, ReactElement, useEffect } from 'react' + import { IconNotebook, IconPlus } from '@posthog/icons' import { LemonDivider, LemonDropdown, ProfilePicture } from '@posthog/lemon-ui' -import { BuiltLogic, useActions, useValues } from 'kea' + import { AccessControlledLemonButton } from 'lib/components/AccessControlledLemonButton' import { dayjs } from 'lib/dayjs' -import { IconWithCount } from 'lib/lemon-ui/icons' import { LemonButton, LemonButtonProps } from 'lib/lemon-ui/LemonButton' import { LemonInput } from 'lib/lemon-ui/LemonInput/LemonInput' import { PopoverProps } from 'lib/lemon-ui/Popover' +import { IconWithCount } from 'lib/lemon-ui/icons' import { getAppContext } from 'lib/utils/getAppContext' -import { ReactChild, ReactElement, useEffect } from 'react' import { useNotebookNode } from 'scenes/notebooks/Nodes/NotebookNodeContext' import { - notebookSelectButtonLogic, NotebookSelectButtonLogicProps, + notebookSelectButtonLogic, } from 'scenes/notebooks/NotebookSelectButton/notebookSelectButtonLogic' import { notebooksModel, openNotebook } from '~/models/notebooksModel' diff --git a/frontend/src/scenes/notebooks/NotebookSelectButton/notebookSelectButtonLogic.ts b/frontend/src/scenes/notebooks/NotebookSelectButton/notebookSelectButtonLogic.ts index 6e48fba5e2..20c71f5795 100644 --- a/frontend/src/scenes/notebooks/NotebookSelectButton/notebookSelectButtonLogic.ts +++ b/frontend/src/scenes/notebooks/NotebookSelectButton/notebookSelectButtonLogic.ts @@ -1,9 +1,9 @@ import { actions, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { NotebookListItemType, NotebookNodeResource, NotebookNodeType } from '../types' - import type { notebookSelectButtonLogicType } from './notebookSelectButtonLogicType' export interface NotebookSelectButtonLogicProps { diff --git a/frontend/src/scenes/notebooks/NotebookTemplates/notebookTemplates.ts b/frontend/src/scenes/notebooks/NotebookTemplates/notebookTemplates.ts index 90f980841e..2de4090630 100644 --- a/frontend/src/scenes/notebooks/NotebookTemplates/notebookTemplates.ts +++ b/frontend/src/scenes/notebooks/NotebookTemplates/notebookTemplates.ts @@ -1,4 +1,5 @@ import { AccessControlLevel, UserBasicType } from '~/types' + import { NotebookType } from '../types' const TEMPLATE_USERS: Record = { diff --git a/frontend/src/scenes/notebooks/NotebooksScene.tsx b/frontend/src/scenes/notebooks/NotebooksScene.tsx index 739092abf1..be6395e2a8 100644 --- a/frontend/src/scenes/notebooks/NotebooksScene.tsx +++ b/frontend/src/scenes/notebooks/NotebooksScene.tsx @@ -1,8 +1,10 @@ import './NotebookScene.scss' -import { IconEllipsis } from '@posthog/icons' -import { LemonButton, LemonMenu, lemonToast, Tooltip } from '@posthog/lemon-ui' import { router } from 'kea-router' + +import { IconEllipsis } from '@posthog/icons' +import { LemonButton, LemonMenu, Tooltip, lemonToast } from '@posthog/lemon-ui' + import { AccessControlledLemonButton } from 'lib/components/AccessControlledLemonButton' import { PageHeader } from 'lib/components/PageHeader' import { base64Encode } from 'lib/utils' diff --git a/frontend/src/scenes/notebooks/NotebooksTable/ContainsTypeFilter.tsx b/frontend/src/scenes/notebooks/NotebooksTable/ContainsTypeFilter.tsx index b428e9aa52..51af6f7720 100644 --- a/frontend/src/scenes/notebooks/NotebooksTable/ContainsTypeFilter.tsx +++ b/frontend/src/scenes/notebooks/NotebooksTable/ContainsTypeFilter.tsx @@ -1,6 +1,8 @@ -import { LemonInputSelect } from 'lib/lemon-ui/LemonInputSelect' import posthog from 'posthog-js' + +import { LemonInputSelect } from 'lib/lemon-ui/LemonInputSelect' import { NotebooksListFilters } from 'scenes/notebooks/NotebooksTable/notebooksTableLogic' + import { NotebookNodeType } from '../types' export const fromNodeTypeToLabel: Omit< diff --git a/frontend/src/scenes/notebooks/NotebooksTable/NotebooksTable.tsx b/frontend/src/scenes/notebooks/NotebooksTable/NotebooksTable.tsx index feb444bb09..7efda4f32e 100644 --- a/frontend/src/scenes/notebooks/NotebooksTable/NotebooksTable.tsx +++ b/frontend/src/scenes/notebooks/NotebooksTable/NotebooksTable.tsx @@ -1,7 +1,10 @@ +import { useActions, useValues } from 'kea' + import { IconEllipsis, IconTrash } from '@posthog/icons' import { LemonButton, LemonInput, LemonTag } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { MemberSelect } from 'lib/components/MemberSelect' +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { LemonMenu } from 'lib/lemon-ui/LemonMenu' import { LemonTable, LemonTableColumn, LemonTableColumns } from 'lib/lemon-ui/LemonTable' @@ -12,10 +15,9 @@ import { notebooksTableLogic } from 'scenes/notebooks/NotebooksTable/notebooksTa import { urls } from 'scenes/urls' import { notebooksModel } from '~/models/notebooksModel' -import { NotebookListItemType } from '../types' import { notebookPanelLogic } from '../NotebookPanel/notebookPanelLogic' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' +import { NotebookListItemType } from '../types' function titleColumn(): LemonTableColumn { return { diff --git a/frontend/src/scenes/notebooks/NotebooksTable/notebooksTableLogic.ts b/frontend/src/scenes/notebooks/NotebooksTable/notebooksTableLogic.ts index 9c8a1d3d29..eec74a7e4a 100644 --- a/frontend/src/scenes/notebooks/NotebooksTable/notebooksTableLogic.ts +++ b/frontend/src/scenes/notebooks/NotebooksTable/notebooksTableLogic.ts @@ -1,12 +1,14 @@ -import { PaginationManual, Sorting } from '@posthog/lemon-ui' import { actions, connect, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' + +import { PaginationManual, Sorting } from '@posthog/lemon-ui' + import api, { CountedPaginatedResponse } from 'lib/api' import { objectClean, objectsEqual } from 'lib/utils' import { notebooksModel } from '~/models/notebooksModel' -import { NotebookListItemType, NotebookNodeType } from '../types' +import { NotebookListItemType, NotebookNodeType } from '../types' import type { notebooksTableLogicType } from './notebooksTableLogicType' export interface NotebooksListFilters { diff --git a/frontend/src/scenes/notebooks/Suggestions/FloatingSuggestions.tsx b/frontend/src/scenes/notebooks/Suggestions/FloatingSuggestions.tsx index bc4313dd1f..1386b70aea 100644 --- a/frontend/src/scenes/notebooks/Suggestions/FloatingSuggestions.tsx +++ b/frontend/src/scenes/notebooks/Suggestions/FloatingSuggestions.tsx @@ -1,13 +1,14 @@ import './FloatingSuggestions.scss' import { useValues } from 'kea' -import { useResizeObserver } from 'lib/hooks/useResizeObserver' import { useEffect, useState } from 'react' +import { richContentEditorLogic } from 'lib/components/RichContentEditor/richContentEditorLogic' +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' +import { useResizeObserver } from 'lib/hooks/useResizeObserver' + import { isCurrentNodeEmpty } from '../utils' import { insertionSuggestionsLogic } from './insertionSuggestionsLogic' -import { richContentEditorLogic } from 'lib/components/RichContentEditor/richContentEditorLogic' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' export function FloatingSuggestions(): JSX.Element | null { const logic = insertionSuggestionsLogic() diff --git a/frontend/src/scenes/notebooks/Suggestions/ReplayTimestamp.tsx b/frontend/src/scenes/notebooks/Suggestions/ReplayTimestamp.tsx index d87a5d3ae9..cb216febe7 100644 --- a/frontend/src/scenes/notebooks/Suggestions/ReplayTimestamp.tsx +++ b/frontend/src/scenes/notebooks/Suggestions/ReplayTimestamp.tsx @@ -1,13 +1,15 @@ -import { LemonButton } from '@posthog/lemon-ui' import { useValues } from 'kea' + +import { LemonButton } from '@posthog/lemon-ui' + +import { RichContentEditorType, RichContentNode } from 'lib/components/RichContentEditor/types' +import { firstChildOfType, hasChildOfType } from 'lib/components/RichContentEditor/utils' import { sessionRecordingPlayerLogic } from 'scenes/session-recordings/player/sessionRecordingPlayerLogic' import { sessionRecordingPlayerProps } from '../Nodes/NotebookNodeRecording' import { buildTimestampCommentContent, formatTimestamp } from '../Nodes/NotebookNodeReplayTimestamp' -import { InsertionSuggestion, InsertionSuggestionViewProps } from './InsertionSuggestion' -import { RichContentEditorType, RichContentNode } from 'lib/components/RichContentEditor/types' -import { firstChildOfType, hasChildOfType } from 'lib/components/RichContentEditor/utils' import { NotebookNodeType } from '../types' +import { InsertionSuggestion, InsertionSuggestionViewProps } from './InsertionSuggestion' const insertTimestamp = ({ editor, diff --git a/frontend/src/scenes/notebooks/Suggestions/SlashCommands.tsx b/frontend/src/scenes/notebooks/Suggestions/SlashCommands.tsx index f0c60212ef..60e5d73201 100644 --- a/frontend/src/scenes/notebooks/Suggestions/SlashCommands.tsx +++ b/frontend/src/scenes/notebooks/Suggestions/SlashCommands.tsx @@ -1,6 +1,7 @@ +import { useState } from 'react' + import { IconPlus } from '@posthog/icons' import { LemonButton } from '@posthog/lemon-ui' -import { useState } from 'react' import { SlashCommandsPopover } from '../Notebook/SlashCommands' import { InsertionSuggestion, InsertionSuggestionViewProps } from './InsertionSuggestion' diff --git a/frontend/src/scenes/notebooks/Suggestions/insertionSuggestionsLogic.ts b/frontend/src/scenes/notebooks/Suggestions/insertionSuggestionsLogic.ts index c776440b24..1ec4836ddf 100644 --- a/frontend/src/scenes/notebooks/Suggestions/insertionSuggestionsLogic.ts +++ b/frontend/src/scenes/notebooks/Suggestions/insertionSuggestionsLogic.ts @@ -1,10 +1,11 @@ import { actions, events, kea, listeners, path, reducers, selectors } from 'kea' +import { RichContentEditorType, RichContentNode } from 'lib/components/RichContentEditor/types' + import { InsertionSuggestion } from './InsertionSuggestion' -import type { insertionSuggestionsLogicType } from './insertionSuggestionsLogicType' import ReplayTimestampSuggestion from './ReplayTimestamp' import SlashCommands from './SlashCommands' -import { RichContentEditorType, RichContentNode } from 'lib/components/RichContentEditor/types' +import type { insertionSuggestionsLogicType } from './insertionSuggestionsLogicType' export const insertionSuggestionsLogic = kea([ path(['scenes', 'notebooks', 'Suggestions', 'insertionSuggestionsLogic']), diff --git a/frontend/src/scenes/notebooks/notebookSceneLogic.ts b/frontend/src/scenes/notebooks/notebookSceneLogic.ts index 7320b04b2b..3a067c6fa9 100644 --- a/frontend/src/scenes/notebooks/notebookSceneLogic.ts +++ b/frontend/src/scenes/notebooks/notebookSceneLogic.ts @@ -1,4 +1,5 @@ import { afterMount, connect, kea, key, path, props, selectors } from 'kea' + import { Scene } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/notebooks/types.ts b/frontend/src/scenes/notebooks/types.ts index afbe083c26..5a46351611 100644 --- a/frontend/src/scenes/notebooks/types.ts +++ b/frontend/src/scenes/notebooks/types.ts @@ -1,15 +1,18 @@ -import { LemonButtonProps } from '@posthog/lemon-ui' import { Attribute, ExtendedRegExpMatchArray } from '@tiptap/core' -import type { NotebookNodeLogicProps } from './Nodes/notebookNodeLogic' +import { LemonButtonProps } from '@posthog/lemon-ui' + import { JSONContent, RichContentEditorType, RichContentNode, RichContentNodeType, } from 'lib/components/RichContentEditor/types' + import { UserBasicType, WithAccessControl } from '~/types' +import type { NotebookNodeLogicProps } from './Nodes/notebookNodeLogic' + export type { TableOfContentData } from '@tiptap/extension-table-of-contents' export type NotebookListItemType = { diff --git a/frontend/src/scenes/notebooks/utils.ts b/frontend/src/scenes/notebooks/utils.ts index cc2cebf9ee..f67af866fd 100644 --- a/frontend/src/scenes/notebooks/utils.ts +++ b/frontend/src/scenes/notebooks/utils.ts @@ -1,7 +1,8 @@ // Helpers for Kea issue with double importing -import { getText, TextSerializer } from '@tiptap/core' +import { TextSerializer, getText } from '@tiptap/core' import { JSONContent, RichContentNode, TTEditor } from 'lib/components/RichContentEditor/types' + import { CreatePostHogWidgetNodeOptions, NotebookNodeType } from './types' export const KNOWN_NODES: Record> = {} diff --git a/frontend/src/scenes/oauth/OAuthAuthorize.stories.tsx b/frontend/src/scenes/oauth/OAuthAuthorize.stories.tsx index 003302f7e3..af1d43c057 100644 --- a/frontend/src/scenes/oauth/OAuthAuthorize.stories.tsx +++ b/frontend/src/scenes/oauth/OAuthAuthorize.stories.tsx @@ -1,5 +1,6 @@ import { Meta, StoryFn } from '@storybook/react' import { router } from 'kea-router' + import { useDelayedOnMountEffect } from 'lib/hooks/useOnMountEffect' import { App } from 'scenes/App' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/oauth/OAuthAuthorize.tsx b/frontend/src/scenes/oauth/OAuthAuthorize.tsx index 9422c7d074..6fb71b0463 100644 --- a/frontend/src/scenes/oauth/OAuthAuthorize.tsx +++ b/frontend/src/scenes/oauth/OAuthAuthorize.tsx @@ -1,6 +1,8 @@ -import { IconCheck, IconWarning, IconX } from '@posthog/icons' import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' + +import { IconCheck, IconWarning, IconX } from '@posthog/icons' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { Spinner } from 'lib/lemon-ui/Spinner' import ScopeAccessSelector from 'scenes/settings/user/scopes/ScopeAccessSelector' diff --git a/frontend/src/scenes/oauth/oauthAuthorizeLogic.ts b/frontend/src/scenes/oauth/oauthAuthorizeLogic.ts index a50b900a89..fea50c069d 100644 --- a/frontend/src/scenes/oauth/oauthAuthorizeLogic.ts +++ b/frontend/src/scenes/oauth/oauthAuthorizeLogic.ts @@ -2,6 +2,7 @@ import { actions, connect, kea, listeners, path, reducers, selectors } from 'kea import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' import { router, urlToAction } from 'kea-router' + import api from 'lib/api' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' import { DEFAULT_OAUTH_SCOPES, getMinimumEquivalentScopes, getScopeDescription } from 'lib/scopes' diff --git a/frontend/src/scenes/onboarding/Onboarding.stories.tsx b/frontend/src/scenes/onboarding/Onboarding.stories.tsx index eca1602187..f70604ba46 100644 --- a/frontend/src/scenes/onboarding/Onboarding.stories.tsx +++ b/frontend/src/scenes/onboarding/Onboarding.stories.tsx @@ -1,21 +1,22 @@ import { Meta } from '@storybook/react' import { useActions, useMountedLogic } from 'kea' import { router } from 'kea-router' + +import { useDelayedOnMountEffect } from 'lib/hooks/useOnMountEffect' import { App } from 'scenes/App' +import empty from 'scenes/pipeline/__mocks__/empty.json' import pluginConfigs from 'scenes/pipeline/__mocks__/pluginConfigs.json' import plugins from 'scenes/pipeline/__mocks__/plugins.json' -import empty from 'scenes/pipeline/__mocks__/empty.json' import { urls } from 'scenes/urls' import { mswDecorator, useStorybookMocks } from '~/mocks/browser' import { billingJson } from '~/mocks/fixtures/_billing' import billingUnsubscribedJson from '~/mocks/fixtures/_billing_unsubscribed.json' import preflightJson from '~/mocks/fixtures/_preflight.json' -import { OnboardingProduct, ProductKey, OnboardingStepKey } from '~/types' +import { OnboardingProduct, OnboardingStepKey, ProductKey } from '~/types' import { onboardingLogic } from './onboardingLogic' import { availableOnboardingProducts } from './utils' -import { useDelayedOnMountEffect } from 'lib/hooks/useOnMountEffect' const meta: Meta = { title: 'Scenes-Other/Onboarding', diff --git a/frontend/src/scenes/onboarding/Onboarding.tsx b/frontend/src/scenes/onboarding/Onboarding.tsx index 01e144437a..ad9eb7abd8 100644 --- a/frontend/src/scenes/onboarding/Onboarding.tsx +++ b/frontend/src/scenes/onboarding/Onboarding.tsx @@ -1,10 +1,12 @@ -import { Spinner } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' +import { useEffect, useState } from 'react' + +import { Spinner } from '@posthog/lemon-ui' + import { RestrictionScope, useRestrictedArea } from 'lib/components/RestrictedArea' import { FEATURE_FLAGS, OrganizationMembershipLevel, SESSION_REPLAY_MINIMUM_DURATION_OPTIONS } from 'lib/constants' import { useFeatureFlag } from 'lib/hooks/useFeatureFlag' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { useEffect, useState } from 'react' import { billingLogic } from 'scenes/billing/billingLogic' import { newDashboardLogic } from 'scenes/dashboard/newDashboardLogic' import { WebAnalyticsSDKInstructions } from 'scenes/onboarding/sdks/web-analytics/WebAnalyticsSDKInstructions' @@ -15,24 +17,24 @@ import { getMaskingConfigFromLevel, getMaskingLevelFromConfig } from 'scenes/ses import { teamLogic } from 'scenes/teamLogic' import { userLogic } from 'scenes/userLogic' -import { AvailableFeature, ProductKey, OnboardingStepKey, type SessionRecordingMaskingLevel } from '~/types' +import { AvailableFeature, OnboardingStepKey, ProductKey, type SessionRecordingMaskingLevel } from '~/types' +import { OnboardingInviteTeammates } from './OnboardingInviteTeammates' +import { OnboardingProductConfiguration } from './OnboardingProductConfiguration' +import { OnboardingReverseProxy } from './OnboardingReverseProxy' +import { OnboardingSessionReplayConfiguration } from './OnboardingSessionReplayConfiguration' import { OnboardingUpgradeStep } from './billing/OnboardingUpgradeStep' import { OnboardingDataWarehouseSourcesStep } from './data-warehouse/OnboardingDataWarehouseSourcesStep' import { OnboardingErrorTrackingAlertsStep } from './error-tracking/OnboardingErrorTrackingAlertsStep' import { OnboardingErrorTrackingSourceMapsStep } from './error-tracking/OnboardingErrorTrackingSourceMapsStep' -import { OnboardingInviteTeammates } from './OnboardingInviteTeammates' -import { onboardingLogic, OnboardingLogicProps } from './onboardingLogic' -import { OnboardingProductConfiguration } from './OnboardingProductConfiguration' +import { OnboardingLogicProps, onboardingLogic } from './onboardingLogic' import { ProductConfigOption } from './onboardingProductConfigurationLogic' -import { OnboardingReverseProxy } from './OnboardingReverseProxy' -import { OnboardingSessionReplayConfiguration } from './OnboardingSessionReplayConfiguration' import { OnboardingDashboardTemplateConfigureStep } from './productAnalyticsSteps/DashboardTemplateConfigureStep' import { OnboardingDashboardTemplateSelectStep } from './productAnalyticsSteps/DashboardTemplateSelectStep' +import { OnboardingInstallStep } from './sdks/OnboardingInstallStep' import { ErrorTrackingSDKInstructions } from './sdks/error-tracking/ErrorTrackingSDKInstructions' import { ExperimentsSDKInstructions } from './sdks/experiments/ExperimentsSDKInstructions' import { FeatureFlagsSDKInstructions } from './sdks/feature-flags/FeatureFlagsSDKInstructions' -import { OnboardingInstallStep } from './sdks/OnboardingInstallStep' import { ProductAnalyticsSDKInstructions } from './sdks/product-analytics/ProductAnalyticsSDKInstructions' import { sdksLogic } from './sdks/sdksLogic' import { SessionReplaySDKInstructions } from './sdks/session-replay/SessionReplaySDKInstructions' diff --git a/frontend/src/scenes/onboarding/OnboardingInviteTeammates.tsx b/frontend/src/scenes/onboarding/OnboardingInviteTeammates.tsx index c72abff540..a684bbe940 100644 --- a/frontend/src/scenes/onboarding/OnboardingInviteTeammates.tsx +++ b/frontend/src/scenes/onboarding/OnboardingInviteTeammates.tsx @@ -1,15 +1,17 @@ import { useActions, useValues } from 'kea' -import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' -import { inviteLogic } from 'scenes/settings/organization/inviteLogic' -import { EmailUnavailableForInvitesBanner, InviteTeamMatesComponent } from 'scenes/settings/organization/InviteModal' -import { ProductKey, OnboardingStepKey } from '~/types' - -import { onboardingLogic } from './onboardingLogic' -import { OnboardingStep } from './OnboardingStep' -import { InvitesTable } from 'scenes/settings/organization/Invites' import { LemonDivider } from '@posthog/lemon-ui' +import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' +import { EmailUnavailableForInvitesBanner, InviteTeamMatesComponent } from 'scenes/settings/organization/InviteModal' +import { InvitesTable } from 'scenes/settings/organization/Invites' +import { inviteLogic } from 'scenes/settings/organization/inviteLogic' + +import { OnboardingStepKey, ProductKey } from '~/types' + +import { OnboardingStep } from './OnboardingStep' +import { onboardingLogic } from './onboardingLogic' + export const OnboardingInviteTeammates = ({ stepKey }: { stepKey: OnboardingStepKey }): JSX.Element => { const { preflight } = useValues(preflightLogic) const { productKey } = useValues(onboardingLogic) diff --git a/frontend/src/scenes/onboarding/OnboardingProductConfiguration.tsx b/frontend/src/scenes/onboarding/OnboardingProductConfiguration.tsx index 8ce91bb68e..db8a075c60 100644 --- a/frontend/src/scenes/onboarding/OnboardingProductConfiguration.tsx +++ b/frontend/src/scenes/onboarding/OnboardingProductConfiguration.tsx @@ -1,13 +1,15 @@ -import { LemonDivider, LemonSelect, LemonSwitch } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import React, { useEffect, useRef } from 'react' + +import { LemonDivider, LemonSelect, LemonSwitch } from '@posthog/lemon-ui' + +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { pipelineDefaultEnabledLogic } from 'scenes/pipeline/pipelineDefaultEnabledLogic' -import { ProductKey, OnboardingStepKey } from '~/types' +import { OnboardingStepKey, ProductKey } from '~/types' -import { onboardingProductConfigurationLogic, ProductConfigOption } from './onboardingProductConfigurationLogic' import { OnboardingStep } from './OnboardingStep' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' +import { ProductConfigOption, onboardingProductConfigurationLogic } from './onboardingProductConfigurationLogic' type ConfigType = 'toggle' | 'select' type PluginType = 'plugin' diff --git a/frontend/src/scenes/onboarding/OnboardingReverseProxy.tsx b/frontend/src/scenes/onboarding/OnboardingReverseProxy.tsx index a383dbe43d..bbd1db34b8 100644 --- a/frontend/src/scenes/onboarding/OnboardingReverseProxy.tsx +++ b/frontend/src/scenes/onboarding/OnboardingReverseProxy.tsx @@ -1,9 +1,9 @@ import { LemonDivider, Link } from '@posthog/lemon-ui' import { InviteMembersButton } from '~/layout/navigation/TopBar/AccountPopover' +import { OnboardingStepKey } from '~/types' import { OnboardingStep } from './OnboardingStep' -import { OnboardingStepKey } from '~/types' const proxyDocs = [ { diff --git a/frontend/src/scenes/onboarding/OnboardingSessionReplayConfiguration.tsx b/frontend/src/scenes/onboarding/OnboardingSessionReplayConfiguration.tsx index f2266c6f8a..0f13dcff44 100644 --- a/frontend/src/scenes/onboarding/OnboardingSessionReplayConfiguration.tsx +++ b/frontend/src/scenes/onboarding/OnboardingSessionReplayConfiguration.tsx @@ -1,11 +1,14 @@ -import { LemonButton } from '@posthog/lemon-ui' import { useActions } from 'kea' + +import { LemonButton } from '@posthog/lemon-ui' + import { FilmCameraHog } from 'lib/components/hedgehogs' -import { onboardingLogic } from './onboardingLogic' -import { OnboardingStep } from './OnboardingStep' import { OnboardingStepKey } from '~/types' +import { OnboardingStep } from './OnboardingStep' +import { onboardingLogic } from './onboardingLogic' + export function OnboardingSessionReplayConfiguration({ stepKey }: { stepKey: OnboardingStepKey }): JSX.Element { const { goToNextStep, updateCurrentTeam } = useActions(onboardingLogic) diff --git a/frontend/src/scenes/onboarding/OnboardingStep.tsx b/frontend/src/scenes/onboarding/OnboardingStep.tsx index 23fa3ab3ad..a1500c3fd5 100644 --- a/frontend/src/scenes/onboarding/OnboardingStep.tsx +++ b/frontend/src/scenes/onboarding/OnboardingStep.tsx @@ -1,12 +1,15 @@ -import { IconArrowRight } from '@posthog/icons' -import { LemonButton, Link } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' -import { supportLogic } from 'lib/components/Support/supportLogic' -import { IconChevronRight } from 'lib/lemon-ui/icons' import React from 'react' +import { IconArrowRight } from '@posthog/icons' +import { LemonButton, Link } from '@posthog/lemon-ui' + +import { supportLogic } from 'lib/components/Support/supportLogic' +import { IconChevronRight } from 'lib/lemon-ui/icons' + import { OnboardingStepKey } from '~/types' + import { breadcrumbExcludeSteps, onboardingLogic, stepKeyToTitle } from './onboardingLogic' export const OnboardingStep = ({ diff --git a/frontend/src/scenes/onboarding/billing/FreeTierLimits.tsx b/frontend/src/scenes/onboarding/billing/FreeTierLimits.tsx index 005c7bff92..735fe98f84 100644 --- a/frontend/src/scenes/onboarding/billing/FreeTierLimits.tsx +++ b/frontend/src/scenes/onboarding/billing/FreeTierLimits.tsx @@ -1,5 +1,7 @@ -import * as Icons from '@posthog/icons' import { useValues } from 'kea' + +import * as Icons from '@posthog/icons' + import { billingLogic } from 'scenes/billing/billingLogic' import { availableOnboardingProducts } from '../utils' diff --git a/frontend/src/scenes/onboarding/billing/OnboardingUpgradeStep.tsx b/frontend/src/scenes/onboarding/billing/OnboardingUpgradeStep.tsx index 884251ce14..c9877e87c9 100644 --- a/frontend/src/scenes/onboarding/billing/OnboardingUpgradeStep.tsx +++ b/frontend/src/scenes/onboarding/billing/OnboardingUpgradeStep.tsx @@ -1,8 +1,10 @@ -import { Spinner } from '@posthog/lemon-ui' import { useValues } from 'kea' -import { SupermanHog } from 'lib/components/hedgehogs' -import { useHogfetti } from 'lib/components/Hogfetti/Hogfetti' import { useEffect } from 'react' + +import { Spinner } from '@posthog/lemon-ui' + +import { useHogfetti } from 'lib/components/Hogfetti/Hogfetti' +import { SupermanHog } from 'lib/components/hedgehogs' import { billingLogic } from 'scenes/billing/billingLogic' import type { BillingProductV2Type, OnboardingStepKey } from '~/types' diff --git a/frontend/src/scenes/onboarding/billing/PlanCards.tsx b/frontend/src/scenes/onboarding/billing/PlanCards.tsx index 16b246bf34..f77b0b3ce5 100644 --- a/frontend/src/scenes/onboarding/billing/PlanCards.tsx +++ b/frontend/src/scenes/onboarding/billing/PlanCards.tsx @@ -1,12 +1,14 @@ import './PlanCards.scss' +import clsx from 'clsx' +import { useActions, useValues } from 'kea' +import React, { useState } from 'react' + import { IconCheck, IconX } from '@posthog/icons' import { LemonButton } from '@posthog/lemon-ui' -import clsx from 'clsx' -import { useActions, useValues } from 'kea' + import { BillingUpgradeCTA } from 'lib/components/BillingUpgradeCTA' import { HeartHog } from 'lib/components/hedgehogs' -import React, { useState } from 'react' import { billingLogic } from 'scenes/billing/billingLogic' import { billingProductLogic } from 'scenes/billing/billingProductLogic' import { paymentEntryLogic } from 'scenes/billing/paymentEntryLogic' diff --git a/frontend/src/scenes/onboarding/data-warehouse/OnboardingDataWarehouseSourcesStep.tsx b/frontend/src/scenes/onboarding/data-warehouse/OnboardingDataWarehouseSourcesStep.tsx index 5d68d00f19..3242b57895 100644 --- a/frontend/src/scenes/onboarding/data-warehouse/OnboardingDataWarehouseSourcesStep.tsx +++ b/frontend/src/scenes/onboarding/data-warehouse/OnboardingDataWarehouseSourcesStep.tsx @@ -1,12 +1,15 @@ import { BindLogic, useActions, useValues } from 'kea' + +import { LemonSkeleton } from '@posthog/lemon-ui' + import { NewSourcesWizard } from 'scenes/data-warehouse/new/NewSourceWizard' +import { availableSourcesDataLogic } from 'scenes/data-warehouse/new/availableSourcesDataLogic' import { sourceWizardLogic } from 'scenes/data-warehouse/new/sourceWizardLogic' -import { onboardingLogic } from '../onboardingLogic' -import { OnboardingStep } from '../OnboardingStep' import { OnboardingStepKey } from '~/types' -import { availableSourcesDataLogic } from 'scenes/data-warehouse/new/availableSourcesDataLogic' -import { LemonSkeleton } from '@posthog/lemon-ui' + +import { OnboardingStep } from '../OnboardingStep' +import { onboardingLogic } from '../onboardingLogic' export function OnboardingDataWarehouseSourcesStep({ stepKey = OnboardingStepKey.INSTALL, diff --git a/frontend/src/scenes/onboarding/error-tracking/OnboardingErrorTrackingAlertsStep.tsx b/frontend/src/scenes/onboarding/error-tracking/OnboardingErrorTrackingAlertsStep.tsx index d7c210fd56..d82c9d0870 100644 --- a/frontend/src/scenes/onboarding/error-tracking/OnboardingErrorTrackingAlertsStep.tsx +++ b/frontend/src/scenes/onboarding/error-tracking/OnboardingErrorTrackingAlertsStep.tsx @@ -1,6 +1,8 @@ -import { LemonButton, LemonButtonProps, LemonInput, LemonSelect, LemonTable, Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' + +import { LemonButton, LemonButtonProps, LemonInput, LemonSelect, LemonTable, Link } from '@posthog/lemon-ui' + import api from 'lib/api' import { SlackChannelPicker } from 'lib/integrations/SlackIntegrationHelpers' import { LemonField } from 'lib/lemon-ui/LemonField' diff --git a/frontend/src/scenes/onboarding/error-tracking/OnboardingErrorTrackingSourceMapsStep.tsx b/frontend/src/scenes/onboarding/error-tracking/OnboardingErrorTrackingSourceMapsStep.tsx index 0509ea0069..9e6f9de345 100644 --- a/frontend/src/scenes/onboarding/error-tracking/OnboardingErrorTrackingSourceMapsStep.tsx +++ b/frontend/src/scenes/onboarding/error-tracking/OnboardingErrorTrackingSourceMapsStep.tsx @@ -1,10 +1,13 @@ -import { LemonCollapse } from '@posthog/lemon-ui' -import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { useState } from 'react' -import { OnboardingStep } from '../OnboardingStep' +import { LemonCollapse } from '@posthog/lemon-ui' + +import { CodeSnippet, Language } from 'lib/components/CodeSnippet' + import { OnboardingStepKey } from '~/types' +import { OnboardingStep } from '../OnboardingStep' + export function OnboardingErrorTrackingSourceMapsStep({ stepKey }: { stepKey: OnboardingStepKey }): JSX.Element { const [activeKey, setActiveKey] = useState<'cli' | 'no-minification' | 'public-source-maps' | undefined>(undefined) diff --git a/frontend/src/scenes/onboarding/error-tracking/onboardingErrorTrackingAlertsLogic.ts b/frontend/src/scenes/onboarding/error-tracking/onboardingErrorTrackingAlertsLogic.ts index 4fc94ca8a7..c6581ff739 100644 --- a/frontend/src/scenes/onboarding/error-tracking/onboardingErrorTrackingAlertsLogic.ts +++ b/frontend/src/scenes/onboarding/error-tracking/onboardingErrorTrackingAlertsLogic.ts @@ -1,6 +1,7 @@ import { actions, afterMount, connect, kea, path, reducers } from 'kea' import { forms } from 'kea-forms' import { router } from 'kea-router' + import api from 'lib/api' import { integrationsLogic } from 'lib/integrations/integrationsLogic' diff --git a/frontend/src/scenes/onboarding/onboardingLogic.tsx b/frontend/src/scenes/onboarding/onboardingLogic.tsx index 845d5a05f3..0bccd1c63f 100644 --- a/frontend/src/scenes/onboarding/onboardingLogic.tsx +++ b/frontend/src/scenes/onboarding/onboardingLogic.tsx @@ -1,11 +1,12 @@ import { actions, connect, kea, listeners, path, props, reducers, selectors } from 'kea' import { actionToUrl, router, urlToAction } from 'kea-router' + import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' +import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { liveEventsTableLogic } from 'scenes/activity/live/liveEventsTableLogic' import { billingLogic } from 'scenes/billing/billingLogic' -import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { Scene } from 'scenes/sceneTypes' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/onboarding/onboardingProductConfigurationLogic.ts b/frontend/src/scenes/onboarding/onboardingProductConfigurationLogic.ts index fb07b2fbe0..01e5c1ed58 100644 --- a/frontend/src/scenes/onboarding/onboardingProductConfigurationLogic.ts +++ b/frontend/src/scenes/onboarding/onboardingProductConfigurationLogic.ts @@ -1,5 +1,7 @@ -import { LemonSelectOptions } from '@posthog/lemon-ui' import { actions, connect, kea, listeners, path, reducers } from 'kea' + +import { LemonSelectOptions } from '@posthog/lemon-ui' + import { teamLogic } from 'scenes/teamLogic' import { TeamType } from '~/types' diff --git a/frontend/src/scenes/onboarding/productAnalyticsSteps/DashboardTemplateConfigureStep.tsx b/frontend/src/scenes/onboarding/productAnalyticsSteps/DashboardTemplateConfigureStep.tsx index e5495bb789..306b9e82e0 100644 --- a/frontend/src/scenes/onboarding/productAnalyticsSteps/DashboardTemplateConfigureStep.tsx +++ b/frontend/src/scenes/onboarding/productAnalyticsSteps/DashboardTemplateConfigureStep.tsx @@ -1,3 +1,6 @@ +import { useActions, useValues } from 'kea' +import { useEffect, useRef, useState } from 'react' + import { IconArrowRight, IconCheckCircle } from '@posthog/icons' import { LemonBanner, @@ -9,26 +12,26 @@ import { Link, Spinner, } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { - authorizedUrlListLogic, AuthorizedUrlListType, + authorizedUrlListLogic, defaultAuthorizedUrlProperties, } from 'lib/components/AuthorizedUrlList/authorizedUrlListLogic' -import { StarHog } from 'lib/components/hedgehogs' import { IframedToolbarBrowser } from 'lib/components/IframedToolbarBrowser/IframedToolbarBrowser' import { iframedToolbarBrowserLogic } from 'lib/components/IframedToolbarBrowser/iframedToolbarBrowserLogic' -import { useEffect, useRef, useState } from 'react' +import { StarHog } from 'lib/components/hedgehogs' +import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { dashboardTemplateVariablesLogic } from 'scenes/dashboard/dashboardTemplateVariablesLogic' import { newDashboardLogic } from 'scenes/dashboard/newDashboardLogic' -import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' -import { onboardingLogic } from '../onboardingLogic' +import { OnboardingStepKey } from '~/types' + import { OnboardingStep } from '../OnboardingStep' +import { onboardingLogic } from '../onboardingLogic' import { sdksLogic } from '../sdks/sdksLogic' import { DashboardTemplateVariables } from './DashboardTemplateVariables' import { onboardingTemplateConfigLogic } from './onboardingTemplateConfigLogic' -import { OnboardingStepKey } from '~/types' const UrlInput = ({ iframeRef }: { iframeRef: React.RefObject }): JSX.Element => { const { setBrowserUrl, setInitialPath } = useActions( diff --git a/frontend/src/scenes/onboarding/productAnalyticsSteps/DashboardTemplateSelectStep.tsx b/frontend/src/scenes/onboarding/productAnalyticsSteps/DashboardTemplateSelectStep.tsx index 8f91f70d6d..1ca32d8ebf 100644 --- a/frontend/src/scenes/onboarding/productAnalyticsSteps/DashboardTemplateSelectStep.tsx +++ b/frontend/src/scenes/onboarding/productAnalyticsSteps/DashboardTemplateSelectStep.tsx @@ -1,16 +1,18 @@ -import { LemonButton, LemonInput, LemonModal } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' + +import { LemonButton, LemonInput, LemonModal } from '@posthog/lemon-ui' + +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { LemonField } from 'lib/lemon-ui/LemonField' import { DashboardTemplateChooser } from 'scenes/dashboard/DashboardTemplateChooser' import { newDashboardLogic } from 'scenes/dashboard/newDashboardLogic' import { OnboardingStepKey, TemplateAvailabilityContext } from '~/types' -import { onboardingLogic } from '../onboardingLogic' import { OnboardingStep } from '../OnboardingStep' +import { onboardingLogic } from '../onboardingLogic' import { onboardingTemplateConfigLogic } from './onboardingTemplateConfigLogic' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' export const OnboardingDashboardTemplateSelectStep = ({ stepKey = OnboardingStepKey.DASHBOARD_TEMPLATE, diff --git a/frontend/src/scenes/onboarding/productAnalyticsSteps/DashboardTemplateVariables.tsx b/frontend/src/scenes/onboarding/productAnalyticsSteps/DashboardTemplateVariables.tsx index b790aff71c..db5879da46 100644 --- a/frontend/src/scenes/onboarding/productAnalyticsSteps/DashboardTemplateVariables.tsx +++ b/frontend/src/scenes/onboarding/productAnalyticsSteps/DashboardTemplateVariables.tsx @@ -1,8 +1,10 @@ +import { useActions, useValues } from 'kea' +import { useEffect } from 'react' + import { IconCheckCircle, IconInfo, IconTarget, IconTrash } from '@posthog/icons' import { LemonBanner, LemonButton, LemonCollapse, LemonInput, LemonLabel, LemonMenu, Spinner } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { iframedToolbarBrowserLogic } from 'lib/components/IframedToolbarBrowser/iframedToolbarBrowserLogic' -import { useEffect } from 'react' import { dashboardTemplateVariablesLogic } from 'scenes/dashboard/dashboardTemplateVariablesLogic' import { newDashboardLogic } from 'scenes/dashboard/newDashboardLogic' diff --git a/frontend/src/scenes/onboarding/productAnalyticsSteps/onboardingTemplateConfigLogic.ts b/frontend/src/scenes/onboarding/productAnalyticsSteps/onboardingTemplateConfigLogic.ts index 40a0d957d4..6c1f85c0b7 100644 --- a/frontend/src/scenes/onboarding/productAnalyticsSteps/onboardingTemplateConfigLogic.ts +++ b/frontend/src/scenes/onboarding/productAnalyticsSteps/onboardingTemplateConfigLogic.ts @@ -2,6 +2,7 @@ import { actions, connect, kea, listeners, path, reducers } from 'kea' import { forms } from 'kea-forms' import { urlToAction } from 'kea-router' import posthog from 'posthog-js' + import { dashboardTemplateVariablesLogic } from 'scenes/dashboard/dashboardTemplateVariablesLogic' import { newDashboardLogic } from 'scenes/dashboard/newDashboardLogic' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/onboarding/sdks/OnboardingInstallStep.tsx b/frontend/src/scenes/onboarding/sdks/OnboardingInstallStep.tsx index c1b56411e1..1e9e00da0b 100644 --- a/frontend/src/scenes/onboarding/sdks/OnboardingInstallStep.tsx +++ b/frontend/src/scenes/onboarding/sdks/OnboardingInstallStep.tsx @@ -1,23 +1,26 @@ +import { useActions, useValues } from 'kea' +import { useEffect, useState } from 'react' + import { IconArrowLeft, IconArrowRight, IconChatHelp, IconCopy } from '@posthog/icons' import { LemonButton, LemonCard, LemonInput, LemonModal, LemonTabs, SpinnerOverlay } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { supportLogic } from 'lib/components/Support/supportLogic' import { useFeatureFlag } from 'lib/hooks/useFeatureFlag' import { copyToClipboard } from 'lib/utils/copyToClipboard' -import { useEffect, useState } from 'react' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { teamLogic } from 'scenes/teamLogic' -import { InviteMembersButton } from '~/layout/navigation/TopBar/AccountPopover' import { sidePanelStateLogic } from '~/layout/navigation-3000/sidepanel/sidePanelStateLogic' -import { type SDK, SDKInstructionsMap, SDKTag, SidePanelTab, OnboardingStepKey, ProductKey } from '~/types' +import { InviteMembersButton } from '~/layout/navigation/TopBar/AccountPopover' +import { OnboardingStepKey, ProductKey, type SDK, SDKInstructionsMap, SDKTag, SidePanelTab } from '~/types' -import { onboardingLogic } from '../onboardingLogic' import { OnboardingStep } from '../OnboardingStep' -import { useInstallationComplete } from './hooks/useInstallationComplete' +import { onboardingLogic } from '../onboardingLogic' import { RealtimeCheckIndicator } from './RealtimeCheckIndicator' -import { sdksLogic } from './sdksLogic' import { SDKSnippet } from './SDKSnippet' +import { useInstallationComplete } from './hooks/useInstallationComplete' +import { sdksLogic } from './sdksLogic' + export type SDKsProps = { sdkInstructionMap: SDKInstructionsMap productKey: ProductKey diff --git a/frontend/src/scenes/onboarding/sdks/OnboardingLiveEvents.tsx b/frontend/src/scenes/onboarding/sdks/OnboardingLiveEvents.tsx index 03f060a120..91ab877dfe 100644 --- a/frontend/src/scenes/onboarding/sdks/OnboardingLiveEvents.tsx +++ b/frontend/src/scenes/onboarding/sdks/OnboardingLiveEvents.tsx @@ -1,8 +1,9 @@ import clsx from 'clsx' import { useValues } from 'kea' + import { PropertyKeyInfo } from 'lib/components/PropertyKeyInfo' -import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { TZLabel } from 'lib/components/TZLabel' +import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { LemonTable, LemonTableColumns } from 'lib/lemon-ui/LemonTable' import { liveEventsTableLogic } from 'scenes/activity/live/liveEventsTableLogic' diff --git a/frontend/src/scenes/onboarding/sdks/RealtimeCheckIndicator.tsx b/frontend/src/scenes/onboarding/sdks/RealtimeCheckIndicator.tsx index a0d2442a97..14baa540ec 100644 --- a/frontend/src/scenes/onboarding/sdks/RealtimeCheckIndicator.tsx +++ b/frontend/src/scenes/onboarding/sdks/RealtimeCheckIndicator.tsx @@ -1,7 +1,7 @@ import { IconCheck } from '@posthog/icons' -import { useInstallationComplete } from './hooks/useInstallationComplete' import { OnboardingLiveEvents } from './OnboardingLiveEvents' +import { useInstallationComplete } from './hooks/useInstallationComplete' export type RealtimeCheckIndicatorProps = { teamPropertyToVerify: string diff --git a/frontend/src/scenes/onboarding/sdks/SDKSnippet.tsx b/frontend/src/scenes/onboarding/sdks/SDKSnippet.tsx index 3345e22e5e..ce4847da9e 100644 --- a/frontend/src/scenes/onboarding/sdks/SDKSnippet.tsx +++ b/frontend/src/scenes/onboarding/sdks/SDKSnippet.tsx @@ -1,7 +1,9 @@ import { Link } from 'lib/lemon-ui/Link' -import { SDKFeatureAnnouncementBanner } from './sdk-install-instructions/components/SDKFeatureAnnouncementBanner' + import { ProductKey, SDK, SDKKey } from '~/types' +import { SDKFeatureAnnouncementBanner } from './sdk-install-instructions/components/SDKFeatureAnnouncementBanner' + export const SDKSnippet = ({ sdk, sdkInstructions, diff --git a/frontend/src/scenes/onboarding/sdks/allSDKs.tsx b/frontend/src/scenes/onboarding/sdks/allSDKs.tsx index 3323e26e6d..b69763dcdb 100644 --- a/frontend/src/scenes/onboarding/sdks/allSDKs.tsx +++ b/frontend/src/scenes/onboarding/sdks/allSDKs.tsx @@ -1,39 +1,40 @@ import { Logomark } from '~/toolbar/assets/Logomark' import { SDK, SDKKey, SDKTag } from '~/types' -import nextjsImage from './logos/nextjs.svg' -import htmlImage from './logos/html.svg' -import jsImage from './logos/javascript_web.svg' -import reactImage from './logos/react.svg' -import reactNativeImage from './logos/react.svg' + import androidImage from './logos/android.svg' import angularImage from './logos/angular.svg' import djangoImage from './logos/django.svg' +import docusaurusImage from './logos/docusaurus.svg' import elixirImage from './logos/elixir.svg' import flutterImage from './logos/flutter.svg' import gatsbyImage from './logos/gatsby.svg' import goImage from './logos/go.svg' +import gtmImage from './logos/gtm.svg' import heliconeImage from './logos/helicone.svg' +import htmlImage from './logos/html.svg' import javaImage from './logos/java.svg' +import jsImage from './logos/javascript_web.svg' import langfuseImage from './logos/langfuse.svg' import laravelImage from './logos/laravel.svg' +import nextjsImage from './logos/nextjs.svg' import nodejsImage from './logos/nodejs.svg' import nuxtImage from './logos/nuxt.svg' import phpImage from './logos/php.svg' import pythonImage from './logos/python.svg' +import reactImage from './logos/react.svg' +import reactNativeImage from './logos/react.svg' +import retoolImage from './logos/retool.svg' import rubyImage from './logos/ruby.svg' +import rudderstackImage from './logos/rudderstack.svg' import rustImage from './logos/rust.svg' +import segmentImage from './logos/segment.svg' +import sentryImage from './logos/sentry.svg' +import shopifyImage from './logos/shopify.svg' import svelteImage from './logos/svelte.svg' import traceloopImage from './logos/traceloop.svg' import vueImage from './logos/vue.svg' import webflowImage from './logos/webflow.svg' -import gtmImage from './logos/gtm.svg' -import segmentImage from './logos/segment.svg' -import rudderstackImage from './logos/rudderstack.svg' -import docusaurusImage from './logos/docusaurus.svg' -import shopifyImage from './logos/shopify.svg' import wordpressImage from './logos/wordpress.svg' -import sentryImage from './logos/sentry.svg' -import retoolImage from './logos/retool.svg' export const allSDKs: SDK[] = [ // Web diff --git a/frontend/src/scenes/onboarding/sdks/error-tracking/ErrorTrackingSDKInstructions.tsx b/frontend/src/scenes/onboarding/sdks/error-tracking/ErrorTrackingSDKInstructions.tsx index fcc9c24212..39d671dba1 100644 --- a/frontend/src/scenes/onboarding/sdks/error-tracking/ErrorTrackingSDKInstructions.tsx +++ b/frontend/src/scenes/onboarding/sdks/error-tracking/ErrorTrackingSDKInstructions.tsx @@ -1,5 +1,3 @@ -import { SDKInstructionsMap, SDKKey } from '~/types' - import { AngularInstructions, HTMLSnippetInstructions, @@ -11,6 +9,8 @@ import { SvelteInstructions, } from '.' +import { SDKInstructionsMap, SDKKey } from '~/types' + export const ErrorTrackingSDKInstructions: SDKInstructionsMap = { [SDKKey.ANGULAR]: AngularInstructions, [SDKKey.HTML_SNIPPET]: HTMLSnippetInstructions, diff --git a/frontend/src/scenes/onboarding/sdks/error-tracking/next-js.tsx b/frontend/src/scenes/onboarding/sdks/error-tracking/next-js.tsx index 44c2c7626b..0e8a42a662 100644 --- a/frontend/src/scenes/onboarding/sdks/error-tracking/next-js.tsx +++ b/frontend/src/scenes/onboarding/sdks/error-tracking/next-js.tsx @@ -1,5 +1,7 @@ -import { Link } from '@posthog/lemon-ui' import { useValues } from 'kea' + +import { Link } from '@posthog/lemon-ui' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { apiHostOrigin } from 'lib/utils/apiHost' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/onboarding/sdks/error-tracking/node.tsx b/frontend/src/scenes/onboarding/sdks/error-tracking/node.tsx index 7280a7279e..eefee0c403 100644 --- a/frontend/src/scenes/onboarding/sdks/error-tracking/node.tsx +++ b/frontend/src/scenes/onboarding/sdks/error-tracking/node.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/onboarding/sdks/error-tracking/svelte.tsx b/frontend/src/scenes/onboarding/sdks/error-tracking/svelte.tsx index e46f891b94..f1ccc4ddd2 100644 --- a/frontend/src/scenes/onboarding/sdks/error-tracking/svelte.tsx +++ b/frontend/src/scenes/onboarding/sdks/error-tracking/svelte.tsx @@ -1,5 +1,7 @@ -import { Link } from '@posthog/lemon-ui' import { useValues } from 'kea' + +import { Link } from '@posthog/lemon-ui' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/onboarding/sdks/feature-flags/FeatureFlagsSDKInstructions.tsx b/frontend/src/scenes/onboarding/sdks/feature-flags/FeatureFlagsSDKInstructions.tsx index ab58f83895..c32036968a 100644 --- a/frontend/src/scenes/onboarding/sdks/feature-flags/FeatureFlagsSDKInstructions.tsx +++ b/frontend/src/scenes/onboarding/sdks/feature-flags/FeatureFlagsSDKInstructions.tsx @@ -1,9 +1,7 @@ -import { SDKInstructionsMap, SDKKey } from '~/types' - import { + FeatureFlagsAPIInstructions, FeatureFlagsAndroidInstructions, FeatureFlagsAngularInstructions, - FeatureFlagsAPIInstructions, FeatureFlagsAstroInstructions, FeatureFlagsBubbleInstructions, FeatureFlagsDjangoInstructions, @@ -18,15 +16,17 @@ import { FeatureFlagsNuxtJSInstructions, FeatureFlagsPHPInstructions, FeatureFlagsPythonInstructions, + FeatureFlagsRNInstructions, FeatureFlagsReactInstructions, FeatureFlagsRemixJSInstructions, - FeatureFlagsRNInstructions, FeatureFlagsRubyInstructions, FeatureFlagsSvelteInstructions, FeatureFlagsVueInstructions, FeatureFlagsWebflowInstructions, } from '.' +import { SDKInstructionsMap, SDKKey } from '~/types' + export const FeatureFlagsSDKInstructions: SDKInstructionsMap = { [SDKKey.JS_WEB]: FeatureFlagsJSWebInstructions, [SDKKey.ANGULAR]: FeatureFlagsAngularInstructions, diff --git a/frontend/src/scenes/onboarding/sdks/hooks/useInstallationComplete.tsx b/frontend/src/scenes/onboarding/sdks/hooks/useInstallationComplete.tsx index f13cc8dc8e..51582c6730 100644 --- a/frontend/src/scenes/onboarding/sdks/hooks/useInstallationComplete.tsx +++ b/frontend/src/scenes/onboarding/sdks/hooks/useInstallationComplete.tsx @@ -1,6 +1,7 @@ import { useActions, useValues } from 'kea' -import { useInterval } from 'lib/hooks/useInterval' import { useEffect, useState } from 'react' + +import { useInterval } from 'lib/hooks/useInterval' import { teamLogic } from 'scenes/teamLogic' import type { TeamType } from '~/types' diff --git a/frontend/src/scenes/onboarding/sdks/product-analytics/ProductAnalyticsSDKInstructions.tsx b/frontend/src/scenes/onboarding/sdks/product-analytics/ProductAnalyticsSDKInstructions.tsx index f9648fe700..8dd809b29a 100644 --- a/frontend/src/scenes/onboarding/sdks/product-analytics/ProductAnalyticsSDKInstructions.tsx +++ b/frontend/src/scenes/onboarding/sdks/product-analytics/ProductAnalyticsSDKInstructions.tsx @@ -1,11 +1,9 @@ -import { SDKInstructionsMap, SDKKey } from '~/types' - import { HTMLSnippetInstructions, JSWebInstructions, + ProductAnalyticsAPIInstructions, ProductAnalyticsAndroidInstructions, ProductAnalyticsAngularInstructions, - ProductAnalyticsAPIInstructions, ProductAnalyticsAstroInstructions, ProductAnalyticsBubbleInstructions, ProductAnalyticsDjangoInstructions, @@ -22,9 +20,9 @@ import { ProductAnalyticsNuxtJSInstructions, ProductAnalyticsPHPInstructions, ProductAnalyticsPythonInstructions, + ProductAnalyticsRNInstructions, ProductAnalyticsReactInstructions, ProductAnalyticsRemixJSInstructions, - ProductAnalyticsRNInstructions, ProductAnalyticsRubyInstructions, ProductAnalyticsSvelteJSInstructions, ProductAnalyticsTraceloopInstructions, @@ -32,6 +30,8 @@ import { ProductAnalyticsWebflowInstructions, } from '.' +import { SDKInstructionsMap, SDKKey } from '~/types' + export const ProductAnalyticsSDKInstructions: SDKInstructionsMap = { [SDKKey.JS_WEB]: JSWebInstructions, [SDKKey.ANDROID]: ProductAnalyticsAndroidInstructions, diff --git a/frontend/src/scenes/onboarding/sdks/product-analytics/api.tsx b/frontend/src/scenes/onboarding/sdks/product-analytics/api.tsx index 1f898f787c..fb4e2c5b79 100644 --- a/frontend/src/scenes/onboarding/sdks/product-analytics/api.tsx +++ b/frontend/src/scenes/onboarding/sdks/product-analytics/api.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { apiHostOrigin } from 'lib/utils/apiHost' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/onboarding/sdks/product-analytics/helicone.tsx b/frontend/src/scenes/onboarding/sdks/product-analytics/helicone.tsx index 86fd593462..9ae6b72dc8 100644 --- a/frontend/src/scenes/onboarding/sdks/product-analytics/helicone.tsx +++ b/frontend/src/scenes/onboarding/sdks/product-analytics/helicone.tsx @@ -1,5 +1,7 @@ -import { Link } from '@posthog/lemon-ui' import { useValues } from 'kea' + +import { Link } from '@posthog/lemon-ui' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { apiHostOrigin } from 'lib/utils/apiHost' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/onboarding/sdks/product-analytics/langfuse.tsx b/frontend/src/scenes/onboarding/sdks/product-analytics/langfuse.tsx index f2c9ca7590..3aa2a11e30 100644 --- a/frontend/src/scenes/onboarding/sdks/product-analytics/langfuse.tsx +++ b/frontend/src/scenes/onboarding/sdks/product-analytics/langfuse.tsx @@ -1,5 +1,7 @@ -import { Link } from '@posthog/lemon-ui' import { useValues } from 'kea' + +import { Link } from '@posthog/lemon-ui' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { apiHostOrigin } from 'lib/utils/apiHost' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/onboarding/sdks/product-analytics/traceloop.tsx b/frontend/src/scenes/onboarding/sdks/product-analytics/traceloop.tsx index 51d00f919f..8bb4a82071 100644 --- a/frontend/src/scenes/onboarding/sdks/product-analytics/traceloop.tsx +++ b/frontend/src/scenes/onboarding/sdks/product-analytics/traceloop.tsx @@ -1,5 +1,7 @@ -import { Link } from '@posthog/lemon-ui' import { useValues } from 'kea' + +import { Link } from '@posthog/lemon-ui' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { apiHostOrigin } from 'lib/utils/apiHost' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/android.tsx b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/android.tsx index d3a24ee637..b11142e984 100644 --- a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/android.tsx +++ b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/android.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { apiHostOrigin } from 'lib/utils/apiHost' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/angular.tsx b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/angular.tsx index a4c99552df..ba5930c2b4 100644 --- a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/angular.tsx +++ b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/angular.tsx @@ -1,12 +1,13 @@ import { useValues } from 'kea' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { apiHostOrigin } from 'lib/utils/apiHost' import { teamLogic } from 'scenes/teamLogic' -import { JSInstallSnippet } from './js-web' import { SDK_DEFAULTS_DATE } from './constants' +import { JSInstallSnippet } from './js-web' function EnvVarsSnippet(): JSX.Element { const { currentTeam } = useValues(teamLogic) diff --git a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/astro.tsx b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/astro.tsx index 54cf76cee0..c2d2aa1e0f 100644 --- a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/astro.tsx +++ b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/astro.tsx @@ -1,11 +1,14 @@ import { useValues } from 'kea' -import { CodeSnippet, Language } from 'lib/components/CodeSnippet' -import { Link } from 'lib/lemon-ui/Link' -import { useJsSnippet } from 'lib/components/JSSnippet' -import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' -import SetupWizardBanner from './components/SetupWizardBanner' + import { LemonDivider } from '@posthog/lemon-ui' +import { CodeSnippet, Language } from 'lib/components/CodeSnippet' +import { useJsSnippet } from 'lib/components/JSSnippet' +import { Link } from 'lib/lemon-ui/Link' +import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' + +import SetupWizardBanner from './components/SetupWizardBanner' + function CreatePostHogAstroFileSnippet(): JSX.Element { return ( diff --git a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/components/SDKFeatureAnnouncementBanner.tsx b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/components/SDKFeatureAnnouncementBanner.tsx index a2e7f8e860..39874b907d 100644 --- a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/components/SDKFeatureAnnouncementBanner.tsx +++ b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/components/SDKFeatureAnnouncementBanner.tsx @@ -4,7 +4,8 @@ import { LemonTagType } from 'lib/lemon-ui/LemonTag' import { LemonTag } from 'lib/lemon-ui/LemonTag' import { Link } from 'lib/lemon-ui/Link' import { urls } from 'scenes/urls' -import { SDKKey, OnboardingStepKey } from '~/types' + +import { OnboardingStepKey, SDKKey } from '~/types' const platformNames: Partial> = { [SDKKey.ANDROID]: 'Android', diff --git a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/components/SetupWizardBanner.tsx b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/components/SetupWizardBanner.tsx index 28a81b0925..6515e42001 100644 --- a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/components/SetupWizardBanner.tsx +++ b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/components/SetupWizardBanner.tsx @@ -1,9 +1,11 @@ import { useValues } from 'kea' + import { Language } from 'lib/components/CodeSnippet' import { CodeSnippet } from 'lib/components/CodeSnippet' import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { LemonTag } from 'lib/lemon-ui/LemonTag' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' + import { Region } from '~/types' const SetupWizardBanner = ({ integrationName }: { integrationName: string }): JSX.Element => { diff --git a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/django.tsx b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/django.tsx index aee7182c84..400c3a286e 100644 --- a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/django.tsx +++ b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/django.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { apiHostOrigin } from 'lib/utils/apiHost' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/elixir.tsx b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/elixir.tsx index c4005a4556..9c023573f9 100644 --- a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/elixir.tsx +++ b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/elixir.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { apiHostOrigin } from 'lib/utils/apiHost' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/flutter.tsx b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/flutter.tsx index 2243c47be4..e5f409db2a 100644 --- a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/flutter.tsx +++ b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/flutter.tsx @@ -1,5 +1,7 @@ -import { Link } from '@posthog/lemon-ui' import { useValues } from 'kea' + +import { Link } from '@posthog/lemon-ui' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { useJsSnippet } from 'lib/components/JSSnippet' import { apiHostOrigin } from 'lib/utils/apiHost' diff --git a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/go.tsx b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/go.tsx index d00f2007fd..9954dcb0ad 100644 --- a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/go.tsx +++ b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/go.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { apiHostOrigin } from 'lib/utils/apiHost' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/ios.tsx b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/ios.tsx index 2767411898..4d0f8aaaf7 100644 --- a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/ios.tsx +++ b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/ios.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { apiHostOrigin } from 'lib/utils/apiHost' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/js-web.tsx b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/js-web.tsx index 2ca4f6001e..e7b6123015 100644 --- a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/js-web.tsx +++ b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/js-web.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' diff --git a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/laravel.tsx b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/laravel.tsx index 55ff388d95..2b05c0f72d 100644 --- a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/laravel.tsx +++ b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/laravel.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { apiHostOrigin } from 'lib/utils/apiHost' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/next-js.tsx b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/next-js.tsx index c9c0d3f753..c1d1bb291a 100644 --- a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/next-js.tsx +++ b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/next-js.tsx @@ -1,8 +1,9 @@ -import { LemonDivider, LemonTabs } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonDivider, LemonTabs } from '@posthog/lemon-ui' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { FEATURE_FLAGS } from 'lib/constants' - import { Link } from 'lib/lemon-ui/Link' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { apiHostOrigin } from 'lib/utils/apiHost' @@ -10,9 +11,9 @@ import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { teamLogic } from 'scenes/teamLogic' import SetupWizardBanner from './components/SetupWizardBanner' -import { JSInstallSnippet } from './js-web' -import { nextJsInstructionsLogic, type NextJSRouter } from './nextJsInstructionsLogic' import { SDK_DEFAULTS_DATE } from './constants' +import { JSInstallSnippet } from './js-web' +import { type NextJSRouter, nextJsInstructionsLogic } from './nextJsInstructionsLogic' function NextEnvVarsSnippet(): JSX.Element { const { currentTeam } = useValues(teamLogic) diff --git a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/nodejs.tsx b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/nodejs.tsx index 452b28ae98..66561a5137 100644 --- a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/nodejs.tsx +++ b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/nodejs.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { apiHostOrigin } from 'lib/utils/apiHost' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/nuxt.tsx b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/nuxt.tsx index 4f01ac29a9..81734a369f 100644 --- a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/nuxt.tsx +++ b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/nuxt.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { FEATURE_FLAGS } from 'lib/constants' import { Link } from 'lib/lemon-ui/Link' @@ -6,8 +7,8 @@ import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { apiHostOrigin } from 'lib/utils/apiHost' import { teamLogic } from 'scenes/teamLogic' -import { JSInstallSnippet } from './js-web' import { SDK_DEFAULTS_DATE } from './constants' +import { JSInstallSnippet } from './js-web' function NuxtEnvVarsSnippet(): JSX.Element { const { currentTeam } = useValues(teamLogic) diff --git a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/php.tsx b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/php.tsx index c91e8af98b..b4c779cbb8 100644 --- a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/php.tsx +++ b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/php.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { apiHostOrigin } from 'lib/utils/apiHost' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/python.tsx b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/python.tsx index 35b2052d69..d78053f4ca 100644 --- a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/python.tsx +++ b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/python.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { apiHostOrigin } from 'lib/utils/apiHost' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/react-native.tsx b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/react-native.tsx index 68acae7aef..db215740db 100644 --- a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/react-native.tsx +++ b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/react-native.tsx @@ -1,9 +1,12 @@ -import { LemonDivider, Link } from '@posthog/lemon-ui' import { useValues } from 'kea' + +import { LemonDivider, Link } from '@posthog/lemon-ui' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { apiHostOrigin } from 'lib/utils/apiHost' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { teamLogic } from 'scenes/teamLogic' + import SetupWizardBanner from './components/SetupWizardBanner' export interface RNSetupProps { diff --git a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/react.tsx b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/react.tsx index b59a08b507..5ef5474947 100644 --- a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/react.tsx +++ b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/react.tsx @@ -1,14 +1,15 @@ -import { LemonDivider } from '@posthog/lemon-ui' import { useValues } from 'kea' -import { CodeSnippet, Language } from 'lib/components/CodeSnippet' +import { LemonDivider } from '@posthog/lemon-ui' + +import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { apiHostOrigin } from 'lib/utils/apiHost' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { teamLogic } from 'scenes/teamLogic' import SetupWizardBanner from './components/SetupWizardBanner' -import { JSInstallSnippet } from './js-web' import { SDK_DEFAULTS_DATE } from './constants' +import { JSInstallSnippet } from './js-web' function ReactEnvVarsSnippet(): JSX.Element { const { currentTeam } = useValues(teamLogic) diff --git a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/remix.tsx b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/remix.tsx index 62cdc7a27c..7005993a8a 100644 --- a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/remix.tsx +++ b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/remix.tsx @@ -1,12 +1,13 @@ import { useValues } from 'kea' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { apiHostOrigin } from 'lib/utils/apiHost' import { teamLogic } from 'scenes/teamLogic' -import { JSInstallSnippet } from './js-web' import { SDK_DEFAULTS_DATE } from './constants' +import { JSInstallSnippet } from './js-web' function RemixExternalImportSnippet(): JSX.Element { return ( diff --git a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/ruby.tsx b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/ruby.tsx index bc89e9ce5a..edbb9d51ac 100644 --- a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/ruby.tsx +++ b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/ruby.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { apiHostOrigin } from 'lib/utils/apiHost' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/svelte.tsx b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/svelte.tsx index e1f4a95543..3966f1c274 100644 --- a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/svelte.tsx +++ b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/svelte.tsx @@ -1,15 +1,17 @@ -import { LemonDivider, Link } from '@posthog/lemon-ui' import { useValues } from 'kea' + +import { LemonDivider, Link } from '@posthog/lemon-ui' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { apiHostOrigin } from 'lib/utils/apiHost' +import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { teamLogic } from 'scenes/teamLogic' -import { JSInstallSnippet } from './js-web' -import { SDK_DEFAULTS_DATE } from './constants' -import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import SetupWizardBanner from './components/SetupWizardBanner' +import { SDK_DEFAULTS_DATE } from './constants' +import { JSInstallSnippet } from './js-web' function SvelteAppClientCodeSnippet(): JSX.Element { const { currentTeam } = useValues(teamLogic) diff --git a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/vue.tsx b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/vue.tsx index 2a6e92421a..1bda63cb0e 100644 --- a/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/vue.tsx +++ b/frontend/src/scenes/onboarding/sdks/sdk-install-instructions/vue.tsx @@ -1,13 +1,14 @@ import { useValues } from 'kea' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' +import { FEATURE_FLAGS } from 'lib/constants' import { Link } from 'lib/lemon-ui/Link' +import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { apiHostOrigin } from 'lib/utils/apiHost' import { teamLogic } from 'scenes/teamLogic' -import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { JSInstallSnippet } from './js-web' -import { FEATURE_FLAGS } from 'lib/constants' import { SDK_DEFAULTS_DATE } from './constants' +import { JSInstallSnippet } from './js-web' function VueCreateComposableFileSnippet(): JSX.Element { const { currentTeam } = useValues(teamLogic) diff --git a/frontend/src/scenes/onboarding/sdks/sdksLogic.tsx b/frontend/src/scenes/onboarding/sdks/sdksLogic.tsx index 0549fd5f8f..6372e27098 100644 --- a/frontend/src/scenes/onboarding/sdks/sdksLogic.tsx +++ b/frontend/src/scenes/onboarding/sdks/sdksLogic.tsx @@ -1,6 +1,7 @@ import { actions, afterMount, connect, events, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { urlToAction } from 'kea-router' + import api from 'lib/api' import { LemonSelectOptions } from 'lib/lemon-ui/LemonSelect/LemonSelect' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' diff --git a/frontend/src/scenes/onboarding/sdks/session-replay/SessionReplaySDKInstructions.tsx b/frontend/src/scenes/onboarding/sdks/session-replay/SessionReplaySDKInstructions.tsx index 4196251079..66c47f3fbc 100644 --- a/frontend/src/scenes/onboarding/sdks/session-replay/SessionReplaySDKInstructions.tsx +++ b/frontend/src/scenes/onboarding/sdks/session-replay/SessionReplaySDKInstructions.tsx @@ -1,11 +1,3 @@ -import { LemonBanner } from 'lib/lemon-ui/LemonBanner' -import { LemonDivider } from 'lib/lemon-ui/LemonDivider' -import { LemonTag } from 'lib/lemon-ui/LemonTag' -import { Link } from 'lib/lemon-ui/Link' -import { urls } from 'scenes/urls' - -import { SDKInstructionsMap, SDKKey, OnboardingStepKey } from '~/types' - import { AndroidInstructions, AngularInstructions, @@ -14,18 +6,26 @@ import { FlutterInstructions, FramerInstructions, HTMLSnippetInstructions, - iOSInstructions, JSWebInstructions, NextJSInstructions, NuxtJSInstructions, + RNInstructions, ReactInstructions, RemixInstructions, - RNInstructions, SvelteInstructions, VueInstructions, WebflowInstructions, + iOSInstructions, } from '.' +import { LemonBanner } from 'lib/lemon-ui/LemonBanner' +import { LemonDivider } from 'lib/lemon-ui/LemonDivider' +import { LemonTag } from 'lib/lemon-ui/LemonTag' +import { Link } from 'lib/lemon-ui/Link' +import { urls } from 'scenes/urls' + +import { OnboardingStepKey, SDKInstructionsMap, SDKKey } from '~/types' + export const SessionReplaySDKInstructions: SDKInstructionsMap = { [SDKKey.JS_WEB]: JSWebInstructions, [SDKKey.HTML_SNIPPET]: HTMLSnippetInstructions, diff --git a/frontend/src/scenes/onboarding/sdks/shared-snippets.tsx b/frontend/src/scenes/onboarding/sdks/shared-snippets.tsx index bbbf1b8936..3997b4e5a1 100644 --- a/frontend/src/scenes/onboarding/sdks/shared-snippets.tsx +++ b/frontend/src/scenes/onboarding/sdks/shared-snippets.tsx @@ -1,5 +1,7 @@ -import { Link } from '@posthog/lemon-ui' import { useValues } from 'kea' + +import { Link } from '@posthog/lemon-ui' + import { CodeSnippet } from 'lib/components/CodeSnippet' import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' diff --git a/frontend/src/scenes/onboarding/sdks/surveys/SurveysSDKInstructions.tsx b/frontend/src/scenes/onboarding/sdks/surveys/SurveysSDKInstructions.tsx index 856306d659..4debc9fbb6 100644 --- a/frontend/src/scenes/onboarding/sdks/surveys/SurveysSDKInstructions.tsx +++ b/frontend/src/scenes/onboarding/sdks/surveys/SurveysSDKInstructions.tsx @@ -1,24 +1,24 @@ -import { SDKInstructionsMap, SDKKey } from '~/types' - import { AngularInstructions, AstroInstructions, BubbleInstructions, + FlutterInstructions, FramerInstructions, HTMLSnippetInstructions, JSWebInstructions, NextJSInstructions, NuxtJSInstructions, + RNInstructions, ReactInstructions, RemixInstructions, SvelteInstructions, VueInstructions, WebflowInstructions, iOSInstructions, - FlutterInstructions, - RNInstructions, } from '.' +import { SDKInstructionsMap, SDKKey } from '~/types' + export const SurveysSDKInstructions: SDKInstructionsMap = { [SDKKey.JS_WEB]: JSWebInstructions, [SDKKey.HTML_SNIPPET]: HTMLSnippetInstructions, diff --git a/frontend/src/scenes/onboarding/sdks/web-analytics/WebAnalyticsSDKInstructions.tsx b/frontend/src/scenes/onboarding/sdks/web-analytics/WebAnalyticsSDKInstructions.tsx index 4457c6dfb7..d7946a23c0 100644 --- a/frontend/src/scenes/onboarding/sdks/web-analytics/WebAnalyticsSDKInstructions.tsx +++ b/frontend/src/scenes/onboarding/sdks/web-analytics/WebAnalyticsSDKInstructions.tsx @@ -1,5 +1,3 @@ -import { SDKInstructionsMap, SDKKey } from '~/types' - import { AndroidInstructions, AngularInstructions, @@ -8,7 +6,6 @@ import { FlutterInstructions, FramerInstructions, HTMLSnippetInstructions, - iOSInstructions, JSWebInstructions, NextJSInstructions, NuxtJSInstructions, @@ -18,8 +15,11 @@ import { VueInstructions, WebAnalyticsRNInstructions, WebflowInstructions, + iOSInstructions, } from '.' +import { SDKInstructionsMap, SDKKey } from '~/types' + export const WebAnalyticsSDKInstructions: SDKInstructionsMap = { [SDKKey.JS_WEB]: JSWebInstructions, [SDKKey.HTML_SNIPPET]: HTMLSnippetInstructions, diff --git a/frontend/src/scenes/onboarding/web-analytics/OnboardingWebAnalyticsAuthorizedDomainsStep.tsx b/frontend/src/scenes/onboarding/web-analytics/OnboardingWebAnalyticsAuthorizedDomainsStep.tsx index 30eaad7620..761b4d7b24 100644 --- a/frontend/src/scenes/onboarding/web-analytics/OnboardingWebAnalyticsAuthorizedDomainsStep.tsx +++ b/frontend/src/scenes/onboarding/web-analytics/OnboardingWebAnalyticsAuthorizedDomainsStep.tsx @@ -1,9 +1,11 @@ import { useValues } from 'kea' + import { AuthorizedUrlList } from 'lib/components/AuthorizedUrlList/AuthorizedUrlList' -import { authorizedUrlListLogic, AuthorizedUrlListType } from 'lib/components/AuthorizedUrlList/authorizedUrlListLogic' +import { AuthorizedUrlListType, authorizedUrlListLogic } from 'lib/components/AuthorizedUrlList/authorizedUrlListLogic' + +import { OnboardingStepKey } from '~/types' import { OnboardingStep } from '../OnboardingStep' -import { OnboardingStepKey } from '~/types' export function OnboardingWebAnalyticsAuthorizedDomainsStep({ stepKey = OnboardingStepKey.AUTHORIZED_DOMAINS, diff --git a/frontend/src/scenes/organization/ConfirmOrganization/ConfirmOrganization.tsx b/frontend/src/scenes/organization/ConfirmOrganization/ConfirmOrganization.tsx index 49a5027c8b..6dc5d69181 100644 --- a/frontend/src/scenes/organization/ConfirmOrganization/ConfirmOrganization.tsx +++ b/frontend/src/scenes/organization/ConfirmOrganization/ConfirmOrganization.tsx @@ -1,6 +1,8 @@ -import { Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' + +import { Link } from '@posthog/lemon-ui' + import { AnimatedCollapsible } from 'lib/components/AnimatedCollapsible' import { BridgePage } from 'lib/components/BridgePage/BridgePage' import SignupReferralSource from 'lib/components/SignupReferralSource' diff --git a/frontend/src/scenes/organization/ConfirmOrganization/confirmOrganizationLogic.ts b/frontend/src/scenes/organization/ConfirmOrganization/confirmOrganizationLogic.ts index b120c042cc..ff652eb90d 100644 --- a/frontend/src/scenes/organization/ConfirmOrganization/confirmOrganizationLogic.ts +++ b/frontend/src/scenes/organization/ConfirmOrganization/confirmOrganizationLogic.ts @@ -1,6 +1,7 @@ import { actions, kea, path, reducers } from 'kea' import { forms } from 'kea-forms' import { urlToAction } from 'kea-router' + import api from 'lib/api' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' import { getRelativeNextPath } from 'lib/utils' diff --git a/frontend/src/scenes/organization/CreateOrganizationModal.tsx b/frontend/src/scenes/organization/CreateOrganizationModal.tsx index 27e9a50b5d..75a6715004 100644 --- a/frontend/src/scenes/organization/CreateOrganizationModal.tsx +++ b/frontend/src/scenes/organization/CreateOrganizationModal.tsx @@ -1,7 +1,9 @@ -import { LemonButton, LemonInput, LemonModal, Link } from '@posthog/lemon-ui' import { useActions } from 'kea' -import { LemonField } from 'lib/lemon-ui/LemonField' import { useState } from 'react' + +import { LemonButton, LemonInput, LemonModal, Link } from '@posthog/lemon-ui' + +import { LemonField } from 'lib/lemon-ui/LemonField' import { organizationLogic } from 'scenes/organizationLogic' export function CreateOrganizationModal({ diff --git a/frontend/src/scenes/organization/membersLogic.tsx b/frontend/src/scenes/organization/membersLogic.tsx index 077a846647..6a496e9e53 100644 --- a/frontend/src/scenes/organization/membersLogic.tsx +++ b/frontend/src/scenes/organization/membersLogic.tsx @@ -1,6 +1,7 @@ import Fuse from 'fuse.js' import { actions, connect, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { OrganizationMembershipLevel } from 'lib/constants' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' @@ -9,7 +10,7 @@ import { membershipLevelToName } from 'lib/utils/permissioning' import { organizationLogic } from 'scenes/organizationLogic' import { userLogic } from 'scenes/userLogic' -import { activationLogic, ActivationTask } from '~/layout/navigation-3000/sidepanel/panels/activation/activationLogic' +import { ActivationTask, activationLogic } from '~/layout/navigation-3000/sidepanel/panels/activation/activationLogic' import { OrganizationMemberScopedApiKeysResponse, OrganizationMemberType } from '~/types' import type { membersLogicType } from './membersLogicType' diff --git a/frontend/src/scenes/organizationLogic.test.ts b/frontend/src/scenes/organizationLogic.test.ts index 3ab247a0d6..bf90527439 100644 --- a/frontend/src/scenes/organizationLogic.test.ts +++ b/frontend/src/scenes/organizationLogic.test.ts @@ -1,6 +1,7 @@ -import { expectLogic } from 'kea-test-utils' import { MOCK_DEFAULT_ORGANIZATION } from 'lib/api.mock' +import { expectLogic } from 'kea-test-utils' + import { initKeaTests } from '~/test/init' import { AppContext } from '../types' diff --git a/frontend/src/scenes/organizationLogic.tsx b/frontend/src/scenes/organizationLogic.tsx index 80e4c952c5..d02b35e111 100644 --- a/frontend/src/scenes/organizationLogic.tsx +++ b/frontend/src/scenes/organizationLogic.tsx @@ -1,6 +1,7 @@ import { actions, afterMount, connect, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { router } from 'kea-router' + import api, { ApiConfig } from 'lib/api' import { timeSensitiveAuthenticationLogic } from 'lib/components/TimeSensitiveAuthentication/timeSensitiveAuthenticationLogic' import { OrganizationMembershipLevel } from 'lib/constants' diff --git a/frontend/src/scenes/paths-v2/PathNodeLabel.tsx b/frontend/src/scenes/paths-v2/PathNodeLabel.tsx index 2f5cf5eaa7..225d8e9011 100644 --- a/frontend/src/scenes/paths-v2/PathNodeLabel.tsx +++ b/frontend/src/scenes/paths-v2/PathNodeLabel.tsx @@ -1,14 +1,16 @@ +import { useActions, useValues } from 'kea' +import posthog from 'posthog-js' + import { IconEllipsis } from '@posthog/icons' import { LemonButton, LemonMenu, Tooltip } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { copyToClipboard } from 'lib/utils/copyToClipboard' -import posthog from 'posthog-js' import { userLogic } from 'scenes/userLogic' import { AvailableFeature, InsightLogicProps } from '~/types' +import { PathNodeData, pageUrl } from './pathUtils' import { pathsDataLogic } from './pathsDataLogic' -import { pageUrl, PathNodeData } from './pathUtils' import { NODE_LABEL_HEIGHT, NODE_LABEL_LEFT_OFFSET, NODE_LABEL_TOP_OFFSET, NODE_LABEL_WIDTH } from './renderPaths' export type PathNodeLabelProps = { diff --git a/frontend/src/scenes/paths-v2/PathsV2.tsx b/frontend/src/scenes/paths-v2/PathsV2.tsx index 8812723edc..1ae55d9a0e 100644 --- a/frontend/src/scenes/paths-v2/PathsV2.tsx +++ b/frontend/src/scenes/paths-v2/PathsV2.tsx @@ -1,19 +1,20 @@ import './Paths.scss' import { useActions, useValues } from 'kea' +import { useEffect, useRef, useState } from 'react' + import { useResizeObserver } from 'lib/hooks/useResizeObserver' import { lightenDarkenColor } from 'lib/utils' -import { useEffect, useRef, useState } from 'react' import { InsightEmptyState, InsightErrorState } from 'scenes/insights/EmptyStates' -import { insightLogic } from 'scenes/insights/insightLogic' import { insightDataLogic } from 'scenes/insights/insightDataLogic' -import { shouldQueryBeAsync } from '~/queries/utils' +import { insightLogic } from 'scenes/insights/insightLogic' import { FunnelPathsFilter } from '~/queries/schema/schema-general' +import { shouldQueryBeAsync } from '~/queries/utils' import { PathNodeLabel } from './PathNodeLabel' -import { pathsDataLogic } from './pathsDataLogic' import type { PathNodeData } from './pathUtils' +import { pathsDataLogic } from './pathsDataLogic' import { renderPaths } from './renderPaths' export function PathsV2(): JSX.Element { diff --git a/frontend/src/scenes/paths-v2/pathUtils.test.ts b/frontend/src/scenes/paths-v2/pathUtils.test.ts index cdf5abc5eb..817379594e 100644 --- a/frontend/src/scenes/paths-v2/pathUtils.test.ts +++ b/frontend/src/scenes/paths-v2/pathUtils.test.ts @@ -1,6 +1,6 @@ import { RGBColor } from 'd3' -import { pageUrl, PathNodeData } from './pathUtils' +import { PathNodeData, pageUrl } from './pathUtils' describe('pageUrl', () => { it('should correctly process PathNodeData with hash based URL', () => { diff --git a/frontend/src/scenes/paths-v2/pathsDataLogic.test.ts b/frontend/src/scenes/paths-v2/pathsDataLogic.test.ts index 6b95678c45..02d60e1753 100644 --- a/frontend/src/scenes/paths-v2/pathsDataLogic.test.ts +++ b/frontend/src/scenes/paths-v2/pathsDataLogic.test.ts @@ -1,4 +1,5 @@ import { expectLogic } from 'kea-test-utils' + import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { pathsDataLogic } from 'scenes/paths-v2/pathsDataLogic' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/paths-v2/pathsDataLogic.ts b/frontend/src/scenes/paths-v2/pathsDataLogic.ts index fa30e8e31d..c5b819e979 100644 --- a/frontend/src/scenes/paths-v2/pathsDataLogic.ts +++ b/frontend/src/scenes/paths-v2/pathsDataLogic.ts @@ -1,12 +1,13 @@ import { actions, connect, kea, key, listeners, path, props, selectors } from 'kea' import { router } from 'kea-router' + import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { MathAvailability } from 'scenes/insights/filters/ActionFilter/ActionFilterRow/ActionFilterRow' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' import { keyForInsightLogicProps } from 'scenes/insights/sharedUtils' +import { OpenPersonsModalProps, openPersonsModal } from 'scenes/trends/persons-modal/PersonsModal' import { pathsTitle } from 'scenes/trends/persons-modal/persons-modal-utils' -import { openPersonsModal, OpenPersonsModalProps } from 'scenes/trends/persons-modal/PersonsModal' import { urls } from 'scenes/urls' import { actionsAndEventsToSeries } from '~/queries/nodes/InsightQuery/utils/filtersToQueryNode' @@ -14,8 +15,8 @@ import { InsightActorsQuery, InsightVizNode, NodeKind, PathsLink, PathsQuery } f import { isPathsQuery } from '~/queries/utils' import { ActionFilter, InsightLogicProps, PathType, PropertyFilterType, PropertyOperator } from '~/types' -import type { pathsDataLogicType } from './pathsDataLogicType' import { PathNodeData } from './pathUtils' +import type { pathsDataLogicType } from './pathsDataLogicType' import { Paths, PathsNode } from './types' export const DEFAULT_STEP_LIMIT = 5 diff --git a/frontend/src/scenes/paths-v2/renderPaths.ts b/frontend/src/scenes/paths-v2/renderPaths.ts index ace5452191..557b024262 100644 --- a/frontend/src/scenes/paths-v2/renderPaths.ts +++ b/frontend/src/scenes/paths-v2/renderPaths.ts @@ -1,11 +1,12 @@ import * as d3 from 'd3' import * as Sankey from 'd3-sankey' -import { D3Selector } from 'lib/hooks/useD3' import { Dispatch, RefObject, SetStateAction } from 'react' +import { D3Selector } from 'lib/hooks/useD3' + import { FunnelPathsFilter, PathsFilter } from '~/queries/schema/schema-general' -import { isSelectedPathStartOrEnd, PathNodeData, PathTargetLink } from './pathUtils' +import { PathNodeData, PathTargetLink, isSelectedPathStartOrEnd } from './pathUtils' import { Paths } from './types' /* diff --git a/frontend/src/scenes/paths/PathNodeCard.tsx b/frontend/src/scenes/paths/PathNodeCard.tsx index 37571a7ff6..e2e01a2457 100644 --- a/frontend/src/scenes/paths/PathNodeCard.tsx +++ b/frontend/src/scenes/paths/PathNodeCard.tsx @@ -1,14 +1,15 @@ -import { LemonDropdown, Tooltip } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' +import { LemonDropdown, Tooltip } from '@posthog/lemon-ui' + import { FunnelPathsFilter } from '~/queries/schema/schema-general' import { InsightLogicProps } from '~/types' -import { PATH_NODE_CARD_LEFT_OFFSET, PATH_NODE_CARD_TOP_OFFSET, PATH_NODE_CARD_WIDTH } from './constants' import { PathNodeCardButton } from './PathNodeCardButton' import { PathNodeCardMenu } from './PathNodeCardMenu' +import { PATH_NODE_CARD_LEFT_OFFSET, PATH_NODE_CARD_TOP_OFFSET, PATH_NODE_CARD_WIDTH } from './constants' +import { PathNodeData, isSelectedPathStartOrEnd, pageUrl } from './pathUtils' import { pathsDataLogic } from './pathsDataLogic' -import { isSelectedPathStartOrEnd, pageUrl, PathNodeData } from './pathUtils' export type PathNodeCardProps = { insightProps: InsightLogicProps diff --git a/frontend/src/scenes/paths/PathNodeCardButton.tsx b/frontend/src/scenes/paths/PathNodeCardButton.tsx index d2ddecf008..f1845b8c7b 100644 --- a/frontend/src/scenes/paths/PathNodeCardButton.tsx +++ b/frontend/src/scenes/paths/PathNodeCardButton.tsx @@ -1,15 +1,17 @@ +import { useValues } from 'kea' +import posthog from 'posthog-js' + import { IconEllipsis } from '@posthog/icons' import { LemonButton, LemonMenu, PopoverReferenceContext } from '@posthog/lemon-ui' -import { useValues } from 'kea' + import { copyToClipboard } from 'lib/utils/copyToClipboard' -import posthog from 'posthog-js' import { userLogic } from 'scenes/userLogic' import { PathsFilter } from '~/queries/schema/schema-general' import { AvailableFeature } from '~/types' +import { PathNodeData, pageUrl } from './pathUtils' import { pathsDataLogicType } from './pathsDataLogicType' -import { pageUrl, PathNodeData } from './pathUtils' type PathNodeCardButton = { name: string diff --git a/frontend/src/scenes/paths/PathNodeCardMenu.tsx b/frontend/src/scenes/paths/PathNodeCardMenu.tsx index 753d32f737..6f1b0d2513 100644 --- a/frontend/src/scenes/paths/PathNodeCardMenu.tsx +++ b/frontend/src/scenes/paths/PathNodeCardMenu.tsx @@ -1,8 +1,10 @@ +import { MouseEventHandler } from 'react' + import { IconClock } from '@posthog/icons' import { LemonButton } from '@posthog/lemon-ui' + import { IconTrendingFlat, IconTrendingFlatDown } from 'lib/lemon-ui/icons' import { humanFriendlyDuration } from 'lib/utils' -import { MouseEventHandler } from 'react' import { PATH_NODE_CARD_WIDTH } from './constants' import { pathsDataLogicType } from './pathsDataLogicType' diff --git a/frontend/src/scenes/paths/Paths.tsx b/frontend/src/scenes/paths/Paths.tsx index c947438674..14510eddfa 100644 --- a/frontend/src/scenes/paths/Paths.tsx +++ b/frontend/src/scenes/paths/Paths.tsx @@ -1,18 +1,19 @@ import './Paths.scss' import { useActions, useValues } from 'kea' -import { useResizeObserver } from 'lib/hooks/useResizeObserver' import { useEffect, useRef, useState } from 'react' + +import { useResizeObserver } from 'lib/hooks/useResizeObserver' import { InsightEmptyState, InsightErrorState } from 'scenes/insights/EmptyStates' -import { insightLogic } from 'scenes/insights/insightLogic' import { insightDataLogic } from 'scenes/insights/insightDataLogic' -import { shouldQueryBeAsync } from '~/queries/utils' +import { insightLogic } from 'scenes/insights/insightLogic' import { FunnelPathsFilter } from '~/queries/schema/schema-general' +import { shouldQueryBeAsync } from '~/queries/utils' import { PathNodeCard } from './PathNodeCard' -import { pathsDataLogic } from './pathsDataLogic' import type { PathNodeData } from './pathUtils' +import { pathsDataLogic } from './pathsDataLogic' import { renderPaths } from './renderPaths' const DEFAULT_PATHS_ID = 'default_paths' diff --git a/frontend/src/scenes/paths/pathUtils.test.ts b/frontend/src/scenes/paths/pathUtils.test.ts index cdf5abc5eb..817379594e 100644 --- a/frontend/src/scenes/paths/pathUtils.test.ts +++ b/frontend/src/scenes/paths/pathUtils.test.ts @@ -1,6 +1,6 @@ import { RGBColor } from 'd3' -import { pageUrl, PathNodeData } from './pathUtils' +import { PathNodeData, pageUrl } from './pathUtils' describe('pageUrl', () => { it('should correctly process PathNodeData with hash based URL', () => { diff --git a/frontend/src/scenes/paths/pathsDataLogic.test.ts b/frontend/src/scenes/paths/pathsDataLogic.test.ts index b0a5862782..8e08e37cc6 100644 --- a/frontend/src/scenes/paths/pathsDataLogic.test.ts +++ b/frontend/src/scenes/paths/pathsDataLogic.test.ts @@ -1,4 +1,5 @@ import { expectLogic } from 'kea-test-utils' + import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { pathsDataLogic } from 'scenes/paths/pathsDataLogic' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/paths/pathsDataLogic.ts b/frontend/src/scenes/paths/pathsDataLogic.ts index d76745bae0..ed71c67d35 100644 --- a/frontend/src/scenes/paths/pathsDataLogic.ts +++ b/frontend/src/scenes/paths/pathsDataLogic.ts @@ -1,12 +1,13 @@ import { actions, connect, kea, key, listeners, path, props, selectors } from 'kea' import { router } from 'kea-router' + import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { MathAvailability } from 'scenes/insights/filters/ActionFilter/ActionFilterRow/ActionFilterRow' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' import { keyForInsightLogicProps } from 'scenes/insights/sharedUtils' +import { OpenPersonsModalProps, openPersonsModal } from 'scenes/trends/persons-modal/PersonsModal' import { pathsTitle } from 'scenes/trends/persons-modal/persons-modal-utils' -import { openPersonsModal, OpenPersonsModalProps } from 'scenes/trends/persons-modal/PersonsModal' import { urls } from 'scenes/urls' import { actionsAndEventsToSeries } from '~/queries/nodes/InsightQuery/utils/filtersToQueryNode' @@ -14,8 +15,8 @@ import { InsightActorsQuery, InsightVizNode, NodeKind, PathsLink, PathsQuery } f import { isPathsQuery } from '~/queries/utils' import { ActionFilter, InsightLogicProps, PathType, PropertyFilterType, PropertyOperator } from '~/types' -import type { pathsDataLogicType } from './pathsDataLogicType' import { PathNodeData } from './pathUtils' +import type { pathsDataLogicType } from './pathsDataLogicType' import { Paths, PathsNode } from './types' export const DEFAULT_STEP_LIMIT = 5 diff --git a/frontend/src/scenes/paths/renderPaths.ts b/frontend/src/scenes/paths/renderPaths.ts index f266348253..60b142547a 100644 --- a/frontend/src/scenes/paths/renderPaths.ts +++ b/frontend/src/scenes/paths/renderPaths.ts @@ -1,13 +1,14 @@ import * as d3 from 'd3' import * as Sankey from 'd3-sankey' +import { Dispatch, RefObject, SetStateAction } from 'react' + import { D3Selector } from 'lib/hooks/useD3' import { stripHTTP } from 'lib/utils' -import { Dispatch, RefObject, SetStateAction } from 'react' import { FunnelPathsFilter, PathsFilter } from '~/queries/schema/schema-general' import { FALLBACK_CANVAS_WIDTH, HIDE_PATH_CARD_HEIGHT } from './Paths' -import { isSelectedPathStartOrEnd, PathNodeData, PathTargetLink, roundedRect } from './pathUtils' +import { PathNodeData, PathTargetLink, isSelectedPathStartOrEnd, roundedRect } from './pathUtils' import { Paths } from './types' const createCanvas = (canvasRef: RefObject, width: number, height: number): D3Selector => { diff --git a/frontend/src/scenes/persons-management/PersonsManagementScene.stories.tsx b/frontend/src/scenes/persons-management/PersonsManagementScene.stories.tsx index 13f9d5a429..175a4097aa 100644 --- a/frontend/src/scenes/persons-management/PersonsManagementScene.stories.tsx +++ b/frontend/src/scenes/persons-management/PersonsManagementScene.stories.tsx @@ -1,7 +1,6 @@ import { Meta, StoryObj } from '@storybook/react' import { PERSON_DISPLAY_NAME_COLUMN_NAME } from 'lib/constants' - import { App } from 'scenes/App' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/persons-management/PersonsManagementSceneTabs.tsx b/frontend/src/scenes/persons-management/PersonsManagementSceneTabs.tsx index 51662978cd..1d5eccdd71 100644 --- a/frontend/src/scenes/persons-management/PersonsManagementSceneTabs.tsx +++ b/frontend/src/scenes/persons-management/PersonsManagementSceneTabs.tsx @@ -1,12 +1,13 @@ import { useValues } from 'kea' + import { PageHeader } from 'lib/components/PageHeader' +import { FEATURE_FLAGS } from 'lib/constants' import { LemonTabs } from 'lib/lemon-ui/LemonTabs' +import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { groupsModel } from '~/models/groupsModel' import { personsManagementSceneLogic } from './personsManagementSceneLogic' -import { FEATURE_FLAGS } from 'lib/constants' -import { featureFlagLogic } from 'lib/logic/featureFlagLogic' export interface PersonsManagementSceneTabsProps { tabKey: string diff --git a/frontend/src/scenes/persons-management/personsManagementSceneLogic.tsx b/frontend/src/scenes/persons-management/personsManagementSceneLogic.tsx index 00f777a263..9267d936f6 100644 --- a/frontend/src/scenes/persons-management/personsManagementSceneLogic.tsx +++ b/frontend/src/scenes/persons-management/personsManagementSceneLogic.tsx @@ -1,6 +1,9 @@ import { connect, kea, path, selectors } from 'kea' + +import { FEATURE_FLAGS } from 'lib/constants' import { GroupsAccessStatus } from 'lib/introductions/groupsAccessLogic' import { LemonTab } from 'lib/lemon-ui/LemonTabs' +import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { capitalizeFirstLetter } from 'lib/utils' import { groupsSceneLogic } from 'scenes/groups/groupsSceneLogic' import { urls } from 'scenes/urls' @@ -8,8 +11,6 @@ import { urls } from 'scenes/urls' import { groupsModel } from '~/models/groupsModel' import type { personsManagementSceneLogicType } from './personsManagementSceneLogicType' -import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { FEATURE_FLAGS } from 'lib/constants' export type PersonsManagementTab = { key: string diff --git a/frontend/src/scenes/persons/GroupActorDisplay.tsx b/frontend/src/scenes/persons/GroupActorDisplay.tsx index bce573221b..1836f95123 100644 --- a/frontend/src/scenes/persons/GroupActorDisplay.tsx +++ b/frontend/src/scenes/persons/GroupActorDisplay.tsx @@ -1,6 +1,7 @@ import './PersonDisplay.scss' import { IconInfo } from '@posthog/icons' + import { Link } from 'lib/lemon-ui/Link' import { Tooltip } from 'lib/lemon-ui/Tooltip' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/persons/MergeSplitPerson.tsx b/frontend/src/scenes/persons/MergeSplitPerson.tsx index 2dc4985034..2030cbb9a2 100644 --- a/frontend/src/scenes/persons/MergeSplitPerson.tsx +++ b/frontend/src/scenes/persons/MergeSplitPerson.tsx @@ -1,5 +1,7 @@ -import { LemonButton, LemonModal, LemonSelect } from '@posthog/lemon-ui' import { BindLogic, useActions, useValues } from 'kea' + +import { LemonButton, LemonModal, LemonSelect } from '@posthog/lemon-ui' + import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { pluralize } from 'lib/utils' diff --git a/frontend/src/scenes/persons/NewProperty.tsx b/frontend/src/scenes/persons/NewProperty.tsx index 251b34dbb9..d39c6649cc 100644 --- a/frontend/src/scenes/persons/NewProperty.tsx +++ b/frontend/src/scenes/persons/NewProperty.tsx @@ -1,7 +1,9 @@ -import { LemonInput, LemonLabel, LemonModal, LemonSegmentedButton } from '@posthog/lemon-ui' -import { LemonButton } from 'lib/lemon-ui/LemonButton' import { useState } from 'react' +import { LemonInput, LemonLabel, LemonModal, LemonSegmentedButton } from '@posthog/lemon-ui' + +import { LemonButton } from 'lib/lemon-ui/LemonButton' + interface NewPropertyInterface { creating: boolean propertyType: 'string' | 'boolean' diff --git a/frontend/src/scenes/persons/PersonCohorts.tsx b/frontend/src/scenes/persons/PersonCohorts.tsx index a5fbc7211e..761b945465 100644 --- a/frontend/src/scenes/persons/PersonCohorts.tsx +++ b/frontend/src/scenes/persons/PersonCohorts.tsx @@ -1,7 +1,8 @@ import { useActions, useValues } from 'kea' +import { useEffect } from 'react' + import { LemonTable, LemonTableColumns } from 'lib/lemon-ui/LemonTable' import { Link } from 'lib/lemon-ui/Link' -import { useEffect } from 'react' import { urls } from 'scenes/urls' import { CohortType } from '~/types' diff --git a/frontend/src/scenes/persons/PersonDeleteModal.tsx b/frontend/src/scenes/persons/PersonDeleteModal.tsx index 74a673251a..52668b0c16 100644 --- a/frontend/src/scenes/persons/PersonDeleteModal.tsx +++ b/frontend/src/scenes/persons/PersonDeleteModal.tsx @@ -1,6 +1,8 @@ -import { LemonButton, LemonCheckbox, LemonModal, Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { useState } from 'react' + +import { LemonButton, LemonCheckbox, LemonModal, Link } from '@posthog/lemon-ui' + import { personDeleteModalLogic } from 'scenes/persons/personDeleteModalLogic' import { PersonType } from '~/types' diff --git a/frontend/src/scenes/persons/PersonDisplay.tsx b/frontend/src/scenes/persons/PersonDisplay.tsx index 1de817f4b7..f9b01770f9 100644 --- a/frontend/src/scenes/persons/PersonDisplay.tsx +++ b/frontend/src/scenes/persons/PersonDisplay.tsx @@ -1,17 +1,19 @@ import './PersonDisplay.scss' -import { IconCopy } from '@posthog/icons' import clsx from 'clsx' import { router } from 'kea-router' +import React, { useMemo, useState } from 'react' + +import { IconCopy } from '@posthog/icons' + import { Link } from 'lib/lemon-ui/Link' import { Popover } from 'lib/lemon-ui/Popover' import { ProfilePicture, ProfilePictureProps } from 'lib/lemon-ui/ProfilePicture' import { copyToClipboard } from 'lib/utils/copyToClipboard' -import React, { useMemo, useState } from 'react' import { useNotebookNode } from 'scenes/notebooks/Nodes/NotebookNodeContext' -import { asDisplay, asLink, PersonPropType } from './person-utils' import { PersonPreview } from './PersonPreview' +import { PersonPropType, asDisplay, asLink } from './person-utils' export interface PersonDisplayProps { person?: PersonPropType | null diff --git a/frontend/src/scenes/persons/PersonFeedCanvas.tsx b/frontend/src/scenes/persons/PersonFeedCanvas.tsx index 958da87425..146fb9df16 100644 --- a/frontend/src/scenes/persons/PersonFeedCanvas.tsx +++ b/frontend/src/scenes/persons/PersonFeedCanvas.tsx @@ -1,7 +1,8 @@ import { useValues } from 'kea' + import { uuid } from 'lib/utils' -import { Notebook } from 'scenes/notebooks/Notebook/Notebook' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' +import { Notebook } from 'scenes/notebooks/Notebook/Notebook' import { PersonType } from '~/types' diff --git a/frontend/src/scenes/persons/PersonPreview.tsx b/frontend/src/scenes/persons/PersonPreview.tsx index 4e001f3528..aa2d09d3e5 100644 --- a/frontend/src/scenes/persons/PersonPreview.tsx +++ b/frontend/src/scenes/persons/PersonPreview.tsx @@ -1,21 +1,23 @@ -import { LemonButton, Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { combineUrl } from 'kea-router' +import { useEffect } from 'react' + +import { LemonButton, Link } from '@posthog/lemon-ui' + import { PropertiesTable } from 'lib/components/PropertiesTable' import { ScrollableShadows } from 'lib/components/ScrollableShadows/ScrollableShadows' -import { IconOpenInNew } from 'lib/lemon-ui/icons' import { ProfilePicture } from 'lib/lemon-ui/ProfilePicture' import { Spinner } from 'lib/lemon-ui/Spinner' -import { useEffect } from 'react' +import { IconOpenInNew } from 'lib/lemon-ui/icons' import { getDefaultEventsSceneQuery } from 'scenes/activity/explore/defaults' import { NotebookSelectButton } from 'scenes/notebooks/NotebookSelectButton/NotebookSelectButton' +import { NotebookNodeType } from 'scenes/notebooks/types' import { urls } from 'scenes/urls' import { ActivityTab, PropertyDefinitionType, PropertyFilterType, PropertyOperator } from '~/types' import { asDisplay } from './person-utils' import { personsLogic } from './personsLogic' -import { NotebookNodeType } from 'scenes/notebooks/types' export type PersonPreviewProps = { distinctId?: string diff --git a/frontend/src/scenes/persons/PersonScene.stories.tsx b/frontend/src/scenes/persons/PersonScene.stories.tsx index c90058223a..87874c1ddc 100644 --- a/frontend/src/scenes/persons/PersonScene.stories.tsx +++ b/frontend/src/scenes/persons/PersonScene.stories.tsx @@ -1,5 +1,6 @@ import { Meta, StoryFn } from '@storybook/react' import { router } from 'kea-router' + import { useDelayedOnMountEffect } from 'lib/hooks/useOnMountEffect' import { App } from 'scenes/App' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/persons/PersonScene.tsx b/frontend/src/scenes/persons/PersonScene.tsx index 4ab62c2c06..06ffced747 100644 --- a/frontend/src/scenes/persons/PersonScene.tsx +++ b/frontend/src/scenes/persons/PersonScene.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconChevronDown, IconCopy, IconInfo } from '@posthog/icons' import { LemonButton, LemonDivider, LemonMenu, LemonSelect, LemonTag, Link } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { ActivityLog } from 'lib/components/ActivityLog/ActivityLog' import { CopyToClipboardInline } from 'lib/components/CopyToClipboard' import { NotFound } from 'lib/components/NotFound' @@ -18,6 +20,7 @@ import { copyToClipboard } from 'lib/utils/copyToClipboard' import { ProductIntentContext } from 'lib/utils/product-intents' import { RelatedGroups } from 'scenes/groups/RelatedGroups' import { NotebookSelectButton } from 'scenes/notebooks/NotebookSelectButton/NotebookSelectButton' +import { NotebookNodeType } from 'scenes/notebooks/types' import { PersonDeleteModal } from 'scenes/persons/PersonDeleteModal' import { personDeleteModalLogic } from 'scenes/persons/personDeleteModalLogic' import { SceneExport } from 'scenes/sceneTypes' @@ -26,15 +29,13 @@ import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' import { Query } from '~/queries/Query/Query' - -import { ActivityScope, PersonsTabType, PersonType, ProductKey, PropertyDefinitionType } from '~/types' +import { ActivityScope, PersonType, PersonsTabType, ProductKey, PropertyDefinitionType } from '~/types' import { MergeSplitPerson } from './MergeSplitPerson' import { PersonCohorts } from './PersonCohorts' import PersonFeedCanvas from './PersonFeedCanvas' -import { personsLogic } from './personsLogic' import { RelatedFeatureFlags } from './RelatedFeatureFlags' -import { NotebookNodeType } from 'scenes/notebooks/types' +import { personsLogic } from './personsLogic' export const scene: SceneExport = { component: PersonScene, diff --git a/frontend/src/scenes/persons/PersonsScene.tsx b/frontend/src/scenes/persons/PersonsScene.tsx index 6aee8b05bd..2c95185cd2 100644 --- a/frontend/src/scenes/persons/PersonsScene.tsx +++ b/frontend/src/scenes/persons/PersonsScene.tsx @@ -1,18 +1,21 @@ +import { useActions, useAsyncActions, useValues } from 'kea' + import { IconEllipsis, IconPeople } from '@posthog/icons' import { LemonButton, LemonDialog, LemonInput, LemonMenu } from '@posthog/lemon-ui' -import { useActions, useAsyncActions, useValues } from 'kea' + import { LemonField } from 'lib/lemon-ui/LemonField' import { Link } from 'lib/lemon-ui/Link' -import { teamLogic } from 'scenes/teamLogic' -import { urls } from 'scenes/urls' -import { personsSceneLogic } from './personsSceneLogic' - import { PersonsManagementSceneTabs } from 'scenes/persons-management/PersonsManagementSceneTabs' import { SceneExport } from 'scenes/sceneTypes' +import { teamLogic } from 'scenes/teamLogic' +import { urls } from 'scenes/urls' + import { SceneContent, SceneDivider, SceneTitleSection } from '~/layout/scenes/SceneContent' import { Query } from '~/queries/Query/Query' import { OnboardingStepKey, ProductKey } from '~/types' +import { personsSceneLogic } from './personsSceneLogic' + export const scene: SceneExport = { component: PersonsScene, logic: personsSceneLogic, diff --git a/frontend/src/scenes/persons/RelatedFeatureFlags.tsx b/frontend/src/scenes/persons/RelatedFeatureFlags.tsx index a686d47c8d..e4c46cb642 100644 --- a/frontend/src/scenes/persons/RelatedFeatureFlags.tsx +++ b/frontend/src/scenes/persons/RelatedFeatureFlags.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconInfo } from '@posthog/icons' import { LemonInput, LemonSelect, LemonSnack, LemonTable, LemonTag, Link, Tooltip } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { LemonTableColumns } from 'lib/lemon-ui/LemonTable' import { LemonTableLink } from 'lib/lemon-ui/LemonTable/LemonTableLink' import stringWithWBR from 'lib/utils/stringWithWBR' diff --git a/frontend/src/scenes/persons/activityDescriptions.tsx b/frontend/src/scenes/persons/activityDescriptions.tsx index 6f9e01744a..bb969ab051 100644 --- a/frontend/src/scenes/persons/activityDescriptions.tsx +++ b/frontend/src/scenes/persons/activityDescriptions.tsx @@ -1,10 +1,10 @@ +import { SentenceList } from 'lib/components/ActivityLog/SentenceList' import { ActivityLogItem, - defaultDescriber, HumanizedChange, + defaultDescriber, userNameForLogItem, } from 'lib/components/ActivityLog/humanizeActivity' -import { SentenceList } from 'lib/components/ActivityLog/SentenceList' import { Link } from 'lib/lemon-ui/Link' import { PersonDisplay } from 'scenes/persons/PersonDisplay' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/persons/mergeSplitPersonLogic.ts b/frontend/src/scenes/persons/mergeSplitPersonLogic.ts index d3aef56bc7..572c9dc8a1 100644 --- a/frontend/src/scenes/persons/mergeSplitPersonLogic.ts +++ b/frontend/src/scenes/persons/mergeSplitPersonLogic.ts @@ -1,6 +1,7 @@ import { actions, connect, events, kea, key, listeners, path, props, reducers } from 'kea' import { loaders } from 'kea-loaders' import { router } from 'kea-router' + import api from 'lib/api' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' diff --git a/frontend/src/scenes/persons/personDeleteModalLogic.tsx b/frontend/src/scenes/persons/personDeleteModalLogic.tsx index 4bc0fe0d84..211d86b507 100644 --- a/frontend/src/scenes/persons/personDeleteModalLogic.tsx +++ b/frontend/src/scenes/persons/personDeleteModalLogic.tsx @@ -1,5 +1,6 @@ import { actions, kea, path, props, reducers } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' import { toParams } from 'lib/utils' diff --git a/frontend/src/scenes/persons/personLogic.tsx b/frontend/src/scenes/persons/personLogic.tsx index 93e655f875..234d815a2a 100644 --- a/frontend/src/scenes/persons/personLogic.tsx +++ b/frontend/src/scenes/persons/personLogic.tsx @@ -1,5 +1,6 @@ import { actions, afterMount, kea, key, path, props } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { PersonType } from '~/types' diff --git a/frontend/src/scenes/persons/personsLogic.test.ts b/frontend/src/scenes/persons/personsLogic.test.ts index 602ff71a29..10056c05e9 100644 --- a/frontend/src/scenes/persons/personsLogic.test.ts +++ b/frontend/src/scenes/persons/personsLogic.test.ts @@ -1,7 +1,9 @@ +import { MOCK_TEAM_ID } from 'lib/api.mock' + import { router } from 'kea-router' import { expectLogic } from 'kea-test-utils' + import api from 'lib/api' -import { MOCK_TEAM_ID } from 'lib/api.mock' import { useMocks } from '~/mocks/jest' import { initKeaTests } from '~/test/init' diff --git a/frontend/src/scenes/persons/personsLogic.tsx b/frontend/src/scenes/persons/personsLogic.tsx index c79304c59f..5c956dfd91 100644 --- a/frontend/src/scenes/persons/personsLogic.tsx +++ b/frontend/src/scenes/persons/personsLogic.tsx @@ -1,6 +1,7 @@ import { actions, connect, events, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { actionToUrl, decodeParams, router, urlToAction } from 'kea-router' + import api, { CountedPaginatedResponse } from 'lib/api' import { TriggerExportProps } from 'lib/components/ExportButton/exporter' import { convertPropertyGroupToProperties, isValidPropertyFilter } from 'lib/components/PropertyFilters/utils' @@ -14,7 +15,9 @@ import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' import { SIDE_PANEL_CONTEXT_KEY, SidePanelSceneContext } from '~/layout/navigation-3000/sidepanel/types' +import { defaultDataTableColumns } from '~/queries/nodes/DataTable/utils' import { hogqlQuery } from '~/queries/query' +import { DataTableNode, NodeKind } from '~/queries/schema/schema-general' import { hogql } from '~/queries/utils' import { ActivityScope, @@ -24,14 +27,12 @@ import { ExporterFormat, PersonListParams, PersonPropertyFilter, - PersonsTabType, PersonType, + PersonsTabType, } from '~/types' import { asDisplay } from './person-utils' import type { personsLogicType } from './personsLogicType' -import { DataTableNode, NodeKind } from '~/queries/schema/schema-general' -import { defaultDataTableColumns } from '~/queries/nodes/DataTable/utils' export interface PersonsLogicProps { cohort?: number | 'new' diff --git a/frontend/src/scenes/persons/personsSceneLogic.ts b/frontend/src/scenes/persons/personsSceneLogic.ts index 279185a387..efedd20f0a 100644 --- a/frontend/src/scenes/persons/personsSceneLogic.ts +++ b/frontend/src/scenes/persons/personsSceneLogic.ts @@ -1,16 +1,18 @@ -import { lemonToast } from '@posthog/lemon-ui' +import equal from 'fast-deep-equal' import { actions, kea, listeners, path, reducers } from 'kea' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' +import { tabAwareActionToUrl } from 'lib/logic/scenes/tabAwareActionToUrl' +import { tabAwareScene } from 'lib/logic/scenes/tabAwareScene' +import { tabAwareUrlToAction } from 'lib/logic/scenes/tabAwareUrlToAction' +import { urls } from 'scenes/urls' import { defaultDataTableColumns } from '~/queries/nodes/DataTable/utils' import { DataTableNode, NodeKind } from '~/queries/schema/schema-general' import type { personsSceneLogicType } from './personsSceneLogicType' -import { urls } from 'scenes/urls' -import equal from 'fast-deep-equal' -import { tabAwareScene } from 'lib/logic/scenes/tabAwareScene' -import { tabAwareActionToUrl } from 'lib/logic/scenes/tabAwareActionToUrl' -import { tabAwareUrlToAction } from 'lib/logic/scenes/tabAwareUrlToAction' const defaultQuery = { kind: NodeKind.DataTableNode, diff --git a/frontend/src/scenes/persons/relatedFeatureFlagsLogic.test.ts b/frontend/src/scenes/persons/relatedFeatureFlagsLogic.test.ts index ddf2291560..f4570f6d63 100644 --- a/frontend/src/scenes/persons/relatedFeatureFlagsLogic.test.ts +++ b/frontend/src/scenes/persons/relatedFeatureFlagsLogic.test.ts @@ -1,5 +1,7 @@ -import { expectLogic } from 'kea-test-utils' import { MOCK_DEFAULT_PROJECT } from 'lib/api.mock' + +import { expectLogic } from 'kea-test-utils' + import { NEW_FLAG } from 'scenes/feature-flags/featureFlagLogic' import { FeatureFlagsFilters, featureFlagsLogic } from 'scenes/feature-flags/featureFlagsLogic' diff --git a/frontend/src/scenes/persons/relatedFeatureFlagsLogic.ts b/frontend/src/scenes/persons/relatedFeatureFlagsLogic.ts index 32da212a3c..96ef18545d 100644 --- a/frontend/src/scenes/persons/relatedFeatureFlagsLogic.ts +++ b/frontend/src/scenes/persons/relatedFeatureFlagsLogic.ts @@ -1,6 +1,7 @@ import { actions, connect, events, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { urlToAction } from 'kea-router' + import api from 'lib/api' import { toParams } from 'lib/utils' import { FeatureFlagsFilters, featureFlagsLogic } from 'scenes/feature-flags/featureFlagsLogic' diff --git a/frontend/src/scenes/pipeline/AppCode.tsx b/frontend/src/scenes/pipeline/AppCode.tsx index 76af2326cb..d8c179779b 100644 --- a/frontend/src/scenes/pipeline/AppCode.tsx +++ b/frontend/src/scenes/pipeline/AppCode.tsx @@ -1,7 +1,9 @@ -import { IconPencil } from '@posthog/icons' -import { LemonBanner, LemonButton, LemonModal, LemonTabs, Link, Spinner } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { Field, Form } from 'kea-forms' + +import { IconPencil } from '@posthog/icons' +import { LemonBanner, LemonButton, LemonModal, LemonTabs, Link, Spinner } from '@posthog/lemon-ui' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { CodeEditor } from 'lib/monaco/CodeEditor' diff --git a/frontend/src/scenes/pipeline/AppMetricSparkLine.tsx b/frontend/src/scenes/pipeline/AppMetricSparkLine.tsx index 8f6a948f5e..6489d0f68a 100644 --- a/frontend/src/scenes/pipeline/AppMetricSparkLine.tsx +++ b/frontend/src/scenes/pipeline/AppMetricSparkLine.tsx @@ -1,8 +1,9 @@ import { useActions, useValues } from 'kea' -import { Sparkline, SparklineTimeSeries } from 'lib/components/Sparkline' import { useEffect } from 'react' import { useInView } from 'react-intersection-observer' +import { Sparkline, SparklineTimeSeries } from 'lib/components/Sparkline' + import { pipelineNodeMetricsLogic } from './pipelineNodeMetricsLogic' import { PipelineNode } from './types' diff --git a/frontend/src/scenes/pipeline/AppsManagement.tsx b/frontend/src/scenes/pipeline/AppsManagement.tsx index 3a2f1c410f..50f1acab25 100644 --- a/frontend/src/scenes/pipeline/AppsManagement.tsx +++ b/frontend/src/scenes/pipeline/AppsManagement.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconDownload, IconLock, IconRedo, IconTrash, IconUnlock } from '@posthog/icons' import { LemonBanner, LemonDialog, LemonDivider, LemonMenu, LemonTable, LemonTag, Tooltip } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonInput } from 'lib/lemon-ui/LemonInput' import { Link } from 'lib/lemon-ui/Link' diff --git a/frontend/src/scenes/pipeline/FrontendApps.tsx b/frontend/src/scenes/pipeline/FrontendApps.tsx index e31253f17e..dd93b33331 100644 --- a/frontend/src/scenes/pipeline/FrontendApps.tsx +++ b/frontend/src/scenes/pipeline/FrontendApps.tsx @@ -1,5 +1,7 @@ -import { LemonTable, LemonTableColumn } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonTable, LemonTableColumn } from '@posthog/lemon-ui' + import { PageHeader } from 'lib/components/PageHeader' import { ProductIntroduction } from 'lib/components/ProductIntroduction/ProductIntroduction' import { More } from 'lib/lemon-ui/LemonButton/More' @@ -8,8 +10,8 @@ import { statusColumn, updatedAtColumn } from 'lib/lemon-ui/LemonTable/columnUti import { PipelineStage, ProductKey } from '~/types' -import { frontendAppsLogic } from './frontendAppsLogic' import { NewButton } from './NewButton' +import { frontendAppsLogic } from './frontendAppsLogic' import { SiteApp } from './types' import { appColumn, nameColumn, usePipelinePluginBackedNodeMenuCommonItems } from './utils' diff --git a/frontend/src/scenes/pipeline/ImportApps.tsx b/frontend/src/scenes/pipeline/ImportApps.tsx index 2c0165d8ec..d67ee5e8d0 100644 --- a/frontend/src/scenes/pipeline/ImportApps.tsx +++ b/frontend/src/scenes/pipeline/ImportApps.tsx @@ -1,5 +1,7 @@ -import { LemonTable, LemonTableColumn } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonTable, LemonTableColumn } from '@posthog/lemon-ui' + import { More } from 'lib/lemon-ui/LemonButton/More' import { LemonMenuOverlay } from 'lib/lemon-ui/LemonMenu/LemonMenu' import { statusColumn, updatedAtColumn } from 'lib/lemon-ui/LemonTable/columnUtils' diff --git a/frontend/src/scenes/pipeline/NewButton.tsx b/frontend/src/scenes/pipeline/NewButton.tsx index 26db121494..97236c0d5f 100644 --- a/frontend/src/scenes/pipeline/NewButton.tsx +++ b/frontend/src/scenes/pipeline/NewButton.tsx @@ -1,4 +1,5 @@ import { IconPlusSmall } from '@posthog/icons' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/pipeline/Overview.tsx b/frontend/src/scenes/pipeline/Overview.tsx index edf7051840..0f08996771 100644 --- a/frontend/src/scenes/pipeline/Overview.tsx +++ b/frontend/src/scenes/pipeline/Overview.tsx @@ -1,5 +1,6 @@ import { IconPlusSmall } from '@posthog/icons' import { Link } from '@posthog/lemon-ui' + import { PageHeader } from 'lib/components/PageHeader' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonMenu, LemonMenuItems } from 'lib/lemon-ui/LemonMenu' @@ -9,8 +10,8 @@ import { urls } from 'scenes/urls' import { PipelineStage, PipelineTab } from '~/types' -import { DESTINATION_TYPES, TRANSFORMATION_TYPES } from './destinations/constants' import { DestinationsTable } from './destinations/Destinations' +import { DESTINATION_TYPES, TRANSFORMATION_TYPES } from './destinations/constants' export function Overview(): JSX.Element { const menuItems: LemonMenuItems = [ diff --git a/frontend/src/scenes/pipeline/Pipeline.stories.tsx b/frontend/src/scenes/pipeline/Pipeline.stories.tsx index 47c87cc189..1310f930b5 100644 --- a/frontend/src/scenes/pipeline/Pipeline.stories.tsx +++ b/frontend/src/scenes/pipeline/Pipeline.stories.tsx @@ -1,5 +1,7 @@ import { Meta, StoryObj } from '@storybook/react' + import { FEATURE_FLAGS } from 'lib/constants' +import { useDelayedOnMountEffect } from 'lib/hooks/useOnMountEffect' import { App } from 'scenes/App' import { urls } from 'scenes/urls' @@ -14,7 +16,6 @@ import pluginConfigs from './__mocks__/pluginConfigs.json' import plugins from './__mocks__/plugins.json' import { appsManagementLogic } from './appsManagementLogic' import { pipelineNodeMetricsLogic } from './pipelineNodeMetricsLogic' -import { useDelayedOnMountEffect } from 'lib/hooks/useOnMountEffect' const pluginRetrieveMock: MockSignature = (req, res, ctx) => { const plugin = plugins.results.find((conf) => conf.id === Number(req.params.id)) diff --git a/frontend/src/scenes/pipeline/Pipeline.tsx b/frontend/src/scenes/pipeline/Pipeline.tsx index 2793aeabb5..cf39b0be02 100644 --- a/frontend/src/scenes/pipeline/Pipeline.tsx +++ b/frontend/src/scenes/pipeline/Pipeline.tsx @@ -1,5 +1,6 @@ import { useValues } from 'kea' import { router } from 'kea-router' + import { ActivityLog } from 'lib/components/ActivityLog/ActivityLog' import { ConcreteLemonTab, LemonTabs } from 'lib/lemon-ui/LemonTabs' import { SceneExport } from 'scenes/sceneTypes' @@ -9,14 +10,14 @@ import { ActivityScope, PipelineStage, PipelineTab } from '~/types' import { DataPipelinesSources } from '../data-pipelines/DataPipelinesSources' import { AppsManagement } from './AppsManagement' -import { DESTINATION_TYPES, SITE_APP_TYPES } from './destinations/constants' -import { Destinations } from './destinations/Destinations' import { ImportApps } from './ImportApps' -import { importAppsLogic } from './importAppsLogic' import { Overview } from './Overview' +import { Transformations } from './Transformations' +import { Destinations } from './destinations/Destinations' +import { DESTINATION_TYPES, SITE_APP_TYPES } from './destinations/constants' +import { importAppsLogic } from './importAppsLogic' import { pipelineAccessLogic } from './pipelineAccessLogic' import { humanFriendlyTabName, pipelineLogic } from './pipelineLogic' -import { Transformations } from './Transformations' export function Pipeline(): JSX.Element { const { canGloballyManagePlugins } = useValues(pipelineAccessLogic) diff --git a/frontend/src/scenes/pipeline/PipelineNode.tsx b/frontend/src/scenes/pipeline/PipelineNode.tsx index a00037f9b1..edeb4e8f4c 100644 --- a/frontend/src/scenes/pipeline/PipelineNode.tsx +++ b/frontend/src/scenes/pipeline/PipelineNode.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { ActivityLog } from 'lib/components/ActivityLog/ActivityLog' import { NotFound } from 'lib/components/NotFound' import { LemonTab, LemonTabs } from 'lib/lemon-ui/LemonTabs/LemonTabs' @@ -15,8 +16,8 @@ import { BatchExportRuns } from '../data-pipelines/batch-exports/BatchExportRuns import { HogFunctionLogs } from '../hog-functions/logs/HogFunctionLogs' import { HogFunctionMetrics } from '../hog-functions/metrics/HogFunctionMetrics' import { PipelineNodeConfiguration } from './PipelineNodeConfiguration' -import { pipelineNodeLogic, PipelineNodeLogicProps } from './pipelineNodeLogic' import { PipelineNodeMetrics } from './PipelineNodeMetrics' +import { PipelineNodeLogicProps, pipelineNodeLogic } from './pipelineNodeLogic' import { PipelineBackend } from './types' export const PIPELINE_TAB_TO_NODE_STAGE: Partial> = { diff --git a/frontend/src/scenes/pipeline/PipelineNodeConfiguration.tsx b/frontend/src/scenes/pipeline/PipelineNodeConfiguration.tsx index a1463120df..8160ae42ee 100644 --- a/frontend/src/scenes/pipeline/PipelineNodeConfiguration.tsx +++ b/frontend/src/scenes/pipeline/PipelineNodeConfiguration.tsx @@ -1,10 +1,11 @@ import { useValues } from 'kea' + import { NotFound } from 'lib/components/NotFound' import { BatchExportConfiguration } from 'scenes/data-pipelines/batch-exports/BatchExportConfiguration' import { HogFunctionConfiguration } from 'scenes/hog-functions/configuration/HogFunctionConfiguration' -import { pipelineNodeLogic } from './pipelineNodeLogic' import { PipelinePluginConfiguration } from './PipelinePluginConfiguration' +import { pipelineNodeLogic } from './pipelineNodeLogic' import { PipelineBackend } from './types' export function PipelineNodeConfiguration(): JSX.Element { diff --git a/frontend/src/scenes/pipeline/PipelineNodeLogs.tsx b/frontend/src/scenes/pipeline/PipelineNodeLogs.tsx index b7ac6813da..2cbadd2b49 100644 --- a/frontend/src/scenes/pipeline/PipelineNodeLogs.tsx +++ b/frontend/src/scenes/pipeline/PipelineNodeLogs.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconSearch } from '@posthog/icons' import { LemonButton, LemonCheckbox, LemonInput, LemonSnack, LemonTable } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { LOGS_PORTION_LIMIT } from 'lib/constants' import { pluralize } from 'lib/utils' diff --git a/frontend/src/scenes/pipeline/PipelineNodeMetrics.tsx b/frontend/src/scenes/pipeline/PipelineNodeMetrics.tsx index 88812bb159..2909574743 100644 --- a/frontend/src/scenes/pipeline/PipelineNodeMetrics.tsx +++ b/frontend/src/scenes/pipeline/PipelineNodeMetrics.tsx @@ -1,11 +1,14 @@ -import { IconCalendar, IconCollapse, IconExpand, IconInfo } from '@posthog/icons' import { useActions, useValues } from 'kea' +import { useState } from 'react' +import { useEffect, useRef } from 'react' + +import { IconCalendar, IconCollapse, IconExpand, IconInfo } from '@posthog/icons' + import { Chart, ChartDataset, ChartItem } from 'lib/Chart' import { getColorVar } from 'lib/colors' import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { DateFilter } from 'lib/components/DateFilter/DateFilter' import { TZLabel } from 'lib/components/TZLabel' -import { IconChevronLeft, IconChevronRight } from 'lib/lemon-ui/icons' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonLabel } from 'lib/lemon-ui/LemonLabel/LemonLabel' import { LemonModal } from 'lib/lemon-ui/LemonModal' @@ -13,15 +16,14 @@ import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' import { LemonTable } from 'lib/lemon-ui/LemonTable' import { Link } from 'lib/lemon-ui/Link' import { Tooltip } from 'lib/lemon-ui/Tooltip' +import { IconChevronLeft, IconChevronRight } from 'lib/lemon-ui/icons' import { humanFriendlyNumber, inStorybookTestRunner, lightenDarkenColor } from 'lib/utils' -import { useState } from 'react' -import { useEffect, useRef } from 'react' import { AppMetricErrorDetail, AppMetricsData, - pipelineNodeMetricsLogic, PipelineNodeMetricsProps, + pipelineNodeMetricsLogic, } from './pipelineNodeMetricsLogic' export interface MetricsOverviewProps { diff --git a/frontend/src/scenes/pipeline/PipelineNodeNew.tsx b/frontend/src/scenes/pipeline/PipelineNodeNew.tsx index c4247d32ce..16bfe5a97b 100644 --- a/frontend/src/scenes/pipeline/PipelineNodeNew.tsx +++ b/frontend/src/scenes/pipeline/PipelineNodeNew.tsx @@ -7,11 +7,11 @@ import { SceneExport } from 'scenes/sceneTypes' import { AvailableFeature, PipelineStage } from '~/types' -import { DESTINATION_TYPES, SITE_APP_TYPES } from './destinations/constants' -import { NewDestinations } from './destinations/NewDestinations' import { PIPELINE_TAB_TO_NODE_STAGE } from './PipelineNode' -import { pipelineNodeNewLogic, PipelineNodeNewLogicProps } from './pipelineNodeNewLogic' import { PipelinePluginConfiguration } from './PipelinePluginConfiguration' +import { NewDestinations } from './destinations/NewDestinations' +import { DESTINATION_TYPES, SITE_APP_TYPES } from './destinations/constants' +import { PipelineNodeNewLogicProps, pipelineNodeNewLogic } from './pipelineNodeNewLogic' const paramsToProps = ({ params: { stage, id } = {}, diff --git a/frontend/src/scenes/pipeline/PipelinePluginConfiguration.tsx b/frontend/src/scenes/pipeline/PipelinePluginConfiguration.tsx index e35a5f20c2..161d9bbaf8 100644 --- a/frontend/src/scenes/pipeline/PipelinePluginConfiguration.tsx +++ b/frontend/src/scenes/pipeline/PipelinePluginConfiguration.tsx @@ -1,3 +1,9 @@ +import { useActions, useValues } from 'kea' +import { Form } from 'kea-forms' +import React from 'react' +import { useState } from 'react' +import { AutoSizer } from 'react-virtualized/dist/es/AutoSizer' + import { IconLock } from '@posthog/icons' import { IconPencil } from '@posthog/icons' import { @@ -13,16 +19,12 @@ import { Tooltip, } from '@posthog/lemon-ui' import { PluginConfigSchema } from '@posthog/plugin-scaffold/src/types' -import { useActions, useValues } from 'kea' -import { Form } from 'kea-forms' + import { NotFound } from 'lib/components/NotFound' import { PageHeader } from 'lib/components/PageHeader' import { LemonField } from 'lib/lemon-ui/LemonField' import { LemonMarkdown } from 'lib/lemon-ui/LemonMarkdown' import { CodeEditor } from 'lib/monaco/CodeEditor' -import React from 'react' -import { useState } from 'react' -import { AutoSizer } from 'react-virtualized/dist/es/AutoSizer' import { getConfigSchemaArray, isValidField } from 'scenes/pipeline/configUtils' import { SECRET_FIELD_VALUE } from 'scenes/pipeline/configUtils' diff --git a/frontend/src/scenes/pipeline/PipelinePluginImage.tsx b/frontend/src/scenes/pipeline/PipelinePluginImage.tsx index 02deb0c1e2..fc09dbb148 100644 --- a/frontend/src/scenes/pipeline/PipelinePluginImage.tsx +++ b/frontend/src/scenes/pipeline/PipelinePluginImage.tsx @@ -1,11 +1,14 @@ +import { useEffect, useState } from 'react' + import { IconTerminal } from '@posthog/icons' + import { parseGithubRepoURL } from 'lib/utils' + +import { PluginType } from '~/types' + import imgPluginDefault from 'public/plugin-default.svg' import IconTransformationSemverFlattener from 'public/transformations/semver-flattener.png' import IconTransformationUserAgent from 'public/transformations/user-agent.png' -import { useEffect, useState } from 'react' - -import { PluginType } from '~/types' const pluginImageOverrides: Record = { 'inline://semver-flattener': IconTransformationSemverFlattener, diff --git a/frontend/src/scenes/pipeline/Transformations.tsx b/frontend/src/scenes/pipeline/Transformations.tsx index fbfce81bf1..7ef6328dd6 100644 --- a/frontend/src/scenes/pipeline/Transformations.tsx +++ b/frontend/src/scenes/pipeline/Transformations.tsx @@ -1,5 +1,7 @@ -import { LemonTable, LemonTableColumn, Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonTable, LemonTableColumn, Link } from '@posthog/lemon-ui' + import { PageHeader } from 'lib/components/PageHeader' import { ProductIntroduction } from 'lib/components/ProductIntroduction/ProductIntroduction' import { More } from 'lib/lemon-ui/LemonButton/More' @@ -10,9 +12,9 @@ import { urls } from 'scenes/urls' import { PipelineNodeTab, PipelineStage, ProductKey } from '~/types' import { AppMetricSparkLine } from './AppMetricSparkLine' -import { TRANSFORMATION_TYPES } from './destinations/constants' -import { Destinations } from './destinations/Destinations' import { NewButton } from './NewButton' +import { Destinations } from './destinations/Destinations' +import { TRANSFORMATION_TYPES } from './destinations/constants' import { pipelineAccessLogic } from './pipelineAccessLogic' import { pipelineTransformationsLogic } from './transformationsLogic' import { Transformation } from './types' diff --git a/frontend/src/scenes/pipeline/appCodeLogic.tsx b/frontend/src/scenes/pipeline/appCodeLogic.tsx index 543e756664..c26cfeffe9 100644 --- a/frontend/src/scenes/pipeline/appCodeLogic.tsx +++ b/frontend/src/scenes/pipeline/appCodeLogic.tsx @@ -1,5 +1,6 @@ import { actions, afterMount, kea, key, listeners, path, props, reducers } from 'kea' import { forms } from 'kea-forms' + import api from 'lib/api' import type { appsCodeLogicType } from './appCodeLogicType' diff --git a/frontend/src/scenes/pipeline/appsManagementLogic.tsx b/frontend/src/scenes/pipeline/appsManagementLogic.tsx index 7a9ec7c985..c0e684d80b 100644 --- a/frontend/src/scenes/pipeline/appsManagementLogic.tsx +++ b/frontend/src/scenes/pipeline/appsManagementLogic.tsx @@ -1,8 +1,9 @@ import { actions, afterMount, connect, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' +import posthog from 'posthog-js' + import api from 'lib/api' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' -import posthog from 'posthog-js' import { userLogic } from 'scenes/userLogic' import { PluginInstallationType, PluginType } from '~/types' @@ -10,7 +11,7 @@ import { PluginInstallationType, PluginType } from '~/types' import { canInstallPlugins } from './access' import type { appsManagementLogicType } from './appsManagementLogicType' import { pipelineAccessLogic } from './pipelineAccessLogic' -import { getInitialCode, SourcePluginKind } from './sourceAppInitialCode' +import { SourcePluginKind, getInitialCode } from './sourceAppInitialCode' import { GLOBAL_PLUGINS, loadPluginsFromUrl } from './utils' function capturePluginEvent(event: string, plugin: PluginType, type: PluginInstallationType): void { diff --git a/frontend/src/scenes/pipeline/destinations/DestinationTag.tsx b/frontend/src/scenes/pipeline/destinations/DestinationTag.tsx index 5e6f61253c..711ecd324d 100644 --- a/frontend/src/scenes/pipeline/destinations/DestinationTag.tsx +++ b/frontend/src/scenes/pipeline/destinations/DestinationTag.tsx @@ -1,4 +1,5 @@ import { LemonTag } from '@posthog/lemon-ui' + import { capitalizeFirstLetter } from 'lib/utils' import { HogFunctionTemplateStatus } from '~/types' diff --git a/frontend/src/scenes/pipeline/destinations/Destinations.tsx b/frontend/src/scenes/pipeline/destinations/Destinations.tsx index f375dc66b4..b714d8ee66 100644 --- a/frontend/src/scenes/pipeline/destinations/Destinations.tsx +++ b/frontend/src/scenes/pipeline/destinations/Destinations.tsx @@ -1,19 +1,21 @@ import { DndContext, DragEndEvent } from '@dnd-kit/core' import { restrictToParentElement, restrictToVerticalAxis } from '@dnd-kit/modifiers' -import { arrayMove, SortableContext, useSortable, verticalListSortingStrategy } from '@dnd-kit/sortable' +import { SortableContext, arrayMove, useSortable, verticalListSortingStrategy } from '@dnd-kit/sortable' import { CSS } from '@dnd-kit/utilities' -import { LemonTable, LemonTableColumn, LemonTag, Link, Tooltip } from '@posthog/lemon-ui' -import { LemonBadge, LemonButton, LemonModal } from '@posthog/lemon-ui' import { clsx } from 'clsx' import { useActions, useValues } from 'kea' +import { useEffect, useState } from 'react' + +import { LemonTable, LemonTableColumn, LemonTag, Link, Tooltip } from '@posthog/lemon-ui' +import { LemonBadge, LemonButton, LemonModal } from '@posthog/lemon-ui' + import { PageHeader } from 'lib/components/PageHeader' import { PayGateMini } from 'lib/components/PayGateMini/PayGateMini' import { ProductIntroduction } from 'lib/components/ProductIntroduction/ProductIntroduction' import { More } from 'lib/lemon-ui/LemonButton/More' import { LemonMenuOverlay } from 'lib/lemon-ui/LemonMenu/LemonMenu' -import { updatedAtColumn } from 'lib/lemon-ui/LemonTable/columnUtils' import { LemonTableLink } from 'lib/lemon-ui/LemonTable/LemonTableLink' -import { useEffect, useState } from 'react' +import { updatedAtColumn } from 'lib/lemon-ui/LemonTable/columnUtils' import { RenderBatchExportIcon } from 'scenes/data-pipelines/batch-exports/BatchExportIcon' import { HogFunctionMetricSparkLine } from 'scenes/hog-functions/metrics/HogFunctionMetricsSparkline' import { urls } from 'scenes/urls' @@ -28,11 +30,11 @@ import { FrontendApps } from '../FrontendApps' import { NewButton } from '../NewButton' import { pipelineAccessLogic } from '../pipelineAccessLogic' import { Destination, FunctionDestination, PipelineBackend, SiteApp, Transformation } from '../types' -import { usePipelineNodeMenuCommonItems, RenderApp } from '../utils' +import { RenderApp, usePipelineNodeMenuCommonItems } from '../utils' import { DestinationsFilters } from './DestinationsFilters' +import { DestinationOptionsTable } from './NewDestinations' import { destinationsFiltersLogic } from './destinationsFiltersLogic' import { pipelineDestinationsLogic } from './destinationsLogic' -import { DestinationOptionsTable } from './NewDestinations' export interface DestinationsProps { types: HogFunctionTypeType[] diff --git a/frontend/src/scenes/pipeline/destinations/DestinationsFilters.tsx b/frontend/src/scenes/pipeline/destinations/DestinationsFilters.tsx index 8bd6b6724d..24ae576d77 100644 --- a/frontend/src/scenes/pipeline/destinations/DestinationsFilters.tsx +++ b/frontend/src/scenes/pipeline/destinations/DestinationsFilters.tsx @@ -1,5 +1,7 @@ -import { LemonCheckbox, LemonInput, LemonSelect, Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonCheckbox, LemonInput, LemonSelect, Link } from '@posthog/lemon-ui' + import { NewButton } from 'scenes/pipeline/NewButton' import { HogFunctionTypeType, PipelineStage } from '~/types' diff --git a/frontend/src/scenes/pipeline/destinations/NewDestinations.tsx b/frontend/src/scenes/pipeline/destinations/NewDestinations.tsx index 3206571e5c..f07d091fdf 100644 --- a/frontend/src/scenes/pipeline/destinations/NewDestinations.tsx +++ b/frontend/src/scenes/pipeline/destinations/NewDestinations.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconMegaphone, IconPlusSmall } from '@posthog/icons' import { LemonButton, LemonTable, Link } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { PayGateButton } from 'lib/components/PayGateMini/PayGateButton' import { PayGateMini } from 'lib/components/PayGateMini/PayGateMini' import { LemonTableLink } from 'lib/lemon-ui/LemonTable/LemonTableLink' @@ -11,9 +13,9 @@ import { SidePanelTab } from '~/types' import { AvailableFeature, HogFunctionTypeType, PipelineStage } from '~/types' import { pipelineAccessLogic } from '../pipelineAccessLogic' +import { DestinationTag } from './DestinationTag' import { DestinationsFilters } from './DestinationsFilters' import { destinationsFiltersLogic } from './destinationsFiltersLogic' -import { DestinationTag } from './DestinationTag' import { getDestinationDocPath, newDestinationsLogic } from './newDestinationsLogic' export interface NewDestinationsProps { diff --git a/frontend/src/scenes/pipeline/destinations/destinationsFiltersLogic.tsx b/frontend/src/scenes/pipeline/destinations/destinationsFiltersLogic.tsx index fbc0495f0a..4893741aea 100644 --- a/frontend/src/scenes/pipeline/destinations/destinationsFiltersLogic.tsx +++ b/frontend/src/scenes/pipeline/destinations/destinationsFiltersLogic.tsx @@ -1,10 +1,12 @@ -import { LemonDialog, LemonInput, LemonTextArea, lemonToast } from '@posthog/lemon-ui' import { actions, connect, kea, key, listeners, path, props, reducers } from 'kea' import { actionToUrl, router, urlToAction } from 'kea-router' +import posthog from 'posthog-js' + +import { LemonDialog, LemonInput, LemonTextArea, lemonToast } from '@posthog/lemon-ui' + import { LemonField } from 'lib/lemon-ui/LemonField' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { objectsEqual } from 'lib/utils' -import posthog from 'posthog-js' import { userLogic } from 'scenes/userLogic' import { HogFunctionTypeType } from '~/types' diff --git a/frontend/src/scenes/pipeline/destinations/destinationsLogic.tsx b/frontend/src/scenes/pipeline/destinations/destinationsLogic.tsx index 14973a7e4f..1bf6a35e0f 100644 --- a/frontend/src/scenes/pipeline/destinations/destinationsLogic.tsx +++ b/frontend/src/scenes/pipeline/destinations/destinationsLogic.tsx @@ -1,7 +1,9 @@ -import { lemonToast } from '@posthog/lemon-ui' import FuseClass from 'fuse.js' import { actions, afterMount, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' @@ -25,13 +27,13 @@ import { import { pipelineAccessLogic } from '../pipelineAccessLogic' import { BatchExportDestination, - convertToPipelineNode, Destination, FunctionDestination, PipelineBackend, SiteApp, Transformation, WebhookDestination, + convertToPipelineNode, } from '../types' import { captureBatchExportEvent, capturePluginEvent, loadPluginsFromUrl } from '../utils' import { destinationsFiltersLogic } from './destinationsFiltersLogic' diff --git a/frontend/src/scenes/pipeline/destinations/newDestinationsLogic.tsx b/frontend/src/scenes/pipeline/destinations/newDestinationsLogic.tsx index 05cb78d70b..08907bd650 100644 --- a/frontend/src/scenes/pipeline/destinations/newDestinationsLogic.tsx +++ b/frontend/src/scenes/pipeline/destinations/newDestinationsLogic.tsx @@ -2,6 +2,7 @@ import FuseClass from 'fuse.js' import { actions, afterMount, connect, kea, key, path, props, selectors } from 'kea' import { loaders } from 'kea-loaders' import { combineUrl, router } from 'kea-router' + import api from 'lib/api' import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' diff --git a/frontend/src/scenes/pipeline/frontendAppsLogic.tsx b/frontend/src/scenes/pipeline/frontendAppsLogic.tsx index 2767b6aa4c..78e1379e88 100644 --- a/frontend/src/scenes/pipeline/frontendAppsLogic.tsx +++ b/frontend/src/scenes/pipeline/frontendAppsLogic.tsx @@ -1,5 +1,6 @@ import { actions, afterMount, connect, kea, path, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { projectLogic } from 'scenes/projectLogic' import { userLogic } from 'scenes/userLogic' @@ -7,7 +8,7 @@ import { userLogic } from 'scenes/userLogic' import { PipelineStage, PluginConfigTypeNew, PluginConfigWithPluginInfoNew, PluginType } from '~/types' import type { frontendAppsLogicType } from './frontendAppsLogicType' -import { convertToPipelineNode, SiteApp } from './types' +import { SiteApp, convertToPipelineNode } from './types' import { capturePluginEvent, checkPermissions, loadPluginsFromUrl } from './utils' export const frontendAppsLogic = kea([ diff --git a/frontend/src/scenes/pipeline/importAppsLogic.tsx b/frontend/src/scenes/pipeline/importAppsLogic.tsx index 0811d90b67..2108f4c41b 100644 --- a/frontend/src/scenes/pipeline/importAppsLogic.tsx +++ b/frontend/src/scenes/pipeline/importAppsLogic.tsx @@ -1,5 +1,6 @@ import { actions, afterMount, connect, kea, path, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { projectLogic } from 'scenes/projectLogic' import { userLogic } from 'scenes/userLogic' @@ -7,7 +8,7 @@ import { userLogic } from 'scenes/userLogic' import { PipelineStage, PluginConfigTypeNew, PluginConfigWithPluginInfoNew, PluginType } from '~/types' import type { importAppsLogicType } from './importAppsLogicType' -import { convertToPipelineNode, ImportApp } from './types' +import { ImportApp, convertToPipelineNode } from './types' import { capturePluginEvent, checkPermissions, loadPluginsFromUrl } from './utils' export const importAppsLogic = kea([ diff --git a/frontend/src/scenes/pipeline/overviewLogic.tsx b/frontend/src/scenes/pipeline/overviewLogic.tsx index 6154404d2e..b98bc85109 100644 --- a/frontend/src/scenes/pipeline/overviewLogic.tsx +++ b/frontend/src/scenes/pipeline/overviewLogic.tsx @@ -1,4 +1,5 @@ import { connect, kea, path } from 'kea' + import { teamLogic } from 'scenes/teamLogic' import { DESTINATION_TYPES } from './destinations/constants' diff --git a/frontend/src/scenes/pipeline/pipelineAccessLogic.tsx b/frontend/src/scenes/pipeline/pipelineAccessLogic.tsx index d71c280812..7501fb098b 100644 --- a/frontend/src/scenes/pipeline/pipelineAccessLogic.tsx +++ b/frontend/src/scenes/pipeline/pipelineAccessLogic.tsx @@ -1,4 +1,5 @@ import { connect, kea, path, selectors } from 'kea' + import { userLogic } from 'scenes/userLogic' import { AvailableFeature } from '~/types' diff --git a/frontend/src/scenes/pipeline/pipelineLogic.tsx b/frontend/src/scenes/pipeline/pipelineLogic.tsx index 51030ca62a..f3473e1604 100644 --- a/frontend/src/scenes/pipeline/pipelineLogic.tsx +++ b/frontend/src/scenes/pipeline/pipelineLogic.tsx @@ -1,5 +1,6 @@ import { actions, connect, kea, path, reducers, selectors } from 'kea' import { actionToUrl, urlToAction } from 'kea-router' + import { capitalizeFirstLetter } from 'lib/utils' import { Scene } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/pipeline/pipelineNodeLogic.tsx b/frontend/src/scenes/pipeline/pipelineNodeLogic.tsx index 02d4e344a8..8fe0366b90 100644 --- a/frontend/src/scenes/pipeline/pipelineNodeLogic.tsx +++ b/frontend/src/scenes/pipeline/pipelineNodeLogic.tsx @@ -1,5 +1,6 @@ import { actions, kea, key, path, props, reducers, selectors } from 'kea' import { actionToUrl, router, urlToAction } from 'kea-router' + import { capitalizeFirstLetter } from 'lib/utils' import { Scene } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/pipeline/pipelineNodeLogsLogic.tsx b/frontend/src/scenes/pipeline/pipelineNodeLogsLogic.tsx index 8c0742ca91..7d877844d6 100644 --- a/frontend/src/scenes/pipeline/pipelineNodeLogsLogic.tsx +++ b/frontend/src/scenes/pipeline/pipelineNodeLogsLogic.tsx @@ -1,10 +1,12 @@ -import { LemonTableColumns, Link } from '@posthog/lemon-ui' import { actions, connect, events, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' + +import { LemonTableColumns, Link } from '@posthog/lemon-ui' + import { TZLabel } from 'lib/components/TZLabel' import { LOGS_PORTION_LIMIT } from 'lib/constants' import { dayjs } from 'lib/dayjs' -import { pipelineNodeLogic, PipelineNodeLogicProps } from 'scenes/pipeline/pipelineNodeLogic' +import { PipelineNodeLogicProps, pipelineNodeLogic } from 'scenes/pipeline/pipelineNodeLogic' import api from '~/lib/api' import { LogEntry, LogEntryLevel, LogEntryRequestParams } from '~/types' diff --git a/frontend/src/scenes/pipeline/pipelineNodeMetricsLogic.tsx b/frontend/src/scenes/pipeline/pipelineNodeMetricsLogic.tsx index 44c6036e2c..2c39e0128d 100644 --- a/frontend/src/scenes/pipeline/pipelineNodeMetricsLogic.tsx +++ b/frontend/src/scenes/pipeline/pipelineNodeMetricsLogic.tsx @@ -1,5 +1,6 @@ import { actions, afterMount, connect, kea, key, listeners, path, props, reducers } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { toParams } from 'lib/utils' import { projectLogic } from 'scenes/projectLogic' diff --git a/frontend/src/scenes/pipeline/pipelineNodeNewLogic.tsx b/frontend/src/scenes/pipeline/pipelineNodeNewLogic.tsx index be0e1cd29c..7b254b4d94 100644 --- a/frontend/src/scenes/pipeline/pipelineNodeNewLogic.tsx +++ b/frontend/src/scenes/pipeline/pipelineNodeNewLogic.tsx @@ -1,5 +1,6 @@ import { connect, kea, path, props, selectors } from 'kea' import { loaders } from 'kea-loaders' + import { capitalizeFirstLetter } from 'lib/utils' import { Scene } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/pipeline/pipelinePluginActivityDescriptions.tsx b/frontend/src/scenes/pipeline/pipelinePluginActivityDescriptions.tsx index 5eae1a9830..6bd9b2d7e8 100644 --- a/frontend/src/scenes/pipeline/pipelinePluginActivityDescriptions.tsx +++ b/frontend/src/scenes/pipeline/pipelinePluginActivityDescriptions.tsx @@ -1,10 +1,10 @@ +import { SentenceList } from 'lib/components/ActivityLog/SentenceList' import { ActivityLogItem, - defaultDescriber, HumanizedChange, + defaultDescriber, userNameForLogItem, } from 'lib/components/ActivityLog/humanizeActivity' -import { SentenceList } from 'lib/components/ActivityLog/SentenceList' import { dayjs } from 'lib/dayjs' import { ActivityScope } from '~/types' diff --git a/frontend/src/scenes/pipeline/pipelinePluginConfigurationLogic.tsx b/frontend/src/scenes/pipeline/pipelinePluginConfigurationLogic.tsx index 3ab2a70785..abd7ef9fb2 100644 --- a/frontend/src/scenes/pipeline/pipelinePluginConfigurationLogic.tsx +++ b/frontend/src/scenes/pipeline/pipelinePluginConfigurationLogic.tsx @@ -1,8 +1,10 @@ -import { lemonToast } from '@posthog/lemon-ui' import { afterMount, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' import { beforeUnload, router } from 'kea-router' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/pipeline/transformationsLogic.tsx b/frontend/src/scenes/pipeline/transformationsLogic.tsx index 6f226b54f7..10fd1af8bc 100644 --- a/frontend/src/scenes/pipeline/transformationsLogic.tsx +++ b/frontend/src/scenes/pipeline/transformationsLogic.tsx @@ -1,5 +1,6 @@ import { actions, afterMount, connect, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { projectLogic } from 'scenes/projectLogic' import { userLogic } from 'scenes/userLogic' @@ -7,7 +8,7 @@ import { userLogic } from 'scenes/userLogic' import { PipelineStage, PluginConfigTypeNew, PluginConfigWithPluginInfoNew, PluginType } from '~/types' import type { pipelineTransformationsLogicType } from './transformationsLogicType' -import { convertToPipelineNode, Transformation } from './types' +import { Transformation, convertToPipelineNode } from './types' import { capturePluginEvent, checkPermissions, loadPluginsFromUrl } from './utils' export const pipelineTransformationsLogic = kea([ diff --git a/frontend/src/scenes/pipeline/utils.tsx b/frontend/src/scenes/pipeline/utils.tsx index 7aea7c5109..ed4943abb8 100644 --- a/frontend/src/scenes/pipeline/utils.tsx +++ b/frontend/src/scenes/pipeline/utils.tsx @@ -1,11 +1,13 @@ -import { LemonMenuItem, LemonSkeleton, LemonTableColumn, lemonToast } from '@posthog/lemon-ui' import { useValues } from 'kea' +import posthog from 'posthog-js' + +import { LemonMenuItem, LemonSkeleton, LemonTableColumn, lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { LemonTableLink } from 'lib/lemon-ui/LemonTable/LemonTableLink' import { Link } from 'lib/lemon-ui/Link' import { Tooltip } from 'lib/lemon-ui/Tooltip' import { deleteWithUndo } from 'lib/utils/deleteWithUndo' -import posthog from 'posthog-js' import { urls } from 'scenes/urls' import { @@ -17,8 +19,8 @@ import { PluginType, } from '~/types' -import { pipelineAccessLogic } from './pipelineAccessLogic' import { PluginImage, PluginImageSize } from './PipelinePluginImage' +import { pipelineAccessLogic } from './pipelineAccessLogic' import { Destination, ImportApp, diff --git a/frontend/src/scenes/products/Products.stories.tsx b/frontend/src/scenes/products/Products.stories.tsx index ada102fba4..fa7d0eff4c 100644 --- a/frontend/src/scenes/products/Products.stories.tsx +++ b/frontend/src/scenes/products/Products.stories.tsx @@ -1,4 +1,5 @@ import { Meta, StoryObj } from '@storybook/react' + import { App } from 'scenes/App' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/products/Products.tsx b/frontend/src/scenes/products/Products.tsx index 1f74730aab..87b24f88cd 100644 --- a/frontend/src/scenes/products/Products.tsx +++ b/frontend/src/scenes/products/Products.tsx @@ -1,9 +1,11 @@ -import * as Icons from '@posthog/icons' -import { IconArrowRight, IconCheckCircle } from '@posthog/icons' -import { LemonButton, LemonLabel, LemonSelect, Link, Tooltip } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' import { router } from 'kea-router' + +import * as Icons from '@posthog/icons' +import { IconArrowRight, IconCheckCircle } from '@posthog/icons' +import { LemonButton, LemonLabel, LemonSelect, Link, Tooltip } from '@posthog/lemon-ui' + import { LemonCard } from 'lib/lemon-ui/LemonCard/LemonCard' import { getProductUri, onboardingLogic } from 'scenes/onboarding/onboardingLogic' import { availableOnboardingProducts } from 'scenes/onboarding/utils' diff --git a/frontend/src/scenes/products/productsLogic.ts b/frontend/src/scenes/products/productsLogic.ts index 9b453edb58..f6b71e2d9e 100644 --- a/frontend/src/scenes/products/productsLogic.ts +++ b/frontend/src/scenes/products/productsLogic.ts @@ -1,12 +1,13 @@ import { actions, connect, kea, listeners, path, reducers } from 'kea' import { router } from 'kea-router' + import { getRelativeNextPath } from 'lib/utils' import { ProductIntentContext } from 'lib/utils/product-intents' import { onboardingLogic } from 'scenes/onboarding/onboardingLogic' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' -import { ProductKey, OnboardingStepKey } from '~/types' +import { OnboardingStepKey, ProductKey } from '~/types' import type { productsLogicType } from './productsLogicType' diff --git a/frontend/src/scenes/project-homepage/ProjectHomePageCompactListItem.tsx b/frontend/src/scenes/project-homepage/ProjectHomePageCompactListItem.tsx index f12df18ce7..64f4ebc08b 100644 --- a/frontend/src/scenes/project-homepage/ProjectHomePageCompactListItem.tsx +++ b/frontend/src/scenes/project-homepage/ProjectHomePageCompactListItem.tsx @@ -1,6 +1,7 @@ -import { LemonButton, LemonButtonProps } from '@posthog/lemon-ui' import React from 'react' +import { LemonButton, LemonButtonProps } from '@posthog/lemon-ui' + export type RecentItemRowProps = Pick & { title: string subtitle: React.ReactNode diff --git a/frontend/src/scenes/project-homepage/ProjectHomepage.stories.tsx b/frontend/src/scenes/project-homepage/ProjectHomepage.stories.tsx index 55b97ba611..5cffd64a95 100644 --- a/frontend/src/scenes/project-homepage/ProjectHomepage.stories.tsx +++ b/frontend/src/scenes/project-homepage/ProjectHomepage.stories.tsx @@ -1,9 +1,10 @@ import { Meta, StoryObj } from '@storybook/react' + import { App } from 'scenes/App' +import { urls } from 'scenes/urls' import { mswDecorator } from '~/mocks/browser' import { EMPTY_PAGINATED_RESPONSE } from '~/mocks/handlers' -import { urls } from 'scenes/urls' const dashboardRaw = require('../dashboard/__mocks__/dashboard1.json') // Mark all tiles as cached to prevent refresh attempts in storybook diff --git a/frontend/src/scenes/project-homepage/ProjectHomepage.tsx b/frontend/src/scenes/project-homepage/ProjectHomepage.tsx index e27d99df85..5350115c0a 100644 --- a/frontend/src/scenes/project-homepage/ProjectHomepage.tsx +++ b/frontend/src/scenes/project-homepage/ProjectHomepage.tsx @@ -1,19 +1,21 @@ import './ProjectHomepage.scss' +import { useActions, useValues } from 'kea' + import { IconHome } from '@posthog/icons' import { Link } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { PageHeader } from 'lib/components/PageHeader' import { SceneDashboardChoiceModal } from 'lib/components/SceneDashboardChoice/SceneDashboardChoiceModal' -import { sceneDashboardChoiceModalLogic } from 'lib/components/SceneDashboardChoice/sceneDashboardChoiceModalLogic' import { SceneDashboardChoiceRequired } from 'lib/components/SceneDashboardChoice/SceneDashboardChoiceRequired' +import { sceneDashboardChoiceModalLogic } from 'lib/components/SceneDashboardChoice/sceneDashboardChoiceModalLogic' import { FEATURE_FLAGS } from 'lib/constants' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonDivider } from 'lib/lemon-ui/LemonDivider' import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { Dashboard } from 'scenes/dashboard/Dashboard' -import { dashboardLogic, DashboardLogicProps } from 'scenes/dashboard/dashboardLogic' +import { DashboardLogicProps, dashboardLogic } from 'scenes/dashboard/dashboardLogic' import { projectHomepageLogic } from 'scenes/project-homepage/projectHomepageLogic' import { Scene, SceneExport } from 'scenes/sceneTypes' import { inviteLogic } from 'scenes/settings/organization/inviteLogic' diff --git a/frontend/src/scenes/project-homepage/RecentInsights.tsx b/frontend/src/scenes/project-homepage/RecentInsights.tsx index becfe2333c..5b605904bc 100644 --- a/frontend/src/scenes/project-homepage/RecentInsights.tsx +++ b/frontend/src/scenes/project-homepage/RecentInsights.tsx @@ -1,8 +1,10 @@ import './ProjectHomepage.scss' import { useActions, useValues } from 'kea' + import { CompactList } from 'lib/components/CompactList/CompactList' import { dayjs } from 'lib/dayjs' +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' import { InsightIcon } from 'scenes/saved-insights/SavedInsights' import { urls } from 'scenes/urls' @@ -11,7 +13,6 @@ import { QueryBasedInsightModel } from '~/types' import { ProjectHomePageCompactListItem } from './ProjectHomePageCompactListItem' import { projectHomepageLogic } from './projectHomepageLogic' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' interface InsightRowProps { insight: QueryBasedInsightModel diff --git a/frontend/src/scenes/project-homepage/projectHomepageLogic.tsx b/frontend/src/scenes/project-homepage/projectHomepageLogic.tsx index 8e9b899647..763b2fa3ae 100644 --- a/frontend/src/scenes/project-homepage/projectHomepageLogic.tsx +++ b/frontend/src/scenes/project-homepage/projectHomepageLogic.tsx @@ -1,7 +1,9 @@ -import { beforeUnmount, BuiltLogic, connect, kea, path, selectors } from 'kea' +import { BuiltLogic, beforeUnmount, connect, kea, path, selectors } from 'kea' import { loaders } from 'kea-loaders' +import { subscriptions } from 'kea-subscriptions' + import api from 'lib/api' -import { dashboardLogic, DashboardLogicProps } from 'scenes/dashboard/dashboardLogic' +import { DashboardLogicProps, dashboardLogic } from 'scenes/dashboard/dashboardLogic' import { MaxContextInput, createMaxContextHelpers } from 'scenes/max/maxTypes' import { projectLogic } from 'scenes/projectLogic' import { teamLogic } from 'scenes/teamLogic' @@ -10,7 +12,6 @@ import { getQueryBasedInsightModel } from '~/queries/nodes/InsightViz/utils' import { DashboardPlacement, DashboardType, InsightModel, QueryBasedInsightModel } from '~/types' import type { projectHomepageLogicType } from './projectHomepageLogicType' -import { subscriptions } from 'kea-subscriptions' export const projectHomepageLogic = kea([ path(['scenes', 'project-homepage', 'projectHomepageLogic']), diff --git a/frontend/src/scenes/project/Create/index.tsx b/frontend/src/scenes/project/Create/index.tsx index c6d42c631b..cbb06b3a72 100644 --- a/frontend/src/scenes/project/Create/index.tsx +++ b/frontend/src/scenes/project/Create/index.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { organizationLogic } from 'scenes/organizationLogic' import { SceneExport } from 'scenes/sceneTypes' diff --git a/frontend/src/scenes/project/CreateEnvironmentModal.tsx b/frontend/src/scenes/project/CreateEnvironmentModal.tsx index 1db57cdba0..73858cad51 100644 --- a/frontend/src/scenes/project/CreateEnvironmentModal.tsx +++ b/frontend/src/scenes/project/CreateEnvironmentModal.tsx @@ -1,8 +1,10 @@ -import { LemonButton, LemonInput, LemonModal, Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' +import { useEffect, useState } from 'react' + +import { LemonButton, LemonInput, LemonModal, Link } from '@posthog/lemon-ui' + import { LemonField } from 'lib/lemon-ui/LemonField' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' -import { useEffect, useState } from 'react' import { projectLogic } from 'scenes/projectLogic' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/project/CreateProjectModal.tsx b/frontend/src/scenes/project/CreateProjectModal.tsx index 38966f374b..718b464a9c 100644 --- a/frontend/src/scenes/project/CreateProjectModal.tsx +++ b/frontend/src/scenes/project/CreateProjectModal.tsx @@ -1,8 +1,10 @@ -import { LemonButton, LemonInput, LemonModal, Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' +import { useEffect, useState } from 'react' + +import { LemonButton, LemonInput, LemonModal, Link } from '@posthog/lemon-ui' + import { LemonField } from 'lib/lemon-ui/LemonField' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' -import { useEffect, useState } from 'react' import { projectLogic } from 'scenes/projectLogic' import { organizationLogic } from '../organizationLogic' diff --git a/frontend/src/scenes/projectLogic.ts b/frontend/src/scenes/projectLogic.ts index c2cb958681..525017f3ac 100644 --- a/frontend/src/scenes/projectLogic.ts +++ b/frontend/src/scenes/projectLogic.ts @@ -1,5 +1,6 @@ import { actions, afterMount, connect, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api, { ApiConfig } from 'lib/api' import { lemonToast } from 'lib/lemon-ui/LemonToast' import { identifierToHuman, isUserLoggedIn } from 'lib/utils' diff --git a/frontend/src/scenes/retention/RetentionBreakdownFilter.tsx b/frontend/src/scenes/retention/RetentionBreakdownFilter.tsx index 82dca7ac9f..7715daf3d5 100644 --- a/frontend/src/scenes/retention/RetentionBreakdownFilter.tsx +++ b/frontend/src/scenes/retention/RetentionBreakdownFilter.tsx @@ -1,5 +1,7 @@ -import { LemonSelect, LemonSelectOption } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonSelect, LemonSelectOption } from '@posthog/lemon-ui' + import { insightLogic } from 'scenes/insights/insightLogic' import { retentionLogic } from './retentionLogic' diff --git a/frontend/src/scenes/retention/RetentionContainer.tsx b/frontend/src/scenes/retention/RetentionContainer.tsx index 46b2b04405..da499e0a0b 100644 --- a/frontend/src/scenes/retention/RetentionContainer.tsx +++ b/frontend/src/scenes/retention/RetentionContainer.tsx @@ -1,5 +1,7 @@ -import { LemonDivider } from '@posthog/lemon-ui' import { useValues } from 'kea' + +import { LemonDivider } from '@posthog/lemon-ui' + import { insightLogic } from 'scenes/insights/insightLogic' import { InsightVizNode, VizSpecificOptions } from '~/queries/schema/schema-general' @@ -7,9 +9,9 @@ import { QueryContext } from '~/queries/types' import { InsightType, RetentionDashboardDisplayType } from '~/types' import { RetentionGraph } from './RetentionGraph' -import { retentionLogic } from './retentionLogic' import { RetentionModal } from './RetentionModal' import { RetentionTable } from './RetentionTable' +import { retentionLogic } from './retentionLogic' export function RetentionContainer({ inCardView, diff --git a/frontend/src/scenes/retention/RetentionGraph.tsx b/frontend/src/scenes/retention/RetentionGraph.tsx index baf688d66c..7eef57b730 100644 --- a/frontend/src/scenes/retention/RetentionGraph.tsx +++ b/frontend/src/scenes/retention/RetentionGraph.tsx @@ -1,4 +1,5 @@ import { useActions, useValues } from 'kea' + import { roundToDecimal } from 'lib/utils' import { insightLogic } from 'scenes/insights/insightLogic' diff --git a/frontend/src/scenes/retention/RetentionModal.tsx b/frontend/src/scenes/retention/RetentionModal.tsx index a3c30f0804..d0c536cb05 100644 --- a/frontend/src/scenes/retention/RetentionModal.tsx +++ b/frontend/src/scenes/retention/RetentionModal.tsx @@ -1,8 +1,10 @@ import './RetentionTable.scss' -import { LemonButton, LemonModal } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' + +import { LemonButton, LemonModal } from '@posthog/lemon-ui' + import { exportsLogic } from 'lib/components/ExportButton/exportsLogic' import { SpinnerOverlay } from 'lib/lemon-ui/Spinner/Spinner' import { capitalizeFirstLetter, isGroupType, percentage } from 'lib/utils' diff --git a/frontend/src/scenes/retention/RetentionTable.tsx b/frontend/src/scenes/retention/RetentionTable.tsx index 5be673f8ea..3f7e0fa68f 100644 --- a/frontend/src/scenes/retention/RetentionTable.tsx +++ b/frontend/src/scenes/retention/RetentionTable.tsx @@ -1,12 +1,14 @@ import './RetentionTable.scss' -import { IconChevronDown } from '@posthog/icons' import clsx from 'clsx' import { useActions, useValues } from 'kea' -import { IconChevronRight } from 'lib/lemon-ui/icons' -import { Tooltip } from 'lib/lemon-ui/Tooltip' -import { gradateColor, range } from 'lib/utils' import React from 'react' + +import { IconChevronDown } from '@posthog/icons' + +import { Tooltip } from 'lib/lemon-ui/Tooltip' +import { IconChevronRight } from 'lib/lemon-ui/icons' +import { gradateColor, range } from 'lib/utils' import { insightLogic } from 'scenes/insights/insightLogic' import { themeLogic } from '~/layout/navigation-3000/themeLogic' diff --git a/frontend/src/scenes/retention/retentionGraphLogic.ts b/frontend/src/scenes/retention/retentionGraphLogic.ts index f8675b54ed..1d5a52fcb5 100644 --- a/frontend/src/scenes/retention/retentionGraphLogic.ts +++ b/frontend/src/scenes/retention/retentionGraphLogic.ts @@ -1,5 +1,6 @@ import { connect, kea, key, path, props, selectors } from 'kea' -import { dayjs, QUnitType } from 'lib/dayjs' + +import { QUnitType, dayjs } from 'lib/dayjs' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' import { keyForInsightLogicProps } from 'scenes/insights/sharedUtils' import { ProcessedRetentionPayload, RetentionTrendPayload } from 'scenes/retention/types' diff --git a/frontend/src/scenes/retention/retentionLogic.ts b/frontend/src/scenes/retention/retentionLogic.ts index b2df6adf7b..5244aa9251 100644 --- a/frontend/src/scenes/retention/retentionLogic.ts +++ b/frontend/src/scenes/retention/retentionLogic.ts @@ -1,5 +1,6 @@ import { mean, sum } from 'd3' import { actions, connect, kea, key, path, props, reducers, selectors } from 'kea' + import { CUSTOM_OPTION_KEY } from 'lib/components/DateFilter/types' import { dayjs } from 'lib/dayjs' import { formatDateRange } from 'lib/utils' diff --git a/frontend/src/scenes/retention/retentionModalLogic.ts b/frontend/src/scenes/retention/retentionModalLogic.ts index 7711f19545..4ce1cce532 100644 --- a/frontend/src/scenes/retention/retentionModalLogic.ts +++ b/frontend/src/scenes/retention/retentionModalLogic.ts @@ -1,11 +1,12 @@ import { actions, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' + import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' import { keyForInsightLogicProps } from 'scenes/insights/sharedUtils' import { retentionToActorsQuery } from 'scenes/retention/queries' import { urls } from 'scenes/urls' -import { groupsModel, Noun } from '~/models/groupsModel' +import { Noun, groupsModel } from '~/models/groupsModel' import { ActorsQuery, DataTableNode, diff --git a/frontend/src/scenes/retention/retentionPeopleLogic.ts b/frontend/src/scenes/retention/retentionPeopleLogic.ts index f17d73fab1..7694dbfe28 100644 --- a/frontend/src/scenes/retention/retentionPeopleLogic.ts +++ b/frontend/src/scenes/retention/retentionPeopleLogic.ts @@ -1,5 +1,6 @@ import { actions, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' import { keyForInsightLogicProps } from 'scenes/insights/sharedUtils' diff --git a/frontend/src/scenes/retention/retentionTableLogic.ts b/frontend/src/scenes/retention/retentionTableLogic.ts index a89f7e8233..0d601e6c8f 100644 --- a/frontend/src/scenes/retention/retentionTableLogic.ts +++ b/frontend/src/scenes/retention/retentionTableLogic.ts @@ -1,4 +1,5 @@ import { actions, afterMount, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' + import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' import { keyForInsightLogicProps } from 'scenes/insights/sharedUtils' diff --git a/frontend/src/scenes/saved-insights/AddSavedInsightsToDashboard.tsx b/frontend/src/scenes/saved-insights/AddSavedInsightsToDashboard.tsx index eea3149c81..8ba12f396e 100644 --- a/frontend/src/scenes/saved-insights/AddSavedInsightsToDashboard.tsx +++ b/frontend/src/scenes/saved-insights/AddSavedInsightsToDashboard.tsx @@ -1,7 +1,9 @@ import './SavedInsights.scss' -import { IconMinusSmall, IconPlusSmall } from '@posthog/icons' import { useActions, useValues } from 'kea' + +import { IconMinusSmall, IconPlusSmall } from '@posthog/icons' + import { ObjectTags } from 'lib/components/ObjectTags/ObjectTags' import { TZLabel } from 'lib/components/TZLabel' import { LemonButton } from 'lib/lemon-ui/LemonButton' @@ -19,8 +21,8 @@ import { urls } from 'scenes/urls' import { QueryBasedInsightModel, SavedInsightsTabs } from '~/types' -import { addSavedInsightsModalLogic, INSIGHTS_PER_PAGE } from './addSavedInsightsModalLogic' import { InsightIcon } from './SavedInsights' +import { INSIGHTS_PER_PAGE, addSavedInsightsModalLogic } from './addSavedInsightsModalLogic' export function AddSavedInsightsToDashboard(): JSX.Element { const { modalPage, insights, count, insightsLoading, filters, sorting, dashboardUpdatesInProgress } = diff --git a/frontend/src/scenes/saved-insights/ReloadInsight.tsx b/frontend/src/scenes/saved-insights/ReloadInsight.tsx index 03465f8a65..18b043217a 100644 --- a/frontend/src/scenes/saved-insights/ReloadInsight.tsx +++ b/frontend/src/scenes/saved-insights/ReloadInsight.tsx @@ -1,5 +1,7 @@ -import { Link } from '@posthog/lemon-ui' import { useValues } from 'kea' + +import { Link } from '@posthog/lemon-ui' + import { parseDraftQueryFromLocalStorage } from 'scenes/insights/utils' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/saved-insights/SavedInsights.stories.tsx b/frontend/src/scenes/saved-insights/SavedInsights.stories.tsx index 1c9d7a9e69..d5637c6b94 100644 --- a/frontend/src/scenes/saved-insights/SavedInsights.stories.tsx +++ b/frontend/src/scenes/saved-insights/SavedInsights.stories.tsx @@ -1,5 +1,7 @@ import { Meta, StoryObj } from '@storybook/react' + import { App } from 'scenes/App' +import { urls } from 'scenes/urls' import { mswDecorator } from '~/mocks/browser' import { EMPTY_PAGINATED_RESPONSE, toPaginatedResponse } from '~/mocks/handlers' @@ -8,7 +10,6 @@ import funnelTopToBottom from '../../mocks/fixtures/api/projects/team_id/insight import trendsBarBreakdown from '../../mocks/fixtures/api/projects/team_id/insights/trendsBarBreakdown.json' import trendsPieBreakdown from '../../mocks/fixtures/api/projects/team_id/insights/trendsPieBreakdown.json' import insightsJson from './__mocks__/insights.json' -import { urls } from 'scenes/urls' const insights = [trendsBarBreakdown, trendsPieBreakdown, funnelTopToBottom] diff --git a/frontend/src/scenes/saved-insights/SavedInsights.tsx b/frontend/src/scenes/saved-insights/SavedInsights.tsx index 723fc1d5f5..21e3781346 100644 --- a/frontend/src/scenes/saved-insights/SavedInsights.tsx +++ b/frontend/src/scenes/saved-insights/SavedInsights.tsx @@ -1,5 +1,7 @@ import './SavedInsights.scss' +import { useActions, useValues } from 'kea' + import { IconAI, IconBrackets, @@ -26,7 +28,7 @@ import { IconWarning, } from '@posthog/icons' import { LemonSelectOptions } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { AccessControlledLemonButton } from 'lib/components/AccessControlledLemonButton' import { ActivityLog } from 'lib/components/ActivityLog/ActivityLog' import { Alerts } from 'lib/components/Alerts/views/Alerts' @@ -34,17 +36,17 @@ import { InsightCard } from 'lib/components/Cards/InsightCard' import { ObjectTags } from 'lib/components/ObjectTags/ObjectTags' import { PageHeader } from 'lib/components/PageHeader' import { TZLabel } from 'lib/components/TZLabel' -import { IconAction, IconGridView, IconListView, IconTableChart } from 'lib/lemon-ui/icons' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { More } from 'lib/lemon-ui/LemonButton/More' import { LemonDivider } from 'lib/lemon-ui/LemonDivider' import { LemonSegmentedButton } from 'lib/lemon-ui/LemonSegmentedButton' import { LemonTable, LemonTableColumn, LemonTableColumns } from 'lib/lemon-ui/LemonTable' -import { createdAtColumn, createdByColumn } from 'lib/lemon-ui/LemonTable/columnUtils' import { LemonTableLink } from 'lib/lemon-ui/LemonTable/LemonTableLink' +import { createdAtColumn, createdByColumn } from 'lib/lemon-ui/LemonTable/columnUtils' import { LemonTabs } from 'lib/lemon-ui/LemonTabs' import { PaginationControl, usePagination } from 'lib/lemon-ui/PaginationControl' import { SpinnerOverlay } from 'lib/lemon-ui/Spinner/Spinner' +import { IconAction, IconGridView, IconListView, IconTableChart } from 'lib/lemon-ui/icons' import { isNonEmptyObject } from 'lib/utils' import { deleteInsightWithUndo } from 'lib/utils/deleteWithUndo' import { getAppContext } from 'lib/utils/getAppContext' @@ -52,8 +54,8 @@ import { SavedInsightsEmptyState } from 'scenes/insights/EmptyStates' import { useSummarizeInsight } from 'scenes/insights/summarizeInsight' import { organizationLogic } from 'scenes/organizationLogic' import { projectLogic } from 'scenes/projectLogic' -import { OverlayForNewInsightMenu } from 'scenes/saved-insights/newInsightsMenu' import { SavedInsightsFilters } from 'scenes/saved-insights/SavedInsightsFilters' +import { OverlayForNewInsightMenu } from 'scenes/saved-insights/newInsightsMenu' import { SceneExport } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/saved-insights/SavedInsightsFilters.tsx b/frontend/src/scenes/saved-insights/SavedInsightsFilters.tsx index 7f8679400a..3c07b1da2f 100644 --- a/frontend/src/scenes/saved-insights/SavedInsightsFilters.tsx +++ b/frontend/src/scenes/saved-insights/SavedInsightsFilters.tsx @@ -1,5 +1,7 @@ -import { IconCalendar } from '@posthog/icons' import { useValues } from 'kea' + +import { IconCalendar } from '@posthog/icons' + import { DateFilter } from 'lib/components/DateFilter/DateFilter' import { MemberSelect } from 'lib/components/MemberSelect' import { FEATURE_FLAGS } from 'lib/constants' diff --git a/frontend/src/scenes/saved-insights/activityDescriptions.tsx b/frontend/src/scenes/saved-insights/activityDescriptions.tsx index fedba6f5a3..d0284754f5 100644 --- a/frontend/src/scenes/saved-insights/activityDescriptions.tsx +++ b/frontend/src/scenes/saved-insights/activityDescriptions.tsx @@ -1,21 +1,22 @@ import '../../lib/components/Cards/InsightCard/InsightCard.scss' +import posthog from 'posthog-js' + +import { SentenceList } from 'lib/components/ActivityLog/SentenceList' import { ActivityChange, ActivityLogItem, ChangeMapping, - defaultDescriber, Description, - detectBoolean, HumanizedChange, + defaultDescriber, + detectBoolean, userNameForLogItem, } from 'lib/components/ActivityLog/humanizeActivity' -import { SentenceList } from 'lib/components/ActivityLog/SentenceList' import { BreakdownSummary, PropertiesSummary, SeriesSummary } from 'lib/components/Cards/InsightCard/InsightDetails' import { ObjectTags } from 'lib/components/ObjectTags/ObjectTags' import { Link } from 'lib/lemon-ui/Link' import { areObjectValuesEmpty, pluralize } from 'lib/utils' -import posthog from 'posthog-js' import { urls } from 'scenes/urls' import { filtersToQueryNode } from '~/queries/nodes/InsightQuery/utils/filtersToQueryNode' diff --git a/frontend/src/scenes/saved-insights/addSavedInsightsModalLogic.ts b/frontend/src/scenes/saved-insights/addSavedInsightsModalLogic.ts index f5c106d47b..5f675d321e 100644 --- a/frontend/src/scenes/saved-insights/addSavedInsightsModalLogic.ts +++ b/frontend/src/scenes/saved-insights/addSavedInsightsModalLogic.ts @@ -1,5 +1,6 @@ import { actions, connect, events, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { Sorting } from 'lib/lemon-ui/LemonTable' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' @@ -13,7 +14,7 @@ import { getQueryBasedInsightModel } from '~/queries/nodes/InsightViz/utils' import type { QueryBasedInsightModel } from '~/types' import type { addSavedInsightsModalLogicType } from './addSavedInsightsModalLogicType' -import { cleanFilters, SavedInsightFilters } from './savedInsightsLogic' +import { SavedInsightFilters, cleanFilters } from './savedInsightsLogic' export const INSIGHTS_PER_PAGE = 30 diff --git a/frontend/src/scenes/saved-insights/newInsightsMenu.tsx b/frontend/src/scenes/saved-insights/newInsightsMenu.tsx index e49e734382..aa1571f5da 100644 --- a/frontend/src/scenes/saved-insights/newInsightsMenu.tsx +++ b/frontend/src/scenes/saved-insights/newInsightsMenu.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { FEATURE_FLAGS } from 'lib/constants' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' diff --git a/frontend/src/scenes/saved-insights/savedInsightsLogic.test.ts b/frontend/src/scenes/saved-insights/savedInsightsLogic.test.ts index 2bd3f2a069..d8b98152bf 100644 --- a/frontend/src/scenes/saved-insights/savedInsightsLogic.test.ts +++ b/frontend/src/scenes/saved-insights/savedInsightsLogic.test.ts @@ -1,7 +1,9 @@ +import { MOCK_TEAM_ID } from 'lib/api.mock' + import { router } from 'kea-router' import { expectLogic, partial } from 'kea-test-utils' + import api from 'lib/api' -import { MOCK_TEAM_ID } from 'lib/api.mock' import { DeleteDashboardForm, deleteDashboardLogic } from 'scenes/dashboard/deleteDashboardLogic' import { DuplicateDashboardForm, duplicateDashboardLogic } from 'scenes/dashboard/duplicateDashboardLogic' import { sceneLogic } from 'scenes/sceneLogic' diff --git a/frontend/src/scenes/saved-insights/savedInsightsLogic.ts b/frontend/src/scenes/saved-insights/savedInsightsLogic.ts index 9cf715f47d..2896bef1a1 100644 --- a/frontend/src/scenes/saved-insights/savedInsightsLogic.ts +++ b/frontend/src/scenes/saved-insights/savedInsightsLogic.ts @@ -1,12 +1,16 @@ import { actions, connect, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { router } from 'kea-router' + import api, { CountedPaginatedResponse } from 'lib/api' import { AlertType } from 'lib/components/Alerts/types' import { dayjs } from 'lib/dayjs' import { Sorting } from 'lib/lemon-ui/LemonTable' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' import { PaginationManual } from 'lib/lemon-ui/PaginationControl' +import { tabAwareActionToUrl } from 'lib/logic/scenes/tabAwareActionToUrl' +import { tabAwareScene } from 'lib/logic/scenes/tabAwareScene' +import { tabAwareUrlToAction } from 'lib/logic/scenes/tabAwareUrlToAction' import { objectDiffShallow, objectsEqual, toParams } from 'lib/utils' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' import { deleteDashboardLogic } from 'scenes/dashboard/deleteDashboardLogic' @@ -15,9 +19,6 @@ import { insightsApi } from 'scenes/insights/utils/api' import { sceneLogic } from 'scenes/sceneLogic' import { Scene } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' -import { tabAwareScene } from 'lib/logic/scenes/tabAwareScene' -import { tabAwareActionToUrl } from 'lib/logic/scenes/tabAwareActionToUrl' -import { tabAwareUrlToAction } from 'lib/logic/scenes/tabAwareUrlToAction' import { SIDE_PANEL_CONTEXT_KEY, SidePanelSceneContext } from '~/layout/navigation-3000/sidepanel/types' import { dashboardsModel } from '~/models/dashboardsModel' diff --git a/frontend/src/scenes/sceneLogic.test.tsx b/frontend/src/scenes/sceneLogic.test.tsx index 6b3337981d..2854faba8d 100644 --- a/frontend/src/scenes/sceneLogic.test.tsx +++ b/frontend/src/scenes/sceneLogic.test.tsx @@ -1,6 +1,7 @@ import { kea, path } from 'kea' import { router } from 'kea-router' import { expectLogic, partial, truth } from 'kea-test-utils' + import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { Scene } from 'scenes/sceneTypes' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/sceneLogic.tsx b/frontend/src/scenes/sceneLogic.tsx index c734127243..c798c78829 100644 --- a/frontend/src/scenes/sceneLogic.tsx +++ b/frontend/src/scenes/sceneLogic.tsx @@ -1,20 +1,15 @@ -import { actions, afterMount, BuiltLogic, connect, kea, listeners, path, props, reducers, selectors } from 'kea' +import { arrayMove } from '@dnd-kit/sortable' +import { BuiltLogic, actions, afterMount, connect, kea, listeners, path, props, reducers, selectors } from 'kea' import { combineUrl, router, urlToAction } from 'kea-router' +import { subscriptions } from 'kea-subscriptions' +import posthog from 'posthog-js' + import { commandBarLogic } from 'lib/components/CommandBar/commandBarLogic' import { BarStatus } from 'lib/components/CommandBar/types' import { TeamMembershipLevel } from 'lib/constants' -import { identifierToHuman, getRelativeNextPath } from 'lib/utils' +import { getRelativeNextPath, identifierToHuman } from 'lib/utils' import { addProjectIdIfMissing, removeProjectIdIfPresent } from 'lib/utils/router-utils' import { withForwardedSearchParams } from 'lib/utils/sceneLogicUtils' -import posthog from 'posthog-js' -import { - emptySceneParams, - forwardedRedirectQueryParams, - preloadedScenes, - redirects, - routes, - sceneConfigurations, -} from 'scenes/scenes' import { LoadedScene, Params, @@ -25,20 +20,26 @@ import { SceneTab, sceneToAccessControlResourceType, } from 'scenes/sceneTypes' +import { + emptySceneParams, + forwardedRedirectQueryParams, + preloadedScenes, + redirects, + routes, + sceneConfigurations, +} from 'scenes/scenes' import { urls } from 'scenes/urls' -import { AccessControlLevel, PipelineTab, ProductKey, OnboardingStepKey } from '~/types' +import { AccessControlLevel, OnboardingStepKey, PipelineTab, ProductKey } from '~/types' +import { preflightLogic } from './PreflightCheck/preflightLogic' import { handleLoginRedirect } from './authentication/loginLogic' import { billingLogic } from './billing/billingLogic' import { organizationLogic } from './organizationLogic' -import { preflightLogic } from './PreflightCheck/preflightLogic' import type { sceneLogicType } from './sceneLogicType' import { inviteLogic } from './settings/organization/inviteLogic' import { teamLogic } from './teamLogic' import { userLogic } from './userLogic' -import { arrayMove } from '@dnd-kit/sortable' -import { subscriptions } from 'kea-subscriptions' const TAB_STATE_KEY = 'scene-tabs-state' const persistTabs = (tabs: SceneTab[]): void => { diff --git a/frontend/src/scenes/scenes.ts b/frontend/src/scenes/scenes.ts index c73cfd5dc0..1df35fd6e3 100644 --- a/frontend/src/scenes/scenes.ts +++ b/frontend/src/scenes/scenes.ts @@ -1,4 +1,5 @@ import { combineUrl } from 'kea-router' + import { dayjs } from 'lib/dayjs' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' import { getDefaultEventsSceneQuery } from 'scenes/activity/explore/defaults' diff --git a/frontend/src/scenes/session-recordings/SessionRecordings.tsx b/frontend/src/scenes/session-recordings/SessionRecordings.tsx index bd20d7a03c..5da2edb8e0 100644 --- a/frontend/src/scenes/session-recordings/SessionRecordings.tsx +++ b/frontend/src/scenes/session-recordings/SessionRecordings.tsx @@ -1,16 +1,18 @@ -import { IconEllipsis, IconGear, IconOpenSidebar } from '@posthog/icons' -import { LemonBadge, LemonButton, LemonMenu } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { router } from 'kea-router' + +import { IconEllipsis, IconGear, IconOpenSidebar } from '@posthog/icons' +import { LemonBadge, LemonButton, LemonMenu } from '@posthog/lemon-ui' + import { - authorizedUrlListLogic, AuthorizedUrlListType, + authorizedUrlListLogic, defaultAuthorizedUrlProperties, } from 'lib/components/AuthorizedUrlList/authorizedUrlListLogic' -import { FilmCameraHog, WarningHog } from 'lib/components/hedgehogs' import { PageHeader } from 'lib/components/PageHeader' import { ProductIntroduction } from 'lib/components/ProductIntroduction/ProductIntroduction' import { VersionCheckerBanner } from 'lib/components/VersionChecker/VersionCheckerBanner' +import { FilmCameraHog, WarningHog } from 'lib/components/hedgehogs' import { FEATURE_FLAGS } from 'lib/constants' import { useAsyncHandler } from 'lib/hooks/useAsyncHandler' import { LemonBanner } from 'lib/lemon-ui/LemonBanner' @@ -18,6 +20,7 @@ import { LemonTab, LemonTabs } from 'lib/lemon-ui/LemonTabs' import { Spinner } from 'lib/lemon-ui/Spinner/Spinner' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { NotebookSelectButton } from 'scenes/notebooks/NotebookSelectButton/NotebookSelectButton' +import { NotebookNodeType } from 'scenes/notebooks/types' import { SceneExport } from 'scenes/sceneTypes' import { sessionRecordingsPlaylistLogic } from 'scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic' import { teamLogic } from 'scenes/teamLogic' @@ -25,13 +28,12 @@ import { urls } from 'scenes/urls' import { ProductKey, ReplayTab, ReplayTabs } from '~/types' -import { createPlaylist } from './playlist/playlistUtils' import { SessionRecordingsPlaylist } from './playlist/SessionRecordingsPlaylist' +import { createPlaylist } from './playlist/playlistUtils' import { SavedSessionRecordingPlaylists } from './saved-playlists/SavedSessionRecordingPlaylists' import { sessionRecordingEventUsageLogic } from './sessionRecordingEventUsageLogic' import { sessionReplaySceneLogic } from './sessionReplaySceneLogic' import SessionRecordingTemplates from './templates/SessionRecordingTemplates' -import { NotebookNodeType } from 'scenes/notebooks/types' function Header(): JSX.Element { const { tab } = useValues(sessionReplaySceneLogic) diff --git a/frontend/src/scenes/session-recordings/SessionsRecordings-player-failure.stories.tsx b/frontend/src/scenes/session-recordings/SessionsRecordings-player-failure.stories.tsx index 7b104c3a07..1919f57e93 100644 --- a/frontend/src/scenes/session-recordings/SessionsRecordings-player-failure.stories.tsx +++ b/frontend/src/scenes/session-recordings/SessionsRecordings-player-failure.stories.tsx @@ -1,4 +1,5 @@ import { Meta, StoryObj } from '@storybook/react' + import { App } from 'scenes/App' import recordingEventsJson from 'scenes/session-recordings/__mocks__/recording_events_query' import { snapshotsAsJSONLines } from 'scenes/session-recordings/__mocks__/recording_snapshots' diff --git a/frontend/src/scenes/session-recordings/SessionsRecordings-player-success.stories.tsx b/frontend/src/scenes/session-recordings/SessionsRecordings-player-success.stories.tsx index a64f59d44d..c4d93a4ade 100644 --- a/frontend/src/scenes/session-recordings/SessionsRecordings-player-success.stories.tsx +++ b/frontend/src/scenes/session-recordings/SessionsRecordings-player-success.stories.tsx @@ -1,5 +1,6 @@ import { Meta, StoryObj } from '@storybook/react' import { combineUrl } from 'kea-router' + import { App } from 'scenes/App' import recordingEventsJson from 'scenes/session-recordings/__mocks__/recording_events_query' import { recordingMetaJson } from 'scenes/session-recordings/__mocks__/recording_meta' diff --git a/frontend/src/scenes/session-recordings/SessionsRecordings-playlist-listing.stories.tsx b/frontend/src/scenes/session-recordings/SessionsRecordings-playlist-listing.stories.tsx index 0acfb87149..d61cf0f7c8 100644 --- a/frontend/src/scenes/session-recordings/SessionsRecordings-playlist-listing.stories.tsx +++ b/frontend/src/scenes/session-recordings/SessionsRecordings-playlist-listing.stories.tsx @@ -1,4 +1,5 @@ import { Meta, StoryObj } from '@storybook/react' + import { FEATURE_FLAGS } from 'lib/constants' import { App } from 'scenes/App' import recordingEventsJson from 'scenes/session-recordings/__mocks__/recording_events_query' diff --git a/frontend/src/scenes/session-recordings/activityDescription.tsx b/frontend/src/scenes/session-recordings/activityDescription.tsx index b1e5525231..384768c5d3 100644 --- a/frontend/src/scenes/session-recordings/activityDescription.tsx +++ b/frontend/src/scenes/session-recordings/activityDescription.tsx @@ -1,7 +1,7 @@ import { ActivityLogItem, - defaultDescriber, HumanizedChange, + defaultDescriber, userNameForLogItem, } from 'lib/components/ActivityLog/humanizeActivity' diff --git a/frontend/src/scenes/session-recordings/apm/NetworkView.tsx b/frontend/src/scenes/session-recordings/apm/NetworkView.tsx index 553bfe6e34..6ba326be5b 100644 --- a/frontend/src/scenes/session-recordings/apm/NetworkView.tsx +++ b/frontend/src/scenes/session-recordings/apm/NetworkView.tsx @@ -1,13 +1,15 @@ import './NetworkView.scss' -import { LemonTable, Link } from '@posthog/lemon-ui' import { BindLogic, useActions, useValues } from 'kea' + +import { LemonTable, Link } from '@posthog/lemon-ui' + import { dayjs } from 'lib/dayjs' -import { IconChevronLeft, IconChevronRight } from 'lib/lemon-ui/icons' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonDivider } from 'lib/lemon-ui/LemonDivider' import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' import { Tooltip } from 'lib/lemon-ui/Tooltip' +import { IconChevronLeft, IconChevronRight } from 'lib/lemon-ui/icons' import AssetProportions from 'scenes/session-recordings/apm/components/AssetProportions' import { PerformanceCardRow } from 'scenes/session-recordings/apm/components/PerformanceCard' import { MethodTag, StatusTag } from 'scenes/session-recordings/apm/playerInspector/ItemPerformanceEvent' diff --git a/frontend/src/scenes/session-recordings/apm/components/AssetProportions.tsx b/frontend/src/scenes/session-recordings/apm/components/AssetProportions.tsx index 5247212bce..f7335ac5c7 100644 --- a/frontend/src/scenes/session-recordings/apm/components/AssetProportions.tsx +++ b/frontend/src/scenes/session-recordings/apm/components/AssetProportions.tsx @@ -1,4 +1,5 @@ import { Tooltip } from '@posthog/lemon-ui' + import { useResizeBreakpoints } from 'lib/hooks/useResizeObserver' import { humanizeBytes } from 'lib/utils' import { assetTypeToColor } from 'scenes/session-recordings/apm/performance-event-utils' diff --git a/frontend/src/scenes/session-recordings/apm/components/PerformanceCard.tsx b/frontend/src/scenes/session-recordings/apm/components/PerformanceCard.tsx index be03280332..38d626b564 100644 --- a/frontend/src/scenes/session-recordings/apm/components/PerformanceCard.tsx +++ b/frontend/src/scenes/session-recordings/apm/components/PerformanceCard.tsx @@ -1,4 +1,5 @@ import clsx from 'clsx' + import { Link } from 'lib/lemon-ui/Link' import { Spinner } from 'lib/lemon-ui/Spinner' import { humanFriendlyMilliseconds } from 'lib/utils' diff --git a/frontend/src/scenes/session-recordings/apm/networkViewLogic.ts b/frontend/src/scenes/session-recordings/apm/networkViewLogic.ts index e9dc4c0391..fd234471e2 100644 --- a/frontend/src/scenes/session-recordings/apm/networkViewLogic.ts +++ b/frontend/src/scenes/session-recordings/apm/networkViewLogic.ts @@ -1,11 +1,12 @@ import { actions, afterMount, connect, kea, key, path, props, reducers, selectors } from 'kea' + import { Dayjs, dayjs } from 'lib/dayjs' import { humanFriendlyMilliseconds } from 'lib/utils' import { performanceEventDataLogic } from 'scenes/session-recordings/apm/performanceEventDataLogic' import { percentagesWithinEventRange } from 'scenes/session-recordings/apm/waterfall/TimingBar' import { - sessionRecordingDataLogic, SessionRecordingDataLogicProps, + sessionRecordingDataLogic, } from 'scenes/session-recordings/player/sessionRecordingDataLogic' import { PerformanceEvent } from '~/types' diff --git a/frontend/src/scenes/session-recordings/apm/performance-event-utils.ts b/frontend/src/scenes/session-recordings/apm/performance-event-utils.ts index a4f429d3b3..1a67ffbd17 100644 --- a/frontend/src/scenes/session-recordings/apm/performance-event-utils.ts +++ b/frontend/src/scenes/session-recordings/apm/performance-event-utils.ts @@ -1,7 +1,9 @@ +import { CapturedNetworkRequest } from 'posthog-js' + import { eventWithTime } from '@posthog/rrweb-types' + import { getSeriesBackgroundColor, getSeriesColor } from 'lib/colors' import { humanizeBytes } from 'lib/utils' -import { CapturedNetworkRequest } from 'posthog-js' import { PerformanceEvent } from '~/types' diff --git a/frontend/src/scenes/session-recordings/apm/performanceEventDataLogic.ts b/frontend/src/scenes/session-recordings/apm/performanceEventDataLogic.ts index 80896096b1..5adc243a10 100644 --- a/frontend/src/scenes/session-recordings/apm/performanceEventDataLogic.ts +++ b/frontend/src/scenes/session-recordings/apm/performanceEventDataLogic.ts @@ -1,4 +1,5 @@ import { connect, kea, key, path, props, selectors } from 'kea' + import { getPerformanceEvents, initiatorToAssetTypeMapping, @@ -6,8 +7,8 @@ import { } from 'scenes/session-recordings/apm/performance-event-utils' import { InspectorListItemBase } from 'scenes/session-recordings/player/inspector/playerInspectorLogic' import { - sessionRecordingDataLogic, SessionRecordingDataLogicProps, + sessionRecordingDataLogic, } from 'scenes/session-recordings/player/sessionRecordingDataLogic' import { PerformanceEvent, RecordingEventType } from '~/types' diff --git a/frontend/src/scenes/session-recordings/apm/playerInspector/ItemPerformanceEvent.stories.tsx b/frontend/src/scenes/session-recordings/apm/playerInspector/ItemPerformanceEvent.stories.tsx index a1f1193f54..f825f9996a 100644 --- a/frontend/src/scenes/session-recordings/apm/playerInspector/ItemPerformanceEvent.stories.tsx +++ b/frontend/src/scenes/session-recordings/apm/playerInspector/ItemPerformanceEvent.stories.tsx @@ -1,6 +1,7 @@ import { Meta, StoryFn } from '@storybook/react' -import { LemonDivider } from 'lib/lemon-ui/LemonDivider' import { CapturedNetworkRequest } from 'posthog-js' + +import { LemonDivider } from 'lib/lemon-ui/LemonDivider' import { mapRRWebNetworkRequest } from 'scenes/session-recordings/apm/performance-event-utils' import { BodyDisplay, diff --git a/frontend/src/scenes/session-recordings/apm/playerInspector/ItemPerformanceEvent.tsx b/frontend/src/scenes/session-recordings/apm/playerInspector/ItemPerformanceEvent.tsx index d5319ef5ea..afbe9757b2 100644 --- a/frontend/src/scenes/session-recordings/apm/playerInspector/ItemPerformanceEvent.tsx +++ b/frontend/src/scenes/session-recordings/apm/playerInspector/ItemPerformanceEvent.tsx @@ -1,12 +1,14 @@ -import { LemonDivider, LemonTabs, LemonTag, LemonTagType, Link } from '@posthog/lemon-ui' import clsx from 'clsx' import { useValues } from 'kea' +import { useState } from 'react' + +import { LemonDivider, LemonTabs, LemonTag, LemonTagType, Link } from '@posthog/lemon-ui' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { SimpleKeyValueList } from 'lib/components/SimpleKeyValueList' import { Dayjs, dayjs } from 'lib/dayjs' import { humanFriendlyMilliseconds, isURL } from 'lib/utils' -import { useState } from 'react' -import { itemSizeInfo, PerformanceEventSizeInfo } from 'scenes/session-recordings/apm/performance-event-utils' +import { PerformanceEventSizeInfo, itemSizeInfo } from 'scenes/session-recordings/apm/performance-event-utils' import { NavigationItem } from 'scenes/session-recordings/player/inspector/components/NavigationItem' import { PerformanceEventLabel } from 'scenes/session-recordings/player/inspector/components/PerformanceEventLabel' import { NetworkRequestTiming } from 'scenes/session-recordings/player/inspector/components/Timing/NetworkRequestTiming' diff --git a/frontend/src/scenes/session-recordings/apm/waterfall/NetworkBar.tsx b/frontend/src/scenes/session-recordings/apm/waterfall/NetworkBar.tsx index c587212609..a2b8e92dc5 100644 --- a/frontend/src/scenes/session-recordings/apm/waterfall/NetworkBar.tsx +++ b/frontend/src/scenes/session-recordings/apm/waterfall/NetworkBar.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { Tooltip } from 'lib/lemon-ui/Tooltip' import { networkViewLogic } from 'scenes/session-recordings/apm/networkViewLogic' import { initiatorTypeToColor } from 'scenes/session-recordings/apm/performance-event-utils' diff --git a/frontend/src/scenes/session-recordings/apm/waterfall/TimeLineView.tsx b/frontend/src/scenes/session-recordings/apm/waterfall/TimeLineView.tsx index 0eec6ca5d3..4c2cff94fe 100644 --- a/frontend/src/scenes/session-recordings/apm/waterfall/TimeLineView.tsx +++ b/frontend/src/scenes/session-recordings/apm/waterfall/TimeLineView.tsx @@ -1,11 +1,11 @@ import { LemonDivider } from 'lib/lemon-ui/LemonDivider' import { Tooltip } from 'lib/lemon-ui/Tooltip' import { + PerformanceMeasures, + TimingBar, calculatePerformanceParts, perfDescriptions, - PerformanceMeasures, perfSections, - TimingBar, } from 'scenes/session-recordings/apm/waterfall/TimingBar' import { PerformanceEvent } from '~/types' diff --git a/frontend/src/scenes/session-recordings/components/AiRegexHelper/AiRegexHelper.tsx b/frontend/src/scenes/session-recordings/components/AiRegexHelper/AiRegexHelper.tsx index 4b5c421fc3..d970c1a29d 100644 --- a/frontend/src/scenes/session-recordings/components/AiRegexHelper/AiRegexHelper.tsx +++ b/frontend/src/scenes/session-recordings/components/AiRegexHelper/AiRegexHelper.tsx @@ -1,13 +1,14 @@ /** * @fileoverview A component that helps you to generate regex for your settings using Max AI */ +import { useActions, useValues } from 'kea' +import posthog from 'posthog-js' import { IconAI, IconCopy, IconPlus } from '@posthog/icons' import { LemonBanner, LemonButton, LemonModal, LemonTextArea } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' -import posthog from 'posthog-js' -import { maxGlobalLogic } from 'scenes/max/maxGlobalLogic' + import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' +import { maxGlobalLogic } from 'scenes/max/maxGlobalLogic' import { AIConsentPopoverWrapper } from 'scenes/settings/organization/AIConsentPopoverWrapper' import { aiRegexHelperLogic } from './aiRegexHelperLogic' diff --git a/frontend/src/scenes/session-recordings/components/AiRegexHelper/aiRegexHelperLogic.ts b/frontend/src/scenes/session-recordings/components/AiRegexHelper/aiRegexHelperLogic.ts index 2d01d6fae4..3248b51f43 100644 --- a/frontend/src/scenes/session-recordings/components/AiRegexHelper/aiRegexHelperLogic.ts +++ b/frontend/src/scenes/session-recordings/components/AiRegexHelper/aiRegexHelperLogic.ts @@ -1,8 +1,9 @@ import { actions, kea, listeners, path, reducers } from 'kea' +import posthog from 'posthog-js' + import api from 'lib/api' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' import { copyToClipboard } from 'lib/utils/copyToClipboard' -import posthog from 'posthog-js' import type { aiRegexHelperLogicType } from './aiRegexHelperLogicType' diff --git a/frontend/src/scenes/session-recordings/components/InternalSurvey/InternalMultipleChoiceSurvey.tsx b/frontend/src/scenes/session-recordings/components/InternalSurvey/InternalMultipleChoiceSurvey.tsx index fd14826168..79bf0d2a70 100644 --- a/frontend/src/scenes/session-recordings/components/InternalSurvey/InternalMultipleChoiceSurvey.tsx +++ b/frontend/src/scenes/session-recordings/components/InternalSurvey/InternalMultipleChoiceSurvey.tsx @@ -1,18 +1,19 @@ /** * @fileoverview A component that displays an interactive survey within a session recording. It handles survey display, user responses, and submission */ -import { LemonButton, LemonCheckbox, LemonTextArea, Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' -import { maxThreadLogic } from 'scenes/max/maxThreadLogic' -import { FEATURE_FLAGS } from 'lib/constants' +import { LemonButton, LemonCheckbox, LemonTextArea, Link } from '@posthog/lemon-ui' + +import { FEATURE_FLAGS } from 'lib/constants' +import { featureFlagLogic } from 'lib/logic/featureFlagLogic' +import { maxLogic } from 'scenes/max/maxLogic' +import { maxThreadLogic } from 'scenes/max/maxThreadLogic' + +import { sidePanelSettingsLogic } from '~/layout/navigation-3000/sidepanel/panels/sidePanelSettingsLogic' import { SidePanelTab, SurveyQuestion, SurveyQuestionType } from '~/types' import { internalMultipleChoiceSurveyLogic } from './internalMultipleChoiceSurveyLogic' -import { maxLogic } from 'scenes/max/maxLogic' -import { sidePanelSettingsLogic } from '~/layout/navigation-3000/sidepanel/panels/sidePanelSettingsLogic' - -import { featureFlagLogic } from 'lib/logic/featureFlagLogic' interface InternalSurveyProps { surveyId: string diff --git a/frontend/src/scenes/session-recordings/components/ItemTimeDisplay.tsx b/frontend/src/scenes/session-recordings/components/ItemTimeDisplay.tsx index b6cde0ff70..ce15d10160 100644 --- a/frontend/src/scenes/session-recordings/components/ItemTimeDisplay.tsx +++ b/frontend/src/scenes/session-recordings/components/ItemTimeDisplay.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { Dayjs } from 'lib/dayjs' import { Tooltip } from 'lib/lemon-ui/Tooltip' import { colonDelimitedDuration } from 'lib/utils' diff --git a/frontend/src/scenes/session-recordings/components/OverviewGrid.tsx b/frontend/src/scenes/session-recordings/components/OverviewGrid.tsx index a5495c555e..7f76177a6e 100644 --- a/frontend/src/scenes/session-recordings/components/OverviewGrid.tsx +++ b/frontend/src/scenes/session-recordings/components/OverviewGrid.tsx @@ -1,7 +1,8 @@ -import { Tooltip } from '@posthog/lemon-ui' import clsx from 'clsx' import { ReactNode } from 'react' +import { Tooltip } from '@posthog/lemon-ui' + interface OverviewItemBase { icon?: ReactNode label: string diff --git a/frontend/src/scenes/session-recordings/components/PanelSettings.tsx b/frontend/src/scenes/session-recordings/components/PanelSettings.tsx index ed76fe954e..e078d421b6 100644 --- a/frontend/src/scenes/session-recordings/components/PanelSettings.tsx +++ b/frontend/src/scenes/session-recordings/components/PanelSettings.tsx @@ -1,14 +1,15 @@ import './PanelSettings.scss' +import { PropsWithChildren } from 'react' + import { LemonButton, - LemonButtonWithoutSideActionProps, LemonButtonWithSideActionProps, + LemonButtonWithoutSideActionProps, } from 'lib/lemon-ui/LemonButton' import { LemonMenu, LemonMenuItem, LemonMenuProps } from 'lib/lemon-ui/LemonMenu/LemonMenu' import { Tooltip } from 'lib/lemon-ui/Tooltip' import { cn } from 'lib/utils/css-classes' -import { PropsWithChildren } from 'react' /** * TODO the lemon button font only has 700 and 800 weights available. diff --git a/frontend/src/scenes/session-recordings/components/RecordingRow.tsx b/frontend/src/scenes/session-recordings/components/RecordingRow.tsx index 8713dd160f..b810a76023 100644 --- a/frontend/src/scenes/session-recordings/components/RecordingRow.tsx +++ b/frontend/src/scenes/session-recordings/components/RecordingRow.tsx @@ -1,8 +1,9 @@ import clsx from 'clsx' import { useActions } from 'kea' -import { IconPlayCircle } from 'lib/lemon-ui/icons' + import { LemonSnack } from 'lib/lemon-ui/LemonSnack' import { ProfilePicture } from 'lib/lemon-ui/ProfilePicture' +import { IconPlayCircle } from 'lib/lemon-ui/icons' import { humanFriendlyDuration } from 'lib/utils' import { asDisplay } from 'scenes/persons/person-utils' import { sessionPlayerModalLogic } from 'scenes/session-recordings/player/modal/sessionPlayerModalLogic' diff --git a/frontend/src/scenes/session-recordings/components/RecordingsRow.stories.tsx b/frontend/src/scenes/session-recordings/components/RecordingsRow.stories.tsx index f34aece274..3865cf14b1 100644 --- a/frontend/src/scenes/session-recordings/components/RecordingsRow.stories.tsx +++ b/frontend/src/scenes/session-recordings/components/RecordingsRow.stories.tsx @@ -1,4 +1,5 @@ import { Meta, StoryFn } from '@storybook/react' + import { RecordingRow } from 'scenes/session-recordings/components/RecordingRow' import { SessionRecordingType } from '~/types' diff --git a/frontend/src/scenes/session-recordings/components/ReplayActiveHoursHeatMap.tsx b/frontend/src/scenes/session-recordings/components/ReplayActiveHoursHeatMap.tsx index ccb5be2595..6f28e42e55 100644 --- a/frontend/src/scenes/session-recordings/components/ReplayActiveHoursHeatMap.tsx +++ b/frontend/src/scenes/session-recordings/components/ReplayActiveHoursHeatMap.tsx @@ -1,8 +1,9 @@ import { useValues } from 'kea' + +import { teamLogic } from 'scenes/teamLogic' import { CalendarHeatMap } from 'scenes/web-analytics/CalendarHeatMap/CalendarHeatMap' import { getOnClickTooltip, onCellClick, replayActiveHoursHeatMapLogic } from './replayActiveHoursHeatMapLogic' -import { teamLogic } from 'scenes/teamLogic' export const ReplayActiveHoursHeatMap = (): JSX.Element => { const { timezone } = useValues(teamLogic) diff --git a/frontend/src/scenes/session-recordings/components/ReplayActiveScreensTable.tsx b/frontend/src/scenes/session-recordings/components/ReplayActiveScreensTable.tsx index a3e4aa3cff..17134f0270 100644 --- a/frontend/src/scenes/session-recordings/components/ReplayActiveScreensTable.tsx +++ b/frontend/src/scenes/session-recordings/components/ReplayActiveScreensTable.tsx @@ -1,6 +1,8 @@ -import { IconInfo } from '@posthog/icons' import { useValues } from 'kea' import { router } from 'kea-router' + +import { IconInfo } from '@posthog/icons' + import { LemonTable } from 'lib/lemon-ui/LemonTable' import { Tooltip } from 'lib/lemon-ui/Tooltip' import { replayActiveScreensTableLogic } from 'scenes/session-recordings/components/replayActiveScreensTableLogic' diff --git a/frontend/src/scenes/session-recordings/components/ReplayActiveUsersTable.tsx b/frontend/src/scenes/session-recordings/components/ReplayActiveUsersTable.tsx index 66ca810872..ae95029855 100644 --- a/frontend/src/scenes/session-recordings/components/ReplayActiveUsersTable.tsx +++ b/frontend/src/scenes/session-recordings/components/ReplayActiveUsersTable.tsx @@ -1,6 +1,8 @@ -import { IconInfo } from '@posthog/icons' import { useValues } from 'kea' import { router } from 'kea-router' + +import { IconInfo } from '@posthog/icons' + import { LemonTable } from 'lib/lemon-ui/LemonTable' import { Tooltip } from 'lib/lemon-ui/Tooltip' import { PersonDisplay } from 'scenes/persons/PersonDisplay' diff --git a/frontend/src/scenes/session-recordings/components/SimpleTimeLabel.tsx b/frontend/src/scenes/session-recordings/components/SimpleTimeLabel.tsx index 3028a67a8c..cca5c5c136 100644 --- a/frontend/src/scenes/session-recordings/components/SimpleTimeLabel.tsx +++ b/frontend/src/scenes/session-recordings/components/SimpleTimeLabel.tsx @@ -1,8 +1,9 @@ import clsx from 'clsx' +import { memo } from 'react' + import { Dayjs, dayjs } from 'lib/dayjs' import { Tooltip } from 'lib/lemon-ui/Tooltip' import { shortTimeZone } from 'lib/utils' -import { memo } from 'react' import { TimestampFormat } from 'scenes/session-recordings/player/playerSettingsLogic' function formattedReplayTime( diff --git a/frontend/src/scenes/session-recordings/components/replayActiveHoursHeatMapLogic.ts b/frontend/src/scenes/session-recordings/components/replayActiveHoursHeatMapLogic.ts index b164b28819..de3357d13b 100644 --- a/frontend/src/scenes/session-recordings/components/replayActiveHoursHeatMapLogic.ts +++ b/frontend/src/scenes/session-recordings/components/replayActiveHoursHeatMapLogic.ts @@ -1,10 +1,11 @@ import { kea, key, listeners, path, props, selectors } from 'kea' import { lazyLoaders } from 'kea-loaders' import { router } from 'kea-router' +import posthog from 'posthog-js' + import api from 'lib/api' import { Dayjs, now } from 'lib/dayjs' import { lemonToast } from 'lib/lemon-ui/LemonToast' -import posthog from 'posthog-js' import { urls } from 'scenes/urls' import { CalendarHeatMapProps } from 'scenes/web-analytics/CalendarHeatMap/CalendarHeatMap' diff --git a/frontend/src/scenes/session-recordings/components/replayActiveScreensTableLogic.ts b/frontend/src/scenes/session-recordings/components/replayActiveScreensTableLogic.ts index 6541da8082..2bd6927716 100644 --- a/frontend/src/scenes/session-recordings/components/replayActiveScreensTableLogic.ts +++ b/frontend/src/scenes/session-recordings/components/replayActiveScreensTableLogic.ts @@ -1,5 +1,6 @@ import { defaults, kea, key, path, props } from 'kea' import { lazyLoaders } from 'kea-loaders' + import api from 'lib/api' import { hogql } from '~/queries/utils' diff --git a/frontend/src/scenes/session-recordings/components/replayActiveUsersTableLogic.ts b/frontend/src/scenes/session-recordings/components/replayActiveUsersTableLogic.ts index 20c8fa4c4c..b4619c0e6a 100644 --- a/frontend/src/scenes/session-recordings/components/replayActiveUsersTableLogic.ts +++ b/frontend/src/scenes/session-recordings/components/replayActiveUsersTableLogic.ts @@ -1,5 +1,6 @@ import { defaults, kea, key, path, props } from 'kea' import { lazyLoaders } from 'kea-loaders' + import api from 'lib/api' import { hogql } from '~/queries/utils' diff --git a/frontend/src/scenes/session-recordings/detail/SessionRecordingDetail.tsx b/frontend/src/scenes/session-recordings/detail/SessionRecordingDetail.tsx index 9a386aed5d..6207a06453 100644 --- a/frontend/src/scenes/session-recordings/detail/SessionRecordingDetail.tsx +++ b/frontend/src/scenes/session-recordings/detail/SessionRecordingDetail.tsx @@ -1,14 +1,15 @@ import './SessionRecordingScene.scss' import { useValues } from 'kea' + import { FEATURE_FLAGS } from 'lib/constants' import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { Link } from 'lib/lemon-ui/Link' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { SceneExport } from 'scenes/sceneTypes' import { - sessionRecordingDetailLogic, SessionRecordingDetailLogicProps, + sessionRecordingDetailLogic, } from 'scenes/session-recordings/detail/sessionRecordingDetailLogic' import { RecordingNotFound } from 'scenes/session-recordings/player/RecordingNotFound' import { SessionRecordingPlayer } from 'scenes/session-recordings/player/SessionRecordingPlayer' diff --git a/frontend/src/scenes/session-recordings/detail/sessionRecordingDetailLogic.ts b/frontend/src/scenes/session-recordings/detail/sessionRecordingDetailLogic.ts index d41dc0a28c..f58e218df9 100644 --- a/frontend/src/scenes/session-recordings/detail/sessionRecordingDetailLogic.ts +++ b/frontend/src/scenes/session-recordings/detail/sessionRecordingDetailLogic.ts @@ -1,4 +1,5 @@ import { kea, path, props, selectors } from 'kea' + import { Scene } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/session-recordings/file-playback/SessionRecordingFilePlaybackScene.tsx b/frontend/src/scenes/session-recordings/file-playback/SessionRecordingFilePlaybackScene.tsx index b2fa36a273..e0ecc68c22 100644 --- a/frontend/src/scenes/session-recordings/file-playback/SessionRecordingFilePlaybackScene.tsx +++ b/frontend/src/scenes/session-recordings/file-playback/SessionRecordingFilePlaybackScene.tsx @@ -1,10 +1,11 @@ import { useActions, useValues } from 'kea' +import { useRef } from 'react' + import { PayGateMini } from 'lib/components/PayGateMini/PayGateMini' -import { IconUploadFile } from 'lib/lemon-ui/icons' import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { LemonFileInput } from 'lib/lemon-ui/LemonFileInput' import { SpinnerOverlay } from 'lib/lemon-ui/Spinner/Spinner' -import { useRef } from 'react' +import { IconUploadFile } from 'lib/lemon-ui/icons' import { SceneExport } from 'scenes/sceneTypes' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/scenes/session-recordings/file-playback/sessionRecordingFilePlaybackSceneLogic.ts b/frontend/src/scenes/session-recordings/file-playback/sessionRecordingFilePlaybackSceneLogic.ts index f2b8985e1f..752e8056d3 100644 --- a/frontend/src/scenes/session-recordings/file-playback/sessionRecordingFilePlaybackSceneLogic.ts +++ b/frontend/src/scenes/session-recordings/file-playback/sessionRecordingFilePlaybackSceneLogic.ts @@ -1,7 +1,9 @@ -import { lemonToast } from '@posthog/lemon-ui' import { BuiltLogic, connect, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { beforeUnload } from 'kea-router' + +import { lemonToast } from '@posthog/lemon-ui' + import { dayjs } from 'lib/dayjs' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { uuid } from 'lib/utils' diff --git a/frontend/src/scenes/session-recordings/filters/DurationFilter.tsx b/frontend/src/scenes/session-recordings/filters/DurationFilter.tsx index 66253bb448..8a1efde5eb 100644 --- a/frontend/src/scenes/session-recordings/filters/DurationFilter.tsx +++ b/frontend/src/scenes/session-recordings/filters/DurationFilter.tsx @@ -1,8 +1,10 @@ +import { useMemo, useState } from 'react' + import { LemonButton, LemonButtonProps } from '@posthog/lemon-ui' -import { convertSecondsToDuration, DurationPicker } from 'lib/components/DurationPicker/DurationPicker' + +import { DurationPicker, convertSecondsToDuration } from 'lib/components/DurationPicker/DurationPicker' import { OperatorSelect } from 'lib/components/PropertyFilters/components/OperatorValueSelect' import { Popover } from 'lib/lemon-ui/Popover/Popover' -import { useMemo, useState } from 'react' import { DurationTypeSelect } from 'scenes/session-recordings/filters/DurationTypeSelect' import { DurationType, PropertyOperator, RecordingDurationFilter } from '~/types' diff --git a/frontend/src/scenes/session-recordings/filters/DurationTypeSelect.tsx b/frontend/src/scenes/session-recordings/filters/DurationTypeSelect.tsx index 09c4517b1c..c3be6169ec 100644 --- a/frontend/src/scenes/session-recordings/filters/DurationTypeSelect.tsx +++ b/frontend/src/scenes/session-recordings/filters/DurationTypeSelect.tsx @@ -1,6 +1,7 @@ -import { LemonSelect } from '@posthog/lemon-ui' import posthog from 'posthog-js' +import { LemonSelect } from '@posthog/lemon-ui' + import { DurationType } from '~/types' interface DurationTypeFilterProps { diff --git a/frontend/src/scenes/session-recordings/filters/RecordingsUniversalFiltersEmbed.tsx b/frontend/src/scenes/session-recordings/filters/RecordingsUniversalFiltersEmbed.tsx index ba0dd9c70e..887f658606 100644 --- a/frontend/src/scenes/session-recordings/filters/RecordingsUniversalFiltersEmbed.tsx +++ b/frontend/src/scenes/session-recordings/filters/RecordingsUniversalFiltersEmbed.tsx @@ -1,21 +1,24 @@ -import { IconArrowRight, IconClock, IconFilter, IconPlus, IconRevert, IconX, IconEye, IconHide } from '@posthog/icons' -import { LemonBadge, LemonButton, LemonInput, LemonModal, LemonTab, LemonTabs, Popover } from '@posthog/lemon-ui' import clsx from 'clsx' import equal from 'fast-deep-equal' import { useActions, useMountedLogic, useValues } from 'kea' +import { useState } from 'react' + +import { IconArrowRight, IconClock, IconEye, IconFilter, IconHide, IconPlus, IconRevert, IconX } from '@posthog/icons' +import { LemonBadge, LemonButton, LemonInput, LemonModal, LemonTab, LemonTabs, Popover } from '@posthog/lemon-ui' + import { DateFilter } from 'lib/components/DateFilter/DateFilter' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import UniversalFilters from 'lib/components/UniversalFilters/UniversalFilters' import { universalFiltersLogic } from 'lib/components/UniversalFilters/universalFiltersLogic' import { isUniversalGroupFilterLike } from 'lib/components/UniversalFilters/utils' import { FEATURE_FLAGS } from 'lib/constants' +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { LemonMenuOverlay } from 'lib/lemon-ui/LemonMenu/LemonMenu' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { useState } from 'react' import { TestAccountFilter } from 'scenes/insights/filters/TestAccountFilter' +import { MaxTool } from 'scenes/max/MaxTool' import { maxLogic } from 'scenes/max/maxLogic' import { maxThreadLogic } from 'scenes/max/maxThreadLogic' -import { MaxTool } from 'scenes/max/MaxTool' import { SettingsMenu } from 'scenes/session-recordings/components/PanelSettings' import { TimestampFormatToLabel } from 'scenes/session-recordings/utils' @@ -27,7 +30,7 @@ import { AndOrFilterSelect } from '~/queries/nodes/InsightViz/PropertyGroupFilte import { NodeKind } from '~/queries/schema/schema-general' import { RecordingUniversalFilters, ReplayTabs, SidePanelTab, UniversalFiltersGroup } from '~/types' -import { playerSettingsLogic, TimestampFormat } from '../player/playerSettingsLogic' +import { TimestampFormat, playerSettingsLogic } from '../player/playerSettingsLogic' import { playlistLogic } from '../playlist/playlistLogic' import { createPlaylist, updatePlaylist } from '../playlist/playlistUtils' import { defaultRecordingDurationFilter } from '../playlist/sessionRecordingsPlaylistLogic' @@ -35,7 +38,6 @@ import { savedSessionRecordingPlaylistsLogic } from '../saved-playlists/savedSes import { sessionRecordingEventUsageLogic } from '../sessionRecordingEventUsageLogic' import { DurationFilter } from './DurationFilter' import { SavedFilters } from './SavedFilters' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' function HideRecordingsMenu(): JSX.Element { const { hideViewedRecordings, hideRecordingsMenuLabelFor } = useValues(playerSettingsLogic) diff --git a/frontend/src/scenes/session-recordings/filters/ReplayTaxonomicFilters.tsx b/frontend/src/scenes/session-recordings/filters/ReplayTaxonomicFilters.tsx index 0d29e05b34..f83faa2920 100644 --- a/frontend/src/scenes/session-recordings/filters/ReplayTaxonomicFilters.tsx +++ b/frontend/src/scenes/session-recordings/filters/ReplayTaxonomicFilters.tsx @@ -1,11 +1,13 @@ +import { useActions, useValues } from 'kea' +import { useState } from 'react' + import { IconInfo, IconPinFilled } from '@posthog/icons' import { LemonButton, Popover, Tooltip } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { PropertyKeyInfo } from 'lib/components/PropertyKeyInfo' import { TaxonomicFilter } from 'lib/components/TaxonomicFilter/TaxonomicFilter' import { TaxonomicFilterGroupType, TaxonomicFilterValue } from 'lib/components/TaxonomicFilter/types' import { universalFiltersLogic } from 'lib/components/UniversalFilters/universalFiltersLogic' -import { useState } from 'react' import { getFilterLabel } from '~/taxonomy/helpers' import { PropertyFilterType } from '~/types' diff --git a/frontend/src/scenes/session-recordings/filters/SavedFilters.tsx b/frontend/src/scenes/session-recordings/filters/SavedFilters.tsx index 7bb54402dc..b883aab1b4 100644 --- a/frontend/src/scenes/session-recordings/filters/SavedFilters.tsx +++ b/frontend/src/scenes/session-recordings/filters/SavedFilters.tsx @@ -1,7 +1,9 @@ -import { IconCopy, IconTrash } from '@posthog/icons' -import { LemonButton, LemonInput, LemonTable, LemonTableColumn, LemonTableColumns } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { combineUrl } from 'kea-router' + +import { IconCopy, IconTrash } from '@posthog/icons' +import { LemonButton, LemonInput, LemonTable, LemonTableColumn, LemonTableColumns } from '@posthog/lemon-ui' + import { useFeatureFlag } from 'lib/hooks/useFeatureFlag' import { copyToClipboard } from 'lib/utils/copyToClipboard' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/session-recordings/filters/SavedFiltersStates.tsx b/frontend/src/scenes/session-recordings/filters/SavedFiltersStates.tsx index be2f808a0c..4f5448e9c8 100644 --- a/frontend/src/scenes/session-recordings/filters/SavedFiltersStates.tsx +++ b/frontend/src/scenes/session-recordings/filters/SavedFiltersStates.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { ReplayTabs } from '~/types' diff --git a/frontend/src/scenes/session-recordings/player/PlayerFrame.tsx b/frontend/src/scenes/session-recordings/player/PlayerFrame.tsx index 293d4ce5fa..9b0d482cbf 100644 --- a/frontend/src/scenes/session-recordings/player/PlayerFrame.tsx +++ b/frontend/src/scenes/session-recordings/player/PlayerFrame.tsx @@ -1,10 +1,12 @@ import './PlayerFrame.scss' -import { Handler, viewportResizeDimension } from '@posthog/rrweb-types' import useSize from '@react-hook/size' import clsx from 'clsx' import { useActions, useValues } from 'kea' import { useCallback, useEffect, useRef } from 'react' + +import { Handler, viewportResizeDimension } from '@posthog/rrweb-types' + import { sessionRecordingPlayerLogic } from 'scenes/session-recordings/player/sessionRecordingPlayerLogic' export const PlayerFrame = (): JSX.Element => { diff --git a/frontend/src/scenes/session-recordings/player/PlayerFrameOverlay.tsx b/frontend/src/scenes/session-recordings/player/PlayerFrameOverlay.tsx index db090f7b27..cf364a0bbe 100644 --- a/frontend/src/scenes/session-recordings/player/PlayerFrameOverlay.tsx +++ b/frontend/src/scenes/session-recordings/player/PlayerFrameOverlay.tsx @@ -1,8 +1,10 @@ import './PlayerFrameOverlay.scss' -import { IconPlay, IconRewindPlay, IconWarning } from '@posthog/icons' import clsx from 'clsx' import { useActions, useValues } from 'kea' + +import { IconPlay, IconRewindPlay, IconWarning } from '@posthog/icons' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { sessionRecordingPlayerLogic } from 'scenes/session-recordings/player/sessionRecordingPlayerLogic' diff --git a/frontend/src/scenes/session-recordings/player/PlayerSidebar.tsx b/frontend/src/scenes/session-recordings/player/PlayerSidebar.tsx index 176d5a8f0e..a40c8f9080 100644 --- a/frontend/src/scenes/session-recordings/player/PlayerSidebar.tsx +++ b/frontend/src/scenes/session-recordings/player/PlayerSidebar.tsx @@ -1,19 +1,21 @@ -import { IconBottomPanel, IconSidePanel, IconX } from '@posthog/icons' -import { LemonButton, LemonTabs } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' +import { useRef } from 'react' + +import { IconBottomPanel, IconSidePanel, IconX } from '@posthog/icons' +import { LemonButton, LemonTabs } from '@posthog/lemon-ui' + import { Resizer } from 'lib/components/Resizer/Resizer' -import { resizerLogic, ResizerLogicProps } from 'lib/components/Resizer/resizerLogic' +import { ResizerLogicProps, resizerLogic } from 'lib/components/Resizer/resizerLogic' import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { capitalizeFirstLetter, splitKebabCase } from 'lib/utils' -import { useRef } from 'react' import { SessionRecordingSidebarStacking, SessionRecordingSidebarTab } from '~/types' import { playerSettingsLogic } from './playerSettingsLogic' -import { playerSidebarLogic } from './sidebar/playerSidebarLogic' import { PlayerSidebarTab } from './sidebar/PlayerSidebarTab' +import { playerSidebarLogic } from './sidebar/playerSidebarLogic' export function PlayerSidebar(): JSX.Element { const ref = useRef(null) diff --git a/frontend/src/scenes/session-recordings/player/PlayerUpNext.tsx b/frontend/src/scenes/session-recordings/player/PlayerUpNext.tsx index d64f1b7a47..ffa539bc85 100644 --- a/frontend/src/scenes/session-recordings/player/PlayerUpNext.tsx +++ b/frontend/src/scenes/session-recordings/player/PlayerUpNext.tsx @@ -1,11 +1,13 @@ import './PlayerUpNext.scss' -import { IconPlay } from '@posthog/icons' import clsx from 'clsx' import { BuiltLogic, useActions, useValues } from 'kea' +import { useEffect, useRef, useState } from 'react' + +import { IconPlay } from '@posthog/icons' + import { useKeyboardHotkeys } from 'lib/hooks/useKeyboardHotkeys' import { Tooltip } from 'lib/lemon-ui/Tooltip' -import { useEffect, useRef, useState } from 'react' import { KeyboardShortcut } from '~/layout/navigation-3000/components/KeyboardShortcut' diff --git a/frontend/src/scenes/session-recordings/player/SessionRecordingNextConfirmation.tsx b/frontend/src/scenes/session-recordings/player/SessionRecordingNextConfirmation.tsx index 5d5473c1d6..6e3d5f82b8 100644 --- a/frontend/src/scenes/session-recordings/player/SessionRecordingNextConfirmation.tsx +++ b/frontend/src/scenes/session-recordings/player/SessionRecordingNextConfirmation.tsx @@ -1,8 +1,10 @@ -import { LemonButton, LemonDivider, LemonModal } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' -import ViewRecordingButton from 'lib/components/ViewRecordingButton/ViewRecordingButton' import { Fragment } from 'react' +import { LemonButton, LemonDivider, LemonModal } from '@posthog/lemon-ui' + +import ViewRecordingButton from 'lib/components/ViewRecordingButton/ViewRecordingButton' + import { sessionRecordingPlayerLogic } from './sessionRecordingPlayerLogic' export function SessionRecordingNextConfirmation(): JSX.Element { diff --git a/frontend/src/scenes/session-recordings/player/SessionRecordingPlayer.tsx b/frontend/src/scenes/session-recordings/player/SessionRecordingPlayer.tsx index cf083d928c..57cef8ad13 100644 --- a/frontend/src/scenes/session-recordings/player/SessionRecordingPlayer.tsx +++ b/frontend/src/scenes/session-recordings/player/SessionRecordingPlayer.tsx @@ -1,36 +1,37 @@ import './SessionRecordingPlayer.scss' -import { LemonButton } from '@posthog/lemon-ui' import clsx from 'clsx' import { BindLogic, useActions, useValues } from 'kea' +import posthog from 'posthog-js' +import { useEffect, useMemo, useRef } from 'react' + +import { LemonButton } from '@posthog/lemon-ui' import { BuilderHog2, SleepingHog } from 'lib/components/hedgehogs' import { FloatingContainerContext } from 'lib/hooks/useFloatingContainerContext' import { HotkeysInterface, useKeyboardHotkeys } from 'lib/hooks/useKeyboardHotkeys' import { usePageVisibilityCb } from 'lib/hooks/usePageVisibility' import { useResizeBreakpoints } from 'lib/hooks/useResizeObserver' -import posthog from 'posthog-js' -import { useEffect, useMemo, useRef } from 'react' import { useNotebookDrag } from 'scenes/notebooks/AddToNotebook/DraggableToNotebook' -import { PlayerFrameCommentOverlay } from 'scenes/session-recordings/player/commenting/PlayerFrameCommentOverlay' import { RecordingNotFound } from 'scenes/session-recordings/player/RecordingNotFound' +import { PlayerFrameCommentOverlay } from 'scenes/session-recordings/player/commenting/PlayerFrameCommentOverlay' import { MatchingEventsMatchType } from 'scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic' import { urls } from 'scenes/urls' -import { PlayerController } from './controller/PlayerController' -import { PlayerMeta } from './player-meta/PlayerMeta' import { PlayerFrame } from './PlayerFrame' import { PlayerFrameOverlay } from './PlayerFrameOverlay' -import { playerSettingsLogic } from './playerSettingsLogic' import { PlayerSidebar } from './PlayerSidebar' -import { sessionRecordingDataLogic } from './sessionRecordingDataLogic' import { SessionRecordingNextConfirmation } from './SessionRecordingNextConfirmation' +import { PlayerController } from './controller/PlayerController' +import { PlayerMeta } from './player-meta/PlayerMeta' +import { playerSettingsLogic } from './playerSettingsLogic' +import { sessionRecordingDataLogic } from './sessionRecordingDataLogic' import { ONE_FRAME_MS, PLAYBACK_SPEEDS, - sessionRecordingPlayerLogic, SessionRecordingPlayerLogicProps, SessionRecordingPlayerMode, + sessionRecordingPlayerLogic, } from './sessionRecordingPlayerLogic' import { SessionRecordingPlayerExplorer } from './view-explorer/SessionRecordingPlayerExplorer' diff --git a/frontend/src/scenes/session-recordings/player/commenting/CommentOnRecordingButton.tsx b/frontend/src/scenes/session-recordings/player/commenting/CommentOnRecordingButton.tsx index 471d3e0af4..708413ddc8 100644 --- a/frontend/src/scenes/session-recordings/player/commenting/CommentOnRecordingButton.tsx +++ b/frontend/src/scenes/session-recordings/player/commenting/CommentOnRecordingButton.tsx @@ -1,13 +1,16 @@ import { useActions, useValues } from 'kea' -import { sessionRecordingPlayerLogic } from 'scenes/session-recordings/player/sessionRecordingPlayerLogic' -import { playerCommentOverlayLogic } from 'scenes/session-recordings/player/commenting/playerFrameCommentOverlayLogic' -import { LemonButton } from 'lib/lemon-ui/LemonButton' -import { KeyboardShortcut } from '~/layout/navigation-3000/components/KeyboardShortcut' -import { IconEmoji, IconComment } from '@posthog/icons' -import { emojiUsageLogic } from 'lib/lemon-ui/LemonTextArea/emojiUsageLogic' -import { EmojiPickerPopover } from 'lib/components/EmojiPicker/EmojiPickerPopover' import { useCallback, useState } from 'react' + +import { IconComment, IconEmoji } from '@posthog/icons' + +import { EmojiPickerPopover } from 'lib/components/EmojiPicker/EmojiPickerPopover' +import { LemonButton } from 'lib/lemon-ui/LemonButton' +import { emojiUsageLogic } from 'lib/lemon-ui/LemonTextArea/emojiUsageLogic' import { Spinner } from 'lib/lemon-ui/Spinner' +import { playerCommentOverlayLogic } from 'scenes/session-recordings/player/commenting/playerFrameCommentOverlayLogic' +import { sessionRecordingPlayerLogic } from 'scenes/session-recordings/player/sessionRecordingPlayerLogic' + +import { KeyboardShortcut } from '~/layout/navigation-3000/components/KeyboardShortcut' export function EmojiCommentRow({ onSelectEmoji }: { onSelectEmoji?: () => void }): JSX.Element { const { diff --git a/frontend/src/scenes/session-recordings/player/commenting/PlayerFrameCommentOverlay.tsx b/frontend/src/scenes/session-recordings/player/commenting/PlayerFrameCommentOverlay.tsx index 1e61bba9f2..b47af6d482 100644 --- a/frontend/src/scenes/session-recordings/player/commenting/PlayerFrameCommentOverlay.tsx +++ b/frontend/src/scenes/session-recordings/player/commenting/PlayerFrameCommentOverlay.tsx @@ -1,6 +1,8 @@ -import { LemonButton, LemonInput, LemonTextAreaMarkdown } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' + +import { LemonButton, LemonInput, LemonTextAreaMarkdown } from '@posthog/lemon-ui' + import { LemonField } from 'lib/lemon-ui/LemonField' import { sessionRecordingPlayerLogic } from 'scenes/session-recordings/player/sessionRecordingPlayerLogic' diff --git a/frontend/src/scenes/session-recordings/player/commenting/playerCommentModel.ts b/frontend/src/scenes/session-recordings/player/commenting/playerCommentModel.ts index 76a4feee73..6fc7939f98 100644 --- a/frontend/src/scenes/session-recordings/player/commenting/playerCommentModel.ts +++ b/frontend/src/scenes/session-recordings/player/commenting/playerCommentModel.ts @@ -1,4 +1,5 @@ import { actions, kea, path } from 'kea' + import { RecordingCommentForm } from 'scenes/session-recordings/player/commenting/playerFrameCommentOverlayLogic' import type { playerCommentModelType } from './playerCommentModelType' diff --git a/frontend/src/scenes/session-recordings/player/commenting/playerFrameCommentOverlayLogic.ts b/frontend/src/scenes/session-recordings/player/commenting/playerFrameCommentOverlayLogic.ts index bce75f7e86..312c159926 100644 --- a/frontend/src/scenes/session-recordings/player/commenting/playerFrameCommentOverlayLogic.ts +++ b/frontend/src/scenes/session-recordings/player/commenting/playerFrameCommentOverlayLogic.ts @@ -1,17 +1,18 @@ import { actions, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { forms } from 'kea-forms' import { subscriptions } from 'kea-subscriptions' + import api from 'lib/api' import { Dayjs, dayjs } from 'lib/dayjs' +import { lemonToast } from 'lib/lemon-ui/LemonToast' import { colonDelimitedDuration } from 'lib/utils' +import { playerCommentModel } from 'scenes/session-recordings/player/commenting/playerCommentModel' +import { isSingleEmoji } from 'scenes/session-recordings/utils' import { CommentType } from '~/types' +import { SessionRecordingPlayerLogicProps, sessionRecordingPlayerLogic } from '../sessionRecordingPlayerLogic' import type { playerCommentOverlayLogicType } from './playerFrameCommentOverlayLogicType' -import { sessionRecordingPlayerLogic, SessionRecordingPlayerLogicProps } from '../sessionRecordingPlayerLogic' -import { lemonToast } from 'lib/lemon-ui/LemonToast' -import { isSingleEmoji } from 'scenes/session-recordings/utils' -import { playerCommentModel } from 'scenes/session-recordings/player/commenting/playerCommentModel' export interface RecordingCommentForm { // formatted time in recording, e.g. 00:00:00, 00:00:01, 00:00:02, etc. diff --git a/frontend/src/scenes/session-recordings/player/controller/PlayerController.tsx b/frontend/src/scenes/session-recordings/player/controller/PlayerController.tsx index f074e9b4dc..6d7ae8640b 100644 --- a/frontend/src/scenes/session-recordings/player/controller/PlayerController.tsx +++ b/frontend/src/scenes/session-recordings/player/controller/PlayerController.tsx @@ -1,12 +1,16 @@ -import { IconPause, IconPlay, IconRewindPlay, IconVideoCamera } from '@posthog/icons' import { useActions, useValues } from 'kea' + +import { IconPause, IconPlay, IconRewindPlay, IconVideoCamera } from '@posthog/icons' + import { useResizeBreakpoints } from 'lib/hooks/useResizeObserver' -import { IconFullScreen } from 'lib/lemon-ui/icons' import { LemonButton } from 'lib/lemon-ui/LemonButton' +import { LemonTag } from 'lib/lemon-ui/LemonTag' +import { IconFullScreen } from 'lib/lemon-ui/icons' import { PlayerUpNext } from 'scenes/session-recordings/player/PlayerUpNext' +import { CommentOnRecordingButton } from 'scenes/session-recordings/player/commenting/CommentOnRecordingButton' import { - sessionRecordingPlayerLogic, SessionRecordingPlayerMode, + sessionRecordingPlayerLogic, } from 'scenes/session-recordings/player/sessionRecordingPlayerLogic' import { KeyboardShortcut } from '~/layout/navigation-3000/components/KeyboardShortcut' @@ -16,9 +20,6 @@ import { playerSettingsLogic } from '../playerSettingsLogic' import { SeekSkip, Timestamp } from './PlayerControllerTime' import { Seekbar } from './Seekbar' -import { CommentOnRecordingButton } from 'scenes/session-recordings/player/commenting/CommentOnRecordingButton' -import { LemonTag } from 'lib/lemon-ui/LemonTag' - function PlayPauseButton(): JSX.Element { const { playingState, endReached } = useValues(sessionRecordingPlayerLogic) const { togglePlayPause } = useActions(sessionRecordingPlayerLogic) diff --git a/frontend/src/scenes/session-recordings/player/controller/PlayerControllerTime.tsx b/frontend/src/scenes/session-recordings/player/controller/PlayerControllerTime.tsx index e0b377bf54..03f4b27af5 100644 --- a/frontend/src/scenes/session-recordings/player/controller/PlayerControllerTime.tsx +++ b/frontend/src/scenes/session-recordings/player/controller/PlayerControllerTime.tsx @@ -1,6 +1,8 @@ -import { LemonButton, LemonButtonProps, Tooltip } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' + +import { LemonButton, LemonButtonProps, Tooltip } from '@posthog/lemon-ui' + import { useKeyHeld } from 'lib/hooks/useKeyHeld' import { IconSkipBackward } from 'lib/lemon-ui/icons' import { capitalizeFirstLetter, colonDelimitedDuration } from 'lib/utils' @@ -10,7 +12,7 @@ import { ONE_FRAME_MS, sessionRecordingPlayerLogic } from 'scenes/session-record import { KeyboardShortcut } from '~/layout/navigation-3000/components/KeyboardShortcut' import { HotKeyOrModifier } from '~/types' -import { playerSettingsLogic, TimestampFormat } from '../playerSettingsLogic' +import { TimestampFormat, playerSettingsLogic } from '../playerSettingsLogic' import { seekbarLogic } from './seekbarLogic' function RelativeTimestampLabel({ size }: { size: 'small' | 'normal' }): JSX.Element { diff --git a/frontend/src/scenes/session-recordings/player/controller/PlayerSeekbarPreview.tsx b/frontend/src/scenes/session-recordings/player/controller/PlayerSeekbarPreview.tsx index 41542b49ac..f5a0a577b6 100644 --- a/frontend/src/scenes/session-recordings/player/controller/PlayerSeekbarPreview.tsx +++ b/frontend/src/scenes/session-recordings/player/controller/PlayerSeekbarPreview.tsx @@ -1,16 +1,17 @@ import { BindLogic, useActions, useValues } from 'kea' +import { MutableRefObject, memo, useEffect, useRef, useState } from 'react' +import { useDebouncedCallback } from 'use-debounce' + import { Dayjs } from 'lib/dayjs' import useIsHovering from 'lib/hooks/useIsHovering' import { colonDelimitedDuration } from 'lib/utils' -import { memo, MutableRefObject, useEffect, useRef, useState } from 'react' -import { useDebouncedCallback } from 'use-debounce' import { PlayerFrame } from '../PlayerFrame' import { TimestampFormat } from '../playerSettingsLogic' import { - sessionRecordingPlayerLogic, SessionRecordingPlayerLogicProps, SessionRecordingPlayerMode, + sessionRecordingPlayerLogic, } from '../sessionRecordingPlayerLogic' const TWENTY_MINUTES_IN_MS = 20 * 60 * 1000 diff --git a/frontend/src/scenes/session-recordings/player/controller/PlayerSeekbarTicks.tsx b/frontend/src/scenes/session-recordings/player/controller/PlayerSeekbarTicks.tsx index 12651b393a..837ea39500 100644 --- a/frontend/src/scenes/session-recordings/player/controller/PlayerSeekbarTicks.tsx +++ b/frontend/src/scenes/session-recordings/player/controller/PlayerSeekbarTicks.tsx @@ -1,21 +1,23 @@ import clsx from 'clsx' +import React, { MutableRefObject, memo } from 'react' + +import { IconComment } from '@posthog/icons' + +import { TextContent } from 'lib/components/Cards/TextCard/TextCard' import { PropertyKeyInfo } from 'lib/components/PropertyKeyInfo' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { ProfilePicture } from 'lib/lemon-ui/ProfilePicture' import { Tooltip } from 'lib/lemon-ui/Tooltip' import { autoCaptureEventToDescription } from 'lib/utils' -import React, { memo, MutableRefObject } from 'react' import { InspectorListItem, InspectorListItemComment, InspectorListItemEvent, InspectorListItemNotebookComment, } from 'scenes/session-recordings/player/inspector/playerInspectorLogic' +import { isSingleEmoji } from 'scenes/session-recordings/utils' import { UserActivity } from './UserActivity' -import { isSingleEmoji } from 'scenes/session-recordings/utils' -import { TextContent } from 'lib/components/Cards/TextCard/TextCard' -import { IconComment } from '@posthog/icons' function isEventItem(x: InspectorListItem): x is InspectorListItemEvent { return 'data' in x && !!x.data && 'event' in x.data diff --git a/frontend/src/scenes/session-recordings/player/controller/UserActivity.tsx b/frontend/src/scenes/session-recordings/player/controller/UserActivity.tsx index e5f187447a..cd00ecc098 100644 --- a/frontend/src/scenes/session-recordings/player/controller/UserActivity.tsx +++ b/frontend/src/scenes/session-recordings/player/controller/UserActivity.tsx @@ -1,8 +1,9 @@ import useSize from '@react-hook/size' import { useValues } from 'kea' -import { cn } from 'lib/utils/css-classes' import { MutableRefObject, useMemo, useRef } from 'react' +import { cn } from 'lib/utils/css-classes' + import useIsHovering from '~/lib/hooks/useIsHovering' import { sessionRecordingPlayerLogic } from '../sessionRecordingPlayerLogic' diff --git a/frontend/src/scenes/session-recordings/player/controller/seekbarLogic.ts b/frontend/src/scenes/session-recordings/player/controller/seekbarLogic.ts index a5c337c8fc..4400e42e65 100644 --- a/frontend/src/scenes/session-recordings/player/controller/seekbarLogic.ts +++ b/frontend/src/scenes/session-recordings/player/controller/seekbarLogic.ts @@ -1,12 +1,13 @@ import { actions, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' -import { clamp } from 'lib/utils' import { MutableRefObject } from 'react' + +import { clamp } from 'lib/utils' import { - sessionRecordingPlayerLogic, SessionRecordingPlayerLogicProps, + sessionRecordingPlayerLogic, } from 'scenes/session-recordings/player/sessionRecordingPlayerLogic' -import { getXPos, InteractEvent, ReactInteractEvent, THUMB_OFFSET, THUMB_SIZE } from '../utils/playerUtils' +import { InteractEvent, ReactInteractEvent, THUMB_OFFSET, THUMB_SIZE, getXPos } from '../utils/playerUtils' import type { seekbarLogicType } from './seekbarLogicType' export const seekbarLogic = kea([ diff --git a/frontend/src/scenes/session-recordings/player/inspector/PlayerInspector.stories.tsx b/frontend/src/scenes/session-recordings/player/inspector/PlayerInspector.stories.tsx index 3eb1bbfe81..cb4d0f39fb 100644 --- a/frontend/src/scenes/session-recordings/player/inspector/PlayerInspector.stories.tsx +++ b/frontend/src/scenes/session-recordings/player/inspector/PlayerInspector.stories.tsx @@ -1,6 +1,7 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' import { BindLogic, useActions, useValues } from 'kea' import { useEffect } from 'react' + import { largeRecordingJSONL } from 'scenes/session-recordings/__mocks__/large_recording_blob_one' import largeRecordingEventsJson from 'scenes/session-recordings/__mocks__/large_recording_load_events_one.json' import largeRecordingMetaJson from 'scenes/session-recordings/__mocks__/large_recording_meta.json' diff --git a/frontend/src/scenes/session-recordings/player/inspector/PlayerInspectorBottomSettings.tsx b/frontend/src/scenes/session-recordings/player/inspector/PlayerInspectorBottomSettings.tsx index 9fa92d35ad..33372409b6 100644 --- a/frontend/src/scenes/session-recordings/player/inspector/PlayerInspectorBottomSettings.tsx +++ b/frontend/src/scenes/session-recordings/player/inspector/PlayerInspectorBottomSettings.tsx @@ -1,7 +1,9 @@ import './PlayerInspectorList.scss' -import { BaseIcon, IconCheck } from '@posthog/icons' import { useActions, useValues } from 'kea' + +import { BaseIcon, IconCheck } from '@posthog/icons' + import { userPreferencesLogic } from 'lib/logic/userPreferencesLogic' import { SettingsBar, SettingsMenu, SettingsToggle } from 'scenes/session-recordings/components/PanelSettings' import { miniFiltersLogic } from 'scenes/session-recordings/player/inspector/miniFiltersLogic' diff --git a/frontend/src/scenes/session-recordings/player/inspector/PlayerInspectorControls.tsx b/frontend/src/scenes/session-recordings/player/inspector/PlayerInspectorControls.tsx index 861a62c7c7..f8d243d8bc 100644 --- a/frontend/src/scenes/session-recordings/player/inspector/PlayerInspectorControls.tsx +++ b/frontend/src/scenes/session-recordings/player/inspector/PlayerInspectorControls.tsx @@ -1,23 +1,25 @@ +import { useActions, useValues } from 'kea' +import { useEffect, useState } from 'react' + import { BaseIcon, IconCheck, + IconComment, IconDashboard, IconGear, IconInfo, IconSearch, IconStethoscope, IconTerminal, - IconComment, } from '@posthog/icons' import { LemonButton, LemonInput, SideAction, Tooltip } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { FEATURE_FLAGS } from 'lib/constants' import { IconChevronRight, IconUnverifiedEvent } from 'lib/lemon-ui/icons' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { capitalizeFirstLetter } from 'lib/utils' -import { useEffect, useState } from 'react' import { SettingsBar, SettingsButton, SettingsToggle } from 'scenes/session-recordings/components/PanelSettings' -import { miniFiltersLogic, SharedListMiniFilter } from 'scenes/session-recordings/player/inspector/miniFiltersLogic' +import { SharedListMiniFilter, miniFiltersLogic } from 'scenes/session-recordings/player/inspector/miniFiltersLogic' import { FilterableInspectorListItemTypes, InspectorListItem, @@ -27,7 +29,7 @@ import { teamLogic } from 'scenes/teamLogic' import { sidePanelSettingsLogic } from '~/layout/navigation-3000/sidepanel/panels/sidePanelSettingsLogic' -import { sessionRecordingPlayerLogic, SessionRecordingPlayerMode } from '../sessionRecordingPlayerLogic' +import { SessionRecordingPlayerMode, sessionRecordingPlayerLogic } from '../sessionRecordingPlayerLogic' import { InspectorSearchInfo } from './components/InspectorSearchInfo' function sideActionForType({ diff --git a/frontend/src/scenes/session-recordings/player/inspector/PlayerInspectorList.tsx b/frontend/src/scenes/session-recordings/player/inspector/PlayerInspectorList.tsx index 4b133ba826..b2db76bae8 100644 --- a/frontend/src/scenes/session-recordings/player/inspector/PlayerInspectorList.tsx +++ b/frontend/src/scenes/session-recordings/player/inspector/PlayerInspectorList.tsx @@ -2,12 +2,13 @@ import './PlayerInspectorList.scss' import { range } from 'd3' import { useActions, useValues } from 'kea' -import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' import { useEffect, useMemo, useRef } from 'react' import AutoSizer from 'react-virtualized/dist/es/AutoSizer' import { CellMeasurer, CellMeasurerCache } from 'react-virtualized/dist/es/CellMeasurer' import { List, ListRowRenderer } from 'react-virtualized/dist/es/List' +import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' + import { sessionRecordingPlayerLogic } from '../sessionRecordingPlayerLogic' import { PlayerInspectorListItem } from './components/PlayerInspectorListItem' import { playerInspectorLogic } from './playerInspectorLogic' diff --git a/frontend/src/scenes/session-recordings/player/inspector/components/AIEventItems.tsx b/frontend/src/scenes/session-recordings/player/inspector/components/AIEventItems.tsx index f08861c307..1f56a46e8e 100644 --- a/frontend/src/scenes/session-recordings/player/inspector/components/AIEventItems.tsx +++ b/frontend/src/scenes/session-recordings/player/inspector/components/AIEventItems.tsx @@ -2,6 +2,7 @@ import { JSONViewer } from 'lib/components/JSONViewer' import { IconExclamation } from 'lib/lemon-ui/icons' import { isObject } from 'lib/utils' import { cn } from 'lib/utils/css-classes' + import { ConversationMessagesDisplay } from 'products/llm_observability/frontend/ConversationDisplay/ConversationMessagesDisplay' import { LLMInputOutput } from 'products/llm_observability/frontend/LLMInputOutput' import { normalizeMessages } from 'products/llm_observability/frontend/utils' diff --git a/frontend/src/scenes/session-recordings/player/inspector/components/ItemAnyComment.tsx b/frontend/src/scenes/session-recordings/player/inspector/components/ItemAnyComment.tsx index 78d4315155..86f73f1edf 100644 --- a/frontend/src/scenes/session-recordings/player/inspector/components/ItemAnyComment.tsx +++ b/frontend/src/scenes/session-recordings/player/inspector/components/ItemAnyComment.tsx @@ -1,18 +1,20 @@ -import { IconPencil, IconTrash } from '@posthog/icons' import { useActions, useValues } from 'kea' + +import { IconPencil, IconTrash } from '@posthog/icons' + +import { TextContent } from 'lib/components/Cards/TextCard/TextCard' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { ProfilePicture } from 'lib/lemon-ui/ProfilePicture' import { Tooltip } from 'lib/lemon-ui/Tooltip' import { notebookPanelLogic } from 'scenes/notebooks/NotebookPanel/notebookPanelLogic' +import { playerCommentModel } from 'scenes/session-recordings/player/commenting/playerCommentModel' +import { RecordingCommentForm } from 'scenes/session-recordings/player/commenting/playerFrameCommentOverlayLogic' import { InspectorListItemComment, InspectorListItemNotebookComment, } from 'scenes/session-recordings/player/inspector/playerInspectorLogic' -import { playerCommentModel } from 'scenes/session-recordings/player/commenting/playerCommentModel' -import { RecordingCommentForm } from 'scenes/session-recordings/player/commenting/playerFrameCommentOverlayLogic' -import { TextContent } from 'lib/components/Cards/TextCard/TextCard' -import { sessionRecordingPlayerLogic } from 'scenes/session-recordings/player/sessionRecordingPlayerLogic' import { sessionRecordingDataLogic } from 'scenes/session-recordings/player/sessionRecordingDataLogic' +import { sessionRecordingPlayerLogic } from 'scenes/session-recordings/player/sessionRecordingPlayerLogic' export interface ItemCommentProps { item: InspectorListItemComment | InspectorListItemNotebookComment diff --git a/frontend/src/scenes/session-recordings/player/inspector/components/ItemComment.stories.tsx b/frontend/src/scenes/session-recordings/player/inspector/components/ItemComment.stories.tsx index ff99b4b7c7..7bee2f7166 100644 --- a/frontend/src/scenes/session-recordings/player/inspector/components/ItemComment.stories.tsx +++ b/frontend/src/scenes/session-recordings/player/inspector/components/ItemComment.stories.tsx @@ -1,4 +1,6 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' +import { BindLogic } from 'kea' + import { now } from 'lib/dayjs' import { LemonDivider } from 'lib/lemon-ui/LemonDivider' import { @@ -11,11 +13,10 @@ import { InspectorListItemNotebookComment, RecordingComment, } from 'scenes/session-recordings/player/inspector/playerInspectorLogic' +import { sessionRecordingPlayerLogic } from 'scenes/session-recordings/player/sessionRecordingPlayerLogic' import { mswDecorator } from '~/mocks/browser' import { CommentType } from '~/types' -import { BindLogic } from 'kea' -import { sessionRecordingPlayerLogic } from 'scenes/session-recordings/player/sessionRecordingPlayerLogic' type Story = StoryObj const meta: Meta = { diff --git a/frontend/src/scenes/session-recordings/player/inspector/components/ItemConsoleLog.tsx b/frontend/src/scenes/session-recordings/player/inspector/components/ItemConsoleLog.tsx index 3625f51da6..9981887300 100644 --- a/frontend/src/scenes/session-recordings/player/inspector/components/ItemConsoleLog.tsx +++ b/frontend/src/scenes/session-recordings/player/inspector/components/ItemConsoleLog.tsx @@ -1,5 +1,7 @@ -import { LemonDivider } from '@posthog/lemon-ui' import clsx from 'clsx' + +import { LemonDivider } from '@posthog/lemon-ui' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { LemonLabel } from 'lib/lemon-ui/LemonLabel/LemonLabel' diff --git a/frontend/src/scenes/session-recordings/player/inspector/components/ItemDoctor.tsx b/frontend/src/scenes/session-recordings/player/inspector/components/ItemDoctor.tsx index 4af5bfb372..fea777364d 100644 --- a/frontend/src/scenes/session-recordings/player/inspector/components/ItemDoctor.tsx +++ b/frontend/src/scenes/session-recordings/player/inspector/components/ItemDoctor.tsx @@ -1,7 +1,7 @@ +import { CopyToClipboardInline } from 'lib/components/CopyToClipboard' import { SimpleKeyValueList } from 'lib/components/SimpleKeyValueList' import { InspectorListItemDoctor } from '../playerInspectorLogic' -import { CopyToClipboardInline } from 'lib/components/CopyToClipboard' export interface ItemDoctorProps { item: InspectorListItemDoctor diff --git a/frontend/src/scenes/session-recordings/player/inspector/components/ItemEvent.stories.tsx b/frontend/src/scenes/session-recordings/player/inspector/components/ItemEvent.stories.tsx index 18794e4e1a..d1ecce324b 100644 --- a/frontend/src/scenes/session-recordings/player/inspector/components/ItemEvent.stories.tsx +++ b/frontend/src/scenes/session-recordings/player/inspector/components/ItemEvent.stories.tsx @@ -1,4 +1,5 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' + import { now } from 'lib/dayjs' import { LemonDivider } from 'lib/lemon-ui/LemonDivider' import { diff --git a/frontend/src/scenes/session-recordings/player/inspector/components/ItemEvent.tsx b/frontend/src/scenes/session-recordings/player/inspector/components/ItemEvent.tsx index 0f53acc590..ac2b234f19 100644 --- a/frontend/src/scenes/session-recordings/player/inspector/components/ItemEvent.tsx +++ b/frontend/src/scenes/session-recordings/player/inspector/components/ItemEvent.tsx @@ -2,11 +2,16 @@ import './ImagePreview.scss' import { IconShare, IconWarning } from '@posthog/icons' import { LemonButton, LemonDivider, LemonMenu, Link } from '@posthog/lemon-ui' + +import { ErrorDisplay, idFrom } from 'lib/components/Errors/ErrorDisplay' +import { getExceptionAttributes } from 'lib/components/Errors/utils' +import { EventPropertyTabs } from 'lib/components/EventPropertyTabs/EventPropertyTabs' import { PropertyKeyInfo } from 'lib/components/PropertyKeyInfo' +import { SimpleKeyValueList } from 'lib/components/SimpleKeyValueList' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { TitledSnack } from 'lib/components/TitledSnack' -import { IconLink, IconOpenInNew } from 'lib/lemon-ui/icons' import { Spinner } from 'lib/lemon-ui/Spinner' +import { IconLink, IconOpenInNew } from 'lib/lemon-ui/icons' import { autoCaptureEventToDescription, capitalizeFirstLetter, isString } from 'lib/utils' import { AutocapturePreviewImage } from 'lib/utils/autocapture-previews' import { copyToClipboard } from 'lib/utils/copyToClipboard' @@ -15,10 +20,6 @@ import { urls } from 'scenes/urls' import { InspectorListItemEvent } from '../playerInspectorLogic' import { AIEventExpanded, AIEventSummary } from './AIEventItems' -import { getExceptionAttributes } from 'lib/components/Errors/utils' -import { EventPropertyTabs } from 'lib/components/EventPropertyTabs/EventPropertyTabs' -import { SimpleKeyValueList } from 'lib/components/SimpleKeyValueList' -import { ErrorDisplay, idFrom } from 'lib/components/Errors/ErrorDisplay' export interface ItemEventProps { item: InspectorListItemEvent diff --git a/frontend/src/scenes/session-recordings/player/inspector/components/ItemInactivity.tsx b/frontend/src/scenes/session-recordings/player/inspector/components/ItemInactivity.tsx index dc86de7549..c22ae5574f 100644 --- a/frontend/src/scenes/session-recordings/player/inspector/components/ItemInactivity.tsx +++ b/frontend/src/scenes/session-recordings/player/inspector/components/ItemInactivity.tsx @@ -1,4 +1,5 @@ import { IconClock } from '@posthog/icons' + import { LemonDivider } from 'lib/lemon-ui/LemonDivider' import { humanFriendlyDuration } from 'lib/utils' import { InspectorListItemInactivity } from 'scenes/session-recordings/player/inspector/playerInspectorLogic' diff --git a/frontend/src/scenes/session-recordings/player/inspector/components/ItemSummary.tsx b/frontend/src/scenes/session-recordings/player/inspector/components/ItemSummary.tsx index 696a17ddbc..9df4de305f 100644 --- a/frontend/src/scenes/session-recordings/player/inspector/components/ItemSummary.tsx +++ b/frontend/src/scenes/session-recordings/player/inspector/components/ItemSummary.tsx @@ -1,6 +1,8 @@ +import clsx from 'clsx' + import { IconCursor, IconKeyboard, IconWarning } from '@posthog/icons' import { Tooltip } from '@posthog/lemon-ui' -import clsx from 'clsx' + import { pluralize } from 'lib/utils' import { InspectorListItemSummary } from '../playerInspectorLogic' diff --git a/frontend/src/scenes/session-recordings/player/inspector/components/NavigationItem.stories.tsx b/frontend/src/scenes/session-recordings/player/inspector/components/NavigationItem.stories.tsx index b7d5e67a8e..d5383bc17c 100644 --- a/frontend/src/scenes/session-recordings/player/inspector/components/NavigationItem.stories.tsx +++ b/frontend/src/scenes/session-recordings/player/inspector/components/NavigationItem.stories.tsx @@ -1,4 +1,5 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' + import { NavigationItem, NavigationItemProps, diff --git a/frontend/src/scenes/session-recordings/player/inspector/components/PerformanceEventLabel.tsx b/frontend/src/scenes/session-recordings/player/inspector/components/PerformanceEventLabel.tsx index 946e81af02..e41babfd0b 100644 --- a/frontend/src/scenes/session-recordings/player/inspector/components/PerformanceEventLabel.tsx +++ b/frontend/src/scenes/session-recordings/player/inspector/components/PerformanceEventLabel.tsx @@ -1,4 +1,5 @@ import clsx from 'clsx' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' export function PerformanceEventLabel({ diff --git a/frontend/src/scenes/session-recordings/player/inspector/components/PlayerInspectorListItem.tsx b/frontend/src/scenes/session-recordings/player/inspector/components/PlayerInspectorListItem.tsx index d42a2c6145..f334785467 100644 --- a/frontend/src/scenes/session-recordings/player/inspector/components/PlayerInspectorListItem.tsx +++ b/frontend/src/scenes/session-recordings/player/inspector/components/PlayerInspectorListItem.tsx @@ -1,3 +1,9 @@ +import clsx from 'clsx' +import { useActions, useValues } from 'kea' +import { FunctionComponent, isValidElement, useEffect, useRef } from 'react' +import { useDebouncedCallback } from 'use-debounce' +import useResizeObserver from 'use-resize-observer' + import { BaseIcon, IconBolt, @@ -14,13 +20,11 @@ import { IconTerminal, } from '@posthog/icons' import { LemonButton, LemonDivider } from '@posthog/lemon-ui' -import clsx from 'clsx' -import { useActions, useValues } from 'kea' + import { Dayjs } from 'lib/dayjs' import useIsHovering from 'lib/hooks/useIsHovering' import { Tooltip } from 'lib/lemon-ui/Tooltip' import { ceilMsToClosestSecond } from 'lib/utils' -import { FunctionComponent, isValidElement, useEffect, useRef } from 'react' import { ItemTimeDisplay } from 'scenes/session-recordings/components/ItemTimeDisplay' import { ItemAnyComment, @@ -28,8 +32,6 @@ import { } from 'scenes/session-recordings/player/inspector/components/ItemAnyComment' import { ItemInactivity } from 'scenes/session-recordings/player/inspector/components/ItemInactivity' import { ItemSummary } from 'scenes/session-recordings/player/inspector/components/ItemSummary' -import { useDebouncedCallback } from 'use-debounce' -import useResizeObserver from 'use-resize-observer' import { CORE_FILTER_DEFINITIONS_BY_GROUP } from '~/taxonomy/taxonomy' diff --git a/frontend/src/scenes/session-recordings/player/inspector/components/Timing/NetworkRequestTiming.stories.tsx b/frontend/src/scenes/session-recordings/player/inspector/components/Timing/NetworkRequestTiming.stories.tsx index e14febc14f..1a803df5c3 100644 --- a/frontend/src/scenes/session-recordings/player/inspector/components/Timing/NetworkRequestTiming.stories.tsx +++ b/frontend/src/scenes/session-recordings/player/inspector/components/Timing/NetworkRequestTiming.stories.tsx @@ -1,4 +1,5 @@ import { Meta } from '@storybook/react' + import { NetworkRequestTiming } from 'scenes/session-recordings/player/inspector/components/Timing/NetworkRequestTiming' import { mswDecorator } from '~/mocks/browser' diff --git a/frontend/src/scenes/session-recordings/player/inspector/components/Timing/NetworkRequestTiming.tsx b/frontend/src/scenes/session-recordings/player/inspector/components/Timing/NetworkRequestTiming.tsx index 2d508a9106..0e735e81bd 100644 --- a/frontend/src/scenes/session-recordings/player/inspector/components/Timing/NetworkRequestTiming.tsx +++ b/frontend/src/scenes/session-recordings/player/inspector/components/Timing/NetworkRequestTiming.tsx @@ -1,8 +1,9 @@ +import { useState } from 'react' + import { SimpleKeyValueList } from 'lib/components/SimpleKeyValueList' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonDivider } from 'lib/lemon-ui/LemonDivider' -import { useState } from 'react' -import { convertForTimelineView, TimeLineView } from 'scenes/session-recordings/apm/waterfall/TimeLineView' +import { TimeLineView, convertForTimelineView } from 'scenes/session-recordings/apm/waterfall/TimeLineView' import { PerformanceEvent } from '~/types' diff --git a/frontend/src/scenes/session-recordings/player/inspector/components/Timing/calculatePerformanceParts.test.ts b/frontend/src/scenes/session-recordings/player/inspector/components/Timing/calculatePerformanceParts.test.ts index c4d40ac23e..acd150198c 100644 --- a/frontend/src/scenes/session-recordings/player/inspector/components/Timing/calculatePerformanceParts.test.ts +++ b/frontend/src/scenes/session-recordings/player/inspector/components/Timing/calculatePerformanceParts.test.ts @@ -1,4 +1,5 @@ import { InitiatorType } from 'posthog-js' + import { mapRRWebNetworkRequest } from 'scenes/session-recordings/apm/performance-event-utils' import { calculatePerformanceParts } from 'scenes/session-recordings/apm/waterfall/TimingBar' diff --git a/frontend/src/scenes/session-recordings/player/inspector/miniFiltersLogic.test.ts b/frontend/src/scenes/session-recordings/player/inspector/miniFiltersLogic.test.ts index 2d370268ef..e4c3b054ac 100644 --- a/frontend/src/scenes/session-recordings/player/inspector/miniFiltersLogic.test.ts +++ b/frontend/src/scenes/session-recordings/player/inspector/miniFiltersLogic.test.ts @@ -1,4 +1,5 @@ import { expectLogic } from 'kea-test-utils' + import { miniFiltersLogic } from 'scenes/session-recordings/player/inspector/miniFiltersLogic' import { sessionRecordingEventUsageLogic } from 'scenes/session-recordings/sessionRecordingEventUsageLogic' diff --git a/frontend/src/scenes/session-recordings/player/inspector/miniFiltersLogic.ts b/frontend/src/scenes/session-recordings/player/inspector/miniFiltersLogic.ts index a4f47ea51a..e545286329 100644 --- a/frontend/src/scenes/session-recordings/player/inspector/miniFiltersLogic.ts +++ b/frontend/src/scenes/session-recordings/player/inspector/miniFiltersLogic.ts @@ -1,4 +1,5 @@ import { actions, connect, events, kea, listeners, path, reducers, selectors } from 'kea' + import { sessionRecordingEventUsageLogic } from 'scenes/session-recordings/sessionRecordingEventUsageLogic' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/session-recordings/player/inspector/playerInspectorLogic.test.ts b/frontend/src/scenes/session-recordings/player/inspector/playerInspectorLogic.test.ts index 9ae8fcbcb8..27f844213a 100644 --- a/frontend/src/scenes/session-recordings/player/inspector/playerInspectorLogic.test.ts +++ b/frontend/src/scenes/session-recordings/player/inspector/playerInspectorLogic.test.ts @@ -1,4 +1,5 @@ import { expectLogic } from 'kea-test-utils' + import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { playerInspectorLogic } from 'scenes/session-recordings/player/inspector/playerInspectorLogic' import { sessionRecordingDataLogic } from 'scenes/session-recordings/player/sessionRecordingDataLogic' diff --git a/frontend/src/scenes/session-recordings/player/inspector/playerInspectorLogic.ts b/frontend/src/scenes/session-recordings/player/inspector/playerInspectorLogic.ts index ce3a3f52b3..23aa412937 100644 --- a/frontend/src/scenes/session-recordings/player/inspector/playerInspectorLogic.ts +++ b/frontend/src/scenes/session-recordings/player/inspector/playerInspectorLogic.ts @@ -1,13 +1,15 @@ +import FuseClass from 'fuse.js' +import { actions, connect, events, kea, key, listeners, path, props, propsChanged, reducers, selectors } from 'kea' +import { loaders } from 'kea-loaders' + import { - customEvent, EventType as RRWebEventType, + customEvent, eventWithTime, fullSnapshotEvent, pluginEvent, } from '@posthog/rrweb-types' -import FuseClass from 'fuse.js' -import { actions, connect, events, kea, key, listeners, path, props, propsChanged, reducers, selectors } from 'kea' -import { loaders } from 'kea-loaders' + import api from 'lib/api' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { Dayjs, dayjs } from 'lib/dayjs' @@ -23,12 +25,12 @@ import { } from 'scenes/session-recordings/player/inspector/inspectorListFiltering' import { MiniFilterKey, - miniFiltersLogic, SharedListMiniFilter, + miniFiltersLogic, } from 'scenes/session-recordings/player/inspector/miniFiltersLogic' import { - convertUniversalFiltersToRecordingsQuery, MatchingEventsMatchType, + convertUniversalFiltersToRecordingsQuery, } from 'scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic' import { sessionRecordingEventUsageLogic } from 'scenes/session-recordings/sessionRecordingEventUsageLogic' @@ -38,13 +40,13 @@ import { CommentType, MatchedRecordingEvent, PerformanceEvent, + RRWebRecordingConsoleLogPayload, RecordingConsoleLogV2, RecordingEventType, - RRWebRecordingConsoleLogPayload, } from '~/types' import { sessionRecordingDataLogic } from '../sessionRecordingDataLogic' -import { sessionRecordingPlayerLogic, SessionRecordingPlayerLogicProps } from '../sessionRecordingPlayerLogic' +import { SessionRecordingPlayerLogicProps, sessionRecordingPlayerLogic } from '../sessionRecordingPlayerLogic' import type { playerInspectorLogicType } from './playerInspectorLogicType' const CONSOLE_LOG_PLUGIN_NAME = 'rrweb/console@1' diff --git a/frontend/src/scenes/session-recordings/player/modal/SessionPlayerModal.tsx b/frontend/src/scenes/session-recordings/player/modal/SessionPlayerModal.tsx index 28f97696c0..47491de672 100644 --- a/frontend/src/scenes/session-recordings/player/modal/SessionPlayerModal.tsx +++ b/frontend/src/scenes/session-recordings/player/modal/SessionPlayerModal.tsx @@ -1,9 +1,11 @@ -import { LemonModal } from '@posthog/lemon-ui' import { BindLogic, useActions, useValues } from 'kea' + +import { LemonModal } from '@posthog/lemon-ui' + import { SessionRecordingPlayer } from 'scenes/session-recordings/player/SessionRecordingPlayer' import { PlayerMeta } from '../player-meta/PlayerMeta' -import { sessionRecordingPlayerLogic, SessionRecordingPlayerLogicProps } from '../sessionRecordingPlayerLogic' +import { SessionRecordingPlayerLogicProps, sessionRecordingPlayerLogic } from '../sessionRecordingPlayerLogic' import { sessionPlayerModalLogic } from './sessionPlayerModalLogic' /** diff --git a/frontend/src/scenes/session-recordings/player/player-meta/PlayerInspectorButton.tsx b/frontend/src/scenes/session-recordings/player/player-meta/PlayerInspectorButton.tsx index baa6b6cca0..5ec7cedc16 100644 --- a/frontend/src/scenes/session-recordings/player/player-meta/PlayerInspectorButton.tsx +++ b/frontend/src/scenes/session-recordings/player/player-meta/PlayerInspectorButton.tsx @@ -1,4 +1,5 @@ import { useActions, useValues } from 'kea' + import { IconUnverifiedEvent } from 'lib/lemon-ui/icons' import { SettingsToggle } from 'scenes/session-recordings/components/PanelSettings' diff --git a/frontend/src/scenes/session-recordings/player/player-meta/PlayerMeta.tsx b/frontend/src/scenes/session-recordings/player/player-meta/PlayerMeta.tsx index a237a6e28c..edfeb4842e 100644 --- a/frontend/src/scenes/session-recordings/player/player-meta/PlayerMeta.tsx +++ b/frontend/src/scenes/session-recordings/player/player-meta/PlayerMeta.tsx @@ -1,8 +1,10 @@ import './PlayerMeta.scss' -import { LemonSelect, LemonSelectOption, Link } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' + +import { LemonSelect, LemonSelectOption, Link } from '@posthog/lemon-ui' + import { CopyToClipboardInline } from 'lib/components/CopyToClipboard' import { useResizeBreakpoints } from 'lib/hooks/useResizeObserver' import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' @@ -14,16 +16,16 @@ import { PlayerMetaBottomSettings } from 'scenes/session-recordings/player/playe import { PlayerMetaLinks } from 'scenes/session-recordings/player/player-meta/PlayerMetaLinks' import { playerSettingsLogic } from 'scenes/session-recordings/player/playerSettingsLogic' import { - sessionRecordingPlayerLogic, SessionRecordingPlayerMode, + sessionRecordingPlayerLogic, } from 'scenes/session-recordings/player/sessionRecordingPlayerLogic' import { urls } from 'scenes/urls' import { getCurrentExporterData } from '~/exporter/exporterViewLogic' import { Logo } from '~/toolbar/assets/Logo' -import { playerMetaLogic } from './playerMetaLogic' import { PlayerPersonMeta } from './PlayerPersonMeta' +import { playerMetaLogic } from './playerMetaLogic' export function parseUrl(lastUrl: unknown): { urlToUse: string | undefined; isValidUrl: boolean } { let urlToUse: string | undefined = typeof lastUrl === 'string' ? lastUrl : undefined diff --git a/frontend/src/scenes/session-recordings/player/player-meta/PlayerMetaBottomSettings.tsx b/frontend/src/scenes/session-recordings/player/player-meta/PlayerMetaBottomSettings.tsx index bf3277e7df..2af5b1c3d3 100644 --- a/frontend/src/scenes/session-recordings/player/player-meta/PlayerMetaBottomSettings.tsx +++ b/frontend/src/scenes/session-recordings/player/player-meta/PlayerMetaBottomSettings.tsx @@ -1,3 +1,5 @@ +import { useActions, useValues } from 'kea' + import { IconEllipsis, IconHourglass, @@ -6,11 +8,11 @@ import { IconSearch, IconTortoise, } from '@posthog/icons' -import { useActions, useValues } from 'kea' + import { FlaggedFeature } from 'lib/components/FlaggedFeature' import { FEATURE_FLAGS } from 'lib/constants' -import { IconHeatmap } from 'lib/lemon-ui/icons' import { LemonMenuItem } from 'lib/lemon-ui/LemonMenu' +import { IconHeatmap } from 'lib/lemon-ui/icons' import { humanFriendlyDuration } from 'lib/utils' import { SettingsBar, diff --git a/frontend/src/scenes/session-recordings/player/player-meta/PlayerMetaLinks.tsx b/frontend/src/scenes/session-recordings/player/player-meta/PlayerMetaLinks.tsx index 872c184c47..60d138ab26 100644 --- a/frontend/src/scenes/session-recordings/player/player-meta/PlayerMetaLinks.tsx +++ b/frontend/src/scenes/session-recordings/player/player-meta/PlayerMetaLinks.tsx @@ -1,20 +1,22 @@ -import { IconDownload, IconEllipsis, IconMinusSmall, IconNotebook, IconPlusSmall, IconTrash } from '@posthog/icons' -import { LemonButton, LemonButtonProps, LemonDialog, LemonMenu, LemonMenuItems } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { useMemo } from 'react' + +import { IconDownload, IconEllipsis, IconMinusSmall, IconNotebook, IconPlusSmall, IconTrash } from '@posthog/icons' +import { LemonButton, LemonButtonProps, LemonDialog, LemonMenu, LemonMenuItems } from '@posthog/lemon-ui' + import { useNotebookNode } from 'scenes/notebooks/Nodes/NotebookNodeContext' import { NotebookSelectButton } from 'scenes/notebooks/NotebookSelectButton/NotebookSelectButton' +import { NotebookNodeType } from 'scenes/notebooks/types' import { sessionPlayerModalLogic } from 'scenes/session-recordings/player/modal/sessionPlayerModalLogic' import { PlaylistPopoverButton } from 'scenes/session-recordings/player/playlist-popover/PlaylistPopover' import { - sessionRecordingPlayerLogic, SessionRecordingPlayerMode, + sessionRecordingPlayerLogic, } from 'scenes/session-recordings/player/sessionRecordingPlayerLogic' import { PlayerShareMenu } from 'scenes/session-recordings/player/share/PlayerShareMenu' import { personsModalLogic } from 'scenes/trends/persons-modal/personsModalLogic' import { PlayerMetaBreakpoints } from './PlayerMeta' -import { NotebookNodeType } from 'scenes/notebooks/types' function PinToPlaylistButton(): JSX.Element { const { logicProps } = useValues(sessionRecordingPlayerLogic) diff --git a/frontend/src/scenes/session-recordings/player/player-meta/PlayerPersonMeta.tsx b/frontend/src/scenes/session-recordings/player/player-meta/PlayerPersonMeta.tsx index 14875bfc5e..e6e99e9d64 100644 --- a/frontend/src/scenes/session-recordings/player/player-meta/PlayerPersonMeta.tsx +++ b/frontend/src/scenes/session-recordings/player/player-meta/PlayerPersonMeta.tsx @@ -1,6 +1,7 @@ import './PlayerMeta.scss' import { useActions, useValues } from 'kea' + import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' import { PersonIcon } from 'scenes/persons/PersonDisplay' import { playerMetaLogic } from 'scenes/session-recordings/player/player-meta/playerMetaLogic' diff --git a/frontend/src/scenes/session-recordings/player/player-meta/playerMetaLogic.test.ts b/frontend/src/scenes/session-recordings/player/player-meta/playerMetaLogic.test.ts index d931066469..101a48a218 100644 --- a/frontend/src/scenes/session-recordings/player/player-meta/playerMetaLogic.test.ts +++ b/frontend/src/scenes/session-recordings/player/player-meta/playerMetaLogic.test.ts @@ -1,4 +1,5 @@ import { expectLogic } from 'kea-test-utils' + import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { playerMetaLogic } from 'scenes/session-recordings/player/player-meta/playerMetaLogic' import { sessionRecordingDataLogic } from 'scenes/session-recordings/player/sessionRecordingDataLogic' diff --git a/frontend/src/scenes/session-recordings/player/player-meta/playerMetaLogic.tsx b/frontend/src/scenes/session-recordings/player/player-meta/playerMetaLogic.tsx index b58b4ab17e..56045ee8b8 100644 --- a/frontend/src/scenes/session-recordings/player/player-meta/playerMetaLogic.tsx +++ b/frontend/src/scenes/session-recordings/player/player-meta/playerMetaLogic.tsx @@ -1,20 +1,24 @@ -import { IconCursorClick, IconKeyboard, IconWarning } from '@posthog/icons' +import { aiSummaryMock } from './ai-summary.mock' + import { createParser } from 'eventsource-parser' import { actions, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' +import posthog from 'posthog-js' +import React from 'react' + +import { IconCursorClick, IconKeyboard, IconWarning } from '@posthog/icons' + import api from 'lib/api' import { PropertyFilterIcon } from 'lib/components/PropertyFilters/components/PropertyFilterIcon' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { lemonToast } from 'lib/lemon-ui/LemonToast' import { capitalizeFirstLetter, ceilMsToClosestSecond, humanFriendlyDuration, percentage } from 'lib/utils' import { COUNTRY_CODE_TO_LONG_NAME } from 'lib/utils/geography/country' -import posthog from 'posthog-js' -import React from 'react' import { OverviewItem } from 'scenes/session-recordings/components/OverviewGrid' import { TimestampFormat } from 'scenes/session-recordings/player/playerSettingsLogic' import { sessionRecordingDataLogic } from 'scenes/session-recordings/player/sessionRecordingDataLogic' import { - sessionRecordingPlayerLogic, SessionRecordingPlayerLogicProps, + sessionRecordingPlayerLogic, } from 'scenes/session-recordings/player/sessionRecordingPlayerLogic' import { getCoreFilterDefinition, getFirstFilterTypeFor } from '~/taxonomy/helpers' @@ -22,9 +26,9 @@ import { PersonType, PropertyFilterType, SessionRecordingType } from '~/types' import { SimpleTimeLabel } from '../../components/SimpleTimeLabel' import { sessionRecordingsListPropertiesLogic } from '../../playlist/sessionRecordingsListPropertiesLogic' -import { aiSummaryMock } from './ai-summary.mock' import type { playerMetaLogicType } from './playerMetaLogicType' import { SessionSummaryContent } from './types' + const recordingPropertyKeys = ['click_count', 'keypress_count', 'console_error_count'] as const const ALLOW_LISTED_PERSON_PROPERTIES = [ diff --git a/frontend/src/scenes/session-recordings/player/playerSettingsLogic.ts b/frontend/src/scenes/session-recordings/player/playerSettingsLogic.ts index a2c92899c9..3f9aecf61e 100644 --- a/frontend/src/scenes/session-recordings/player/playerSettingsLogic.ts +++ b/frontend/src/scenes/session-recordings/player/playerSettingsLogic.ts @@ -2,6 +2,7 @@ import { actions, connect, kea, listeners, path, reducers, selectors } from 'kea import { actionToUrl, router, urlToAction } from 'kea-router' import { subscriptions } from 'kea-subscriptions' import posthog from 'posthog-js' + import { teamLogic } from 'scenes/teamLogic' import { AutoplayDirection, SessionRecordingSidebarStacking } from '~/types' diff --git a/frontend/src/scenes/session-recordings/player/playlist-popover/PlaylistPopover.tsx b/frontend/src/scenes/session-recordings/player/playlist-popover/PlaylistPopover.tsx index 01cfd23cdf..ecfdca37ee 100644 --- a/frontend/src/scenes/session-recordings/player/playlist-popover/PlaylistPopover.tsx +++ b/frontend/src/scenes/session-recordings/player/playlist-popover/PlaylistPopover.tsx @@ -1,14 +1,16 @@ -import { IconPin, IconPlus } from '@posthog/icons' -import { LemonCheckbox, LemonDivider } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' -import { IconOpenInNew, IconWithCount } from 'lib/lemon-ui/icons' + +import { IconPin, IconPlus } from '@posthog/icons' +import { LemonCheckbox, LemonDivider } from '@posthog/lemon-ui' + import { LemonButton, LemonButtonProps } from 'lib/lemon-ui/LemonButton' import { LemonField } from 'lib/lemon-ui/LemonField' import { LemonInput } from 'lib/lemon-ui/LemonInput/LemonInput' import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' import { Popover } from 'lib/lemon-ui/Popover' import { Spinner } from 'lib/lemon-ui/Spinner' +import { IconOpenInNew, IconWithCount } from 'lib/lemon-ui/icons' import { urls } from 'scenes/urls' import { sessionRecordingsPlaylistLogic } from '../../playlist/sessionRecordingsPlaylistLogic' diff --git a/frontend/src/scenes/session-recordings/player/playlist-popover/playlistPopoverLogic.ts b/frontend/src/scenes/session-recordings/player/playlist-popover/playlistPopoverLogic.ts index 97a3a537b6..062c4ac4b0 100644 --- a/frontend/src/scenes/session-recordings/player/playlist-popover/playlistPopoverLogic.ts +++ b/frontend/src/scenes/session-recordings/player/playlist-popover/playlistPopoverLogic.ts @@ -1,11 +1,12 @@ import { actions, afterMount, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { forms } from 'kea-forms' import { lazyLoaders, loaders } from 'kea-loaders' + import api from 'lib/api' import { toParams } from 'lib/utils' import { - sessionRecordingPlayerLogic, SessionRecordingPlayerLogicProps, + sessionRecordingPlayerLogic, } from 'scenes/session-recordings/player/sessionRecordingPlayerLogic' import { addRecordingToPlaylist, removeRecordingFromPlaylist } from 'scenes/session-recordings/player/utils/playerUtils' import { createPlaylist } from 'scenes/session-recordings/playlist/playlistUtils' diff --git a/frontend/src/scenes/session-recordings/player/rrweb/canvas/canvas-plugin.ts b/frontend/src/scenes/session-recordings/player/rrweb/canvas/canvas-plugin.ts index 6a23546426..76168b03f0 100644 --- a/frontend/src/scenes/session-recordings/player/rrweb/canvas/canvas-plugin.ts +++ b/frontend/src/scenes/session-recordings/player/rrweb/canvas/canvas-plugin.ts @@ -1,15 +1,17 @@ -import { canvasMutation, Replayer } from '@posthog/rrweb' +import posthog from 'posthog-js' + +import { Replayer, canvasMutation } from '@posthog/rrweb' import { ReplayPlugin } from '@posthog/rrweb' import { CanvasArg, + EventType, + IncrementalSource, canvasMutationData, canvasMutationParam, - EventType, eventWithTime, - IncrementalSource, } from '@posthog/rrweb-types' + import { debounce } from 'lib/utils' -import posthog from 'posthog-js' import { deserializeCanvasArg } from './deserialize-canvas-args' diff --git a/frontend/src/scenes/session-recordings/player/rrweb/canvas/deserialize-canvas-args.ts b/frontend/src/scenes/session-recordings/player/rrweb/canvas/deserialize-canvas-args.ts index 8c94ced741..bdced48b5f 100644 --- a/frontend/src/scenes/session-recordings/player/rrweb/canvas/deserialize-canvas-args.ts +++ b/frontend/src/scenes/session-recordings/player/rrweb/canvas/deserialize-canvas-args.ts @@ -1,5 +1,6 @@ import { Replayer } from '@posthog/rrweb' import { CanvasArg } from '@posthog/rrweb-types' + import { base64ArrayBuffer } from 'lib/utils' type GLVarMap = Map diff --git a/frontend/src/scenes/session-recordings/player/rrweb/index.ts b/frontend/src/scenes/session-recordings/player/rrweb/index.ts index a9524315c9..ee36a8be2e 100644 --- a/frontend/src/scenes/session-recordings/player/rrweb/index.ts +++ b/frontend/src/scenes/session-recordings/player/rrweb/index.ts @@ -1,7 +1,8 @@ -import { playerConfig, ReplayPlugin } from '@posthog/rrweb' -import { EventType, eventWithTime, IncrementalSource } from '@posthog/rrweb-types' import Hls from 'hls.js' +import { ReplayPlugin, playerConfig } from '@posthog/rrweb' +import { EventType, IncrementalSource, eventWithTime } from '@posthog/rrweb-types' + export const PLACEHOLDER_SVG_DATA_IMAGE_URL = 'url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3Qgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJibGFjayIvPgo8cGF0aCBkPSJNOCAwSDE2TDAgMTZWOEw4IDBaIiBmaWxsPSIjMkQyRDJEIi8+CjxwYXRoIGQ9Ik0xNiA4VjE2SDhMMTYgOFoiIGZpbGw9IiMyRDJEMkQiLz4KPC9zdmc+Cg==");' diff --git a/frontend/src/scenes/session-recordings/player/sessionRecordingDataLogic.blobv2.test.ts b/frontend/src/scenes/session-recordings/player/sessionRecordingDataLogic.blobv2.test.ts index de2d24aebd..08c8327468 100644 --- a/frontend/src/scenes/session-recordings/player/sessionRecordingDataLogic.blobv2.test.ts +++ b/frontend/src/scenes/session-recordings/player/sessionRecordingDataLogic.blobv2.test.ts @@ -1,7 +1,9 @@ +import { api } from 'lib/api.mock' + import { readFileSync } from 'fs' import { expectLogic } from 'kea-test-utils' -import { api } from 'lib/api.mock' import { join } from 'path' + import { sessionRecordingDataLogic } from 'scenes/session-recordings/player/sessionRecordingDataLogic' import { useAvailableFeatures } from '~/mocks/features' diff --git a/frontend/src/scenes/session-recordings/player/sessionRecordingDataLogic.performance.test.ts b/frontend/src/scenes/session-recordings/player/sessionRecordingDataLogic.performance.test.ts index 57ec30c015..1fd8a6dec7 100644 --- a/frontend/src/scenes/session-recordings/player/sessionRecordingDataLogic.performance.test.ts +++ b/frontend/src/scenes/session-recordings/player/sessionRecordingDataLogic.performance.test.ts @@ -1,7 +1,8 @@ import { readFileSync } from 'fs' import { expectLogic } from 'kea-test-utils' -import { uuid } from 'lib/utils' import { join } from 'path' + +import { uuid } from 'lib/utils' import { sessionRecordingDataLogic } from 'scenes/session-recordings/player/sessionRecordingDataLogic' import { useAvailableFeatures } from '~/mocks/features' diff --git a/frontend/src/scenes/session-recordings/player/sessionRecordingDataLogic.test.ts b/frontend/src/scenes/session-recordings/player/sessionRecordingDataLogic.test.ts index eafa5cf730..0900e6c5ef 100644 --- a/frontend/src/scenes/session-recordings/player/sessionRecordingDataLogic.test.ts +++ b/frontend/src/scenes/session-recordings/player/sessionRecordingDataLogic.test.ts @@ -1,6 +1,9 @@ -import { EventType, IncrementalSource, mutationData, NodeType } from '@posthog/rrweb-types' -import { expectLogic } from 'kea-test-utils' import { api } from 'lib/api.mock' + +import { expectLogic } from 'kea-test-utils' + +import { EventType, IncrementalSource, NodeType, mutationData } from '@posthog/rrweb-types' + import { convertSnapshotsByWindowId } from 'scenes/session-recordings/__mocks__/recording_snapshots' import { encodedWebSnapshotData } from 'scenes/session-recordings/player/__mocks__/encoded-snapshot-data' import { sessionRecordingDataLogic } from 'scenes/session-recordings/player/sessionRecordingDataLogic' diff --git a/frontend/src/scenes/session-recordings/player/sessionRecordingDataLogic.ts b/frontend/src/scenes/session-recordings/player/sessionRecordingDataLogic.ts index 541d54c547..e49381c473 100644 --- a/frontend/src/scenes/session-recordings/player/sessionRecordingDataLogic.ts +++ b/frontend/src/scenes/session-recordings/player/sessionRecordingDataLogic.ts @@ -1,13 +1,17 @@ -import { customEvent, EventType, eventWithTime } from '@posthog/rrweb-types' import { actions, beforeUnmount, connect, defaults, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { subscriptions } from 'kea-subscriptions' +import posthog from 'posthog-js' + +import { EventType, customEvent, eventWithTime } from '@posthog/rrweb-types' + import api from 'lib/api' import { FEATURE_FLAGS } from 'lib/constants' import { Dayjs, dayjs } from 'lib/dayjs' -import { featureFlagLogic, FeatureFlagsSet } from 'lib/logic/featureFlagLogic' +import { lemonToast } from 'lib/lemon-ui/LemonToast' +import { FeatureFlagsSet, featureFlagLogic } from 'lib/logic/featureFlagLogic' import { chainToElements } from 'lib/utils/elements-chain' -import posthog from 'posthog-js' +import { playerCommentModel } from 'scenes/session-recordings/player/commenting/playerCommentModel' import { RecordingComment } from 'scenes/session-recordings/player/inspector/playerInspectorLogic' import { parseEncodedSnapshots, @@ -17,11 +21,11 @@ import { keyForSource } from 'scenes/session-recordings/player/snapshot-processi import { teamLogic } from 'scenes/teamLogic' import { annotationsModel } from '~/models/annotationsModel' -import { hogql, HogQLQueryString } from '~/queries/utils' +import { HogQLQueryString, hogql } from '~/queries/utils' import { CommentType, - RecordingEventsFilters, RecordingEventType, + RecordingEventsFilters, RecordingSegment, RecordingSnapshot, SessionPlayerData, @@ -37,10 +41,8 @@ import { import { ExportedSessionRecordingFileV2 } from '../file-playback/types' import { sessionRecordingEventUsageLogic } from '../sessionRecordingEventUsageLogic' import type { sessionRecordingDataLogicType } from './sessionRecordingDataLogicType' -import { getHrefFromSnapshot, ViewportResolution } from './snapshot-processing/patch-meta-event' +import { ViewportResolution, getHrefFromSnapshot } from './snapshot-processing/patch-meta-event' import { createSegments, mapSnapshotsToWindowId } from './utils/segmenter' -import { playerCommentModel } from 'scenes/session-recordings/player/commenting/playerCommentModel' -import { lemonToast } from 'lib/lemon-ui/LemonToast' const IS_TEST_MODE = process.env.NODE_ENV === 'test' const TWENTY_FOUR_HOURS_IN_MS = 24 * 60 * 60 * 1000 // +- before and after start and end of a recording to query for session linked events. diff --git a/frontend/src/scenes/session-recordings/player/sessionRecordingPlayerLogic.test.ts b/frontend/src/scenes/session-recordings/player/sessionRecordingPlayerLogic.test.ts index bf61a68078..a7e80d8e86 100644 --- a/frontend/src/scenes/session-recordings/player/sessionRecordingPlayerLogic.test.ts +++ b/frontend/src/scenes/session-recordings/player/sessionRecordingPlayerLogic.test.ts @@ -1,13 +1,17 @@ +import { MOCK_TEAM_ID } from 'lib/api.mock' + import { router } from 'kea-router' import { expectLogic } from 'kea-test-utils' -import api from 'lib/api' -import { MOCK_TEAM_ID } from 'lib/api.mock' -import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import posthog from 'posthog-js' + +import api from 'lib/api' +import { featureFlagLogic } from 'lib/logic/featureFlagLogic' +import { removeProjectIdIfPresent } from 'lib/utils/router-utils' import recordingEventsJson from 'scenes/session-recordings/__mocks__/recording_events_query' import { recordingMetaJson } from 'scenes/session-recordings/__mocks__/recording_meta' import { snapshotsAsJSONLines } from 'scenes/session-recordings/__mocks__/recording_snapshots' import { playerSettingsLogic } from 'scenes/session-recordings/player/playerSettingsLogic' +import { makeLogger } from 'scenes/session-recordings/player/rrweb' import { sessionRecordingDataLogic } from 'scenes/session-recordings/player/sessionRecordingDataLogic' import { sessionRecordingPlayerLogic } from 'scenes/session-recordings/player/sessionRecordingPlayerLogic' import { sessionRecordingsPlaylistLogic } from 'scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic' @@ -18,8 +22,6 @@ import { useMocks } from '~/mocks/jest' import { initKeaTests } from '~/test/init' import { sessionRecordingEventUsageLogic } from '../sessionRecordingEventUsageLogic' -import { makeLogger } from 'scenes/session-recordings/player/rrweb' -import { removeProjectIdIfPresent } from 'lib/utils/router-utils' describe('sessionRecordingPlayerLogic', () => { let logic: ReturnType diff --git a/frontend/src/scenes/session-recordings/player/sessionRecordingPlayerLogic.ts b/frontend/src/scenes/session-recordings/player/sessionRecordingPlayerLogic.ts index f31ce06f3c..b0a2f6ba90 100644 --- a/frontend/src/scenes/session-recordings/player/sessionRecordingPlayerLogic.ts +++ b/frontend/src/scenes/session-recordings/player/sessionRecordingPlayerLogic.ts @@ -1,11 +1,8 @@ -import { lemonToast } from '@posthog/lemon-ui' -import { playerConfig, Replayer, ReplayPlugin } from '@posthog/rrweb' -import { EventType, eventWithTime, IncrementalSource } from '@posthog/rrweb-types' import { + BuiltLogic, actions, afterMount, beforeUnmount, - BuiltLogic, connect, kea, key, @@ -18,25 +15,30 @@ import { import { router } from 'kea-router' import { subscriptions } from 'kea-subscriptions' import { delay } from 'kea-test-utils' +import posthog from 'posthog-js' +import { RefObject } from 'react' + +import { lemonToast } from '@posthog/lemon-ui' +import { ReplayPlugin, Replayer, playerConfig } from '@posthog/rrweb' +import { EventType, IncrementalSource, eventWithTime } from '@posthog/rrweb-types' + import api from 'lib/api' +import { exportsLogic } from 'lib/components/ExportButton/exportsLogic' import { FEATURE_FLAGS } from 'lib/constants' import { now } from 'lib/dayjs' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { clamp, downloadFile, findLastIndex, objectsEqual, uuid } from 'lib/utils' -import posthog from 'posthog-js' -import { RefObject } from 'react' +import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { openBillingPopupModal } from 'scenes/billing/BillingPopup' import { ReplayIframeData } from 'scenes/heatmaps/heatmapsBrowserLogic' -import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { playerCommentModel } from 'scenes/session-recordings/player/commenting/playerCommentModel' import { - sessionRecordingDataLogic, SessionRecordingDataLogicProps, + sessionRecordingDataLogic, } from 'scenes/session-recordings/player/sessionRecordingDataLogic' import { MatchingEventsMatchType } from 'scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic' import { urls } from 'scenes/urls' import { userLogic } from 'scenes/userLogic' -import { exportsLogic } from 'lib/components/ExportButton/exportsLogic' import { AvailableFeature, diff --git a/frontend/src/scenes/session-recordings/player/share/PlayerShare.tsx b/frontend/src/scenes/session-recordings/player/share/PlayerShare.tsx index aa44539321..9f873a79f2 100644 --- a/frontend/src/scenes/session-recordings/player/share/PlayerShare.tsx +++ b/frontend/src/scenes/session-recordings/player/share/PlayerShare.tsx @@ -1,15 +1,17 @@ -import { IconCopy, IconExternal } from '@posthog/icons' -import { LemonButton, LemonCheckbox, LemonInput, LemonTextArea } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' +import posthog from 'posthog-js' + +import { IconCopy, IconExternal } from '@posthog/icons' +import { LemonButton, LemonCheckbox, LemonInput, LemonTextArea } from '@posthog/lemon-ui' + import { SharingModalContent } from 'lib/components/Sharing/SharingModal' import { LemonDialog } from 'lib/lemon-ui/LemonDialog' import { LemonField } from 'lib/lemon-ui/LemonField' import { copyToClipboard } from 'lib/utils/copyToClipboard' -import posthog from 'posthog-js' -import { playerShareLogic, PlayerShareLogicProps } from './playerShareLogic' +import { PlayerShareLogicProps, playerShareLogic } from './playerShareLogic' function TimestampForm(props: PlayerShareLogicProps): JSX.Element { const logic = playerShareLogic(props) diff --git a/frontend/src/scenes/session-recordings/player/share/PlayerShareDialog.stories.tsx b/frontend/src/scenes/session-recordings/player/share/PlayerShareDialog.stories.tsx index 6f8e9d81ad..31b2475d27 100644 --- a/frontend/src/scenes/session-recordings/player/share/PlayerShareDialog.stories.tsx +++ b/frontend/src/scenes/session-recordings/player/share/PlayerShareDialog.stories.tsx @@ -1,4 +1,5 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' + import { PlayerShareRecording } from 'scenes/session-recordings/player/share/PlayerShare' import { PlayerShareLogicProps } from 'scenes/session-recordings/player/share/playerShareLogic' diff --git a/frontend/src/scenes/session-recordings/player/share/PlayerShareMenu.tsx b/frontend/src/scenes/session-recordings/player/share/PlayerShareMenu.tsx index 19ec656a39..332c48ed7f 100644 --- a/frontend/src/scenes/session-recordings/player/share/PlayerShareMenu.tsx +++ b/frontend/src/scenes/session-recordings/player/share/PlayerShareMenu.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconExternal, IconGlobe, IconShare, IconShield } from '@posthog/icons' import { LemonButton, LemonMenu } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { sessionRecordingPlayerLogic } from 'scenes/session-recordings/player/sessionRecordingPlayerLogic' import { openPlayerShareDialog } from 'scenes/session-recordings/player/share/PlayerShare' import { PlayerShareLogicProps } from 'scenes/session-recordings/player/share/playerShareLogic' diff --git a/frontend/src/scenes/session-recordings/player/share/playerShareLogic.ts b/frontend/src/scenes/session-recordings/player/share/playerShareLogic.ts index 40da850801..5a23ab0154 100644 --- a/frontend/src/scenes/session-recordings/player/share/playerShareLogic.ts +++ b/frontend/src/scenes/session-recordings/player/share/playerShareLogic.ts @@ -1,6 +1,7 @@ import { kea, key, path, props, selectors } from 'kea' import { forms } from 'kea-forms' import { combineUrl } from 'kea-router' + import { colonDelimitedDuration, reverseColonDelimitedDuration } from 'lib/utils' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/session-recordings/player/sidebar/PlayerSidebarOverviewGrid.tsx b/frontend/src/scenes/session-recordings/player/sidebar/PlayerSidebarOverviewGrid.tsx index ef7face8c6..cd8a8a2f28 100644 --- a/frontend/src/scenes/session-recordings/player/sidebar/PlayerSidebarOverviewGrid.tsx +++ b/frontend/src/scenes/session-recordings/player/sidebar/PlayerSidebarOverviewGrid.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { PropertyIcon } from 'lib/components/PropertyIcon/PropertyIcon' import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' import { playerMetaLogic } from 'scenes/session-recordings/player/player-meta/playerMetaLogic' diff --git a/frontend/src/scenes/session-recordings/player/sidebar/PlayerSidebarOverviewOtherWatchers.stories.tsx b/frontend/src/scenes/session-recordings/player/sidebar/PlayerSidebarOverviewOtherWatchers.stories.tsx index 83f2f3267e..6d6afade48 100644 --- a/frontend/src/scenes/session-recordings/player/sidebar/PlayerSidebarOverviewOtherWatchers.stories.tsx +++ b/frontend/src/scenes/session-recordings/player/sidebar/PlayerSidebarOverviewOtherWatchers.stories.tsx @@ -1,10 +1,11 @@ import { Meta } from '@storybook/react' import { BindLogic } from 'kea' -import { PlayerSidebarOverviewOtherWatchers } from './PlayerSidebarOverviewOtherWatchers' +import { mswDecorator } from '~/mocks/browser' + import { sessionRecordingDataLogic } from '../sessionRecordingDataLogic' import { sessionRecordingPlayerLogic } from '../sessionRecordingPlayerLogic' -import { mswDecorator } from '~/mocks/browser' +import { PlayerSidebarOverviewOtherWatchers } from './PlayerSidebarOverviewOtherWatchers' const meta: Meta = { title: 'Replay/Overview Tab/Other Watchers', diff --git a/frontend/src/scenes/session-recordings/player/sidebar/PlayerSidebarOverviewOtherWatchers.tsx b/frontend/src/scenes/session-recordings/player/sidebar/PlayerSidebarOverviewOtherWatchers.tsx index e78990b648..31398f57af 100644 --- a/frontend/src/scenes/session-recordings/player/sidebar/PlayerSidebarOverviewOtherWatchers.tsx +++ b/frontend/src/scenes/session-recordings/player/sidebar/PlayerSidebarOverviewOtherWatchers.tsx @@ -1,10 +1,12 @@ -import { IconPeople, IconChevronDown } from '@posthog/icons' import { useValues } from 'kea' +import { useState } from 'react' + +import { IconChevronDown, IconPeople } from '@posthog/icons' + +import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' import { ProfileBubbles } from 'lib/lemon-ui/ProfilePicture' import { ProfilePicture } from 'lib/lemon-ui/ProfilePicture' -import { LemonButton } from 'lib/lemon-ui/LemonButton' -import { useState } from 'react' import { userLogic } from 'scenes/userLogic' import { SessionRecordingType } from '~/types' diff --git a/frontend/src/scenes/session-recordings/player/sidebar/PlayerSidebarOverviewTab.stories.tsx b/frontend/src/scenes/session-recordings/player/sidebar/PlayerSidebarOverviewTab.stories.tsx index 046a3cced1..2b077357c2 100644 --- a/frontend/src/scenes/session-recordings/player/sidebar/PlayerSidebarOverviewTab.stories.tsx +++ b/frontend/src/scenes/session-recordings/player/sidebar/PlayerSidebarOverviewTab.stories.tsx @@ -1,5 +1,6 @@ import { Meta, StoryFn } from '@storybook/react' import { BindLogic } from 'kea' + import recordingEventsJson from 'scenes/session-recordings/__mocks__/recording_events_query' import { recordingMetaJson } from 'scenes/session-recordings/__mocks__/recording_meta' import { recordingPlaylists } from 'scenes/session-recordings/__mocks__/recording_playlists' diff --git a/frontend/src/scenes/session-recordings/player/sidebar/PlayerSidebarOverviewTab.tsx b/frontend/src/scenes/session-recordings/player/sidebar/PlayerSidebarOverviewTab.tsx index a5fe8a47da..2f60ed16cd 100644 --- a/frontend/src/scenes/session-recordings/player/sidebar/PlayerSidebarOverviewTab.tsx +++ b/frontend/src/scenes/session-recordings/player/sidebar/PlayerSidebarOverviewTab.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { PersonDisplay } from 'scenes/persons/PersonDisplay' import { playerMetaLogic } from '../player-meta/playerMetaLogic' diff --git a/frontend/src/scenes/session-recordings/player/sidebar/PlayerSidebarSessionSummary.tsx b/frontend/src/scenes/session-recordings/player/sidebar/PlayerSidebarSessionSummary.tsx index ee77161d35..9684fe4bf0 100644 --- a/frontend/src/scenes/session-recordings/player/sidebar/PlayerSidebarSessionSummary.tsx +++ b/frontend/src/scenes/session-recordings/player/sidebar/PlayerSidebarSessionSummary.tsx @@ -1,3 +1,10 @@ +import clsx from 'clsx' +import { useActions, useValues } from 'kea' +import React, { ReactNode, useEffect, useState } from 'react' +import { Transition } from 'react-transition-group' +import { ENTERED, ENTERING } from 'react-transition-group/Transition' +import useResizeObserver from 'use-resize-observer' + import { IconAIText, IconClock, @@ -11,16 +18,12 @@ import { IconWarning, } from '@posthog/icons' import { LemonBanner, LemonDivider, LemonTag, Link, Tooltip } from '@posthog/lemon-ui' -import clsx from 'clsx' -import { useActions, useValues } from 'kea' + +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { Spinner } from 'lib/lemon-ui/Spinner' -import React, { ReactNode, useEffect, useState } from 'react' -import { Transition } from 'react-transition-group' -import { ENTERED, ENTERING } from 'react-transition-group/Transition' import { playerMetaLogic } from 'scenes/session-recordings/player/player-meta/playerMetaLogic' import { sessionRecordingPlayerLogic } from 'scenes/session-recordings/player/sessionRecordingPlayerLogic' -import useResizeObserver from 'use-resize-observer' import { playerInspectorLogic } from '../inspector/playerInspectorLogic' import { @@ -30,7 +33,6 @@ import { SessionSegmentKeyActions, SessionSegmentOutcome, } from '../player-meta/types' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' function formatEventMetaInfo(event: SessionKeyAction): JSX.Element { return ( diff --git a/frontend/src/scenes/session-recordings/player/sidebar/PlayerSidebarTab.tsx b/frontend/src/scenes/session-recordings/player/sidebar/PlayerSidebarTab.tsx index eda2a5fcda..5d0fcfa054 100644 --- a/frontend/src/scenes/session-recordings/player/sidebar/PlayerSidebarTab.tsx +++ b/frontend/src/scenes/session-recordings/player/sidebar/PlayerSidebarTab.tsx @@ -1,12 +1,13 @@ import { useValues } from 'kea' + import { NetworkView } from 'scenes/session-recordings/apm/NetworkView' import { PlayerInspector } from 'scenes/session-recordings/player/inspector/PlayerInspector' import { SessionRecordingSidebarTab } from '~/types' -import { playerSidebarLogic } from './playerSidebarLogic' import { PlayerSidebarOverviewTab } from './PlayerSidebarOverviewTab' import { PlayerSidebarSessionSummaryTab } from './PlayerSidebarSessionSummaryTab' +import { playerSidebarLogic } from './playerSidebarLogic' export function PlayerSidebarTab(): JSX.Element | null { const { activeTab } = useValues(playerSidebarLogic) diff --git a/frontend/src/scenes/session-recordings/player/snapshot-processing/decompress.ts b/frontend/src/scenes/session-recordings/player/snapshot-processing/decompress.ts index 23aeead5ef..08ca28cae6 100644 --- a/frontend/src/scenes/session-recordings/player/snapshot-processing/decompress.ts +++ b/frontend/src/scenes/session-recordings/player/snapshot-processing/decompress.ts @@ -1,9 +1,10 @@ -import { IncrementalSource } from '@posthog/rrweb-types' -import { EventType } from '@posthog/rrweb-types' import { gunzipSync, strFromU8, strToU8 } from 'fflate' import posthog from 'posthog-js' import { compressedEventWithTime } from 'posthog-js/lib/src/extensions/replay/sessionrecording' +import { IncrementalSource } from '@posthog/rrweb-types' +import { EventType } from '@posthog/rrweb-types' + import { throttleCapture } from './throttle-capturing' function isCompressedEvent(ev: unknown): ev is compressedEventWithTime { diff --git a/frontend/src/scenes/session-recordings/player/snapshot-processing/patch-meta-event.test.ts b/frontend/src/scenes/session-recordings/player/snapshot-processing/patch-meta-event.test.ts index 1d766e417f..e697003524 100644 --- a/frontend/src/scenes/session-recordings/player/snapshot-processing/patch-meta-event.test.ts +++ b/frontend/src/scenes/session-recordings/player/snapshot-processing/patch-meta-event.test.ts @@ -1,9 +1,10 @@ -import { EventType } from '@posthog/rrweb-types' import posthog from 'posthog-js' +import { EventType } from '@posthog/rrweb-types' + import { RecordingSnapshot } from '~/types' -import { patchMetaEventIntoWebData, ViewportResolution } from './patch-meta-event' +import { ViewportResolution, patchMetaEventIntoWebData } from './patch-meta-event' import { clearThrottle } from './throttle-capturing' describe('patchMetaEventIntoWebData', () => { diff --git a/frontend/src/scenes/session-recordings/player/snapshot-processing/patch-meta-event.ts b/frontend/src/scenes/session-recordings/player/snapshot-processing/patch-meta-event.ts index d361e6160a..7ee379906c 100644 --- a/frontend/src/scenes/session-recordings/player/snapshot-processing/patch-meta-event.ts +++ b/frontend/src/scenes/session-recordings/player/snapshot-processing/patch-meta-event.ts @@ -1,8 +1,10 @@ +import posthog from 'posthog-js' + import { eventWithTime } from '@posthog/rrweb-types' import { fullSnapshotEvent } from '@posthog/rrweb-types' import { EventType } from '@posthog/rrweb-types' + import { isObject } from 'lib/utils' -import posthog from 'posthog-js' import { RecordingSnapshot } from '~/types' diff --git a/frontend/src/scenes/session-recordings/player/snapshot-processing/process-all-snapshots.ts b/frontend/src/scenes/session-recordings/player/snapshot-processing/process-all-snapshots.ts index 8cdb0a9b60..ae3384fdfd 100644 --- a/frontend/src/scenes/session-recordings/player/snapshot-processing/process-all-snapshots.ts +++ b/frontend/src/scenes/session-recordings/player/snapshot-processing/process-all-snapshots.ts @@ -1,7 +1,9 @@ +import posthog from 'posthog-js' + import posthogEE from '@posthog/ee/exports' import { EventType, eventWithTime, fullSnapshotEvent } from '@posthog/rrweb-types' + import { isObject } from 'lib/utils' -import posthog from 'posthog-js' import { CHROME_EXTENSION_DENY_LIST, stripChromeExtensionDataFromNode, @@ -9,11 +11,11 @@ import { import { chunkMutationSnapshot } from 'scenes/session-recordings/player/snapshot-processing/chunk-large-mutations' import { decompressEvent } from 'scenes/session-recordings/player/snapshot-processing/decompress' import { + ViewportResolution, patchMetaEventIntoMobileData, patchMetaEventIntoWebData, - ViewportResolution, } from 'scenes/session-recordings/player/snapshot-processing/patch-meta-event' -import { keyForSource, SourceKey } from 'scenes/session-recordings/player/snapshot-processing/source-key' +import { SourceKey, keyForSource } from 'scenes/session-recordings/player/snapshot-processing/source-key' import { throttleCapture } from 'scenes/session-recordings/player/snapshot-processing/throttle-capturing' import { diff --git a/frontend/src/scenes/session-recordings/player/utils/playerUtils.ts b/frontend/src/scenes/session-recordings/player/utils/playerUtils.ts index b025caba18..1d93543493 100644 --- a/frontend/src/scenes/session-recordings/player/utils/playerUtils.ts +++ b/frontend/src/scenes/session-recordings/player/utils/playerUtils.ts @@ -1,7 +1,8 @@ import { router } from 'kea-router' +import { MouseEvent as ReactMouseEvent, TouchEvent as ReactTouchEvent } from 'react' + import api from 'lib/api' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' -import { MouseEvent as ReactMouseEvent, TouchEvent as ReactTouchEvent } from 'react' import { urls } from 'scenes/urls' import { SessionRecordingPlaylistType, SessionRecordingType } from '~/types' diff --git a/frontend/src/scenes/session-recordings/player/utils/segmenter.ts b/frontend/src/scenes/session-recordings/player/utils/segmenter.ts index 921af5b71a..513085774a 100644 --- a/frontend/src/scenes/session-recordings/player/utils/segmenter.ts +++ b/frontend/src/scenes/session-recordings/player/utils/segmenter.ts @@ -1,4 +1,5 @@ -import { EventType, eventWithTime, IncrementalSource } from '@posthog/rrweb-types' +import { EventType, IncrementalSource, eventWithTime } from '@posthog/rrweb-types' + import { Dayjs } from 'lib/dayjs' import { RecordingSegment, RecordingSnapshot } from '~/types' diff --git a/frontend/src/scenes/session-recordings/player/view-explorer/SessionRecordingPlayerExplorer.tsx b/frontend/src/scenes/session-recordings/player/view-explorer/SessionRecordingPlayerExplorer.tsx index afab9866b1..afd377247e 100644 --- a/frontend/src/scenes/session-recordings/player/view-explorer/SessionRecordingPlayerExplorer.tsx +++ b/frontend/src/scenes/session-recordings/player/view-explorer/SessionRecordingPlayerExplorer.tsx @@ -1,7 +1,9 @@ +import { useState } from 'react' + import { IconRevert, IconX } from '@posthog/icons' + import { useResizeObserver } from 'lib/hooks/useResizeObserver' import { LemonBanner } from 'lib/lemon-ui/LemonBanner' -import { useState } from 'react' import { SettingsBar, SettingsButton } from 'scenes/session-recordings/components/PanelSettings' import { Timestamp } from 'scenes/session-recordings/player/controller/PlayerControllerTime' diff --git a/frontend/src/scenes/session-recordings/playlist/Playlist.stories.tsx b/frontend/src/scenes/session-recordings/playlist/Playlist.stories.tsx index 54cd4119f9..7cf5d30b97 100644 --- a/frontend/src/scenes/session-recordings/playlist/Playlist.stories.tsx +++ b/frontend/src/scenes/session-recordings/playlist/Playlist.stories.tsx @@ -1,4 +1,5 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' + import { range } from 'lib/utils' import { SessionRecordingType } from '~/types' diff --git a/frontend/src/scenes/session-recordings/playlist/Playlist.tsx b/frontend/src/scenes/session-recordings/playlist/Playlist.tsx index 22b8af3240..afa5e19619 100644 --- a/frontend/src/scenes/session-recordings/playlist/Playlist.tsx +++ b/frontend/src/scenes/session-recordings/playlist/Playlist.tsx @@ -1,12 +1,14 @@ import './Playlist.scss' -import { LemonCollapse, LemonSkeleton, Tooltip } from '@posthog/lemon-ui' import clsx from 'clsx' import { useValues } from 'kea' +import { ReactNode, useRef, useState } from 'react' + +import { LemonCollapse, LemonSkeleton, Tooltip } from '@posthog/lemon-ui' + import { useResizeBreakpoints } from 'lib/hooks/useResizeObserver' import { LemonTableLoader } from 'lib/lemon-ui/LemonTable/LemonTableLoader' import { range } from 'lib/utils' -import { ReactNode, useRef, useState } from 'react' import { DraggableToNotebook } from 'scenes/notebooks/AddToNotebook/DraggableToNotebook' import { SessionRecordingType } from '~/types' diff --git a/frontend/src/scenes/session-recordings/playlist/SessionRecordingPreview.tsx b/frontend/src/scenes/session-recordings/playlist/SessionRecordingPreview.tsx index b6052e4082..184a4bb7be 100644 --- a/frontend/src/scenes/session-recordings/playlist/SessionRecordingPreview.tsx +++ b/frontend/src/scenes/session-recordings/playlist/SessionRecordingPreview.tsx @@ -1,11 +1,14 @@ import './SessionRecordingPreview.scss' -import { IconBug, IconCursorClick, IconKeyboard, IconLive } from '@posthog/icons' import clsx from 'clsx' -import { useValues, useActions } from 'kea' +import { useActions, useValues } from 'kea' + +import { IconBug, IconCursorClick, IconKeyboard, IconLive } from '@posthog/icons' + import { PropertyIcon } from 'lib/components/PropertyIcon/PropertyIcon' import { TZLabel } from 'lib/components/TZLabel' import { FEATURE_FLAGS } from 'lib/constants' +import { LemonCheckbox } from 'lib/lemon-ui/LemonCheckbox' import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' import { Tooltip } from 'lib/lemon-ui/Tooltip' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' @@ -14,7 +17,7 @@ import { DraggableToNotebook } from 'scenes/notebooks/AddToNotebook/DraggableToN import { asDisplay } from 'scenes/persons/person-utils' import { SimpleTimeLabel } from 'scenes/session-recordings/components/SimpleTimeLabel' import { countryTitleFrom } from 'scenes/session-recordings/player/player-meta/playerMetaLogic' -import { playerSettingsLogic, TimestampFormat } from 'scenes/session-recordings/player/playerSettingsLogic' +import { TimestampFormat, playerSettingsLogic } from 'scenes/session-recordings/player/playerSettingsLogic' import { urls } from 'scenes/urls' import { RecordingsQuery } from '~/queries/schema/schema-general' @@ -26,7 +29,6 @@ import { MAX_SELECTED_RECORDINGS, sessionRecordingsPlaylistLogic, } from './sessionRecordingsPlaylistLogic' -import { LemonCheckbox } from 'lib/lemon-ui/LemonCheckbox' export interface SessionRecordingPreviewProps { recording: SessionRecordingType diff --git a/frontend/src/scenes/session-recordings/playlist/SessionRecordingsPlaylist.tsx b/frontend/src/scenes/session-recordings/playlist/SessionRecordingsPlaylist.tsx index 253ea284d4..37cd0ac2cf 100644 --- a/frontend/src/scenes/session-recordings/playlist/SessionRecordingsPlaylist.tsx +++ b/frontend/src/scenes/session-recordings/playlist/SessionRecordingsPlaylist.tsx @@ -1,5 +1,7 @@ -import { LemonBadge, LemonButton, Link, Spinner } from '@posthog/lemon-ui' import { BindLogic, useActions, useValues } from 'kea' + +import { LemonBadge, LemonButton, Link, Spinner } from '@posthog/lemon-ui' + import { EmptyMessage } from 'lib/components/EmptyMessage/EmptyMessage' import { PropertyKeyInfo } from 'lib/components/PropertyKeyInfo' import { LemonBanner } from 'lib/lemon-ui/LemonBanner' @@ -15,9 +17,9 @@ import { } from '../filters/RecordingsUniversalFiltersEmbed' import { SessionRecordingPlayer } from '../player/SessionRecordingPlayer' import { SessionRecordingPreview } from './SessionRecordingPreview' -import { SessionRecordingPlaylistLogicProps, sessionRecordingsPlaylistLogic } from './sessionRecordingsPlaylistLogic' import { SessionRecordingsPlaylistTopSettings } from './SessionRecordingsPlaylistSettings' import { SessionRecordingsPlaylistTroubleshooting } from './SessionRecordingsPlaylistTroubleshooting' +import { SessionRecordingPlaylistLogicProps, sessionRecordingsPlaylistLogic } from './sessionRecordingsPlaylistLogic' export function SessionRecordingsPlaylist({ showContent = true, diff --git a/frontend/src/scenes/session-recordings/playlist/SessionRecordingsPlaylistScene.tsx b/frontend/src/scenes/session-recordings/playlist/SessionRecordingsPlaylistScene.tsx index 8bb625acb6..05d0df3189 100644 --- a/frontend/src/scenes/session-recordings/playlist/SessionRecordingsPlaylistScene.tsx +++ b/frontend/src/scenes/session-recordings/playlist/SessionRecordingsPlaylistScene.tsx @@ -1,24 +1,26 @@ -import { LemonButton, LemonDivider } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonButton, LemonDivider } from '@posthog/lemon-ui' + import { EditableField } from 'lib/components/EditableField/EditableField' import { NotFound } from 'lib/components/NotFound' import { PageHeader } from 'lib/components/PageHeader' -import { UserActivityIndicator } from 'lib/components/UserActivityIndicator/UserActivityIndicator' -import { dayjs } from 'lib/dayjs' -import { More } from 'lib/lemon-ui/LemonButton/More' -import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' -import { SceneExport } from 'scenes/sceneTypes' -import { playerSettingsLogic } from 'scenes/session-recordings/player/playerSettingsLogic' - import { SceneCommonButtons } from 'lib/components/Scenes/SceneCommonButtons' import { SceneFile } from 'lib/components/Scenes/SceneFile' import { SceneMetalyticsSummaryButton } from 'lib/components/Scenes/SceneMetalyticsSummaryButton' -import { SceneTextarea } from 'lib/components/Scenes/SceneTextarea' import { SceneTextInput } from 'lib/components/Scenes/SceneTextInput' +import { SceneTextarea } from 'lib/components/Scenes/SceneTextarea' import { SceneActivityIndicator } from 'lib/components/Scenes/SceneUpdateActivityInfo' +import { UserActivityIndicator } from 'lib/components/UserActivityIndicator/UserActivityIndicator' import { FEATURE_FLAGS } from 'lib/constants' +import { dayjs } from 'lib/dayjs' +import { More } from 'lib/lemon-ui/LemonButton/More' +import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' +import { SceneExport } from 'scenes/sceneTypes' +import { playerSettingsLogic } from 'scenes/session-recordings/player/playerSettingsLogic' + import { ScenePanel, ScenePanelActions, @@ -26,6 +28,7 @@ import { ScenePanelDivider, ScenePanelMetaInfo, } from '~/layout/scenes/SceneLayout' + import { isUniversalFilters } from '../utils' import { SessionRecordingsPlaylist } from './SessionRecordingsPlaylist' import { convertLegacyFiltersToUniversalFilters } from './sessionRecordingsPlaylistLogic' diff --git a/frontend/src/scenes/session-recordings/playlist/SessionRecordingsPlaylistSettings.tsx b/frontend/src/scenes/session-recordings/playlist/SessionRecordingsPlaylistSettings.tsx index b787d51b44..12577e0156 100644 --- a/frontend/src/scenes/session-recordings/playlist/SessionRecordingsPlaylistSettings.tsx +++ b/frontend/src/scenes/session-recordings/playlist/SessionRecordingsPlaylistSettings.tsx @@ -1,17 +1,21 @@ -import { IconEllipsis, IconSort, IconTrash } from '@posthog/icons' import { useActions, useValues } from 'kea' + +import { IconEllipsis, IconSort, IconTrash } from '@posthog/icons' +import { LemonBadge, LemonButton, LemonCheckbox, LemonInput, LemonModal, Spinner } from '@posthog/lemon-ui' + +import { LemonMenuItem } from 'lib/lemon-ui/LemonMenu/LemonMenu' import { SettingsBar, SettingsMenu } from 'scenes/session-recordings/components/PanelSettings' +import { savedSessionRecordingPlaylistsLogic } from 'scenes/session-recordings/saved-playlists/savedSessionRecordingPlaylistsLogic' + import { RecordingUniversalFilters } from '~/types' +import { ReplayTabs } from '~/types' + import { playerSettingsLogic } from '../player/playerSettingsLogic' import { - MAX_SELECTED_RECORDINGS, DELETE_CONFIRMATION_TEXT, + MAX_SELECTED_RECORDINGS, sessionRecordingsPlaylistLogic, } from './sessionRecordingsPlaylistLogic' -import { savedSessionRecordingPlaylistsLogic } from 'scenes/session-recordings/saved-playlists/savedSessionRecordingPlaylistsLogic' -import { ReplayTabs } from '~/types' -import { LemonBadge, LemonButton, LemonCheckbox, LemonInput, LemonModal, Spinner } from '@posthog/lemon-ui' -import { LemonMenuItem } from 'lib/lemon-ui/LemonMenu/LemonMenu' const SortingKeyToLabel = { start_time: 'Latest', diff --git a/frontend/src/scenes/session-recordings/playlist/SessionRecordingsPlaylistTroubleshooting.tsx b/frontend/src/scenes/session-recordings/playlist/SessionRecordingsPlaylistTroubleshooting.tsx index 1158c09146..29d58de19c 100644 --- a/frontend/src/scenes/session-recordings/playlist/SessionRecordingsPlaylistTroubleshooting.tsx +++ b/frontend/src/scenes/session-recordings/playlist/SessionRecordingsPlaylistTroubleshooting.tsx @@ -1,6 +1,7 @@ -import { LemonButton, LemonDivider, Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' +import { LemonButton, LemonDivider, Link } from '@posthog/lemon-ui' + import { playerSettingsLogic } from '../player/playerSettingsLogic' import { sessionRecordingsPlaylistLogic } from './sessionRecordingsPlaylistLogic' diff --git a/frontend/src/scenes/session-recordings/playlist/playlistLogic.ts b/frontend/src/scenes/session-recordings/playlist/playlistLogic.ts index 9457f88660..b02d036ff0 100644 --- a/frontend/src/scenes/session-recordings/playlist/playlistLogic.ts +++ b/frontend/src/scenes/session-recordings/playlist/playlistLogic.ts @@ -1,5 +1,6 @@ import { actions, kea, path, reducers } from 'kea' import { actionToUrl, router, urlToAction } from 'kea-router' + import { urls } from 'scenes/urls' import { ReplayTabs } from '~/types' diff --git a/frontend/src/scenes/session-recordings/playlist/playlistUtils.ts b/frontend/src/scenes/session-recordings/playlist/playlistUtils.ts index b337c42d4b..7813c7f04f 100644 --- a/frontend/src/scenes/session-recordings/playlist/playlistUtils.ts +++ b/frontend/src/scenes/session-recordings/playlist/playlistUtils.ts @@ -1,4 +1,5 @@ import { router } from 'kea-router' + import api from 'lib/api' import { convertPropertyGroupToProperties, isValidPropertyFilter } from 'lib/components/PropertyFilters/utils' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' diff --git a/frontend/src/scenes/session-recordings/playlist/sessionRecordingsListPropertiesLogic.test.ts b/frontend/src/scenes/session-recordings/playlist/sessionRecordingsListPropertiesLogic.test.ts index 641ebf6561..6bffd12ab7 100644 --- a/frontend/src/scenes/session-recordings/playlist/sessionRecordingsListPropertiesLogic.test.ts +++ b/frontend/src/scenes/session-recordings/playlist/sessionRecordingsListPropertiesLogic.test.ts @@ -1,4 +1,5 @@ import { expectLogic } from 'kea-test-utils' + import { sessionRecordingsListPropertiesLogic } from 'scenes/session-recordings/playlist/sessionRecordingsListPropertiesLogic' import { useMocks } from '~/mocks/jest' diff --git a/frontend/src/scenes/session-recordings/playlist/sessionRecordingsListPropertiesLogic.ts b/frontend/src/scenes/session-recordings/playlist/sessionRecordingsListPropertiesLogic.ts index d914da3c5e..2e544117c6 100644 --- a/frontend/src/scenes/session-recordings/playlist/sessionRecordingsListPropertiesLogic.ts +++ b/frontend/src/scenes/session-recordings/playlist/sessionRecordingsListPropertiesLogic.ts @@ -1,5 +1,6 @@ import { actions, connect, kea, listeners, path, reducers } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { dayjs } from 'lib/dayjs' import { sessionRecordingEventUsageLogic } from 'scenes/session-recordings/sessionRecordingEventUsageLogic' @@ -9,6 +10,7 @@ import { CORE_FILTER_DEFINITIONS_BY_GROUP } from '~/taxonomy/taxonomy' import { SessionRecordingPropertiesType, SessionRecordingType } from '~/types' import type { sessionRecordingsListPropertiesLogicType } from './sessionRecordingsListPropertiesLogicType' + // This logic is used to fetch properties for a list of recordings // It is used in a global way as the cached values can be re-used export const sessionRecordingsListPropertiesLogic = kea([ diff --git a/frontend/src/scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic.test.ts b/frontend/src/scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic.test.ts index f9453a0cf6..689a3877ec 100644 --- a/frontend/src/scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic.test.ts +++ b/frontend/src/scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic.test.ts @@ -1,5 +1,6 @@ import { router } from 'kea-router' import { expectLogic } from 'kea-test-utils' + import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { useMocks } from '~/mocks/jest' @@ -9,9 +10,9 @@ import { FilterLogicalOperator, PropertyFilterType, PropertyOperator } from '~/t import { sessionRecordingDataLogic } from '../player/sessionRecordingDataLogic' import { playlistLogic } from './playlistLogic' import { + DEFAULT_RECORDING_FILTERS, convertLegacyFiltersToUniversalFilters, convertUniversalFiltersToRecordingsQuery, - DEFAULT_RECORDING_FILTERS, sessionRecordingsPlaylistLogic, } from './sessionRecordingsPlaylistLogic' diff --git a/frontend/src/scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic.ts b/frontend/src/scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic.ts index b4305b1128..9d4c855dd9 100644 --- a/frontend/src/scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic.ts +++ b/frontend/src/scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic.ts @@ -2,6 +2,10 @@ import equal from 'fast-deep-equal' import { actions, afterMount, connect, kea, key, listeners, path, props, propsChanged, reducers, selectors } from 'kea' import { lazyLoaders, loaders } from 'kea-loaders' import { actionToUrl, router, urlToAction } from 'kea-router' +import posthog from 'posthog-js' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { isAnyPropertyfilter, isHogQLPropertyFilter } from 'lib/components/PropertyFilters/utils' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' @@ -17,10 +21,11 @@ import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { objectClean, objectsEqual } from 'lib/utils' import { getCurrentTeamId } from 'lib/utils/getAppContext' -import posthog from 'posthog-js' +import { createPlaylist } from 'scenes/session-recordings/playlist/playlistUtils' import { sessionRecordingEventUsageLogic } from 'scenes/session-recordings/sessionRecordingEventUsageLogic' +import { urls } from 'scenes/urls' -import { activationLogic, ActivationTask } from '~/layout/navigation-3000/sidepanel/panels/activation/activationLogic' +import { ActivationTask, activationLogic } from '~/layout/navigation-3000/sidepanel/panels/activation/activationLogic' import { groupsModel } from '~/models/groupsModel' import { NodeKind, RecordingOrder, RecordingsQuery, RecordingsQueryResponse } from '~/queries/schema/schema-general' import { @@ -42,10 +47,7 @@ import { filtersFromUniversalFilterGroups } from '../utils' import { playlistLogic } from './playlistLogic' import { sessionRecordingsListPropertiesLogic } from './sessionRecordingsListPropertiesLogic' import type { sessionRecordingsPlaylistLogicType } from './sessionRecordingsPlaylistLogicType' -import { lemonToast } from '@posthog/lemon-ui' import { sessionRecordingsPlaylistSceneLogic } from './sessionRecordingsPlaylistSceneLogic' -import { urls } from 'scenes/urls' -import { createPlaylist } from 'scenes/session-recordings/playlist/playlistUtils' export type PersonUUID = string diff --git a/frontend/src/scenes/session-recordings/playlist/sessionRecordingsPlaylistSceneLogic.test.ts b/frontend/src/scenes/session-recordings/playlist/sessionRecordingsPlaylistSceneLogic.test.ts index 4eecf62e66..b98ac6b075 100644 --- a/frontend/src/scenes/session-recordings/playlist/sessionRecordingsPlaylistSceneLogic.test.ts +++ b/frontend/src/scenes/session-recordings/playlist/sessionRecordingsPlaylistSceneLogic.test.ts @@ -1,4 +1,5 @@ import { expectLogic } from 'kea-test-utils' + import { sessionRecordingsPlaylistSceneLogic } from 'scenes/session-recordings/playlist/sessionRecordingsPlaylistSceneLogic' import { useMocks } from '~/mocks/jest' diff --git a/frontend/src/scenes/session-recordings/playlist/sessionRecordingsPlaylistSceneLogic.ts b/frontend/src/scenes/session-recordings/playlist/sessionRecordingsPlaylistSceneLogic.ts index 6ba7a6eac2..fd386cde67 100644 --- a/frontend/src/scenes/session-recordings/playlist/sessionRecordingsPlaylistSceneLogic.ts +++ b/frontend/src/scenes/session-recordings/playlist/sessionRecordingsPlaylistSceneLogic.ts @@ -1,8 +1,10 @@ -import { lemonToast } from '@posthog/lemon-ui' import equal from 'fast-deep-equal' import { actions, afterMount, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { beforeUnload, router, urlToAction } from 'kea-router' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { removeProjectIdIfPresent } from 'lib/utils/router-utils' import { sceneLogic } from 'scenes/sceneLogic' @@ -32,7 +34,7 @@ import { import { addRecordingToPlaylist, removeRecordingFromPlaylist } from '../player/utils/playerUtils' import { filtersFromUniversalFilterGroups, isUniversalFilters } from '../utils' -import { convertLegacyFiltersToUniversalFilters, PINNED_RECORDINGS_LIMIT } from './sessionRecordingsPlaylistLogic' +import { PINNED_RECORDINGS_LIMIT, convertLegacyFiltersToUniversalFilters } from './sessionRecordingsPlaylistLogic' import type { sessionRecordingsPlaylistSceneLogicType } from './sessionRecordingsPlaylistSceneLogicType' export interface SessionRecordingsPlaylistLogicProps { diff --git a/frontend/src/scenes/session-recordings/replayPaletteCommands.ts b/frontend/src/scenes/session-recordings/replayPaletteCommands.ts index ff988498b2..f5f15da2b8 100644 --- a/frontend/src/scenes/session-recordings/replayPaletteCommands.ts +++ b/frontend/src/scenes/session-recordings/replayPaletteCommands.ts @@ -1,4 +1,5 @@ import { IconRewindPlay } from '@posthog/icons' + import { Command, GLOBAL_COMMAND_SCOPE } from 'lib/components/CommandPalette/commandPaletteLogic' import { isURL } from 'lib/utils' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/session-recordings/saved-playlists/SavedSessionRecordingPlaylists.tsx b/frontend/src/scenes/session-recordings/saved-playlists/SavedSessionRecordingPlaylists.tsx index f2b23c8c8a..94d6549abc 100644 --- a/frontend/src/scenes/session-recordings/saved-playlists/SavedSessionRecordingPlaylists.tsx +++ b/frontend/src/scenes/session-recordings/saved-playlists/SavedSessionRecordingPlaylists.tsx @@ -1,15 +1,17 @@ -import { IconCalendar, IconPin, IconPinFilled } from '@posthog/icons' -import { LemonBadge, LemonButton, LemonDivider, LemonInput, LemonTable, Link, Tooltip } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' + +import { IconCalendar, IconPin, IconPinFilled } from '@posthog/icons' +import { LemonBadge, LemonButton, LemonDivider, LemonInput, LemonTable, Link, Tooltip } from '@posthog/lemon-ui' + import { DateFilter } from 'lib/components/DateFilter/DateFilter' import { MemberSelect } from 'lib/components/MemberSelect' import { TZLabel } from 'lib/components/TZLabel' import { useFeatureFlag } from 'lib/hooks/useFeatureFlag' -import { IconArrowUp } from 'lib/lemon-ui/icons' import { More } from 'lib/lemon-ui/LemonButton/More' import { LemonTableColumn, LemonTableColumns } from 'lib/lemon-ui/LemonTable' import { createdByColumn } from 'lib/lemon-ui/LemonTable/columnUtils' +import { IconArrowUp } from 'lib/lemon-ui/icons' import { isObject } from 'lib/utils' import { SavedSessionRecordingPlaylistsEmptyState } from 'scenes/session-recordings/saved-playlists/SavedSessionRecordingPlaylistsEmptyState' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/session-recordings/saved-playlists/SavedSessionRecordingPlaylistsEmptyState.tsx b/frontend/src/scenes/session-recordings/saved-playlists/SavedSessionRecordingPlaylistsEmptyState.tsx index 787b9cc3d9..bb31b3f8fd 100644 --- a/frontend/src/scenes/session-recordings/saved-playlists/SavedSessionRecordingPlaylistsEmptyState.tsx +++ b/frontend/src/scenes/session-recordings/saved-playlists/SavedSessionRecordingPlaylistsEmptyState.tsx @@ -1,5 +1,7 @@ -import { IconPlus } from '@posthog/icons' import { useValues } from 'kea' + +import { IconPlus } from '@posthog/icons' + import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { LemonButton } from 'lib/lemon-ui/LemonButton' diff --git a/frontend/src/scenes/session-recordings/saved-playlists/savedSessionRecordingPlaylistsLogic.test.ts b/frontend/src/scenes/session-recordings/saved-playlists/savedSessionRecordingPlaylistsLogic.test.ts index 4f62d734f3..4ce379ed0b 100644 --- a/frontend/src/scenes/session-recordings/saved-playlists/savedSessionRecordingPlaylistsLogic.test.ts +++ b/frontend/src/scenes/session-recordings/saved-playlists/savedSessionRecordingPlaylistsLogic.test.ts @@ -1,5 +1,6 @@ import { router } from 'kea-router' import { expectLogic } from 'kea-test-utils' + import { DEFAULT_PLAYLIST_FILTERS, PLAYLISTS_PER_PAGE, diff --git a/frontend/src/scenes/session-recordings/saved-playlists/savedSessionRecordingPlaylistsLogic.ts b/frontend/src/scenes/session-recordings/saved-playlists/savedSessionRecordingPlaylistsLogic.ts index f434763db5..d376559840 100644 --- a/frontend/src/scenes/session-recordings/saved-playlists/savedSessionRecordingPlaylistsLogic.ts +++ b/frontend/src/scenes/session-recordings/saved-playlists/savedSessionRecordingPlaylistsLogic.ts @@ -1,14 +1,16 @@ -import { lemonToast } from '@posthog/lemon-ui' import { actions, afterMount, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { actionToUrl, router, urlToAction } from 'kea-router' +import posthog from 'posthog-js' + +import { lemonToast } from '@posthog/lemon-ui' + import api, { PaginatedResponse } from 'lib/api' import { dayjs } from 'lib/dayjs' import { Sorting } from 'lib/lemon-ui/LemonTable' import { PaginationManual } from 'lib/lemon-ui/PaginationControl' import { objectClean, objectsEqual, toParams } from 'lib/utils' import { removeProjectIdIfPresent } from 'lib/utils/router-utils' -import posthog from 'posthog-js' import { sessionRecordingEventUsageLogic } from 'scenes/session-recordings/sessionRecordingEventUsageLogic' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/session-recordings/sessionRecordingEventUsageLogic.ts b/frontend/src/scenes/session-recordings/sessionRecordingEventUsageLogic.ts index 7139d801e3..8f99afd538 100644 --- a/frontend/src/scenes/session-recordings/sessionRecordingEventUsageLogic.ts +++ b/frontend/src/scenes/session-recordings/sessionRecordingEventUsageLogic.ts @@ -1,7 +1,8 @@ import { actions, connect, kea, listeners, path } from 'kea' +import posthog from 'posthog-js' + import { isLogEntryPropertyFilter, isValidPropertyFilter } from 'lib/components/PropertyFilters/utils' import { isActionFilter, isEventFilter } from 'lib/components/UniversalFilters/utils' -import posthog from 'posthog-js' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { MiniFilterKey } from 'scenes/session-recordings/player/inspector/miniFiltersLogic' import { InspectorListItemType } from 'scenes/session-recordings/player/inspector/playerInspectorLogic' diff --git a/frontend/src/scenes/session-recordings/settings/SessionRecordingsSettingsScene.tsx b/frontend/src/scenes/session-recordings/settings/SessionRecordingsSettingsScene.tsx index 09f6e2642f..ec41082af1 100644 --- a/frontend/src/scenes/session-recordings/settings/SessionRecordingsSettingsScene.tsx +++ b/frontend/src/scenes/session-recordings/settings/SessionRecordingsSettingsScene.tsx @@ -1,5 +1,6 @@ import { kea, path, selectors } from 'kea' import { router } from 'kea-router' + import { LemonTabs } from 'lib/lemon-ui/LemonTabs' import { Scene, SceneExport } from 'scenes/sceneTypes' import { Settings } from 'scenes/settings/Settings' diff --git a/frontend/src/scenes/session-recordings/templates/SessionRecordingTemplates.tsx b/frontend/src/scenes/session-recordings/templates/SessionRecordingTemplates.tsx index 857d9bc899..734163a062 100644 --- a/frontend/src/scenes/session-recordings/templates/SessionRecordingTemplates.tsx +++ b/frontend/src/scenes/session-recordings/templates/SessionRecordingTemplates.tsx @@ -1,5 +1,7 @@ -import { LemonButton, LemonCard, LemonInput, LemonLabel, Link } from '@posthog/lemon-ui' import { useActions, useMountedLogic, useValues } from 'kea' + +import { LemonButton, LemonCard, LemonInput, LemonLabel, Link } from '@posthog/lemon-ui' + import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import UniversalFilters from 'lib/components/UniversalFilters/UniversalFilters' import { universalFiltersLogic } from 'lib/components/UniversalFilters/universalFiltersLogic' diff --git a/frontend/src/scenes/session-recordings/templates/availableTemplates.tsx b/frontend/src/scenes/session-recordings/templates/availableTemplates.tsx index 04520ca8af..b5e42c926f 100644 --- a/frontend/src/scenes/session-recordings/templates/availableTemplates.tsx +++ b/frontend/src/scenes/session-recordings/templates/availableTemplates.tsx @@ -9,6 +9,7 @@ import { IconUser, IconVideoCamera, } from '@posthog/icons' + import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { PropertyFilterType, PropertyOperator, ReplayTemplateType } from '~/types' diff --git a/frontend/src/scenes/session-recordings/templates/sessionRecordingTemplatesLogic.tsx b/frontend/src/scenes/session-recordings/templates/sessionRecordingTemplatesLogic.tsx index f3670642e3..4738e19d0d 100644 --- a/frontend/src/scenes/session-recordings/templates/sessionRecordingTemplatesLogic.tsx +++ b/frontend/src/scenes/session-recordings/templates/sessionRecordingTemplatesLogic.tsx @@ -2,6 +2,7 @@ import clsx from 'clsx' import { actions, connect, events, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { router } from 'kea-router' import posthog from 'posthog-js' + import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/session-recordings/utils.test.ts b/frontend/src/scenes/session-recordings/utils.test.ts index dddb31bf28..dbe712b9af 100644 --- a/frontend/src/scenes/session-recordings/utils.test.ts +++ b/frontend/src/scenes/session-recordings/utils.test.ts @@ -1,5 +1,5 @@ -import { isSingleEmoji } from 'scenes/session-recordings/utils' import { defaultQuickEmojis } from 'lib/lemon-ui/LemonTextArea/emojiUsageLogic' +import { isSingleEmoji } from 'scenes/session-recordings/utils' describe('session recording utils', () => { defaultQuickEmojis.forEach((quickEmoji) => { diff --git a/frontend/src/scenes/session-recordings/utils.ts b/frontend/src/scenes/session-recordings/utils.ts index 28e139c21e..316da3e7ef 100644 --- a/frontend/src/scenes/session-recordings/utils.ts +++ b/frontend/src/scenes/session-recordings/utils.ts @@ -1,11 +1,12 @@ import emojiRegex from 'emoji-regex' + import { LegacyRecordingFilters, RecordingUniversalFilters, type SessionRecordingMaskingConfig, type SessionRecordingMaskingLevel, - UniversalFiltersGroup, UniversalFilterValue, + UniversalFiltersGroup, } from '~/types' export const TimestampFormatToLabel = { diff --git a/frontend/src/scenes/settings/Settings.tsx b/frontend/src/scenes/settings/Settings.tsx index 327fcfa6fa..5f2e675d64 100644 --- a/frontend/src/scenes/settings/Settings.tsx +++ b/frontend/src/scenes/settings/Settings.tsx @@ -1,16 +1,18 @@ import './Settings.scss' -import { IconExternal } from '@posthog/icons' -import { LemonBanner, LemonButton, LemonButtonProps, LemonDivider } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' import { router } from 'kea-router' +import React from 'react' + +import { IconExternal } from '@posthog/icons' +import { LemonBanner, LemonButton, LemonButtonProps, LemonDivider } from '@posthog/lemon-ui' + import { NotFound } from 'lib/components/NotFound' import { TimeSensitiveAuthenticationArea } from 'lib/components/TimeSensitiveAuthentication/TimeSensitiveAuthentication' import { useResizeBreakpoints } from 'lib/hooks/useResizeObserver' import { IconChevronRight, IconLink } from 'lib/lemon-ui/icons' import { inStorybookTestRunner } from 'lib/utils' -import React from 'react' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/settings/SettingsMap.tsx b/frontend/src/scenes/settings/SettingsMap.tsx index 16439179d4..f46b550bc2 100644 --- a/frontend/src/scenes/settings/SettingsMap.tsx +++ b/frontend/src/scenes/settings/SettingsMap.tsx @@ -1,6 +1,6 @@ import { LemonTag, Link, Tooltip } from '@posthog/lemon-ui' -import { ErrorTrackingAlerting } from '@posthog/products-error-tracking/frontend/configuration/alerting/ErrorTrackingAlerting' import { ExceptionAutocaptureSettings } from '@posthog/products-error-tracking/frontend/configuration/ExceptionAutocaptureSettings' +import { ErrorTrackingAlerting } from '@posthog/products-error-tracking/frontend/configuration/alerting/ErrorTrackingAlerting' import { ErrorTrackingAutoAssignment } from '@posthog/products-error-tracking/frontend/configuration/rules/ErrorTrackingAutoAssignment' import { ErrorTrackingCustomGrouping } from '@posthog/products-error-tracking/frontend/configuration/rules/ErrorTrackingCustomGrouping' import { ErrorTrackingSymbolSets } from '@posthog/products-error-tracking/frontend/configuration/symbol-sets/ErrorTrackingSymbolSets' @@ -8,6 +8,7 @@ import { EventConfiguration } from '@posthog/products-revenue-analytics/frontend import { ExternalDataSourceConfiguration } from '@posthog/products-revenue-analytics/frontend/settings/ExternalDataSourceConfiguration' import { FilterTestAccountsConfiguration as RevenueAnalyticsFilterTestAccountsConfiguration } from '@posthog/products-revenue-analytics/frontend/settings/FilterTestAccountsConfiguration' import { GoalsConfiguration } from '@posthog/products-revenue-analytics/frontend/settings/GoalsConfiguration' + import { BaseCurrency } from 'lib/components/BaseCurrency/BaseCurrency' import { OrganizationMembershipLevel } from 'lib/constants' import { dayjs } from 'lib/dayjs' @@ -30,20 +31,22 @@ import { MarketingAnalyticsSettings } from 'scenes/web-analytics/tabs/marketing- import { RolesAccessControls } from '~/layout/navigation-3000/sidepanel/panels/access_control/RolesAccessControls' import { Realm } from '~/types' +import { IntegrationsList } from '../../lib/integrations/IntegrationsList' import { AutocaptureSettings, WebVitalsAutocaptureSettings } from './environment/AutocaptureSettings' -import { CorrelationConfig } from './environment/CorrelationConfig' +import { CRMUsageMetricsConfig } from './environment/CRMUsageMetricsConfig' import { CSPReportingSettings } from './environment/CSPReportingSettings' +import { CorrelationConfig } from './environment/CorrelationConfig' import { DataAttributes } from './environment/DataAttributes' import { DataColorThemes } from './environment/DataColorThemes' import { ErrorTrackingIntegrations } from './environment/ErrorTrackingIntegrations' import { FeatureFlagSettings } from './environment/FeatureFlagSettings' +import { FeaturePreviewsSettings } from './environment/FeaturePreviewsSettings' import { GroupAnalyticsConfig } from './environment/GroupAnalyticsConfig' import { HeatmapsSettings } from './environment/HeatmapsSettings' import { HumanFriendlyComparisonPeriodsSetting } from './environment/HumanFriendlyComparisonPeriodsSetting' import { IPAllowListInfo } from './environment/IPAllowListInfo' import { IPCapture } from './environment/IPCapture' import { ManagedReverseProxy } from './environment/ManagedReverseProxy' -import { IntegrationsList } from '../../lib/integrations/IntegrationsList' import { PathCleaningFiltersConfig } from './environment/PathCleaningFiltersConfig' import { PersonDisplayNameProperties } from './environment/PersonDisplayNameProperties' import { @@ -70,12 +73,12 @@ import { WebhookIntegration } from './environment/WebhookIntegration' import { Invites } from './organization/Invites' import { Members } from './organization/Members' import { OrganizationAI } from './organization/OrgAI' -import { OrganizationDangerZone } from './organization/OrganizationDangerZone' import { OrganizationDisplayName } from './organization/OrgDisplayName' import { OrganizationEmailPreferences } from './organization/OrgEmailPreferences' import { OrganizationExperimentStatsMethod } from './organization/OrgExperimentStatsMethod' -import { OrganizationSecuritySettings } from './organization/OrganizationSecuritySettings' import { OrganizationLogo } from './organization/OrgLogo' +import { OrganizationDangerZone } from './organization/OrganizationDangerZone' +import { OrganizationSecuritySettings } from './organization/OrganizationSecuritySettings' import { VerifiedDomains } from './organization/VerifiedDomains/VerifiedDomains' import { ProjectDangerZone } from './project/ProjectDangerZone' import { ProjectMove } from './project/ProjectMove' @@ -90,8 +93,6 @@ import { TwoFactorSettings } from './user/TwoFactorSettings' import { UpdateEmailPreferences } from './user/UpdateEmailPreferences' import { UserDangerZone } from './user/UserDangerZone' import { UserDetails } from './user/UserDetails' -import { FeaturePreviewsSettings } from './environment/FeaturePreviewsSettings' -import { CRMUsageMetricsConfig } from './environment/CRMUsageMetricsConfig' export const SETTINGS_MAP: SettingSection[] = [ // ENVIRONMENT diff --git a/frontend/src/scenes/settings/SettingsScene.tsx b/frontend/src/scenes/settings/SettingsScene.tsx index c349a72dc5..676d4cf3ad 100644 --- a/frontend/src/scenes/settings/SettingsScene.tsx +++ b/frontend/src/scenes/settings/SettingsScene.tsx @@ -1,5 +1,6 @@ import { useValues } from 'kea' import { router } from 'kea-router' + import { useAnchor } from 'lib/hooks/useAnchor' import { SceneExport } from 'scenes/sceneTypes' diff --git a/frontend/src/scenes/settings/environment/AddMembersModal.tsx b/frontend/src/scenes/settings/environment/AddMembersModal.tsx index 9d6c194b36..cdac7d4203 100644 --- a/frontend/src/scenes/settings/environment/AddMembersModal.tsx +++ b/frontend/src/scenes/settings/environment/AddMembersModal.tsx @@ -1,7 +1,9 @@ -import { IconPlus } from '@posthog/icons' -import { LemonButton, LemonModal, LemonSelect, LemonSelectOption } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' + +import { IconPlus } from '@posthog/icons' +import { LemonButton, LemonModal, LemonSelect, LemonSelectOption } from '@posthog/lemon-ui' + import { upgradeModalLogic } from 'lib/components/UpgradeModal/upgradeModalLogic' import { usersLemonSelectOptions } from 'lib/components/UserSelectItem' import { TeamMembershipLevel } from 'lib/constants' diff --git a/frontend/src/scenes/settings/environment/AutocaptureSettings.tsx b/frontend/src/scenes/settings/environment/AutocaptureSettings.tsx index 2e75f168e1..ce6bfbd72c 100644 --- a/frontend/src/scenes/settings/environment/AutocaptureSettings.tsx +++ b/frontend/src/scenes/settings/environment/AutocaptureSettings.tsx @@ -1,7 +1,9 @@ -import { LemonDivider, LemonSwitch, Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' -import { eventUsageLogic } from 'lib/utils/eventUsageLogic' import { SupportedWebVitalsMetrics } from 'posthog-js' + +import { LemonDivider, LemonSwitch, Link } from '@posthog/lemon-ui' + +import { eventUsageLogic } from 'lib/utils/eventUsageLogic' import { teamLogic } from 'scenes/teamLogic' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/scenes/settings/environment/BounceRateDuration.tsx b/frontend/src/scenes/settings/environment/BounceRateDuration.tsx index 9d89a94ee7..3c2389b651 100644 --- a/frontend/src/scenes/settings/environment/BounceRateDuration.tsx +++ b/frontend/src/scenes/settings/environment/BounceRateDuration.tsx @@ -1,8 +1,10 @@ -import { IconX } from '@posthog/icons' import { useActions, useValues } from 'kea' +import React, { useState } from 'react' + +import { IconX } from '@posthog/icons' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonInput } from 'lib/lemon-ui/LemonInput' -import React, { useState } from 'react' import { teamLogic } from 'scenes/teamLogic' const MIN_BOUNCE_RATE_DURATION = 1 diff --git a/frontend/src/scenes/settings/environment/BounceRatePageViewMode.tsx b/frontend/src/scenes/settings/environment/BounceRatePageViewMode.tsx index 37e569ecaa..398022dc30 100644 --- a/frontend/src/scenes/settings/environment/BounceRatePageViewMode.tsx +++ b/frontend/src/scenes/settings/environment/BounceRatePageViewMode.tsx @@ -1,8 +1,9 @@ import { useActions, useValues } from 'kea' +import { useState } from 'react' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonRadio, LemonRadioOption } from 'lib/lemon-ui/LemonRadio' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' -import { useState } from 'react' import { teamLogic } from 'scenes/teamLogic' import { HogQLQueryModifiers } from '~/queries/schema/schema-general' diff --git a/frontend/src/scenes/settings/environment/CRMUsageMetricsConfig.tsx b/frontend/src/scenes/settings/environment/CRMUsageMetricsConfig.tsx index 8b408bfa8f..e3c69ac287 100644 --- a/frontend/src/scenes/settings/environment/CRMUsageMetricsConfig.tsx +++ b/frontend/src/scenes/settings/environment/CRMUsageMetricsConfig.tsx @@ -1,23 +1,27 @@ +import { useActions, useValues } from 'kea' +import { Form, capitalizeFirstLetter } from 'kea-forms' + import { IconEllipsis, IconPlus } from '@posthog/icons' import { LemonButton, LemonDialog, LemonInput, + LemonMenu, LemonSelect, LemonTable, LemonTableColumns, - LemonMenu, } from '@posthog/lemon-ui' -import { capitalizeFirstLetter, Form } from 'kea-forms' + import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { LemonField } from 'lib/lemon-ui/LemonField' import { LemonTabs } from 'lib/lemon-ui/LemonTabs' import { ActionFilter } from 'scenes/insights/filters/ActionFilter/ActionFilter' import { MathAvailability } from 'scenes/insights/filters/ActionFilter/ActionFilterRow/ActionFilterRow' -import { EntityTypes } from '~/types' -import { crmUsageMetricsConfigLogic, UsageMetric } from './crmUsageMetricsConfigLogic' -import { useActions, useValues } from 'kea' + import { groupsModel } from '~/models/groupsModel' +import { EntityTypes } from '~/types' + +import { UsageMetric, crmUsageMetricsConfigLogic } from './crmUsageMetricsConfigLogic' function CRMUsageMetricsTable(): JSX.Element { const { currentGroupTypeUsageMetrics, usageMetricsLoading } = useValues(crmUsageMetricsConfigLogic) diff --git a/frontend/src/scenes/settings/environment/CSPReportingSettings.tsx b/frontend/src/scenes/settings/environment/CSPReportingSettings.tsx index a1557326f7..4f1e570c6e 100644 --- a/frontend/src/scenes/settings/environment/CSPReportingSettings.tsx +++ b/frontend/src/scenes/settings/environment/CSPReportingSettings.tsx @@ -1,9 +1,11 @@ -import { IconInfo } from '@posthog/icons' -import { LemonBanner, LemonCheckbox, Link } from '@posthog/lemon-ui' import { useValues } from 'kea' import { combineUrl } from 'kea-router' -import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { useState } from 'react' + +import { IconInfo } from '@posthog/icons' +import { LemonBanner, LemonCheckbox, Link } from '@posthog/lemon-ui' + +import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { domainFor, proxyLogic } from 'scenes/settings/environment/proxyLogic' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/settings/environment/CookielessServerHashMode.tsx b/frontend/src/scenes/settings/environment/CookielessServerHashMode.tsx index 57cd21e0ff..e026e551a8 100644 --- a/frontend/src/scenes/settings/environment/CookielessServerHashMode.tsx +++ b/frontend/src/scenes/settings/environment/CookielessServerHashMode.tsx @@ -1,7 +1,8 @@ import { useActions, useValues } from 'kea' +import { useState } from 'react' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonRadio, LemonRadioOption } from 'lib/lemon-ui/LemonRadio' -import { useState } from 'react' import { teamLogic } from 'scenes/teamLogic' import { CookielessServerHashMode } from '~/types' diff --git a/frontend/src/scenes/settings/environment/CorrelationConfig.tsx b/frontend/src/scenes/settings/environment/CorrelationConfig.tsx index 7f48c117c1..dcde456691 100644 --- a/frontend/src/scenes/settings/environment/CorrelationConfig.tsx +++ b/frontend/src/scenes/settings/environment/CorrelationConfig.tsx @@ -1,12 +1,14 @@ +import { useActions, useValues } from 'kea' + import { IconPlus } from '@posthog/icons' import { LemonButton } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { EventSelect } from 'lib/components/EventSelect/EventSelect' import { PropertySelect } from 'lib/components/PropertySelect/PropertySelect' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' -import { IconSelectEvents, IconSelectProperties } from 'lib/lemon-ui/icons' import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { LemonInputSelect } from 'lib/lemon-ui/LemonInputSelect/LemonInputSelect' +import { IconSelectEvents, IconSelectProperties } from 'lib/lemon-ui/icons' import { teamLogic } from 'scenes/teamLogic' export function CorrelationConfig(): JSX.Element { diff --git a/frontend/src/scenes/settings/environment/CustomChannelTypes.tsx b/frontend/src/scenes/settings/environment/CustomChannelTypes.tsx index 256d210774..1018cbe16a 100644 --- a/frontend/src/scenes/settings/environment/CustomChannelTypes.tsx +++ b/frontend/src/scenes/settings/environment/CustomChannelTypes.tsx @@ -1,15 +1,17 @@ -import { IconPlus } from '@posthog/icons' import { useActions, useValues } from 'kea' +import isEqual from 'lodash.isequal' +import { useMemo, useState } from 'react' + +import { IconPlus } from '@posthog/icons' + import { PropertyValue } from 'lib/components/PropertyFilters/components/PropertyValue' import { VerticalNestedDND } from 'lib/components/VerticalNestedDND/VerticalNestedDND' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonInputSelect, LemonInputSelectOption } from 'lib/lemon-ui/LemonInputSelect' import { LemonSelect } from 'lib/lemon-ui/LemonSelect' import { Link } from 'lib/lemon-ui/Link' -import { genericOperatorMap, UnexpectedNeverError, uuid } from 'lib/utils' +import { UnexpectedNeverError, genericOperatorMap, uuid } from 'lib/utils' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' -import isEqual from 'lodash.isequal' -import { useMemo, useState } from 'react' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/settings/environment/DataAttributes.tsx b/frontend/src/scenes/settings/environment/DataAttributes.tsx index 642deb5e27..0df5e17eac 100644 --- a/frontend/src/scenes/settings/environment/DataAttributes.tsx +++ b/frontend/src/scenes/settings/environment/DataAttributes.tsx @@ -1,7 +1,9 @@ -import { LemonButton, LemonSkeleton, Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' -import { LemonInputSelect } from 'lib/lemon-ui/LemonInputSelect/LemonInputSelect' import { useEffect, useState } from 'react' + +import { LemonButton, LemonSkeleton, Link } from '@posthog/lemon-ui' + +import { LemonInputSelect } from 'lib/lemon-ui/LemonInputSelect/LemonInputSelect' import { teamLogic } from 'scenes/teamLogic' export function DataAttributes(): JSX.Element { diff --git a/frontend/src/scenes/settings/environment/DataColorThemeModal.tsx b/frontend/src/scenes/settings/environment/DataColorThemeModal.tsx index d6226a4a53..5f5b386de2 100644 --- a/frontend/src/scenes/settings/environment/DataColorThemeModal.tsx +++ b/frontend/src/scenes/settings/environment/DataColorThemeModal.tsx @@ -1,7 +1,9 @@ -import { IconCopy, IconPlus, IconTrash } from '@posthog/icons' -import { LemonButton, LemonColorGlyph, LemonInput, LemonLabel, LemonModal, LemonTable } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' + +import { IconCopy, IconPlus, IconTrash } from '@posthog/icons' +import { LemonButton, LemonColorGlyph, LemonInput, LemonLabel, LemonModal, LemonTable } from '@posthog/lemon-ui' + import { LemonField } from 'lib/lemon-ui/LemonField' import { dataColorThemesModalLogic } from './dataColorThemeModalLogic' diff --git a/frontend/src/scenes/settings/environment/DataColorThemes.tsx b/frontend/src/scenes/settings/environment/DataColorThemes.tsx index 4eab884f9a..42af0289f0 100644 --- a/frontend/src/scenes/settings/environment/DataColorThemes.tsx +++ b/frontend/src/scenes/settings/environment/DataColorThemes.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconBadge } from '@posthog/icons' import { LemonButton, LemonDialog, LemonLabel, LemonSelect, LemonTable, Link } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { PayGateMini } from 'lib/components/PayGateMini/PayGateMini' import { LemonTableLink } from 'lib/lemon-ui/LemonTable/LemonTableLink' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/settings/environment/DeadClicksAutocaptureSettings.tsx b/frontend/src/scenes/settings/environment/DeadClicksAutocaptureSettings.tsx index ed2aa5d11b..0e7867557a 100644 --- a/frontend/src/scenes/settings/environment/DeadClicksAutocaptureSettings.tsx +++ b/frontend/src/scenes/settings/environment/DeadClicksAutocaptureSettings.tsx @@ -1,6 +1,8 @@ -import { LemonSwitch } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import posthog from 'posthog-js' + +import { LemonSwitch } from '@posthog/lemon-ui' + import { teamLogic } from 'scenes/teamLogic' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/scenes/settings/environment/EnvironmentRollbackModal.tsx b/frontend/src/scenes/settings/environment/EnvironmentRollbackModal.tsx index 9b9ac6f66d..9a4e60c6a0 100644 --- a/frontend/src/scenes/settings/environment/EnvironmentRollbackModal.tsx +++ b/frontend/src/scenes/settings/environment/EnvironmentRollbackModal.tsx @@ -1,9 +1,11 @@ -import { LemonButton, LemonCollapse, LemonModal, LemonSelect, Spinner } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonButton, LemonCollapse, LemonModal, LemonSelect, Spinner } from '@posthog/lemon-ui' + import { UploadedLogo } from 'lib/lemon-ui/UploadedLogo' import { pluralize } from 'lib/utils' -import { environmentRollbackModalLogic, type ProjectWithEnvironments } from './environmentRollbackModalLogic' +import { type ProjectWithEnvironments, environmentRollbackModalLogic } from './environmentRollbackModalLogic' function ModalDescription(): JSX.Element { return ( diff --git a/frontend/src/scenes/settings/environment/ErrorTrackingIntegrations.tsx b/frontend/src/scenes/settings/environment/ErrorTrackingIntegrations.tsx index fdc10f0622..45c7642225 100644 --- a/frontend/src/scenes/settings/environment/ErrorTrackingIntegrations.tsx +++ b/frontend/src/scenes/settings/environment/ErrorTrackingIntegrations.tsx @@ -1,10 +1,13 @@ -import { LemonButton } from '@posthog/lemon-ui' import { useValues } from 'kea' + +import { LemonButton } from '@posthog/lemon-ui' + import api from 'lib/api' -import { integrationsLogic } from 'lib/integrations/integrationsLogic' import { IntegrationView } from 'lib/integrations/IntegrationView' +import { integrationsLogic } from 'lib/integrations/integrationsLogic' import { getIntegrationNameFromKind } from 'lib/integrations/utils' import { urls } from 'scenes/urls' + import { IntegrationKind } from '~/types' export function ErrorTrackingIntegrations(): JSX.Element { diff --git a/frontend/src/scenes/settings/environment/FeatureFlagSettings.tsx b/frontend/src/scenes/settings/environment/FeatureFlagSettings.tsx index 0db3d925e6..2768403ca2 100644 --- a/frontend/src/scenes/settings/environment/FeatureFlagSettings.tsx +++ b/frontend/src/scenes/settings/environment/FeatureFlagSettings.tsx @@ -1,4 +1,5 @@ import { Link } from '@posthog/lemon-ui' + import { FeatureFlagSettings as BasicFeatureFlagSettings } from 'scenes/feature-flags/FeatureFlagSettings' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/settings/environment/GroupAnalyticsConfig.tsx b/frontend/src/scenes/settings/environment/GroupAnalyticsConfig.tsx index a8344b0cdc..6e682d6f0e 100644 --- a/frontend/src/scenes/settings/environment/GroupAnalyticsConfig.tsx +++ b/frontend/src/scenes/settings/environment/GroupAnalyticsConfig.tsx @@ -1,13 +1,15 @@ -import { LemonButton, LemonDialog, LemonInput, Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' -import { groupsAccessLogic, GroupsAccessStatus } from 'lib/introductions/groupsAccessLogic' + +import { IconTrash } from '@posthog/icons' +import { LemonButton, LemonDialog, LemonInput, Link } from '@posthog/lemon-ui' + +import { GroupsAccessStatus, groupsAccessLogic } from 'lib/introductions/groupsAccessLogic' import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { LemonTable, LemonTableColumns } from 'lib/lemon-ui/LemonTable' import { GroupType } from '~/types' import { groupAnalyticsConfigLogic } from './groupAnalyticsConfigLogic' -import { IconTrash } from '@posthog/icons' export function GroupAnalyticsConfig(): JSX.Element | null { const { groupTypes, groupTypesLoading, singularChanges, pluralChanges, hasChanges } = diff --git a/frontend/src/scenes/settings/environment/HeatmapsSettings.tsx b/frontend/src/scenes/settings/environment/HeatmapsSettings.tsx index c86df8f4d6..3dfcf77575 100644 --- a/frontend/src/scenes/settings/environment/HeatmapsSettings.tsx +++ b/frontend/src/scenes/settings/environment/HeatmapsSettings.tsx @@ -1,5 +1,7 @@ -import { LemonSwitch } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonSwitch } from '@posthog/lemon-ui' + import { eventUsageLogic } from 'lib/utils/eventUsageLogic' import { teamLogic } from 'scenes/teamLogic' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/scenes/settings/environment/HumanFriendlyComparisonPeriodsSetting.tsx b/frontend/src/scenes/settings/environment/HumanFriendlyComparisonPeriodsSetting.tsx index 8aad3ddb90..230e782f64 100644 --- a/frontend/src/scenes/settings/environment/HumanFriendlyComparisonPeriodsSetting.tsx +++ b/frontend/src/scenes/settings/environment/HumanFriendlyComparisonPeriodsSetting.tsx @@ -1,5 +1,7 @@ -import { LemonSwitch } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonSwitch } from '@posthog/lemon-ui' + import { teamLogic } from 'scenes/teamLogic' export function HumanFriendlyComparisonPeriodsSetting(): JSX.Element { diff --git a/frontend/src/scenes/settings/environment/IPAllowListInfo.tsx b/frontend/src/scenes/settings/environment/IPAllowListInfo.tsx index 043e09b3d1..b7e6d2451c 100644 --- a/frontend/src/scenes/settings/environment/IPAllowListInfo.tsx +++ b/frontend/src/scenes/settings/environment/IPAllowListInfo.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { CodeSnippet } from 'lib/components/CodeSnippet' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' diff --git a/frontend/src/scenes/settings/environment/IPCapture.tsx b/frontend/src/scenes/settings/environment/IPCapture.tsx index 7b12e6b062..d53f4b30a9 100644 --- a/frontend/src/scenes/settings/environment/IPCapture.tsx +++ b/frontend/src/scenes/settings/environment/IPCapture.tsx @@ -1,5 +1,7 @@ -import { LemonSwitch } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonSwitch } from '@posthog/lemon-ui' + import { teamLogic } from 'scenes/teamLogic' export function IPCapture(): JSX.Element { diff --git a/frontend/src/scenes/settings/environment/ManagedReverseProxy.tsx b/frontend/src/scenes/settings/environment/ManagedReverseProxy.tsx index e71f28291d..0c6c70a5af 100644 --- a/frontend/src/scenes/settings/environment/ManagedReverseProxy.tsx +++ b/frontend/src/scenes/settings/environment/ManagedReverseProxy.tsx @@ -1,3 +1,7 @@ +import clsx from 'clsx' +import { useActions, useValues } from 'kea' +import { Form } from 'kea-forms' + import { IconEllipsis, IconInfo } from '@posthog/icons' import { LemonBanner, @@ -11,9 +15,7 @@ import { Spinner, Tooltip, } from '@posthog/lemon-ui' -import clsx from 'clsx' -import { useActions, useValues } from 'kea' -import { Form } from 'kea-forms' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { PayGateMini } from 'lib/components/PayGateMini/PayGateMini' import { payGateMiniLogic } from 'lib/components/PayGateMini/payGateMiniLogic' @@ -24,7 +26,7 @@ import { LemonMarkdown } from 'lib/lemon-ui/LemonMarkdown' import { AvailableFeature } from '~/types' -import { proxyLogic, ProxyRecord } from './proxyLogic' +import { ProxyRecord, proxyLogic } from './proxyLogic' const statusText = { valid: 'live', diff --git a/frontend/src/scenes/settings/environment/MaxMemorySettings.tsx b/frontend/src/scenes/settings/environment/MaxMemorySettings.tsx index e61e6f0e69..4ac0ba317e 100644 --- a/frontend/src/scenes/settings/environment/MaxMemorySettings.tsx +++ b/frontend/src/scenes/settings/environment/MaxMemorySettings.tsx @@ -1,6 +1,8 @@ -import { LemonButton, LemonSkeleton, LemonTextArea } from '@posthog/lemon-ui' import { useValues } from 'kea' import { Form } from 'kea-forms' + +import { LemonButton, LemonSkeleton, LemonTextArea } from '@posthog/lemon-ui' + import { LemonField } from 'lib/lemon-ui/LemonField' import { projectLogic } from 'scenes/projectLogic' diff --git a/frontend/src/scenes/settings/environment/PathCleaningFiltersConfig.tsx b/frontend/src/scenes/settings/environment/PathCleaningFiltersConfig.tsx index 821f86da36..f954960277 100644 --- a/frontend/src/scenes/settings/environment/PathCleaningFiltersConfig.tsx +++ b/frontend/src/scenes/settings/environment/PathCleaningFiltersConfig.tsx @@ -1,14 +1,16 @@ -import { LemonInput, Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' +import { useState } from 'react' + +import { LemonInput, Link } from '@posthog/lemon-ui' + +import { PathCleanFilterAddItemButton } from 'lib/components/PathCleanFilters/PathCleanFilterAddItemButton' import { parseAliasToReadable } from 'lib/components/PathCleanFilters/PathCleanFilterItem' import { PathCleanFilters } from 'lib/components/PathCleanFilters/PathCleanFilters' import { PathCleanFiltersTable } from 'lib/components/PathCleanFilters/PathCleanFiltersTable' -import { PathCleanFilterAddItemButton } from 'lib/components/PathCleanFilters/PathCleanFilterAddItemButton' import { PathCleaningRulesDebugger } from 'lib/components/PathCleanFilters/PathCleaningRulesDebugger' import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { isValidRegexp } from 'lib/utils/regexp' -import { useState } from 'react' import { INSIGHT_TYPE_URLS } from 'scenes/insights/utils' import { teamLogic } from 'scenes/teamLogic' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/scenes/settings/environment/PersonDisplayNameProperties.tsx b/frontend/src/scenes/settings/environment/PersonDisplayNameProperties.tsx index 1f313d4852..f6834bf388 100644 --- a/frontend/src/scenes/settings/environment/PersonDisplayNameProperties.tsx +++ b/frontend/src/scenes/settings/environment/PersonDisplayNameProperties.tsx @@ -1,10 +1,12 @@ -import { LemonButton } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' +import { useEffect, useState } from 'react' + +import { LemonButton } from '@posthog/lemon-ui' + import { PropertySelect } from 'lib/components/PropertySelect/PropertySelect' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { PERSON_DEFAULT_DISPLAY_NAME_PROPERTIES } from 'lib/constants' import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' -import { useEffect, useState } from 'react' import { teamLogic } from 'scenes/teamLogic' export function PersonDisplayNameProperties(): JSX.Element { diff --git a/frontend/src/scenes/settings/environment/PersonsJoinMode.tsx b/frontend/src/scenes/settings/environment/PersonsJoinMode.tsx index 37bb63dd22..e9ece0485f 100644 --- a/frontend/src/scenes/settings/environment/PersonsJoinMode.tsx +++ b/frontend/src/scenes/settings/environment/PersonsJoinMode.tsx @@ -1,8 +1,9 @@ import { useActions, useValues } from 'kea' +import { useState } from 'react' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonRadio, LemonRadioOption } from 'lib/lemon-ui/LemonRadio' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' -import { useState } from 'react' import { teamLogic } from 'scenes/teamLogic' import { HogQLQueryModifiers } from '~/queries/schema/schema-general' diff --git a/frontend/src/scenes/settings/environment/PersonsOnEvents.tsx b/frontend/src/scenes/settings/environment/PersonsOnEvents.tsx index c5d6baaf2c..950d1cd55a 100644 --- a/frontend/src/scenes/settings/environment/PersonsOnEvents.tsx +++ b/frontend/src/scenes/settings/environment/PersonsOnEvents.tsx @@ -1,10 +1,12 @@ -import { LemonTag, Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' +import posthog from 'posthog-js' +import { useState } from 'react' + +import { LemonTag, Link } from '@posthog/lemon-ui' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonRadio, LemonRadioOption } from 'lib/lemon-ui/LemonRadio' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' -import posthog from 'posthog-js' -import { useState } from 'react' import { teamLogic } from 'scenes/teamLogic' import { HogQLQueryModifiers } from '~/queries/schema/schema-general' diff --git a/frontend/src/scenes/settings/environment/PreAggregatedTablesSetting.tsx b/frontend/src/scenes/settings/environment/PreAggregatedTablesSetting.tsx index 2f4cfffd2a..c6a5831d01 100644 --- a/frontend/src/scenes/settings/environment/PreAggregatedTablesSetting.tsx +++ b/frontend/src/scenes/settings/environment/PreAggregatedTablesSetting.tsx @@ -1,7 +1,8 @@ import { useActions, useValues } from 'kea' +import { useState } from 'react' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonSwitch } from 'lib/lemon-ui/LemonSwitch' -import { useState } from 'react' import { teamLogic } from 'scenes/teamLogic' export function PreAggregatedTablesSetting(): JSX.Element { diff --git a/frontend/src/scenes/settings/environment/ReplayTriggers.tsx b/frontend/src/scenes/settings/environment/ReplayTriggers.tsx index d0b58ec937..08c18e141d 100644 --- a/frontend/src/scenes/settings/environment/ReplayTriggers.tsx +++ b/frontend/src/scenes/settings/environment/ReplayTriggers.tsx @@ -1,3 +1,8 @@ +import clsx from 'clsx' +import { useActions, useValues } from 'kea' +import { Form } from 'kea-forms' +import { useState } from 'react' + import { IconPencil, IconPlus, IconTrash } from '@posthog/icons' import { LemonBanner, @@ -11,25 +16,22 @@ import { LemonSelect, LemonSnack, LemonTag, - lemonToast, Link, Popover, Spinner, + lemonToast, } from '@posthog/lemon-ui' -import clsx from 'clsx' -import { useActions, useValues } from 'kea' -import { Form } from 'kea-forms' + import { FlagSelector } from 'lib/components/FlagSelector' import { PayGateMini } from 'lib/components/PayGateMini/PayGateMini' import { TaxonomicFilter } from 'lib/components/TaxonomicFilter/TaxonomicFilter' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { SESSION_REPLAY_MINIMUM_DURATION_OPTIONS } from 'lib/constants' -import { IconCancel } from 'lib/lemon-ui/icons' import { LemonField } from 'lib/lemon-ui/LemonField' -import { useState } from 'react' +import { IconCancel } from 'lib/lemon-ui/icons' import { AiRegexHelper, AiRegexHelperButton } from 'scenes/session-recordings/components/AiRegexHelper/AiRegexHelper' -import { isStringWithLength, replayTriggersLogic } from 'scenes/settings/environment/replayTriggersLogic' import { SupportedPlatforms } from 'scenes/settings/environment/SessionRecordingSettings' +import { isStringWithLength, replayTriggersLogic } from 'scenes/settings/environment/replayTriggersLogic' import { sessionReplayIngestionControlLogic } from 'scenes/settings/environment/sessionReplayIngestionControlLogic' import { teamLogic } from 'scenes/teamLogic' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/scenes/settings/environment/SessionRecordingSettings.tsx b/frontend/src/scenes/settings/environment/SessionRecordingSettings.tsx index 8ef2377aad..ecbaac268d 100644 --- a/frontend/src/scenes/settings/environment/SessionRecordingSettings.tsx +++ b/frontend/src/scenes/settings/environment/SessionRecordingSettings.tsx @@ -1,3 +1,7 @@ +import clsx from 'clsx' +import { useActions, useValues } from 'kea' +import { ReactNode, useState } from 'react' + import { IconCheck, IconInfo, IconPlus, IconX } from '@posthog/icons' import { LemonBanner, @@ -10,20 +14,17 @@ import { Link, Tooltip, } from '@posthog/lemon-ui' -import clsx from 'clsx' -import { useActions, useValues } from 'kea' + import { AuthorizedUrlList } from 'lib/components/AuthorizedUrlList/AuthorizedUrlList' import { AuthorizedUrlListType } from 'lib/components/AuthorizedUrlList/authorizedUrlListLogic' import { EventSelect } from 'lib/components/EventSelect/EventSelect' -import { InternalMultipleChoiceSurvey } from 'scenes/session-recordings/components/InternalSurvey/InternalMultipleChoiceSurvey' import { PropertySelect } from 'lib/components/PropertySelect/PropertySelect' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { SESSION_RECORDING_OPT_OUT_SURVEY_ID } from 'lib/constants' -import { IconSelectEvents } from 'lib/lemon-ui/icons' import { LemonLabel } from 'lib/lemon-ui/LemonLabel/LemonLabel' +import { IconSelectEvents } from 'lib/lemon-ui/icons' import { isObject, objectsEqual } from 'lib/utils' -import { ReactNode, useState } from 'react' - +import { InternalMultipleChoiceSurvey } from 'scenes/session-recordings/components/InternalSurvey/InternalMultipleChoiceSurvey' import { getMaskingConfigFromLevel, getMaskingLevelFromConfig } from 'scenes/session-recordings/utils' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/settings/environment/SessionsTableVersion.tsx b/frontend/src/scenes/settings/environment/SessionsTableVersion.tsx index 9bdfb25ade..15cbd09aa0 100644 --- a/frontend/src/scenes/settings/environment/SessionsTableVersion.tsx +++ b/frontend/src/scenes/settings/environment/SessionsTableVersion.tsx @@ -1,8 +1,9 @@ import { useActions, useValues } from 'kea' +import { useState } from 'react' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonRadio, LemonRadioOption } from 'lib/lemon-ui/LemonRadio' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' -import { useState } from 'react' import { teamLogic } from 'scenes/teamLogic' import { HogQLQueryModifiers } from '~/queries/schema/schema-general' diff --git a/frontend/src/scenes/settings/environment/SessionsV2JoinModeSettings.tsx b/frontend/src/scenes/settings/environment/SessionsV2JoinModeSettings.tsx index e4991bd2ff..67e8402ee2 100644 --- a/frontend/src/scenes/settings/environment/SessionsV2JoinModeSettings.tsx +++ b/frontend/src/scenes/settings/environment/SessionsV2JoinModeSettings.tsx @@ -1,7 +1,8 @@ import { useActions, useValues } from 'kea' +import { useState } from 'react' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonRadio, LemonRadioOption } from 'lib/lemon-ui/LemonRadio' -import { useState } from 'react' import { teamLogic } from 'scenes/teamLogic' import { HogQLQueryModifiers } from '~/queries/schema/schema-general' diff --git a/frontend/src/scenes/settings/environment/SlackIntegration.tsx b/frontend/src/scenes/settings/environment/SlackIntegration.tsx index 9f71b35e5c..ab4e646d8a 100644 --- a/frontend/src/scenes/settings/environment/SlackIntegration.tsx +++ b/frontend/src/scenes/settings/environment/SlackIntegration.tsx @@ -1,10 +1,12 @@ -import { LemonButton, Link } from '@posthog/lemon-ui' import { useValues } from 'kea' +import { useState } from 'react' + +import { LemonButton, Link } from '@posthog/lemon-ui' + import api from 'lib/api' import { CodeSnippet, Language } from 'lib/components/CodeSnippet' -import { integrationsLogic } from 'lib/integrations/integrationsLogic' import { IntegrationView } from 'lib/integrations/IntegrationView' -import { useState } from 'react' +import { integrationsLogic } from 'lib/integrations/integrationsLogic' import { urls } from 'scenes/urls' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/scenes/settings/environment/SurveySettings.tsx b/frontend/src/scenes/settings/environment/SurveySettings.tsx index 81d536ece7..46f241dd67 100644 --- a/frontend/src/scenes/settings/environment/SurveySettings.tsx +++ b/frontend/src/scenes/settings/environment/SurveySettings.tsx @@ -1,4 +1,5 @@ import { Link } from '@posthog/lemon-ui' + import { SurveySettings as BasicSurveySettings } from 'scenes/surveys/SurveySettings' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/settings/environment/TeamAccessControl.tsx b/frontend/src/scenes/settings/environment/TeamAccessControl.tsx index d356fe2d53..1028a4ab86 100644 --- a/frontend/src/scenes/settings/environment/TeamAccessControl.tsx +++ b/frontend/src/scenes/settings/environment/TeamAccessControl.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { teamLogic } from 'scenes/teamLogic' import { AccessControlObject } from '~/layout/navigation-3000/sidepanel/panels/access_control/AccessControlObject' diff --git a/frontend/src/scenes/settings/environment/TeamDangerZone.tsx b/frontend/src/scenes/settings/environment/TeamDangerZone.tsx index 339991fe1d..bd7297def0 100644 --- a/frontend/src/scenes/settings/environment/TeamDangerZone.tsx +++ b/frontend/src/scenes/settings/environment/TeamDangerZone.tsx @@ -1,10 +1,12 @@ +import { useActions, useValues } from 'kea' +import { Dispatch, SetStateAction, useState } from 'react' + import { IconTrash } from '@posthog/icons' import { LemonButton, LemonInput, LemonModal } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { RestrictionScope, useRestrictedArea } from 'lib/components/RestrictedArea' import { FEATURE_FLAGS, OrganizationMembershipLevel } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { Dispatch, SetStateAction, useState } from 'react' import { teamLogic } from 'scenes/teamLogic' import { TeamType } from '~/types' diff --git a/frontend/src/scenes/settings/environment/TeamSettings.tsx b/frontend/src/scenes/settings/environment/TeamSettings.tsx index b55990de27..337e10c7e9 100644 --- a/frontend/src/scenes/settings/environment/TeamSettings.tsx +++ b/frontend/src/scenes/settings/environment/TeamSettings.tsx @@ -1,5 +1,8 @@ -import { LemonButton, LemonDialog, LemonInput, LemonLabel, LemonSkeleton, LemonTag } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' +import { useState } from 'react' + +import { LemonButton, LemonDialog, LemonInput, LemonLabel, LemonSkeleton, LemonTag } from '@posthog/lemon-ui' + import { AuthorizedUrlList } from 'lib/components/AuthorizedUrlList/AuthorizedUrlList' import { AuthorizedUrlListType } from 'lib/components/AuthorizedUrlList/authorizedUrlListLogic' import { CodeSnippet } from 'lib/components/CodeSnippet' @@ -8,13 +11,12 @@ import { JSBookmarklet } from 'lib/components/JSBookmarklet' import { JSSnippet, JSSnippetV2 } from 'lib/components/JSSnippet' import { getPublicSupportSnippet } from 'lib/components/Support/supportLogic' import { FEATURE_FLAGS } from 'lib/constants' -import { IconRefresh } from 'lib/lemon-ui/icons' import { Link } from 'lib/lemon-ui/Link' +import { IconRefresh } from 'lib/lemon-ui/icons' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { capitalizeFirstLetter } from 'lib/utils' -import { useState } from 'react' -import { organizationLogic } from 'scenes/organizationLogic' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' +import { organizationLogic } from 'scenes/organizationLogic' import { isAuthenticatedTeam, teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/settings/environment/TestAccountFiltersConfig.tsx b/frontend/src/scenes/settings/environment/TestAccountFiltersConfig.tsx index a9bff90c1c..24ac2af0d6 100644 --- a/frontend/src/scenes/settings/environment/TestAccountFiltersConfig.tsx +++ b/frontend/src/scenes/settings/environment/TestAccountFiltersConfig.tsx @@ -1,11 +1,12 @@ -import { LemonSwitch, Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonSwitch, Link } from '@posthog/lemon-ui' + import { PropertyFilters } from 'lib/components/PropertyFilters/PropertyFilters' import { PROPERTY_FILTER_TYPE_TO_TAXONOMIC_FILTER_GROUP_TYPE } from 'lib/components/PropertyFilters/utils' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' -import { revenueAnalyticsSettingsLogic } from 'products/revenue_analytics/frontend/settings/revenueAnalyticsSettingsLogic' import { teamLogic } from 'scenes/teamLogic' import { cohortsModel } from '~/models/cohortsModel' @@ -13,6 +14,8 @@ import { groupsModel } from '~/models/groupsModel' import { getFilterLabel } from '~/taxonomy/helpers' import { AnyPropertyFilter, type CohortType, PropertyOperator, type TeamPublicType, type TeamType } from '~/types' +import { revenueAnalyticsSettingsLogic } from 'products/revenue_analytics/frontend/settings/revenueAnalyticsSettingsLogic' + import { filterTestAccountsDefaultsLogic } from './filterTestAccountDefaultsLogic' function createTestAccountFilterWarningLabels( diff --git a/frontend/src/scenes/settings/environment/TimezoneConfig.tsx b/frontend/src/scenes/settings/environment/TimezoneConfig.tsx index 04b727667a..375e47875d 100644 --- a/frontend/src/scenes/settings/environment/TimezoneConfig.tsx +++ b/frontend/src/scenes/settings/environment/TimezoneConfig.tsx @@ -1,4 +1,5 @@ import { useActions, useValues } from 'kea' + import { LemonDialog } from 'lib/lemon-ui/LemonDialog' import { LemonInputSelect } from 'lib/lemon-ui/LemonInputSelect/LemonInputSelect' import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' diff --git a/frontend/src/scenes/settings/environment/WebhookIntegration.tsx b/frontend/src/scenes/settings/environment/WebhookIntegration.tsx index 3c04427386..14712de285 100644 --- a/frontend/src/scenes/settings/environment/WebhookIntegration.tsx +++ b/frontend/src/scenes/settings/environment/WebhookIntegration.tsx @@ -1,9 +1,11 @@ -import { LemonButton, LemonInput, Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' +import { useEffect, useState } from 'react' + +import { LemonButton, LemonInput, Link } from '@posthog/lemon-ui' + import { supportLogic } from 'lib/components/Support/supportLogic' import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { useEffect, useState } from 'react' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/settings/environment/WeekStartConfig.tsx b/frontend/src/scenes/settings/environment/WeekStartConfig.tsx index a4577b16a7..a403a0be8d 100644 --- a/frontend/src/scenes/settings/environment/WeekStartConfig.tsx +++ b/frontend/src/scenes/settings/environment/WeekStartConfig.tsx @@ -1,5 +1,7 @@ -import { LemonSelect } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonSelect } from '@posthog/lemon-ui' + import { LemonDialog } from 'lib/lemon-ui/LemonDialog' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/settings/environment/crmUsageMetricsConfigLogic.ts b/frontend/src/scenes/settings/environment/crmUsageMetricsConfigLogic.ts index 70ec190e01..d505599686 100644 --- a/frontend/src/scenes/settings/environment/crmUsageMetricsConfigLogic.ts +++ b/frontend/src/scenes/settings/environment/crmUsageMetricsConfigLogic.ts @@ -1,9 +1,10 @@ import { actions, afterMount, connect, kea, listeners, path, reducers, selectors } from 'kea' import { forms } from 'kea-forms' +import { loaders } from 'kea-loaders' + import { groupsModel } from '~/models/groupsModel' import type { crmUsageMetricsConfigLogicType } from './crmUsageMetricsConfigLogicType' -import { loaders } from 'kea-loaders' export interface UsageMetric { id: string diff --git a/frontend/src/scenes/settings/environment/dataColorThemeModalLogic.ts b/frontend/src/scenes/settings/environment/dataColorThemeModalLogic.ts index b07d1561ee..92b104ea5c 100644 --- a/frontend/src/scenes/settings/environment/dataColorThemeModalLogic.ts +++ b/frontend/src/scenes/settings/environment/dataColorThemeModalLogic.ts @@ -1,6 +1,8 @@ -import { lemonToast } from '@posthog/lemon-ui' import { actions, kea, listeners, path, reducers } from 'kea' import { forms } from 'kea-forms' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { DataColorThemeModelPayload } from '~/types' diff --git a/frontend/src/scenes/settings/environment/dataColorThemesLogic.ts b/frontend/src/scenes/settings/environment/dataColorThemesLogic.ts index 0396cdaf5d..1111d5f73a 100644 --- a/frontend/src/scenes/settings/environment/dataColorThemesLogic.ts +++ b/frontend/src/scenes/settings/environment/dataColorThemesLogic.ts @@ -1,4 +1,5 @@ import { actions, connect, kea, listeners, path } from 'kea' + import { dataThemeLogic } from 'scenes/dataThemeLogic' import { dataColorThemesModalLogic } from './dataColorThemeModalLogic' diff --git a/frontend/src/scenes/settings/environment/environmentRollbackModalLogic.ts b/frontend/src/scenes/settings/environment/environmentRollbackModalLogic.ts index 52b99671db..bfecece9a1 100644 --- a/frontend/src/scenes/settings/environment/environmentRollbackModalLogic.ts +++ b/frontend/src/scenes/settings/environment/environmentRollbackModalLogic.ts @@ -1,9 +1,11 @@ -import { lemonToast } from '@posthog/lemon-ui' import { actions, connect, kea, listeners, path, reducers, selectors } from 'kea' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { FEATURE_FLAGS } from 'lib/constants' import { LemonSelectOptions } from 'lib/lemon-ui/LemonSelect' -import { featureFlagLogic, FeatureFlagsSet } from 'lib/logic/featureFlagLogic' +import { FeatureFlagsSet, featureFlagLogic } from 'lib/logic/featureFlagLogic' import { organizationLogic } from 'scenes/organizationLogic' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/settings/environment/filterTestAccountDefaultsLogic.ts b/frontend/src/scenes/settings/environment/filterTestAccountDefaultsLogic.ts index b3681d4791..89e4fe038d 100644 --- a/frontend/src/scenes/settings/environment/filterTestAccountDefaultsLogic.ts +++ b/frontend/src/scenes/settings/environment/filterTestAccountDefaultsLogic.ts @@ -1,4 +1,5 @@ import { actions, connect, events, kea, listeners, path, reducers, selectors } from 'kea' + import { teamLogic } from 'scenes/teamLogic' import type { filterTestAccountsDefaultsLogicType } from './filterTestAccountDefaultsLogicType' diff --git a/frontend/src/scenes/settings/environment/maxSettingsLogic.tsx b/frontend/src/scenes/settings/environment/maxSettingsLogic.tsx index 4b9c3a56dc..058f4fe4df 100644 --- a/frontend/src/scenes/settings/environment/maxSettingsLogic.tsx +++ b/frontend/src/scenes/settings/environment/maxSettingsLogic.tsx @@ -1,6 +1,7 @@ import { actions, afterMount, kea, listeners, path, reducers } from 'kea' import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' diff --git a/frontend/src/scenes/settings/environment/proxyLogic.ts b/frontend/src/scenes/settings/environment/proxyLogic.ts index 3f06c0e28d..91cc0306b3 100644 --- a/frontend/src/scenes/settings/environment/proxyLogic.ts +++ b/frontend/src/scenes/settings/environment/proxyLogic.ts @@ -1,6 +1,7 @@ import { actions, afterMount, beforeUnmount, connect, kea, listeners, path, reducers, selectors } from 'kea' import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' import { isDomain } from 'lib/utils' diff --git a/frontend/src/scenes/settings/environment/replayTriggersLogic.ts b/frontend/src/scenes/settings/environment/replayTriggersLogic.ts index 07d8b64837..5408a54390 100644 --- a/frontend/src/scenes/settings/environment/replayTriggersLogic.ts +++ b/frontend/src/scenes/settings/environment/replayTriggersLogic.ts @@ -1,6 +1,7 @@ import { actions, connect, kea, listeners, path, reducers, selectors, sharedListeners } from 'kea' import { forms } from 'kea-forms' import { subscriptions } from 'kea-subscriptions' + import { teamLogic } from 'scenes/teamLogic' import { SessionReplayUrlTriggerConfig, TeamPublicType, TeamType } from '~/types' diff --git a/frontend/src/scenes/settings/environment/sessionReplayIngestionControlLogic.ts b/frontend/src/scenes/settings/environment/sessionReplayIngestionControlLogic.ts index d74079260b..6b18f99d16 100644 --- a/frontend/src/scenes/settings/environment/sessionReplayIngestionControlLogic.ts +++ b/frontend/src/scenes/settings/environment/sessionReplayIngestionControlLogic.ts @@ -1,5 +1,6 @@ import { actions, afterMount, connect, kea, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { isObject } from 'lib/utils' import { variantKeyToIndexFeatureFlagPayloads } from 'scenes/feature-flags/featureFlagLogic' diff --git a/frontend/src/scenes/settings/environment/sessionReplayLinkedFlagLogic.ts b/frontend/src/scenes/settings/environment/sessionReplayLinkedFlagLogic.ts index 5795467d91..7545af11b6 100644 --- a/frontend/src/scenes/settings/environment/sessionReplayLinkedFlagLogic.ts +++ b/frontend/src/scenes/settings/environment/sessionReplayLinkedFlagLogic.ts @@ -1,5 +1,6 @@ import { actions, afterMount, connect, kea, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { isObject } from 'lib/utils' import { variantKeyToIndexFeatureFlagPayloads } from 'scenes/feature-flags/featureFlagLogic' diff --git a/frontend/src/scenes/settings/environment/teamMembersLogic.tsx b/frontend/src/scenes/settings/environment/teamMembersLogic.tsx index 4e09bfa700..985f0c1ef7 100644 --- a/frontend/src/scenes/settings/environment/teamMembersLogic.tsx +++ b/frontend/src/scenes/settings/environment/teamMembersLogic.tsx @@ -1,6 +1,7 @@ import { actions, afterMount, kea, listeners, path, reducers, selectors } from 'kea' import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { OrganizationMembershipLevel, TeamMembershipLevel } from 'lib/constants' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' diff --git a/frontend/src/scenes/settings/environment/webhookIntegrationLogic.ts b/frontend/src/scenes/settings/environment/webhookIntegrationLogic.ts index 665fa264a4..775315df09 100644 --- a/frontend/src/scenes/settings/environment/webhookIntegrationLogic.ts +++ b/frontend/src/scenes/settings/environment/webhookIntegrationLogic.ts @@ -1,5 +1,6 @@ import { kea, listeners, path, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' import { capitalizeFirstLetter } from 'lib/utils' diff --git a/frontend/src/scenes/settings/organization/AIConsentPopoverWrapper.tsx b/frontend/src/scenes/settings/organization/AIConsentPopoverWrapper.tsx index 362c58d2d5..497679ff9b 100644 --- a/frontend/src/scenes/settings/organization/AIConsentPopoverWrapper.tsx +++ b/frontend/src/scenes/settings/organization/AIConsentPopoverWrapper.tsx @@ -1,7 +1,9 @@ +import { useAsyncActions, useValues } from 'kea' + import { IconArrowRight, IconLock } from '@posthog/icons' import { LemonButton, Popover, PopoverProps, Tooltip } from '@posthog/lemon-ui' + import { dayjs } from 'lib/dayjs' -import { useAsyncActions, useValues } from 'kea' import { Link } from 'lib/lemon-ui/Link' import { maxGlobalLogic } from 'scenes/max/maxGlobalLogic' diff --git a/frontend/src/scenes/settings/organization/InviteModal.tsx b/frontend/src/scenes/settings/organization/InviteModal.tsx index ac994f111f..9c948e0cb8 100644 --- a/frontend/src/scenes/settings/organization/InviteModal.tsx +++ b/frontend/src/scenes/settings/organization/InviteModal.tsx @@ -1,8 +1,10 @@ import './InviteModal.scss' +import { useActions, useValues } from 'kea' + import { IconInfo, IconPlus, IconTrash } from '@posthog/icons' import { LemonInput, LemonSelect, LemonTextArea, Link, Tooltip } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { useRestrictedArea } from 'lib/components/RestrictedArea' import { RestrictionScope } from 'lib/components/RestrictedArea' import { OrganizationMembershipLevel } from 'lib/constants' @@ -11,13 +13,14 @@ import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonModal } from 'lib/lemon-ui/LemonModal' import { capitalizeFirstLetter, isEmail, pluralize } from 'lib/utils' import { organizationMembershipLevelIntegers } from 'lib/utils/permissioning' -import { organizationLogic } from 'scenes/organizationLogic' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' +import { organizationLogic } from 'scenes/organizationLogic' import { userLogic } from 'scenes/userLogic' -import { inviteLogic } from './inviteLogic' import { AccessControlLevel, AvailableFeature } from '~/types' +import { inviteLogic } from './inviteLogic' + /** Shuffled placeholder names */ const PLACEHOLDER_NAMES: string[] = [...Array(10).fill('Jane'), ...Array(10).fill('John'), 'Sonic'].sort( () => Math.random() - 0.5 diff --git a/frontend/src/scenes/settings/organization/Invites.stories.tsx b/frontend/src/scenes/settings/organization/Invites.stories.tsx index a783da2380..13cc1d1da3 100644 --- a/frontend/src/scenes/settings/organization/Invites.stories.tsx +++ b/frontend/src/scenes/settings/organization/Invites.stories.tsx @@ -1,5 +1,7 @@ -import { Meta, StoryObj } from '@storybook/react' import { MOCK_DEFAULT_ORGANIZATION, MOCK_DEFAULT_USER } from 'lib/api.mock' + +import { Meta, StoryObj } from '@storybook/react' + import { FEATURE_FLAGS, OrganizationMembershipLevel } from 'lib/constants' import { App } from 'scenes/App' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/settings/organization/Invites.tsx b/frontend/src/scenes/settings/organization/Invites.tsx index 62328ad220..b83094cca6 100644 --- a/frontend/src/scenes/settings/organization/Invites.tsx +++ b/frontend/src/scenes/settings/organization/Invites.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconX } from '@posthog/icons' import { LemonTag } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { CopyToClipboardInline } from 'lib/components/CopyToClipboard' import { useRestrictedArea } from 'lib/components/RestrictedArea' import { RestrictionScope } from 'lib/components/RestrictedArea' @@ -10,13 +12,13 @@ import { LemonDialog } from 'lib/lemon-ui/LemonDialog' import { LemonTable, LemonTableColumn, LemonTableColumns } from 'lib/lemon-ui/LemonTable' import { createdAtColumn, createdByColumn } from 'lib/lemon-ui/LemonTable/columnUtils' import { ProfilePicture } from 'lib/lemon-ui/ProfilePicture' -import { organizationLogic } from 'scenes/organizationLogic' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' +import { organizationLogic } from 'scenes/organizationLogic' import { OrganizationInviteType } from '~/types' -import { inviteLogic } from './inviteLogic' import { EmailUnavailableForInvitesBanner } from './InviteModal' +import { inviteLogic } from './inviteLogic' function InviteLinkComponent(id: string, invite: OrganizationInviteType): JSX.Element { const url = new URL(`/signup/${id}`, document.baseURI).href diff --git a/frontend/src/scenes/settings/organization/Members.tsx b/frontend/src/scenes/settings/organization/Members.tsx index 676fe29f14..4a8724b4ac 100644 --- a/frontend/src/scenes/settings/organization/Members.tsx +++ b/frontend/src/scenes/settings/organization/Members.tsx @@ -1,11 +1,14 @@ +import { useActions, useValues } from 'kea' import posthog from 'posthog-js' + import { IconInfo } from '@posthog/icons' import { LemonBanner, LemonInput, LemonSwitch } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { PayGateMini } from 'lib/components/PayGateMini/PayGateMini' import { useRestrictedArea } from 'lib/components/RestrictedArea' import { TZLabel } from 'lib/components/TZLabel' import { FEATURE_FLAGS, OrganizationMembershipLevel } from 'lib/constants' +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { More } from 'lib/lemon-ui/LemonButton/More' import { LemonDialog } from 'lib/lemon-ui/LemonDialog' @@ -19,14 +22,13 @@ import { membershipLevelToName, organizationMembershipLevelIntegers, } from 'lib/utils/permissioning' +import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { twoFactorLogic } from 'scenes/authentication/twoFactorLogic' import { membersLogic } from 'scenes/organization/membersLogic' import { organizationLogic } from 'scenes/organizationLogic' -import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { userLogic } from 'scenes/userLogic' import { AvailableFeature, OrganizationMemberType } from '~/types' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' function RemoveMemberModal({ member }: { member: OrganizationMemberType }): JSX.Element { const { user } = useValues(userLogic) diff --git a/frontend/src/scenes/settings/organization/OrgAI.tsx b/frontend/src/scenes/settings/organization/OrgAI.tsx index 579aebd0ac..2a13194d0c 100644 --- a/frontend/src/scenes/settings/organization/OrgAI.tsx +++ b/frontend/src/scenes/settings/organization/OrgAI.tsx @@ -1,5 +1,7 @@ -import { LemonSwitch } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonSwitch } from '@posthog/lemon-ui' + import { useRestrictedArea } from 'lib/components/RestrictedArea' import { OrganizationMembershipLevel } from 'lib/constants' import { organizationLogic } from 'scenes/organizationLogic' diff --git a/frontend/src/scenes/settings/organization/OrgDisplayName.tsx b/frontend/src/scenes/settings/organization/OrgDisplayName.tsx index 08d9f32119..4d85d0829b 100644 --- a/frontend/src/scenes/settings/organization/OrgDisplayName.tsx +++ b/frontend/src/scenes/settings/organization/OrgDisplayName.tsx @@ -1,8 +1,10 @@ -import { LemonButton, LemonInput } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' +import { useState } from 'react' + +import { LemonButton, LemonInput } from '@posthog/lemon-ui' + import { useRestrictedArea } from 'lib/components/RestrictedArea' import { OrganizationMembershipLevel } from 'lib/constants' -import { useState } from 'react' import { organizationLogic } from 'scenes/organizationLogic' export function OrganizationDisplayName(): JSX.Element { diff --git a/frontend/src/scenes/settings/organization/OrgEmailPreferences.tsx b/frontend/src/scenes/settings/organization/OrgEmailPreferences.tsx index 7cf115b6c1..9991ac2c29 100644 --- a/frontend/src/scenes/settings/organization/OrgEmailPreferences.tsx +++ b/frontend/src/scenes/settings/organization/OrgEmailPreferences.tsx @@ -1,5 +1,7 @@ -import { LemonSwitch } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonSwitch } from '@posthog/lemon-ui' + import { useRestrictedArea } from 'lib/components/RestrictedArea' import { OrganizationMembershipLevel } from 'lib/constants' import { organizationLogic } from 'scenes/organizationLogic' diff --git a/frontend/src/scenes/settings/organization/OrgExperimentStatsMethod.tsx b/frontend/src/scenes/settings/organization/OrgExperimentStatsMethod.tsx index 33df93cf83..7bbe8ad0f5 100644 --- a/frontend/src/scenes/settings/organization/OrgExperimentStatsMethod.tsx +++ b/frontend/src/scenes/settings/organization/OrgExperimentStatsMethod.tsx @@ -1,4 +1,5 @@ import { useActions, useValues } from 'kea' + import { useRestrictedArea } from 'lib/components/RestrictedArea' import { OrganizationMembershipLevel } from 'lib/constants' import { LemonSelect } from 'lib/lemon-ui/LemonSelect' diff --git a/frontend/src/scenes/settings/organization/OrgLogo.tsx b/frontend/src/scenes/settings/organization/OrgLogo.tsx index b117c73da8..d9caac125f 100644 --- a/frontend/src/scenes/settings/organization/OrgLogo.tsx +++ b/frontend/src/scenes/settings/organization/OrgLogo.tsx @@ -1,12 +1,14 @@ +import { useActions, useValues } from 'kea' +import { useState } from 'react' + import { IconX } from '@posthog/icons' import { LemonButton, LemonFileInput, lemonToast } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { useRestrictedArea } from 'lib/components/RestrictedArea' import { OrganizationMembershipLevel } from 'lib/constants' import { useUploadFiles } from 'lib/hooks/useUploadFiles' -import { IconUploadFile } from 'lib/lemon-ui/icons' import { UploadedLogo } from 'lib/lemon-ui/UploadedLogo/UploadedLogo' -import { useState } from 'react' +import { IconUploadFile } from 'lib/lemon-ui/icons' import { organizationLogic } from 'scenes/organizationLogic' export function OrganizationLogo(): JSX.Element { diff --git a/frontend/src/scenes/settings/organization/OrganizationDangerZone.tsx b/frontend/src/scenes/settings/organization/OrganizationDangerZone.tsx index 9cdcdb06d5..7059f50278 100644 --- a/frontend/src/scenes/settings/organization/OrganizationDangerZone.tsx +++ b/frontend/src/scenes/settings/organization/OrganizationDangerZone.tsx @@ -1,9 +1,11 @@ +import { useActions, useValues } from 'kea' +import { Dispatch, SetStateAction, useState } from 'react' + import { IconTrash } from '@posthog/icons' import { LemonButton, LemonInput, LemonModal } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { RestrictionScope, useRestrictedArea } from 'lib/components/RestrictedArea' import { OrganizationMembershipLevel } from 'lib/constants' -import { Dispatch, SetStateAction, useState } from 'react' import { organizationLogic } from 'scenes/organizationLogic' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/settings/organization/OrganizationSecuritySettings.tsx b/frontend/src/scenes/settings/organization/OrganizationSecuritySettings.tsx index 276faa2137..847ff5d1d3 100644 --- a/frontend/src/scenes/settings/organization/OrganizationSecuritySettings.tsx +++ b/frontend/src/scenes/settings/organization/OrganizationSecuritySettings.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconInfo } from '@posthog/icons' import { LemonSwitch } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { PayGateMini } from 'lib/components/PayGateMini/PayGateMini' import { useRestrictedArea } from 'lib/components/RestrictedArea' import { OrganizationMembershipLevel } from 'lib/constants' diff --git a/frontend/src/scenes/settings/organization/Permissions/PermissionsGrid.tsx b/frontend/src/scenes/settings/organization/Permissions/PermissionsGrid.tsx index e9b3137d08..40cb83309d 100644 --- a/frontend/src/scenes/settings/organization/Permissions/PermissionsGrid.tsx +++ b/frontend/src/scenes/settings/organization/Permissions/PermissionsGrid.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconInfo } from '@posthog/icons' import { LemonButton, LemonCheckbox, LemonTable } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { PayGateMini } from 'lib/components/PayGateMini/PayGateMini' import { RestrictionScope, useRestrictedArea } from 'lib/components/RestrictedArea' import { TitleWithIcon } from 'lib/components/TitleWithIcon' @@ -11,9 +13,9 @@ import { organizationLogic } from 'scenes/organizationLogic' import { AccessLevel, AvailableFeature, Resource, RoleType } from '~/types' -import { permissionsLogic } from './permissionsLogic' import { CreateRoleModal } from './Roles/CreateRoleModal' import { rolesLogic } from './Roles/rolesLogic' +import { permissionsLogic } from './permissionsLogic' import { getSingularType } from './utils' export function PermissionsGrid(): JSX.Element { diff --git a/frontend/src/scenes/settings/organization/Permissions/Roles/CreateRoleModal.tsx b/frontend/src/scenes/settings/organization/Permissions/Roles/CreateRoleModal.tsx index e43b252d25..44dfb2e4c6 100644 --- a/frontend/src/scenes/settings/organization/Permissions/Roles/CreateRoleModal.tsx +++ b/frontend/src/scenes/settings/organization/Permissions/Roles/CreateRoleModal.tsx @@ -1,13 +1,15 @@ +import { useActions, useValues } from 'kea' +import { useState } from 'react' + import { IconTrash } from '@posthog/icons' import { LemonInput } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { usersLemonSelectOptions } from 'lib/components/UserSelectItem' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonInputSelect } from 'lib/lemon-ui/LemonInputSelect/LemonInputSelect' import { LemonModal } from 'lib/lemon-ui/LemonModal' import { ProfilePicture } from 'lib/lemon-ui/ProfilePicture' import { Spinner } from 'lib/lemon-ui/Spinner/Spinner' -import { useState } from 'react' import { organizationLogic } from 'scenes/organizationLogic' import { RoleMemberType, UserType } from '~/types' diff --git a/frontend/src/scenes/settings/organization/Permissions/Roles/rolesLogic.tsx b/frontend/src/scenes/settings/organization/Permissions/Roles/rolesLogic.tsx index 4a6ed04f5c..a73126bd3f 100644 --- a/frontend/src/scenes/settings/organization/Permissions/Roles/rolesLogic.tsx +++ b/frontend/src/scenes/settings/organization/Permissions/Roles/rolesLogic.tsx @@ -1,5 +1,6 @@ import { actions, afterMount, connect, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' import { teamMembersLogic } from 'scenes/settings/environment/teamMembersLogic' diff --git a/frontend/src/scenes/settings/organization/Permissions/permissionsLogic.tsx b/frontend/src/scenes/settings/organization/Permissions/permissionsLogic.tsx index 43c47ff819..899557e541 100644 --- a/frontend/src/scenes/settings/organization/Permissions/permissionsLogic.tsx +++ b/frontend/src/scenes/settings/organization/Permissions/permissionsLogic.tsx @@ -1,13 +1,15 @@ -import { lemonToast } from '@posthog/lemon-ui' import { actions, afterMount, connect, kea, listeners, path, selectors } from 'kea' import { loaders } from 'kea-loaders' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' import { AccessLevel, OrganizationResourcePermissionType, Resource, RoleType } from '~/types' -import type { permissionsLogicType } from './permissionsLogicType' import { rolesLogic } from './Roles/rolesLogic' +import type { permissionsLogicType } from './permissionsLogicType' const ResourceDisplayMapping: Record = { [Resource.FEATURE_FLAGS]: 'Feature Flags', diff --git a/frontend/src/scenes/settings/organization/VerifiedDomains/AddDomainModal.tsx b/frontend/src/scenes/settings/organization/VerifiedDomains/AddDomainModal.tsx index 128ac627bb..1316105dec 100644 --- a/frontend/src/scenes/settings/organization/VerifiedDomains/AddDomainModal.tsx +++ b/frontend/src/scenes/settings/organization/VerifiedDomains/AddDomainModal.tsx @@ -1,9 +1,11 @@ -import { LemonInput } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' +import { useState } from 'react' + +import { LemonInput } from '@posthog/lemon-ui' + import { DOMAIN_REGEX } from 'lib/constants' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonModal } from 'lib/lemon-ui/LemonModal' -import { useState } from 'react' import { verifiedDomainsLogic } from './verifiedDomainsLogic' diff --git a/frontend/src/scenes/settings/organization/VerifiedDomains/ConfigureSAMLModal.tsx b/frontend/src/scenes/settings/organization/VerifiedDomains/ConfigureSAMLModal.tsx index 340255e280..13fb0f9173 100644 --- a/frontend/src/scenes/settings/organization/VerifiedDomains/ConfigureSAMLModal.tsx +++ b/frontend/src/scenes/settings/organization/VerifiedDomains/ConfigureSAMLModal.tsx @@ -1,6 +1,8 @@ -import { Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' + +import { Link } from '@posthog/lemon-ui' + import { CopyToClipboardInline } from 'lib/components/CopyToClipboard' import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { LemonButton } from 'lib/lemon-ui/LemonButton' diff --git a/frontend/src/scenes/settings/organization/VerifiedDomains/SSOSelect.tsx b/frontend/src/scenes/settings/organization/VerifiedDomains/SSOSelect.tsx index d106adc4f8..99641b38dc 100644 --- a/frontend/src/scenes/settings/organization/VerifiedDomains/SSOSelect.tsx +++ b/frontend/src/scenes/settings/organization/VerifiedDomains/SSOSelect.tsx @@ -1,5 +1,7 @@ -import { LemonSelect, LemonSelectOptions } from '@posthog/lemon-ui' import { useValues } from 'kea' + +import { LemonSelect, LemonSelectOptions } from '@posthog/lemon-ui' + import { SocialLoginIcon } from 'lib/components/SocialLoginButton/SocialLoginIcon' import { SSO_PROVIDER_NAMES } from 'lib/constants' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' diff --git a/frontend/src/scenes/settings/organization/VerifiedDomains/VerifiedDomains.tsx b/frontend/src/scenes/settings/organization/VerifiedDomains/VerifiedDomains.tsx index b9c7b3e3ca..7757578775 100644 --- a/frontend/src/scenes/settings/organization/VerifiedDomains/VerifiedDomains.tsx +++ b/frontend/src/scenes/settings/organization/VerifiedDomains/VerifiedDomains.tsx @@ -1,10 +1,11 @@ -import { IconCheckCircle, IconInfo, IconLock, IconTrash, IconWarning } from '@posthog/icons' import { useActions, useValues } from 'kea' + +import { IconCheckCircle, IconInfo, IconLock, IconTrash, IconWarning } from '@posthog/icons' + import { PayGateMini } from 'lib/components/PayGateMini/PayGateMini' import { RestrictionScope } from 'lib/components/RestrictedArea' import { useRestrictedArea } from 'lib/components/RestrictedArea' import { OrganizationMembershipLevel } from 'lib/constants' -import { IconExclamation, IconOffline } from 'lib/lemon-ui/icons' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { More } from 'lib/lemon-ui/LemonButton/More' import { LemonDialog } from 'lib/lemon-ui/LemonDialog' @@ -13,6 +14,7 @@ import { LemonTable, LemonTableColumns } from 'lib/lemon-ui/LemonTable' import { LemonTag } from 'lib/lemon-ui/LemonTag/LemonTag' import { Link } from 'lib/lemon-ui/Link' import { Tooltip } from 'lib/lemon-ui/Tooltip' +import { IconExclamation, IconOffline } from 'lib/lemon-ui/icons' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { urls } from 'scenes/urls' @@ -21,8 +23,8 @@ import { AvailableFeature, OrganizationDomainType } from '~/types' import { AddDomainModal } from './AddDomainModal' import { ConfigureSAMLModal } from './ConfigureSAMLModal' import { SSOSelect } from './SSOSelect' -import { verifiedDomainsLogic } from './verifiedDomainsLogic' import { VerifyDomainModal } from './VerifyDomainModal' +import { verifiedDomainsLogic } from './verifiedDomainsLogic' const iconStyle = { marginRight: 4, fontSize: '1.15em', paddingTop: 2 } diff --git a/frontend/src/scenes/settings/organization/VerifiedDomains/VerifyDomainModal.tsx b/frontend/src/scenes/settings/organization/VerifiedDomains/VerifyDomainModal.tsx index dfc2473234..9f05b09465 100644 --- a/frontend/src/scenes/settings/organization/VerifiedDomains/VerifyDomainModal.tsx +++ b/frontend/src/scenes/settings/organization/VerifiedDomains/VerifyDomainModal.tsx @@ -1,4 +1,5 @@ import { useActions, useValues } from 'kea' + import { CopyToClipboardInline } from 'lib/components/CopyToClipboard' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonField } from 'lib/lemon-ui/LemonField' diff --git a/frontend/src/scenes/settings/organization/VerifiedDomains/verifiedDomainsLogic.test.ts b/frontend/src/scenes/settings/organization/VerifiedDomains/verifiedDomainsLogic.test.ts index 754ec294bf..d6b027adfa 100644 --- a/frontend/src/scenes/settings/organization/VerifiedDomains/verifiedDomainsLogic.test.ts +++ b/frontend/src/scenes/settings/organization/VerifiedDomains/verifiedDomainsLogic.test.ts @@ -1,4 +1,5 @@ import { expectLogic } from 'kea-test-utils' + import { userLogic } from 'scenes/userLogic' import { useAvailableFeatures } from '~/mocks/features' diff --git a/frontend/src/scenes/settings/organization/VerifiedDomains/verifiedDomainsLogic.ts b/frontend/src/scenes/settings/organization/VerifiedDomains/verifiedDomainsLogic.ts index 41095053fe..cd5f2e5f3c 100644 --- a/frontend/src/scenes/settings/organization/VerifiedDomains/verifiedDomainsLogic.ts +++ b/frontend/src/scenes/settings/organization/VerifiedDomains/verifiedDomainsLogic.ts @@ -1,6 +1,7 @@ import { actions, afterMount, connect, kea, listeners, path, reducers, selectors } from 'kea' import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { SECURE_URL_REGEX } from 'lib/constants' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' diff --git a/frontend/src/scenes/settings/organization/activityDescriptions.tsx b/frontend/src/scenes/settings/organization/activityDescriptions.tsx index 32d377542a..6503317992 100644 --- a/frontend/src/scenes/settings/organization/activityDescriptions.tsx +++ b/frontend/src/scenes/settings/organization/activityDescriptions.tsx @@ -1,13 +1,13 @@ import { ActivityLogItem, - defaultDescriber, HumanizedChange, + defaultDescriber, userNameForLogItem, } from 'lib/components/ActivityLog/humanizeActivity' -import { Link } from 'lib/lemon-ui/Link' -import { urls } from 'scenes/urls' -import { membershipLevelToName } from 'lib/utils/permissioning' import { OrganizationMembershipLevel } from 'lib/constants' +import { Link } from 'lib/lemon-ui/Link' +import { membershipLevelToName } from 'lib/utils/permissioning' +import { urls } from 'scenes/urls' const nameOrLinkToOrganization = (name?: string | null): string | JSX.Element => { let displayName = name || 'Organization' diff --git a/frontend/src/scenes/settings/organization/inviteLogic.ts b/frontend/src/scenes/settings/organization/inviteLogic.ts index 80fe29aa39..e621b59ea8 100644 --- a/frontend/src/scenes/settings/organization/inviteLogic.ts +++ b/frontend/src/scenes/settings/organization/inviteLogic.ts @@ -1,13 +1,14 @@ import { actions, connect, kea, listeners, path, reducers, selectors } from 'kea' import { lazyLoaders, loaders } from 'kea-loaders' import { router, urlToAction } from 'kea-router' + import api, { PaginatedResponse } from 'lib/api' import { OrganizationMembershipLevel } from 'lib/constants' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' -import { organizationLogic } from 'scenes/organizationLogic' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' +import { organizationLogic } from 'scenes/organizationLogic' -import { activationLogic, ActivationTask } from '~/layout/navigation-3000/sidepanel/panels/activation/activationLogic' +import { ActivationTask, activationLogic } from '~/layout/navigation-3000/sidepanel/panels/activation/activationLogic' import { AccessControlLevel, OrganizationInviteType } from '~/types' import type { inviteLogicType } from './inviteLogicType' diff --git a/frontend/src/scenes/settings/project/ProjectDangerZone.tsx b/frontend/src/scenes/settings/project/ProjectDangerZone.tsx index 32c1154c30..27454b15b0 100644 --- a/frontend/src/scenes/settings/project/ProjectDangerZone.tsx +++ b/frontend/src/scenes/settings/project/ProjectDangerZone.tsx @@ -1,9 +1,11 @@ +import { useActions, useValues } from 'kea' +import { Dispatch, SetStateAction, useState } from 'react' + import { IconTrash } from '@posthog/icons' import { LemonButton, LemonInput, LemonModal } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { RestrictionScope, useRestrictedArea } from 'lib/components/RestrictedArea' import { OrganizationMembershipLevel } from 'lib/constants' -import { Dispatch, SetStateAction, useState } from 'react' import { organizationLogic } from 'scenes/organizationLogic' import { projectLogic } from 'scenes/projectLogic' diff --git a/frontend/src/scenes/settings/project/ProjectMove.tsx b/frontend/src/scenes/settings/project/ProjectMove.tsx index 1ec63b68a6..5148c4ca50 100644 --- a/frontend/src/scenes/settings/project/ProjectMove.tsx +++ b/frontend/src/scenes/settings/project/ProjectMove.tsx @@ -1,9 +1,11 @@ +import { useActions, useValues } from 'kea' +import { Dispatch, SetStateAction, useState } from 'react' + import { IconArrowRight } from '@posthog/icons' import { LemonButton, LemonInput, LemonModal, LemonSelect } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { RestrictionScope, useRestrictedArea } from 'lib/components/RestrictedArea' import { OrganizationMembershipLevel } from 'lib/constants' -import { Dispatch, SetStateAction, useState } from 'react' import { projectLogic } from 'scenes/projectLogic' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/scenes/settings/project/ProjectSettings.tsx b/frontend/src/scenes/settings/project/ProjectSettings.tsx index 064008759c..474fcad14a 100644 --- a/frontend/src/scenes/settings/project/ProjectSettings.tsx +++ b/frontend/src/scenes/settings/project/ProjectSettings.tsx @@ -1,6 +1,8 @@ -import { LemonButton, LemonInput } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { useState } from 'react' + +import { LemonButton, LemonInput } from '@posthog/lemon-ui' + import { projectLogic } from 'scenes/projectLogic' export function ProjectDisplayName(): JSX.Element { diff --git a/frontend/src/scenes/settings/settingsLogic.ts b/frontend/src/scenes/settings/settingsLogic.ts index 189b538490..628e1f6350 100644 --- a/frontend/src/scenes/settings/settingsLogic.ts +++ b/frontend/src/scenes/settings/settingsLogic.ts @@ -1,5 +1,6 @@ import { actions, connect, kea, key, path, props, reducers, selectors } from 'kea' import { actionToUrl, router, urlToAction } from 'kea-router' + import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' @@ -8,8 +9,8 @@ import { userLogic } from 'scenes/userLogic' import { Realm } from '~/types' -import type { settingsLogicType } from './settingsLogicType' import { SETTINGS_MAP } from './SettingsMap' +import type { settingsLogicType } from './settingsLogicType' import { Setting, SettingId, SettingLevelId, SettingSection, SettingSectionId, SettingsLogicProps } from './types' export const settingsLogic = kea([ diff --git a/frontend/src/scenes/settings/settingsSceneLogic.test.ts b/frontend/src/scenes/settings/settingsSceneLogic.test.ts index ba7274f50b..160c62ff87 100644 --- a/frontend/src/scenes/settings/settingsSceneLogic.test.ts +++ b/frontend/src/scenes/settings/settingsSceneLogic.test.ts @@ -1,18 +1,19 @@ import { router } from 'kea-router' import { expectLogic } from 'kea-test-utils' + import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' +import { initKeaTests } from '~/test/init' + +import { settingsSceneLogic } from './settingsSceneLogic' + // Mock the survey preview functions jest.mock('posthog-js/dist/surveys-preview', () => ({ renderFeedbackWidgetPreview: jest.fn(), renderSurveysPreview: jest.fn(), })) -import { initKeaTests } from '~/test/init' - -import { settingsSceneLogic } from './settingsSceneLogic' - describe('settingsSceneLogic', () => { let logic: ReturnType diff --git a/frontend/src/scenes/settings/settingsSceneLogic.ts b/frontend/src/scenes/settings/settingsSceneLogic.ts index 015d9d2e69..e056d547bc 100644 --- a/frontend/src/scenes/settings/settingsSceneLogic.ts +++ b/frontend/src/scenes/settings/settingsSceneLogic.ts @@ -1,5 +1,6 @@ import { connect, kea, listeners, path, selectors } from 'kea' import { actionToUrl, router, urlToAction } from 'kea-router' + import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { capitalizeFirstLetter } from 'lib/utils' diff --git a/frontend/src/scenes/settings/stories/SettingsEnvironment.stories.tsx b/frontend/src/scenes/settings/stories/SettingsEnvironment.stories.tsx index 1ece8e2e4c..2940dd1c65 100644 --- a/frontend/src/scenes/settings/stories/SettingsEnvironment.stories.tsx +++ b/frontend/src/scenes/settings/stories/SettingsEnvironment.stories.tsx @@ -1,8 +1,10 @@ +import { MOCK_DEFAULT_TEAM } from 'lib/api.mock' + import { Meta, StoryFn, StoryObj } from '@storybook/react' import { router } from 'kea-router' -import { MOCK_DEFAULT_TEAM } from 'lib/api.mock' -import { FEATURE_FLAGS } from 'lib/constants' import { useEffect } from 'react' + +import { FEATURE_FLAGS } from 'lib/constants' import { App } from 'scenes/App' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/settings/stories/SettingsOrganization.stories.tsx b/frontend/src/scenes/settings/stories/SettingsOrganization.stories.tsx index c4a2def8b7..3f723f8345 100644 --- a/frontend/src/scenes/settings/stories/SettingsOrganization.stories.tsx +++ b/frontend/src/scenes/settings/stories/SettingsOrganization.stories.tsx @@ -1,8 +1,10 @@ +import { MOCK_DEFAULT_TEAM } from 'lib/api.mock' + import { Meta, StoryFn, StoryObj } from '@storybook/react' import { router } from 'kea-router' -import { MOCK_DEFAULT_TEAM } from 'lib/api.mock' -import { FEATURE_FLAGS } from 'lib/constants' import { useEffect } from 'react' + +import { FEATURE_FLAGS } from 'lib/constants' import { App } from 'scenes/App' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/settings/stories/SettingsProject.stories.tsx b/frontend/src/scenes/settings/stories/SettingsProject.stories.tsx index 11261cd14f..d2105f4119 100644 --- a/frontend/src/scenes/settings/stories/SettingsProject.stories.tsx +++ b/frontend/src/scenes/settings/stories/SettingsProject.stories.tsx @@ -1,8 +1,10 @@ +import { MOCK_DEFAULT_TEAM } from 'lib/api.mock' + import { Meta, StoryFn, StoryObj } from '@storybook/react' import { router } from 'kea-router' -import { MOCK_DEFAULT_TEAM } from 'lib/api.mock' -import { FEATURE_FLAGS } from 'lib/constants' import { useEffect } from 'react' + +import { FEATURE_FLAGS } from 'lib/constants' import { App } from 'scenes/App' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/settings/stories/SettingsUser.stories.tsx b/frontend/src/scenes/settings/stories/SettingsUser.stories.tsx index 89891990e8..fcdafb1047 100644 --- a/frontend/src/scenes/settings/stories/SettingsUser.stories.tsx +++ b/frontend/src/scenes/settings/stories/SettingsUser.stories.tsx @@ -1,8 +1,10 @@ +import { MOCK_DEFAULT_TEAM } from 'lib/api.mock' + import { Meta, StoryFn, StoryObj } from '@storybook/react' import { router } from 'kea-router' -import { MOCK_DEFAULT_TEAM } from 'lib/api.mock' -import { FEATURE_FLAGS } from 'lib/constants' import { useEffect } from 'react' + +import { FEATURE_FLAGS } from 'lib/constants' import { App } from 'scenes/App' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/settings/user/ChangePassword.tsx b/frontend/src/scenes/settings/user/ChangePassword.tsx index e98291cb7c..41c919ad2d 100644 --- a/frontend/src/scenes/settings/user/ChangePassword.tsx +++ b/frontend/src/scenes/settings/user/ChangePassword.tsx @@ -1,6 +1,8 @@ -import { LemonButton, LemonInput } from '@posthog/lemon-ui' import { useValues } from 'kea' import { Form } from 'kea-forms' + +import { LemonButton, LemonInput } from '@posthog/lemon-ui' + import PasswordStrength from 'lib/components/PasswordStrength' import { LemonField } from 'lib/lemon-ui/LemonField' diff --git a/frontend/src/scenes/settings/user/HedgehogModeSettings.tsx b/frontend/src/scenes/settings/user/HedgehogModeSettings.tsx index 37ef0d5ac6..4717e65884 100644 --- a/frontend/src/scenes/settings/user/HedgehogModeSettings.tsx +++ b/frontend/src/scenes/settings/user/HedgehogModeSettings.tsx @@ -1,7 +1,9 @@ -import { LemonSwitch } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' -import { hedgehogBuddyLogic } from 'lib/components/HedgehogBuddy/hedgehogBuddyLogic' + +import { LemonSwitch } from '@posthog/lemon-ui' + import { HedgehogOptions } from 'lib/components/HedgehogBuddy/HedgehogOptions' +import { hedgehogBuddyLogic } from 'lib/components/HedgehogBuddy/hedgehogBuddyLogic' export function HedgehogModeSettings(): JSX.Element { const { hedgehogConfig } = useValues(hedgehogBuddyLogic) diff --git a/frontend/src/scenes/settings/user/OptOutCapture.tsx b/frontend/src/scenes/settings/user/OptOutCapture.tsx index 747482720f..02ec80f42d 100644 --- a/frontend/src/scenes/settings/user/OptOutCapture.tsx +++ b/frontend/src/scenes/settings/user/OptOutCapture.tsx @@ -1,5 +1,7 @@ -import { LemonSwitch } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonSwitch } from '@posthog/lemon-ui' + import { userLogic } from 'scenes/userLogic' export function OptOutCapture(): JSX.Element { diff --git a/frontend/src/scenes/settings/user/PersonalAPIKeys.tsx b/frontend/src/scenes/settings/user/PersonalAPIKeys.tsx index 1b756fabb9..e0f56df058 100644 --- a/frontend/src/scenes/settings/user/PersonalAPIKeys.tsx +++ b/frontend/src/scenes/settings/user/PersonalAPIKeys.tsx @@ -1,3 +1,8 @@ +import clsx from 'clsx' +import { useActions, useValues } from 'kea' +import { Form } from 'kea-forms' +import { Fragment, useEffect } from 'react' + import { IconWarning } from '@posthog/icons' import { IconEllipsis, IconInfo, IconPlus } from '@posthog/icons' import { @@ -14,15 +19,12 @@ import { Link, Tooltip, } from '@posthog/lemon-ui' -import clsx from 'clsx' -import { useActions, useValues } from 'kea' -import { Form } from 'kea-forms' -import { IconErrorOutline } from 'lib/lemon-ui/icons' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonField } from 'lib/lemon-ui/LemonField' +import { IconErrorOutline } from 'lib/lemon-ui/icons' import { API_KEY_SCOPE_PRESETS, API_SCOPES, MAX_API_KEYS_PER_USER } from 'lib/scopes' import { capitalizeFirstLetter, detailedTime, humanFriendlyDetailedTime } from 'lib/utils' -import { Fragment, useEffect } from 'react' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { personalAPIKeysLogic } from './personalAPIKeysLogic' diff --git a/frontend/src/scenes/settings/user/ThemeSwitcher.tsx b/frontend/src/scenes/settings/user/ThemeSwitcher.tsx index 64d87c0f74..c742f7e8b6 100644 --- a/frontend/src/scenes/settings/user/ThemeSwitcher.tsx +++ b/frontend/src/scenes/settings/user/ThemeSwitcher.tsx @@ -1,7 +1,9 @@ -import { IconDay, IconLaptop, IconNight, IconPalette } from '@posthog/icons' -import { LemonSelect, LemonSelectOptions, LemonSelectProps } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { router } from 'kea-router' + +import { IconDay, IconLaptop, IconNight, IconPalette } from '@posthog/icons' +import { LemonSelect, LemonSelectOptions, LemonSelectProps } from '@posthog/lemon-ui' + import { urls } from 'scenes/urls' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/scenes/settings/user/TwoFactorSettings.tsx b/frontend/src/scenes/settings/user/TwoFactorSettings.tsx index d35b76a7c7..489cc611c6 100644 --- a/frontend/src/scenes/settings/user/TwoFactorSettings.tsx +++ b/frontend/src/scenes/settings/user/TwoFactorSettings.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconCheckCircle, IconCopy, IconWarning } from '@posthog/icons' import { LemonButton, LemonModal } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { copyToClipboard } from 'lib/utils/copyToClipboard' import { twoFactorLogic } from 'scenes/authentication/twoFactorLogic' import { membersLogic } from 'scenes/organization/membersLogic' diff --git a/frontend/src/scenes/settings/user/UpdateEmailPreferences.tsx b/frontend/src/scenes/settings/user/UpdateEmailPreferences.tsx index 20e4fb9e2c..86e6bec05d 100644 --- a/frontend/src/scenes/settings/user/UpdateEmailPreferences.tsx +++ b/frontend/src/scenes/settings/user/UpdateEmailPreferences.tsx @@ -1,7 +1,9 @@ -import { LemonButton, LemonCheckbox, LemonSwitch, LemonTag } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { useState } from 'react' + import { IconChevronDown, IconChevronRight } from '@posthog/icons' +import { LemonButton, LemonCheckbox, LemonSwitch, LemonTag } from '@posthog/lemon-ui' + import { organizationLogic } from 'scenes/organizationLogic' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/scenes/settings/user/UserDangerZone.tsx b/frontend/src/scenes/settings/user/UserDangerZone.tsx index 6833e4c7aa..dde070e50f 100644 --- a/frontend/src/scenes/settings/user/UserDangerZone.tsx +++ b/frontend/src/scenes/settings/user/UserDangerZone.tsx @@ -1,10 +1,12 @@ -import { IconTrash } from '@posthog/icons' -import { LemonButton, LemonDialog, LemonInput, LemonModal, LemonTable, LemonTag, Tooltip } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { router } from 'kea-router' +import { useEffect } from 'react' + +import { IconTrash } from '@posthog/icons' +import { LemonButton, LemonDialog, LemonInput, LemonModal, LemonTable, LemonTag, Tooltip } from '@posthog/lemon-ui' + import { OrganizationMembershipLevel } from 'lib/constants' import { detailedTime, humanFriendlyDetailedTime, isNotNil } from 'lib/utils' -import { useEffect } from 'react' import { urls } from 'scenes/urls' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/scenes/settings/user/UserDetails.tsx b/frontend/src/scenes/settings/user/UserDetails.tsx index 3508ea0c52..0caab0e209 100644 --- a/frontend/src/scenes/settings/user/UserDetails.tsx +++ b/frontend/src/scenes/settings/user/UserDetails.tsx @@ -1,5 +1,6 @@ import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonField } from 'lib/lemon-ui/LemonField' import { LemonInput } from 'lib/lemon-ui/LemonInput/LemonInput' diff --git a/frontend/src/scenes/settings/user/changePasswordLogic.ts b/frontend/src/scenes/settings/user/changePasswordLogic.ts index 5c6aa6014e..c9a139f270 100644 --- a/frontend/src/scenes/settings/user/changePasswordLogic.ts +++ b/frontend/src/scenes/settings/user/changePasswordLogic.ts @@ -1,6 +1,8 @@ -import { lemonToast } from '@posthog/lemon-ui' import { connect, kea, path, selectors } from 'kea' import { forms } from 'kea-forms' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { ValidatedPasswordResult, validatePassword } from 'lib/components/PasswordStrength' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/scenes/settings/user/personalAPIKeysLogic.tsx b/frontend/src/scenes/settings/user/personalAPIKeysLogic.tsx index 33d3ea8919..8740fbec39 100644 --- a/frontend/src/scenes/settings/user/personalAPIKeysLogic.tsx +++ b/frontend/src/scenes/settings/user/personalAPIKeysLogic.tsx @@ -1,20 +1,22 @@ -import { LemonBanner, LemonDialog } from '@posthog/lemon-ui' import { actions, afterMount, connect, kea, listeners, path, reducers, selectors } from 'kea' import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' import { actionToUrl, router, urlToAction } from 'kea-router' + +import { LemonBanner, LemonDialog } from '@posthog/lemon-ui' + import api from 'lib/api' import { CodeSnippet } from 'lib/components/CodeSnippet' +import { OrganizationMembershipLevel } from 'lib/constants' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' +import { hasMembershipLevelOrHigher, organizationAllowsPersonalApiKeysForMembers } from 'lib/utils/permissioning' import { urls } from 'scenes/urls' import { userLogic } from 'scenes/userLogic' import { API_KEY_SCOPE_PRESETS } from '~/lib/scopes' import { OrganizationBasicType, PersonalAPIKeyType, TeamBasicType, UserType } from '~/types' -import { hasMembershipLevelOrHigher, organizationAllowsPersonalApiKeysForMembers } from 'lib/utils/permissioning' import type { personalAPIKeysLogicType } from './personalAPIKeysLogicType' -import { OrganizationMembershipLevel } from 'lib/constants' export type EditingKeyFormValues = Pick< PersonalAPIKeyType, diff --git a/frontend/src/scenes/settings/user/scopes/ScopeAccessSelector.tsx b/frontend/src/scenes/settings/user/scopes/ScopeAccessSelector.tsx index 692cc241ca..62431cee73 100644 --- a/frontend/src/scenes/settings/user/scopes/ScopeAccessSelector.tsx +++ b/frontend/src/scenes/settings/user/scopes/ScopeAccessSelector.tsx @@ -1,4 +1,5 @@ import { LemonInputSelect, LemonLabel, Tooltip } from '@posthog/lemon-ui' + import { LemonField } from 'lib/lemon-ui/LemonField' import { LemonSegmentedButton } from 'lib/lemon-ui/LemonSegmentedButton' diff --git a/frontend/src/scenes/settings/user/userDangerZoneLogic.ts b/frontend/src/scenes/settings/user/userDangerZoneLogic.ts index 7f183d8cae..9d67d5d228 100644 --- a/frontend/src/scenes/settings/user/userDangerZoneLogic.ts +++ b/frontend/src/scenes/settings/user/userDangerZoneLogic.ts @@ -1,5 +1,6 @@ import { kea } from 'kea' import { router } from 'kea-router' + import api from 'lib/api' import { lemonToast } from 'lib/lemon-ui/LemonToast' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/sites/Site.tsx b/frontend/src/scenes/sites/Site.tsx index e6a82ecb51..c50559e097 100644 --- a/frontend/src/scenes/sites/Site.tsx +++ b/frontend/src/scenes/sites/Site.tsx @@ -1,14 +1,15 @@ import './Site.scss' import { useValues } from 'kea' + import { - authorizedUrlListLogic, AuthorizedUrlListType, + authorizedUrlListLogic, defaultAuthorizedUrlProperties, } from 'lib/components/AuthorizedUrlList/authorizedUrlListLogic' import { SceneExport } from 'scenes/sceneTypes' -import { siteLogic, SiteLogicProps } from './siteLogic' +import { SiteLogicProps, siteLogic } from './siteLogic' export const scene: SceneExport = { component: Site, diff --git a/frontend/src/scenes/sites/siteLogic.ts b/frontend/src/scenes/sites/siteLogic.ts index a59dcf71af..091890df42 100644 --- a/frontend/src/scenes/sites/siteLogic.ts +++ b/frontend/src/scenes/sites/siteLogic.ts @@ -1,4 +1,5 @@ import { kea, path, props, selectors } from 'kea' + import { Scene } from 'scenes/sceneTypes' import { Breadcrumb } from '~/types' diff --git a/frontend/src/scenes/startups/StartupProgram.tsx b/frontend/src/scenes/startups/StartupProgram.tsx index 152b9f6d4c..e6741524cc 100644 --- a/frontend/src/scenes/startups/StartupProgram.tsx +++ b/frontend/src/scenes/startups/StartupProgram.tsx @@ -1,7 +1,9 @@ -import { IconArrowRight, IconCheck, IconUpload, IconX } from '@posthog/icons' -import { LemonButton, LemonFileInput, LemonInput, LemonSelect, lemonToast, Link, Spinner } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' + +import { IconArrowRight, IconCheck, IconUpload, IconX } from '@posthog/icons' +import { LemonButton, LemonFileInput, LemonInput, LemonSelect, Link, Spinner, lemonToast } from '@posthog/lemon-ui' + import { BillingUpgradeCTA } from 'lib/components/BillingUpgradeCTA' import { ClimberHog1, ClimberHog2, YCHog } from 'lib/components/hedgehogs' import { useUploadFiles } from 'lib/hooks/useUploadFiles' diff --git a/frontend/src/scenes/startups/startupProgramLogic.ts b/frontend/src/scenes/startups/startupProgramLogic.ts index d7ec46bb07..c1e3cd73c1 100644 --- a/frontend/src/scenes/startups/startupProgramLogic.ts +++ b/frontend/src/scenes/startups/startupProgramLogic.ts @@ -1,10 +1,12 @@ -import { lemonToast } from '@posthog/lemon-ui' import { actions, connect, kea, path, props, reducers, selectors } from 'kea' import { forms } from 'kea-forms' +import posthog from 'posthog-js' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { TeamMembershipLevel } from 'lib/constants' import { Dayjs, dayjs } from 'lib/dayjs' -import posthog from 'posthog-js' import { billingLogic } from 'scenes/billing/billingLogic' import { organizationLogic } from 'scenes/organizationLogic' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/scenes/startups/utils.ts b/frontend/src/scenes/startups/utils.ts index ba2a38ce3d..51e2e32cab 100644 --- a/frontend/src/scenes/startups/utils.ts +++ b/frontend/src/scenes/startups/utils.ts @@ -1,6 +1,7 @@ -import { dayjs } from 'lib/dayjs' import sortBy from 'lodash.sortby' +import { dayjs } from 'lib/dayjs' + import { YC_BATCHES } from './constants' /** diff --git a/frontend/src/scenes/surveys/CONTRIBUTING.md b/frontend/src/scenes/surveys/CONTRIBUTING.md index 80a6cb64ba..487c491a10 100644 --- a/frontend/src/scenes/surveys/CONTRIBUTING.md +++ b/frontend/src/scenes/surveys/CONTRIBUTING.md @@ -15,6 +15,7 @@ Most survey logic lives in the [PostHog JS SDK](https://github.com/PostHog/posth 2. To test SDK changes in the main PostHog app: - Update `package.json` to use your local SDK: + ```json "posthog-js": "file:../posthog-js" ``` diff --git a/frontend/src/scenes/surveys/CopySurveyLink.tsx b/frontend/src/scenes/surveys/CopySurveyLink.tsx index a899e22527..a1e9068217 100644 --- a/frontend/src/scenes/surveys/CopySurveyLink.tsx +++ b/frontend/src/scenes/surveys/CopySurveyLink.tsx @@ -1,4 +1,5 @@ import { LemonButton } from '@posthog/lemon-ui' + import { IconLink } from 'lib/lemon-ui/icons' import { copyToClipboard } from 'lib/utils/copyToClipboard' diff --git a/frontend/src/scenes/surveys/DuplicateToProjectModal.tsx b/frontend/src/scenes/surveys/DuplicateToProjectModal.tsx index 273f9065b8..e0497eecba 100644 --- a/frontend/src/scenes/surveys/DuplicateToProjectModal.tsx +++ b/frontend/src/scenes/surveys/DuplicateToProjectModal.tsx @@ -1,6 +1,8 @@ -import { LemonButton, LemonModal, LemonTag } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { useState } from 'react' + +import { LemonButton, LemonModal, LemonTag } from '@posthog/lemon-ui' + import { organizationLogic } from 'scenes/organizationLogic' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/scenes/surveys/Survey.tsx b/frontend/src/scenes/surveys/Survey.tsx index 9598f7762a..7bdff57389 100644 --- a/frontend/src/scenes/surveys/Survey.tsx +++ b/frontend/src/scenes/surveys/Survey.tsx @@ -1,23 +1,25 @@ -import { LemonButton, LemonDivider, LemonTag, lemonToast, Link } from '@posthog/lemon-ui' import { BindLogic, useActions, useValues } from 'kea' import { Form } from 'kea-forms' import { router } from 'kea-router' +import { useEffect } from 'react' + +import { LemonButton, LemonDivider, LemonTag, Link, lemonToast } from '@posthog/lemon-ui' + import { FlagSelector } from 'lib/components/FlagSelector' import { NotFound } from 'lib/components/NotFound' import { PageHeader } from 'lib/components/PageHeader' import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' -import { useEffect } from 'react' -import { featureFlagLogic } from 'scenes/feature-flags/featureFlagLogic' import { FeatureFlagReleaseConditions } from 'scenes/feature-flags/FeatureFlagReleaseConditions' +import { featureFlagLogic } from 'scenes/feature-flags/featureFlagLogic' import { SceneExport } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' import { FeatureFlagFilters, Survey, SurveyMatchType } from '~/types' -import { LOADING_SURVEY_RESULTS_TOAST_ID, NewSurvey, SurveyMatchTypeLabels } from './constants' import SurveyEdit from './SurveyEdit' -import { surveyLogic } from './surveyLogic' import { SurveyView } from './SurveyView' +import { LOADING_SURVEY_RESULTS_TOAST_ID, NewSurvey, SurveyMatchTypeLabels } from './constants' +import { surveyLogic } from './surveyLogic' export const scene: SceneExport = { component: SurveyComponent, diff --git a/frontend/src/scenes/surveys/SurveyAppearancePreview.tsx b/frontend/src/scenes/surveys/SurveyAppearancePreview.tsx index 4ed5bf0001..416415d1ce 100644 --- a/frontend/src/scenes/surveys/SurveyAppearancePreview.tsx +++ b/frontend/src/scenes/surveys/SurveyAppearancePreview.tsx @@ -1,5 +1,6 @@ import { renderFeedbackWidgetPreview, renderSurveysPreview } from 'posthog-js/dist/surveys-preview' import { useEffect, useMemo, useRef } from 'react' + import { sanitizeSurvey } from 'scenes/surveys/utils' import { Survey } from '~/types' diff --git a/frontend/src/scenes/surveys/SurveyAppearanceUtils.tsx b/frontend/src/scenes/surveys/SurveyAppearanceUtils.tsx index 1885be6ee7..b49e3edf5c 100644 --- a/frontend/src/scenes/surveys/SurveyAppearanceUtils.tsx +++ b/frontend/src/scenes/surveys/SurveyAppearanceUtils.tsx @@ -1,5 +1,7 @@ -import { LemonBanner, LemonTabs, LemonTextArea } from '@posthog/lemon-ui' import clsx from 'clsx' + +import { LemonBanner, LemonTabs, LemonTextArea } from '@posthog/lemon-ui' + import { CodeEditor } from 'lib/monaco/CodeEditor' import { SurveyQuestionDescriptionContentType } from '~/types' diff --git a/frontend/src/scenes/surveys/SurveyDragHandle.test.tsx b/frontend/src/scenes/surveys/SurveyDragHandle.test.tsx index 0a08e93256..33008d6002 100644 --- a/frontend/src/scenes/surveys/SurveyDragHandle.test.tsx +++ b/frontend/src/scenes/surveys/SurveyDragHandle.test.tsx @@ -1,5 +1,4 @@ import '@testing-library/jest-dom' - import { cleanup, render } from '@testing-library/react' import { SurveyDragHandle } from './SurveyDragHandle' diff --git a/frontend/src/scenes/surveys/SurveyDragHandle.tsx b/frontend/src/scenes/surveys/SurveyDragHandle.tsx index 49b4ec77e7..450df2a10d 100644 --- a/frontend/src/scenes/surveys/SurveyDragHandle.tsx +++ b/frontend/src/scenes/surveys/SurveyDragHandle.tsx @@ -1,4 +1,5 @@ import { DraggableSyntheticListeners } from '@dnd-kit/core' + import { SortableDragIcon } from 'lib/lemon-ui/icons' interface SurveyDragHandleProps { diff --git a/frontend/src/scenes/surveys/SurveyEdit.tsx b/frontend/src/scenes/surveys/SurveyEdit.tsx index e36ae0483c..ae25072187 100644 --- a/frontend/src/scenes/surveys/SurveyEdit.tsx +++ b/frontend/src/scenes/surveys/SurveyEdit.tsx @@ -2,6 +2,9 @@ import './EditSurvey.scss' import { DndContext } from '@dnd-kit/core' import { SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable' +import { BindLogic, useActions, useMountedLogic, useValues } from 'kea' +import { useState } from 'react' + import { IconInfo, IconPlus, IconTrash } from '@posthog/icons' import { LemonButton, @@ -18,26 +21,27 @@ import { Link, Popover, } from '@posthog/lemon-ui' -import { BindLogic, useActions, useMountedLogic, useValues } from 'kea' + +import api from 'lib/api' import { EventSelect } from 'lib/components/EventSelect/EventSelect' import { FlagSelector } from 'lib/components/FlagSelector' import { PropertyValue } from 'lib/components/PropertyFilters/components/PropertyValue' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' -import api from 'lib/api' import { FEATURE_FLAGS } from 'lib/constants' import { dayjs } from 'lib/dayjs' -import { IconCancel } from 'lib/lemon-ui/icons' import { LemonField } from 'lib/lemon-ui/LemonField' import { LemonRadio, LemonRadioOption } from 'lib/lemon-ui/LemonRadio' import { Tooltip } from 'lib/lemon-ui/Tooltip' +import { IconCancel } from 'lib/lemon-ui/icons' import { featureFlagLogic as enabledFeaturesLogic } from 'lib/logic/featureFlagLogic' import { formatDate } from 'lib/utils' -import { featureFlagLogic } from 'scenes/feature-flags/featureFlagLogic' import { FeatureFlagReleaseConditions } from 'scenes/feature-flags/FeatureFlagReleaseConditions' -import { Customization } from 'scenes/surveys/survey-appearance/SurveyCustomization' +import { featureFlagLogic } from 'scenes/feature-flags/featureFlagLogic' +import { ANY_VARIANT, variantOptions } from 'scenes/settings/environment/ReplayTriggers' import { SurveyRepeatSchedule } from 'scenes/surveys/SurveyRepeatSchedule' import { SurveyResponsesCollection } from 'scenes/surveys/SurveyResponsesCollection' import { SurveyWidgetCustomization } from 'scenes/surveys/SurveyWidgetCustomization' +import { Customization } from 'scenes/surveys/survey-appearance/SurveyCustomization' import { sanitizeSurveyAppearance, validateSurveyAppearance } from 'scenes/surveys/utils' import { actionsModel } from '~/models/actionsModel' @@ -55,15 +59,13 @@ import { SurveyType, } from '~/types' -import { defaultSurveyFieldValues, SURVEY_TYPE_LABEL_MAP, SurveyMatchTypeLabels } from './constants' import { SurveyAPIEditor } from './SurveyAPIEditor' import { SurveyAppearancePreview } from './SurveyAppearancePreview' import { HTMLEditor, PresentationTypeCard } from './SurveyAppearanceUtils' import { SurveyEditQuestionGroup, SurveyEditQuestionHeader } from './SurveyEditQuestionRow' import { SurveyFormAppearance } from './SurveyFormAppearance' +import { SURVEY_TYPE_LABEL_MAP, SurveyMatchTypeLabels, defaultSurveyFieldValues } from './constants' import { DataCollectionType, SurveyEditSection, surveyLogic } from './surveyLogic' -import { ANY_VARIANT, variantOptions } from 'scenes/settings/environment/ReplayTriggers' -import { useState } from 'react' function SurveyCompletionConditions(): JSX.Element { const { survey, dataCollectionType, isAdaptiveLimitFFEnabled } = useValues(surveyLogic) diff --git a/frontend/src/scenes/surveys/SurveyEditQuestionRow.tsx b/frontend/src/scenes/surveys/SurveyEditQuestionRow.tsx index 4ba9ac4d26..537b550308 100644 --- a/frontend/src/scenes/surveys/SurveyEditQuestionRow.tsx +++ b/frontend/src/scenes/surveys/SurveyEditQuestionRow.tsx @@ -2,10 +2,12 @@ import './EditSurvey.scss' import { useSortable } from '@dnd-kit/sortable' import { CSS } from '@dnd-kit/utilities' -import { IconPlusSmall, IconTrash } from '@posthog/icons' -import { LemonButton, LemonCheckbox, LemonDialog, LemonInput, LemonSelect, LemonTag } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { Group } from 'kea-forms' + +import { IconPlusSmall, IconTrash } from '@posthog/icons' +import { LemonButton, LemonCheckbox, LemonDialog, LemonInput, LemonSelect, LemonTag } from '@posthog/lemon-ui' + import { LemonField } from 'lib/lemon-ui/LemonField' import { QuestionBranchingInput } from 'scenes/surveys/components/question-branching/QuestionBranchingInput' @@ -18,15 +20,15 @@ import { SurveyType, } from '~/types' +import { HTMLEditor } from './SurveyAppearanceUtils' +import { SurveyDragHandle } from './SurveyDragHandle' import { - defaultSurveyFieldValues, NewSurvey, SCALE_OPTIONS, SURVEY_RATING_SCALE, SurveyQuestionLabel, + defaultSurveyFieldValues, } from './constants' -import { HTMLEditor } from './SurveyAppearanceUtils' -import { SurveyDragHandle } from './SurveyDragHandle' import { surveyLogic } from './surveyLogic' type SurveyQuestionHeaderProps = { diff --git a/frontend/src/scenes/surveys/SurveyFormAppearance.tsx b/frontend/src/scenes/surveys/SurveyFormAppearance.tsx index 61dacc3d62..f843efa710 100644 --- a/frontend/src/scenes/surveys/SurveyFormAppearance.tsx +++ b/frontend/src/scenes/surveys/SurveyFormAppearance.tsx @@ -1,14 +1,16 @@ -import { LemonSelect } from '@posthog/lemon-ui' import { useValues } from 'kea' -import { LemonField } from 'lib/lemon-ui/LemonField' import { getNextSurveyStep } from 'posthog-js/dist/surveys-preview' + +import { LemonSelect } from '@posthog/lemon-ui' + +import { LemonField } from 'lib/lemon-ui/LemonField' import { surveysLogic } from 'scenes/surveys/surveysLogic' import { Survey, SurveyQuestionBranchingType, SurveyType } from '~/types' -import { NewSurvey } from './constants' import { SurveyAPIEditor } from './SurveyAPIEditor' import { SurveyAppearancePreview } from './SurveyAppearancePreview' +import { NewSurvey } from './constants' interface SurveyFormAppearanceProps { previewPageIndex: number diff --git a/frontend/src/scenes/surveys/SurveyOverview.tsx b/frontend/src/scenes/surveys/SurveyOverview.tsx index 61d2813bf9..55a66a36d2 100644 --- a/frontend/src/scenes/surveys/SurveyOverview.tsx +++ b/frontend/src/scenes/surveys/SurveyOverview.tsx @@ -1,20 +1,22 @@ -import { LemonDivider, Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonDivider, Link } from '@posthog/lemon-ui' + import { FlaggedFeature } from 'lib/components/FlaggedFeature' import { TZLabel } from 'lib/components/TZLabel' import { FEATURE_FLAGS } from 'lib/constants' import { IconAreaChart, IconComment, IconGridView, IconLink, IconListView } from 'lib/lemon-ui/icons' import { pluralize } from 'lib/utils' +import { CopySurveyLink } from 'scenes/surveys/CopySurveyLink' +import { SurveyDisplaySummary } from 'scenes/surveys/Survey' +import { SurveyAPIEditor } from 'scenes/surveys/SurveyAPIEditor' +import { SurveyFormAppearance } from 'scenes/surveys/SurveyFormAppearance' import { FirstSurveyHelper } from 'scenes/surveys/components/empty-state/FirstSurveyHelper' import { SURVEY_EMPTY_STATE_EXPERIMENT_VARIANT, SURVEY_TYPE_LABEL_MAP, SurveyQuestionLabel, } from 'scenes/surveys/constants' -import { CopySurveyLink } from 'scenes/surveys/CopySurveyLink' -import { SurveyDisplaySummary } from 'scenes/surveys/Survey' -import { SurveyAPIEditor } from 'scenes/surveys/SurveyAPIEditor' -import { SurveyFormAppearance } from 'scenes/surveys/SurveyFormAppearance' import { surveyLogic } from 'scenes/surveys/surveyLogic' import { SurveyQuestionType, SurveySchedule as SurveyScheduleEnum, SurveyType } from '~/types' diff --git a/frontend/src/scenes/surveys/SurveyRepeatSchedule.tsx b/frontend/src/scenes/surveys/SurveyRepeatSchedule.tsx index 76a7d47c43..6a4a55b739 100644 --- a/frontend/src/scenes/surveys/SurveyRepeatSchedule.tsx +++ b/frontend/src/scenes/surveys/SurveyRepeatSchedule.tsx @@ -1,8 +1,10 @@ import './EditSurvey.scss' +import { useActions, useValues } from 'kea' + import { IconInfo } from '@posthog/icons' import { LemonBanner, LemonInput, LemonSnack, Link } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { LemonField } from 'lib/lemon-ui/LemonField' import { LemonRadio } from 'lib/lemon-ui/LemonRadio' import { pluralize } from 'lib/utils' diff --git a/frontend/src/scenes/surveys/SurveyResponseFilters.tsx b/frontend/src/scenes/surveys/SurveyResponseFilters.tsx index 1e7bf3ff19..a6969dacbd 100644 --- a/frontend/src/scenes/surveys/SurveyResponseFilters.tsx +++ b/frontend/src/scenes/surveys/SurveyResponseFilters.tsx @@ -1,14 +1,16 @@ +import { useActions, useValues } from 'kea' +import React, { useState } from 'react' + import { IconCode, IconCopy, IconRefresh } from '@posthog/icons' import { LemonButton, LemonSelect, LemonSelectOptions } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { DateFilter } from 'lib/components/DateFilter/DateFilter' -import { PropertyValue } from 'lib/components/PropertyFilters/components/PropertyValue' import { PropertyFilters } from 'lib/components/PropertyFilters/PropertyFilters' +import { PropertyValue } from 'lib/components/PropertyFilters/components/PropertyValue' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { LemonDivider } from 'lib/lemon-ui/LemonDivider' import { allOperatorsMapping } from 'lib/utils' import { copyToClipboard } from 'lib/utils/copyToClipboard' -import React, { useState } from 'react' import { QUESTION_TYPE_ICON_MAP, SurveyQuestionLabel } from 'scenes/surveys/constants' import { getSurveyEndDateForQuery, getSurveyIdBasedResponseKey, getSurveyStartDateForQuery } from 'scenes/surveys/utils' @@ -25,8 +27,8 @@ import { SurveyQuestionType, } from '~/types' -import { surveyLogic } from './surveyLogic' import { SurveySQLHelper } from './SurveySQLHelper' +import { surveyLogic } from './surveyLogic' type OperatorOption = { label: string; value: PropertyOperator } diff --git a/frontend/src/scenes/surveys/SurveyResponsesCollection.tsx b/frontend/src/scenes/surveys/SurveyResponsesCollection.tsx index c53f04fe10..eed63bf65e 100644 --- a/frontend/src/scenes/surveys/SurveyResponsesCollection.tsx +++ b/frontend/src/scenes/surveys/SurveyResponsesCollection.tsx @@ -1,5 +1,7 @@ -import { LemonBanner } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonBanner } from '@posthog/lemon-ui' + import { LemonField } from 'lib/lemon-ui/LemonField' import { LemonRadio } from 'lib/lemon-ui/LemonRadio' import { surveyLogic } from 'scenes/surveys/surveyLogic' diff --git a/frontend/src/scenes/surveys/SurveyResultDemo.tsx b/frontend/src/scenes/surveys/SurveyResultDemo.tsx index ba7dab40c8..4bfcb24ae8 100644 --- a/frontend/src/scenes/surveys/SurveyResultDemo.tsx +++ b/frontend/src/scenes/surveys/SurveyResultDemo.tsx @@ -1,12 +1,14 @@ +import { useValues } from 'kea' +import { useMemo } from 'react' + import { IconGraph, IconInfo } from '@posthog/icons' import { LemonBanner, LemonButton, LemonTable } from '@posthog/lemon-ui' -import { useValues } from 'kea' + import { TZLabel } from 'lib/components/TZLabel' -import { useMemo } from 'react' import { PersonDisplay } from 'scenes/persons/PersonDisplay' +import { SurveyStatsSummaryWithData } from 'scenes/surveys/SurveyStatsSummary' import { SurveyQuestionVisualization } from 'scenes/surveys/components/question-visualizations/SurveyQuestionVisualization' import { surveyLogic } from 'scenes/surveys/surveyLogic' -import { SurveyStatsSummaryWithData } from 'scenes/surveys/SurveyStatsSummary' import { SurveyQuestionType } from '~/types' diff --git a/frontend/src/scenes/surveys/SurveySQLHelper.tsx b/frontend/src/scenes/surveys/SurveySQLHelper.tsx index 1770aa9737..bd2d9a473a 100644 --- a/frontend/src/scenes/surveys/SurveySQLHelper.tsx +++ b/frontend/src/scenes/surveys/SurveySQLHelper.tsx @@ -1,9 +1,11 @@ -import { LemonButton, LemonDivider, LemonModal } from '@posthog/lemon-ui' import { useValues } from 'kea' import { router } from 'kea-router' +import { SurveyQuestionType } from 'posthog-js' + +import { LemonButton, LemonDivider, LemonModal } from '@posthog/lemon-ui' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' import { IconOpenInNew } from 'lib/lemon-ui/icons' -import { SurveyQuestionType } from 'posthog-js' import { surveyLogic } from 'scenes/surveys/surveyLogic' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/surveys/SurveySettings.tsx b/frontend/src/scenes/surveys/SurveySettings.tsx index cc963b7045..c6a2bbb1cc 100644 --- a/frontend/src/scenes/surveys/SurveySettings.tsx +++ b/frontend/src/scenes/surveys/SurveySettings.tsx @@ -1,12 +1,14 @@ -import { IconGear } from '@posthog/icons' -import { LemonBanner, LemonButton, LemonDivider, LemonSwitch, Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { DeepPartialMap, ValidationErrorType } from 'kea-forms' +import { useState } from 'react' + +import { IconGear } from '@posthog/icons' +import { LemonBanner, LemonButton, LemonDivider, LemonSwitch, Link } from '@posthog/lemon-ui' + import { FEATURE_FLAGS } from 'lib/constants' import { LemonDialog } from 'lib/lemon-ui/LemonDialog' import { LemonField } from 'lib/lemon-ui/LemonField' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { useState } from 'react' import { surveysLogic } from 'scenes/surveys/surveysLogic' import { sanitizeSurveyAppearance, validateSurveyAppearance } from 'scenes/surveys/utils' import { teamLogic } from 'scenes/teamLogic' @@ -14,9 +16,9 @@ import { urls } from 'scenes/urls' import { SurveyAppearance } from '~/types' -import { defaultSurveyAppearance, NEW_SURVEY } from './constants' -import { Customization } from './survey-appearance/SurveyCustomization' import { SurveyAppearancePreview } from './SurveyAppearancePreview' +import { NEW_SURVEY, defaultSurveyAppearance } from './constants' +import { Customization } from './survey-appearance/SurveyCustomization' interface Props { isModal?: boolean diff --git a/frontend/src/scenes/surveys/SurveyStatsSummary.tsx b/frontend/src/scenes/surveys/SurveyStatsSummary.tsx index 29735aad03..3aef7336ea 100644 --- a/frontend/src/scenes/surveys/SurveyStatsSummary.tsx +++ b/frontend/src/scenes/surveys/SurveyStatsSummary.tsx @@ -1,13 +1,15 @@ -import { LemonSkeleton, LemonSwitch } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' +import { memo } from 'react' + +import { LemonSkeleton, LemonSwitch } from '@posthog/lemon-ui' + import { TZLabel } from 'lib/components/TZLabel' import { humanFriendlyNumber, percentage, pluralize } from 'lib/utils' -import { memo } from 'react' +import { CopySurveyLink } from 'scenes/surveys/CopySurveyLink' import { StackedBar, StackedBarSegment, StackedBarSkeleton } from 'scenes/surveys/components/StackedBar' import { SurveyEventName, SurveyRates, SurveyStats, SurveyType } from '~/types' -import { CopySurveyLink } from 'scenes/surveys/CopySurveyLink' import { surveyLogic } from './surveyLogic' interface StatCardProps { diff --git a/frontend/src/scenes/surveys/SurveyTemplates.tsx b/frontend/src/scenes/surveys/SurveyTemplates.tsx index 3e9a0a00c4..abf2131a45 100644 --- a/frontend/src/scenes/surveys/SurveyTemplates.tsx +++ b/frontend/src/scenes/surveys/SurveyTemplates.tsx @@ -1,22 +1,24 @@ -import { LemonButton, LemonTag, Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonButton, LemonTag, Link } from '@posthog/lemon-ui' + import { PageHeader } from 'lib/components/PageHeader' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' import { SceneExport } from 'scenes/sceneTypes' +import { SurveyFeedbackButton } from 'scenes/surveys/components/SurveyFeedbackButton' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' import { Survey, SurveyAppearance } from '~/types' -import { SurveyFeedbackButton } from 'scenes/surveys/components/SurveyFeedbackButton' +import { SurveyAppearancePreview } from './SurveyAppearancePreview' import { - defaultSurveyAppearance, NewSurvey, SurveyTemplate, SurveyTemplateType, + defaultSurveyAppearance, defaultSurveyTemplates as templates, } from './constants' -import { SurveyAppearancePreview } from './SurveyAppearancePreview' import { surveyLogic } from './surveyLogic' export const scene: SceneExport = { diff --git a/frontend/src/scenes/surveys/SurveyView.tsx b/frontend/src/scenes/surveys/SurveyView.tsx index b6bbe45271..0a244846a4 100644 --- a/frontend/src/scenes/surveys/SurveyView.tsx +++ b/frontend/src/scenes/surveys/SurveyView.tsx @@ -1,25 +1,45 @@ import './SurveyView.scss' +import { useActions, useValues } from 'kea' +import { useEffect, useState } from 'react' + import { IconGraph, IconTrash } from '@posthog/icons' import { LemonButton, LemonDialog, LemonDivider } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { ActivityLog } from 'lib/components/ActivityLog/ActivityLog' import { EditableField } from 'lib/components/EditableField/EditableField' import { PageHeader } from 'lib/components/PageHeader' +import { SceneCommonButtons } from 'lib/components/Scenes/SceneCommonButtons' +import { SceneFile } from 'lib/components/Scenes/SceneFile' +import { FEATURE_FLAGS } from 'lib/constants' import { More } from 'lib/lemon-ui/LemonButton/More' import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' import { LemonTabs } from 'lib/lemon-ui/LemonTabs' -import { useEffect, useState } from 'react' +import { featureFlagLogic } from 'lib/logic/featureFlagLogic' +import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' +import { WrappingLoadingSkeleton } from 'lib/ui/WrappingLoadingSkeleton/WrappingLoadingSkeleton' +import { ProductIntentContext } from 'lib/utils/product-intents' import { LinkedHogFunctions } from 'scenes/hog-functions/list/LinkedHogFunctions' -import { SurveyQuestionVisualization } from 'scenes/surveys/components/question-visualizations/SurveyQuestionVisualization' -import { surveyLogic } from 'scenes/surveys/surveyLogic' +import { organizationLogic } from 'scenes/organizationLogic' +import { DuplicateToProjectModal, DuplicateToProjectTrigger } from 'scenes/surveys/DuplicateToProjectModal' import { SurveyNoResponsesBanner } from 'scenes/surveys/SurveyNoResponsesBanner' import { SurveyOverview } from 'scenes/surveys/SurveyOverview' import { SurveyResponseFilters } from 'scenes/surveys/SurveyResponseFilters' import { SurveyResultDemo } from 'scenes/surveys/SurveyResultDemo' -import { surveysLogic } from 'scenes/surveys/surveysLogic' import { SurveyStatsSummary } from 'scenes/surveys/SurveyStatsSummary' +import { LaunchSurveyButton } from 'scenes/surveys/components/LaunchSurveyButton' +import { SurveyFeedbackButton } from 'scenes/surveys/components/SurveyFeedbackButton' +import { SurveyQuestionVisualization } from 'scenes/surveys/components/question-visualizations/SurveyQuestionVisualization' +import { surveyLogic } from 'scenes/surveys/surveyLogic' +import { surveysLogic } from 'scenes/surveys/surveysLogic' +import { + ScenePanel, + ScenePanelActions, + ScenePanelCommonActions, + ScenePanelDivider, + ScenePanelMetaInfo, +} from '~/layout/scenes/SceneLayout' import { Query } from '~/queries/Query/Query' import { ActivityScope, @@ -30,25 +50,8 @@ import { SurveyQuestionType, } from '~/types' -import { SceneCommonButtons } from 'lib/components/Scenes/SceneCommonButtons' -import { SceneFile } from 'lib/components/Scenes/SceneFile' -import { FEATURE_FLAGS } from 'lib/constants' -import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' -import { WrappingLoadingSkeleton } from 'lib/ui/WrappingLoadingSkeleton/WrappingLoadingSkeleton' -import { ProductIntentContext } from 'lib/utils/product-intents' -import { organizationLogic } from 'scenes/organizationLogic' -import { LaunchSurveyButton } from 'scenes/surveys/components/LaunchSurveyButton' -import { SurveyFeedbackButton } from 'scenes/surveys/components/SurveyFeedbackButton' -import { DuplicateToProjectModal, DuplicateToProjectTrigger } from 'scenes/surveys/DuplicateToProjectModal' -import { - ScenePanel, - ScenePanelActions, - ScenePanelCommonActions, - ScenePanelDivider, - ScenePanelMetaInfo, -} from '~/layout/scenes/SceneLayout' import { SurveysDisabledBanner } from './SurveySettings' + const RESOURCE_TYPE = 'survey' export function SurveyView({ id }: { id: string }): JSX.Element { diff --git a/frontend/src/scenes/surveys/SurveyWidgetCustomization.tsx b/frontend/src/scenes/surveys/SurveyWidgetCustomization.tsx index 3f0cb51d3b..e13dd5f598 100644 --- a/frontend/src/scenes/surveys/SurveyWidgetCustomization.tsx +++ b/frontend/src/scenes/surveys/SurveyWidgetCustomization.tsx @@ -1,5 +1,7 @@ -import { LemonCheckbox, LemonInput, LemonSelect } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonCheckbox, LemonInput, LemonSelect } from '@posthog/lemon-ui' + import { LemonField } from 'lib/lemon-ui/LemonField' import { surveyLogic } from 'scenes/surveys/surveyLogic' diff --git a/frontend/src/scenes/surveys/Surveys.stories.tsx b/frontend/src/scenes/surveys/Surveys.stories.tsx index 4b9b4d8374..1791d1ee9a 100644 --- a/frontend/src/scenes/surveys/Surveys.stories.tsx +++ b/frontend/src/scenes/surveys/Surveys.stories.tsx @@ -1,4 +1,6 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' + +import { useDelayedOnMountEffect } from 'lib/hooks/useOnMountEffect' import { App } from 'scenes/App' import { SurveysTabs } from 'scenes/surveys/surveysLogic' import { urls } from 'scenes/urls' @@ -18,7 +20,6 @@ import { } from '~/types' import { SurveyEditSection, surveyLogic } from './surveyLogic' -import { useDelayedOnMountEffect } from 'lib/hooks/useOnMountEffect' const MOCK_BASIC_SURVEY: Survey = { id: '0187c279-bcae-0000-34f5-4f121921f005', diff --git a/frontend/src/scenes/surveys/Surveys.tsx b/frontend/src/scenes/surveys/Surveys.tsx index 57dbd3609b..1c7dec4c1b 100644 --- a/frontend/src/scenes/surveys/Surveys.tsx +++ b/frontend/src/scenes/surveys/Surveys.tsx @@ -1,3 +1,7 @@ +import { useActions, useValues } from 'kea' +import { router } from 'kea-router' +import posthog from 'posthog-js' + import { LemonButton, LemonDialog, @@ -10,8 +14,7 @@ import { Link, Spinner, } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' -import { router } from 'kea-router' + import { ActivityLog } from 'lib/components/ActivityLog/ActivityLog' import { MemberSelect } from 'lib/components/MemberSelect' import { PageHeader } from 'lib/components/PageHeader' @@ -19,26 +22,25 @@ import { VersionCheckerBanner } from 'lib/components/VersionChecker/VersionCheck import { dayjs } from 'lib/dayjs' import { More } from 'lib/lemon-ui/LemonButton/More' import { LemonTableColumn } from 'lib/lemon-ui/LemonTable' -import { createdAtColumn } from 'lib/lemon-ui/LemonTable/columnUtils' import { LemonTableLink } from 'lib/lemon-ui/LemonTable/LemonTableLink' +import { createdAtColumn } from 'lib/lemon-ui/LemonTable/columnUtils' import { LemonTabs } from 'lib/lemon-ui/LemonTabs' +import { ProductIntentContext } from 'lib/utils/product-intents' import stringWithWBR from 'lib/utils/stringWithWBR' -import posthog from 'posthog-js' import { LinkedHogFunctions } from 'scenes/hog-functions/list/LinkedHogFunctions' import MaxTool from 'scenes/max/MaxTool' import { SceneExport } from 'scenes/sceneTypes' +import { SurveyFeedbackButton } from 'scenes/surveys/components/SurveyFeedbackButton' +import { SurveysEmptyState } from 'scenes/surveys/components/empty-state/SurveysEmptyState' import { isSurveyRunning } from 'scenes/surveys/utils' import { urls } from 'scenes/urls' import { userLogic } from 'scenes/userLogic' import { ActivityScope, ProductKey, ProgressStatus, Survey } from '~/types' -import { ProductIntentContext } from 'lib/utils/product-intents' -import { SurveysEmptyState } from 'scenes/surveys/components/empty-state/SurveysEmptyState' -import { SurveyFeedbackButton } from 'scenes/surveys/components/SurveyFeedbackButton' +import { SurveySettings, SurveysDisabledBanner } from './SurveySettings' import { SURVEY_CREATED_SOURCE, SURVEY_TYPE_LABEL_MAP, SurveyQuestionLabel } from './constants' -import { SurveysDisabledBanner, SurveySettings } from './SurveySettings' -import { getSurveyStatus, surveysLogic, SurveysTabs } from './surveysLogic' +import { SurveysTabs, getSurveyStatus, surveysLogic } from './surveysLogic' export const scene: SceneExport = { component: Surveys, diff --git a/frontend/src/scenes/surveys/components/LaunchSurveyButton.tsx b/frontend/src/scenes/surveys/components/LaunchSurveyButton.tsx index adcc1d4f54..d3b00e3838 100644 --- a/frontend/src/scenes/surveys/components/LaunchSurveyButton.tsx +++ b/frontend/src/scenes/surveys/components/LaunchSurveyButton.tsx @@ -1,9 +1,12 @@ -import { LemonButton, LemonDialog } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { ReactNode } from 'react' + +import { LemonButton, LemonDialog } from '@posthog/lemon-ui' + import { surveyLogic } from 'scenes/surveys/surveyLogic' import { surveysLogic } from 'scenes/surveys/surveysLogic' import { doesSurveyHaveDisplayConditions } from 'scenes/surveys/utils' + import { SurveyType } from '~/types' export function LaunchSurveyButton({ children = 'Launch' }: { children?: ReactNode }): JSX.Element { diff --git a/frontend/src/scenes/surveys/components/LinkToSurveyFormSection.tsx b/frontend/src/scenes/surveys/components/LinkToSurveyFormSection.tsx index c4b3ff7bbe..a2133fc33d 100644 --- a/frontend/src/scenes/surveys/components/LinkToSurveyFormSection.tsx +++ b/frontend/src/scenes/surveys/components/LinkToSurveyFormSection.tsx @@ -1,5 +1,7 @@ -import { Link } from '@posthog/lemon-ui' import { useActions } from 'kea' + +import { Link } from '@posthog/lemon-ui' + import { SurveyEditSection, surveyLogic } from 'scenes/surveys/surveyLogic' interface Props { diff --git a/frontend/src/scenes/surveys/components/StackedBar.tsx b/frontend/src/scenes/surveys/components/StackedBar.tsx index d22129e1c5..a111af490a 100644 --- a/frontend/src/scenes/surveys/components/StackedBar.tsx +++ b/frontend/src/scenes/surveys/components/StackedBar.tsx @@ -1,4 +1,5 @@ import clsx from 'clsx' + import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' import { Tooltip } from 'lib/lemon-ui/Tooltip' import { humanFriendlyNumber } from 'lib/utils' diff --git a/frontend/src/scenes/surveys/components/SurveyFeedbackButton.tsx b/frontend/src/scenes/surveys/components/SurveyFeedbackButton.tsx index 989311955f..e78935d6ee 100644 --- a/frontend/src/scenes/surveys/components/SurveyFeedbackButton.tsx +++ b/frontend/src/scenes/surveys/components/SurveyFeedbackButton.tsx @@ -1,5 +1,7 @@ -import { LemonButton } from '@posthog/lemon-ui' import { useValues } from 'kea' + +import { LemonButton } from '@posthog/lemon-ui' + import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' diff --git a/frontend/src/scenes/surveys/components/empty-state/FirstSurveyHelper.tsx b/frontend/src/scenes/surveys/components/empty-state/FirstSurveyHelper.tsx index e46a569ef4..67c5621f51 100644 --- a/frontend/src/scenes/surveys/components/empty-state/FirstSurveyHelper.tsx +++ b/frontend/src/scenes/surveys/components/empty-state/FirstSurveyHelper.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconBell, IconGraph, IconRocket, IconTarget } from '@posthog/icons' import { LemonButton, Link } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { ProfessorHog } from 'lib/components/hedgehogs' import { LaunchSurveyButton } from 'scenes/surveys/components/LaunchSurveyButton' import { SurveyEditSection, surveyLogic } from 'scenes/surveys/surveyLogic' diff --git a/frontend/src/scenes/surveys/components/empty-state/SurveysEmptyState.tsx b/frontend/src/scenes/surveys/components/empty-state/SurveysEmptyState.tsx index eb9826b047..a53fa74c4d 100644 --- a/frontend/src/scenes/surveys/components/empty-state/SurveysEmptyState.tsx +++ b/frontend/src/scenes/surveys/components/empty-state/SurveysEmptyState.tsx @@ -1,20 +1,24 @@ -import { IconSparkles } from '@posthog/icons' -import { LemonButton } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { router } from 'kea-router' -import { ProductIntroduction } from 'lib/components/ProductIntroduction/ProductIntroduction' -import { ProductIntentContext } from 'lib/utils/product-intents' import posthog from 'posthog-js' import { toast } from 'react-toastify' + +import { IconSparkles } from '@posthog/icons' +import { LemonButton } from '@posthog/lemon-ui' + +import { ProductIntroduction } from 'lib/components/ProductIntroduction/ProductIntroduction' +import { ProductIntentContext } from 'lib/utils/product-intents' import MaxTool from 'scenes/max/MaxTool' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' import { userLogic } from 'scenes/userLogic' + import { sidePanelLogic } from '~/layout/navigation-3000/sidepanel/sidePanelLogic' import { ProductKey, SidePanelTab } from '~/types' -import { defaultSurveyTemplates, SURVEY_CREATED_SOURCE, SurveyTemplate, SurveyTemplateType } from '../../constants' -import { surveysLogic } from '../../surveysLogic' + import { TemplateCard } from '../../SurveyTemplates' +import { SURVEY_CREATED_SOURCE, SurveyTemplate, SurveyTemplateType, defaultSurveyTemplates } from '../../constants' +import { surveysLogic } from '../../surveysLogic' interface Props { numOfSurveys: number diff --git a/frontend/src/scenes/surveys/components/question-branching/QuestionBranchingInput.tsx b/frontend/src/scenes/surveys/components/question-branching/QuestionBranchingInput.tsx index 9debca1d1b..884efc0205 100644 --- a/frontend/src/scenes/surveys/components/question-branching/QuestionBranchingInput.tsx +++ b/frontend/src/scenes/surveys/components/question-branching/QuestionBranchingInput.tsx @@ -1,5 +1,7 @@ -import { LemonDialog, LemonSelect } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonDialog, LemonSelect } from '@posthog/lemon-ui' + import { LemonField } from 'lib/lemon-ui/LemonField' import { truncate } from 'lib/utils' import { NPS_DETRACTOR_LABEL, NPS_PASSIVE_LABEL, NPS_PROMOTER_LABEL } from 'scenes/surveys/constants' diff --git a/frontend/src/scenes/surveys/components/question-branching/utils.test.ts b/frontend/src/scenes/surveys/components/question-branching/utils.test.ts index 829922e236..c4257f52cd 100644 --- a/frontend/src/scenes/surveys/components/question-branching/utils.test.ts +++ b/frontend/src/scenes/surveys/components/question-branching/utils.test.ts @@ -1,6 +1,7 @@ import { SurveyQuestion, SurveyQuestionBranchingType, SurveyQuestionType } from '~/types' import { + SPECIFIC_QUESTION_SEPARATOR, branchingConfigToDropdownValue, canQuestionHaveResponseBasedBranching, createBranchingConfig, @@ -10,7 +11,6 @@ import { isSpecificQuestionValue, isValidBranchingType, parseSpecificQuestionValue, - SPECIFIC_QUESTION_SEPARATOR, } from './utils' describe('branching utils', () => { diff --git a/frontend/src/scenes/surveys/components/question-visualizations/MultipleChoiceQuestionViz.tsx b/frontend/src/scenes/surveys/components/question-visualizations/MultipleChoiceQuestionViz.tsx index 9938ea6023..6810a88a50 100644 --- a/frontend/src/scenes/surveys/components/question-visualizations/MultipleChoiceQuestionViz.tsx +++ b/frontend/src/scenes/surveys/components/question-visualizations/MultipleChoiceQuestionViz.tsx @@ -1,5 +1,6 @@ import { BindLogic } from 'kea' import { useMemo } from 'react' + import { insightLogic } from 'scenes/insights/insightLogic' import { LineGraph } from 'scenes/insights/views/LineGraph/LineGraph' import { ResponseCard, ScrollToSurveyResultsCard } from 'scenes/surveys/components/question-visualizations/ResponseCard' diff --git a/frontend/src/scenes/surveys/components/question-visualizations/OpenQuestionSummarizer.tsx b/frontend/src/scenes/surveys/components/question-visualizations/OpenQuestionSummarizer.tsx index 85fb03ac91..67a544cdc1 100644 --- a/frontend/src/scenes/surveys/components/question-visualizations/OpenQuestionSummarizer.tsx +++ b/frontend/src/scenes/surveys/components/question-visualizations/OpenQuestionSummarizer.tsx @@ -1,11 +1,12 @@ +import { useActions, useValues } from 'kea' +import posthog from 'posthog-js' +import { useState } from 'react' + import { IconSparkles, IconThumbsDown, IconThumbsDownFilled, IconThumbsUp, IconThumbsUpFilled } from '@posthog/icons' import { LemonButton } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' import { LemonDivider } from 'lib/lemon-ui/LemonDivider' import { LemonMarkdown } from 'lib/lemon-ui/LemonMarkdown' -import posthog from 'posthog-js' -import { useState } from 'react' import { maxGlobalLogic } from 'scenes/max/maxGlobalLogic' import { AIConsentPopoverWrapper } from 'scenes/settings/organization/AIConsentPopoverWrapper' import { surveyLogic } from 'scenes/surveys/surveyLogic' diff --git a/frontend/src/scenes/surveys/components/question-visualizations/RatingQuestionViz.tsx b/frontend/src/scenes/surveys/components/question-visualizations/RatingQuestionViz.tsx index cb7362bc9a..f65cb5fca9 100644 --- a/frontend/src/scenes/surveys/components/question-visualizations/RatingQuestionViz.tsx +++ b/frontend/src/scenes/surveys/components/question-visualizations/RatingQuestionViz.tsx @@ -1,14 +1,16 @@ +import { BindLogic, useActions, useValues } from 'kea' + import { IconInfo } from '@posthog/icons' import { LemonCollapse, LemonSkeleton, Tooltip } from '@posthog/lemon-ui' -import { BindLogic, useActions, useValues } from 'kea' + import { CompareFilter } from 'lib/components/CompareFilter/CompareFilter' import { DateFilter } from 'lib/components/DateFilter/DateFilter' import { IntervalFilterStandalone } from 'lib/components/IntervalFilter' import { dayjs } from 'lib/dayjs' import { insightLogic } from 'scenes/insights/insightLogic' import { LineGraph } from 'scenes/insights/views/LineGraph/LineGraph' -import { CHART_INSIGHTS_COLORS } from 'scenes/surveys/components/question-visualizations/util' import { StackedBar, StackedBarSegment, StackedBarSkeleton } from 'scenes/surveys/components/StackedBar' +import { CHART_INSIGHTS_COLORS } from 'scenes/surveys/components/question-visualizations/util' import { NPS_DETRACTOR_LABEL, NPS_DETRACTOR_VALUES, @@ -18,7 +20,7 @@ import { NPS_PROMOTER_VALUES, } from 'scenes/surveys/constants' import { surveyLogic } from 'scenes/surveys/surveyLogic' -import { calculateNpsBreakdownFromProcessedData, NPSBreakdown } from 'scenes/surveys/utils' +import { NPSBreakdown, calculateNpsBreakdownFromProcessedData } from 'scenes/surveys/utils' import { Query } from '~/queries/Query/Query' import { NodeKind } from '~/queries/schema/schema-general' diff --git a/frontend/src/scenes/surveys/components/question-visualizations/SingleChoiceQuestionViz.tsx b/frontend/src/scenes/surveys/components/question-visualizations/SingleChoiceQuestionViz.tsx index 734d671c27..c38a8527a9 100644 --- a/frontend/src/scenes/surveys/components/question-visualizations/SingleChoiceQuestionViz.tsx +++ b/frontend/src/scenes/surveys/components/question-visualizations/SingleChoiceQuestionViz.tsx @@ -1,5 +1,6 @@ import clsx from 'clsx' import { BindLogic } from 'kea' + import { insightLogic } from 'scenes/insights/insightLogic' import { PieChart } from 'scenes/insights/views/LineGraph/PieChart' import { CHART_INSIGHTS_COLORS } from 'scenes/surveys/components/question-visualizations/util' diff --git a/frontend/src/scenes/surveys/components/question-visualizations/SurveyQuestionVisualization.tsx b/frontend/src/scenes/surveys/components/question-visualizations/SurveyQuestionVisualization.tsx index 10d360b1be..f2f030a946 100644 --- a/frontend/src/scenes/surveys/components/question-visualizations/SurveyQuestionVisualization.tsx +++ b/frontend/src/scenes/surveys/components/question-visualizations/SurveyQuestionVisualization.tsx @@ -1,13 +1,15 @@ +import { useValues } from 'kea' + import { IconInfo } from '@posthog/icons' import { LemonDivider, LemonSkeleton, Tooltip } from '@posthog/lemon-ui' -import { useValues } from 'kea' + import { StatelessInsightLoadingState } from 'scenes/insights/EmptyStates' +import { SurveyNoResponsesBanner } from 'scenes/surveys/SurveyNoResponsesBanner' import { MultipleChoiceQuestionViz } from 'scenes/surveys/components/question-visualizations/MultipleChoiceQuestionViz' import { ResponseSummariesButton } from 'scenes/surveys/components/question-visualizations/OpenQuestionSummarizer' import { OpenQuestionViz } from 'scenes/surveys/components/question-visualizations/OpenQuestionViz' import { SurveyQuestionLabel } from 'scenes/surveys/constants' import { surveyLogic } from 'scenes/surveys/surveyLogic' -import { SurveyNoResponsesBanner } from 'scenes/surveys/SurveyNoResponsesBanner' import { ErrorBoundary } from '~/layout/ErrorBoundary' import { QuestionProcessedResponses, SurveyQuestion, SurveyQuestionType } from '~/types' diff --git a/frontend/src/scenes/surveys/survey-appearance/SurveyAppearanceModal.tsx b/frontend/src/scenes/surveys/survey-appearance/SurveyAppearanceModal.tsx index 47e65b93ff..9dcc98a454 100644 --- a/frontend/src/scenes/surveys/survey-appearance/SurveyAppearanceModal.tsx +++ b/frontend/src/scenes/surveys/survey-appearance/SurveyAppearanceModal.tsx @@ -1,11 +1,13 @@ -import { IconGear } from '@posthog/icons' -import { LemonButton, LemonDivider, LemonModal, LemonSelect, LemonSwitch, LemonTabs } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' -import { PayGateMini } from 'lib/components/PayGateMini/PayGateMini' -import { LemonField } from 'lib/lemon-ui/LemonField' import { getNextSurveyStep } from 'posthog-js/dist/surveys-preview' import { useState } from 'react' + +import { IconGear } from '@posthog/icons' +import { LemonButton, LemonDivider, LemonModal, LemonSelect, LemonSwitch, LemonTabs } from '@posthog/lemon-ui' + +import { PayGateMini } from 'lib/components/PayGateMini/PayGateMini' +import { LemonField } from 'lib/lemon-ui/LemonField' import { defaultSurveyAppearance } from 'scenes/surveys/constants' import { SurveyColorsAppearance, diff --git a/frontend/src/scenes/surveys/survey-appearance/SurveyAppearanceSections.tsx b/frontend/src/scenes/surveys/survey-appearance/SurveyAppearanceSections.tsx index 3dd07932e0..1a9f7e4c52 100644 --- a/frontend/src/scenes/surveys/survey-appearance/SurveyAppearanceSections.tsx +++ b/frontend/src/scenes/surveys/survey-appearance/SurveyAppearanceSections.tsx @@ -1,7 +1,9 @@ -import { IconCheck } from '@posthog/icons' -import { LemonButton, LemonInput, LemonSelect } from '@posthog/lemon-ui' import { useValues } from 'kea' import { DeepPartialMap, ValidationErrorType } from 'kea-forms' + +import { IconCheck } from '@posthog/icons' +import { LemonButton, LemonInput, LemonSelect } from '@posthog/lemon-ui' + import { LemonField } from 'lib/lemon-ui/LemonField' import { WEB_SAFE_FONTS } from 'scenes/surveys/constants' import { surveysLogic } from 'scenes/surveys/surveysLogic' diff --git a/frontend/src/scenes/surveys/survey-appearance/SurveyCustomization.tsx b/frontend/src/scenes/surveys/survey-appearance/SurveyCustomization.tsx index f68d5c4e97..ed4e11d71b 100644 --- a/frontend/src/scenes/surveys/survey-appearance/SurveyCustomization.tsx +++ b/frontend/src/scenes/surveys/survey-appearance/SurveyCustomization.tsx @@ -1,5 +1,7 @@ -import { LemonCheckbox, LemonDialog, LemonDivider, LemonInput } from '@posthog/lemon-ui' import { useValues } from 'kea' + +import { LemonCheckbox, LemonDialog, LemonDivider, LemonInput } from '@posthog/lemon-ui' + import { PayGateMini } from 'lib/components/PayGateMini/PayGateMini' import { upgradeModalLogic } from 'lib/components/UpgradeModal/upgradeModalLogic' import { LemonField } from 'lib/lemon-ui/LemonField' diff --git a/frontend/src/scenes/surveys/survey-appearance/types.ts b/frontend/src/scenes/surveys/survey-appearance/types.ts index 6854a3547d..4f07dab6fc 100644 --- a/frontend/src/scenes/surveys/survey-appearance/types.ts +++ b/frontend/src/scenes/surveys/survey-appearance/types.ts @@ -1,4 +1,5 @@ import { DeepPartialMap, ValidationErrorType } from 'kea-forms' + import { NewSurvey } from 'scenes/surveys/constants' import { Survey, SurveyAppearance } from '~/types' diff --git a/frontend/src/scenes/surveys/surveyActivityDescriber.tsx b/frontend/src/scenes/surveys/surveyActivityDescriber.tsx index fe64fbd47e..7a32ad76de 100644 --- a/frontend/src/scenes/surveys/surveyActivityDescriber.tsx +++ b/frontend/src/scenes/surveys/surveyActivityDescriber.tsx @@ -1,17 +1,18 @@ +import { P, match } from 'ts-pattern' + import { ActivityChange, ActivityLogItem, ChangeMapping, - defaultDescriber, Description, - detectBoolean, HumanizedChange, + defaultDescriber, + detectBoolean, userNameForLogItem, } from 'lib/components/ActivityLog/humanizeActivity' import { Link } from 'lib/lemon-ui/Link' import { truncate } from 'lib/utils' import { urls } from 'scenes/urls' -import { match, P } from 'ts-pattern' import { BasicSurveyQuestion, diff --git a/frontend/src/scenes/surveys/surveyLogic.test.ts b/frontend/src/scenes/surveys/surveyLogic.test.ts index 2a224cfc66..8858260e13 100644 --- a/frontend/src/scenes/surveys/surveyLogic.test.ts +++ b/frontend/src/scenes/surveys/surveyLogic.test.ts @@ -1,4 +1,5 @@ import { expectLogic, partial } from 'kea-test-utils' + import { dayjs } from 'lib/dayjs' import { processResultsForSurveyQuestions, surveyLogic } from 'scenes/surveys/surveyLogic' diff --git a/frontend/src/scenes/surveys/surveyLogic.tsx b/frontend/src/scenes/surveys/surveyLogic.tsx index e7bbe683af..bee88b6eef 100644 --- a/frontend/src/scenes/surveys/surveyLogic.tsx +++ b/frontend/src/scenes/surveys/surveyLogic.tsx @@ -1,14 +1,18 @@ -import { lemonToast } from '@posthog/lemon-ui' import { actions, afterMount, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' import { actionToUrl, router, urlToAction } from 'kea-router' +import posthog from 'posthog-js' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { FEATURE_FLAGS } from 'lib/constants' import { dayjs } from 'lib/dayjs' -import { featureFlagLogic as enabledFlagLogic, FeatureFlagsSet } from 'lib/logic/featureFlagLogic' +import { FeatureFlagsSet, featureFlagLogic as enabledFlagLogic } from 'lib/logic/featureFlagLogic' import { allOperatorsMapping, dateStringToDayJs, debounce, hasFormErrors, isObject } from 'lib/utils' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' +import { ProductIntentContext } from 'lib/utils/product-intents' import { Scene } from 'scenes/sceneTypes' import { branchingConfigToDropdownValue, @@ -16,10 +20,12 @@ import { createBranchingConfig, getDefaultBranchingType, } from 'scenes/surveys/components/question-branching/utils' +import { getDemoDataForSurvey } from 'scenes/surveys/utils/demoDataGenerator' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' +import { userLogic } from 'scenes/userLogic' -import { activationLogic, ActivationTask } from '~/layout/navigation-3000/sidepanel/panels/activation/activationLogic' +import { ActivationTask, activationLogic } from '~/layout/navigation-3000/sidepanel/panels/activation/activationLogic' import { refreshTreeItem } from '~/layout/panel-layout/ProjectTree/projectTreeLogic' import { MAX_SELECT_RETURNED_ROWS } from '~/queries/nodes/DataTable/DataTableExport' import { CompareFilter, DataTableNode, InsightVizNode, NodeKind } from '~/queries/schema/schema-general' @@ -58,25 +64,21 @@ import { SurveyStats, } from '~/types' -import { ProductIntentContext } from 'lib/utils/product-intents' -import posthog from 'posthog-js' -import { getDemoDataForSurvey } from 'scenes/surveys/utils/demoDataGenerator' -import { userLogic } from 'scenes/userLogic' import { - defaultSurveyAppearance, - defaultSurveyFieldValues, NEW_SURVEY, NewSurvey, SURVEY_CREATED_SOURCE, SURVEY_RATING_SCALE, + defaultSurveyAppearance, + defaultSurveyFieldValues, } from './constants' import type { surveyLogicType } from './surveyLogicType' import { surveysLogic } from './surveysLogic' import { + DATE_FORMAT, buildPartialResponsesFilter, calculateSurveyRates, createAnswerFilterHogQLExpression, - DATE_FORMAT, getResponseFieldWithId, getSurveyEndDateForQuery, getSurveyResponse, diff --git a/frontend/src/scenes/surveys/surveysLogic.tsx b/frontend/src/scenes/surveys/surveysLogic.tsx index ef834734dd..de319776c9 100644 --- a/frontend/src/scenes/surveys/surveysLogic.tsx +++ b/frontend/src/scenes/surveys/surveysLogic.tsx @@ -1,9 +1,14 @@ -import { lemonToast } from '@posthog/lemon-ui' import Fuse from 'fuse.js' import { actions, afterMount, connect, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { actionToUrl, router, urlToAction } from 'kea-router' + +import { lemonToast } from '@posthog/lemon-ui' + import api, { CountedPaginatedResponse } from 'lib/api' +import { FEATURE_FLAGS } from 'lib/constants' +import { FeatureFlagsSet, featureFlagLogic as enabledFlagLogic } from 'lib/logic/featureFlagLogic' +import { ProductIntentContext } from 'lib/utils/product-intents' import { Scene } from 'scenes/sceneTypes' import { SURVEY_CREATED_SOURCE, @@ -11,18 +16,15 @@ import { SURVEY_PAGE_SIZE, SurveyTemplate, } from 'scenes/surveys/constants' +import { sanitizeSurvey } from 'scenes/surveys/utils' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' import { userLogic } from 'scenes/userLogic' -import { featureFlagLogic as enabledFlagLogic, FeatureFlagsSet } from 'lib/logic/featureFlagLogic' -import { activationLogic, ActivationTask } from '~/layout/navigation-3000/sidepanel/panels/activation/activationLogic' +import { ActivationTask, activationLogic } from '~/layout/navigation-3000/sidepanel/panels/activation/activationLogic' import { deleteFromTree } from '~/layout/panel-layout/ProjectTree/projectTreeLogic' import { AvailableFeature, Breadcrumb, ProductKey, ProgressStatus, Survey } from '~/types' -import { FEATURE_FLAGS } from 'lib/constants' -import { ProductIntentContext } from 'lib/utils/product-intents' -import { sanitizeSurvey } from 'scenes/surveys/utils' import type { surveysLogicType } from './surveysLogicType' export enum SurveysTabs { diff --git a/frontend/src/scenes/surveys/utils.ts b/frontend/src/scenes/surveys/utils.ts index 964bbb2350..1e04e31af2 100644 --- a/frontend/src/scenes/surveys/utils.ts +++ b/frontend/src/scenes/surveys/utils.ts @@ -1,5 +1,6 @@ import DOMPurify from 'dompurify' import { DeepPartialMap, ValidationErrorType } from 'kea-forms' + import { dayjs } from 'lib/dayjs' import { NewSurvey } from 'scenes/surveys/constants' import { SurveyRatingResults } from 'scenes/surveys/surveyLogic' diff --git a/frontend/src/scenes/surveys/utils/demoDataGenerator.ts b/frontend/src/scenes/surveys/utils/demoDataGenerator.ts index f415a40389..cb0f53176d 100644 --- a/frontend/src/scenes/surveys/utils/demoDataGenerator.ts +++ b/frontend/src/scenes/surveys/utils/demoDataGenerator.ts @@ -4,9 +4,9 @@ * Generates highly realistic survey response data to show customers exactly how their * survey results will look. */ - import { dayjs } from 'lib/dayjs' import { calculateSurveyRates } from 'scenes/surveys/utils' + import { ResponsesByQuestion, Survey, @@ -18,6 +18,7 @@ import { SurveyResponseRow, SurveyStats, } from '~/types' + import { NewSurvey, SURVEY_RATING_SCALE } from '../constants' import { processResultsForSurveyQuestions } from '../surveyLogic' diff --git a/frontend/src/scenes/team-activity/marketing_analytics_config/ClearSourceDescriber.tsx b/frontend/src/scenes/team-activity/marketing_analytics_config/ClearSourceDescriber.tsx index 5dd1bc3883..71b061a613 100644 --- a/frontend/src/scenes/team-activity/marketing_analytics_config/ClearSourceDescriber.tsx +++ b/frontend/src/scenes/team-activity/marketing_analytics_config/ClearSourceDescriber.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { Link } from 'lib/lemon-ui/Link' import { urls } from 'scenes/urls' import { diff --git a/frontend/src/scenes/team-activity/marketing_analytics_config/ColumnMappedDescriber.tsx b/frontend/src/scenes/team-activity/marketing_analytics_config/ColumnMappedDescriber.tsx index 9047ad8158..91c32ac1a7 100644 --- a/frontend/src/scenes/team-activity/marketing_analytics_config/ColumnMappedDescriber.tsx +++ b/frontend/src/scenes/team-activity/marketing_analytics_config/ColumnMappedDescriber.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { Link } from 'lib/lemon-ui/Link' import { urls } from 'scenes/urls' import { diff --git a/frontend/src/scenes/team-activity/marketing_analytics_config/ColumnMappingChangedDescriber.tsx b/frontend/src/scenes/team-activity/marketing_analytics_config/ColumnMappingChangedDescriber.tsx index 62da964788..7e64568c34 100644 --- a/frontend/src/scenes/team-activity/marketing_analytics_config/ColumnMappingChangedDescriber.tsx +++ b/frontend/src/scenes/team-activity/marketing_analytics_config/ColumnMappingChangedDescriber.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { Link } from 'lib/lemon-ui/Link' import { urls } from 'scenes/urls' import { diff --git a/frontend/src/scenes/team-activity/marketing_analytics_config/ColumnUnmappedDescriber.tsx b/frontend/src/scenes/team-activity/marketing_analytics_config/ColumnUnmappedDescriber.tsx index 90877fea13..37187c2823 100644 --- a/frontend/src/scenes/team-activity/marketing_analytics_config/ColumnUnmappedDescriber.tsx +++ b/frontend/src/scenes/team-activity/marketing_analytics_config/ColumnUnmappedDescriber.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { Link } from 'lib/lemon-ui/Link' import { urls } from 'scenes/urls' import { diff --git a/frontend/src/scenes/team-activity/marketing_analytics_config/ConfigurationAddedDescriber.tsx b/frontend/src/scenes/team-activity/marketing_analytics_config/ConfigurationAddedDescriber.tsx index 16019bccd3..d8329f918a 100644 --- a/frontend/src/scenes/team-activity/marketing_analytics_config/ConfigurationAddedDescriber.tsx +++ b/frontend/src/scenes/team-activity/marketing_analytics_config/ConfigurationAddedDescriber.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { Link } from 'lib/lemon-ui/Link' import { urls } from 'scenes/urls' import { diff --git a/frontend/src/scenes/team-activity/marketing_analytics_config/ConfigurationRemovedDescriber.tsx b/frontend/src/scenes/team-activity/marketing_analytics_config/ConfigurationRemovedDescriber.tsx index cb091b35be..2233cd3ccc 100644 --- a/frontend/src/scenes/team-activity/marketing_analytics_config/ConfigurationRemovedDescriber.tsx +++ b/frontend/src/scenes/team-activity/marketing_analytics_config/ConfigurationRemovedDescriber.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { Link } from 'lib/lemon-ui/Link' import { urls } from 'scenes/urls' import { diff --git a/frontend/src/scenes/team-activity/marketing_analytics_config/SourceAddedDescriber.tsx b/frontend/src/scenes/team-activity/marketing_analytics_config/SourceAddedDescriber.tsx index 730bcace67..41f9cebe1e 100644 --- a/frontend/src/scenes/team-activity/marketing_analytics_config/SourceAddedDescriber.tsx +++ b/frontend/src/scenes/team-activity/marketing_analytics_config/SourceAddedDescriber.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { Link } from 'lib/lemon-ui/Link' import { urls } from 'scenes/urls' import { diff --git a/frontend/src/scenes/team-activity/revenue_analytics_config/revenueAnalyticsConfigurationDescriber.tsx b/frontend/src/scenes/team-activity/revenue_analytics_config/revenueAnalyticsConfigurationDescriber.tsx index 69ae6af3ff..0a5154325e 100644 --- a/frontend/src/scenes/team-activity/revenue_analytics_config/revenueAnalyticsConfigurationDescriber.tsx +++ b/frontend/src/scenes/team-activity/revenue_analytics_config/revenueAnalyticsConfigurationDescriber.tsx @@ -1,5 +1,6 @@ import { ActivityChange, ChangeMapping } from 'lib/components/ActivityLog/humanizeActivity' import { objectsEqual } from 'lib/utils' + import { RevenueAnalyticsConfig, RevenueAnalyticsEventItem, diff --git a/frontend/src/scenes/team-activity/teamActivityDescriber.tsx b/frontend/src/scenes/team-activity/teamActivityDescriber.tsx index 33b2f45e90..b0d74fb237 100644 --- a/frontend/src/scenes/team-activity/teamActivityDescriber.tsx +++ b/frontend/src/scenes/team-activity/teamActivityDescriber.tsx @@ -1,18 +1,22 @@ +import { SentenceList } from 'lib/components/ActivityLog/SentenceList' import { ActivityChange, ActivityLogItem, ChangeMapping, - defaultDescriber, Description, HumanizedChange, + defaultDescriber, userNameForLogItem, } from 'lib/components/ActivityLog/humanizeActivity' -import { SentenceList } from 'lib/components/ActivityLog/SentenceList' +import { PathCleanFilterItem } from 'lib/components/PathCleanFilters/PathCleanFilterItem' +import { keyFromFilter } from 'lib/components/PathCleanFilters/PathCleanFilters' import PropertyFiltersDisplay from 'lib/components/PropertyFilters/components/PropertyFiltersDisplay' import { Link } from 'lib/lemon-ui/Link' import { isObject, pluralize } from 'lib/utils' +import { CURRENCY_SYMBOL_TO_EMOJI_MAP, CURRENCY_SYMBOL_TO_NAME_MAP } from 'lib/utils/geography/currency' import { urls } from 'scenes/urls' +import { CurrencyCode } from '~/queries/schema/schema-general' import { ActivityScope, CorrelationConfigType, @@ -25,10 +29,6 @@ import { import { ThemeName } from '../dataThemeLogic' import { marketingAnalyticsConfigurationDescriber } from './marketing_analytics_config/marketingAnalyticsConfigurationDescriber' import { revenueAnalyticsConfigurationDescriber } from './revenue_analytics_config/revenueAnalyticsConfigurationDescriber' -import { CURRENCY_SYMBOL_TO_EMOJI_MAP, CURRENCY_SYMBOL_TO_NAME_MAP } from 'lib/utils/geography/currency' -import { CurrencyCode } from '~/queries/schema/schema-general' -import { PathCleanFilterItem } from 'lib/components/PathCleanFilters/PathCleanFilterItem' -import { keyFromFilter } from 'lib/components/PathCleanFilters/PathCleanFilters' const isNumberOrNull = (x: unknown): x is number | null => { if (typeof x === 'number') { diff --git a/frontend/src/scenes/teamLogic.tsx b/frontend/src/scenes/teamLogic.tsx index 55c3d3f15b..f41fe601b1 100644 --- a/frontend/src/scenes/teamLogic.tsx +++ b/frontend/src/scenes/teamLogic.tsx @@ -1,19 +1,20 @@ import { actions, afterMount, connect, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api, { ApiConfig } from 'lib/api' import { FEATURE_FLAGS, OrganizationMembershipLevel } from 'lib/constants' -import { IconSwapHoriz } from 'lib/lemon-ui/icons' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' +import { IconSwapHoriz } from 'lib/lemon-ui/icons' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { identifierToHuman, isUserLoggedIn, resolveWebhookService } from 'lib/utils' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' import { DEFAULT_CURRENCY } from 'lib/utils/geography/currency' import { getAppContext } from 'lib/utils/getAppContext' import { - addProductIntent, - addProductIntentForCrossSell, type ProductCrossSellProperties, type ProductIntentProperties, + addProductIntent, + addProductIntentForCrossSell, } from 'lib/utils/product-intents' import { activationLogic } from '~/layout/navigation-3000/sidepanel/panels/activation/activationLogic' diff --git a/frontend/src/scenes/themes/CustomCssScene.tsx b/frontend/src/scenes/themes/CustomCssScene.tsx index 17e74577a5..680c8f5da5 100644 --- a/frontend/src/scenes/themes/CustomCssScene.tsx +++ b/frontend/src/scenes/themes/CustomCssScene.tsx @@ -1,14 +1,16 @@ -import { LemonButton, Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { router } from 'kea-router' + +import { LemonButton, Link } from '@posthog/lemon-ui' + import { PageHeader } from 'lib/components/PageHeader' +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { CodeEditor } from 'lib/monaco/CodeEditor' import { SceneExport } from 'scenes/sceneTypes' import { themeLogic } from '~/layout/navigation-3000/themeLogic' import { urls } from '../urls' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' export const scene: SceneExport = { component: CustomCssScene, diff --git a/frontend/src/scenes/themes/PreviewingCustomCssModal.tsx b/frontend/src/scenes/themes/PreviewingCustomCssModal.tsx index 679ebaef41..e64493808b 100644 --- a/frontend/src/scenes/themes/PreviewingCustomCssModal.tsx +++ b/frontend/src/scenes/themes/PreviewingCustomCssModal.tsx @@ -1,8 +1,10 @@ -import { LemonButton } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { router } from 'kea-router' -import { CodeEditor } from 'lib/monaco/CodeEditor' import { useState } from 'react' + +import { LemonButton } from '@posthog/lemon-ui' + +import { CodeEditor } from 'lib/monaco/CodeEditor' import { urls } from 'scenes/urls' import { themeLogic } from '~/layout/navigation-3000/themeLogic' diff --git a/frontend/src/scenes/toolbar-launch/ToolbarLaunch.stories.tsx b/frontend/src/scenes/toolbar-launch/ToolbarLaunch.stories.tsx index d011eeb47e..ba492aab9a 100644 --- a/frontend/src/scenes/toolbar-launch/ToolbarLaunch.stories.tsx +++ b/frontend/src/scenes/toolbar-launch/ToolbarLaunch.stories.tsx @@ -1,6 +1,9 @@ import { Meta, StoryFn } from '@storybook/react' import { useActions, useValues } from 'kea' import { router } from 'kea-router' + +import { FEATURE_FLAGS } from 'lib/constants' +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' @@ -8,8 +11,6 @@ import { mswDecorator, useStorybookMocks } from '~/mocks/browser' import { TeamPublicType } from '~/types' import { ToolbarLaunch } from './ToolbarLaunch' -import { FEATURE_FLAGS } from 'lib/constants' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' const meta: Meta = { title: 'Scenes-Other/ToolbarLaunch', diff --git a/frontend/src/scenes/toolbar-launch/ToolbarLaunch.tsx b/frontend/src/scenes/toolbar-launch/ToolbarLaunch.tsx index 74196e7fca..bb82f66acf 100644 --- a/frontend/src/scenes/toolbar-launch/ToolbarLaunch.tsx +++ b/frontend/src/scenes/toolbar-launch/ToolbarLaunch.tsx @@ -1,13 +1,14 @@ import './ToolbarLaunch.scss' import { IconFlag, IconPieChart, IconSearch, IconTestTube } from '@posthog/icons' + import { AuthorizedUrlList } from 'lib/components/AuthorizedUrlList/AuthorizedUrlList' import { AuthorizedUrlListType } from 'lib/components/AuthorizedUrlList/authorizedUrlListLogic' import { PageHeader } from 'lib/components/PageHeader' import { useFeatureFlag } from 'lib/hooks/useFeatureFlag' -import { IconGroupedEvents, IconHeatmap } from 'lib/lemon-ui/icons' import { LemonDivider } from 'lib/lemon-ui/LemonDivider' import { Link } from 'lib/lemon-ui/Link' +import { IconGroupedEvents, IconHeatmap } from 'lib/lemon-ui/icons' import { SceneExport } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/trends/Trends.tsx b/frontend/src/scenes/trends/Trends.tsx index 0044200dd2..c658b81dc9 100644 --- a/frontend/src/scenes/trends/Trends.tsx +++ b/frontend/src/scenes/trends/Trends.tsx @@ -1,17 +1,19 @@ -import { LemonButton } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonButton } from '@posthog/lemon-ui' + import { insightLogic } from 'scenes/insights/insightLogic' import { insightSceneLogic } from 'scenes/insights/insightSceneLogic' import { BoldNumber } from 'scenes/insights/views/BoldNumber' import { InsightsTable } from 'scenes/insights/views/InsightsTable/InsightsTable' import { WorldMap } from 'scenes/insights/views/WorldMap' +import { InsightVizNode } from '~/queries/schema/schema-general' import { QueryContext } from '~/queries/types' import { ChartDisplayType, InsightType, ItemMode } from '~/types' import { trendsDataLogic } from './trendsDataLogic' import { ActionsHorizontalBar, ActionsLineGraph, ActionsPie } from './viz' -import { InsightVizNode } from '~/queries/schema/schema-general' interface Props { view: InsightType diff --git a/frontend/src/scenes/trends/mathsLogic.tsx b/frontend/src/scenes/trends/mathsLogic.tsx index b3dd086669..455fac8b2b 100644 --- a/frontend/src/scenes/trends/mathsLogic.tsx +++ b/frontend/src/scenes/trends/mathsLogic.tsx @@ -1,4 +1,5 @@ import { connect, kea, path, selectors } from 'kea' + import { groupsAccessLogic } from 'lib/introductions/groupsAccessLogic' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' diff --git a/frontend/src/scenes/trends/persons-modal/PersonsModal.stories.tsx b/frontend/src/scenes/trends/persons-modal/PersonsModal.stories.tsx index 02be876f71..82bb138bf4 100644 --- a/frontend/src/scenes/trends/persons-modal/PersonsModal.stories.tsx +++ b/frontend/src/scenes/trends/persons-modal/PersonsModal.stories.tsx @@ -1,10 +1,11 @@ import { Meta, StoryFn } from '@storybook/react' + import { RawPropertiesTimelineResult } from 'lib/components/PropertiesTimeline/propertiesTimelineLogic' import { useStorybookMocks } from '~/mocks/browser' -import EXAMPLE_PERSONS_RESPONSE from './__mocks__/examplePersonsResponse.json' import { PersonsModal as PersonsModalComponent } from './PersonsModal' +import EXAMPLE_PERSONS_RESPONSE from './__mocks__/examplePersonsResponse.json' import { ListActorsResponse } from './personsModalLogic' const meta: Meta = { diff --git a/frontend/src/scenes/trends/persons-modal/PersonsModal.tsx b/frontend/src/scenes/trends/persons-modal/PersonsModal.tsx index 9edb06dca1..2b99c7ab63 100644 --- a/frontend/src/scenes/trends/persons-modal/PersonsModal.tsx +++ b/frontend/src/scenes/trends/persons-modal/PersonsModal.tsx @@ -1,5 +1,9 @@ import './PersonsModal.scss' +import { useActions, useValues } from 'kea' +import React, { useCallback, useState } from 'react' +import { createRoot } from 'react-dom/client' + import { IconCollapse, IconExpand } from '@posthog/icons' import { LemonBadge, @@ -13,34 +17,32 @@ import { LemonSkeleton, Link, } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { CopyToClipboardInline } from 'lib/components/CopyToClipboard' import { exportsLogic } from 'lib/components/ExportButton/exportsLogic' import { PropertiesTable } from 'lib/components/PropertiesTable' import { PropertiesTimeline } from 'lib/components/PropertiesTimeline' import ViewRecordingButton from 'lib/components/ViewRecordingButton/ViewRecordingButton' -import { IconPlayCircle } from 'lib/lemon-ui/icons' import { LemonTabs } from 'lib/lemon-ui/LemonTabs' import { ProfilePicture } from 'lib/lemon-ui/ProfilePicture' import { Spinner } from 'lib/lemon-ui/Spinner/Spinner' import { Tooltip } from 'lib/lemon-ui/Tooltip' +import { IconPlayCircle } from 'lib/lemon-ui/icons' import { capitalizeFirstLetter, isGroupType, midEllipsis, pluralize } from 'lib/utils' -import React, { useCallback, useState } from 'react' -import { createRoot } from 'react-dom/client' import { InsightErrorState, InsightValidationError } from 'scenes/insights/EmptyStates' import { isOtherBreakdown } from 'scenes/insights/utils' import { GroupActorDisplay, groupDisplayId } from 'scenes/persons/GroupActorDisplay' -import { asDisplay } from 'scenes/persons/person-utils' import { PersonDisplay } from 'scenes/persons/PersonDisplay' +import { asDisplay } from 'scenes/persons/person-utils' import { teamLogic } from 'scenes/teamLogic' import { Noun } from '~/models/groupsModel' import { MAX_SELECT_RETURNED_ROWS } from '~/queries/nodes/DataTable/DataTableExport' import { ActorType, ExporterFormat, PropertiesTimelineFilterType, PropertyDefinitionType } from '~/types' +import { SaveCohortModal } from './SaveCohortModal' import { cleanedInsightActorsQueryOptions } from './persons-modal-utils' import { PersonModalLogicProps, personsModalLogic } from './personsModalLogic' -import { SaveCohortModal } from './SaveCohortModal' export interface PersonsModalProps extends PersonModalLogicProps, Pick { onAfterClose?: () => void diff --git a/frontend/src/scenes/trends/persons-modal/SaveCohortModal.tsx b/frontend/src/scenes/trends/persons-modal/SaveCohortModal.tsx index f47930a421..7b33423cf3 100644 --- a/frontend/src/scenes/trends/persons-modal/SaveCohortModal.tsx +++ b/frontend/src/scenes/trends/persons-modal/SaveCohortModal.tsx @@ -1,6 +1,7 @@ -import { LemonButton, LemonInput, LemonModal } from '@posthog/lemon-ui' import { useState } from 'react' +import { LemonButton, LemonInput, LemonModal } from '@posthog/lemon-ui' + interface Props { onSave: (title: string) => void onCancel: () => void diff --git a/frontend/src/scenes/trends/persons-modal/personsModalLogic.ts b/frontend/src/scenes/trends/persons-modal/personsModalLogic.ts index f6b8fe818c..078c72b28e 100644 --- a/frontend/src/scenes/trends/persons-modal/personsModalLogic.ts +++ b/frontend/src/scenes/trends/persons-modal/personsModalLogic.ts @@ -1,7 +1,9 @@ -import { lemonToast } from '@posthog/lemon-ui' import { actions, afterMount, connect, kea, listeners, path, props, propsChanged, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { router, urlToAction } from 'kea-router' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { isGroupType } from 'lib/utils' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' @@ -19,8 +21,8 @@ import { InsightActorsQuery, InsightActorsQueryOptions, InsightActorsQueryOptionsResponse, - insightActorsQueryOptionsResponseKeys, NodeKind, + insightActorsQueryOptionsResponseKeys, } from '~/queries/schema/schema-general' import { setLatestVersionsOnQuery } from '~/queries/utils' import { diff --git a/frontend/src/scenes/trends/trendsDataLogic.test.ts b/frontend/src/scenes/trends/trendsDataLogic.test.ts index b1e14acbaf..91a01a7822 100644 --- a/frontend/src/scenes/trends/trendsDataLogic.test.ts +++ b/frontend/src/scenes/trends/trendsDataLogic.test.ts @@ -1,4 +1,5 @@ import { expectLogic } from 'kea-test-utils' + import { insightDataLogic } from 'scenes/insights/insightDataLogic' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' diff --git a/frontend/src/scenes/trends/trendsDataLogic.ts b/frontend/src/scenes/trends/trendsDataLogic.ts index 461304f334..8a723262c8 100644 --- a/frontend/src/scenes/trends/trendsDataLogic.ts +++ b/frontend/src/scenes/trends/trendsDataLogic.ts @@ -1,4 +1,5 @@ import { actions, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' + import { DataColorTheme, DataColorToken } from 'lib/colors' import { dayjs } from 'lib/dayjs' import { dashboardLogic } from 'scenes/dashboard/dashboardLogic' diff --git a/frontend/src/scenes/trends/viz/ActionsHorizontalBar.tsx b/frontend/src/scenes/trends/viz/ActionsHorizontalBar.tsx index a3b6f772df..d5fe5b90bd 100644 --- a/frontend/src/scenes/trends/viz/ActionsHorizontalBar.tsx +++ b/frontend/src/scenes/trends/viz/ActionsHorizontalBar.tsx @@ -1,5 +1,6 @@ import { useValues } from 'kea' import { useEffect, useState } from 'react' + import { insightLogic } from 'scenes/insights/insightLogic' import { formatBreakdownLabel } from 'scenes/insights/utils' import { datasetToActorsQuery } from 'scenes/trends/viz/datasetToActorsQuery' diff --git a/frontend/src/scenes/trends/viz/ActionsLineGraph.tsx b/frontend/src/scenes/trends/viz/ActionsLineGraph.tsx index 6e73ef9b9a..db25caf6b5 100644 --- a/frontend/src/scenes/trends/viz/ActionsLineGraph.tsx +++ b/frontend/src/scenes/trends/viz/ActionsLineGraph.tsx @@ -1,11 +1,14 @@ import { DeepPartial } from 'chart.js/dist/types/utils' import { useValues } from 'kea' -import { Chart, ChartType, defaults, LegendOptions } from 'lib/Chart' + +import { Chart, ChartType, LegendOptions, defaults } from 'lib/Chart' import { insightAlertsLogic } from 'lib/components/Alerts/insightAlertsLogic' import { DateDisplay } from 'lib/components/DateDisplay' import { PropertyKeyInfo } from 'lib/components/PropertyKeyInfo' -import { capitalizeFirstLetter, isMultiSeriesFormula, hexToRGBA } from 'lib/utils' +import { ciRanges, movingAverage } from 'lib/statistics' +import { capitalizeFirstLetter, hexToRGBA, isMultiSeriesFormula } from 'lib/utils' import { insightLogic } from 'scenes/insights/insightLogic' +import { teamLogic } from 'scenes/teamLogic' import { datasetToActorsQuery } from 'scenes/trends/viz/datasetToActorsQuery' import { ChartDisplayType, ChartParams, GraphType } from '~/types' @@ -14,8 +17,6 @@ import { InsightEmptyState } from '../../insights/EmptyStates' import { LineGraph } from '../../insights/views/LineGraph/LineGraph' import { openPersonsModal } from '../persons-modal/PersonsModal' import { trendsDataLogic } from '../trendsDataLogic' -import { teamLogic } from 'scenes/teamLogic' -import { ciRanges, movingAverage } from 'lib/statistics' export function ActionsLineGraph({ inSharedMode = false, diff --git a/frontend/src/scenes/trends/viz/ActionsPie.tsx b/frontend/src/scenes/trends/viz/ActionsPie.tsx index 5a32f63e96..0eb2ece843 100644 --- a/frontend/src/scenes/trends/viz/ActionsPie.tsx +++ b/frontend/src/scenes/trends/viz/ActionsPie.tsx @@ -2,6 +2,7 @@ import './ActionsPie.scss' import { useValues } from 'kea' import { useEffect, useState } from 'react' + import { formatAggregationAxisValue } from 'scenes/insights/aggregationAxisFormat' import { insightLogic } from 'scenes/insights/insightLogic' import { formatBreakdownLabel } from 'scenes/insights/utils' diff --git a/frontend/src/scenes/urls.ts b/frontend/src/scenes/urls.ts index 2ef4b14006..e02d508899 100644 --- a/frontend/src/scenes/urls.ts +++ b/frontend/src/scenes/urls.ts @@ -1,22 +1,23 @@ import { combineUrl } from 'kea-router' + import { getCurrentTeamId } from 'lib/utils/getAppContext' import { productUrls } from '~/products' +import { ExternalDataSourceType, SharingConfigurationSettings } from '~/queries/schema/schema-general' import { ActivityTab, AnnotationType, + CommentType, + OnboardingStepKey, PipelineNodeTab, PipelineStage, PipelineTab, ProductKey, SDKKey, - OnboardingStepKey, - CommentType, } from '~/types' import type { BillingSectionId } from './billing/types' import type { SettingId, SettingLevelId, SettingSectionId } from './settings/types' -import { ExternalDataSourceType, SharingConfigurationSettings } from '~/queries/schema/schema-general' /** * To add a new URL to the front end: diff --git a/frontend/src/scenes/userLogic.ts b/frontend/src/scenes/userLogic.ts index 588d9553da..a515b9a932 100644 --- a/frontend/src/scenes/userLogic.ts +++ b/frontend/src/scenes/userLogic.ts @@ -1,11 +1,12 @@ import { actions, afterMount, kea, listeners, path, reducers, selectors } from 'kea' import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' +import posthog from 'posthog-js' + import api from 'lib/api' import { DashboardCompatibleScenes } from 'lib/components/SceneDashboardChoice/sceneDashboardChoiceModalLogic' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' import { getAppContext } from 'lib/utils/getAppContext' -import posthog from 'posthog-js' import { sidePanelStateLogic } from '~/layout/navigation-3000/sidepanel/sidePanelStateLogic' import { AvailableFeature, OrganizationBasicType, ProductKey, UserRole, UserTheme, UserType } from '~/types' diff --git a/frontend/src/scenes/web-analytics/CalendarHeatMap/CalendarHeatMap.tsx b/frontend/src/scenes/web-analytics/CalendarHeatMap/CalendarHeatMap.tsx index 7109a5aac5..87efae6fc5 100644 --- a/frontend/src/scenes/web-analytics/CalendarHeatMap/CalendarHeatMap.tsx +++ b/frontend/src/scenes/web-analytics/CalendarHeatMap/CalendarHeatMap.tsx @@ -1,9 +1,11 @@ import './CalendarHeatMap.scss' -import { LemonSkeleton, Tooltip } from '@posthog/lemon-ui' import { useValues } from 'kea' -import { cn } from 'lib/utils/css-classes' import React, { useCallback, useEffect, useState } from 'react' + +import { LemonSkeleton, Tooltip } from '@posthog/lemon-ui' + +import { cn } from 'lib/utils/css-classes' import { dataThemeLogic } from 'scenes/dataThemeLogic' import { useResizeObserver } from '~/lib/hooks/useResizeObserver' diff --git a/frontend/src/scenes/web-analytics/CalendarHeatMap/InsightCalendarHeatMapContainer.tsx b/frontend/src/scenes/web-analytics/CalendarHeatMap/InsightCalendarHeatMapContainer.tsx index fb63266eba..3c15ad132b 100644 --- a/frontend/src/scenes/web-analytics/CalendarHeatMap/InsightCalendarHeatMapContainer.tsx +++ b/frontend/src/scenes/web-analytics/CalendarHeatMap/InsightCalendarHeatMapContainer.tsx @@ -1,13 +1,15 @@ import './CalendarHeatMap.scss' import { useValues } from 'kea' + +import { LemonBanner } from '@posthog/lemon-ui' + import { insightLogic } from 'scenes/insights/insightLogic' import { CalendarHeatmapQuery, InsightVizNode } from '~/queries/schema/schema-general' import { QueryContext } from '~/queries/types' import { WebActiveHoursHeatmap } from '../WebActiveHoursHeatmap/WebActiveHoursHeatmap' -import { LemonBanner } from '@posthog/lemon-ui' interface CalendarHeatMapProps { context?: QueryContext diff --git a/frontend/src/scenes/web-analytics/CrossSellButtons/ErrorTrackingButton.tsx b/frontend/src/scenes/web-analytics/CrossSellButtons/ErrorTrackingButton.tsx index c0cd3160f5..58528851d6 100644 --- a/frontend/src/scenes/web-analytics/CrossSellButtons/ErrorTrackingButton.tsx +++ b/frontend/src/scenes/web-analytics/CrossSellButtons/ErrorTrackingButton.tsx @@ -1,6 +1,7 @@ import { IconWarning } from '@posthog/icons' import { LemonButton } from '@posthog/lemon-ui' -import { addProductIntentForCrossSell, ProductIntentContext } from 'lib/utils/product-intents' + +import { ProductIntentContext, addProductIntentForCrossSell } from 'lib/utils/product-intents' import { urls } from 'scenes/urls' import { WebStatsBreakdown } from '~/queries/schema/schema-general' diff --git a/frontend/src/scenes/web-analytics/CrossSellButtons/HeatmapButton.tsx b/frontend/src/scenes/web-analytics/CrossSellButtons/HeatmapButton.tsx index 45dc9d088c..a519a1778a 100644 --- a/frontend/src/scenes/web-analytics/CrossSellButtons/HeatmapButton.tsx +++ b/frontend/src/scenes/web-analytics/CrossSellButtons/HeatmapButton.tsx @@ -1,10 +1,12 @@ -import { LemonButton } from '@posthog/lemon-ui' import { useValues } from 'kea' + +import { LemonButton } from '@posthog/lemon-ui' + import { appEditorUrl } from 'lib/components/AuthorizedUrlList/authorizedUrlListLogic' import { FEATURE_FLAGS } from 'lib/constants' import { IconHeatmap } from 'lib/lemon-ui/icons' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { addProductIntentForCrossSell, ProductIntentContext } from 'lib/utils/product-intents' +import { ProductIntentContext, addProductIntentForCrossSell } from 'lib/utils/product-intents' import { urls } from 'scenes/urls' import { WebStatsBreakdown } from '~/queries/schema/schema-general' diff --git a/frontend/src/scenes/web-analytics/CrossSellButtons/ReplayButton.tsx b/frontend/src/scenes/web-analytics/CrossSellButtons/ReplayButton.tsx index 0aa74271d8..d82d1c7609 100644 --- a/frontend/src/scenes/web-analytics/CrossSellButtons/ReplayButton.tsx +++ b/frontend/src/scenes/web-analytics/CrossSellButtons/ReplayButton.tsx @@ -1,6 +1,7 @@ import { IconRewindPlay } from '@posthog/icons' import { LemonButton } from '@posthog/lemon-ui' -import { addProductIntentForCrossSell, ProductIntentContext } from 'lib/utils/product-intents' + +import { ProductIntentContext, addProductIntentForCrossSell } from 'lib/utils/product-intents' import { urls } from 'scenes/urls' import { WebStatsBreakdown } from '~/queries/schema/schema-general' diff --git a/frontend/src/scenes/web-analytics/PageReports.tsx b/frontend/src/scenes/web-analytics/PageReports.tsx index 46dc690db2..57651d4347 100644 --- a/frontend/src/scenes/web-analytics/PageReports.tsx +++ b/frontend/src/scenes/web-analytics/PageReports.tsx @@ -1,15 +1,17 @@ +import { useActions, useValues } from 'kea' + import { IconAsterisk, IconGlobe } from '@posthog/icons' import { LemonButton } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { DateFilter } from 'lib/components/DateFilter/DateFilter' import { XRayHog2 } from 'lib/components/hedgehogs' import { LemonInputSelect } from 'lib/lemon-ui/LemonInputSelect/LemonInputSelect' import { LemonSwitch } from 'lib/lemon-ui/LemonSwitch' import { Tooltip } from 'lib/lemon-ui/Tooltip' -import { pageReportsLogic } from './pageReportsLogic' import { Tiles } from './WebAnalyticsDashboard' import { WebAnalyticsCompareFilter } from './WebAnalyticsFilters' +import { pageReportsLogic } from './pageReportsLogic' function NoUrlSelectedMessage(): JSX.Element { return ( diff --git a/frontend/src/scenes/web-analytics/SessionAttributionExplorer/SessionAttributionExplorerScene.tsx b/frontend/src/scenes/web-analytics/SessionAttributionExplorer/SessionAttributionExplorerScene.tsx index a344161def..8fb31d00bd 100644 --- a/frontend/src/scenes/web-analytics/SessionAttributionExplorer/SessionAttributionExplorerScene.tsx +++ b/frontend/src/scenes/web-analytics/SessionAttributionExplorer/SessionAttributionExplorerScene.tsx @@ -1,19 +1,21 @@ +import { useActions, useValues } from 'kea' +import React from 'react' + import { IconCollapse, IconExpand, IconPlus } from '@posthog/icons' import { LemonMenu, LemonSwitch } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { supportLogic } from 'lib/components/Support/supportLogic' -import { IconFeedback } from 'lib/lemon-ui/icons' import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { Link } from 'lib/lemon-ui/Link' import { Tooltip } from 'lib/lemon-ui/Tooltip' -import React from 'react' +import { IconFeedback } from 'lib/lemon-ui/icons' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { SceneExport } from 'scenes/sceneTypes' import { Query } from '~/queries/Query/Query' -import { DataTableNode, HogQLQuery, SessionAttributionGroupBy } from '~/queries/schema/schema-general' import { isSessionPropertyFilters } from '~/queries/schema-guards' +import { DataTableNode, HogQLQuery, SessionAttributionGroupBy } from '~/queries/schema/schema-general' import { QueryContext, QueryContextColumnComponent } from '~/queries/types' import { sessionAttributionExplorerLogic } from './sessionAttributionExplorerLogic' diff --git a/frontend/src/scenes/web-analytics/SessionAttributionExplorer/sessionAttributionExplorer.stories.tsx b/frontend/src/scenes/web-analytics/SessionAttributionExplorer/sessionAttributionExplorer.stories.tsx index 15b4bf6d28..b4d3ff3603 100644 --- a/frontend/src/scenes/web-analytics/SessionAttributionExplorer/sessionAttributionExplorer.stories.tsx +++ b/frontend/src/scenes/web-analytics/SessionAttributionExplorer/sessionAttributionExplorer.stories.tsx @@ -1,4 +1,5 @@ import { Meta, StoryObj } from '@storybook/react' + import { App } from 'scenes/App' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/web-analytics/SessionAttributionExplorer/sessionAttributionExplorerLogic.ts b/frontend/src/scenes/web-analytics/SessionAttributionExplorer/sessionAttributionExplorerLogic.ts index 8597b57ce2..b4a922498c 100644 --- a/frontend/src/scenes/web-analytics/SessionAttributionExplorer/sessionAttributionExplorerLogic.ts +++ b/frontend/src/scenes/web-analytics/SessionAttributionExplorer/sessionAttributionExplorerLogic.ts @@ -1,9 +1,12 @@ import { actions, connect, kea, path, reducers, selectors } from 'kea' import { actionToUrl, urlToAction } from 'kea-router' + import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { urls } from 'scenes/urls' +import { WEB_ANALYTICS_DEFAULT_QUERY_TAGS } from 'scenes/web-analytics/common' +import { isSessionPropertyFilters } from '~/queries/schema-guards' import { DataTableNode, DateRange, @@ -11,11 +14,9 @@ import { SessionAttributionExplorerQuery, SessionAttributionGroupBy, } from '~/queries/schema/schema-general' -import { isSessionPropertyFilters } from '~/queries/schema-guards' import { SessionPropertyFilter } from '~/types' import type { sessionAttributionExplorerLogicType } from './sessionAttributionExplorerLogicType' -import { WEB_ANALYTICS_DEFAULT_QUERY_TAGS } from 'scenes/web-analytics/common' export const initialProperties = [] as SessionPropertyFilter[] export const initialGroupBy = [ diff --git a/frontend/src/scenes/web-analytics/TableSortingIndicator.tsx b/frontend/src/scenes/web-analytics/TableSortingIndicator.tsx index a1dc767e57..2f98ed7528 100644 --- a/frontend/src/scenes/web-analytics/TableSortingIndicator.tsx +++ b/frontend/src/scenes/web-analytics/TableSortingIndicator.tsx @@ -1,13 +1,16 @@ -import { IconX } from '@posthog/icons' -import { LemonButton } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' + +import { IconX } from '@posthog/icons' +import { LemonButton } from '@posthog/lemon-ui' + import { IconSort } from 'lib/lemon-ui/icons' import { webAnalyticsLogic } from 'scenes/web-analytics/webAnalyticsLogic' -import { ProductTab } from './common' import { WebAnalyticsOrderByFields } from '~/queries/schema/schema-general' +import { ProductTab } from './common' + const SORT_BY_TO_LABEL: Record = { [WebAnalyticsOrderByFields.Visitors]: 'Visitors', [WebAnalyticsOrderByFields.Views]: 'Views', diff --git a/frontend/src/scenes/web-analytics/WebActiveHoursHeatmap/WebActiveHoursHeatmap.stories.tsx b/frontend/src/scenes/web-analytics/WebActiveHoursHeatmap/WebActiveHoursHeatmap.stories.tsx index b25fbb221f..ba54b6f414 100644 --- a/frontend/src/scenes/web-analytics/WebActiveHoursHeatmap/WebActiveHoursHeatmap.stories.tsx +++ b/frontend/src/scenes/web-analytics/WebActiveHoursHeatmap/WebActiveHoursHeatmap.stories.tsx @@ -6,6 +6,7 @@ import { QueryContext } from '~/queries/types' import { BaseMathType } from '~/types' import { WebActiveHoursHeatmap } from './WebActiveHoursHeatmap' + const meta: Meta = { title: 'Scenes/Web Analytics/WebActiveHoursHeatmap', component: WebActiveHoursHeatmap, diff --git a/frontend/src/scenes/web-analytics/WebActiveHoursHeatmap/WebActiveHoursHeatmap.tsx b/frontend/src/scenes/web-analytics/WebActiveHoursHeatmap/WebActiveHoursHeatmap.tsx index 46fc2a4d1b..2c6a16b0dc 100644 --- a/frontend/src/scenes/web-analytics/WebActiveHoursHeatmap/WebActiveHoursHeatmap.tsx +++ b/frontend/src/scenes/web-analytics/WebActiveHoursHeatmap/WebActiveHoursHeatmap.tsx @@ -1,5 +1,6 @@ import { useValues } from 'kea' import { useState } from 'react' + import { InsightLoadingState } from 'scenes/insights/EmptyStates' import { InsightsWrapper } from 'scenes/insights/InsightsWrapper' import { teamLogic } from 'scenes/teamLogic' @@ -19,11 +20,11 @@ import { QueryContext } from '~/queries/types' import { AggregationLabel, + HoursAbbreviated, getColumnAggregationTooltip, getDataTooltip, getOverallAggregationTooltip, getRowAggregationTooltip, - HoursAbbreviated, rowLabels, thresholdFontSize, } from './utils' diff --git a/frontend/src/scenes/web-analytics/WebAnalyticsDashboard.stories.tsx b/frontend/src/scenes/web-analytics/WebAnalyticsDashboard.stories.tsx index 2a21199580..3c4af4ad25 100644 --- a/frontend/src/scenes/web-analytics/WebAnalyticsDashboard.stories.tsx +++ b/frontend/src/scenes/web-analytics/WebAnalyticsDashboard.stories.tsx @@ -1,6 +1,7 @@ import { Meta } from '@storybook/react' import { useActions } from 'kea' import { useEffect } from 'react' + import { App } from 'scenes/App' import { urls } from 'scenes/urls' @@ -8,12 +9,12 @@ import { mswDecorator } from '~/mocks/browser' import uniqueVisitorsMock from './__mocks__/UniqueVisitors.json' import webOverviewMock from './__mocks__/WebOverview.json' +import { DeviceTab, SourceTab } from './common' import browserMock from './tiles/__mocks__/Browser.json' import pathMock from './tiles/__mocks__/Path.json' import referringDomainMock from './tiles/__mocks__/ReferringDomain.json' import retentionMock from './tiles/__mocks__/Retention.json' import { webAnalyticsLogic } from './webAnalyticsLogic' -import { DeviceTab, SourceTab } from './common' const meta: Meta = { component: App, diff --git a/frontend/src/scenes/web-analytics/WebAnalyticsDashboard.tsx b/frontend/src/scenes/web-analytics/WebAnalyticsDashboard.tsx index 044dfd0c89..88a324f06f 100644 --- a/frontend/src/scenes/web-analytics/WebAnalyticsDashboard.tsx +++ b/frontend/src/scenes/web-analytics/WebAnalyticsDashboard.tsx @@ -1,10 +1,12 @@ -import { IconExpand45, IconInfo, IconLineGraph, IconOpenSidebar, IconX } from '@posthog/icons' -import { LemonBanner, LemonSegmentedButton } from '@posthog/lemon-ui' import clsx from 'clsx' import { BindLogic, useActions, useValues } from 'kea' +import React, { useState } from 'react' + +import { IconExpand45, IconInfo, IconLineGraph, IconOpenSidebar, IconX } from '@posthog/icons' +import { LemonBanner, LemonSegmentedButton } from '@posthog/lemon-ui' + import { VersionCheckerBanner } from 'lib/components/VersionChecker/VersionCheckerBanner' import { FEATURE_FLAGS } from 'lib/constants' -import { IconOpenInNew, IconTableChart } from 'lib/lemon-ui/icons' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonDivider } from 'lib/lemon-ui/LemonDivider' import { LemonSegmentedSelect } from 'lib/lemon-ui/LemonSegmentedSelect/LemonSegmentedSelect' @@ -12,15 +14,13 @@ import { LemonTabs } from 'lib/lemon-ui/LemonTabs' import { LemonTag } from 'lib/lemon-ui/LemonTag' import { Link, PostHogComDocsURL } from 'lib/lemon-ui/Link/Link' import { Popover } from 'lib/lemon-ui/Popover' -import { featureFlagLogic, FeatureFlagsSet } from 'lib/logic/featureFlagLogic' +import { IconOpenInNew, IconTableChart } from 'lib/lemon-ui/icons' +import { FeatureFlagsSet, featureFlagLogic } from 'lib/logic/featureFlagLogic' import { isNotNil } from 'lib/utils' -import { addProductIntentForCrossSell, ProductIntentContext } from 'lib/utils/product-intents' -import React, { useState } from 'react' +import { ProductIntentContext, addProductIntentForCrossSell } from 'lib/utils/product-intents' import { PageReports, PageReportsFilters } from 'scenes/web-analytics/PageReports' -import { WebAnalyticsErrorTrackingTile } from 'scenes/web-analytics/tiles/WebAnalyticsErrorTracking' -import { WebAnalyticsRecordingsTile } from 'scenes/web-analytics/tiles/WebAnalyticsRecordings' -import { WebQuery } from 'scenes/web-analytics/tiles/WebAnalyticsTile' import { WebAnalyticsHealthCheck } from 'scenes/web-analytics/WebAnalyticsHealthCheck' +import { WebAnalyticsModal } from 'scenes/web-analytics/WebAnalyticsModal' import { ProductTab, QueryTile, @@ -31,8 +31,10 @@ import { WEB_ANALYTICS_DATA_COLLECTION_NODE_ID, WebAnalyticsTile, } from 'scenes/web-analytics/common' +import { WebAnalyticsErrorTrackingTile } from 'scenes/web-analytics/tiles/WebAnalyticsErrorTracking' +import { WebAnalyticsRecordingsTile } from 'scenes/web-analytics/tiles/WebAnalyticsRecordings' +import { WebQuery } from 'scenes/web-analytics/tiles/WebAnalyticsTile' import { webAnalyticsLogic } from 'scenes/web-analytics/webAnalyticsLogic' -import { WebAnalyticsModal } from 'scenes/web-analytics/WebAnalyticsModal' import { navigationLogic } from '~/layout/navigation/navigationLogic' import { dataNodeCollectionLogic } from '~/queries/nodes/DataNode/dataNodeCollectionLogic' @@ -40,9 +42,9 @@ import { QuerySchema } from '~/queries/schema/schema-general' import { ProductKey } from '~/types' import { WebAnalyticsFilters } from './WebAnalyticsFilters' +import { WebAnalyticsPageReportsCTA } from './WebAnalyticsPageReportsCTA' import { MarketingAnalyticsFilters } from './tabs/marketing-analytics/frontend/components/MarketingAnalyticsFilters/MarketingAnalyticsFilters' import { webAnalyticsModalLogic } from './webAnalyticsModalLogic' -import { WebAnalyticsPageReportsCTA } from './WebAnalyticsPageReportsCTA' export const Tiles = (props: { tiles?: WebAnalyticsTile[]; compact?: boolean }): JSX.Element => { const { tiles: tilesFromProps, compact = false } = props diff --git a/frontend/src/scenes/web-analytics/WebAnalyticsFilters.tsx b/frontend/src/scenes/web-analytics/WebAnalyticsFilters.tsx index c80c1aaa1b..637b8ecf5b 100644 --- a/frontend/src/scenes/web-analytics/WebAnalyticsFilters.tsx +++ b/frontend/src/scenes/web-analytics/WebAnalyticsFilters.tsx @@ -1,12 +1,14 @@ -import { IconFilter, IconGear, IconGlobe } from '@posthog/icons' -import { LemonButton, LemonSelect, LemonSwitch, Link, Tooltip } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' +import { useState } from 'react' + +import { IconFilter, IconGear, IconGlobe } from '@posthog/icons' +import { LemonButton, LemonSelect, LemonSwitch, Link, Tooltip } from '@posthog/lemon-ui' + import { CompareFilter } from 'lib/components/CompareFilter/CompareFilter' import { DateFilter } from 'lib/components/DateFilter/DateFilter' -import { IconBranch, IconMonitor, IconPhone } from 'lib/lemon-ui/icons/icons' import { LemonSegmentedSelect } from 'lib/lemon-ui/LemonSegmentedSelect' -import { useState } from 'react' +import { IconBranch, IconMonitor, IconPhone } from 'lib/lemon-ui/icons/icons' import { urls } from 'scenes/urls' import { userLogic } from 'scenes/userLogic' @@ -15,10 +17,10 @@ import { AvailableFeature, PropertyMathType } from '~/types' import { TableSortingIndicator } from './TableSortingIndicator' import { WebAnalyticsLiveUserCount } from './WebAnalyticsLiveUserCount' -import { webAnalyticsLogic } from './webAnalyticsLogic' -import { ProductTab } from './common' import { WebConversionGoal } from './WebConversionGoal' import { WebPropertyFilters } from './WebPropertyFilters' +import { ProductTab } from './common' +import { webAnalyticsLogic } from './webAnalyticsLogic' export const WebAnalyticsFilters = (): JSX.Element => { const [expanded, setExpanded] = useState(false) diff --git a/frontend/src/scenes/web-analytics/WebAnalyticsHeaderButtons.tsx b/frontend/src/scenes/web-analytics/WebAnalyticsHeaderButtons.tsx index d673d870cb..3299bbf22a 100644 --- a/frontend/src/scenes/web-analytics/WebAnalyticsHeaderButtons.tsx +++ b/frontend/src/scenes/web-analytics/WebAnalyticsHeaderButtons.tsx @@ -1,11 +1,13 @@ -import { IconBolt } from '@posthog/icons' import { useActions, useValues } from 'kea' +import { useState } from 'react' + +import { IconBolt } from '@posthog/icons' + import { FEATURE_FLAGS } from 'lib/constants' import { LemonSwitch } from 'lib/lemon-ui/LemonSwitch' import { LemonTag } from 'lib/lemon-ui/LemonTag' import { Popover } from 'lib/lemon-ui/Popover' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { useState } from 'react' import { teamLogic } from 'scenes/teamLogic' import { WebAnalyticsMenu } from 'scenes/web-analytics/WebAnalyticsMenu' diff --git a/frontend/src/scenes/web-analytics/WebAnalyticsHealthCheck.tsx b/frontend/src/scenes/web-analytics/WebAnalyticsHealthCheck.tsx index 64c4d05226..297c8f4abb 100644 --- a/frontend/src/scenes/web-analytics/WebAnalyticsHealthCheck.tsx +++ b/frontend/src/scenes/web-analytics/WebAnalyticsHealthCheck.tsx @@ -1,10 +1,12 @@ import { useValues } from 'kea' + import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { Link } from 'lib/lemon-ui/Link' import { urls } from 'scenes/urls' -import { ConversionGoalWarning, ProductTab } from './common' import { webAnalyticsLogic } from 'scenes/web-analytics/webAnalyticsLogic' +import { ConversionGoalWarning, ProductTab } from './common' + export const WebAnalyticsHealthCheck = (): JSX.Element | null => { const { statusCheck, conversionGoalWarning, productTab } = useValues(webAnalyticsLogic) diff --git a/frontend/src/scenes/web-analytics/WebAnalyticsLiveUserCount.tsx b/frontend/src/scenes/web-analytics/WebAnalyticsLiveUserCount.tsx index fcc147f6c8..707f7aa8e3 100644 --- a/frontend/src/scenes/web-analytics/WebAnalyticsLiveUserCount.tsx +++ b/frontend/src/scenes/web-analytics/WebAnalyticsLiveUserCount.tsx @@ -2,9 +2,10 @@ import './WebAnalyticsLiveUserCount.scss' import clsx from 'clsx' import { useActions, useValues } from 'kea' +import { useEffect } from 'react' + import { Tooltip } from 'lib/lemon-ui/Tooltip' import { humanFriendlyLargeNumber, humanFriendlyNumber } from 'lib/utils' -import { useEffect } from 'react' import { teamLogic } from 'scenes/teamLogic' import { liveWebAnalyticsLogic } from 'scenes/web-analytics/liveWebAnalyticsLogic' diff --git a/frontend/src/scenes/web-analytics/WebAnalyticsMenu.tsx b/frontend/src/scenes/web-analytics/WebAnalyticsMenu.tsx index 73496ff922..ca18760c63 100644 --- a/frontend/src/scenes/web-analytics/WebAnalyticsMenu.tsx +++ b/frontend/src/scenes/web-analytics/WebAnalyticsMenu.tsx @@ -1,5 +1,7 @@ -import { IconEllipsis, IconSearch } from '@posthog/icons' import { useActions, useValues } from 'kea' + +import { IconEllipsis, IconSearch } from '@posthog/icons' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonMenu } from 'lib/lemon-ui/LemonMenu' import { LemonSwitch } from 'lib/lemon-ui/LemonSwitch' diff --git a/frontend/src/scenes/web-analytics/WebAnalyticsModal.tsx b/frontend/src/scenes/web-analytics/WebAnalyticsModal.tsx index 0e16eafdf0..fb483a8466 100644 --- a/frontend/src/scenes/web-analytics/WebAnalyticsModal.tsx +++ b/frontend/src/scenes/web-analytics/WebAnalyticsModal.tsx @@ -1,18 +1,19 @@ import { useActions, useValues } from 'kea' + import { DateFilter } from 'lib/components/DateFilter/DateFilter' -import { IconOpenInNew } from 'lib/lemon-ui/icons' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonModal } from 'lib/lemon-ui/LemonModal' -import { addProductIntentForCrossSell, ProductIntentContext } from 'lib/utils/product-intents' +import { IconOpenInNew } from 'lib/lemon-ui/icons' +import { ProductIntentContext, addProductIntentForCrossSell } from 'lib/utils/product-intents' import { urls } from 'scenes/urls' import { WebQuery } from 'scenes/web-analytics/tiles/WebAnalyticsTile' import { ProductKey } from '~/types' -import { webAnalyticsLogic } from './webAnalyticsLogic' -import { webAnalyticsModalLogic } from './webAnalyticsModalLogic' import { WebPropertyFilters } from './WebPropertyFilters' import { ProductTab } from './common' +import { webAnalyticsLogic } from './webAnalyticsLogic' +import { webAnalyticsModalLogic } from './webAnalyticsModalLogic' export const WebAnalyticsModal = (): JSX.Element | null => { const { diff --git a/frontend/src/scenes/web-analytics/WebAnalyticsPageReportsCTA.tsx b/frontend/src/scenes/web-analytics/WebAnalyticsPageReportsCTA.tsx index 054ba04f31..e6aefed5fa 100644 --- a/frontend/src/scenes/web-analytics/WebAnalyticsPageReportsCTA.tsx +++ b/frontend/src/scenes/web-analytics/WebAnalyticsPageReportsCTA.tsx @@ -1,10 +1,11 @@ import { useActions, useValues } from 'kea' import { router } from 'kea-router' -import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import posthog from 'posthog-js' -import { webAnalyticsLogic } from './webAnalyticsLogic' +import { LemonBanner } from 'lib/lemon-ui/LemonBanner' + import { ProductTab } from './common' +import { webAnalyticsLogic } from './webAnalyticsLogic' export const WebAnalyticsPageReportsCTA = (): JSX.Element | null => { const { webAnalyticsFilters, productTab, domainFilter, authorizedDomains } = useValues(webAnalyticsLogic) diff --git a/frontend/src/scenes/web-analytics/WebConversionGoal.tsx b/frontend/src/scenes/web-analytics/WebConversionGoal.tsx index 75f81c22b4..bf3111cf51 100644 --- a/frontend/src/scenes/web-analytics/WebConversionGoal.tsx +++ b/frontend/src/scenes/web-analytics/WebConversionGoal.tsx @@ -1,12 +1,15 @@ -import { IconCursor } from '@posthog/icons' import { useActions, useValues } from 'kea' +import { useState } from 'react' + +import { IconCursor } from '@posthog/icons' + import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { TaxonomicPopover } from 'lib/components/TaxonomicPopover/TaxonomicPopover' import { useWindowSize } from 'lib/hooks/useWindowSize' -import { useState } from 'react' import { webAnalyticsLogic } from 'scenes/web-analytics/webAnalyticsLogic' import { actionsModel } from '~/models/actionsModel' + import { ProductTab } from './common' export const WebConversionGoal = (): JSX.Element | null => { diff --git a/frontend/src/scenes/web-analytics/WebPropertyFilters.tsx b/frontend/src/scenes/web-analytics/WebPropertyFilters.tsx index 4ee6db34a2..4fb3dcdc11 100644 --- a/frontend/src/scenes/web-analytics/WebPropertyFilters.tsx +++ b/frontend/src/scenes/web-analytics/WebPropertyFilters.tsx @@ -1,12 +1,14 @@ +import { useActions, useValues } from 'kea' +import { useState } from 'react' + import { IconFilter } from '@posthog/icons' import { Popover } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { PropertyFilters } from 'lib/components/PropertyFilters/PropertyFilters' import { isEventPersonOrSessionPropertyFilter } from 'lib/components/PropertyFilters/utils' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' -import { IconWithCount } from 'lib/lemon-ui/icons' import { LemonButton } from 'lib/lemon-ui/LemonButton' -import { useState } from 'react' +import { IconWithCount } from 'lib/lemon-ui/icons' import { webAnalyticsLogic } from './webAnalyticsLogic' diff --git a/frontend/src/scenes/web-analytics/common.ts b/frontend/src/scenes/web-analytics/common.ts index cf5da1f6a3..0f5eb173a9 100644 --- a/frontend/src/scenes/web-analytics/common.ts +++ b/frontend/src/scenes/web-analytics/common.ts @@ -1,6 +1,8 @@ import { BreakPointFunction } from 'kea' + import { PostHogComDocsURL } from 'lib/lemon-ui/Link/Link' -import { getDefaultInterval, UnexpectedNeverError } from 'lib/utils' +import { UnexpectedNeverError, getDefaultInterval } from 'lib/utils' + import { hogqlQuery } from '~/queries/query' import { BreakdownFilter, diff --git a/frontend/src/scenes/web-analytics/liveWebAnalyticsLogic.tsx b/frontend/src/scenes/web-analytics/liveWebAnalyticsLogic.tsx index 2e22c0017c..99a79186df 100644 --- a/frontend/src/scenes/web-analytics/liveWebAnalyticsLogic.tsx +++ b/frontend/src/scenes/web-analytics/liveWebAnalyticsLogic.tsx @@ -1,8 +1,10 @@ import { actions, connect, events, kea, listeners, path, reducers, selectors } from 'kea' + import { liveEventsHostOrigin } from 'lib/utils/apiHost' import { teamLogic } from 'scenes/teamLogic' import type { liveWebAnalyticsLogicType } from './liveWebAnalyticsLogicType' + export interface StatsResponse { users_on_product?: number } diff --git a/frontend/src/scenes/web-analytics/pageReportsLogic.ts b/frontend/src/scenes/web-analytics/pageReportsLogic.ts index 9d5b6760aa..49ebc4587d 100644 --- a/frontend/src/scenes/web-analytics/pageReportsLogic.ts +++ b/frontend/src/scenes/web-analytics/pageReportsLogic.ts @@ -1,5 +1,6 @@ import { kea } from 'kea' import { router } from 'kea-router' + import api from 'lib/api' import { @@ -19,7 +20,6 @@ import { PropertyOperator, } from '~/types' -import type { pageReportsLogicType } from './pageReportsLogicType' import { DeviceTab, GeographyTab, @@ -30,10 +30,11 @@ import { TileId, TileVisualizationOption, WEB_ANALYTICS_DATA_COLLECTION_NODE_ID, + WEB_ANALYTICS_DEFAULT_QUERY_TAGS, WebAnalyticsTile, WebTileLayout, - WEB_ANALYTICS_DEFAULT_QUERY_TAGS, } from './common' +import type { pageReportsLogicType } from './pageReportsLogicType' import { webAnalyticsLogic } from './webAnalyticsLogic' export interface PageURLSearchResult { diff --git a/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/MarketingAnalyticsFilters/MarketingAnalyticsFilters.tsx b/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/MarketingAnalyticsFilters/MarketingAnalyticsFilters.tsx index d8a173238f..97eb1f59cb 100644 --- a/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/MarketingAnalyticsFilters/MarketingAnalyticsFilters.tsx +++ b/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/MarketingAnalyticsFilters/MarketingAnalyticsFilters.tsx @@ -1,12 +1,15 @@ import { useActions, useValues } from 'kea' -import { DateFilter } from 'lib/components/DateFilter/DateFilter' -import { ReloadAll } from '~/queries/nodes/DataNode/Reload' -import { CompareFilter } from 'lib/components/CompareFilter/CompareFilter' -import { marketingAnalyticsLogic } from '../../logic/marketingAnalyticsLogic' -import { dataNodeCollectionLogic } from '~/queries/nodes/DataNode/dataNodeCollectionLogic' -import { MARKETING_ANALYTICS_DATA_COLLECTION_NODE_ID } from '../../logic/marketingAnalyticsTilesLogic' import { BindLogic } from 'kea' +import { CompareFilter } from 'lib/components/CompareFilter/CompareFilter' +import { DateFilter } from 'lib/components/DateFilter/DateFilter' + +import { ReloadAll } from '~/queries/nodes/DataNode/Reload' +import { dataNodeCollectionLogic } from '~/queries/nodes/DataNode/dataNodeCollectionLogic' + +import { marketingAnalyticsLogic } from '../../logic/marketingAnalyticsLogic' +import { MARKETING_ANALYTICS_DATA_COLLECTION_NODE_ID } from '../../logic/marketingAnalyticsTilesLogic' + export const MarketingAnalyticsFilters = (): JSX.Element => { const { compareFilter, dateFilter } = useValues(marketingAnalyticsLogic) const { setCompareFilter, setDates } = useActions(marketingAnalyticsLogic) diff --git a/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/MarketingAnalyticsTable/DraftConversionGoalControls.tsx b/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/MarketingAnalyticsTable/DraftConversionGoalControls.tsx index 7298877b07..359e2179d5 100644 --- a/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/MarketingAnalyticsTable/DraftConversionGoalControls.tsx +++ b/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/MarketingAnalyticsTable/DraftConversionGoalControls.tsx @@ -1,16 +1,18 @@ import { useActions, useValues } from 'kea' import { useCallback, useState } from 'react' -import { LemonButton } from 'lib/lemon-ui/LemonButton' -import { IconChevronDown, IconChevronRight } from '@posthog/icons' -import { ConversionGoalFilter } from '~/queries/schema/schema-general' +import { IconChevronDown, IconChevronRight } from '@posthog/icons' +import { LemonInput } from '@posthog/lemon-ui' + +import { LemonButton } from 'lib/lemon-ui/LemonButton' import { objectsEqual } from 'lib/utils' +import { ConversionGoalFilter } from '~/queries/schema/schema-general' + import { marketingAnalyticsLogic } from '../../logic/marketingAnalyticsLogic' +import { marketingAnalyticsSettingsLogic } from '../../logic/marketingAnalyticsSettingsLogic' import { ConversionGoalDropdown } from '../common/ConversionGoalDropdown' import { defaultConversionGoalFilter } from '../settings/constants' -import { LemonInput } from '@posthog/lemon-ui' -import { marketingAnalyticsSettingsLogic } from '../../logic/marketingAnalyticsSettingsLogic' export const DraftConversionGoalControls = (): JSX.Element => { const { setDraftConversionGoal, setConversionGoalInput, resetConversionGoalInput, saveDraftConversionGoal } = diff --git a/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/MarketingAnalyticsTable/MarketingAnalyticsColumnConfigModal.tsx b/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/MarketingAnalyticsTable/MarketingAnalyticsColumnConfigModal.tsx index 24bc23865b..6aa58003cb 100644 --- a/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/MarketingAnalyticsTable/MarketingAnalyticsColumnConfigModal.tsx +++ b/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/MarketingAnalyticsTable/MarketingAnalyticsColumnConfigModal.tsx @@ -1,13 +1,16 @@ -import { IconEye, IconHide, IconPin, IconPinFilled } from '@posthog/icons' -import { IconArrowUp, IconArrowDown } from 'lib/lemon-ui/icons' -import { LemonButton, LemonCheckbox, LemonModal, LemonSelect } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' +import { useCallback, useMemo, useRef } from 'react' + +import { IconEye, IconHide, IconPin, IconPinFilled } from '@posthog/icons' +import { LemonButton, LemonCheckbox, LemonModal, LemonSelect } from '@posthog/lemon-ui' + +import { IconArrowDown, IconArrowUp } from 'lib/lemon-ui/icons' + +import { MarketingAnalyticsTableQuery } from '~/queries/schema/schema-general' +import { DataTableNode } from '~/queries/schema/schema-general' import { marketingAnalyticsLogic } from '../../logic/marketingAnalyticsLogic' -import { MarketingAnalyticsTableQuery } from '~/queries/schema/schema-general' import { marketingAnalyticsTableLogic } from '../../logic/marketingAnalyticsTableLogic' -import { DataTableNode } from '~/queries/schema/schema-general' -import { useCallback, useMemo, useRef } from 'react' import { createMarketingAnalyticsOrderBy } from '../../logic/utils' const directionOptions = [ diff --git a/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/MarketingAnalyticsTable/MarketingAnalyticsTable.tsx b/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/MarketingAnalyticsTable/MarketingAnalyticsTable.tsx index edffd25c4e..8a532c16e0 100644 --- a/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/MarketingAnalyticsTable/MarketingAnalyticsTable.tsx +++ b/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/MarketingAnalyticsTable/MarketingAnalyticsTable.tsx @@ -1,18 +1,22 @@ +import './MarketingAnalyticsTableStyleOverride.scss' + import { useActions } from 'kea' + +import { IconGear } from '@posthog/icons' +import { LemonButton } from '@posthog/lemon-ui' + import { Query } from '~/queries/Query/Query' +import { ColumnFeature } from '~/queries/nodes/DataTable/DataTable' +import { DataTableNode, MarketingAnalyticsTableQuery } from '~/queries/schema/schema-general' import { QueryContext, QueryContextColumn } from '~/queries/types' import { webAnalyticsDataTableQueryContext } from '~/scenes/web-analytics/tiles/WebAnalyticsTile' -import { ColumnFeature } from '~/queries/nodes/DataTable/DataTable' -import { DraftConversionGoalControls } from './DraftConversionGoalControls' -import { marketingAnalyticsTableLogic } from '../../logic/marketingAnalyticsTableLogic' -import { DataTableNode, MarketingAnalyticsTableQuery } from '~/queries/schema/schema-general' import { InsightLogicProps } from '~/types' -import { MarketingAnalyticsColumnConfigModal } from './MarketingAnalyticsColumnConfigModal' + import { marketingAnalyticsLogic } from '../../logic/marketingAnalyticsLogic' -import { LemonButton } from '@posthog/lemon-ui' -import { IconGear } from '@posthog/icons' -import './MarketingAnalyticsTableStyleOverride.scss' +import { marketingAnalyticsTableLogic } from '../../logic/marketingAnalyticsTableLogic' import { MarketingAnalyticsCell } from '../../shared' +import { DraftConversionGoalControls } from './DraftConversionGoalControls' +import { MarketingAnalyticsColumnConfigModal } from './MarketingAnalyticsColumnConfigModal' export type MarketingAnalyticsTableProps = { query: DataTableNode diff --git a/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/common/ConversionGoalDropdown.tsx b/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/common/ConversionGoalDropdown.tsx index dc450339d3..eccd40c475 100644 --- a/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/common/ConversionGoalDropdown.tsx +++ b/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/common/ConversionGoalDropdown.tsx @@ -4,15 +4,15 @@ import { MathAvailability } from 'scenes/insights/filters/ActionFilter/ActionFil import { actionsAndEventsToSeries } from '~/queries/nodes/InsightQuery/utils/filtersToQueryNode' import { + ActionsNode, ConversionGoalFilter, DataWarehouseNode, - ActionsNode, EventsNode, NodeKind, } from '~/queries/schema/schema-general' import { isDataWarehouseNode } from '~/queries/utils' import { conversionGoalPopoverFields } from '~/taxonomy/taxonomy' -import { BaseMathType, EntityTypes, FilterType, PropertyMathType, ActionFilter, DataWarehouseFilter } from '~/types' +import { ActionFilter, BaseMathType, DataWarehouseFilter, EntityTypes, FilterType, PropertyMathType } from '~/types' import { ConversionGoalSchema, diff --git a/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/settings/AddSourceDropdown.tsx b/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/settings/AddSourceDropdown.tsx index 0dfbc2a961..91e8bec623 100644 --- a/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/settings/AddSourceDropdown.tsx +++ b/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/settings/AddSourceDropdown.tsx @@ -1,5 +1,6 @@ import { IconPlus } from '@posthog/icons' import { LemonButton, LemonDropdown } from '@posthog/lemon-ui' + import { DataWarehouseSourceIcon } from 'scenes/data-warehouse/settings/DataWarehouseSourceIcon' interface AddSourceDropdownProps { diff --git a/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/settings/ColumnMappingModal.tsx b/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/settings/ColumnMappingModal.tsx index cf62bfdc09..436bc5b269 100644 --- a/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/settings/ColumnMappingModal.tsx +++ b/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/settings/ColumnMappingModal.tsx @@ -1,9 +1,12 @@ +import { useActions, useValues } from 'kea' + import { IconCheck, IconWarning, IconX } from '@posthog/icons' import { LemonButton, LemonModal, LemonSelect, LemonSelectSection } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { OPTIONS_FOR_IMPORTANT_CURRENCIES, OPTIONS_FOR_OTHER_CURRENCIES } from 'lib/components/BaseCurrency/utils' import { MARKETING_ANALYTICS_SCHEMA, MarketingAnalyticsColumnsSchemaNames } from '~/queries/schema/schema-general' + import { ExternalTable } from '../../logic/marketingAnalyticsLogic' import { marketingAnalyticsSettingsLogic } from '../../logic/marketingAnalyticsSettingsLogic' diff --git a/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/settings/ConversionGoalsConfiguration.tsx b/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/settings/ConversionGoalsConfiguration.tsx index 0888f1dc03..0cba1723a8 100644 --- a/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/settings/ConversionGoalsConfiguration.tsx +++ b/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/settings/ConversionGoalsConfiguration.tsx @@ -1,16 +1,18 @@ +import { useActions, useValues } from 'kea' +import { useState } from 'react' + import { IconCheck, IconPencil, IconTrash, IconX } from '@posthog/icons' import { LemonButton, LemonInput } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { LemonTable } from 'lib/lemon-ui/LemonTable' import { uuid } from 'lib/utils' -import { useState } from 'react' import { QUERY_TYPES_METADATA } from 'scenes/saved-insights/SavedInsights' import { ConversionGoalFilter } from '~/queries/schema/schema-general' import { marketingAnalyticsSettingsLogic } from '../../logic/marketingAnalyticsSettingsLogic' -import { defaultConversionGoalFilter } from './constants' import { ConversionGoalDropdown } from '../common/ConversionGoalDropdown' +import { defaultConversionGoalFilter } from './constants' interface ConversionGoalFormState { filter: ConversionGoalFilter diff --git a/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/settings/NativeExternalDataSourceConfiguration.tsx b/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/settings/NativeExternalDataSourceConfiguration.tsx index 1e4610da9b..c60d01334e 100644 --- a/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/settings/NativeExternalDataSourceConfiguration.tsx +++ b/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/settings/NativeExternalDataSourceConfiguration.tsx @@ -1,7 +1,9 @@ -import { IconGear } from '@posthog/icons' -import { LemonButton, Link } from '@posthog/lemon-ui' import { useValues } from 'kea' import { router } from 'kea-router' + +import { IconGear } from '@posthog/icons' +import { LemonButton, Link } from '@posthog/lemon-ui' + import { LemonTable } from 'lib/lemon-ui/LemonTable' import { DataWarehouseSourceIcon } from 'scenes/data-warehouse/settings/DataWarehouseSourceIcon' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/settings/NonNativeExternalDataSourceConfiguration.tsx b/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/settings/NonNativeExternalDataSourceConfiguration.tsx index 610e6aae6d..3e527206fe 100644 --- a/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/settings/NonNativeExternalDataSourceConfiguration.tsx +++ b/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/settings/NonNativeExternalDataSourceConfiguration.tsx @@ -1,5 +1,6 @@ import { useValues } from 'kea' import { router } from 'kea-router' + import { urls } from 'scenes/urls' import { ExternalDataSource, PipelineStage } from '~/types' diff --git a/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/settings/SelfManagedExternalDataSourceConfiguration.tsx b/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/settings/SelfManagedExternalDataSourceConfiguration.tsx index 38102d2a49..98f27119ff 100644 --- a/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/settings/SelfManagedExternalDataSourceConfiguration.tsx +++ b/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/settings/SelfManagedExternalDataSourceConfiguration.tsx @@ -1,5 +1,6 @@ import { useActions, useValues } from 'kea' import { router } from 'kea-router' + import { sourceWizardLogic } from 'scenes/data-warehouse/new/sourceWizardLogic' import { urls } from 'scenes/urls' diff --git a/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/settings/SharedExternalDataSourceConfiguration.tsx b/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/settings/SharedExternalDataSourceConfiguration.tsx index db399df466..86273684b1 100644 --- a/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/settings/SharedExternalDataSourceConfiguration.tsx +++ b/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/components/settings/SharedExternalDataSourceConfiguration.tsx @@ -1,11 +1,14 @@ +import { useActions } from 'kea' +import { useState } from 'react' + import { IconPencil, IconTrash } from '@posthog/icons' import { LemonButton, Link } from '@posthog/lemon-ui' -import { useActions } from 'kea' + import { LemonTable } from 'lib/lemon-ui/LemonTable' -import { useState } from 'react' import { DataWarehouseSourceIcon } from 'scenes/data-warehouse/settings/DataWarehouseSourceIcon' import { MARKETING_ANALYTICS_SCHEMA, MarketingAnalyticsColumnsSchemaNames } from '~/queries/schema/schema-general' + import { useSortedPaginatedList } from '../../hooks/useSortedPaginatedList' import { ExternalTable } from '../../logic/marketingAnalyticsLogic' import { marketingAnalyticsSettingsLogic } from '../../logic/marketingAnalyticsSettingsLogic' diff --git a/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/logic/marketingAnalyticsLogic.ts b/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/logic/marketingAnalyticsLogic.ts index 5f831dbb18..0d8275bbee 100644 --- a/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/logic/marketingAnalyticsLogic.ts +++ b/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/logic/marketingAnalyticsLogic.ts @@ -1,18 +1,23 @@ -import { actions, connect, kea, path, reducers, selectors, listeners } from 'kea' -import { dataWarehouseSettingsLogic } from 'scenes/data-warehouse/settings/dataWarehouseSettingsLogic' +import { actions, connect, kea, listeners, path, reducers, selectors } from 'kea' +import { actionToUrl, urlToAction } from 'kea-router' + +import { getDefaultInterval, isValidRelativeOrAbsoluteDate, updateDatesWithInterval } from 'lib/utils' +import { uuid } from 'lib/utils' import { mapUrlToProvider } from 'scenes/data-warehouse/settings/DataWarehouseSourceIcon' +import { dataWarehouseSettingsLogic } from 'scenes/data-warehouse/settings/dataWarehouseSettingsLogic' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' import { - CurrencyCode, - DatabaseSchemaDataWarehouseTable, - DataWarehouseNode, - SourceMap, - ConversionGoalFilter, - MarketingAnalyticsColumnsSchemaNames, CompareFilter, + ConversionGoalFilter, + CurrencyCode, + DataWarehouseNode, + DatabaseSchemaDataWarehouseTable, + MarketingAnalyticsColumnsSchemaNames, + SourceMap, } from '~/queries/schema/schema-general' +import { MARKETING_ANALYTICS_SCHEMA } from '~/queries/schema/schema-general' import { ChartDisplayType, DataWarehouseSettingsTab, @@ -22,21 +27,17 @@ import { PipelineStage, } from '~/types' -import { MARKETING_ANALYTICS_SCHEMA } from '~/queries/schema/schema-general' +import { defaultConversionGoalFilter } from '../components/settings/constants' import type { marketingAnalyticsLogicType } from './marketingAnalyticsLogicType' import { marketingAnalyticsSettingsLogic } from './marketingAnalyticsSettingsLogic' -import { defaultConversionGoalFilter } from '../components/settings/constants' import { externalAdsCostTile } from './marketingCostTile' import { MarketingDashboardMapper, - NativeMarketingSource, NEEDED_FIELDS_FOR_NATIVE_MARKETING_ANALYTICS, + NativeMarketingSource, VALID_NATIVE_MARKETING_SOURCES, generateUniqueName, } from './utils' -import { getDefaultInterval, isValidRelativeOrAbsoluteDate, updateDatesWithInterval } from 'lib/utils' -import { uuid } from 'lib/utils' -import { actionToUrl, urlToAction } from 'kea-router' export type ExternalTable = { name: string diff --git a/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/logic/marketingAnalyticsSettingsLogic.ts b/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/logic/marketingAnalyticsSettingsLogic.ts index 56666164d3..807fa8a631 100644 --- a/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/logic/marketingAnalyticsSettingsLogic.ts +++ b/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/logic/marketingAnalyticsSettingsLogic.ts @@ -1,13 +1,13 @@ import { actions, afterMount, connect, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' -import { teamLogic } from 'scenes/teamLogic' -import { MarketingAnalyticsColumnsSchemaNames } from '~/queries/schema/schema-general' +import { teamLogic } from 'scenes/teamLogic' + +import { MarketingAnalyticsColumnsSchemaNames } from '~/queries/schema/schema-general' import { ConversionGoalFilter, MarketingAnalyticsConfig, SourceMap } from '~/queries/schema/schema-general' -import { generateUniqueName } from './utils' - import type { marketingAnalyticsSettingsLogicType } from './marketingAnalyticsSettingsLogicType' +import { generateUniqueName } from './utils' const createEmptyConfig = (): MarketingAnalyticsConfig => ({ sources_map: {}, diff --git a/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/logic/marketingAnalyticsTableLogic.ts b/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/logic/marketingAnalyticsTableLogic.ts index 1accca6640..edc9f61942 100644 --- a/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/logic/marketingAnalyticsTableLogic.ts +++ b/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/logic/marketingAnalyticsTableLogic.ts @@ -1,21 +1,22 @@ import { actions, connect, kea, listeners, path, reducers, selectors } from 'kea' +import { actionToUrl, urlToAction } from 'kea-router' + import { isNotNil } from 'lib/utils' import { - DatabaseSchemaDataWarehouseTable, - SourceMap, ConversionGoalFilter, DataTableNode, + DatabaseSchemaDataWarehouseTable, MarketingAnalyticsBaseColumns, MarketingAnalyticsHelperForColumnNames, - MarketingAnalyticsTableQuery, MarketingAnalyticsOrderBy, + MarketingAnalyticsTableQuery, + SourceMap, } from '~/queries/schema/schema-general' import { DataWarehouseSettingsTab, ExternalDataSource } from '~/types' -import type { marketingAnalyticsTableLogicType } from './marketingAnalyticsTableLogicType' import { marketingAnalyticsLogic } from './marketingAnalyticsLogic' -import { actionToUrl, urlToAction } from 'kea-router' +import type { marketingAnalyticsTableLogicType } from './marketingAnalyticsTableLogicType' import { createMarketingAnalyticsOrderBy, isDraftConversionGoalColumn } from './utils' export type ExternalTable = { diff --git a/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/logic/marketingAnalyticsTilesLogic.ts b/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/logic/marketingAnalyticsTilesLogic.ts index 51208847c4..c79d20b3f7 100644 --- a/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/logic/marketingAnalyticsTilesLogic.ts +++ b/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/logic/marketingAnalyticsTilesLogic.ts @@ -1,22 +1,23 @@ import { connect, kea, path, selectors } from 'kea' +import { isNotNil } from 'lib/utils' +import { MARKETING_ANALYTICS_DEFAULT_QUERY_TAGS, TileId, loadPriorityMap } from 'scenes/web-analytics/common' +import { getDashboardItemId } from 'scenes/web-analytics/insightsUtils' + import { - ConversionGoalFilter, - NodeKind, - DataTableNode, - MarketingAnalyticsTableQuery, - MarketingAnalyticsHelperForColumnNames, CompareFilter, + ConversionGoalFilter, + DataTableNode, + MarketingAnalyticsHelperForColumnNames, + MarketingAnalyticsTableQuery, + NodeKind, } from '~/queries/schema/schema-general' import { BaseMathType, InsightLogicProps, IntervalType } from '~/types' -import { isDraftConversionGoalColumn, getSortedColumnsByArray, orderArrayByPreference, getOrderBy } from './utils' -import { isNotNil } from 'lib/utils' import { marketingAnalyticsLogic } from './marketingAnalyticsLogic' -import type { marketingAnalyticsTilesLogicType } from './marketingAnalyticsTilesLogicType' import { marketingAnalyticsTableLogic } from './marketingAnalyticsTableLogic' -import { getDashboardItemId } from 'scenes/web-analytics/insightsUtils' -import { loadPriorityMap, MARKETING_ANALYTICS_DEFAULT_QUERY_TAGS, TileId } from 'scenes/web-analytics/common' +import type { marketingAnalyticsTilesLogicType } from './marketingAnalyticsTilesLogicType' +import { getOrderBy, getSortedColumnsByArray, isDraftConversionGoalColumn, orderArrayByPreference } from './utils' export const MARKETING_ANALYTICS_DATA_COLLECTION_NODE_ID = 'marketing-analytics' diff --git a/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/logic/utils.test.ts b/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/logic/utils.test.ts index 9e3430ed8c..65b56e7a33 100644 --- a/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/logic/utils.test.ts +++ b/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/logic/utils.test.ts @@ -1,5 +1,6 @@ import { MarketingAnalyticsTableQuery, NodeKind } from '~/queries/schema/schema-general' -import { getOrderBy, orderArrayByPreference, getSortedColumnsByArray } from './utils' + +import { getOrderBy, getSortedColumnsByArray, orderArrayByPreference } from './utils' describe('marketing analytics utils', () => { describe('getOrderBy', () => { diff --git a/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/shared.tsx b/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/shared.tsx index 0e5e3863e9..923c940fc6 100644 --- a/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/shared.tsx +++ b/frontend/src/scenes/web-analytics/tabs/marketing-analytics/frontend/shared.tsx @@ -1,9 +1,11 @@ import { IconGraph, IconLineGraph } from '@posthog/icons' import { LemonSegmentedButtonOption } from '@posthog/lemon-ui' + +import { Tooltip } from 'lib/lemon-ui/Tooltip/Tooltip' import { IconAreaChart, IconArrowDown, IconArrowUp } from 'lib/lemon-ui/icons' import { humanFriendlyLargeNumber, humanFriendlyNumber } from 'lib/utils' + import { ChartDisplayType } from '~/types' -import { Tooltip } from 'lib/lemon-ui/Tooltip/Tooltip' // Simple mapping for the display mode options and their icons export const DISPLAY_MODE_OPTIONS: LemonSegmentedButtonOption[] = [ diff --git a/frontend/src/scenes/web-analytics/tiles/WebAnalyticsErrorTracking.tsx b/frontend/src/scenes/web-analytics/tiles/WebAnalyticsErrorTracking.tsx index 1cc23383a2..8429a53a42 100644 --- a/frontend/src/scenes/web-analytics/tiles/WebAnalyticsErrorTracking.tsx +++ b/frontend/src/scenes/web-analytics/tiles/WebAnalyticsErrorTracking.tsx @@ -1,17 +1,18 @@ import clsx from 'clsx' import { useActions } from 'kea' + import { TZLabel } from 'lib/components/TZLabel' -import { IconOpenInNew } from 'lib/lemon-ui/icons' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonTableLink } from 'lib/lemon-ui/LemonTable/LemonTableLink' +import { IconOpenInNew } from 'lib/lemon-ui/icons' import { humanFriendlyLargeNumber } from 'lib/utils' import { ProductIntentContext } from 'lib/utils/product-intents' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' import { ErrorTrackingTile } from 'scenes/web-analytics/common' -import { QueryFeature } from '~/queries/nodes/DataTable/queryFeatures' import { Query } from '~/queries/Query/Query' +import { QueryFeature } from '~/queries/nodes/DataTable/queryFeatures' import { ErrorTrackingIssue } from '~/queries/schema/schema-general' import { QueryContext, QueryContextColumnComponent } from '~/queries/types' import { ProductKey } from '~/types' diff --git a/frontend/src/scenes/web-analytics/tiles/WebAnalyticsRecordings.tsx b/frontend/src/scenes/web-analytics/tiles/WebAnalyticsRecordings.tsx index a942695a26..aa6cb3dc7c 100644 --- a/frontend/src/scenes/web-analytics/tiles/WebAnalyticsRecordings.tsx +++ b/frontend/src/scenes/web-analytics/tiles/WebAnalyticsRecordings.tsx @@ -1,9 +1,10 @@ import clsx from 'clsx' import { useActions, useValues } from 'kea' + import { EmptyMessage } from 'lib/components/EmptyMessage/EmptyMessage' -import { IconOpenInNew } from 'lib/lemon-ui/icons' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' +import { IconOpenInNew } from 'lib/lemon-ui/icons' import { ProductIntentContext } from 'lib/utils/product-intents' import { RecordingRow } from 'scenes/session-recordings/components/RecordingRow' import { sessionRecordingsPlaylistLogic } from 'scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic' diff --git a/frontend/src/scenes/web-analytics/tiles/WebAnalyticsTile.stories.tsx b/frontend/src/scenes/web-analytics/tiles/WebAnalyticsTile.stories.tsx index d593ec6f55..408bee69df 100644 --- a/frontend/src/scenes/web-analytics/tiles/WebAnalyticsTile.stories.tsx +++ b/frontend/src/scenes/web-analytics/tiles/WebAnalyticsTile.stories.tsx @@ -1,19 +1,20 @@ import { Meta, StoryFn, StoryObj } from '@storybook/react' import { useActions } from 'kea' +import { useDelayedOnMountEffect } from 'lib/hooks/useOnMountEffect' + import { mswDecorator } from '~/mocks/browser' -import { examples } from '~/queries/examples' import { Query } from '~/queries/Query/Query' +import { examples } from '~/queries/examples' import { WebAnalyticsOrderByFields } from '~/queries/schema/schema-general' import { webAnalyticsLogic } from '../webAnalyticsLogic' +import { webAnalyticsDataTableQueryContext } from './WebAnalyticsTile' import browserMock from './__mocks__/Browser.json' import pathMock from './__mocks__/Path.json' import referringDomainMock from './__mocks__/ReferringDomain.json' import retentionMock from './__mocks__/Retention.json' import worldMapMock from './__mocks__/WorldMap.json' -import { webAnalyticsDataTableQueryContext } from './WebAnalyticsTile' -import { useDelayedOnMountEffect } from 'lib/hooks/useOnMountEffect' type Story = StoryObj const meta: Meta = { diff --git a/frontend/src/scenes/web-analytics/tiles/WebAnalyticsTile.tsx b/frontend/src/scenes/web-analytics/tiles/WebAnalyticsTile.tsx index 17bb98061f..994ca70cfb 100644 --- a/frontend/src/scenes/web-analytics/tiles/WebAnalyticsTile.tsx +++ b/frontend/src/scenes/web-analytics/tiles/WebAnalyticsTile.tsx @@ -1,26 +1,27 @@ -import { IconChevronDown, IconTrending, IconWarning } from '@posthog/icons' -import { LemonSegmentedButton, Link, Tooltip } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' +import { useCallback, useMemo } from 'react' + +import { IconChevronDown, IconTrending, IconWarning } from '@posthog/icons' +import { LemonSegmentedButton, Link, Tooltip } from '@posthog/lemon-ui' + import { getColorVar } from 'lib/colors' import { IntervalFilterStandalone } from 'lib/components/IntervalFilter' import { parseAliasToReadable } from 'lib/components/PathCleanFilters/PathCleanFilterItem' import { ProductIntroduction } from 'lib/components/ProductIntroduction/ProductIntroduction' import { PropertyIcon } from 'lib/components/PropertyIcon/PropertyIcon' -import { IconOpenInNew, IconTrendingDown, IconTrendingFlat } from 'lib/lemon-ui/icons' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonSwitch } from 'lib/lemon-ui/LemonSwitch' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' -import { percentage, tryDecodeURIComponent, UnexpectedNeverError } from 'lib/utils' +import { IconOpenInNew, IconTrendingDown, IconTrendingFlat } from 'lib/lemon-ui/icons' +import { UnexpectedNeverError, percentage, tryDecodeURIComponent } from 'lib/utils' import { COUNTRY_CODE_TO_LONG_NAME, - countryCodeToFlag, LANGUAGE_CODE_TO_NAME, + countryCodeToFlag, languageCodeToFlag, } from 'lib/utils/geography/country' import { ProductIntentContext } from 'lib/utils/product-intents' -import { useCallback, useMemo } from 'react' -import { NewActionButton } from 'products/actions/frontend/components/NewActionButton' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' import { userLogic } from 'scenes/userLogic' @@ -42,6 +43,8 @@ import { import { QueryContext, QueryContextColumnComponent, QueryContextColumnTitleComponent } from '~/queries/types' import { InsightLogicProps, ProductKey, PropertyFilterType } from '~/types' +import { NewActionButton } from 'products/actions/frontend/components/NewActionButton' + import { ErrorTrackingButton } from '../CrossSellButtons/ErrorTrackingButton' import { HeatmapButton } from '../CrossSellButtons/HeatmapButton' import { ReplayButton } from '../CrossSellButtons/ReplayButton' diff --git a/frontend/src/scenes/web-analytics/webAnalyticsLogic.tsx b/frontend/src/scenes/web-analytics/webAnalyticsLogic.tsx index b28ee07b96..9d7f4b28d5 100644 --- a/frontend/src/scenes/web-analytics/webAnalyticsLogic.tsx +++ b/frontend/src/scenes/web-analytics/webAnalyticsLogic.tsx @@ -1,12 +1,15 @@ -import { IconGear } from '@posthog/icons' -import { LemonTag } from '@posthog/lemon-ui' -import { errorTrackingQuery } from '@posthog/products-error-tracking/frontend/queries' -import { actions, afterMount, BreakPointFunction, connect, kea, listeners, path, reducers, selectors } from 'kea' +import { BreakPointFunction, actions, afterMount, connect, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { actionToUrl, router, urlToAction } from 'kea-router' import { windowValues } from 'kea-window-values' +import posthog from 'posthog-js' + +import { IconGear } from '@posthog/icons' +import { LemonTag } from '@posthog/lemon-ui' +import { errorTrackingQuery } from '@posthog/products-error-tracking/frontend/queries' + import api from 'lib/api' -import { authorizedUrlListLogic, AuthorizedUrlListType } from 'lib/components/AuthorizedUrlList/authorizedUrlListLogic' +import { AuthorizedUrlListType, authorizedUrlListLogic } from 'lib/components/AuthorizedUrlList/authorizedUrlListLogic' import { FEATURE_FLAGS, RETENTION_FIRST_TIME } from 'lib/constants' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' @@ -28,6 +31,7 @@ import { userLogic } from 'scenes/userLogic' import { WEB_VITALS_COLORS, WEB_VITALS_THRESHOLDS } from '~/queries/nodes/WebVitals/definitions' import { hogqlQuery } from '~/queries/query' +import { isCompareFilter, isWebAnalyticsPropertyFilters } from '~/queries/schema-guards' import { ActionConversionGoal, ActionsNode, @@ -50,7 +54,6 @@ import { WebStatsTableQuery, WebVitalsMetric, } from '~/queries/schema/schema-general' -import { isCompareFilter, isWebAnalyticsPropertyFilters } from '~/queries/schema-guards' import { hogql } from '~/queries/utils' import { AvailableFeature, @@ -73,37 +76,36 @@ import { UniversalFiltersGroupValue, } from '~/types' -import { getDashboardItemId, getNewInsightUrlFactory } from './insightsUtils' -import type { webAnalyticsLogicType } from './webAnalyticsLogicType' -import posthog from 'posthog-js' -import { marketingAnalyticsTilesLogic } from './tabs/marketing-analytics/frontend/logic/marketingAnalyticsTilesLogic' import { ActiveHoursTab, ConversionGoalWarning, DeviceTab, DeviceType, - GeographyTab, GEOIP_TEMPLATE_IDS, - getWebAnalyticsBreakdownFilter, + GeographyTab, GraphsTab, INITIAL_DATE_FROM, INITIAL_DATE_TO, INITIAL_INTERVAL, INITIAL_WEB_ANALYTICS_FILTER, - loadPriorityMap, PathTab, ProductTab, SourceTab, + TILES_ALLOWED_ON_PRE_AGGREGATED, TabsTileTab, TileId, - TILES_ALLOWED_ON_PRE_AGGREGATED, TileVisualizationOption, WEB_ANALYTICS_DATA_COLLECTION_NODE_ID, WEB_ANALYTICS_DEFAULT_QUERY_TAGS, WebAnalyticsStatusCheck, WebAnalyticsTile, WebVitalsPercentile, + getWebAnalyticsBreakdownFilter, + loadPriorityMap, } from './common' +import { getDashboardItemId, getNewInsightUrlFactory } from './insightsUtils' +import { marketingAnalyticsTilesLogic } from './tabs/marketing-analytics/frontend/logic/marketingAnalyticsTilesLogic' +import type { webAnalyticsLogicType } from './webAnalyticsLogicType' const teamId = window.POSTHOG_APP_CONTEXT?.current_team?.id const persistConfig = { persist: true, prefix: `${teamId}__` } diff --git a/frontend/src/scenes/web-analytics/webAnalyticsModalLogic.ts b/frontend/src/scenes/web-analytics/webAnalyticsModalLogic.ts index 9381acca12..2c5b3d7c95 100644 --- a/frontend/src/scenes/web-analytics/webAnalyticsModalLogic.ts +++ b/frontend/src/scenes/web-analytics/webAnalyticsModalLogic.ts @@ -3,9 +3,9 @@ import { actions, connect, kea, path, reducers, selectors } from 'kea' import { NodeKind, QuerySchema } from '~/queries/schema/schema-general' import { InsightLogicProps } from '~/types' +import { TileId, WEB_ANALYTICS_DATA_COLLECTION_NODE_ID, WebAnalyticsTile } from './common' import { getDashboardItemId, getNewInsightUrlFactory } from './insightsUtils' import { pageReportsLogic } from './pageReportsLogic' -import { TileId, WEB_ANALYTICS_DATA_COLLECTION_NODE_ID, WebAnalyticsTile } from './common' import { webAnalyticsLogic } from './webAnalyticsLogic' import type { webAnalyticsModalLogicType } from './webAnalyticsModalLogicType' diff --git a/frontend/src/scenes/wizard/Wizard.tsx b/frontend/src/scenes/wizard/Wizard.tsx index c11d700e0a..7ab3c78695 100644 --- a/frontend/src/scenes/wizard/Wizard.tsx +++ b/frontend/src/scenes/wizard/Wizard.tsx @@ -1,9 +1,9 @@ import { useActions, useValues } from 'kea' + import { HeartHog, SurprisedHog } from 'lib/components/hedgehogs' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonSelect } from 'lib/lemon-ui/LemonSelect' import { Spinner } from 'lib/lemon-ui/Spinner/Spinner' - import { SceneExport } from 'scenes/sceneTypes' import { wizardLogic } from './wizardLogic' diff --git a/frontend/src/scenes/wizard/wizardLogic.test.tsx b/frontend/src/scenes/wizard/wizardLogic.test.tsx index be8be04281..5fea5a140e 100644 --- a/frontend/src/scenes/wizard/wizardLogic.test.tsx +++ b/frontend/src/scenes/wizard/wizardLogic.test.tsx @@ -1,10 +1,13 @@ -import { initKeaTests } from '~/test/init' -import { wizardLogic } from './wizardLogic' -import { expectLogic } from 'kea-test-utils' -import { router } from 'kea-router' import { MOCK_DEFAULT_ORGANIZATION, MOCK_DEFAULT_TEAM } from 'lib/api.mock' -import { AppContext } from '~/types' + +import { router } from 'kea-router' +import { expectLogic } from 'kea-test-utils' + import { useMocks } from '~/mocks/jest' +import { initKeaTests } from '~/test/init' +import { AppContext } from '~/types' + +import { wizardLogic } from './wizardLogic' const MOCK_HASH = 'mock-hash' diff --git a/frontend/src/scenes/wizard/wizardLogic.tsx b/frontend/src/scenes/wizard/wizardLogic.tsx index fde768630c..8bf1fd03bb 100644 --- a/frontend/src/scenes/wizard/wizardLogic.tsx +++ b/frontend/src/scenes/wizard/wizardLogic.tsx @@ -1,11 +1,12 @@ import { actions, connect, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { urlToAction } from 'kea-router' + import api from 'lib/api' import { organizationLogic } from 'scenes/organizationLogic' +import { projectLogic } from 'scenes/projectLogic' import type { wizardLogicType } from './wizardLogicType' -import { projectLogic } from 'scenes/projectLogic' export interface WizardTokenResponseType { success: boolean diff --git a/frontend/src/stories/How to add tabs to a scene.stories.mdx b/frontend/src/stories/How to add tabs to a scene.stories.mdx index 73f72d410f..ca993668df 100644 --- a/frontend/src/stories/How to add tabs to a scene.stories.mdx +++ b/frontend/src/stories/How to add tabs to a scene.stories.mdx @@ -33,12 +33,13 @@ dashboards: (tab: DashboardsTabs = DashboardsTabs.First): string => `/dashboards 4. Update `dashboardsLogic` to handle tab changes in `frontend/src/scenes/dashboards/dashboardsLogic.ts`: ```ts title="frontend/src/scenes/dashboards/dashboardsLogic.ts" -import { kea, reducers, path, actions, selectors } from 'kea' +import { actions, kea, path, reducers, selectors } from 'kea' import { actionToUrl, urlToAction } from 'kea-router' -import { Breadcrumb, DashboardsTabs } from '~/types' import { urls } from 'scenes/urls' +import { Breadcrumb, DashboardsTabs } from '~/types' + export const DASHBOARDS_TAB_TO_NAME: Record = { [DashboardsTabs.First]: 'First', [DashboardsTabs.Second]: 'Second', @@ -91,10 +92,13 @@ export const dashboardsLogic = kea([ ```tsx title="frontend/src/scenes/dashboards/Dashboards.tsx" import { useValues } from 'kea' import { router } from 'kea-router' -import { DashboardsTabs } from '~/types' -import { SceneExport } from 'scenes/sceneTypes' + import { LemonTabs } from 'lib/lemon-ui/LemonTabs/LemonTabs' +import { SceneExport } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' + +import { DashboardsTabs } from '~/types' + import { dashboardsLogic, humanFriendlyTabName } from './dashboardsLogic' const DASHBOARDS_TAB_TO_CONTENT: Record = { diff --git a/frontend/src/stories/How to build a scene.stories.mdx b/frontend/src/stories/How to build a scene.stories.mdx index 5c1c3667b5..6b523c7ad4 100644 --- a/frontend/src/stories/How to build a scene.stories.mdx +++ b/frontend/src/stories/How to build a scene.stories.mdx @@ -41,7 +41,7 @@ export const scene: SceneExport = { Create the logic: `frontend/src/scenes/dashboard/dashboardsLogic.tsx` ```ts -import { kea, reducers, path } from 'kea' +import { kea, path, reducers } from 'kea' export const dashboardsLogic = kea([ path(['scenes', 'dashboard', 'dashboardsLogic']), @@ -150,7 +150,7 @@ export function Dashboard ({ id }: { id?: string } = {}): JSX.Element { Create the logic: `frontend/src/scenes/dashboard/dashboardLogic.tsx` ```ts -import { kea, reducers, path, props, key } from 'kea' +import { kea, key, path, props, reducers } from 'kea' export interface DashboardLogicProps { id: number | 'new' @@ -234,13 +234,15 @@ In the same folder as your component, create a file like `frontend/src/scenes/da If you need a lot of `.json` files for mocked data, create a `__mocks__` subdirectory for those files, just like you would with `jest`. ```tsx -import { useEffect } from 'react' import { Meta, StoryObj } from '@storybook/react' -import { mswDecorator, useStorybookMocks } from '~/mocks/browser' -import { App } from 'scenes/App' import { router } from 'kea-router' -import { urls } from 'scenes/urls' +import { useEffect } from 'react' + import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' +import { App } from 'scenes/App' +import { urls } from 'scenes/urls' + +import { mswDecorator, useStorybookMocks } from '~/mocks/browser' export default { title: 'Scenes-App/Dashboard', diff --git a/frontend/src/styles/index.tsx b/frontend/src/styles/index.tsx index 4b3fa2e870..fcf8badaac 100644 --- a/frontend/src/styles/index.tsx +++ b/frontend/src/styles/index.tsx @@ -1 +1,3 @@ -import './global.scss' /* Contains PostHog's main styling configurations */ +import './global.scss' + +/* Contains PostHog's main styling configurations */ diff --git a/frontend/src/taxonomy/transformations.tsx b/frontend/src/taxonomy/transformations.tsx index 749a6f2fc4..8271128f63 100644 --- a/frontend/src/taxonomy/transformations.tsx +++ b/frontend/src/taxonomy/transformations.tsx @@ -1,4 +1,5 @@ import { Link } from 'lib/lemon-ui/Link' + import { CoreFilterDefinition } from '~/types' type RawCoreFilterDefinition = { diff --git a/frontend/src/test/init.ts b/frontend/src/test/init.ts index c39467f295..4ea0ee51a4 100644 --- a/frontend/src/test/init.ts +++ b/frontend/src/test/init.ts @@ -1,10 +1,12 @@ +import { MOCK_DEFAULT_PROJECT, MOCK_DEFAULT_TEAM } from 'lib/api.mock' + import { createMemoryHistory } from 'history' import { testUtilsPlugin } from 'kea-test-utils' -import { MOCK_DEFAULT_PROJECT, MOCK_DEFAULT_TEAM } from 'lib/api.mock' -import { dayjs } from 'lib/dayjs' import posthog from 'posthog-js' -import { organizationLogic } from 'scenes/organizationLogic' + +import { dayjs } from 'lib/dayjs' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' +import { organizationLogic } from 'scenes/organizationLogic' import { projectLogic } from 'scenes/projectLogic' import { teamLogic } from 'scenes/teamLogic' diff --git a/frontend/src/toolbar/Toolbar.stories.tsx b/frontend/src/toolbar/Toolbar.stories.tsx index f47001e595..5d5202d6d7 100644 --- a/frontend/src/toolbar/Toolbar.stories.tsx +++ b/frontend/src/toolbar/Toolbar.stories.tsx @@ -1,10 +1,13 @@ import '~/styles' + import '~/toolbar/styles.scss' import { Meta, StoryFn } from '@storybook/react' import { useActions, useMountedLogic } from 'kea' import { useEffect } from 'react' +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' + import { useStorybookMocks } from '~/mocks/browser' import { ToolbarApp } from '~/toolbar/ToolbarApp' import { ToolbarParams } from '~/types' @@ -17,7 +20,6 @@ import { listWebVitalsAPIResponse } from './__mocks__/list-web-vitals-response' import { MenuState, toolbarLogic } from './bar/toolbarLogic' import { toolbarConfigLogic } from './toolbarConfigLogic' import { TOOLBAR_ID } from './utils' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' function useToolbarStyles(): void { useOnMountEffect(() => { diff --git a/frontend/src/toolbar/ToolbarApp.tsx b/frontend/src/toolbar/ToolbarApp.tsx index 097231dbf9..bf12e3c1b0 100644 --- a/frontend/src/toolbar/ToolbarApp.tsx +++ b/frontend/src/toolbar/ToolbarApp.tsx @@ -1,16 +1,17 @@ import { useValues } from 'kea' -import { useSecondRender } from 'lib/hooks/useSecondRender' import { useRef, useState } from 'react' import root from 'react-shadow' import { Slide, ToastContainer } from 'react-toastify' -import { toolbarConfigLogic } from '~/toolbar/toolbarConfigLogic' +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' +import { useSecondRender } from 'lib/hooks/useSecondRender' + import { ToolbarContainer } from '~/toolbar/ToolbarContainer' +import { toolbarConfigLogic } from '~/toolbar/toolbarConfigLogic' import { ToolbarProps } from '~/types' import { TOOLBAR_ID } from './utils' import { webVitalsToolbarLogic } from './web-vitals/webVitalsToolbarLogic' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' type HTMLElementWithShadowRoot = HTMLElement & { shadowRoot: ShadowRoot } diff --git a/frontend/src/toolbar/ToolbarContainer.tsx b/frontend/src/toolbar/ToolbarContainer.tsx index 06a395d3ed..8aca88c432 100644 --- a/frontend/src/toolbar/ToolbarContainer.tsx +++ b/frontend/src/toolbar/ToolbarContainer.tsx @@ -1,7 +1,8 @@ import { useValues } from 'kea' +import { useRef } from 'react' + import { Fade } from 'lib/components/Fade/Fade' import { FloatingContainerContext } from 'lib/hooks/useFloatingContainerContext' -import { useRef } from 'react' import { Toolbar } from './bar/Toolbar' import { ToolbarFixedZones } from './bar/ToolbarFixedZones' diff --git a/frontend/src/toolbar/actions/ActionAttribute.tsx b/frontend/src/toolbar/actions/ActionAttribute.tsx index 89258df241..9bdd3c1740 100644 --- a/frontend/src/toolbar/actions/ActionAttribute.tsx +++ b/frontend/src/toolbar/actions/ActionAttribute.tsx @@ -1,9 +1,11 @@ -import { LemonSwitch, Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonSwitch, Link } from '@posthog/lemon-ui' + import { IconBranch, IconClipboardEdit, IconLink, IconTextSize } from 'lib/lemon-ui/icons' -import { actionsTabLogic } from './actionsTabLogic' import { ActionStepPropertyKey } from './ActionStep' +import { actionsTabLogic } from './actionsTabLogic' function SelectorString({ value }: { value: string }): JSX.Element { const [last, ...rest] = value.split(' ').reverse() diff --git a/frontend/src/toolbar/actions/ActionsEditingToolbarMenu.tsx b/frontend/src/toolbar/actions/ActionsEditingToolbarMenu.tsx index 170fd5856a..1211796705 100644 --- a/frontend/src/toolbar/actions/ActionsEditingToolbarMenu.tsx +++ b/frontend/src/toolbar/actions/ActionsEditingToolbarMenu.tsx @@ -1,13 +1,15 @@ -import { IconPencil, IconPlus, IconSearch, IconTrash } from '@posthog/icons' -import { LemonDivider, LemonTag } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { Field, Form, Group } from 'kea-forms' + +import { IconPencil, IconPlus, IconSearch, IconTrash } from '@posthog/icons' +import { LemonDivider, LemonTag } from '@posthog/lemon-ui' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonInput } from 'lib/lemon-ui/LemonInput' -import { actionsTabLogic } from '~/toolbar/actions/actionsTabLogic' import { SelectorEditingModal } from '~/toolbar/actions/SelectorEditingModal' import { StepField } from '~/toolbar/actions/StepField' +import { actionsTabLogic } from '~/toolbar/actions/actionsTabLogic' import { ToolbarMenu } from '~/toolbar/bar/ToolbarMenu' import { toolbarPosthogJS } from '~/toolbar/toolbarPosthogJS' diff --git a/frontend/src/toolbar/actions/ActionsListView.tsx b/frontend/src/toolbar/actions/ActionsListView.tsx index 474fe7facb..85394ccb0e 100644 --- a/frontend/src/toolbar/actions/ActionsListView.tsx +++ b/frontend/src/toolbar/actions/ActionsListView.tsx @@ -1,8 +1,10 @@ -import { Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' -import { Spinner } from 'lib/lemon-ui/Spinner' import { Fragment } from 'react' +import { Link } from '@posthog/lemon-ui' + +import { Spinner } from 'lib/lemon-ui/Spinner' + import { actionsLogic } from '~/toolbar/actions/actionsLogic' import { actionsTabLogic } from '~/toolbar/actions/actionsTabLogic' import { ActionType } from '~/types' diff --git a/frontend/src/toolbar/actions/ActionsToolbarMenu.tsx b/frontend/src/toolbar/actions/ActionsToolbarMenu.tsx index 36d68a95dc..5ed8a0d338 100644 --- a/frontend/src/toolbar/actions/ActionsToolbarMenu.tsx +++ b/frontend/src/toolbar/actions/ActionsToolbarMenu.tsx @@ -1,11 +1,13 @@ -import { IconPlus } from '@posthog/icons' import { useActions, useValues } from 'kea' + +import { IconPlus } from '@posthog/icons' + import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' -import { IconOpenInNew } from 'lib/lemon-ui/icons' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonInput } from 'lib/lemon-ui/LemonInput' import { Link } from 'lib/lemon-ui/Link' import { Spinner } from 'lib/lemon-ui/Spinner' +import { IconOpenInNew } from 'lib/lemon-ui/icons' import { urls } from 'scenes/urls' import { ActionsEditingToolbarMenu } from '~/toolbar/actions/ActionsEditingToolbarMenu' diff --git a/frontend/src/toolbar/actions/SelectorEditingModal.tsx b/frontend/src/toolbar/actions/SelectorEditingModal.tsx index 15eaae631a..677b8c3a1a 100644 --- a/frontend/src/toolbar/actions/SelectorEditingModal.tsx +++ b/frontend/src/toolbar/actions/SelectorEditingModal.tsx @@ -1,7 +1,8 @@ +import { useState } from 'react' + import { HTMLElementsDisplay } from 'lib/components/HTMLElementsDisplay/HTMLElementsDisplay' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonModal } from 'lib/lemon-ui/LemonModal' -import { useState } from 'react' import { ElementType } from '~/types' diff --git a/frontend/src/toolbar/actions/StepField.tsx b/frontend/src/toolbar/actions/StepField.tsx index 925ce79260..f691b899b5 100644 --- a/frontend/src/toolbar/actions/StepField.tsx +++ b/frontend/src/toolbar/actions/StepField.tsx @@ -1,15 +1,17 @@ import clsx from 'clsx' import { Field } from 'kea-forms' + import { LemonCheckbox } from 'lib/lemon-ui/LemonCheckbox' import { LemonInput } from 'lib/lemon-ui/LemonInput/LemonInput' import { LemonSegmentedButton } from 'lib/lemon-ui/LemonSegmentedButton' import { LemonTextArea } from 'lib/lemon-ui/LemonTextArea/LemonTextArea' import { cssEscape } from 'lib/utils/cssEscape' -import { URL_MATCHING_HINTS } from 'products/actions/frontend/utils/hints' import { SelectorCount } from '~/toolbar/actions/SelectorCount' import { ActionStepForm } from '~/toolbar/types' +import { URL_MATCHING_HINTS } from 'products/actions/frontend/utils/hints' + interface StepFieldProps { item: 'href' | 'text' | 'selector' | 'url' step: ActionStepForm diff --git a/frontend/src/toolbar/actions/actionsLogic.ts b/frontend/src/toolbar/actions/actionsLogic.ts index 56fd08ff90..f9d33e3d0f 100644 --- a/frontend/src/toolbar/actions/actionsLogic.ts +++ b/frontend/src/toolbar/actions/actionsLogic.ts @@ -1,6 +1,7 @@ import Fuse from 'fuse.js' import { actions, kea, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' + import { permanentlyMount } from 'lib/utils/kea-logic-builders' import { toolbarConfigLogic, toolbarFetch } from '~/toolbar/toolbarConfigLogic' diff --git a/frontend/src/toolbar/actions/actionsTabLogic.tsx b/frontend/src/toolbar/actions/actionsTabLogic.tsx index 0ea8ae0c6d..a8238d0900 100644 --- a/frontend/src/toolbar/actions/actionsTabLogic.tsx +++ b/frontend/src/toolbar/actions/actionsTabLogic.tsx @@ -1,6 +1,7 @@ import { actions, connect, kea, listeners, path, reducers, selectors } from 'kea' import { forms } from 'kea-forms' import { subscriptions } from 'kea-subscriptions' + import api from 'lib/api' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' import { urls } from 'scenes/urls' @@ -13,8 +14,8 @@ import { ActionDraftType, ActionForm } from '~/toolbar/types' import { actionStepToActionStepFormItem, elementToActionStep, stepToDatabaseFormat } from '~/toolbar/utils' import { ActionType, ElementType } from '~/types' -import type { actionsTabLogicType } from './actionsTabLogicType' import { ActionStepPropertyKey } from './ActionStep' +import type { actionsTabLogicType } from './actionsTabLogicType' function newAction( element: HTMLElement | null, diff --git a/frontend/src/toolbar/bar/Toolbar.tsx b/frontend/src/toolbar/bar/Toolbar.tsx index c9012a2689..ea44162606 100644 --- a/frontend/src/toolbar/bar/Toolbar.tsx +++ b/frontend/src/toolbar/bar/Toolbar.tsx @@ -1,5 +1,10 @@ import './Toolbar.scss' +import clsx from 'clsx' +import { useActions, useValues } from 'kea' +import { PostHog } from 'posthog-js' +import { useEffect, useRef, useState } from 'react' + import { IconBolt, IconCheck, @@ -17,15 +22,12 @@ import { IconX, } from '@posthog/icons' import { LemonBadge, Spinner } from '@posthog/lemon-ui' -import clsx from 'clsx' -import { useActions, useValues } from 'kea' + import { useKeyboardHotkeys } from 'lib/hooks/useKeyboardHotkeys' -import { IconFlare, IconMenu } from 'lib/lemon-ui/icons' import { LemonMenu, LemonMenuItem, LemonMenuItems } from 'lib/lemon-ui/LemonMenu' import { Link } from 'lib/lemon-ui/Link' +import { IconFlare, IconMenu } from 'lib/lemon-ui/icons' import { inStorybook, inStorybookTestRunner } from 'lib/utils' -import { PostHog } from 'posthog-js' -import { useEffect, useRef, useState } from 'react' import { ActionsToolbarMenu } from '~/toolbar/actions/ActionsToolbarMenu' import { toolbarLogic } from '~/toolbar/bar/toolbarLogic' diff --git a/frontend/src/toolbar/bar/ToolbarButton.tsx b/frontend/src/toolbar/bar/ToolbarButton.tsx index f5dfc755be..075d21d2ba 100644 --- a/frontend/src/toolbar/bar/ToolbarButton.tsx +++ b/frontend/src/toolbar/bar/ToolbarButton.tsx @@ -1,12 +1,14 @@ import './ToolbarButton.scss' -import { Tooltip } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' -import { capitalizeFirstLetter } from 'lib/utils' import { FunctionComponent, useEffect } from 'react' import React from 'react' +import { Tooltip } from '@posthog/lemon-ui' + +import { capitalizeFirstLetter } from 'lib/utils' + import { MenuState, toolbarLogic } from './toolbarLogic' export type ToolbarButtonProps = { diff --git a/frontend/src/toolbar/bar/toolbarLogic.ts b/frontend/src/toolbar/bar/toolbarLogic.ts index c1be2b5e3d..ffd6534d71 100644 --- a/frontend/src/toolbar/bar/toolbarLogic.ts +++ b/frontend/src/toolbar/bar/toolbarLogic.ts @@ -1,5 +1,6 @@ import { actions, afterMount, beforeUnmount, connect, kea, listeners, path, reducers, selectors } from 'kea' import { windowValues } from 'kea-window-values' + import { HedgehogActor } from 'lib/components/HedgehogBuddy/HedgehogBuddy' import { SPRITE_SIZE } from 'lib/components/HedgehogBuddy/sprites/sprites' import { PostHogAppToolbarEvent } from 'lib/components/IframedToolbarBrowser/utils' @@ -9,7 +10,7 @@ import { elementsLogic } from '~/toolbar/elements/elementsLogic' import { heatmapToolbarMenuLogic } from '~/toolbar/elements/heatmapToolbarMenuLogic' import { experimentsTabLogic } from '~/toolbar/experiments/experimentsTabLogic' import { toolbarConfigLogic } from '~/toolbar/toolbarConfigLogic' -import { inBounds, TOOLBAR_CONTAINER_CLASS, TOOLBAR_ID } from '~/toolbar/utils' +import { TOOLBAR_CONTAINER_CLASS, TOOLBAR_ID, inBounds } from '~/toolbar/utils' import type { toolbarLogicType } from './toolbarLogicType' diff --git a/frontend/src/toolbar/debug/EventDebugMenu.tsx b/frontend/src/toolbar/debug/EventDebugMenu.tsx index 022d203843..44b0d09ef6 100644 --- a/frontend/src/toolbar/debug/EventDebugMenu.tsx +++ b/frontend/src/toolbar/debug/EventDebugMenu.tsx @@ -1,13 +1,15 @@ -import { BaseIcon, IconCheck, IconChevronDown, IconEye, IconHide, IconLogomark, IconVideoCamera } from '@posthog/icons' import clsx from 'clsx' import { useActions, useValues } from 'kea' + +import { BaseIcon, IconCheck, IconChevronDown, IconEye, IconHide, IconLogomark, IconVideoCamera } from '@posthog/icons' + import { PropertyKeyInfo } from 'lib/components/PropertyKeyInfo' import { SimpleKeyValueList } from 'lib/components/SimpleKeyValueList' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { dayjs } from 'lib/dayjs' -import { IconUnverifiedEvent } from 'lib/lemon-ui/icons' import { LemonInput } from 'lib/lemon-ui/LemonInput' import { LemonMenuItem } from 'lib/lemon-ui/LemonMenu' +import { IconUnverifiedEvent } from 'lib/lemon-ui/icons' import { SettingsBar, SettingsMenu } from 'scenes/session-recordings/components/PanelSettings' import { eventDebugMenuLogic } from '~/toolbar/debug/eventDebugMenuLogic' diff --git a/frontend/src/toolbar/debug/eventDebugMenuLogic.ts b/frontend/src/toolbar/debug/eventDebugMenuLogic.ts index 9ad025144f..64a706657e 100644 --- a/frontend/src/toolbar/debug/eventDebugMenuLogic.ts +++ b/frontend/src/toolbar/debug/eventDebugMenuLogic.ts @@ -1,4 +1,5 @@ import { actions, afterMount, connect, kea, path, reducers, selectors } from 'kea' + import { uuid } from 'lib/utils' import { permanentlyMount } from 'lib/utils/kea-logic-builders' diff --git a/frontend/src/toolbar/elements/ElementInfo.tsx b/frontend/src/toolbar/elements/ElementInfo.tsx index 37c7b9ab2a..8f22e40cb5 100644 --- a/frontend/src/toolbar/elements/ElementInfo.tsx +++ b/frontend/src/toolbar/elements/ElementInfo.tsx @@ -1,9 +1,10 @@ -import { IconCalendar, IconPlus } from '@posthog/icons' -import { LemonButton } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' -import { ActionsListView } from '~/toolbar/actions/ActionsListView' +import { IconCalendar, IconPlus } from '@posthog/icons' +import { LemonButton } from '@posthog/lemon-ui' + import { ActionStep } from '~/toolbar/actions/ActionStep' +import { ActionsListView } from '~/toolbar/actions/ActionsListView' import { elementsLogic } from '~/toolbar/elements/elementsLogic' import { heatmapToolbarMenuLogic } from '~/toolbar/elements/heatmapToolbarMenuLogic' diff --git a/frontend/src/toolbar/elements/ElementInfoWindow.tsx b/frontend/src/toolbar/elements/ElementInfoWindow.tsx index d576d17724..d17c0f11f6 100644 --- a/frontend/src/toolbar/elements/ElementInfoWindow.tsx +++ b/frontend/src/toolbar/elements/ElementInfoWindow.tsx @@ -1,6 +1,7 @@ -import { IconX } from '@posthog/icons' import { useActions, useValues } from 'kea' +import { IconX } from '@posthog/icons' + import { ElementInfo } from '~/toolbar/elements/ElementInfo' import { elementsLogic } from '~/toolbar/elements/elementsLogic' diff --git a/frontend/src/toolbar/elements/Elements.tsx b/frontend/src/toolbar/elements/Elements.tsx index 76a98b162a..13e3d834e7 100644 --- a/frontend/src/toolbar/elements/Elements.tsx +++ b/frontend/src/toolbar/elements/Elements.tsx @@ -1,14 +1,15 @@ import { useActions, useValues } from 'kea' +import { Fragment } from 'react' + import { HeatmapCanvas } from 'lib/components/heatmaps/HeatmapCanvas' import { useShiftKeyPressed } from 'lib/components/heatmaps/useShiftKeyPressed' import { compactNumber } from 'lib/utils' -import { Fragment } from 'react' import { AutocaptureElement } from '~/toolbar/elements/AutocaptureElement' import { AutocaptureElementLabel } from '~/toolbar/elements/AutocaptureElementLabel' import { ElementInfoWindow } from '~/toolbar/elements/ElementInfoWindow' -import { elementsLogic } from '~/toolbar/elements/elementsLogic' import { FocusRect } from '~/toolbar/elements/FocusRect' +import { elementsLogic } from '~/toolbar/elements/elementsLogic' import { heatmapToolbarMenuLogic } from '~/toolbar/elements/heatmapToolbarMenuLogic' import { getBoxColors, getHeatMapHue } from '~/toolbar/utils' diff --git a/frontend/src/toolbar/elements/ScrollDepth.tsx b/frontend/src/toolbar/elements/ScrollDepth.tsx index 374266bd1c..ee57b3aa07 100644 --- a/frontend/src/toolbar/elements/ScrollDepth.tsx +++ b/frontend/src/toolbar/elements/ScrollDepth.tsx @@ -1,5 +1,6 @@ import clsx from 'clsx' import { useValues } from 'kea' + import { useMousePosition } from 'lib/components/heatmaps/useMousePosition' import { useShiftKeyPressed } from 'lib/components/heatmaps/useShiftKeyPressed' diff --git a/frontend/src/toolbar/elements/elementsLogic.ts b/frontend/src/toolbar/elements/elementsLogic.ts index b9090f9e4a..d430f8bdfc 100644 --- a/frontend/src/toolbar/elements/elementsLogic.ts +++ b/frontend/src/toolbar/elements/elementsLogic.ts @@ -1,7 +1,8 @@ import { actions, connect, events, kea, listeners, path, reducers, selectors } from 'kea' +import { collectAllElementsDeep } from 'query-selector-shadow-dom' + import { EXPERIMENT_TARGET_SELECTOR } from 'lib/actionUtils' import { debounce } from 'lib/utils' -import { collectAllElementsDeep } from 'query-selector-shadow-dom' import { actionsLogic } from '~/toolbar/actions/actionsLogic' import { actionsTabLogic } from '~/toolbar/actions/actionsTabLogic' diff --git a/frontend/src/toolbar/elements/heatmapToolbarMenuLogic.ts b/frontend/src/toolbar/elements/heatmapToolbarMenuLogic.ts index 59d517cb83..aa2a0f82e6 100644 --- a/frontend/src/toolbar/elements/heatmapToolbarMenuLogic.ts +++ b/frontend/src/toolbar/elements/heatmapToolbarMenuLogic.ts @@ -3,12 +3,13 @@ import { loaders } from 'kea-loaders' import { encodeParams } from 'kea-router' import { subscriptions } from 'kea-subscriptions' import { windowValues } from 'kea-window-values' +import { PostHog } from 'posthog-js' +import { collectAllElementsDeep, querySelectorAllDeep } from 'query-selector-shadow-dom' + import { elementToSelector } from 'lib/actionUtils' import { PaginatedResponse } from 'lib/api' import { heatmapDataLogic } from 'lib/components/heatmaps/heatmapDataLogic' import { createVersionChecker } from 'lib/utils/semver' -import { PostHog } from 'posthog-js' -import { collectAllElementsDeep, querySelectorAllDeep } from 'query-selector-shadow-dom' import { currentPageLogic } from '~/toolbar/stats/currentPageLogic' import { toolbarConfigLogic, toolbarFetch } from '~/toolbar/toolbarConfigLogic' diff --git a/frontend/src/toolbar/experiments/ExperimentsEditingToolbarMenu.tsx b/frontend/src/toolbar/experiments/ExperimentsEditingToolbarMenu.tsx index 44b908f8a8..daae970da3 100644 --- a/frontend/src/toolbar/experiments/ExperimentsEditingToolbarMenu.tsx +++ b/frontend/src/toolbar/experiments/ExperimentsEditingToolbarMenu.tsx @@ -1,6 +1,8 @@ -import { IconPlus } from '@posthog/icons' import { useActions, useValues } from 'kea' import { Form, Group } from 'kea-forms' + +import { IconPlus } from '@posthog/icons' + import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonCollapse } from 'lib/lemon-ui/LemonCollapse' @@ -8,9 +10,9 @@ import { LemonInput } from 'lib/lemon-ui/LemonInput' import { LemonLabel } from 'lib/lemon-ui/LemonLabel' import { ToolbarMenu } from '~/toolbar/bar/ToolbarMenu' -import { experimentsTabLogic } from '~/toolbar/experiments/experimentsTabLogic' import { WebExperimentVariant } from '~/toolbar/experiments/WebExperimentVariant' import { WebExperimentVariantHeader } from '~/toolbar/experiments/WebExperimentVariantHeader' +import { experimentsTabLogic } from '~/toolbar/experiments/experimentsTabLogic' export const ExperimentsEditingToolbarMenu = (): JSX.Element => { const { selectedExperimentId, experimentForm, addVariantAvailable, selectedVariant, experimentFormErrors } = diff --git a/frontend/src/toolbar/experiments/ExperimentsListView.tsx b/frontend/src/toolbar/experiments/ExperimentsListView.tsx index 12ec3e4667..358fc101f6 100644 --- a/frontend/src/toolbar/experiments/ExperimentsListView.tsx +++ b/frontend/src/toolbar/experiments/ExperimentsListView.tsx @@ -1,5 +1,7 @@ -import { Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { Link } from '@posthog/lemon-ui' + import { Spinner } from 'lib/lemon-ui/Spinner' import { experimentsLogic } from '~/toolbar/experiments/experimentsLogic' diff --git a/frontend/src/toolbar/experiments/ExperimentsToolbarMenu.tsx b/frontend/src/toolbar/experiments/ExperimentsToolbarMenu.tsx index 70caead817..1a324896c8 100644 --- a/frontend/src/toolbar/experiments/ExperimentsToolbarMenu.tsx +++ b/frontend/src/toolbar/experiments/ExperimentsToolbarMenu.tsx @@ -1,11 +1,13 @@ +import { useActions, useValues } from 'kea' + import { IconPlus } from '@posthog/icons' import { LemonBanner } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' -import { IconOpenInNew } from 'lib/lemon-ui/icons' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonInput } from 'lib/lemon-ui/LemonInput' import { Link } from 'lib/lemon-ui/Link' import { Spinner } from 'lib/lemon-ui/Spinner' +import { IconOpenInNew } from 'lib/lemon-ui/icons' import { urls } from 'scenes/urls' import { ToolbarMenu } from '~/toolbar/bar/ToolbarMenu' diff --git a/frontend/src/toolbar/experiments/SelectorEditor.tsx b/frontend/src/toolbar/experiments/SelectorEditor.tsx index c4a8b8d43f..da5f742894 100644 --- a/frontend/src/toolbar/experiments/SelectorEditor.tsx +++ b/frontend/src/toolbar/experiments/SelectorEditor.tsx @@ -1,9 +1,11 @@ -import { IconPencil } from '@posthog/icons' import { useActions } from 'kea' +import { useMemo, useState } from 'react' + +import { IconPencil } from '@posthog/icons' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonInput } from 'lib/lemon-ui/LemonInput' import { LemonModal } from 'lib/lemon-ui/LemonModal' -import { useMemo, useState } from 'react' import { experimentsTabLogic } from './experimentsTabLogic' diff --git a/frontend/src/toolbar/experiments/WebExperimentTransformField.tsx b/frontend/src/toolbar/experiments/WebExperimentTransformField.tsx index 8d532c7d81..17decb59ac 100644 --- a/frontend/src/toolbar/experiments/WebExperimentTransformField.tsx +++ b/frontend/src/toolbar/experiments/WebExperimentTransformField.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconCursorClick } from '@posthog/icons' import { LemonLabel, LemonSelect } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonTextArea } from 'lib/lemon-ui/LemonTextArea/LemonTextArea' diff --git a/frontend/src/toolbar/experiments/WebExperimentTransformHeader.tsx b/frontend/src/toolbar/experiments/WebExperimentTransformHeader.tsx index 5e8f182b6d..b044e30113 100644 --- a/frontend/src/toolbar/experiments/WebExperimentTransformHeader.tsx +++ b/frontend/src/toolbar/experiments/WebExperimentTransformHeader.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconTrash } from '@posthog/icons' import { Tooltip } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { SelectorCount } from '~/toolbar/actions/SelectorCount' diff --git a/frontend/src/toolbar/experiments/WebExperimentVariant.tsx b/frontend/src/toolbar/experiments/WebExperimentVariant.tsx index d4cc301728..257bbfafa4 100644 --- a/frontend/src/toolbar/experiments/WebExperimentVariant.tsx +++ b/frontend/src/toolbar/experiments/WebExperimentVariant.tsx @@ -1,14 +1,16 @@ +import { useActions, useValues } from 'kea' +import { useState } from 'react' + import { IconPlus } from '@posthog/icons' import { LemonLabel } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonCollapse } from 'lib/lemon-ui/LemonCollapse' import { LemonInput } from 'lib/lemon-ui/LemonInput/LemonInput' -import { useState } from 'react' -import { experimentsTabLogic } from '~/toolbar/experiments/experimentsTabLogic' import { WebExperimentTransformField } from '~/toolbar/experiments/WebExperimentTransformField' import { WebExperimentTransformHeader } from '~/toolbar/experiments/WebExperimentTransformHeader' +import { experimentsTabLogic } from '~/toolbar/experiments/experimentsTabLogic' interface WebExperimentVariantProps { variant: string diff --git a/frontend/src/toolbar/experiments/WebExperimentVariantHeader.tsx b/frontend/src/toolbar/experiments/WebExperimentVariantHeader.tsx index 22e6172318..e5921248e7 100644 --- a/frontend/src/toolbar/experiments/WebExperimentVariantHeader.tsx +++ b/frontend/src/toolbar/experiments/WebExperimentVariantHeader.tsx @@ -1,5 +1,7 @@ -import { IconTrash } from '@posthog/icons' import { useActions, useValues } from 'kea' + +import { IconTrash } from '@posthog/icons' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonTag } from 'lib/lemon-ui/LemonTag' diff --git a/frontend/src/toolbar/experiments/experimentsLogic.ts b/frontend/src/toolbar/experiments/experimentsLogic.ts index bfa7ffd21e..5c4afa060d 100644 --- a/frontend/src/toolbar/experiments/experimentsLogic.ts +++ b/frontend/src/toolbar/experiments/experimentsLogic.ts @@ -1,6 +1,7 @@ import Fuse from 'fuse.js' import { actions, kea, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' + import { permanentlyMount } from 'lib/utils/kea-logic-builders' import { toolbarConfigLogic, toolbarFetch } from '~/toolbar/toolbarConfigLogic' diff --git a/frontend/src/toolbar/experiments/experimentsTabLogic.test.ts b/frontend/src/toolbar/experiments/experimentsTabLogic.test.ts index e035aa637c..3336c79154 100644 --- a/frontend/src/toolbar/experiments/experimentsTabLogic.test.ts +++ b/frontend/src/toolbar/experiments/experimentsTabLogic.test.ts @@ -1,5 +1,6 @@ import { router } from 'kea-router' import { expectLogic } from 'kea-test-utils' + import { EXPERIMENT_TARGET_SELECTOR } from 'lib/actionUtils' import { useMocks } from '~/mocks/jest' diff --git a/frontend/src/toolbar/experiments/experimentsTabLogic.tsx b/frontend/src/toolbar/experiments/experimentsTabLogic.tsx index 3a0bee205d..53e9ce94c6 100644 --- a/frontend/src/toolbar/experiments/experimentsTabLogic.tsx +++ b/frontend/src/toolbar/experiments/experimentsTabLogic.tsx @@ -1,6 +1,7 @@ import { actions, connect, events, kea, listeners, path, reducers, selectors } from 'kea' import { forms } from 'kea-forms' import { subscriptions } from 'kea-subscriptions' + import { EXPERIMENT_TARGET_SELECTOR } from 'lib/actionUtils' import api, { ApiError } from 'lib/api' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' diff --git a/frontend/src/toolbar/flags/FlagsToolbarMenu.tsx b/frontend/src/toolbar/flags/FlagsToolbarMenu.tsx index c5699c1af4..0a78694408 100644 --- a/frontend/src/toolbar/flags/FlagsToolbarMenu.tsx +++ b/frontend/src/toolbar/flags/FlagsToolbarMenu.tsx @@ -1,8 +1,8 @@ import clsx from 'clsx' import { useActions, useValues } from 'kea' + import { AnimatedCollapsible } from 'lib/components/AnimatedCollapsible' import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' -import { IconOpenInNew } from 'lib/lemon-ui/icons' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonInput } from 'lib/lemon-ui/LemonInput' import { LemonRadio } from 'lib/lemon-ui/LemonRadio' @@ -10,6 +10,7 @@ import { LemonSwitch } from 'lib/lemon-ui/LemonSwitch' import { LemonTextArea } from 'lib/lemon-ui/LemonTextArea' import { Link } from 'lib/lemon-ui/Link' import { Spinner } from 'lib/lemon-ui/Spinner' +import { IconOpenInNew } from 'lib/lemon-ui/icons' import { urls } from 'scenes/urls' import { ToolbarMenu } from '~/toolbar/bar/ToolbarMenu' diff --git a/frontend/src/toolbar/flags/flagsToolbarLogic.ts b/frontend/src/toolbar/flags/flagsToolbarLogic.ts index 5b0da4c384..5fc759fbf4 100644 --- a/frontend/src/toolbar/flags/flagsToolbarLogic.ts +++ b/frontend/src/toolbar/flags/flagsToolbarLogic.ts @@ -2,9 +2,10 @@ import Fuse from 'fuse.js' import { actions, connect, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { encodeParams } from 'kea-router' -import { permanentlyMount } from 'lib/utils/kea-logic-builders' import type { PostHog } from 'posthog-js' +import { permanentlyMount } from 'lib/utils/kea-logic-builders' + import { toolbarConfigLogic, toolbarFetch } from '~/toolbar/toolbarConfigLogic' import { toolbarPosthogJS } from '~/toolbar/toolbarPosthogJS' import { CombinedFeatureFlagAndValueType } from '~/types' diff --git a/frontend/src/toolbar/hedgehog/HedgehogButton.tsx b/frontend/src/toolbar/hedgehog/HedgehogButton.tsx index 12a37cde60..5312754558 100644 --- a/frontend/src/toolbar/hedgehog/HedgehogButton.tsx +++ b/frontend/src/toolbar/hedgehog/HedgehogButton.tsx @@ -1,7 +1,8 @@ import { useActions, useValues } from 'kea' +import { useEffect } from 'react' + import { HedgehogBuddy } from 'lib/components/HedgehogBuddy/HedgehogBuddy' import { hedgehogBuddyLogic } from 'lib/components/HedgehogBuddy/hedgehogBuddyLogic' -import { useEffect } from 'react' import { toolbarLogic } from '~/toolbar/bar/toolbarLogic' diff --git a/frontend/src/toolbar/hedgehog/HedgehogMenu.tsx b/frontend/src/toolbar/hedgehog/HedgehogMenu.tsx index c65c6707b0..b8d92651e2 100644 --- a/frontend/src/toolbar/hedgehog/HedgehogMenu.tsx +++ b/frontend/src/toolbar/hedgehog/HedgehogMenu.tsx @@ -1,5 +1,7 @@ -import { LemonButton } from '@posthog/lemon-ui' import { useActions } from 'kea' + +import { LemonButton } from '@posthog/lemon-ui' + import { HedgehogOptions } from 'lib/components/HedgehogBuddy/HedgehogOptions' import { ToolbarMenu } from '~/toolbar/bar/ToolbarMenu' diff --git a/frontend/src/toolbar/index.tsx b/frontend/src/toolbar/index.tsx index 49a224a9f2..2db0ea92ab 100644 --- a/frontend/src/toolbar/index.tsx +++ b/frontend/src/toolbar/index.tsx @@ -1,4 +1,5 @@ import '~/styles' + import './styles.scss' import { KeaPlugin, resetContext } from 'kea' diff --git a/frontend/src/toolbar/stats/HeatmapToolbarMenu.tsx b/frontend/src/toolbar/stats/HeatmapToolbarMenu.tsx index 074270bfa4..410fcff1e2 100644 --- a/frontend/src/toolbar/stats/HeatmapToolbarMenu.tsx +++ b/frontend/src/toolbar/stats/HeatmapToolbarMenu.tsx @@ -1,18 +1,20 @@ +import { useActions, useValues } from 'kea' +import posthog from 'posthog-js' +import React from 'react' + import { IconMagicWand } from '@posthog/icons' import { Link } from '@posthog/lemon-ui' import { LemonButton, LemonSwitch } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { DateFilter } from 'lib/components/DateFilter/DateFilter' -import { HeatmapsSettings } from 'lib/components/heatmaps/HeatMapsSettings' import { heatmapDateOptions } from 'lib/components/IframedToolbarBrowser/utils' -import { IconSync } from 'lib/lemon-ui/icons' +import { HeatmapsSettings } from 'lib/components/heatmaps/HeatMapsSettings' import { LemonInput } from 'lib/lemon-ui/LemonInput' import { LemonLabel } from 'lib/lemon-ui/LemonLabel' import { LemonSegmentedButton } from 'lib/lemon-ui/LemonSegmentedButton' import { Spinner } from 'lib/lemon-ui/Spinner' import { Tooltip } from 'lib/lemon-ui/Tooltip' -import posthog from 'posthog-js' -import React from 'react' +import { IconSync } from 'lib/lemon-ui/icons' import { ToolbarMenu } from '~/toolbar/bar/ToolbarMenu' import { elementsLogic } from '~/toolbar/elements/elementsLogic' diff --git a/frontend/src/toolbar/toolbarConfigLogic.ts b/frontend/src/toolbar/toolbarConfigLogic.ts index 3ab336677f..d0c4724af8 100644 --- a/frontend/src/toolbar/toolbarConfigLogic.ts +++ b/frontend/src/toolbar/toolbarConfigLogic.ts @@ -1,5 +1,6 @@ import { actions, afterMount, kea, listeners, path, props, reducers, selectors } from 'kea' import { combineUrl, encodeParams } from 'kea-router' + import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' import { toolbarPosthogJS } from '~/toolbar/toolbarPosthogJS' diff --git a/frontend/src/toolbar/toolbarPosthogJS.ts b/frontend/src/toolbar/toolbarPosthogJS.ts index 171c44f11a..784fb71a75 100644 --- a/frontend/src/toolbar/toolbarPosthogJS.ts +++ b/frontend/src/toolbar/toolbarPosthogJS.ts @@ -1,7 +1,8 @@ -import { FeatureFlagKey } from 'lib/constants' import PostHog from 'posthog-js-lite' import { useEffect, useState } from 'react' +import { FeatureFlagKey } from 'lib/constants' + const DEFAULT_API_KEY = 'sTMFPsFhdP1Ssg' const runningOnPosthog = !!window.POSTHOG_APP_CONTEXT diff --git a/frontend/src/toolbar/utils.ts b/frontend/src/toolbar/utils.ts index dc61422029..c1f0f6dac6 100644 --- a/frontend/src/toolbar/utils.ts +++ b/frontend/src/toolbar/utils.ts @@ -1,9 +1,10 @@ import { finder } from '@medv/finder' -import { CLICK_TARGET_SELECTOR, CLICK_TARGETS, escapeRegex, TAGS_TO_IGNORE } from 'lib/actionUtils' -import { cssEscape } from 'lib/utils/cssEscape' import { querySelectorAllDeep } from 'query-selector-shadow-dom' import { CSSProperties } from 'react' +import { CLICK_TARGETS, CLICK_TARGET_SELECTOR, TAGS_TO_IGNORE, escapeRegex } from 'lib/actionUtils' +import { cssEscape } from 'lib/utils/cssEscape' + import { ActionStepForm, ElementRect } from '~/toolbar/types' import { ActionStepType } from '~/types' diff --git a/frontend/src/toolbar/web-vitals/WebVitalsToolbarMenu.tsx b/frontend/src/toolbar/web-vitals/WebVitalsToolbarMenu.tsx index 22fbba3411..8f49456fc7 100644 --- a/frontend/src/toolbar/web-vitals/WebVitalsToolbarMenu.tsx +++ b/frontend/src/toolbar/web-vitals/WebVitalsToolbarMenu.tsx @@ -1,13 +1,15 @@ -import { LemonBanner, Link, Spinner, Tooltip } from '@posthog/lemon-ui' import { useValues } from 'kea' + +import { LemonBanner, Link, Spinner, Tooltip } from '@posthog/lemon-ui' + import { inStorybook, inStorybookTestRunner } from 'lib/utils' import { urls } from 'scenes/urls' import { - getThresholdColor, - getValueWithUnit, METRIC_DESCRIPTION, WEB_VITALS_THRESHOLDS, + getThresholdColor, + getValueWithUnit, } from '~/queries/nodes/WebVitals/definitions' import { WebVitalsMetric } from '~/queries/schema/schema-general' import { ToolbarMenu } from '~/toolbar/bar/ToolbarMenu' diff --git a/frontend/src/toolbar/web-vitals/webVitalsToolbarLogic.ts b/frontend/src/toolbar/web-vitals/webVitalsToolbarLogic.ts index 65c4249f5f..74a0d2d6fc 100644 --- a/frontend/src/toolbar/web-vitals/webVitalsToolbarLogic.ts +++ b/frontend/src/toolbar/web-vitals/webVitalsToolbarLogic.ts @@ -1,6 +1,7 @@ import { actions, afterMount, connect, kea, path, reducers } from 'kea' import { loaders } from 'kea-loaders' import { encodeParams, router, urlToAction } from 'kea-router' + import { inStorybook, inStorybookTestRunner } from 'lib/utils' import { permanentlyMount } from 'lib/utils/kea-logic-builders' diff --git a/frontend/src/types.ts b/frontend/src/types.ts index 500c1974fd..e86009629e 100644 --- a/frontend/src/types.ts +++ b/frontend/src/types.ts @@ -1,8 +1,13 @@ +import { LogicWrapper } from 'kea' +import type { PostHog, SupportedWebVitalsMetrics } from 'posthog-js' +import { ReactNode } from 'react' +import { Layout } from 'react-grid-layout' + import { LemonTableColumns } from '@posthog/lemon-ui' import { PluginConfigSchema } from '@posthog/plugin-scaffold' import { LogLevel } from '@posthog/rrweb-plugin-console-record' import { eventWithTime } from '@posthog/rrweb-types' -import { LogicWrapper } from 'kea' + import { ChartDataset, ChartType, InteractionItem } from 'lib/Chart' import { DashboardCompatibleScenes } from 'lib/components/SceneDashboardChoice/sceneDashboardChoiceModalLogic' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' @@ -13,8 +18,8 @@ import { ENTITY_MATCH_TYPE, FunnelLayout, OrganizationMembershipLevel, - PluginsAccessLevel, PROPERTY_MATCH_TYPE, + PluginsAccessLevel, RETENTION_FIRST_TIME, RETENTION_MEAN_NONE, RETENTION_RECURRING, @@ -23,10 +28,6 @@ import { } from 'lib/constants' import { Dayjs, dayjs } from 'lib/dayjs' import { PopoverProps } from 'lib/lemon-ui/Popover/Popover' -import type { PostHog, SupportedWebVitalsMetrics } from 'posthog-js' -import { HogFlow } from 'products/messaging/frontend/Campaigns/hogflows/types' -import { ReactNode } from 'react' -import { Layout } from 'react-grid-layout' import { BehavioralFilterKey, BehavioralFilterType } from 'scenes/cohorts/CohortFilters/types' import { BreakdownColorConfig } from 'scenes/dashboard/DashboardInsightColorsModal' import { @@ -64,6 +65,8 @@ import type { } from '~/queries/schema/schema-general' import { QueryContext } from '~/queries/types' +import { HogFlow } from 'products/messaging/frontend/Campaigns/hogflows/types' + // Type alias for number to be reflected as integer in json-schema. /** @asType integer */ type integer = number diff --git a/frontend/vite-html-plugin.ts b/frontend/vite-html-plugin.ts index 35d8ae9e84..ec87f07fd8 100644 --- a/frontend/vite-html-plugin.ts +++ b/frontend/vite-html-plugin.ts @@ -1,6 +1,6 @@ +import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from 'fs' +import { dirname, resolve } from 'path' import type { Plugin } from 'vite' -import { readFileSync, writeFileSync, mkdirSync, existsSync, unlinkSync } from 'fs' -import { resolve, dirname } from 'path' const distHtmlFiles = ['dist/index.html', 'dist/layout.html'] diff --git a/frontend/vite-public-assets-plugin.ts b/frontend/vite-public-assets-plugin.ts index 914a21e679..ebb145e3dd 100644 --- a/frontend/vite-public-assets-plugin.ts +++ b/frontend/vite-public-assets-plugin.ts @@ -1,6 +1,6 @@ +import { existsSync, mkdirSync, readFileSync, readdirSync, unlinkSync, writeFileSync } from 'fs' +import { dirname, join, relative, resolve } from 'path' import type { Plugin } from 'vite' -import { readFileSync, writeFileSync, mkdirSync, existsSync, unlinkSync, readdirSync } from 'fs' -import { resolve, dirname, join, relative } from 'path' function deleteAssetsFiles(): void { try { diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index 10d83cbe7b..54f9caf9dd 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -1,7 +1,8 @@ -import { defineConfig } from 'vite' import react from '@vitejs/plugin-react' +import { URL, fileURLToPath } from 'node:url' import { resolve } from 'path' -import { fileURLToPath, URL } from 'node:url' +import { defineConfig } from 'vite' + // import { toolbarDenylistPlugin } from './vite-toolbar-plugin' import { htmlGenerationPlugin } from './vite-html-plugin' import { publicAssetsPlugin } from './vite-public-assets-plugin' diff --git a/package.json b/package.json index f4c7b4b066..37113d1d33 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,7 @@ "devDependencies": { "@parcel/packager-ts": "2.13.3", "@parcel/transformer-typescript-types": "2.13.3", + "@trivago/prettier-plugin-sort-imports": "^5.2.2", "@types/uuid": "^10.0.0", "oxlint": "^1.8.0", "prettier": "^3.6.2", diff --git a/playwright/e2e/auth.spec.ts b/playwright/e2e/auth.spec.ts index 944e8d3f16..eb08c03721 100644 --- a/playwright/e2e/auth.spec.ts +++ b/playwright/e2e/auth.spec.ts @@ -1,7 +1,7 @@ import { PreflightStatus } from '~/types' import { LoginPage } from '../page-models/loginPage' -import { expect, LOGIN_PASSWORD, LOGIN_USERNAME, test } from '../utils/playwright-test-base' +import { LOGIN_PASSWORD, LOGIN_USERNAME, expect, test } from '../utils/playwright-test-base' test.describe('Auth', () => { let loginPage: LoginPage diff --git a/playwright/page-models/dashboardPage.ts b/playwright/page-models/dashboardPage.ts index ca44e72874..fe39f096e0 100644 --- a/playwright/page-models/dashboardPage.ts +++ b/playwright/page-models/dashboardPage.ts @@ -1,4 +1,5 @@ -import { expect, Locator, Page } from '@playwright/test' +import { Locator, Page, expect } from '@playwright/test' + import { urls } from 'scenes/urls' import { randomString } from '../utils' diff --git a/playwright/page-models/insightPage.ts b/playwright/page-models/insightPage.ts index 180dd7c376..3062344ea3 100644 --- a/playwright/page-models/insightPage.ts +++ b/playwright/page-models/insightPage.ts @@ -1,4 +1,5 @@ -import { expect, Locator, Page } from '@playwright/test' +import { Locator, Page, expect } from '@playwright/test' + import { urls } from 'scenes/urls' import { InsightType } from '~/types' diff --git a/playwright/utils/navigation.ts b/playwright/utils/navigation.ts index a898da2c68..16ae3f2fce 100644 --- a/playwright/utils/navigation.ts +++ b/playwright/utils/navigation.ts @@ -1,4 +1,5 @@ import { Page } from '@playwright/test' + import { Scene } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' diff --git a/playwright/utils/playwright-test-base.ts b/playwright/utils/playwright-test-base.ts index 723a50011b..f0b5227644 100644 --- a/playwright/utils/playwright-test-base.ts +++ b/playwright/utils/playwright-test-base.ts @@ -1,4 +1,5 @@ import { Page, test as base } from '@playwright/test' + import { urls } from 'scenes/urls' import { AppContext } from '~/types' diff --git a/plugin-server/.eslintrc.js b/plugin-server/.eslintrc.js index dffdb71f3b..d59c08bd03 100644 --- a/plugin-server/.eslintrc.js +++ b/plugin-server/.eslintrc.js @@ -6,7 +6,7 @@ module.exports = { tsconfigRootDir: __dirname, project: ['./tsconfig.eslint.json'], }, - plugins: ['@typescript-eslint', 'simple-import-sort', 'no-only-tests'], + plugins: ['@typescript-eslint', 'no-only-tests'], extends: ['plugin:@typescript-eslint/recommended', 'plugin:eslint-comments/recommended', 'prettier'], ignorePatterns: ['bin', 'dist', 'node_modules', 'src/config/idl'], rules: { @@ -18,8 +18,6 @@ module.exports = { }, ], 'no-only-tests/no-only-tests': 'error', - 'simple-import-sort/imports': 'error', - 'simple-import-sort/exports': 'error', 'no-constant-binary-expression': 'error', 'no-unused-vars': 'off', '@typescript-eslint/no-unused-vars': [ diff --git a/plugin-server/jest.setup.js b/plugin-server/jest.setup.js index 2aca34f6a8..42d5d4c407 100644 --- a/plugin-server/jest.setup.js +++ b/plugin-server/jest.setup.js @@ -1,12 +1,12 @@ -const { readFileSync } = require('fs') -const { DateTime } = require('luxon') -const { join } = require('path') - // eslint-disable-next-line no-restricted-imports import fetch from 'node-fetch' import { logger, shutdownLogger } from './src/utils/logger' +const { readFileSync } = require('fs') +const { DateTime } = require('luxon') +const { join } = require('path') + // Setup spies on the logger for all tests to use jest.mock('node-fetch', () => ({ diff --git a/plugin-server/package.json b/plugin-server/package.json index 7cff195b6e..59d7fc1d26 100644 --- a/plugin-server/package.json +++ b/plugin-server/package.json @@ -156,7 +156,6 @@ "eslint-plugin-no-only-tests": "^3.1.0", "eslint-plugin-node": "^11.1.0", "eslint-plugin-promise": "^6.1.1", - "eslint-plugin-simple-import-sort": "^7.0.0", "jest": "^30.0.0", "node-pg-migrate": "^8.0.3", "nodemon": "^3.1.10", diff --git a/plugin-server/src/cdp/_tests/fixtures-segment.ts b/plugin-server/src/cdp/_tests/fixtures-segment.ts index e2ffc954d0..3573bf279c 100644 --- a/plugin-server/src/cdp/_tests/fixtures-segment.ts +++ b/plugin-server/src/cdp/_tests/fixtures-segment.ts @@ -1,6 +1,6 @@ import { UUIDT } from '../../utils/utils' import { CyclotronJobInvocationHogFunction, HogFunctionType } from '../types' -import { createHogFunction, SAMPLE_GLOBALS } from './fixtures' +import { SAMPLE_GLOBALS, createHogFunction } from './fixtures' export const createExampleSegmentInvocation = ( hogFunctionOverrides: Partial = {}, diff --git a/plugin-server/src/cdp/cdp-api.test.ts b/plugin-server/src/cdp/cdp-api.test.ts index 405fd3306a..e98ee4992d 100644 --- a/plugin-server/src/cdp/cdp-api.test.ts +++ b/plugin-server/src/cdp/cdp-api.test.ts @@ -1,24 +1,24 @@ -// eslint-disable-next-line simple-import-sort/imports import '../../tests/helpers/mocks/producer.mock' import { mockFetch } from '../../tests/helpers/mocks/request.mock' -import express from 'ultimate-express' +import { Server } from 'http' import supertest from 'supertest' +import express from 'ultimate-express' + +import { setupExpressApp } from '~/api/router' import { forSnapshot } from '../../tests/helpers/snapshots' import { getFirstTeam, resetTestDatabase } from '../../tests/helpers/sql' import { Hub, Team } from '../types' import { closeHub, createHub } from '../utils/db/hub' import { HOG_EXAMPLES, HOG_FILTERS_EXAMPLES, HOG_INPUTS_EXAMPLES } from './_tests/examples' -import { createHogFunction, insertHogFunction as _insertHogFunction } from './_tests/fixtures' +import { insertHogFunction as _insertHogFunction, createHogFunction } from './_tests/fixtures' +import { deleteKeysWithPrefix } from './_tests/redis' import { CdpApi } from './cdp-api' import { posthogFilterOutPlugin } from './legacy-plugins/_transformations/posthog-filter-out-plugin/template' -import { HogFunctionInvocationGlobals, HogFunctionType } from './types' -import { Server } from 'http' -import { setupExpressApp } from '~/api/router' import { createCdpRedisPool } from './redis' -import { deleteKeysWithPrefix } from './_tests/redis' import { BASE_REDIS_KEY, HogWatcherState } from './services/monitoring/hog-watcher.service' +import { HogFunctionInvocationGlobals, HogFunctionType } from './types' describe('CDP API', () => { let hub: Hub diff --git a/plugin-server/src/cdp/cdp-api.ts b/plugin-server/src/cdp/cdp-api.ts index 0d28be3153..ecdb842889 100644 --- a/plugin-server/src/cdp/cdp-api.ts +++ b/plugin-server/src/cdp/cdp-api.ts @@ -1,12 +1,13 @@ -import { PluginEvent } from '@posthog/plugin-scaffold' import { DateTime } from 'luxon' import express from 'ultimate-express' +import { PluginEvent } from '@posthog/plugin-scaffold' + import { ModifiedRequest } from '~/api/router' import { Hub, PluginServerService } from '../types' import { logger } from '../utils/logger' -import { delay, UUID, UUIDT } from '../utils/utils' +import { UUID, UUIDT, delay } from '../utils/utils' import { CdpSourceWebhooksConsumer, SourceWebhookError } from './consumers/cdp-source-webhooks.consumer' import { HogTransformerService } from './hog-transformations/hog-transformer.service' import { createCdpRedisPool } from './redis' diff --git a/plugin-server/src/cdp/cdp-e2e.test.ts b/plugin-server/src/cdp/cdp-e2e.test.ts index 0787de8d49..4e2e0e9eee 100644 --- a/plugin-server/src/cdp/cdp-e2e.test.ts +++ b/plugin-server/src/cdp/cdp-e2e.test.ts @@ -1,25 +1,26 @@ -// eslint-disable-next-line simple-import-sort/imports import { MockKafkaProducerWrapper } from '~/tests/helpers/mocks/producer.mock' import { mockFetch } from '~/tests/helpers/mocks/request.mock' +import { KafkaProducerObserver } from '~/tests/helpers/mocks/producer.spy' + +import { waitForExpect } from '~/tests/helpers/expectations' +import { resetKafka } from '~/tests/helpers/kafka' +import { forSnapshot } from '~/tests/helpers/snapshots' +import { getFirstTeam, resetTestDatabase } from '~/tests/helpers/sql' + import { CdpCyclotronWorker } from '../../src/cdp/consumers/cdp-cyclotron-worker.consumer' -import { CdpEventsConsumer } from './consumers/cdp-events.consumer' import { HogFunctionInvocationGlobals, HogFunctionType } from '../../src/cdp/types' import { KAFKA_APP_METRICS_2, KAFKA_LOG_ENTRIES } from '../../src/config/kafka-topics' import { Hub, Team } from '../../src/types' import { closeHub, createHub } from '../../src/utils/db/hub' -import { waitForExpect } from '~/tests/helpers/expectations' -import { getFirstTeam, resetTestDatabase } from '~/tests/helpers/sql' +import { logger } from '../utils/logger' import { HOG_FILTERS_EXAMPLES, HOG_INPUTS_EXAMPLES } from './_tests/examples' import { - createHogExecutionGlobals, insertHogFunction as _insertHogFunction, + createHogExecutionGlobals, insertIntegration, } from './_tests/fixtures' -import { forSnapshot } from '~/tests/helpers/snapshots' -import { KafkaProducerObserver } from '~/tests/helpers/mocks/producer.spy' -import { resetKafka } from '~/tests/helpers/kafka' -import { logger } from '../utils/logger' +import { CdpEventsConsumer } from './consumers/cdp-events.consumer' import { compileHog } from './templates/compiler' const ActualKafkaProducerWrapper = jest.requireActual('../../src/kafka/producer').KafkaProducerWrapper diff --git a/plugin-server/src/cdp/consumers/cdp-behavioural-events.consumer.test.ts b/plugin-server/src/cdp/consumers/cdp-behavioural-events.consumer.test.ts index 7ffa6862cf..dfc647a8ee 100644 --- a/plugin-server/src/cdp/consumers/cdp-behavioural-events.consumer.test.ts +++ b/plugin-server/src/cdp/consumers/cdp-behavioural-events.consumer.test.ts @@ -1,14 +1,14 @@ -// eslint-disable-next-line simple-import-sort/imports import { mockProducerObserver } from '~/tests/helpers/mocks/producer.mock' import { createHash } from 'crypto' +import { resetKafka } from '~/tests/helpers/kafka' + import { getFirstTeam, resetTestDatabase } from '../../../tests/helpers/sql' import { KAFKA_CDP_AGGREGATION_WRITER_EVENTS } from '../../config/kafka-topics' import { Hub, RawClickHouseEvent, Team } from '../../types' import { closeHub, createHub } from '../../utils/db/hub' import { CdpBehaviouralEventsConsumer, ProducedEvent } from './cdp-behavioural-events.consumer' -import { resetKafka } from '~/tests/helpers/kafka' jest.setTimeout(20_000) diff --git a/plugin-server/src/cdp/consumers/cdp-cyclotron-worker-plugins.test.ts b/plugin-server/src/cdp/consumers/cdp-cyclotron-worker-plugins.test.ts index c6c51c4fad..f40ed902ee 100644 --- a/plugin-server/src/cdp/consumers/cdp-cyclotron-worker-plugins.test.ts +++ b/plugin-server/src/cdp/consumers/cdp-cyclotron-worker-plugins.test.ts @@ -1,21 +1,24 @@ -import { RetryError } from '@posthog/plugin-scaffold' +import { mockProducerObserver } from '~/tests/helpers/mocks/producer.mock' + import { DateTime } from 'luxon' -import { mockProducerObserver } from '~/tests/helpers/mocks/producer.mock' +import { RetryError } from '@posthog/plugin-scaffold' + import { forSnapshot } from '~/tests/helpers/snapshots' import { getFirstTeam, resetTestDatabase } from '~/tests/helpers/sql' -import { fetch, FetchResponse } from '~/utils/request' +import { FetchResponse, fetch } from '~/utils/request' import { Hub, Team } from '../../types' import { closeHub, createHub } from '../../utils/db/hub' import { + insertHogFunction as _insertHogFunction, createExampleInvocation, createHogExecutionGlobals, - insertHogFunction as _insertHogFunction, } from '../_tests/fixtures' import { DESTINATION_PLUGINS_BY_ID } from '../legacy-plugins' import { HogFunctionInvocationGlobalsWithInputs, HogFunctionType } from '../types' import { CdpCyclotronWorker } from './cdp-cyclotron-worker.consumer' + jest.setTimeout(1000) /** diff --git a/plugin-server/src/cdp/consumers/cdp-cyclotron-worker.test.ts b/plugin-server/src/cdp/consumers/cdp-cyclotron-worker.test.ts index 47f4add23d..e75893c319 100644 --- a/plugin-server/src/cdp/consumers/cdp-cyclotron-worker.test.ts +++ b/plugin-server/src/cdp/consumers/cdp-cyclotron-worker.test.ts @@ -1,6 +1,7 @@ +import { mockFetch } from '~/tests/helpers/mocks/request.mock' + import { DateTime } from 'luxon' -import { mockFetch } from '~/tests/helpers/mocks/request.mock' import { getFirstTeam, resetTestDatabase } from '~/tests/helpers/sql' import { UUIDT } from '~/utils/utils' diff --git a/plugin-server/src/cdp/consumers/cdp-events-consumer.test.ts b/plugin-server/src/cdp/consumers/cdp-events-consumer.test.ts index 5ed3d025e3..4ee977a4c6 100644 --- a/plugin-server/src/cdp/consumers/cdp-events-consumer.test.ts +++ b/plugin-server/src/cdp/consumers/cdp-events-consumer.test.ts @@ -1,10 +1,7 @@ -// eslint-disable-next-line simple-import-sort/imports import { mockProducerObserver } from '../../../tests/helpers/mocks/producer.mock' -import { HogWatcherState } from '../services/monitoring/hog-watcher.service' -import { HogFunctionInvocationGlobals, HogFunctionType } from '../types' -import { Hub, Team } from '../../types' -import { closeHub, createHub } from '../../utils/db/hub' +import { HogFlow } from '~/schema/hogflow' + import { createOrganization, createTeam, @@ -13,20 +10,23 @@ import { resetTestDatabase, updateOrganizationAvailableFeatures, } from '../../../tests/helpers/sql' +import { Hub, Team } from '../../types' +import { closeHub, createHub } from '../../utils/db/hub' +import { FixtureHogFlowBuilder } from '../_tests/builders/hogflow.builder' import { HOG_EXAMPLES, HOG_FILTERS_EXAMPLES, HOG_INPUTS_EXAMPLES } from '../_tests/examples' import { - createHogExecutionGlobals, insertHogFunction as _insertHogFunction, - createKafkaMessage, + createHogExecutionGlobals, createIncomingEvent, createInternalEvent, + createKafkaMessage, } from '../_tests/fixtures' +import { insertHogFlow as _insertHogFlow } from '../_tests/fixtures-hogflows' +import { CyclotronJobQueue } from '../services/job-queue/job-queue' +import { HogWatcherState } from '../services/monitoring/hog-watcher.service' +import { HogFunctionInvocationGlobals, HogFunctionType } from '../types' import { CdpEventsConsumer, counterMissingAddon } from './cdp-events.consumer' import { CdpInternalEventsConsumer } from './cdp-internal-event.consumer' -import { CyclotronJobQueue } from '../services/job-queue/job-queue' -import { insertHogFlow as _insertHogFlow } from '../_tests/fixtures-hogflows' -import { HogFlow } from '~/schema/hogflow' -import { FixtureHogFlowBuilder } from '../_tests/builders/hogflow.builder' jest.setTimeout(1000) diff --git a/plugin-server/src/cdp/consumers/cdp-internal-events-consumer.test.ts b/plugin-server/src/cdp/consumers/cdp-internal-events-consumer.test.ts index 2e45d82ad5..936af9cc95 100644 --- a/plugin-server/src/cdp/consumers/cdp-internal-events-consumer.test.ts +++ b/plugin-server/src/cdp/consumers/cdp-internal-events-consumer.test.ts @@ -4,7 +4,7 @@ import { getFirstTeam, resetTestDatabase } from '../../../tests/helpers/sql' import { Hub, Team } from '../../types' import { closeHub, createHub } from '../../utils/db/hub' import { HOG_EXAMPLES, HOG_FILTERS_EXAMPLES, HOG_INPUTS_EXAMPLES } from '../_tests/examples' -import { createInternalEvent, createKafkaMessage, insertHogFunction as _insertHogFunction } from '../_tests/fixtures' +import { insertHogFunction as _insertHogFunction, createInternalEvent, createKafkaMessage } from '../_tests/fixtures' import { HogFunctionType } from '../types' import { CdpInternalEventsConsumer } from './cdp-internal-event.consumer' diff --git a/plugin-server/src/cdp/consumers/cdp-person-updates-consumer.test.ts b/plugin-server/src/cdp/consumers/cdp-person-updates-consumer.test.ts index 1e823a26fc..96d9d1dec0 100644 --- a/plugin-server/src/cdp/consumers/cdp-person-updates-consumer.test.ts +++ b/plugin-server/src/cdp/consumers/cdp-person-updates-consumer.test.ts @@ -7,10 +7,10 @@ import { Hub, Team } from '../../types' import { closeHub, createHub } from '../../utils/db/hub' import { HOG_EXAMPLES, HOG_FILTERS_EXAMPLES, HOG_INPUTS_EXAMPLES } from '../_tests/examples' import { + insertHogFunction as _insertHogFunction, createClickhousePerson, createHogFunction, createKafkaMessage, - insertHogFunction as _insertHogFunction, } from '../_tests/fixtures' import { HogFunctionType } from '../types' import { CdpPersonUpdatesConsumer } from './cdp-person-updates-consumer' diff --git a/plugin-server/src/cdp/consumers/cdp-source-webhooks.consumer.test.ts b/plugin-server/src/cdp/consumers/cdp-source-webhooks.consumer.test.ts index 286115789b..276d16f096 100644 --- a/plugin-server/src/cdp/consumers/cdp-source-webhooks.consumer.test.ts +++ b/plugin-server/src/cdp/consumers/cdp-source-webhooks.consumer.test.ts @@ -1,25 +1,24 @@ -// eslint-disable-next-line simple-import-sort/imports -import { mockFetch } from '~/tests/helpers/mocks/request.mock' import { mockProducerObserver } from '~/tests/helpers/mocks/producer.mock' +import { mockFetch } from '~/tests/helpers/mocks/request.mock' +import { Server } from 'http' +import { DateTime, Settings } from 'luxon' +import supertest from 'supertest' import express from 'ultimate-express' -import { closeHub, createHub } from '~/utils/db/hub' - -import { getFirstTeam, resetTestDatabase } from '~/tests/helpers/sql' -import { CdpApi } from '~/cdp/cdp-api' -import supertest from 'supertest' import { setupExpressApp } from '~/api/router' import { insertHogFunction } from '~/cdp/_tests/fixtures' -import { HogFunctionType } from '~/cdp/types' -import { Server } from 'http' +import { CdpApi } from '~/cdp/cdp-api' import { template as incomingWebhookTemplate } from '~/cdp/templates/_sources/webhook/incoming_webhook.template' +import { HogFunctionType } from '~/cdp/types' +import { forSnapshot } from '~/tests/helpers/snapshots' +import { getFirstTeam, resetTestDatabase } from '~/tests/helpers/sql' +import { Hub, Team } from '~/types' +import { closeHub, createHub } from '~/utils/db/hub' + +import { HogWatcherState } from '../services/monitoring/hog-watcher.service' import { compileHog } from '../templates/compiler' import { compileInputs } from '../templates/test/test-helpers' -import { Team, Hub } from '~/types' -import { DateTime, Settings } from 'luxon' -import { forSnapshot } from '~/tests/helpers/snapshots' -import { HogWatcherState } from '../services/monitoring/hog-watcher.service' describe('SourceWebhooksConsumer', () => { let hub: Hub diff --git a/plugin-server/src/cdp/hog-transformations/hog-transformer.service.test.ts b/plugin-server/src/cdp/hog-transformations/hog-transformer.service.test.ts index b01432364f..5a10965174 100644 --- a/plugin-server/src/cdp/hog-transformations/hog-transformer.service.test.ts +++ b/plugin-server/src/cdp/hog-transformations/hog-transformer.service.test.ts @@ -1,7 +1,9 @@ -import { PluginEvent } from '@posthog/plugin-scaffold' +import { mockProducerObserver } from '~/tests/helpers/mocks/producer.mock' + import { DateTime } from 'luxon' -import { mockProducerObserver } from '~/tests/helpers/mocks/producer.mock' +import { PluginEvent } from '@posthog/plugin-scaffold' + import { parseJSON } from '~/utils/json-parse' import { posthogFilterOutPlugin } from '../../../src/cdp/legacy-plugins/_transformations/posthog-filter-out-plugin/template' diff --git a/plugin-server/src/cdp/hog-transformations/hog-transformer.service.ts b/plugin-server/src/cdp/hog-transformations/hog-transformer.service.ts index 75511049aa..2a46751450 100644 --- a/plugin-server/src/cdp/hog-transformations/hog-transformer.service.ts +++ b/plugin-server/src/cdp/hog-transformations/hog-transformer.service.ts @@ -1,6 +1,7 @@ -import { PluginEvent } from '@posthog/plugin-scaffold' import { Counter, Histogram } from 'prom-client' +import { PluginEvent } from '@posthog/plugin-scaffold' + import { CyclotronJobInvocationResult, HogFunctionInvocationGlobals, HogFunctionType } from '../../cdp/types' import { isLegacyPluginHogFunction } from '../../cdp/utils' import { runInstrumentedFunction } from '../../main/utils' diff --git a/plugin-server/src/cdp/legacy-plugins/_destinations/intercom/index.ts b/plugin-server/src/cdp/legacy-plugins/_destinations/intercom/index.ts index b195745dd4..583217f438 100644 --- a/plugin-server/src/cdp/legacy-plugins/_destinations/intercom/index.ts +++ b/plugin-server/src/cdp/legacy-plugins/_destinations/intercom/index.ts @@ -2,6 +2,7 @@ import { ProcessedPluginEvent, RetryError } from '@posthog/plugin-scaffold' import { FetchResponse } from '../../../../utils/request' import { LegacyDestinationPluginMeta } from '../../types' + type IntercomMeta = LegacyDestinationPluginMeta & { global: { intercomUrl: string diff --git a/plugin-server/src/cdp/legacy-plugins/_destinations/pace-posthog-integration/test/test.test.ts b/plugin-server/src/cdp/legacy-plugins/_destinations/pace-posthog-integration/test/test.test.ts index 39b75d4b6c..f21e8baa1d 100644 --- a/plugin-server/src/cdp/legacy-plugins/_destinations/pace-posthog-integration/test/test.test.ts +++ b/plugin-server/src/cdp/legacy-plugins/_destinations/pace-posthog-integration/test/test.test.ts @@ -1,6 +1,6 @@ import { ProcessedPluginEvent } from '@posthog/plugin-scaffold' -import { onEvent, PaceMetaInput } from '../index' +import { PaceMetaInput, onEvent } from '../index' describe('Pace: onEvent', () => { const fetchMock = jest.fn() diff --git a/plugin-server/src/cdp/legacy-plugins/_destinations/posthog-avo/index.ts b/plugin-server/src/cdp/legacy-plugins/_destinations/posthog-avo/index.ts index 8076843c84..271d7af831 100644 --- a/plugin-server/src/cdp/legacy-plugins/_destinations/posthog-avo/index.ts +++ b/plugin-server/src/cdp/legacy-plugins/_destinations/posthog-avo/index.ts @@ -1,6 +1,7 @@ -import { ProcessedPluginEvent } from '@posthog/plugin-scaffold' import { randomUUID } from 'crypto' +import { ProcessedPluginEvent } from '@posthog/plugin-scaffold' + import { LegacyDestinationPluginMeta } from '../../types' type AvoPluginMeta = LegacyDestinationPluginMeta & { diff --git a/plugin-server/src/cdp/legacy-plugins/_destinations/posthog-braze-app/index.ts b/plugin-server/src/cdp/legacy-plugins/_destinations/posthog-braze-app/index.ts index b08100cdc3..17d276bcfa 100644 --- a/plugin-server/src/cdp/legacy-plugins/_destinations/posthog-braze-app/index.ts +++ b/plugin-server/src/cdp/legacy-plugins/_destinations/posthog-braze-app/index.ts @@ -1,6 +1,7 @@ -import { ProcessedPluginEvent, Properties, RetryError } from '@posthog/plugin-scaffold' import crypto from 'crypto' +import { ProcessedPluginEvent, Properties, RetryError } from '@posthog/plugin-scaffold' + import { FetchResponse } from '../../../../utils/request' import { LegacyDestinationPluginMeta } from '../../types' diff --git a/plugin-server/src/cdp/legacy-plugins/_destinations/posthog-engage-so/index.test.ts b/plugin-server/src/cdp/legacy-plugins/_destinations/posthog-engage-so/index.test.ts index de7e338211..f91153cf7a 100644 --- a/plugin-server/src/cdp/legacy-plugins/_destinations/posthog-engage-so/index.test.ts +++ b/plugin-server/src/cdp/legacy-plugins/_destinations/posthog-engage-so/index.test.ts @@ -1,6 +1,7 @@ import { getMeta, resetMeta } from '@posthog/plugin-scaffold/test/utils' import { EngagePluginEvent, onEvent } from './index' + describe('sendgrid', () => { const mockFetch = jest.fn() diff --git a/plugin-server/src/cdp/legacy-plugins/_destinations/posthog-gcs/index.ts b/plugin-server/src/cdp/legacy-plugins/_destinations/posthog-gcs/index.ts index ab39bb9d30..f20fe9bc8c 100644 --- a/plugin-server/src/cdp/legacy-plugins/_destinations/posthog-gcs/index.ts +++ b/plugin-server/src/cdp/legacy-plugins/_destinations/posthog-gcs/index.ts @@ -1,8 +1,9 @@ import { Bucket, Storage } from '@google-cloud/storage' -import { ProcessedPluginEvent, RetryError } from '@posthog/plugin-scaffold' import { randomBytes } from 'crypto' import { PassThrough } from 'stream' +import { ProcessedPluginEvent, RetryError } from '@posthog/plugin-scaffold' + import { parseJSON } from '../../../../utils/json-parse' import { LegacyDestinationPluginMeta } from '../../types' diff --git a/plugin-server/src/cdp/legacy-plugins/_destinations/posthog-patterns-app/index.test.ts b/plugin-server/src/cdp/legacy-plugins/_destinations/posthog-patterns-app/index.test.ts index 661a81e95b..7b7a04c0e8 100644 --- a/plugin-server/src/cdp/legacy-plugins/_destinations/posthog-patterns-app/index.test.ts +++ b/plugin-server/src/cdp/legacy-plugins/_destinations/posthog-patterns-app/index.test.ts @@ -1,6 +1,6 @@ import { createEvent } from '@posthog/plugin-scaffold/test/utils' -import { onEvent, PatternsMeta, setupPlugin } from './index' +import { PatternsMeta, onEvent, setupPlugin } from './index' const testWebhookUrl = 'https://api-staging.patterns.app/api/app/webhooks/wh1234' diff --git a/plugin-server/src/cdp/legacy-plugins/_destinations/pubsub/index.ts b/plugin-server/src/cdp/legacy-plugins/_destinations/pubsub/index.ts index 54ff097a18..f4ae1e20ec 100644 --- a/plugin-server/src/cdp/legacy-plugins/_destinations/pubsub/index.ts +++ b/plugin-server/src/cdp/legacy-plugins/_destinations/pubsub/index.ts @@ -1,4 +1,5 @@ import { PubSub, Topic } from '@google-cloud/pubsub' + import { ProcessedPluginEvent } from '@posthog/plugin-scaffold' import { RetryError } from '@posthog/plugin-scaffold' diff --git a/plugin-server/src/cdp/legacy-plugins/_destinations/salesforce/index.ts b/plugin-server/src/cdp/legacy-plugins/_destinations/salesforce/index.ts index d04750728e..197d1a4fcd 100644 --- a/plugin-server/src/cdp/legacy-plugins/_destinations/salesforce/index.ts +++ b/plugin-server/src/cdp/legacy-plugins/_destinations/salesforce/index.ts @@ -1,6 +1,7 @@ +import { URL } from 'url' + import { ProcessedPluginEvent } from '@posthog/plugin-scaffold' import { Properties, RetryError } from '@posthog/plugin-scaffold' -import { URL } from 'url' import { parseJSON } from '../../../../utils/json-parse' import type { FetchResponse } from '../../../../utils/request' diff --git a/plugin-server/src/cdp/legacy-plugins/_destinations/salesforce/tests/eventSinkMapping.test.ts b/plugin-server/src/cdp/legacy-plugins/_destinations/salesforce/tests/eventSinkMapping.test.ts index 50125baef9..303749dee4 100644 --- a/plugin-server/src/cdp/legacy-plugins/_destinations/salesforce/tests/eventSinkMapping.test.ts +++ b/plugin-server/src/cdp/legacy-plugins/_destinations/salesforce/tests/eventSinkMapping.test.ts @@ -3,9 +3,9 @@ import { ProcessedPluginEvent } from '@posthog/plugin-scaffold' import { EventSink, EventToSinkMapping, - parseEventSinkConfig, SalesforceMeta, SalesforcePluginConfig, + parseEventSinkConfig, sendEventToSalesforce, verifyConfig, } from '../index' diff --git a/plugin-server/src/cdp/legacy-plugins/_destinations/sendgrid/index.test.ts b/plugin-server/src/cdp/legacy-plugins/_destinations/sendgrid/index.test.ts index f086d9b65d..104aeb233e 100644 --- a/plugin-server/src/cdp/legacy-plugins/_destinations/sendgrid/index.test.ts +++ b/plugin-server/src/cdp/legacy-plugins/_destinations/sendgrid/index.test.ts @@ -1,7 +1,7 @@ -const { getMeta, resetMeta } = require('@posthog/plugin-scaffold/test/utils.js') - import { onEvent, setupPlugin } from './index' +const { getMeta, resetMeta } = require('@posthog/plugin-scaffold/test/utils.js') + describe('sendgrid', () => { const mockFetch = jest.fn() diff --git a/plugin-server/src/cdp/legacy-plugins/_transformations/Plugin-Stonly-Clean-Campaign-Name/template.ts b/plugin-server/src/cdp/legacy-plugins/_transformations/Plugin-Stonly-Clean-Campaign-Name/template.ts index d134f05390..8259d6941e 100644 --- a/plugin-server/src/cdp/legacy-plugins/_transformations/Plugin-Stonly-Clean-Campaign-Name/template.ts +++ b/plugin-server/src/cdp/legacy-plugins/_transformations/Plugin-Stonly-Clean-Campaign-Name/template.ts @@ -1,6 +1,7 @@ -import { LegacyTransformationPlugin } from '../../types' import { processEvent } from '.' +import { LegacyTransformationPlugin } from '../../types' + // NOTE: This is a deprecated plugin and should never be shown to new users export const pluginStonlyCleanCampaignName: LegacyTransformationPlugin = { processEvent, diff --git a/plugin-server/src/cdp/legacy-plugins/_transformations/currency-normalization-plugin/template.ts b/plugin-server/src/cdp/legacy-plugins/_transformations/currency-normalization-plugin/template.ts index c656c4a22a..291a31609f 100644 --- a/plugin-server/src/cdp/legacy-plugins/_transformations/currency-normalization-plugin/template.ts +++ b/plugin-server/src/cdp/legacy-plugins/_transformations/currency-normalization-plugin/template.ts @@ -1,6 +1,7 @@ -import { LegacyTransformationPlugin } from '../../types' import { processEvent } from '.' +import { LegacyTransformationPlugin } from '../../types' + export const currencyNormalizationPlugin: LegacyTransformationPlugin = { processEvent, template: { diff --git a/plugin-server/src/cdp/legacy-plugins/_transformations/downsampling-plugin/index.test.ts b/plugin-server/src/cdp/legacy-plugins/_transformations/downsampling-plugin/index.test.ts index 152ff0b86c..e5cea97529 100644 --- a/plugin-server/src/cdp/legacy-plugins/_transformations/downsampling-plugin/index.test.ts +++ b/plugin-server/src/cdp/legacy-plugins/_transformations/downsampling-plugin/index.test.ts @@ -1,6 +1,7 @@ -import { PluginEvent } from '@posthog/plugin-scaffold' import { randomBytes } from 'crypto' +import { PluginEvent } from '@posthog/plugin-scaffold' + import { LegacyTransformationPluginMeta } from '../../types' import { processEvent, setupPlugin } from './index' diff --git a/plugin-server/src/cdp/legacy-plugins/_transformations/downsampling-plugin/index.ts b/plugin-server/src/cdp/legacy-plugins/_transformations/downsampling-plugin/index.ts index f26c5cc203..998d030837 100644 --- a/plugin-server/src/cdp/legacy-plugins/_transformations/downsampling-plugin/index.ts +++ b/plugin-server/src/cdp/legacy-plugins/_transformations/downsampling-plugin/index.ts @@ -1,6 +1,7 @@ -import { PluginEvent } from '@posthog/plugin-scaffold' import { createHash } from 'crypto' +import { PluginEvent } from '@posthog/plugin-scaffold' + import { LegacyTransformationPluginMeta } from '../../types' export function setupPlugin({ config, global }: LegacyTransformationPluginMeta) { diff --git a/plugin-server/src/cdp/legacy-plugins/_transformations/downsampling-plugin/template.ts b/plugin-server/src/cdp/legacy-plugins/_transformations/downsampling-plugin/template.ts index 724948055e..b5e1b41d06 100644 --- a/plugin-server/src/cdp/legacy-plugins/_transformations/downsampling-plugin/template.ts +++ b/plugin-server/src/cdp/legacy-plugins/_transformations/downsampling-plugin/template.ts @@ -1,6 +1,7 @@ -import { LegacyTransformationPlugin } from '../../types' import { processEvent, setupPlugin } from '.' +import { LegacyTransformationPlugin } from '../../types' + export const downsamplingPlugin: LegacyTransformationPlugin = { processEvent, setupPlugin: setupPlugin as any, diff --git a/plugin-server/src/cdp/legacy-plugins/_transformations/drop-events-on-property-plugin/index.ts b/plugin-server/src/cdp/legacy-plugins/_transformations/drop-events-on-property-plugin/index.ts index 7fc9b55aad..8f216521a9 100644 --- a/plugin-server/src/cdp/legacy-plugins/_transformations/drop-events-on-property-plugin/index.ts +++ b/plugin-server/src/cdp/legacy-plugins/_transformations/drop-events-on-property-plugin/index.ts @@ -1,5 +1,4 @@ // Learn more about plugins at: https://posthog.com/docs/plugins/build/overview - import { PluginEvent } from '@posthog/plugin-scaffold' import { LegacyTransformationPluginMeta } from '../../types' diff --git a/plugin-server/src/cdp/legacy-plugins/_transformations/drop-events-on-property-plugin/template.ts b/plugin-server/src/cdp/legacy-plugins/_transformations/drop-events-on-property-plugin/template.ts index 05acdd2a10..b25a21168a 100644 --- a/plugin-server/src/cdp/legacy-plugins/_transformations/drop-events-on-property-plugin/template.ts +++ b/plugin-server/src/cdp/legacy-plugins/_transformations/drop-events-on-property-plugin/template.ts @@ -1,6 +1,7 @@ -import { LegacyTransformationPlugin } from '../../types' import { processEvent } from '.' +import { LegacyTransformationPlugin } from '../../types' + // NOTE: This is a deprecated plugin and should never be shown to new users export const dropEventsOnPropertyPlugin: LegacyTransformationPlugin = { processEvent, diff --git a/plugin-server/src/cdp/legacy-plugins/_transformations/flatten-properties-plugin/index.ts b/plugin-server/src/cdp/legacy-plugins/_transformations/flatten-properties-plugin/index.ts index 5945a22bd2..5892dd490a 100644 --- a/plugin-server/src/cdp/legacy-plugins/_transformations/flatten-properties-plugin/index.ts +++ b/plugin-server/src/cdp/legacy-plugins/_transformations/flatten-properties-plugin/index.ts @@ -1,6 +1,7 @@ import { PluginEvent } from '@posthog/plugin-scaffold' import { LegacyTransformationPluginMeta } from '../../types' + /** * Some events will always create very large numbers of flattened properties * This is undesirable since a large enough number of properties for a particular team can slow down the property filter in the UI diff --git a/plugin-server/src/cdp/legacy-plugins/_transformations/flatten-properties-plugin/template.ts b/plugin-server/src/cdp/legacy-plugins/_transformations/flatten-properties-plugin/template.ts index f6d941ee1a..c4e5b8307c 100644 --- a/plugin-server/src/cdp/legacy-plugins/_transformations/flatten-properties-plugin/template.ts +++ b/plugin-server/src/cdp/legacy-plugins/_transformations/flatten-properties-plugin/template.ts @@ -1,6 +1,7 @@ -import { LegacyTransformationPlugin } from '../../types' import { processEvent } from '.' +import { LegacyTransformationPlugin } from '../../types' + // NOTE: This is a deprecated plugin and should never be shown to new users export const flattenPropertiesPlugin: LegacyTransformationPlugin = { diff --git a/plugin-server/src/cdp/legacy-plugins/_transformations/language-url-splitter-app/template.ts b/plugin-server/src/cdp/legacy-plugins/_transformations/language-url-splitter-app/template.ts index ec43f9131b..de0b98d694 100644 --- a/plugin-server/src/cdp/legacy-plugins/_transformations/language-url-splitter-app/template.ts +++ b/plugin-server/src/cdp/legacy-plugins/_transformations/language-url-splitter-app/template.ts @@ -1,6 +1,7 @@ -import { LegacyTransformationPlugin } from '../../types' import { processEvent } from '.' +import { LegacyTransformationPlugin } from '../../types' + export const languageUrlSplitterApp: LegacyTransformationPlugin = { processEvent, template: { diff --git a/plugin-server/src/cdp/legacy-plugins/_transformations/ph-shotgun-processevent-app/template.ts b/plugin-server/src/cdp/legacy-plugins/_transformations/ph-shotgun-processevent-app/template.ts index 9f02b2f15c..776f7a087e 100644 --- a/plugin-server/src/cdp/legacy-plugins/_transformations/ph-shotgun-processevent-app/template.ts +++ b/plugin-server/src/cdp/legacy-plugins/_transformations/ph-shotgun-processevent-app/template.ts @@ -1,6 +1,7 @@ -import { LegacyTransformationPlugin } from '../../types' import { processEvent } from '.' +import { LegacyTransformationPlugin } from '../../types' + export const phShotgunProcessEventApp: LegacyTransformationPlugin = { processEvent, template: { diff --git a/plugin-server/src/cdp/legacy-plugins/_transformations/plugin-advanced-geoip/template.ts b/plugin-server/src/cdp/legacy-plugins/_transformations/plugin-advanced-geoip/template.ts index a9a8a55f4f..89ba626511 100644 --- a/plugin-server/src/cdp/legacy-plugins/_transformations/plugin-advanced-geoip/template.ts +++ b/plugin-server/src/cdp/legacy-plugins/_transformations/plugin-advanced-geoip/template.ts @@ -1,6 +1,7 @@ -import { LegacyTransformationPlugin } from '../../types' import { processEvent } from '.' +import { LegacyTransformationPlugin } from '../../types' + // NOTE: This is a deprecated plugin and should never be shown to new users export const pluginAdvancedGeoip: LegacyTransformationPlugin = { processEvent, diff --git a/plugin-server/src/cdp/legacy-plugins/_transformations/plugin-stonly-UTM-Extractor/index.ts b/plugin-server/src/cdp/legacy-plugins/_transformations/plugin-stonly-UTM-Extractor/index.ts index 9b4829105c..62dbcb7af4 100644 --- a/plugin-server/src/cdp/legacy-plugins/_transformations/plugin-stonly-UTM-Extractor/index.ts +++ b/plugin-server/src/cdp/legacy-plugins/_transformations/plugin-stonly-UTM-Extractor/index.ts @@ -1,6 +1,7 @@ -import { PluginEvent } from '@posthog/plugin-scaffold' import { URL } from 'url' +import { PluginEvent } from '@posthog/plugin-scaffold' + import { LegacyTransformationPluginMeta } from '../../types' // Processes each event, optionally transforming it diff --git a/plugin-server/src/cdp/legacy-plugins/_transformations/plugin-stonly-UTM-Extractor/template.ts b/plugin-server/src/cdp/legacy-plugins/_transformations/plugin-stonly-UTM-Extractor/template.ts index 1ffc91eb2b..6bba187683 100644 --- a/plugin-server/src/cdp/legacy-plugins/_transformations/plugin-stonly-UTM-Extractor/template.ts +++ b/plugin-server/src/cdp/legacy-plugins/_transformations/plugin-stonly-UTM-Extractor/template.ts @@ -1,6 +1,7 @@ -import { LegacyTransformationPlugin } from '../../types' import { processEvent } from '.' +import { LegacyTransformationPlugin } from '../../types' + // NOTE: This is a deprecated plugin and should never be shown to new users export const pluginStonlyUtmExtractor: LegacyTransformationPlugin = { processEvent, diff --git a/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-app-unduplicator/index.ts b/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-app-unduplicator/index.ts index bf86e62b57..d6bcd81ebc 100644 --- a/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-app-unduplicator/index.ts +++ b/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-app-unduplicator/index.ts @@ -1,6 +1,7 @@ -import { PluginEvent } from '@posthog/plugin-scaffold' import { createHash } from 'crypto' +import { PluginEvent } from '@posthog/plugin-scaffold' + import { LegacyTransformationPluginMeta } from '../../types' // From UUID Namespace RFC (https://datatracker.ietf.org/doc/html/rfc4122) diff --git a/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-app-unduplicator/template.ts b/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-app-unduplicator/template.ts index 3134a091c3..e5cc9be1f9 100644 --- a/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-app-unduplicator/template.ts +++ b/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-app-unduplicator/template.ts @@ -1,6 +1,7 @@ -import { LegacyTransformationPlugin } from '../../types' import { processEvent } from '.' +import { LegacyTransformationPlugin } from '../../types' + // NOTE: This is a deprecated plugin and should never be shown to new users export const posthogAppUnduplicator: LegacyTransformationPlugin = { processEvent, diff --git a/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-app-url-parameters-to-event-properties/index.ts b/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-app-url-parameters-to-event-properties/index.ts index d64fd943e8..19bb927938 100644 --- a/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-app-url-parameters-to-event-properties/index.ts +++ b/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-app-url-parameters-to-event-properties/index.ts @@ -1,6 +1,7 @@ -import { PluginEvent } from '@posthog/plugin-scaffold' import { URLSearchParams } from 'url' +import { PluginEvent } from '@posthog/plugin-scaffold' + import { LegacyTransformationPluginMeta } from '../../types' export type PluginConfig = { diff --git a/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-app-url-parameters-to-event-properties/template.ts b/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-app-url-parameters-to-event-properties/template.ts index 1a25fee0f7..4db9f979cc 100644 --- a/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-app-url-parameters-to-event-properties/template.ts +++ b/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-app-url-parameters-to-event-properties/template.ts @@ -1,6 +1,7 @@ -import { LegacyTransformationPlugin } from '../../types' import { processEvent, setupPlugin } from '.' +import { LegacyTransformationPlugin } from '../../types' + export const posthogAppUrlParametersToEventProperties: LegacyTransformationPlugin = { processEvent, setupPlugin: setupPlugin as any, diff --git a/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-filter-out-plugin/index.test.ts b/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-filter-out-plugin/index.test.ts index 6c24f9e74e..5e680ffd70 100644 --- a/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-filter-out-plugin/index.test.ts +++ b/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-filter-out-plugin/index.test.ts @@ -1,7 +1,8 @@ +import { Filter, processEvent, setupPlugin } from '.' + import { PluginEvent } from '@posthog/plugin-scaffold' import { LegacyTransformationPluginMeta } from '../../types' -import { Filter, processEvent, setupPlugin } from '.' const filters: Filter[] = [ { diff --git a/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-filter-out-plugin/template.ts b/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-filter-out-plugin/template.ts index 22d8d64b69..8824749a60 100644 --- a/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-filter-out-plugin/template.ts +++ b/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-filter-out-plugin/template.ts @@ -1,6 +1,7 @@ -import { LegacyTransformationPlugin } from '../../types' import { processEvent, setupPlugin } from '.' +import { LegacyTransformationPlugin } from '../../types' + export const posthogFilterOutPlugin: LegacyTransformationPlugin = { setupPlugin: setupPlugin as any, processEvent, diff --git a/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-plugin-geoip/index.test.ts b/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-plugin-geoip/index.test.ts index 2e99ef9c93..b27fa0ddfb 100644 --- a/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-plugin-geoip/index.test.ts +++ b/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-plugin-geoip/index.test.ts @@ -1,8 +1,9 @@ import { City } from '@maxmind/geoip2-node' + import { createPageview, resetMeta } from '@posthog/plugin-scaffold/test/utils' import { defaultConfig } from '../../../../config/config' -import { GeoIp, GeoIPService } from '../../../../utils/geoip' +import { GeoIPService, GeoIp } from '../../../../utils/geoip' import { parseJSON } from '../../../../utils/json-parse' import { LegacyTransformationPluginMeta } from '../../types' import { processEvent } from './index' diff --git a/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-plugin-geoip/template.ts b/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-plugin-geoip/template.ts index d7633ba336..9bedd0f2e0 100644 --- a/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-plugin-geoip/template.ts +++ b/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-plugin-geoip/template.ts @@ -1,6 +1,7 @@ -import { LegacyTransformationPlugin } from '../../types' import { processEvent } from '.' +import { LegacyTransformationPlugin } from '../../types' + // NOTE: This is a deprecated plugin and should never be shown to new users export const posthogPluginGeoip: LegacyTransformationPlugin = { processEvent, diff --git a/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-plugin-snowplow-referer-parser/template.ts b/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-plugin-snowplow-referer-parser/template.ts index a5b4c09476..4d26e0bd1f 100644 --- a/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-plugin-snowplow-referer-parser/template.ts +++ b/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-plugin-snowplow-referer-parser/template.ts @@ -1,6 +1,7 @@ -import { LegacyTransformationPlugin } from '../../types' import { processEvent } from '.' +import { LegacyTransformationPlugin } from '../../types' + // NOTE: This is a deprecated plugin and should never be shown to new users export const posthogPluginSnowplowRefererParser: LegacyTransformationPlugin = { processEvent, diff --git a/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-url-normalizer-plugin/template.ts b/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-url-normalizer-plugin/template.ts index 277f9f6e45..516b415375 100644 --- a/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-url-normalizer-plugin/template.ts +++ b/plugin-server/src/cdp/legacy-plugins/_transformations/posthog-url-normalizer-plugin/template.ts @@ -1,6 +1,7 @@ -import { LegacyTransformationPlugin } from '../../types' import { processEvent } from '.' +import { LegacyTransformationPlugin } from '../../types' + export const posthogUrlNormalizerPlugin: LegacyTransformationPlugin = { processEvent, template: { diff --git a/plugin-server/src/cdp/legacy-plugins/_transformations/property-filter-plugin/template.ts b/plugin-server/src/cdp/legacy-plugins/_transformations/property-filter-plugin/template.ts index 4f0a63c8e5..8b636fc51e 100644 --- a/plugin-server/src/cdp/legacy-plugins/_transformations/property-filter-plugin/template.ts +++ b/plugin-server/src/cdp/legacy-plugins/_transformations/property-filter-plugin/template.ts @@ -1,6 +1,7 @@ -import { LegacyTransformationPlugin } from '../../types' import { processEvent, setupPlugin } from '.' +import { LegacyTransformationPlugin } from '../../types' + export const propertyFilterPlugin: LegacyTransformationPlugin = { processEvent, setupPlugin, diff --git a/plugin-server/src/cdp/legacy-plugins/_transformations/semver-flattener-plugin/template.ts b/plugin-server/src/cdp/legacy-plugins/_transformations/semver-flattener-plugin/template.ts index ae7053d7f8..832892d9b1 100644 --- a/plugin-server/src/cdp/legacy-plugins/_transformations/semver-flattener-plugin/template.ts +++ b/plugin-server/src/cdp/legacy-plugins/_transformations/semver-flattener-plugin/template.ts @@ -1,6 +1,7 @@ -import { LegacyTransformationPlugin } from '../../types' import { processEvent } from '.' +import { LegacyTransformationPlugin } from '../../types' + export const semverFlattenerPlugin: LegacyTransformationPlugin = { processEvent, template: { diff --git a/plugin-server/src/cdp/legacy-plugins/_transformations/taxonomy-plugin/template.ts b/plugin-server/src/cdp/legacy-plugins/_transformations/taxonomy-plugin/template.ts index 3c9aa4b170..8f3b29c091 100644 --- a/plugin-server/src/cdp/legacy-plugins/_transformations/taxonomy-plugin/template.ts +++ b/plugin-server/src/cdp/legacy-plugins/_transformations/taxonomy-plugin/template.ts @@ -1,6 +1,7 @@ -import { LegacyTransformationPlugin } from '../../types' import { processEvent } from '.' +import { LegacyTransformationPlugin } from '../../types' + export const taxonomyPlugin: LegacyTransformationPlugin = { processEvent, template: { diff --git a/plugin-server/src/cdp/legacy-plugins/_transformations/timestamp-parser-plugin/index.test.ts b/plugin-server/src/cdp/legacy-plugins/_transformations/timestamp-parser-plugin/index.test.ts index cc1b9957d3..b4f6100822 100644 --- a/plugin-server/src/cdp/legacy-plugins/_transformations/timestamp-parser-plugin/index.test.ts +++ b/plugin-server/src/cdp/legacy-plugins/_transformations/timestamp-parser-plugin/index.test.ts @@ -1,6 +1,7 @@ -import { PluginEvent } from '@posthog/plugin-scaffold' import { DateTime } from 'luxon' +import { PluginEvent } from '@posthog/plugin-scaffold' + import { processEvent } from './index' const createEvent = (event: Partial): PluginEvent => diff --git a/plugin-server/src/cdp/legacy-plugins/_transformations/timestamp-parser-plugin/index.ts b/plugin-server/src/cdp/legacy-plugins/_transformations/timestamp-parser-plugin/index.ts index 3f6b89297a..9d3faa0944 100644 --- a/plugin-server/src/cdp/legacy-plugins/_transformations/timestamp-parser-plugin/index.ts +++ b/plugin-server/src/cdp/legacy-plugins/_transformations/timestamp-parser-plugin/index.ts @@ -1,6 +1,7 @@ -import { PluginEvent } from '@posthog/plugin-scaffold' import { DateTime } from 'luxon' +import { PluginEvent } from '@posthog/plugin-scaffold' + import { LegacyTransformationPluginMeta } from '../../types' export function processEvent(event: PluginEvent, _meta: LegacyTransformationPluginMeta) { diff --git a/plugin-server/src/cdp/legacy-plugins/_transformations/timestamp-parser-plugin/template.ts b/plugin-server/src/cdp/legacy-plugins/_transformations/timestamp-parser-plugin/template.ts index 6e571664c4..95504a1db5 100644 --- a/plugin-server/src/cdp/legacy-plugins/_transformations/timestamp-parser-plugin/template.ts +++ b/plugin-server/src/cdp/legacy-plugins/_transformations/timestamp-parser-plugin/template.ts @@ -1,6 +1,7 @@ -import { LegacyTransformationPlugin } from '../../types' import { processEvent } from '.' +import { LegacyTransformationPlugin } from '../../types' + export const timestampParserPlugin: LegacyTransformationPlugin = { processEvent, template: { diff --git a/plugin-server/src/cdp/legacy-plugins/_transformations/url-parser/index.ts b/plugin-server/src/cdp/legacy-plugins/_transformations/url-parser/index.ts index ffe6f763d9..c822ed88ab 100644 --- a/plugin-server/src/cdp/legacy-plugins/_transformations/url-parser/index.ts +++ b/plugin-server/src/cdp/legacy-plugins/_transformations/url-parser/index.ts @@ -1,6 +1,7 @@ -import { PluginEvent } from '@posthog/plugin-scaffold' import { URLSearchParams } from 'url' +import { PluginEvent } from '@posthog/plugin-scaffold' + import { LegacyTransformationPluginMeta } from '../../types' // Processes each event, optionally transforming it diff --git a/plugin-server/src/cdp/legacy-plugins/_transformations/url-parser/template.ts b/plugin-server/src/cdp/legacy-plugins/_transformations/url-parser/template.ts index 57f1a4e86d..d2336c9df2 100644 --- a/plugin-server/src/cdp/legacy-plugins/_transformations/url-parser/template.ts +++ b/plugin-server/src/cdp/legacy-plugins/_transformations/url-parser/template.ts @@ -1,6 +1,7 @@ -import { LegacyTransformationPlugin } from '../../types' import { processEvent } from '.' +import { LegacyTransformationPlugin } from '../../types' + export const urlParserPlugin: LegacyTransformationPlugin = { processEvent, template: { diff --git a/plugin-server/src/cdp/legacy-plugins/_transformations/user-agent-plugin/index.test.ts b/plugin-server/src/cdp/legacy-plugins/_transformations/user-agent-plugin/index.test.ts index 92359d56f3..1036a98240 100644 --- a/plugin-server/src/cdp/legacy-plugins/_transformations/user-agent-plugin/index.test.ts +++ b/plugin-server/src/cdp/legacy-plugins/_transformations/user-agent-plugin/index.test.ts @@ -1,6 +1,6 @@ import { PluginEvent } from '@posthog/plugin-scaffold' -import { processEvent, UserAgentMeta } from './index' +import { UserAgentMeta, processEvent } from './index' function makeMeta(options?: { enable?: boolean diff --git a/plugin-server/src/cdp/legacy-plugins/_transformations/user-agent-plugin/index.ts b/plugin-server/src/cdp/legacy-plugins/_transformations/user-agent-plugin/index.ts index c5e4dbe50f..b1fdee6545 100644 --- a/plugin-server/src/cdp/legacy-plugins/_transformations/user-agent-plugin/index.ts +++ b/plugin-server/src/cdp/legacy-plugins/_transformations/user-agent-plugin/index.ts @@ -1,6 +1,7 @@ -import { PluginEvent } from '@posthog/plugin-scaffold' import { detect } from 'detect-browser' +import { PluginEvent } from '@posthog/plugin-scaffold' + import { LegacyTransformationPluginMeta } from '../../types' export type UserAgentMeta = LegacyTransformationPluginMeta & { diff --git a/plugin-server/src/cdp/legacy-plugins/_transformations/user-agent-plugin/template.ts b/plugin-server/src/cdp/legacy-plugins/_transformations/user-agent-plugin/template.ts index bfc9b5308e..a3994c84b2 100644 --- a/plugin-server/src/cdp/legacy-plugins/_transformations/user-agent-plugin/template.ts +++ b/plugin-server/src/cdp/legacy-plugins/_transformations/user-agent-plugin/template.ts @@ -1,6 +1,7 @@ -import { LegacyTransformationPlugin } from '../../types' import { processEvent, setupPlugin } from '.' +import { LegacyTransformationPlugin } from '../../types' + export const userAgentPlugin: LegacyTransformationPlugin = { processEvent, setupPlugin: setupPlugin as any, diff --git a/plugin-server/src/cdp/legacy-plugins/index.ts b/plugin-server/src/cdp/legacy-plugins/index.ts index 11c5ba18aa..b493b90cfe 100644 --- a/plugin-server/src/cdp/legacy-plugins/index.ts +++ b/plugin-server/src/cdp/legacy-plugins/index.ts @@ -13,6 +13,7 @@ import { pubsubPlugin } from './_destinations/pubsub/template' import { rudderstackPlugin } from './_destinations/rudderstack-posthog/template' import { salesforcePlugin } from './_destinations/salesforce/template' import { sendgridPlugin } from './_destinations/sendgrid/template' +import { pluginStonlyCleanCampaignName } from './_transformations/Plugin-Stonly-Clean-Campaign-Name/template' import { currencyNormalizationPlugin } from './_transformations/currency-normalization-plugin/template' import { downsamplingPlugin } from './_transformations/downsampling-plugin/template' import { dropEventsOnPropertyPlugin } from './_transformations/drop-events-on-property-plugin/template' @@ -22,7 +23,6 @@ import { languageUrlSplitterApp } from './_transformations/language-url-splitter import { phShotgunProcessEventApp } from './_transformations/ph-shotgun-processevent-app/template' import { pluginAdvancedGeoip } from './_transformations/plugin-advanced-geoip/template' import { pluginNetdataEventProcessing } from './_transformations/plugin-netdata-event-processing/template' -import { pluginStonlyCleanCampaignName } from './_transformations/Plugin-Stonly-Clean-Campaign-Name/template' import { pluginStonlyUtmExtractor } from './_transformations/plugin-stonly-UTM-Extractor/template' import { posthogAnonymization } from './_transformations/posthog-anonymization/template' import { posthogAppUnduplicator } from './_transformations/posthog-app-unduplicator/template' diff --git a/plugin-server/src/cdp/legacy-plugins/types.ts b/plugin-server/src/cdp/legacy-plugins/types.ts index 31b617f036..b13af5c61f 100644 --- a/plugin-server/src/cdp/legacy-plugins/types.ts +++ b/plugin-server/src/cdp/legacy-plugins/types.ts @@ -1,6 +1,6 @@ import { PluginEvent, ProcessedPluginEvent, StorageExtension } from '@posthog/plugin-scaffold' -import { fetch, FetchResponse } from '../../utils/request' +import { FetchResponse, fetch } from '../../utils/request' import { HogFunctionTemplate } from '../types' export type LegacyPluginLogger = { diff --git a/plugin-server/src/cdp/redis.ts b/plugin-server/src/cdp/redis.ts index 87bd8ca75a..d62e091986 100644 --- a/plugin-server/src/cdp/redis.ts +++ b/plugin-server/src/cdp/redis.ts @@ -1,5 +1,4 @@ // NOTE: PostIngestionEvent is our context event - it should never be sent directly to an output, but rather transformed into a lightweight schema - import { createPool } from 'generic-pool' import { Pipeline, Redis } from 'ioredis' diff --git a/plugin-server/src/cdp/services/hog-executor.service.test.ts b/plugin-server/src/cdp/services/hog-executor.service.test.ts index 5bc034183d..1c08791f3d 100644 --- a/plugin-server/src/cdp/services/hog-executor.service.test.ts +++ b/plugin-server/src/cdp/services/hog-executor.service.test.ts @@ -1,13 +1,4 @@ -jest.mock('~/utils/request', () => { - const original = jest.requireActual('~/utils/request') - return { - ...original, - fetch: jest.fn().mockImplementation((url, options) => { - return original.fetch(url, options) - }), - } -}) - +// sort-imports-ignore import { createServer } from 'http' import { DateTime } from 'luxon' import { AddressInfo } from 'net' @@ -15,7 +6,6 @@ import { AddressInfo } from 'net' import { CyclotronInvocationQueueParametersFetchType } from '~/schema/cyclotron' import { truth } from '~/tests/helpers/truth' import { logger } from '~/utils/logger' -import { fetch } from '~/utils/request' import { HogExecutorService } from '../../../src/cdp/services/hog-executor.service' import { CyclotronJobInvocationHogFunction, HogFunctionType } from '../../../src/cdp/types' @@ -27,6 +17,19 @@ import { HOG_EXAMPLES, HOG_FILTERS_EXAMPLES, HOG_INPUTS_EXAMPLES } from '../_tes import { createExampleInvocation, createHogExecutionGlobals, createHogFunction } from '../_tests/fixtures' import { EXTEND_OBJECT_KEY } from './hog-executor.service' +// Mock before importing fetch +jest.mock('~/utils/request', () => { + const original = jest.requireActual('~/utils/request') + return { + ...original, + fetch: jest.fn().mockImplementation((url, options) => { + return original.fetch(url, options) + }), + } +}) + +import { fetch } from '~/utils/request' + const cleanLogs = (logs: string[]): string[] => { // Replaces the function time with a fixed value to simplify testing return logs.map((log) => { diff --git a/plugin-server/src/cdp/services/hog-executor.service.ts b/plugin-server/src/cdp/services/hog-executor.service.ts index a3283672f6..60b14b0546 100644 --- a/plugin-server/src/cdp/services/hog-executor.service.ts +++ b/plugin-server/src/cdp/services/hog-executor.service.ts @@ -1,13 +1,14 @@ -import { convertHogToJS, ExecResult } from '@posthog/hogvm' import { pickBy } from 'lodash' import { DateTime } from 'luxon' import { Counter, Histogram } from 'prom-client' +import { ExecResult, convertHogToJS } from '@posthog/hogvm' + import { CyclotronInvocationQueueParametersEmailSchema, CyclotronInvocationQueueParametersFetchSchema, } from '~/schema/cyclotron' -import { fetch, FetchOptions, FetchResponse, InvalidRequestError, SecureRequestError } from '~/utils/request' +import { FetchOptions, FetchResponse, InvalidRequestError, SecureRequestError, fetch } from '~/utils/request' import { tryCatch } from '~/utils/try-catch' import { buildIntegerMatcher } from '../../config/config' diff --git a/plugin-server/src/cdp/services/hog-inputs.service.test.ts b/plugin-server/src/cdp/services/hog-inputs.service.test.ts index bb757805f6..1cd7aef168 100644 --- a/plugin-server/src/cdp/services/hog-inputs.service.test.ts +++ b/plugin-server/src/cdp/services/hog-inputs.service.test.ts @@ -7,7 +7,7 @@ import { closeHub, createHub } from '~/utils/db/hub' import { createHogExecutionGlobals, createHogFunction, insertIntegration } from '../_tests/fixtures' import { compileHog } from '../templates/compiler' import { HogFunctionInvocationGlobals, HogFunctionType } from '../types' -import { formatHogInput, HogInputsService } from './hog-inputs.service' +import { HogInputsService, formatHogInput } from './hog-inputs.service' describe('Hog Inputs', () => { let hub: Hub diff --git a/plugin-server/src/cdp/services/hogflows/actions/hog_function.test.ts b/plugin-server/src/cdp/services/hogflows/actions/hog_function.test.ts index 2a45289b9a..c69b5bc433 100644 --- a/plugin-server/src/cdp/services/hogflows/actions/hog_function.test.ts +++ b/plugin-server/src/cdp/services/hogflows/actions/hog_function.test.ts @@ -1,5 +1,5 @@ -// eslint-disable-next-line simple-import-sort/imports import { mockFetch } from '~/tests/helpers/mocks/request.mock' + import { DateTime } from 'luxon' import { FixtureHogFlowBuilder } from '~/cdp/_tests/builders/hogflow.builder' diff --git a/plugin-server/src/cdp/services/hogflows/hogflow-executor.service.test.ts b/plugin-server/src/cdp/services/hogflows/hogflow-executor.service.test.ts index 5592358e67..f418f06023 100644 --- a/plugin-server/src/cdp/services/hogflows/hogflow-executor.service.test.ts +++ b/plugin-server/src/cdp/services/hogflows/hogflow-executor.service.test.ts @@ -1,3 +1,21 @@ +// sort-imports-ignore +import { DateTime } from 'luxon' + +import { FixtureHogFlowBuilder, SimpleHogFlowRepresentation } from '~/cdp/_tests/builders/hogflow.builder' +import { createHogExecutionGlobals, insertHogFunctionTemplate } from '~/cdp/_tests/fixtures' +import { compileHog } from '~/cdp/templates/compiler' +import { HogFlow } from '~/schema/hogflow' +import { resetTestDatabase } from '~/tests/helpers/sql' + +import { Hub } from '../../../types' +import { createHub } from '../../../utils/db/hub' +import { HOG_FILTERS_EXAMPLES } from '../../_tests/examples' +import { createExampleHogFlowInvocation } from '../../_tests/fixtures-hogflows' +import { HogExecutorService } from '../hog-executor.service' +import { HogFunctionTemplateManagerService } from '../managers/hog-function-template-manager.service' +import { HogFlowExecutorService } from './hogflow-executor.service' + +// Mock before importing fetch jest.mock('~/utils/request', () => { const original = jest.requireActual('~/utils/request') return { @@ -7,24 +25,8 @@ jest.mock('~/utils/request', () => { }), } }) - -import { DateTime } from 'luxon' - -import { FixtureHogFlowBuilder, SimpleHogFlowRepresentation } from '~/cdp/_tests/builders/hogflow.builder' -import { createHogExecutionGlobals, insertHogFunctionTemplate } from '~/cdp/_tests/fixtures' -import { compileHog } from '~/cdp/templates/compiler' -import { HogFlow } from '~/schema/hogflow' -import { resetTestDatabase } from '~/tests/helpers/sql' import { fetch } from '~/utils/request' -import { Hub } from '../../../types' -import { createHub } from '../../../utils/db/hub' -import { HOG_FILTERS_EXAMPLES } from '../../_tests/examples' -import { createExampleHogFlowInvocation } from '../../_tests/fixtures-hogflows' -import { HogExecutorService } from '../hog-executor.service' -import { HogFunctionTemplateManagerService } from '../managers/hog-function-template-manager.service' -import { HogFlowExecutorService } from './hogflow-executor.service' - const cleanLogs = (logs: string[]): string[] => { // Replaces the function time with a fixed value to simplify testing return logs.map((log) => log.replace(/Function completed in \d+(\.\d+)?ms/, 'Function completed in REPLACEDms')) diff --git a/plugin-server/src/cdp/services/job-queue/job-queue-kafka.ts b/plugin-server/src/cdp/services/job-queue/job-queue-kafka.ts index 13f5449451..a7485f810a 100644 --- a/plugin-server/src/cdp/services/job-queue/job-queue-kafka.ts +++ b/plugin-server/src/cdp/services/job-queue/job-queue-kafka.ts @@ -3,7 +3,6 @@ * To make this easier this class is designed to abstract the queue as much as possible from * the underlying implementation. */ - import { Message } from 'node-rdkafka' import { compress, uncompress } from 'snappy' diff --git a/plugin-server/src/cdp/services/job-queue/job-queue-postgres.ts b/plugin-server/src/cdp/services/job-queue/job-queue-postgres.ts index 6591a4335e..2231a1c789 100644 --- a/plugin-server/src/cdp/services/job-queue/job-queue-postgres.ts +++ b/plugin-server/src/cdp/services/job-queue/job-queue-postgres.ts @@ -3,6 +3,8 @@ * To make this easier this class is designed to abstract the queue as much as possible from * the underlying implementation. */ +import { chunk } from 'lodash' +import { DateTime } from 'luxon' import { CyclotronJob, @@ -11,8 +13,6 @@ import { CyclotronManager, CyclotronWorker, } from '@posthog/cyclotron' -import { chunk } from 'lodash' -import { DateTime } from 'luxon' import { CyclotronInvocationQueueParametersType } from '~/schema/cyclotron' diff --git a/plugin-server/src/cdp/services/job-queue/job-queue.test.ts b/plugin-server/src/cdp/services/job-queue/job-queue.test.ts index e723e4d7e1..0e5f0c1f9d 100644 --- a/plugin-server/src/cdp/services/job-queue/job-queue.test.ts +++ b/plugin-server/src/cdp/services/job-queue/job-queue.test.ts @@ -7,7 +7,7 @@ import { HOG_FILTERS_EXAMPLES, HOG_INPUTS_EXAMPLES } from '../../_tests/examples import { HOG_EXAMPLES } from '../../_tests/examples' import { createHogExecutionGlobals, createHogFunction } from '../../_tests/fixtures' import { createInvocation } from '../../utils/invocation-utils' -import { CyclotronJobQueue, getProducerMapping, JOB_SCHEDULED_AT_FUTURE_THRESHOLD_MS } from './job-queue' +import { CyclotronJobQueue, JOB_SCHEDULED_AT_FUTURE_THRESHOLD_MS, getProducerMapping } from './job-queue' describe('CyclotronJobQueue', () => { let config: PluginsServerConfig diff --git a/plugin-server/src/cdp/services/job-queue/job-queue.ts b/plugin-server/src/cdp/services/job-queue/job-queue.ts index 211e26c39a..c5e70d1665 100644 --- a/plugin-server/src/cdp/services/job-queue/job-queue.ts +++ b/plugin-server/src/cdp/services/job-queue/job-queue.ts @@ -3,7 +3,6 @@ * To make this easier this class is designed to abstract the queue as much as possible from * the underlying implementation. */ - import { DateTime } from 'luxon' import { Counter, Gauge } from 'prom-client' diff --git a/plugin-server/src/cdp/services/legacy-plugin-executor.service.test.ts b/plugin-server/src/cdp/services/legacy-plugin-executor.service.test.ts index 5875cb9bad..4f5e030ddb 100644 --- a/plugin-server/src/cdp/services/legacy-plugin-executor.service.test.ts +++ b/plugin-server/src/cdp/services/legacy-plugin-executor.service.test.ts @@ -9,10 +9,10 @@ import { createPlugin, createPluginConfig } from '../../../tests/helpers/sql' import { Hub, PluginConfig, Team } from '../../types' import { closeHub, createHub } from '../../utils/db/hub' import { + insertHogFunction as _insertHogFunction, createExampleInvocation, createHogExecutionGlobals, createHogFunction, - insertHogFunction as _insertHogFunction, } from '../_tests/fixtures' import { DESTINATION_PLUGINS_BY_ID, TRANSFORMATION_PLUGINS_BY_ID } from '../legacy-plugins' import { LegacyDestinationPlugin, LegacyTransformationPlugin } from '../legacy-plugins/types' diff --git a/plugin-server/src/cdp/services/legacy-plugin-executor.service.ts b/plugin-server/src/cdp/services/legacy-plugin-executor.service.ts index c1c0de6f98..9118240d99 100644 --- a/plugin-server/src/cdp/services/legacy-plugin-executor.service.ts +++ b/plugin-server/src/cdp/services/legacy-plugin-executor.service.ts @@ -1,10 +1,11 @@ -import { PluginEvent, ProcessedPluginEvent, RetryError, StorageExtension } from '@posthog/plugin-scaffold' import { Histogram } from 'prom-client' +import { PluginEvent, ProcessedPluginEvent, RetryError, StorageExtension } from '@posthog/plugin-scaffold' + import { Hub } from '../../types' import { PostgresUse } from '../../utils/db/postgres' import { parseJSON } from '../../utils/json-parse' -import { fetch, FetchResponse } from '../../utils/request' +import { FetchResponse, fetch } from '../../utils/request' import { DESTINATION_PLUGINS_BY_ID, TRANSFORMATION_PLUGINS_BY_ID } from '../legacy-plugins' import { firstTimeEventTrackerPluginProcessEventAsync } from '../legacy-plugins/_transformations/first-time-event-tracker' import { firstTimeEventTrackerPlugin } from '../legacy-plugins/_transformations/first-time-event-tracker/template' diff --git a/plugin-server/src/cdp/services/messaging/email-tracking.service.test.ts b/plugin-server/src/cdp/services/messaging/email-tracking.service.test.ts index b725b7d746..a34a31c9af 100644 --- a/plugin-server/src/cdp/services/messaging/email-tracking.service.test.ts +++ b/plugin-server/src/cdp/services/messaging/email-tracking.service.test.ts @@ -1,26 +1,25 @@ -// eslint-disable-next-line simple-import-sort/imports -import { mockFetch } from '~/tests/helpers/mocks/request.mock' import { mockProducerObserver } from '~/tests/helpers/mocks/producer.mock' +import { mockFetch } from '~/tests/helpers/mocks/request.mock' import crypto from 'crypto' +import { Server } from 'http' +import supertest from 'supertest' import express from 'ultimate-express' +import { setupExpressApp } from '~/api/router' +import { FixtureHogFlowBuilder } from '~/cdp/_tests/builders/hogflow.builder' +import { insertHogFunction } from '~/cdp/_tests/fixtures' +import { insertHogFlow } from '~/cdp/_tests/fixtures-hogflows' +import { CdpApi } from '~/cdp/cdp-api' +import { HogFunctionType } from '~/cdp/types' +import { KAFKA_APP_METRICS_2 } from '~/config/kafka-topics' +import { HogFlow } from '~/schema/hogflow' +import { getFirstTeam, resetTestDatabase } from '~/tests/helpers/sql' import { closeHub, createHub } from '~/utils/db/hub' import { Hub, Team } from '../../../types' -import { getFirstTeam, resetTestDatabase } from '~/tests/helpers/sql' -import { CdpApi } from '~/cdp/cdp-api' -import supertest from 'supertest' -import { setupExpressApp } from '~/api/router' -import { insertHogFunction } from '~/cdp/_tests/fixtures' -import { insertHogFlow } from '~/cdp/_tests/fixtures-hogflows' -import { FixtureHogFlowBuilder } from '~/cdp/_tests/builders/hogflow.builder' import { generateMailjetCustomId } from './email-tracking.service' import { MailjetEventBase, MailjetWebhookEvent } from './types' -import { KAFKA_APP_METRICS_2 } from '~/config/kafka-topics' -import { HogFunctionType } from '~/cdp/types' -import { HogFlow } from '~/schema/hogflow' -import { Server } from 'http' describe('EmailTrackingService', () => { let hub: Hub diff --git a/plugin-server/src/cdp/services/messaging/email.service.test.ts b/plugin-server/src/cdp/services/messaging/email.service.test.ts index 734618680e..3e2aef3dac 100644 --- a/plugin-server/src/cdp/services/messaging/email.service.test.ts +++ b/plugin-server/src/cdp/services/messaging/email.service.test.ts @@ -1,14 +1,13 @@ -// eslint-disable-next-line simple-import-sort/imports import { mockFetch } from '~/tests/helpers/mocks/request.mock' +import { createExampleInvocation, insertIntegration } from '~/cdp/_tests/fixtures' +import { CyclotronJobInvocationHogFunction } from '~/cdp/types' +import { CyclotronInvocationQueueParametersEmailType } from '~/schema/cyclotron' +import { getFirstTeam, resetTestDatabase } from '~/tests/helpers/sql' import { closeHub, createHub } from '~/utils/db/hub' import { Hub, Team } from '../../../types' import { EmailService } from './email.service' -import { createExampleInvocation, insertIntegration } from '~/cdp/_tests/fixtures' -import { getFirstTeam, resetTestDatabase } from '~/tests/helpers/sql' -import { CyclotronInvocationQueueParametersEmailType } from '~/schema/cyclotron' -import { CyclotronJobInvocationHogFunction } from '~/cdp/types' const createEmailParams = ( params: Partial = {} diff --git a/plugin-server/src/cdp/services/monitoring/hog-watcher.service.test.ts b/plugin-server/src/cdp/services/monitoring/hog-watcher.service.test.ts index 1bc940db9e..ae615fca76 100644 --- a/plugin-server/src/cdp/services/monitoring/hog-watcher.service.test.ts +++ b/plugin-server/src/cdp/services/monitoring/hog-watcher.service.test.ts @@ -1,9 +1,3 @@ -jest.mock('~/utils/posthog', () => { - return { - captureTeamEvent: jest.fn(), - } -}) - import { Hub, ProjectId, Team } from '../../../types' import { closeHub, createHub } from '../../../utils/db/hub' import { createExampleInvocation, createHogFunction } from '../../_tests/fixtures' @@ -13,6 +7,8 @@ import { CyclotronJobInvocationHogFunction, CyclotronJobInvocationResult, HogFun import { createInvocationResult } from '../../utils/invocation-utils' import { BASE_REDIS_KEY, HogWatcherService, HogWatcherState } from './hog-watcher.service' +jest.mock('~/utils/posthog', () => ({ captureTeamEvent: jest.fn() })) + const mockNow: jest.SpyInstance = jest.spyOn(Date, 'now') const mockCaptureTeamEvent: jest.Mock = require('~/utils/posthog').captureTeamEvent as any diff --git a/plugin-server/src/cdp/services/native-destination-executor.service.test.ts b/plugin-server/src/cdp/services/native-destination-executor.service.test.ts index 6181caf9b3..7758169844 100644 --- a/plugin-server/src/cdp/services/native-destination-executor.service.test.ts +++ b/plugin-server/src/cdp/services/native-destination-executor.service.test.ts @@ -2,7 +2,7 @@ import { DateTime, Settings } from 'luxon' import { defaultConfig } from '~/config/config' import { forSnapshot } from '~/tests/helpers/snapshots' -import { fetch, FetchResponse } from '~/utils/request' +import { FetchResponse, fetch } from '~/utils/request' import { createHogFunction } from '../_tests/fixtures' import { createExampleNativeInvocation } from '../_tests/fixtures-native' diff --git a/plugin-server/src/cdp/services/native-destination-executor.service.ts b/plugin-server/src/cdp/services/native-destination-executor.service.ts index 3bdce72ef7..4a946f176c 100644 --- a/plugin-server/src/cdp/services/native-destination-executor.service.ts +++ b/plugin-server/src/cdp/services/native-destination-executor.service.ts @@ -4,7 +4,7 @@ import { PluginsServerConfig } from '~/types' import { parseJSON } from '~/utils/json-parse' import { logger } from '../../utils/logger' -import { fetch, FetchOptions, FetchResponse } from '../../utils/request' +import { FetchOptions, FetchResponse, fetch } from '../../utils/request' import { tryCatch } from '../../utils/try-catch' import { NATIVE_HOG_FUNCTIONS_BY_ID } from '../templates' import { CyclotronJobInvocationHogFunction, CyclotronJobInvocationResult, Response } from '../types' diff --git a/plugin-server/src/cdp/services/segment-destination-executor.service.test.ts b/plugin-server/src/cdp/services/segment-destination-executor.service.test.ts index ae8c5b7e5d..de1dabd7ec 100644 --- a/plugin-server/src/cdp/services/segment-destination-executor.service.test.ts +++ b/plugin-server/src/cdp/services/segment-destination-executor.service.test.ts @@ -2,7 +2,7 @@ import { DateTime, Settings } from 'luxon' import { defaultConfig } from '~/config/config' import { forSnapshot } from '~/tests/helpers/snapshots' -import { fetch, FetchResponse } from '~/utils/request' +import { FetchResponse, fetch } from '~/utils/request' import { createHogFunction } from '../_tests/fixtures' import { diff --git a/plugin-server/src/cdp/services/segment-destination-executor.service.ts b/plugin-server/src/cdp/services/segment-destination-executor.service.ts index c3b8b48859..9658fc29b7 100644 --- a/plugin-server/src/cdp/services/segment-destination-executor.service.ts +++ b/plugin-server/src/cdp/services/segment-destination-executor.service.ts @@ -5,7 +5,7 @@ import { PluginsServerConfig } from '~/types' import { parseJSON } from '../../utils/json-parse' import { logger } from '../../utils/logger' -import { fetch, FetchOptions, FetchResponse, Response } from '../../utils/request' +import { FetchOptions, FetchResponse, Response, fetch } from '../../utils/request' import { tryCatch } from '../../utils/try-catch' import { LegacyPluginLogger } from '../legacy-plugins/types' import { SEGMENT_DESTINATIONS_BY_ID } from '../segment/segment-templates' diff --git a/plugin-server/src/cdp/templates/_destinations/coming-soon/coming-soon-destinations.template.ts b/plugin-server/src/cdp/templates/_destinations/coming-soon/coming-soon-destinations.template.ts index 6391f3789c..e7414a95cd 100644 --- a/plugin-server/src/cdp/templates/_destinations/coming-soon/coming-soon-destinations.template.ts +++ b/plugin-server/src/cdp/templates/_destinations/coming-soon/coming-soon-destinations.template.ts @@ -1,4 +1,5 @@ -import { HogFunctionTemplate } from '~/cdp/types' // Assuming this path is correct from your initial file +// Assuming this path is correct from your initial file +import { HogFunctionTemplate } from '~/cdp/types' interface DestinationConfig { name: string diff --git a/plugin-server/src/cdp/templates/_destinations/google_ads/google.template.test.ts b/plugin-server/src/cdp/templates/_destinations/google_ads/google.template.test.ts index a9941b8ce8..e8e11c08f1 100644 --- a/plugin-server/src/cdp/templates/_destinations/google_ads/google.template.test.ts +++ b/plugin-server/src/cdp/templates/_destinations/google_ads/google.template.test.ts @@ -1,6 +1,6 @@ import { DateTime, Settings } from 'luxon' -import { createAdDestinationPayload, TemplateTester } from '../../test/test-helpers' +import { TemplateTester, createAdDestinationPayload } from '../../test/test-helpers' import { template } from './google.template' jest.setTimeout(60 * 1000) diff --git a/plugin-server/src/cdp/templates/_destinations/reddit_ads/reddit.template.test.ts b/plugin-server/src/cdp/templates/_destinations/reddit_ads/reddit.template.test.ts index 77681cf60b..2f63fae72d 100644 --- a/plugin-server/src/cdp/templates/_destinations/reddit_ads/reddit.template.test.ts +++ b/plugin-server/src/cdp/templates/_destinations/reddit_ads/reddit.template.test.ts @@ -1,6 +1,6 @@ import { DateTime } from 'luxon' -import { createAdDestinationPayload, TemplateTester } from '../../test/test-helpers' +import { TemplateTester, createAdDestinationPayload } from '../../test/test-helpers' import { template } from './reddit.template' jest.setTimeout(2 * 60 * 1000) diff --git a/plugin-server/src/cdp/templates/_destinations/snapchat_ads/snapchat.template.test.ts b/plugin-server/src/cdp/templates/_destinations/snapchat_ads/snapchat.template.test.ts index cb9167e9dd..777df7a143 100644 --- a/plugin-server/src/cdp/templates/_destinations/snapchat_ads/snapchat.template.test.ts +++ b/plugin-server/src/cdp/templates/_destinations/snapchat_ads/snapchat.template.test.ts @@ -1,6 +1,6 @@ import { DateTime } from 'luxon' -import { createAdDestinationPayload, TemplateTester } from '../../test/test-helpers' +import { TemplateTester, createAdDestinationPayload } from '../../test/test-helpers' import { template } from './snapchat.template' jest.setTimeout(2 * 60 * 1000) diff --git a/plugin-server/src/cdp/templates/_destinations/tiktok_ads/tiktok.template.test.ts b/plugin-server/src/cdp/templates/_destinations/tiktok_ads/tiktok.template.test.ts index 09e9fe07c8..2bb061d0a2 100644 --- a/plugin-server/src/cdp/templates/_destinations/tiktok_ads/tiktok.template.test.ts +++ b/plugin-server/src/cdp/templates/_destinations/tiktok_ads/tiktok.template.test.ts @@ -1,6 +1,6 @@ import { DateTime } from 'luxon' -import { createAdDestinationPayload, TemplateTester } from '../../test/test-helpers' +import { TemplateTester, createAdDestinationPayload } from '../../test/test-helpers' import { template } from './tiktok.template' jest.setTimeout(2 * 60 * 1000) diff --git a/plugin-server/src/cdp/templates/index.ts b/plugin-server/src/cdp/templates/index.ts index 3d60af847d..a50a1a2ef3 100644 --- a/plugin-server/src/cdp/templates/index.ts +++ b/plugin-server/src/cdp/templates/index.ts @@ -4,9 +4,9 @@ import { HogFunctionTemplate, NativeTemplate } from '../types' import { template as clickupTemplate } from './_destinations/clickup/clickup.template' import { allComingSoonTemplates } from './_destinations/coming-soon/coming-soon-destinations.template' import { template as emailTemplate } from './_destinations/email/email.template' +import { template as googleTagManagerTemplate } from './_destinations/google-tag-manager/google-tag-manager.template' import { template as googleAdsTemplate } from './_destinations/google_ads/google.template' import { template as googleSheetsTemplate } from './_destinations/google_sheets/google_sheets.template' -import { template as googleTagManagerTemplate } from './_destinations/google-tag-manager/google-tag-manager.template' import { template as linearTemplate } from './_destinations/linear/linear.template' import { template as nativeWebhookTemplate } from './_destinations/native_webhook/webhook.template' import { template as redditAdsTemplate } from './_destinations/reddit_ads/reddit.template' diff --git a/plugin-server/src/cdp/templates/test/test-helpers.ts b/plugin-server/src/cdp/templates/test/test-helpers.ts index e7ebea5a48..7fec0b6504 100644 --- a/plugin-server/src/cdp/templates/test/test-helpers.ts +++ b/plugin-server/src/cdp/templates/test/test-helpers.ts @@ -5,7 +5,7 @@ import { DateTime, Settings } from 'luxon' import { NativeDestinationExecutorService } from '~/cdp/services/native-destination-executor.service' import { defaultConfig } from '~/config/config' import { CyclotronInputType } from '~/schema/cyclotron' -import { GeoIp, GeoIPService } from '~/utils/geoip' +import { GeoIPService, GeoIp } from '~/utils/geoip' import { Hub } from '../../../types' import { cleanNullValues } from '../../hog-transformations/transformation-functions' diff --git a/plugin-server/src/cdp/types.ts b/plugin-server/src/cdp/types.ts index 80803e3cac..a1e19aa9c1 100644 --- a/plugin-server/src/cdp/types.ts +++ b/plugin-server/src/cdp/types.ts @@ -1,6 +1,7 @@ -import { VMState } from '@posthog/hogvm' import { DateTime } from 'luxon' +import { VMState } from '@posthog/hogvm' + import { CyclotronInputType, CyclotronInvocationQueueParametersType } from '~/schema/cyclotron' import { HogFlow } from '../schema/hogflow' diff --git a/plugin-server/src/cdp/utils.ts b/plugin-server/src/cdp/utils.ts index 15bcaa6e65..d5d19482c3 100644 --- a/plugin-server/src/cdp/utils.ts +++ b/plugin-server/src/cdp/utils.ts @@ -1,12 +1,11 @@ // NOTE: PostIngestionEvent is our context event - it should never be sent directly to an output, but rather transformed into a lightweight schema - import { DateTime } from 'luxon' import { gunzip, gzip } from 'zlib' import { RawClickHouseEvent, Team, TimestampFormat } from '../types' import { safeClickhouseString } from '../utils/db/utils' import { parseJSON } from '../utils/json-parse' -import { castTimestampOrNow, clickHouseTimestampToISO, UUIDT } from '../utils/utils' +import { UUIDT, castTimestampOrNow, clickHouseTimestampToISO } from '../utils/utils' import { CdpInternalEvent } from './schema' import { HogFunctionCapturedEvent, @@ -16,6 +15,7 @@ import { LogEntrySerialized, MinimalLogEntry, } from './types' + // ID of functions that are hidden from normal users and used by us for special testing // For example, transformations use this to only run if in comparison mode export const CDP_TEST_ID = '[CDP-TEST-HIDDEN]' diff --git a/plugin-server/src/cdp/utils/hog-exec.ts b/plugin-server/src/cdp/utils/hog-exec.ts index 1925876193..8cdd2c6ab5 100644 --- a/plugin-server/src/cdp/utils/hog-exec.ts +++ b/plugin-server/src/cdp/utils/hog-exec.ts @@ -1,8 +1,9 @@ -import { DEFAULT_TIMEOUT_MS, exec, ExecOptions, ExecResult } from '@posthog/hogvm' import crypto from 'crypto' import { Counter } from 'prom-client' import RE2 from 're2' +import { DEFAULT_TIMEOUT_MS, ExecOptions, ExecResult, exec } from '@posthog/hogvm' + import { Semaphore } from './sempahore' export const MAX_THREAD_WAIT_TIME_MS = 200 diff --git a/plugin-server/src/cdp/utils/hog-function-filtering.ts b/plugin-server/src/cdp/utils/hog-function-filtering.ts index 53892708b6..9a5676d52b 100644 --- a/plugin-server/src/cdp/utils/hog-function-filtering.ts +++ b/plugin-server/src/cdp/utils/hog-function-filtering.ts @@ -1,13 +1,14 @@ -import { ExecResult } from '@posthog/hogvm' import { DateTime } from 'luxon' import { Histogram } from 'prom-client' import RE2 from 're2' +import { ExecResult } from '@posthog/hogvm' + import { HogFlow } from '../../schema/hogflow' import { RawClickHouseEvent } from '../../types' import { parseJSON } from '../../utils/json-parse' import { logger } from '../../utils/logger' -import { clickHouseTimestampToISO, UUIDT } from '../../utils/utils' +import { UUIDT, clickHouseTimestampToISO } from '../../utils/utils' import { HogFunctionFilterGlobals, HogFunctionInvocationGlobals, diff --git a/plugin-server/src/cdp/utils/invocation-utils.ts b/plugin-server/src/cdp/utils/invocation-utils.ts index 2958e915a3..f205035363 100644 --- a/plugin-server/src/cdp/utils/invocation-utils.ts +++ b/plugin-server/src/cdp/utils/invocation-utils.ts @@ -1,5 +1,4 @@ // NOTE: PostIngestionEvent is our context event - it should never be sent directly to an output, but rather transformed into a lightweight schema - import { UUIDT } from '../../utils/utils' import { CyclotronJobInvocation, diff --git a/plugin-server/src/config/config.ts b/plugin-server/src/config/config.ts index 02b1b52e4b..648670e6c7 100644 --- a/plugin-server/src/config/config.ts +++ b/plugin-server/src/config/config.ts @@ -1,4 +1,4 @@ -import { LogLevel, PluginLogLevel, PluginsServerConfig, stringToPluginServerMode, ValueMatcher } from '../types' +import { LogLevel, PluginLogLevel, PluginsServerConfig, ValueMatcher, stringToPluginServerMode } from '../types' import { isDevEnv, isProdEnv, isTestEnv, stringToBoolean } from '../utils/env-utils' import { KAFKAJS_LOG_LEVEL_MAPPING } from './constants' import { diff --git a/plugin-server/src/config/kafka-topics.ts b/plugin-server/src/config/kafka-topics.ts index d0fc52b5d2..62cd22b347 100644 --- a/plugin-server/src/config/kafka-topics.ts +++ b/plugin-server/src/config/kafka-topics.ts @@ -1,5 +1,4 @@ // Keep this in sync with posthog/kafka_client/topics.py - import { isTestEnv } from '../utils/env-utils' export const suffix = isTestEnv() ? '_test' : '' diff --git a/plugin-server/src/ingestion/ai-costs/process-ai-event.ts b/plugin-server/src/ingestion/ai-costs/process-ai-event.ts index 000440cd12..fef000c6df 100644 --- a/plugin-server/src/ingestion/ai-costs/process-ai-event.ts +++ b/plugin-server/src/ingestion/ai-costs/process-ai-event.ts @@ -1,6 +1,7 @@ -import { PluginEvent, Properties } from '@posthog/plugin-scaffold' import bigDecimal from 'js-big-decimal' +import { PluginEvent, Properties } from '@posthog/plugin-scaffold' + import { logger } from '../../utils/logger' import { costsByModel } from './providers' import { ModelRow } from './providers/types' diff --git a/plugin-server/src/ingestion/cookieless/cookieless-manager.test.ts b/plugin-server/src/ingestion/cookieless/cookieless-manager.test.ts index bd874bf341..25c7b5bd53 100644 --- a/plugin-server/src/ingestion/cookieless/cookieless-manager.test.ts +++ b/plugin-server/src/ingestion/cookieless/cookieless-manager.test.ts @@ -1,8 +1,9 @@ -import type { PluginEvent } from '@posthog/plugin-scaffold' import fs from 'fs' import { Message } from 'node-rdkafka' import path from 'path' +import type { PluginEvent } from '@posthog/plugin-scaffold' + import { createOrganization, createTeam, getTeam } from '~/tests/helpers/sql' import { cookielessRedisErrorCounter } from '../../main/ingestion-queues/metrics' @@ -13,10 +14,10 @@ import { PostgresUse } from '../../utils/db/postgres' import { parseJSON } from '../../utils/json-parse' import { UUID7 } from '../../utils/utils' import { - bufferToSessionState, COOKIELESS_MODE_FLAG_PROPERTY, COOKIELESS_SENTINEL_VALUE, CookielessManager, + bufferToSessionState, extractRootDomain, getRedisIdentifiesKey, hashToDistinctId, diff --git a/plugin-server/src/ingestion/cookieless/cookieless-manager.ts b/plugin-server/src/ingestion/cookieless/cookieless-manager.ts index 064eb895fd..afc5e96718 100644 --- a/plugin-server/src/ingestion/cookieless/cookieless-manager.ts +++ b/plugin-server/src/ingestion/cookieless/cookieless-manager.ts @@ -1,5 +1,3 @@ -import { PluginEvent, Properties } from '@posthog/plugin-scaffold' -import * as siphashDouble from '@posthog/siphash/lib/siphash-double' import { randomBytes } from 'crypto' import { Pool as GenericPool } from 'generic-pool' import Redis from 'ioredis' @@ -10,13 +8,16 @@ import { Message } from 'node-rdkafka' import { Counter } from 'prom-client' import { getDomain } from 'tldts' +import { PluginEvent, Properties } from '@posthog/plugin-scaffold' +import * as siphashDouble from '@posthog/siphash/lib/siphash-double' + import { cookielessRedisErrorCounter, eventDroppedCounter } from '../../main/ingestion-queues/metrics' import { runInstrumentedFunction } from '../../main/utils' import { CookielessServerHashMode, IncomingEventWithTeam, PipelineEvent, PluginsServerConfig, Team } from '../../types' import { ConcurrencyController } from '../../utils/concurrencyController' import { RedisOperationError } from '../../utils/db/error' import { TeamManager } from '../../utils/team-manager' -import { bufferToUint32ArrayLE, uint32ArrayLEToBuffer, UUID7 } from '../../utils/utils' +import { UUID7, bufferToUint32ArrayLE, uint32ArrayLEToBuffer } from '../../utils/utils' import { toStartOfDayInTimezone, toYearMonthDayInTimezone } from '../../worker/ingestion/timestamps' import { RedisHelpers } from './redis-helpers' diff --git a/plugin-server/src/ingestion/cookieless/redis-helpers.ts b/plugin-server/src/ingestion/cookieless/redis-helpers.ts index 37b786f612..c12bafa1d5 100644 --- a/plugin-server/src/ingestion/cookieless/redis-helpers.ts +++ b/plugin-server/src/ingestion/cookieless/redis-helpers.ts @@ -1,7 +1,8 @@ -import { CacheOptions } from '@posthog/plugin-scaffold' import { Pool as GenericPool } from 'generic-pool' import Redis from 'ioredis' +import { CacheOptions } from '@posthog/plugin-scaffold' + import { RedisOperationError } from '../../utils/db/error' import { timeoutGuard } from '../../utils/db/utils' import { parseJSON } from '../../utils/json-parse' diff --git a/plugin-server/src/ingestion/deduplication/redis-client.test.ts b/plugin-server/src/ingestion/deduplication/redis-client.test.ts index 26572338a2..8b399156f7 100644 --- a/plugin-server/src/ingestion/deduplication/redis-client.test.ts +++ b/plugin-server/src/ingestion/deduplication/redis-client.test.ts @@ -1,5 +1,5 @@ import { PluginsServerConfig } from '../../types' -import { createDeduplicationRedis, DeduplicationOptions, DeduplicationRedis } from './redis-client' +import { DeduplicationOptions, DeduplicationRedis, createDeduplicationRedis } from './redis-client' const getConfig = (): PluginsServerConfig => ({ diff --git a/plugin-server/src/ingestion/deduplication/redis-client.ts b/plugin-server/src/ingestion/deduplication/redis-client.ts index 0cb8bf3d04..7075130e1a 100644 --- a/plugin-server/src/ingestion/deduplication/redis-client.ts +++ b/plugin-server/src/ingestion/deduplication/redis-client.ts @@ -3,8 +3,8 @@ import Redis from 'ioredis' import { PluginsServerConfig } from '../../types' import { logger } from '../../utils/logger' import { recordDeduplicationOperation } from './metrics' -import deduplicationScript from './scripts/deduplication.lua' import deduplicationIdsScript from './scripts/deduplication-ids.lua' +import deduplicationScript from './scripts/deduplication.lua' export type DeduplicationCountResult = { duplicates: number diff --git a/plugin-server/src/ingestion/ingestion-consumer.test.ts b/plugin-server/src/ingestion/ingestion-consumer.test.ts index 2a7cf93a53..5b2074d736 100644 --- a/plugin-server/src/ingestion/ingestion-consumer.test.ts +++ b/plugin-server/src/ingestion/ingestion-consumer.test.ts @@ -1,26 +1,26 @@ -// eslint-disable-next-line simple-import-sort/imports import { mockProducerObserver } from '~/tests/helpers/mocks/producer.mock' +import { DecodedKafkaMessage } from '~/tests/helpers/mocks/producer.spy' + import { DateTime } from 'luxon' import { Message } from 'node-rdkafka' import { insertHogFunction as _insertHogFunction } from '~/cdp/_tests/fixtures' import { template as geoipTemplate } from '~/cdp/templates/_transformations/geoip/geoip.template' import { compileHog } from '~/cdp/templates/compiler' -import { DecodedKafkaMessage } from '~/tests/helpers/mocks/producer.spy' +import { COOKIELESS_MODE_FLAG_PROPERTY, COOKIELESS_SENTINEL_VALUE } from '~/ingestion/cookieless/cookieless-manager' import { forSnapshot } from '~/tests/helpers/snapshots' import { createTeam, getFirstTeam, getTeam, resetTestDatabase } from '~/tests/helpers/sql' import { CookielessServerHashMode, Hub, IncomingEventWithTeam, PipelineEvent, Team } from '../../src/types' import { closeHub, createHub } from '../../src/utils/db/hub' import { HogFunctionType } from '../cdp/types' +import { PostgresUse } from '../utils/db/postgres' import { parseJSON } from '../utils/json-parse' import { logger } from '../utils/logger' import { UUIDT } from '../utils/utils' import { IngestionConsumer } from './ingestion-consumer' -import { COOKIELESS_MODE_FLAG_PROPERTY, COOKIELESS_SENTINEL_VALUE } from '~/ingestion/cookieless/cookieless-manager' -import { PostgresUse } from '../utils/db/postgres' const DEFAULT_TEST_TIMEOUT = 5000 jest.setTimeout(DEFAULT_TEST_TIMEOUT) diff --git a/plugin-server/src/ingestion/ingestion-consumer.ts b/plugin-server/src/ingestion/ingestion-consumer.ts index ae5647d3ad..152a14f5cf 100644 --- a/plugin-server/src/ingestion/ingestion-consumer.ts +++ b/plugin-server/src/ingestion/ingestion-consumer.ts @@ -33,7 +33,7 @@ import { BatchWritingPersonsStore } from '../worker/ingestion/persons/batch-writ import { FlushResult, PersonsStoreForBatch } from '../worker/ingestion/persons/persons-store-for-batch' import { PostgresPersonRepository } from '../worker/ingestion/persons/repositories/postgres-person-repository' import { deduplicateEvents } from './deduplication/events' -import { createDeduplicationRedis, DeduplicationRedis } from './deduplication/redis-client' +import { DeduplicationRedis, createDeduplicationRedis } from './deduplication/redis-client' import { applyDropEventsRestrictions, applyPersonProcessingRestrictions, diff --git a/plugin-server/src/kafka/consumer.test.ts b/plugin-server/src/kafka/consumer.test.ts index 2a8e3b32f5..d3b6ec314e 100644 --- a/plugin-server/src/kafka/consumer.test.ts +++ b/plugin-server/src/kafka/consumer.test.ts @@ -1,4 +1,4 @@ -import { CODES, KafkaConsumer as RdKafkaConsumer, Message } from 'node-rdkafka' +import { CODES, Message, KafkaConsumer as RdKafkaConsumer } from 'node-rdkafka' import { defaultConfig } from '~/config/config' diff --git a/plugin-server/src/kafka/consumer.ts b/plugin-server/src/kafka/consumer.ts index 96601a89ee..6d00f3f7be 100644 --- a/plugin-server/src/kafka/consumer.ts +++ b/plugin-server/src/kafka/consumer.ts @@ -1,14 +1,14 @@ import { Assignment, - ClientMetrics, CODES, + ClientMetrics, ConsumerGlobalConfig, - KafkaConsumer as RdKafkaConsumer, LibrdKafkaError, Message, MessageHeader, Metadata, PartitionMetadata, + KafkaConsumer as RdKafkaConsumer, TopicPartitionOffset, WatermarkOffsets, } from 'node-rdkafka' diff --git a/plugin-server/src/kafka/producer.ts b/plugin-server/src/kafka/producer.ts index c2999c5aa1..6ad17d5303 100644 --- a/plugin-server/src/kafka/producer.ts +++ b/plugin-server/src/kafka/producer.ts @@ -3,10 +3,10 @@ import { HighLevelProducer, LibrdKafkaError, MessageHeader, - MessageKey as RdKafkaMessageKey, MessageValue, NumberNullUndefined, ProducerGlobalConfig, + MessageKey as RdKafkaMessageKey, } from 'node-rdkafka' import { hostname } from 'os' import { Counter, Summary } from 'prom-client' @@ -14,7 +14,7 @@ import { Counter, Summary } from 'prom-client' import { PluginsServerConfig } from '../types' import { DependencyUnavailableError, MessageSizeTooLarge } from '../utils/db/error' import { logger } from '../utils/logger' -import { getKafkaConfigFromEnv, KafkaConfigTarget } from './config' +import { KafkaConfigTarget, getKafkaConfigFromEnv } from './config' // TODO: Rewrite this description /** This class is a wrapper around the rdkafka producer, and does very little. diff --git a/plugin-server/src/main/ingestion-queues/batch-processing/metrics.ts b/plugin-server/src/main/ingestion-queues/batch-processing/metrics.ts index f630fc83bd..82e63f2040 100644 --- a/plugin-server/src/main/ingestion-queues/batch-processing/metrics.ts +++ b/plugin-server/src/main/ingestion-queues/batch-processing/metrics.ts @@ -1,4 +1,4 @@ -import { Counter, exponentialBuckets, Histogram, Summary } from 'prom-client' // but fail to commit offsets, which can cause duplicate events +import { Counter, Histogram, Summary, exponentialBuckets } from 'prom-client' // The following two counters can be used to see how often we start, // but fail to commit offsets, which can cause duplicate events diff --git a/plugin-server/src/main/ingestion-queues/metrics.ts b/plugin-server/src/main/ingestion-queues/metrics.ts index 550844e575..703f5a34fa 100644 --- a/plugin-server/src/main/ingestion-queues/metrics.ts +++ b/plugin-server/src/main/ingestion-queues/metrics.ts @@ -1,5 +1,4 @@ // Metrics that make sense across all Kafka consumers - import { Counter, Gauge, Summary } from 'prom-client' export const kafkaRebalancePartitionCount = new Gauge({ diff --git a/plugin-server/src/main/ingestion-queues/session-recording-v2/consumer.ts b/plugin-server/src/main/ingestion-queues/session-recording-v2/consumer.ts index 6aadf2eed2..463325bccf 100644 --- a/plugin-server/src/main/ingestion-queues/session-recording-v2/consumer.ts +++ b/plugin-server/src/main/ingestion-queues/session-recording-v2/consumer.ts @@ -1,5 +1,5 @@ import { S3Client, S3ClientConfig } from '@aws-sdk/client-s3' -import { CODES, features, librdkafkaVersion, Message, TopicPartition, TopicPartitionOffset } from 'node-rdkafka' +import { CODES, Message, TopicPartition, TopicPartitionOffset, features, librdkafkaVersion } from 'node-rdkafka' import { buildIntegerMatcher } from '../../../config/config' import { KAFKA_CLICKHOUSE_SESSION_REPLAY_EVENTS_V2_TEST } from '../../../config/kafka-topics' @@ -12,7 +12,7 @@ import { ValueMatcher, } from '../../../types' import { PostgresRouter } from '../../../utils/db/postgres' -import { logger as logger } from '../../../utils/logger' +import { logger } from '../../../utils/logger' import { captureException } from '../../../utils/posthog' import { PromiseScheduler } from '../../../utils/promise-scheduler' import { captureIngestionWarning } from '../../../worker/ingestion/utils' diff --git a/plugin-server/src/main/ingestion-queues/session-recording-v2/kafka/message-parser.test.ts b/plugin-server/src/main/ingestion-queues/session-recording-v2/kafka/message-parser.test.ts index 6005d99f5d..01356ebaf1 100644 --- a/plugin-server/src/main/ingestion-queues/session-recording-v2/kafka/message-parser.test.ts +++ b/plugin-server/src/main/ingestion-queues/session-recording-v2/kafka/message-parser.test.ts @@ -1,6 +1,6 @@ import { DateTime } from 'luxon' -import { promisify } from 'node:util' import { Message } from 'node-rdkafka' +import { promisify } from 'node:util' import { gzip } from 'zlib' import { KafkaMessageParser } from './message-parser' diff --git a/plugin-server/src/main/ingestion-queues/session-recording-v2/kafka/message-parser.ts b/plugin-server/src/main/ingestion-queues/session-recording-v2/kafka/message-parser.ts index 33c832297d..aec42f5ac7 100644 --- a/plugin-server/src/main/ingestion-queues/session-recording-v2/kafka/message-parser.ts +++ b/plugin-server/src/main/ingestion-queues/session-recording-v2/kafka/message-parser.ts @@ -1,6 +1,6 @@ import { DateTime } from 'luxon' -import { promisify } from 'node:util' import { Message } from 'node-rdkafka' +import { promisify } from 'node:util' import { gunzip } from 'zlib' import { parseJSON } from '../../../../utils/json-parse' diff --git a/plugin-server/src/main/ingestion-queues/session-recording-v2/segmentation.test.ts b/plugin-server/src/main/ingestion-queues/session-recording-v2/segmentation.test.ts index 201701cae0..512596df05 100644 --- a/plugin-server/src/main/ingestion-queues/session-recording-v2/segmentation.test.ts +++ b/plugin-server/src/main/ingestion-queues/session-recording-v2/segmentation.test.ts @@ -1,6 +1,6 @@ import { RRWebEvent } from '../../../types' import { RRWebEventSource, RRWebEventType } from './rrweb-types' -import { activeMillisecondsFromSegmentationEvents, SegmentationEvent, toSegmentationEvent } from './segmentation' +import { SegmentationEvent, activeMillisecondsFromSegmentationEvents, toSegmentationEvent } from './segmentation' describe('segmentation', () => { describe('activeMillisecondsFromSegmentationEvents', () => { diff --git a/plugin-server/src/main/ingestion-queues/session-recording-v2/segmentation.ts b/plugin-server/src/main/ingestion-queues/session-recording-v2/segmentation.ts index b308bca4e7..c7233581ef 100644 --- a/plugin-server/src/main/ingestion-queues/session-recording-v2/segmentation.ts +++ b/plugin-server/src/main/ingestion-queues/session-recording-v2/segmentation.ts @@ -5,7 +5,6 @@ * It has been modified to not need the same dependencies * Any changes may need to be sync'd between the two */ - import { SnapshotEvent } from './kafka/types' import { RRWebEventSource, RRWebEventType } from './rrweb-types' diff --git a/plugin-server/src/main/ingestion-queues/session-recording-v2/sessions/session-batch-file-format.integration.test.ts b/plugin-server/src/main/ingestion-queues/session-recording-v2/sessions/session-batch-file-format.integration.test.ts index 63251a6fe4..4d9242d880 100644 --- a/plugin-server/src/main/ingestion-queues/session-recording-v2/sessions/session-batch-file-format.integration.test.ts +++ b/plugin-server/src/main/ingestion-queues/session-recording-v2/sessions/session-batch-file-format.integration.test.ts @@ -23,7 +23,6 @@ * - Contains newline-delimited JSON records after decompression * - Each record is an array of [windowId, event] */ - import { DateTime } from 'luxon' import snappy from 'snappy' diff --git a/plugin-server/src/main/ingestion-queues/session-recording-v2/sessions/snappy-session-recorder.ts b/plugin-server/src/main/ingestion-queues/session-recording-v2/sessions/snappy-session-recorder.ts index 78b4517a68..6c36fd2d9c 100644 --- a/plugin-server/src/main/ingestion-queues/session-recording-v2/sessions/snappy-session-recorder.ts +++ b/plugin-server/src/main/ingestion-queues/session-recording-v2/sessions/snappy-session-recorder.ts @@ -7,7 +7,7 @@ import { SessionRecordingV2MetadataSwitchoverDate } from '~/types' import { logger } from '../../../../utils/logger' import { ParsedMessageData } from '../kafka/types' import { hrefFrom, isClick, isKeypress, isMouseActivity } from '../rrweb-types' -import { activeMillisecondsFromSegmentationEvents, SegmentationEvent, toSegmentationEvent } from '../segmentation' +import { SegmentationEvent, activeMillisecondsFromSegmentationEvents, toSegmentationEvent } from '../segmentation' const MAX_SNAPSHOT_FIELD_LENGTH = 1000 const MAX_URL_LENGTH = 4 * 1024 // 4KB diff --git a/plugin-server/src/main/ingestion-queues/session-recording-v2/teams/team-service.ts b/plugin-server/src/main/ingestion-queues/session-recording-v2/teams/team-service.ts index 525ff383c7..0ee1522968 100644 --- a/plugin-server/src/main/ingestion-queues/session-recording-v2/teams/team-service.ts +++ b/plugin-server/src/main/ingestion-queues/session-recording-v2/teams/team-service.ts @@ -2,7 +2,7 @@ import { TeamIDWithConfig } from '../../../../cdp/consumers/cdp-base.consumer' import { Team } from '../../../../types' import { BackgroundRefresher } from '../../../../utils/background-refresher' import { PostgresRouter, PostgresUse } from '../../../../utils/db/postgres' -import { logger as logger } from '../../../../utils/logger' +import { logger } from '../../../../utils/logger' import { TeamForReplay } from './types' export class TeamService { diff --git a/plugin-server/src/main/ingestion-queues/session-recording-v2/types.ts b/plugin-server/src/main/ingestion-queues/session-recording-v2/types.ts index 7894539e92..2dbeee977b 100644 --- a/plugin-server/src/main/ingestion-queues/session-recording-v2/types.ts +++ b/plugin-server/src/main/ingestion-queues/session-recording-v2/types.ts @@ -1,5 +1,4 @@ // This is the incoming message from Kafka - import { Message } from 'node-rdkafka' export type PersistedRecordingMessage = { diff --git a/plugin-server/src/main/ingestion-queues/session-recording/services/console-logs-ingester.ts b/plugin-server/src/main/ingestion-queues/session-recording/services/console-logs-ingester.ts index 21727d3a2f..989d0d04e8 100644 --- a/plugin-server/src/main/ingestion-queues/session-recording/services/console-logs-ingester.ts +++ b/plugin-server/src/main/ingestion-queues/session-recording/services/console-logs-ingester.ts @@ -10,7 +10,7 @@ import { KafkaProducerWrapper } from '../../../../kafka/producer' import { logger } from '../../../../utils/logger' import { captureException } from '../../../../utils/posthog' import { eventDroppedCounter } from '../../metrics' -import { ConsoleLogEntry, gatherConsoleLogEvents, RRWebEventType } from '../process-event' +import { ConsoleLogEntry, RRWebEventType, gatherConsoleLogEvents } from '../process-event' import { IncomingRecordingMessage } from '../types' import { OffsetHighWaterMarker } from './offset-high-water-marker' diff --git a/plugin-server/src/main/ingestion-queues/session-recording/services/replay-events-ingester.ts b/plugin-server/src/main/ingestion-queues/session-recording/services/replay-events-ingester.ts index bbf49c0f1b..34b5931f4b 100644 --- a/plugin-server/src/main/ingestion-queues/session-recording/services/replay-events-ingester.ts +++ b/plugin-server/src/main/ingestion-queues/session-recording/services/replay-events-ingester.ts @@ -13,7 +13,7 @@ import { logger } from '../../../../utils/logger' import { captureException } from '../../../../utils/posthog' import { captureIngestionWarning } from '../../../../worker/ingestion/utils' import { eventDroppedCounter } from '../../metrics' -import { createSessionReplayEvent, RRWebEventType } from '../process-event' +import { RRWebEventType, createSessionReplayEvent } from '../process-event' import { IncomingRecordingMessage } from '../types' import { OffsetHighWaterMarker } from './offset-high-water-marker' diff --git a/plugin-server/src/main/ingestion-queues/session-recording/session-recordings-consumer.ts b/plugin-server/src/main/ingestion-queues/session-recording/session-recordings-consumer.ts index bf81b23533..4575f0cb76 100644 --- a/plugin-server/src/main/ingestion-queues/session-recording/session-recordings-consumer.ts +++ b/plugin-server/src/main/ingestion-queues/session-recording/session-recordings-consumer.ts @@ -1,7 +1,7 @@ import crypto from 'crypto' import { Redis } from 'ioredis' +import { CODES, Message, TopicPartition, features, librdkafkaVersion } from 'node-rdkafka' import { mkdirSync, rmSync } from 'node:fs' -import { CODES, features, librdkafkaVersion, Message, TopicPartition } from 'node-rdkafka' import { Counter, Gauge, Histogram, Summary } from 'prom-client' import { buildIntegerMatcher } from '../../../config/config' diff --git a/plugin-server/src/main/ingestion-queues/session-recording/snapshot-segmenter.ts b/plugin-server/src/main/ingestion-queues/session-recording/snapshot-segmenter.ts index 69f96e1a7b..c81b064daf 100644 --- a/plugin-server/src/main/ingestion-queues/session-recording/snapshot-segmenter.ts +++ b/plugin-server/src/main/ingestion-queues/session-recording/snapshot-segmenter.ts @@ -5,7 +5,6 @@ * It has been modified to not need the same dependencies * Any changes may need to be sync'd between the two */ - import { RRWebEvent } from '../../../types' const activeSources = [1, 2, 3, 4, 5, 6, 7, 12] diff --git a/plugin-server/src/main/ingestion-queues/session-recording/types.ts b/plugin-server/src/main/ingestion-queues/session-recording/types.ts index 7618f7d43d..ca6b5bee82 100644 --- a/plugin-server/src/main/ingestion-queues/session-recording/types.ts +++ b/plugin-server/src/main/ingestion-queues/session-recording/types.ts @@ -1,5 +1,4 @@ // This is the incoming message from Kafka - import { RRWebEvent } from '../../../types' export type IncomingRecordingMessage = { diff --git a/plugin-server/src/main/ingestion-queues/session-recording/utils.ts b/plugin-server/src/main/ingestion-queues/session-recording/utils.ts index 97f01383c0..1989985495 100644 --- a/plugin-server/src/main/ingestion-queues/session-recording/utils.ts +++ b/plugin-server/src/main/ingestion-queues/session-recording/utils.ts @@ -4,7 +4,7 @@ import path from 'path' import { Counter } from 'prom-client' import { KafkaProducerWrapper } from '../../../kafka/producer' -import { PipelineEvent, RawEventMessage, RRWebEvent } from '../../../types' +import { PipelineEvent, RRWebEvent, RawEventMessage } from '../../../types' import { parseJSON } from '../../../utils/json-parse' import { logger } from '../../../utils/logger' import { captureIngestionWarning } from '../../../worker/ingestion/utils' diff --git a/plugin-server/src/main/utils.ts b/plugin-server/src/main/utils.ts index 185cb6d744..db7a9d328f 100644 --- a/plugin-server/src/main/utils.ts +++ b/plugin-server/src/main/utils.ts @@ -1,4 +1,4 @@ -import { exponentialBuckets, Histogram } from 'prom-client' +import { Histogram, exponentialBuckets } from 'prom-client' import { SessionRecordingV2MetadataSwitchoverDate } from '~/types' diff --git a/plugin-server/src/server.ts b/plugin-server/src/server.ts index 97883793bf..0227dd3410 100644 --- a/plugin-server/src/server.ts +++ b/plugin-server/src/server.ts @@ -11,8 +11,8 @@ import { getPluginServerCapabilities } from './capabilities' import { CdpApi } from './cdp/cdp-api' import { CdpAggregationWriterConsumer } from './cdp/consumers/cdp-aggregation-writer.consumer' import { CdpBehaviouralEventsConsumer } from './cdp/consumers/cdp-behavioural-events.consumer' -import { CdpCyclotronWorker } from './cdp/consumers/cdp-cyclotron-worker.consumer' import { CdpCyclotronWorkerHogFlow } from './cdp/consumers/cdp-cyclotron-worker-hogflow.consumer' +import { CdpCyclotronWorker } from './cdp/consumers/cdp-cyclotron-worker.consumer' import { CdpEventsConsumer } from './cdp/consumers/cdp-events.consumer' import { CdpInternalEventsConsumer } from './cdp/consumers/cdp-internal-event.consumer' import { CdpLegacyEventsConsumer } from './cdp/consumers/cdp-legacy-event.consumer' @@ -26,8 +26,8 @@ import { import { IngestionConsumer } from './ingestion/ingestion-consumer' import { KafkaProducerWrapper } from './kafka/producer' import { startAsyncWebhooksHandlerConsumer } from './main/ingestion-queues/on-event-handler-consumer' -import { SessionRecordingIngester } from './main/ingestion-queues/session-recording/session-recordings-consumer' import { SessionRecordingIngester as SessionRecordingIngesterV2 } from './main/ingestion-queues/session-recording-v2/consumer' +import { SessionRecordingIngester } from './main/ingestion-queues/session-recording/session-recordings-consumer' import { Hub, PluginServerService, PluginsServerConfig } from './types' import { ServerCommands } from './utils/commands' import { closeHub, createHub } from './utils/db/hub' diff --git a/plugin-server/src/types.ts b/plugin-server/src/types.ts index 4f4357d5c6..933c3e7bd0 100644 --- a/plugin-server/src/types.ts +++ b/plugin-server/src/types.ts @@ -1,3 +1,11 @@ +import { Pool as GenericPool } from 'generic-pool' +import { Redis } from 'ioredis' +import { Kafka } from 'kafkajs' +import { DateTime } from 'luxon' +import { Message } from 'node-rdkafka' +import { VM } from 'vm2' +import { z } from 'zod' + import { Element, PluginAttachment, @@ -9,13 +17,6 @@ import { Properties, Webhook, } from '@posthog/plugin-scaffold' -import { Pool as GenericPool } from 'generic-pool' -import { Redis } from 'ioredis' -import { Kafka } from 'kafkajs' -import { DateTime } from 'luxon' -import { Message } from 'node-rdkafka' -import { VM } from 'vm2' -import { z } from 'zod' import { EncryptedFields } from './cdp/encryption-utils' import { IntegrationManagerService } from './cdp/services/managers/integration-manager.service' diff --git a/plugin-server/src/utils/db/db.ts b/plugin-server/src/utils/db/db.ts index 1fa4f7bbff..7cd537ee66 100644 --- a/plugin-server/src/utils/db/db.ts +++ b/plugin-server/src/utils/db/db.ts @@ -1,9 +1,10 @@ -import { CacheOptions } from '@posthog/plugin-scaffold' import { Pool as GenericPool } from 'generic-pool' import Redis from 'ioredis' import { DateTime } from 'luxon' import { QueryResult } from 'pg' +import { CacheOptions } from '@posthog/plugin-scaffold' + import { KAFKA_PLUGIN_LOG_ENTRIES } from '../../config/kafka-topics' import { KafkaProducerWrapper, TopicMessage } from '../../kafka/producer' import { @@ -30,7 +31,7 @@ import { parseJSON } from '../json-parse' import { logger } from '../logger' import { instrumentQuery } from '../metrics' import { captureException } from '../posthog' -import { tryTwice, UUID, UUIDT } from '../utils' +import { UUID, UUIDT, tryTwice } from '../utils' import { OrganizationPluginsAccessLevel } from './../../types' import { RedisOperationError } from './error' import { pluginLogEntryCounter } from './metrics' diff --git a/plugin-server/src/utils/db/postgres.ts b/plugin-server/src/utils/db/postgres.ts index 1027775620..d60f896607 100644 --- a/plugin-server/src/utils/db/postgres.ts +++ b/plugin-server/src/utils/db/postgres.ts @@ -1,5 +1,4 @@ // Postgres - import { Client, Pool, PoolClient, QueryConfig, QueryResult, QueryResultRow } from 'pg' import { PluginsServerConfig } from '../../types' diff --git a/plugin-server/src/utils/db/utils.ts b/plugin-server/src/utils/db/utils.ts index 5123032e20..c1443b53e0 100644 --- a/plugin-server/src/utils/db/utils.ts +++ b/plugin-server/src/utils/db/utils.ts @@ -1,6 +1,7 @@ -import { Properties } from '@posthog/plugin-scaffold' import { Counter } from 'prom-client' +import { Properties } from '@posthog/plugin-scaffold' + import { TopicMessage } from '~/kafka/producer' import { defaultConfig } from '../../config/config' diff --git a/plugin-server/src/utils/event.ts b/plugin-server/src/utils/event.ts index faec3c51ef..86a105537a 100644 --- a/plugin-server/src/utils/event.ts +++ b/plugin-server/src/utils/event.ts @@ -1,7 +1,8 @@ -import { PluginEvent, PostHogEvent, ProcessedPluginEvent } from '@posthog/plugin-scaffold' import { Message } from 'node-rdkafka' import { Counter } from 'prom-client' +import { PluginEvent, PostHogEvent, ProcessedPluginEvent } from '@posthog/plugin-scaffold' + import { setUsageInNonPersonEventsCounter } from '../main/ingestion-queues/metrics' import { ClickHouseEvent, diff --git a/plugin-server/src/utils/geoip.test.ts b/plugin-server/src/utils/geoip.test.ts index 80d56634e1..e12ce0f9f5 100644 --- a/plugin-server/src/utils/geoip.test.ts +++ b/plugin-server/src/utils/geoip.test.ts @@ -2,7 +2,7 @@ import { Reader } from '@maxmind/geoip2-node' import { defaultConfig } from '../config/config' import { PluginsServerConfig } from '../types' -import { GeoIp, GeoIPService } from './geoip' +import { GeoIPService, GeoIp } from './geoip' describe('GeoIp', () => { let service: GeoIPService diff --git a/plugin-server/src/utils/request.test.ts b/plugin-server/src/utils/request.test.ts index 5e22972c6b..1cbf605bab 100644 --- a/plugin-server/src/utils/request.test.ts +++ b/plugin-server/src/utils/request.test.ts @@ -1,3 +1,8 @@ +import dns from 'dns/promises' +import { range } from 'lodash' + +import { SecureRequestError, fetch, legacyFetch, raiseIfUserProvidedUrlUnsafe } from './request' + const realDnsLookup = jest.requireActual('dns/promises').lookup jest.mock('dns/promises', () => ({ lookup: jest.fn((hostname: string, options?: any) => { @@ -5,11 +10,6 @@ jest.mock('dns/promises', () => ({ }), })) -import dns from 'dns/promises' -import { range } from 'lodash' - -import { fetch, legacyFetch, raiseIfUserProvidedUrlUnsafe, SecureRequestError } from './request' - describe('fetch', () => { beforeEach(() => { jest.setTimeout(1000) diff --git a/plugin-server/src/utils/request.ts b/plugin-server/src/utils/request.ts index 392a50f65c..71756c3042 100644 --- a/plugin-server/src/utils/request.ts +++ b/plugin-server/src/utils/request.ts @@ -5,23 +5,24 @@ import net from 'node:net' import { Counter } from 'prom-client' // eslint-disable-next-line no-restricted-imports import { - type HeadersInit, Agent, - errors, - fetch as undiciFetch, - request, + type HeadersInit, RequestInfo, RequestInit, Response, + errors, + request, + fetch as undiciFetch, } from 'undici' -// eslint-disable-next-line no-restricted-imports -export { Response } from 'undici' import { URL } from 'url' import { defaultConfig } from '../config/config' import { isProdEnv } from './env-utils' import { parseJSON } from './json-parse' +// eslint-disable-next-line no-restricted-imports +export { Response } from 'undici' + const unsafeRequestCounter = new Counter({ name: 'node_request_unsafe', help: 'Total number of unsafe requests detected and blocked', diff --git a/plugin-server/src/utils/utils.ts b/plugin-server/src/utils/utils.ts index 2b201fdb7b..79f8149868 100644 --- a/plugin-server/src/utils/utils.ts +++ b/plugin-server/src/utils/utils.ts @@ -1,10 +1,11 @@ -import { Properties } from '@posthog/plugin-scaffold' import { randomBytes } from 'crypto' import crypto from 'crypto' import { DateTime } from 'luxon' import { Pool } from 'pg' import { Readable } from 'stream' +import { Properties } from '@posthog/plugin-scaffold' + import { ClickHouseTimestamp, ClickHouseTimestampSecondPrecision, diff --git a/plugin-server/src/worker/ingestion/action-matcher.ts b/plugin-server/src/worker/ingestion/action-matcher.ts index b71d825781..befdf1f731 100644 --- a/plugin-server/src/worker/ingestion/action-matcher.ts +++ b/plugin-server/src/worker/ingestion/action-matcher.ts @@ -1,9 +1,10 @@ -import { Properties } from '@posthog/plugin-scaffold' import escapeStringRegexp from 'escape-string-regexp' import equal from 'fast-deep-equal' import { Summary } from 'prom-client' import RE2 from 're2' +import { Properties } from '@posthog/plugin-scaffold' + import { Action, ActionStep, diff --git a/plugin-server/src/worker/ingestion/app-metrics.ts b/plugin-server/src/worker/ingestion/app-metrics.ts index ae01e4c2b4..2c033f5b62 100644 --- a/plugin-server/src/worker/ingestion/app-metrics.ts +++ b/plugin-server/src/worker/ingestion/app-metrics.ts @@ -7,7 +7,7 @@ import { TeamId, TimestampFormat } from '../../types' import { cleanErrorStackTrace } from '../../utils/db/error' import { logger } from '../../utils/logger' import { captureException } from '../../utils/posthog' -import { castTimestampOrNow, UUIDT } from '../../utils/utils' +import { UUIDT, castTimestampOrNow } from '../../utils/utils' export interface AppMetricIdentifier { teamId: TeamId diff --git a/plugin-server/src/worker/ingestion/event-pipeline/dropOldEventsStep.ts b/plugin-server/src/worker/ingestion/event-pipeline/dropOldEventsStep.ts index 8f88901ee1..65c755aef5 100644 --- a/plugin-server/src/worker/ingestion/event-pipeline/dropOldEventsStep.ts +++ b/plugin-server/src/worker/ingestion/event-pipeline/dropOldEventsStep.ts @@ -1,6 +1,7 @@ -import { PluginEvent } from '@posthog/plugin-scaffold' import { DateTime } from 'luxon' +import { PluginEvent } from '@posthog/plugin-scaffold' + import { Team } from '../../../types' import { parseEventTimestamp } from '../timestamps' import { captureIngestionWarning } from '../utils' diff --git a/plugin-server/src/worker/ingestion/event-pipeline/normalizeEventStep.ts b/plugin-server/src/worker/ingestion/event-pipeline/normalizeEventStep.ts index ee24a1e293..0fde5b7deb 100644 --- a/plugin-server/src/worker/ingestion/event-pipeline/normalizeEventStep.ts +++ b/plugin-server/src/worker/ingestion/event-pipeline/normalizeEventStep.ts @@ -1,6 +1,7 @@ -import { PluginEvent } from '@posthog/plugin-scaffold' import { DateTime } from 'luxon' +import { PluginEvent } from '@posthog/plugin-scaffold' + import { normalizeEvent, normalizeProcessPerson } from '../../../utils/event' import { logger } from '../../../utils/logger' import { parseEventTimestamp } from '../timestamps' diff --git a/plugin-server/src/worker/ingestion/event-pipeline/processPersonsStep.ts b/plugin-server/src/worker/ingestion/event-pipeline/processPersonsStep.ts index f12021bc12..8c2168c05b 100644 --- a/plugin-server/src/worker/ingestion/event-pipeline/processPersonsStep.ts +++ b/plugin-server/src/worker/ingestion/event-pipeline/processPersonsStep.ts @@ -1,6 +1,7 @@ -import { PluginEvent } from '@posthog/plugin-scaffold' import { DateTime } from 'luxon' +import { PluginEvent } from '@posthog/plugin-scaffold' + import { Person, Team } from '~/types' import { PersonContext } from '../persons/person-context' diff --git a/plugin-server/src/worker/ingestion/event-pipeline/transformEventStep.ts b/plugin-server/src/worker/ingestion/event-pipeline/transformEventStep.ts index 405e9eaef7..362d643b90 100644 --- a/plugin-server/src/worker/ingestion/event-pipeline/transformEventStep.ts +++ b/plugin-server/src/worker/ingestion/event-pipeline/transformEventStep.ts @@ -2,6 +2,7 @@ import { PluginEvent } from '@posthog/plugin-scaffold' import { HogTransformerService, TransformationResult } from '../../../cdp/hog-transformations/hog-transformer.service' import { droppedEventCounter } from './metrics' + export async function transformEventStep( event: PluginEvent, hogTransformer: HogTransformerService | null diff --git a/plugin-server/src/worker/ingestion/groups/batch-writing-group-store.test.ts b/plugin-server/src/worker/ingestion/groups/batch-writing-group-store.test.ts index d90e633579..ffc9409e3d 100644 --- a/plugin-server/src/worker/ingestion/groups/batch-writing-group-store.test.ts +++ b/plugin-server/src/worker/ingestion/groups/batch-writing-group-store.test.ts @@ -1,20 +1,21 @@ +// sort-imports-ignore import { DateTime } from 'luxon' import { Group, ProjectId, TeamId } from '../../../types' import { DB } from '../../../utils/db/db' import { MessageSizeTooLarge } from '../../../utils/db/error' import { RaceConditionError } from '../../../utils/utils' + import { BatchWritingGroupStore, BatchWritingGroupStoreForBatch } from './batch-writing-group-store' import { groupCacheOperationsCounter } from './metrics' import { ClickhouseGroupRepository } from './repositories/clickhouse-group-repository' import { GroupRepository } from './repositories/group-repository.interface' -// Mock the utils module +// Mock the module before importing jest.mock('../utils', () => ({ captureIngestionWarning: jest.fn().mockResolvedValue(undefined), })) -// Import the mocked function import { captureIngestionWarning } from '../utils' // Mock the DB class diff --git a/plugin-server/src/worker/ingestion/groups/batch-writing-group-store.ts b/plugin-server/src/worker/ingestion/groups/batch-writing-group-store.ts index 380edf4037..f95e71ebd4 100644 --- a/plugin-server/src/worker/ingestion/groups/batch-writing-group-store.ts +++ b/plugin-server/src/worker/ingestion/groups/batch-writing-group-store.ts @@ -1,7 +1,8 @@ -import { Properties } from '@posthog/plugin-scaffold' import { DateTime } from 'luxon' import pLimit from 'p-limit' +import { Properties } from '@posthog/plugin-scaffold' + import { GroupTypeIndex, Hub, TeamId } from '../../../types' import { DB } from '../../../utils/db/db' import { MessageSizeTooLarge } from '../../../utils/db/error' @@ -11,9 +12,9 @@ import { RaceConditionError } from '../../../utils/utils' import { FlushResult } from '../persons/persons-store-for-batch' import { captureIngestionWarning } from '../utils' import { logMissingRow, logVersionMismatch } from './group-logging' -import { GroupStore } from './group-store.interface' import { CacheMetrics, GroupStoreForBatch } from './group-store-for-batch.interface' -import { calculateUpdate, fromGroup, GroupUpdate } from './group-update' +import { GroupStore } from './group-store.interface' +import { GroupUpdate, calculateUpdate, fromGroup } from './group-update' import { groupCacheOperationsCounter, groupCacheSizeHistogram, @@ -22,8 +23,8 @@ import { groupOptimisticUpdateConflictsPerBatchCounter, } from './metrics' import { ClickhouseGroupRepository } from './repositories/clickhouse-group-repository' -import { GroupRepository } from './repositories/group-repository.interface' import { GroupRepositoryTransaction } from './repositories/group-repository-transaction.interface' +import { GroupRepository } from './repositories/group-repository.interface' export type GroupHub = Pick diff --git a/plugin-server/src/worker/ingestion/groups/group-store-for-batch.interface.ts b/plugin-server/src/worker/ingestion/groups/group-store-for-batch.interface.ts index b2383003c0..d82bc28516 100644 --- a/plugin-server/src/worker/ingestion/groups/group-store-for-batch.interface.ts +++ b/plugin-server/src/worker/ingestion/groups/group-store-for-batch.interface.ts @@ -1,6 +1,7 @@ -import { Properties } from '@posthog/plugin-scaffold' import { DateTime } from 'luxon' +import { Properties } from '@posthog/plugin-scaffold' + import { GroupTypeIndex, ProjectId, TeamId } from '../../../types' import { BatchWritingStore } from '../stores/batch-writing-store' diff --git a/plugin-server/src/worker/ingestion/groups/group-update.ts b/plugin-server/src/worker/ingestion/groups/group-update.ts index 5649fa0ba0..a093490f6d 100644 --- a/plugin-server/src/worker/ingestion/groups/group-update.ts +++ b/plugin-server/src/worker/ingestion/groups/group-update.ts @@ -1,6 +1,7 @@ -import { Properties } from '@posthog/plugin-scaffold' import { DateTime } from 'luxon' +import { Properties } from '@posthog/plugin-scaffold' + import { Group, GroupTypeIndex, TeamId } from '../../../types' export interface GroupUpdate { diff --git a/plugin-server/src/worker/ingestion/groups/repositories/clickhouse-group-repository.ts b/plugin-server/src/worker/ingestion/groups/repositories/clickhouse-group-repository.ts index fadcc63f92..7e66a444a6 100644 --- a/plugin-server/src/worker/ingestion/groups/repositories/clickhouse-group-repository.ts +++ b/plugin-server/src/worker/ingestion/groups/repositories/clickhouse-group-repository.ts @@ -1,6 +1,7 @@ -import { Properties } from '@posthog/plugin-scaffold' import { DateTime } from 'luxon' +import { Properties } from '@posthog/plugin-scaffold' + import { KAFKA_GROUPS } from '../../../../config/kafka-topics' import { KafkaProducerWrapper } from '../../../../kafka/producer' import { GroupTypeIndex, TeamId, TimestampFormat } from '../../../../types' diff --git a/plugin-server/src/worker/ingestion/groups/repositories/group-repository-transaction.interface.ts b/plugin-server/src/worker/ingestion/groups/repositories/group-repository-transaction.interface.ts index 4523e6c053..c5d794c713 100644 --- a/plugin-server/src/worker/ingestion/groups/repositories/group-repository-transaction.interface.ts +++ b/plugin-server/src/worker/ingestion/groups/repositories/group-repository-transaction.interface.ts @@ -1,6 +1,7 @@ -import { Properties } from '@posthog/plugin-scaffold' import { DateTime } from 'luxon' +import { Properties } from '@posthog/plugin-scaffold' + import { Group, GroupTypeIndex, PropertiesLastOperation, PropertiesLastUpdatedAt, TeamId } from '../../../../types' export interface GroupRepositoryTransaction { diff --git a/plugin-server/src/worker/ingestion/groups/repositories/group-repository.interface.ts b/plugin-server/src/worker/ingestion/groups/repositories/group-repository.interface.ts index df938a2f61..53f7686d8f 100644 --- a/plugin-server/src/worker/ingestion/groups/repositories/group-repository.interface.ts +++ b/plugin-server/src/worker/ingestion/groups/repositories/group-repository.interface.ts @@ -1,6 +1,7 @@ -import { Properties } from '@posthog/plugin-scaffold' import { DateTime } from 'luxon' +import { Properties } from '@posthog/plugin-scaffold' + import { Group, GroupTypeIndex, PropertiesLastOperation, PropertiesLastUpdatedAt, TeamId } from '../../../../types' import { GroupRepositoryTransaction } from './group-repository-transaction.interface' diff --git a/plugin-server/src/worker/ingestion/groups/repositories/postgres-group-repository-transaction.ts b/plugin-server/src/worker/ingestion/groups/repositories/postgres-group-repository-transaction.ts index 312459d206..d1d4b8eaad 100644 --- a/plugin-server/src/worker/ingestion/groups/repositories/postgres-group-repository-transaction.ts +++ b/plugin-server/src/worker/ingestion/groups/repositories/postgres-group-repository-transaction.ts @@ -1,6 +1,7 @@ -import { Properties } from '@posthog/plugin-scaffold' import { DateTime } from 'luxon' +import { Properties } from '@posthog/plugin-scaffold' + import { Group, GroupTypeIndex, PropertiesLastOperation, PropertiesLastUpdatedAt, TeamId } from '../../../../types' import { TransactionClient } from '../../../../utils/db/postgres' import { GroupRepositoryTransaction } from './group-repository-transaction.interface' diff --git a/plugin-server/src/worker/ingestion/groups/repositories/postgres-group-repository.ts b/plugin-server/src/worker/ingestion/groups/repositories/postgres-group-repository.ts index fd548ff1a1..5ff91a2afa 100644 --- a/plugin-server/src/worker/ingestion/groups/repositories/postgres-group-repository.ts +++ b/plugin-server/src/worker/ingestion/groups/repositories/postgres-group-repository.ts @@ -1,7 +1,8 @@ -import { Properties } from '@posthog/plugin-scaffold' import { DateTime } from 'luxon' import { QueryResult } from 'pg' +import { Properties } from '@posthog/plugin-scaffold' + import { Group, GroupTypeIndex, @@ -12,8 +13,8 @@ import { } from '../../../../types' import { PostgresRouter, PostgresUse, TransactionClient } from '../../../../utils/db/postgres' import { RaceConditionError } from '../../../../utils/utils' -import { GroupRepository } from './group-repository.interface' import { GroupRepositoryTransaction } from './group-repository-transaction.interface' +import { GroupRepository } from './group-repository.interface' import { PostgresGroupRepositoryTransaction } from './postgres-group-repository-transaction' import { RawPostgresGroupRepository } from './raw-postgres-group-repository.interface' diff --git a/plugin-server/src/worker/ingestion/groups/repositories/raw-postgres-group-repository.interface.ts b/plugin-server/src/worker/ingestion/groups/repositories/raw-postgres-group-repository.interface.ts index b4fec6ff73..e7cda2607b 100644 --- a/plugin-server/src/worker/ingestion/groups/repositories/raw-postgres-group-repository.interface.ts +++ b/plugin-server/src/worker/ingestion/groups/repositories/raw-postgres-group-repository.interface.ts @@ -1,6 +1,7 @@ -import { Properties } from '@posthog/plugin-scaffold' import { DateTime } from 'luxon' +import { Properties } from '@posthog/plugin-scaffold' + import { Group, GroupTypeIndex, PropertiesLastOperation, PropertiesLastUpdatedAt, TeamId } from '../../../../types' import { TransactionClient } from '../../../../utils/db/postgres' diff --git a/plugin-server/src/worker/ingestion/persons/batch-writing-person-store.ts b/plugin-server/src/worker/ingestion/persons/batch-writing-person-store.ts index 45c25e55d6..fa69a675ba 100644 --- a/plugin-server/src/worker/ingestion/persons/batch-writing-person-store.ts +++ b/plugin-server/src/worker/ingestion/persons/batch-writing-person-store.ts @@ -1,7 +1,8 @@ -import { Properties } from '@posthog/plugin-scaffold' import { DateTime } from 'luxon' import pLimit from 'p-limit' +import { Properties } from '@posthog/plugin-scaffold' + import { NoRowsUpdatedError } from '~/utils/utils' import { KafkaProducerWrapper, TopicMessage } from '../../../kafka/producer' @@ -32,7 +33,7 @@ import { personWriteMethodAttemptCounter, totalPersonUpdateLatencyPerBatchHistogram, } from './metrics' -import { fromInternalPerson, PersonUpdate, toInternalPerson } from './person-update-batch' +import { PersonUpdate, fromInternalPerson, toInternalPerson } from './person-update-batch' import { PersonsStore } from './persons-store' import { FlushResult, PersonsStoreForBatch } from './persons-store-for-batch' import { PersonsStoreTransaction } from './persons-store-transaction' diff --git a/plugin-server/src/worker/ingestion/persons/metrics.ts b/plugin-server/src/worker/ingestion/persons/metrics.ts index f19c073704..fe36194a6c 100644 --- a/plugin-server/src/worker/ingestion/persons/metrics.ts +++ b/plugin-server/src/worker/ingestion/persons/metrics.ts @@ -1,4 +1,4 @@ -import { Counter, exponentialBuckets, Histogram, Summary } from 'prom-client' +import { Counter, Histogram, Summary, exponentialBuckets } from 'prom-client' import { InternalPerson } from '~/types' diff --git a/plugin-server/src/worker/ingestion/persons/person-context.ts b/plugin-server/src/worker/ingestion/persons/person-context.ts index aaf92621a1..652ef68867 100644 --- a/plugin-server/src/worker/ingestion/persons/person-context.ts +++ b/plugin-server/src/worker/ingestion/persons/person-context.ts @@ -1,6 +1,7 @@ -import { PluginEvent, Properties } from '@posthog/plugin-scaffold' import { DateTime } from 'luxon' +import { PluginEvent, Properties } from '@posthog/plugin-scaffold' + import { KafkaProducerWrapper } from '../../../kafka/producer' import { Team } from '../../../types' import { PersonsStoreForBatch } from './persons-store-for-batch' diff --git a/plugin-server/src/worker/ingestion/persons/person-create-service.ts b/plugin-server/src/worker/ingestion/persons/person-create-service.ts index e29dc647e5..2c7ff5841e 100644 --- a/plugin-server/src/worker/ingestion/persons/person-create-service.ts +++ b/plugin-server/src/worker/ingestion/persons/person-create-service.ts @@ -1,6 +1,7 @@ -import { Properties } from '@posthog/plugin-scaffold' import { DateTime } from 'luxon' +import { Properties } from '@posthog/plugin-scaffold' + import { InternalPerson, PropertyUpdateOperation } from '../../../types' import { uuidFromDistinctId } from '../person-uuid' import { captureIngestionWarning } from '../utils' diff --git a/plugin-server/src/worker/ingestion/persons/person-merge-service.ts b/plugin-server/src/worker/ingestion/persons/person-merge-service.ts index ca7d891574..12955b8ef2 100644 --- a/plugin-server/src/worker/ingestion/persons/person-merge-service.ts +++ b/plugin-server/src/worker/ingestion/persons/person-merge-service.ts @@ -1,7 +1,8 @@ -import { Properties } from '@posthog/plugin-scaffold' import { DateTime } from 'luxon' import { Counter } from 'prom-client' +import { Properties } from '@posthog/plugin-scaffold' + import { InternalPerson } from '../../../types' import { timeoutGuard } from '../../../utils/db/utils' import { logger } from '../../../utils/logger' diff --git a/plugin-server/src/worker/ingestion/persons/person-update-batch.ts b/plugin-server/src/worker/ingestion/persons/person-update-batch.ts index 829266d321..cf09747235 100644 --- a/plugin-server/src/worker/ingestion/persons/person-update-batch.ts +++ b/plugin-server/src/worker/ingestion/persons/person-update-batch.ts @@ -1,6 +1,7 @@ -import { Properties } from '@posthog/plugin-scaffold' import { DateTime } from 'luxon' +import { Properties } from '@posthog/plugin-scaffold' + import { InternalPerson, PropertiesLastOperation, PropertiesLastUpdatedAt } from '../../../types' export interface PersonUpdate { diff --git a/plugin-server/src/worker/ingestion/persons/persons-store-for-batch.ts b/plugin-server/src/worker/ingestion/persons/persons-store-for-batch.ts index d9ef36c31d..4f8f1a48cd 100644 --- a/plugin-server/src/worker/ingestion/persons/persons-store-for-batch.ts +++ b/plugin-server/src/worker/ingestion/persons/persons-store-for-batch.ts @@ -1,6 +1,7 @@ -import { Properties } from '@posthog/plugin-scaffold' import { DateTime } from 'luxon' +import { Properties } from '@posthog/plugin-scaffold' + import { TopicMessage } from '../../../kafka/producer' import { InternalPerson, PropertiesLastOperation, PropertiesLastUpdatedAt, Team } from '../../../types' import { CreatePersonResult, MoveDistinctIdsResult } from '../../../utils/db/db' diff --git a/plugin-server/src/worker/ingestion/persons/persons-store-transaction.ts b/plugin-server/src/worker/ingestion/persons/persons-store-transaction.ts index 114c144d5d..3aa3daa326 100644 --- a/plugin-server/src/worker/ingestion/persons/persons-store-transaction.ts +++ b/plugin-server/src/worker/ingestion/persons/persons-store-transaction.ts @@ -1,6 +1,7 @@ -import { Properties } from '@posthog/plugin-scaffold' import { DateTime } from 'luxon' +import { Properties } from '@posthog/plugin-scaffold' + import { TopicMessage } from '../../../kafka/producer' import { InternalPerson, PropertiesLastOperation, PropertiesLastUpdatedAt, Team } from '../../../types' import { CreatePersonResult, MoveDistinctIdsResult } from '../../../utils/db/db' diff --git a/plugin-server/src/worker/ingestion/persons/repositories/person-repository-transaction.ts b/plugin-server/src/worker/ingestion/persons/repositories/person-repository-transaction.ts index 30daba444e..aae19855d4 100644 --- a/plugin-server/src/worker/ingestion/persons/repositories/person-repository-transaction.ts +++ b/plugin-server/src/worker/ingestion/persons/repositories/person-repository-transaction.ts @@ -1,6 +1,7 @@ -import { Properties } from '@posthog/plugin-scaffold' import { DateTime } from 'luxon' +import { Properties } from '@posthog/plugin-scaffold' + import { TopicMessage } from '../../../../kafka/producer' import { InternalPerson, PropertiesLastOperation, PropertiesLastUpdatedAt, Team } from '../../../../types' import { CreatePersonResult, MoveDistinctIdsResult } from '../../../../utils/db/db' diff --git a/plugin-server/src/worker/ingestion/persons/repositories/person-repository.ts b/plugin-server/src/worker/ingestion/persons/repositories/person-repository.ts index 5fe412a3e5..e02bbbc808 100644 --- a/plugin-server/src/worker/ingestion/persons/repositories/person-repository.ts +++ b/plugin-server/src/worker/ingestion/persons/repositories/person-repository.ts @@ -1,6 +1,7 @@ -import { Properties } from '@posthog/plugin-scaffold' import { DateTime } from 'luxon' +import { Properties } from '@posthog/plugin-scaffold' + import { TopicMessage } from '../../../../kafka/producer' import { InternalPerson, PropertiesLastOperation, PropertiesLastUpdatedAt, Team } from '../../../../types' import { CreatePersonResult, MoveDistinctIdsResult } from '../../../../utils/db/db' diff --git a/plugin-server/src/worker/ingestion/persons/repositories/postgres-person-repository-transaction.ts b/plugin-server/src/worker/ingestion/persons/repositories/postgres-person-repository-transaction.ts index 73295271b8..427fb98df3 100644 --- a/plugin-server/src/worker/ingestion/persons/repositories/postgres-person-repository-transaction.ts +++ b/plugin-server/src/worker/ingestion/persons/repositories/postgres-person-repository-transaction.ts @@ -1,6 +1,7 @@ -import { Properties } from '@posthog/plugin-scaffold' import { DateTime } from 'luxon' +import { Properties } from '@posthog/plugin-scaffold' + import { TopicMessage } from '../../../../kafka/producer' import { InternalPerson, PropertiesLastOperation, PropertiesLastUpdatedAt, Team } from '../../../../types' import { CreatePersonResult, MoveDistinctIdsResult } from '../../../../utils/db/db' diff --git a/plugin-server/src/worker/ingestion/persons/repositories/postgres-person-repository.ts b/plugin-server/src/worker/ingestion/persons/repositories/postgres-person-repository.ts index 952f7ab604..05e56619a5 100644 --- a/plugin-server/src/worker/ingestion/persons/repositories/postgres-person-repository.ts +++ b/plugin-server/src/worker/ingestion/persons/repositories/postgres-person-repository.ts @@ -1,7 +1,8 @@ -import { Properties } from '@posthog/plugin-scaffold' import { DateTime } from 'luxon' import { QueryResult } from 'pg' +import { Properties } from '@posthog/plugin-scaffold' + import { KAFKA_PERSON_DISTINCT_ID } from '../../../../config/kafka-topics' import { TopicMessage } from '../../../../kafka/producer' import { diff --git a/plugin-server/src/worker/ingestion/persons/repositories/raw-postgres-person-repository.ts b/plugin-server/src/worker/ingestion/persons/repositories/raw-postgres-person-repository.ts index dd4b5df30c..ca07143a13 100644 --- a/plugin-server/src/worker/ingestion/persons/repositories/raw-postgres-person-repository.ts +++ b/plugin-server/src/worker/ingestion/persons/repositories/raw-postgres-person-repository.ts @@ -1,6 +1,7 @@ -import { Properties } from '@posthog/plugin-scaffold' import { DateTime } from 'luxon' +import { Properties } from '@posthog/plugin-scaffold' + import { TopicMessage } from '../../../../kafka/producer' import { InternalPerson, PropertiesLastOperation, PropertiesLastUpdatedAt, Team } from '../../../../types' import { CreatePersonResult, MoveDistinctIdsResult } from '../../../../utils/db/db' diff --git a/plugin-server/src/worker/ingestion/process-event.ts b/plugin-server/src/worker/ingestion/process-event.ts index cfdb920bbc..8f70b7976c 100644 --- a/plugin-server/src/worker/ingestion/process-event.ts +++ b/plugin-server/src/worker/ingestion/process-event.ts @@ -1,7 +1,8 @@ -import { PluginEvent, Properties } from '@posthog/plugin-scaffold' import { DateTime } from 'luxon' import { Counter, Summary } from 'prom-client' +import { PluginEvent, Properties } from '@posthog/plugin-scaffold' + import { KafkaProducerWrapper } from '../../kafka/producer' import { Element, diff --git a/plugin-server/src/worker/ingestion/timestamps.ts b/plugin-server/src/worker/ingestion/timestamps.ts index 08dfb77ece..6b65a2ca25 100644 --- a/plugin-server/src/worker/ingestion/timestamps.ts +++ b/plugin-server/src/worker/ingestion/timestamps.ts @@ -1,6 +1,7 @@ -import { PluginEvent } from '@posthog/plugin-scaffold' import { DateTime, Duration } from 'luxon' +import { PluginEvent } from '@posthog/plugin-scaffold' + import { logger } from '../../utils/logger' import { captureException } from '../../utils/posthog' diff --git a/plugin-server/src/worker/ingestion/utils.ts b/plugin-server/src/worker/ingestion/utils.ts index b70761045e..ca8977d258 100644 --- a/plugin-server/src/worker/ingestion/utils.ts +++ b/plugin-server/src/worker/ingestion/utils.ts @@ -1,12 +1,13 @@ -import { PluginEvent, ProcessedPluginEvent } from '@posthog/plugin-scaffold' import { DateTime } from 'luxon' +import { PluginEvent, ProcessedPluginEvent } from '@posthog/plugin-scaffold' + import { KafkaProducerWrapper, TopicMessage } from '../../kafka/producer' import { PipelineEvent, TeamId, TimestampFormat } from '../../types' import { safeClickhouseString } from '../../utils/db/utils' import { logger } from '../../utils/logger' import { IngestionWarningLimiter } from '../../utils/token-bucket' -import { castTimestampOrNow, castTimestampToClickhouseFormat, UUIDT } from '../../utils/utils' +import { UUIDT, castTimestampOrNow, castTimestampToClickhouseFormat } from '../../utils/utils' import { KAFKA_EVENTS_DEAD_LETTER_QUEUE, KAFKA_INGESTION_WARNINGS } from './../../config/kafka-topics' function getClickhouseTimestampOrNull(isoTimestamp?: string): string | null { diff --git a/plugin-server/src/worker/ingestion/webhook-formatter.ts b/plugin-server/src/worker/ingestion/webhook-formatter.ts index a9c0f6d207..9bcd9cbb24 100644 --- a/plugin-server/src/worker/ingestion/webhook-formatter.ts +++ b/plugin-server/src/worker/ingestion/webhook-formatter.ts @@ -1,6 +1,7 @@ -import { Webhook } from '@posthog/plugin-scaffold' import { format } from 'util' +import { Webhook } from '@posthog/plugin-scaffold' + import { PostIngestionEvent, Team } from '../../types' import { getPropertyValueByPath, stringify } from '../../utils/utils' diff --git a/plugin-server/src/worker/plugins/loadPluginsFromDB.ts b/plugin-server/src/worker/plugins/loadPluginsFromDB.ts index b36fb0e251..735246b244 100644 --- a/plugin-server/src/worker/plugins/loadPluginsFromDB.ts +++ b/plugin-server/src/worker/plugins/loadPluginsFromDB.ts @@ -1,6 +1,7 @@ -import { PluginAttachment } from '@posthog/plugin-scaffold' import { Summary } from 'prom-client' +import { PluginAttachment } from '@posthog/plugin-scaffold' + import { Hub, Plugin, PluginConfig, PluginConfigId, PluginId, PluginMethod, TeamId } from '../../types' import { getActivePluginRows, getPluginAttachmentRows, getPluginConfigRows } from '../../utils/db/sql' diff --git a/plugin-server/src/worker/rusty-hook.ts b/plugin-server/src/worker/rusty-hook.ts index 3c0d7950aa..668373de4f 100644 --- a/plugin-server/src/worker/rusty-hook.ts +++ b/plugin-server/src/worker/rusty-hook.ts @@ -1,7 +1,8 @@ -import { Webhook } from '@posthog/plugin-scaffold' // eslint-disable-next-line no-restricted-imports import fetch from 'node-fetch' +import { Webhook } from '@posthog/plugin-scaffold' + import { buildIntegerMatcher } from '../config/config' import { PluginsServerConfig, ValueMatcher } from '../types' import { isProdEnv } from '../utils/env-utils' diff --git a/plugin-server/src/worker/vm/extensions/api.ts b/plugin-server/src/worker/vm/extensions/api.ts index 91f0dccc09..2bb7bc888c 100644 --- a/plugin-server/src/worker/vm/extensions/api.ts +++ b/plugin-server/src/worker/vm/extensions/api.ts @@ -1,5 +1,5 @@ import { Hub, PluginConfig } from '../../../types' -import { legacyFetch, Response } from '../../../utils/request' +import { Response, legacyFetch } from '../../../utils/request' const DEFAULT_API_HOST = 'https://app.posthog.com' diff --git a/plugin-server/src/worker/vm/extensions/helpers/api-key-manager.ts b/plugin-server/src/worker/vm/extensions/helpers/api-key-manager.ts index 817c2ac774..fcc08890c9 100644 --- a/plugin-server/src/worker/vm/extensions/helpers/api-key-manager.ts +++ b/plugin-server/src/worker/vm/extensions/helpers/api-key-manager.ts @@ -3,7 +3,7 @@ import crypto from 'crypto' import { DB } from '../../../../utils/db/db' import { PostgresUse } from '../../../../utils/db/postgres' import { timeoutGuard } from '../../../../utils/db/utils' -import { generateRandomToken, UUIDT } from '../../../../utils/utils' +import { UUIDT, generateRandomToken } from '../../../../utils/utils' import { OrganizationMembershipLevel, RawOrganization } from './../../../../types' const POSTHOG_BOT_USER_EMAIL_DOMAIN = 'posthogbot.user' diff --git a/plugin-server/src/worker/vm/extensions/posthog.ts b/plugin-server/src/worker/vm/extensions/posthog.ts index 7b00c2b758..0df3eb1460 100644 --- a/plugin-server/src/worker/vm/extensions/posthog.ts +++ b/plugin-server/src/worker/vm/extensions/posthog.ts @@ -1,8 +1,9 @@ -import { Properties } from '@posthog/plugin-scaffold' import crypto from 'crypto' import { DateTime } from 'luxon' import { Counter } from 'prom-client' +import { Properties } from '@posthog/plugin-scaffold' + import { Hub, PluginConfig, RawEventMessage } from '../../../types' import { UUIDT } from '../../../utils/utils' import { ApiExtension, createApi } from './api' diff --git a/plugin-server/src/worker/vm/extensions/storage.ts b/plugin-server/src/worker/vm/extensions/storage.ts index 451b2804ac..fa5960c1b0 100644 --- a/plugin-server/src/worker/vm/extensions/storage.ts +++ b/plugin-server/src/worker/vm/extensions/storage.ts @@ -1,6 +1,7 @@ -import { StorageExtension } from '@posthog/plugin-scaffold' import { Counter, Summary } from 'prom-client' +import { StorageExtension } from '@posthog/plugin-scaffold' + import { Hub, PluginConfig } from '../../../types' import { PostgresUse } from '../../../utils/db/postgres' import { parseJSON } from '../../../utils/json-parse' diff --git a/plugin-server/src/worker/vm/imports.ts b/plugin-server/src/worker/vm/imports.ts index 7c6d6b298d..4fb6b136b4 100644 --- a/plugin-server/src/worker/vm/imports.ts +++ b/plugin-server/src/worker/vm/imports.ts @@ -1,12 +1,13 @@ import * as pubsub from '@google-cloud/pubsub' import * as gcs from '@google-cloud/storage' -import * as scaffold from '@posthog/plugin-scaffold' import * as AWS from 'aws-sdk' import crypto from 'crypto' import * as genericPool from 'generic-pool' import { PassThrough } from 'stream' import * as url from 'url' +import * as scaffold from '@posthog/plugin-scaffold' + import { isTestEnv } from '../../utils/env-utils' import { legacyFetch } from '../../utils/request' import { writeToFile } from './extensions/test-utils' diff --git a/plugin-server/src/worker/vm/inline/user-agent.ts b/plugin-server/src/worker/vm/inline/user-agent.ts index 46035b7edf..01de8a4df7 100644 --- a/plugin-server/src/worker/vm/inline/user-agent.ts +++ b/plugin-server/src/worker/vm/inline/user-agent.ts @@ -1,6 +1,7 @@ -import { PluginEvent } from '@posthog/plugin-scaffold' import { detect } from 'detect-browser' +import { PluginEvent } from '@posthog/plugin-scaffold' + import { Hub, PluginConfig, PluginLogEntrySource, PluginLogEntryType, PluginMethods } from '../../../types' import { PluginInstance } from '../lazy' diff --git a/plugin-server/src/worker/vm/lazy.ts b/plugin-server/src/worker/vm/lazy.ts index 9ba40e505c..c0a2480376 100644 --- a/plugin-server/src/worker/vm/lazy.ts +++ b/plugin-server/src/worker/vm/lazy.ts @@ -1,8 +1,9 @@ -import { RetryError } from '@posthog/plugin-scaffold' import equal from 'fast-deep-equal' import { Counter, Summary } from 'prom-client' import { VM } from 'vm2' +import { RetryError } from '@posthog/plugin-scaffold' + import { Hub, PluginConfig, diff --git a/plugin-server/src/worker/vm/transforms/loop-timeout.ts b/plugin-server/src/worker/vm/transforms/loop-timeout.ts index bcbdc69503..1931bf8378 100644 --- a/plugin-server/src/worker/vm/transforms/loop-timeout.ts +++ b/plugin-server/src/worker/vm/transforms/loop-timeout.ts @@ -1,7 +1,6 @@ // Inspiration: // https://medium.com/@bvjebin/js-infinite-loops-killing-em-e1c2f5f2db7f // https://github.com/jsbin/loop-protect/blob/master/lib/index.js - import * as types from '@babel/types' import { PluginGen } from './common' diff --git a/plugin-server/src/worker/vm/transforms/promise-timeout.ts b/plugin-server/src/worker/vm/transforms/promise-timeout.ts index 112a603919..60421aefad 100644 --- a/plugin-server/src/worker/vm/transforms/promise-timeout.ts +++ b/plugin-server/src/worker/vm/transforms/promise-timeout.ts @@ -1,5 +1,4 @@ // inspired by: https://github.com/treywood/babel-plugin-bluebird-async-functions/ - import { PluginGen } from './common' const REPLACED = Symbol() diff --git a/plugin-server/src/worker/vm/vm.ts b/plugin-server/src/worker/vm/vm.ts index e362e470b5..635209450b 100644 --- a/plugin-server/src/worker/vm/vm.ts +++ b/plugin-server/src/worker/vm/vm.ts @@ -1,8 +1,9 @@ -import { RetryError } from '@posthog/plugin-scaffold' import { randomBytes } from 'crypto' import { Summary } from 'prom-client' import { VM } from 'vm2' +import { RetryError } from '@posthog/plugin-scaffold' + import { Hub, PluginConfig, PluginConfigVMResponse } from '../../types' import { createCache } from './extensions/cache' import { createConsole } from './extensions/console' diff --git a/plugin-server/tests/helpers/clickhouse.ts b/plugin-server/tests/helpers/clickhouse.ts index 034b952087..d61030dad9 100644 --- a/plugin-server/tests/helpers/clickhouse.ts +++ b/plugin-server/tests/helpers/clickhouse.ts @@ -1,12 +1,12 @@ -import { ClickHouseClient, createClient as createClickhouseClient, ExecResult } from '@clickhouse/client' +import { ClickHouseClient, ExecResult, createClient as createClickhouseClient } from '@clickhouse/client' import { performance } from 'perf_hooks' import { Readable } from 'stream' import { ClickHouseEvent, - ClickhouseGroup, ClickHousePerson, ClickHousePersonDistinctId2, + ClickhouseGroup, DeadLetterQueueEvent, InternalPerson, RawClickHouseEvent, diff --git a/plugin-server/tests/helpers/mocks/producer.mock.ts b/plugin-server/tests/helpers/mocks/producer.mock.ts index 5ff3468190..90d9f30671 100644 --- a/plugin-server/tests/helpers/mocks/producer.mock.ts +++ b/plugin-server/tests/helpers/mocks/producer.mock.ts @@ -3,11 +3,11 @@ * * If you just want to observe a real producer class then use `producer.spy.ts` */ +import { KafkaProducerObserver } from './producer.spy' import { HighLevelProducer } from 'node-rdkafka' import { KafkaProducerWrapper } from '../../../src/kafka/producer' -import { KafkaProducerObserver } from './producer.spy' const ActualKafkaProducerWrapper = jest.requireActual('../../../src/kafka/producer').KafkaProducerWrapper diff --git a/plugin-server/tests/helpers/mocks/producer.spy.ts b/plugin-server/tests/helpers/mocks/producer.spy.ts index 3d2f1203b7..e594a07810 100644 --- a/plugin-server/tests/helpers/mocks/producer.spy.ts +++ b/plugin-server/tests/helpers/mocks/producer.spy.ts @@ -4,7 +4,6 @@ * * It does not mock the producer itself, for that see `producer.mock.ts` */ - import { KafkaProducerWrapper, TopicMessage } from '../../../src/kafka/producer' import { parseJSON } from '../../../src/utils/json-parse' diff --git a/plugin-server/tests/main/ingestion-queues/session-recording/process-event.test.ts b/plugin-server/tests/main/ingestion-queues/session-recording/process-event.test.ts index a5b87a5117..aada5e2260 100644 --- a/plugin-server/tests/main/ingestion-queues/session-recording/process-event.test.ts +++ b/plugin-server/tests/main/ingestion-queues/session-recording/process-event.test.ts @@ -2,10 +2,10 @@ import { DateTime } from 'luxon' import { ConsoleLogEntry, + SummarizedSessionRecordingEvent, createSessionReplayEvent, gatherConsoleLogEvents, getTimestampsFrom, - SummarizedSessionRecordingEvent, } from '../../../../src/main/ingestion-queues/session-recording/process-event' import { RRWebEvent, TimestampFormat } from '../../../../src/types' import { castTimestampToClickhouseFormat } from '../../../../src/utils/utils' diff --git a/plugin-server/tests/main/ingestion-queues/session-recording/services/console-log-ingester.test.ts b/plugin-server/tests/main/ingestion-queues/session-recording/services/console-log-ingester.test.ts index 8d9693c633..26d21b60f8 100644 --- a/plugin-server/tests/main/ingestion-queues/session-recording/services/console-log-ingester.test.ts +++ b/plugin-server/tests/main/ingestion-queues/session-recording/services/console-log-ingester.test.ts @@ -1,4 +1,5 @@ import { mockProducer, mockProducerObserver } from '~/tests/helpers/mocks/producer.mock' + import { SessionRecordingV2MetadataSwitchoverDate } from '~/types' import { ConsoleLogsIngester } from '../../../../../src/main/ingestion-queues/session-recording/services/console-logs-ingester' diff --git a/plugin-server/tests/main/ingestion-queues/session-recording/services/offset-high-water-mark.test.ts b/plugin-server/tests/main/ingestion-queues/session-recording/services/offset-high-water-mark.test.ts index 33ac09de4f..a5943da3c9 100644 --- a/plugin-server/tests/main/ingestion-queues/session-recording/services/offset-high-water-mark.test.ts +++ b/plugin-server/tests/main/ingestion-queues/session-recording/services/offset-high-water-mark.test.ts @@ -2,8 +2,8 @@ import { TopicPartition } from 'kafkajs' import { OffsetHighWaterMarker, - offsetHighWaterMarkKey, OffsetHighWaterMarks, + offsetHighWaterMarkKey, } from '../../../../../src/main/ingestion-queues/session-recording/services/offset-high-water-marker' import { Hub } from '../../../../../src/types' import { closeHub, createHub } from '../../../../../src/utils/db/hub' diff --git a/plugin-server/tests/main/ingestion-queues/session-recording/services/overflow-manager.test.ts b/plugin-server/tests/main/ingestion-queues/session-recording/services/overflow-manager.test.ts index 7aabe333e8..22bb116e62 100644 --- a/plugin-server/tests/main/ingestion-queues/session-recording/services/overflow-manager.test.ts +++ b/plugin-server/tests/main/ingestion-queues/session-recording/services/overflow-manager.test.ts @@ -1,3 +1,5 @@ +// sort-imports-ignore + import { Redis } from 'ioredis' import { OverflowManager } from '../../../../../src/main/ingestion-queues/session-recording/services/overflow-manager' diff --git a/plugin-server/tests/main/ingestion-queues/session-recording/services/replay-events-ingester.test.ts b/plugin-server/tests/main/ingestion-queues/session-recording/services/replay-events-ingester.test.ts index 98d44428d8..215cb3f7dd 100644 --- a/plugin-server/tests/main/ingestion-queues/session-recording/services/replay-events-ingester.test.ts +++ b/plugin-server/tests/main/ingestion-queues/session-recording/services/replay-events-ingester.test.ts @@ -1,3 +1,5 @@ +// sort-imports-ignore + import { DateTime } from 'luxon' import { OffsetHighWaterMarker } from '../../../../../src/main/ingestion-queues/session-recording/services/offset-high-water-marker' diff --git a/plugin-server/tests/main/ingestion-queues/session-recording/session-recordings-consumer.test.ts b/plugin-server/tests/main/ingestion-queues/session-recording/session-recordings-consumer.test.ts index 6ff41a2014..08428d5a0c 100644 --- a/plugin-server/tests/main/ingestion-queues/session-recording/session-recordings-consumer.test.ts +++ b/plugin-server/tests/main/ingestion-queues/session-recording/session-recordings-consumer.test.ts @@ -1,7 +1,7 @@ import { randomUUID } from 'crypto' import { Redis } from 'ioredis' -import { mkdirSync, readdirSync, rmSync } from 'node:fs' import { Message, TopicPartitionOffset } from 'node-rdkafka' +import { mkdirSync, readdirSync, rmSync } from 'node:fs' import path from 'path' import { KafkaConsumer } from '~/kafka/consumer' diff --git a/plugin-server/tests/main/process-event.test.ts b/plugin-server/tests/main/process-event.test.ts index ec4d6f1863..5169c7ac02 100644 --- a/plugin-server/tests/main/process-event.test.ts +++ b/plugin-server/tests/main/process-event.test.ts @@ -4,18 +4,20 @@ This file contains a bunch of legacy E2E tests mixed with unit tests. Rather than add tests here, consider improving event-pipeline-integration test suite or adding unit tests to appropriate classes/functions. */ - -// eslint-disable-next-line simple-import-sort/imports import { KafkaProducerObserver } from '~/tests/helpers/mocks/producer.spy' +import { DateTime } from 'luxon' + import { Properties } from '@posthog/plugin-scaffold' import { PluginEvent } from '@posthog/plugin-scaffold/src/types' -import { DateTime } from 'luxon' +import { KAFKA_GROUPS } from '~/config/kafka-topics' import { createRedis } from '~/utils/db/redis' +import { parseRawClickHouseEvent } from '~/utils/event' import { captureTeamEvent } from '~/utils/posthog' import { BatchWritingGroupStoreForBatch } from '~/worker/ingestion/groups/batch-writing-group-store' import { BatchWritingPersonsStoreForBatch } from '~/worker/ingestion/persons/batch-writing-person-store' +import { PersonsStoreForBatch } from '~/worker/ingestion/persons/persons-store-for-batch' import { ClickHouseEvent, Hub, LogLevel, Person, PluginsServerConfig, Team } from '../../src/types' import { closeHub, createHub } from '../../src/utils/db/hub' @@ -23,13 +25,9 @@ import { PostgresUse } from '../../src/utils/db/postgres' import { UUIDT } from '../../src/utils/utils' import { EventPipelineRunner } from '../../src/worker/ingestion/event-pipeline/runner' import { PostgresPersonRepository } from '../../src/worker/ingestion/persons/repositories/postgres-person-repository' - import { EventsProcessor } from '../../src/worker/ingestion/process-event' import { resetKafka } from '../helpers/kafka' import { createUserTeamAndOrganization, getFirstTeam, getTeams, resetTestDatabase } from '../helpers/sql' -import { KAFKA_GROUPS } from '~/config/kafka-topics' -import { parseRawClickHouseEvent } from '~/utils/event' -import { PersonsStoreForBatch } from '~/worker/ingestion/persons/persons-store-for-batch' jest.mock('../../src/utils/logger') jest.setTimeout(600000) // 600 sec timeout. diff --git a/plugin-server/tests/utils.test.ts b/plugin-server/tests/utils.test.ts index e0fb1aeb8c..9ff04ad59c 100644 --- a/plugin-server/tests/utils.test.ts +++ b/plugin-server/tests/utils.test.ts @@ -6,6 +6,9 @@ import { eventPassesMetadataSwitchoverTest, parseSessionRecordingV2MetadataSwitc import { ClickHouseTimestamp, SessionRecordingV2MetadataSwitchoverDate } from '../src/types' import { safeClickhouseString } from '../src/utils/db/utils' import { + UUID, + UUID7, + UUIDT, bufferToStream, bufferToUint32ArrayLE, clickHouseTimestampToDateTime, @@ -17,9 +20,6 @@ import { sanitizeSqlIdentifier, stringify, uint32ArrayLEToBuffer, - UUID, - UUID7, - UUIDT, } from '../src/utils/utils' // .zip in Base64: github repo posthog/helloworldplugin diff --git a/plugin-server/tests/worker/console.test.ts b/plugin-server/tests/worker/console.test.ts index 64714a0637..465c9ae6f3 100644 --- a/plugin-server/tests/worker/console.test.ts +++ b/plugin-server/tests/worker/console.test.ts @@ -1,7 +1,7 @@ -// eslint-disable-next-line simple-import-sort/imports import { mockProducerObserver } from '../helpers/mocks/producer.mock' import { ConsoleExtension } from '@posthog/plugin-scaffold' + import { KAFKA_PLUGIN_LOG_ENTRIES } from '../../src/config/kafka-topics' import { Hub, PluginLogEntrySource, PluginLogEntryType } from '../../src/types' import { closeHub, createHub } from '../../src/utils/db/hub' diff --git a/plugin-server/tests/worker/dead-letter-queue.test.ts b/plugin-server/tests/worker/dead-letter-queue.test.ts index fa522aef94..ec5a5d01fd 100644 --- a/plugin-server/tests/worker/dead-letter-queue.test.ts +++ b/plugin-server/tests/worker/dead-letter-queue.test.ts @@ -1,19 +1,18 @@ -// eslint-disable-next-line simple-import-sort/imports import { mockProducerObserver } from '~/tests/helpers/mocks/producer.mock' import { PluginEvent } from '@posthog/plugin-scaffold/src/types' -import { PostgresPersonRepository } from '../../src/worker/ingestion/persons/repositories/postgres-person-repository' +import { BatchWritingPersonsStoreForBatch } from '~/worker/ingestion/persons/batch-writing-person-store' import { Hub, LogLevel, Team } from '../../src/types' import { closeHub, createHub } from '../../src/utils/db/hub' import { UUIDT } from '../../src/utils/utils' import { EventPipelineRunner } from '../../src/worker/ingestion/event-pipeline/runner' import { BatchWritingGroupStoreForBatch } from '../../src/worker/ingestion/groups/batch-writing-group-store' +import { PostgresPersonRepository } from '../../src/worker/ingestion/persons/repositories/postgres-person-repository' import { generateEventDeadLetterQueueMessage } from '../../src/worker/ingestion/utils' -import { createOrganization, createTeam, getTeam, resetTestDatabase } from '../helpers/sql' import { forSnapshot } from '../helpers/snapshots' -import { BatchWritingPersonsStoreForBatch } from '~/worker/ingestion/persons/batch-writing-person-store' +import { createOrganization, createTeam, getTeam, resetTestDatabase } from '../helpers/sql' jest.setTimeout(60000) // 60 sec timeout jest.mock('../../src/utils/logger') diff --git a/plugin-server/tests/worker/ingestion/event-pipeline/event-pipeline-integration.test.ts b/plugin-server/tests/worker/ingestion/event-pipeline/event-pipeline-integration.test.ts index 30546d985b..e6e7b4f037 100644 --- a/plugin-server/tests/worker/ingestion/event-pipeline/event-pipeline-integration.test.ts +++ b/plugin-server/tests/worker/ingestion/event-pipeline/event-pipeline-integration.test.ts @@ -1,8 +1,9 @@ -import { PluginEvent } from '@posthog/plugin-scaffold' // eslint-disable-next-line no-restricted-imports import { fetch } from 'undici' import { v4 } from 'uuid' +import { PluginEvent } from '@posthog/plugin-scaffold' + import { BatchWritingPersonsStoreForBatch } from '~/worker/ingestion/persons/batch-writing-person-store' import { PersonRepository } from '~/worker/ingestion/persons/repositories/person-repository' import { PostgresPersonRepository } from '~/worker/ingestion/persons/repositories/postgres-person-repository' diff --git a/plugin-server/tests/worker/ingestion/event-pipeline/prepareEventStep.test.ts b/plugin-server/tests/worker/ingestion/event-pipeline/prepareEventStep.test.ts index 44ee9a9621..04db7aa876 100644 --- a/plugin-server/tests/worker/ingestion/event-pipeline/prepareEventStep.test.ts +++ b/plugin-server/tests/worker/ingestion/event-pipeline/prepareEventStep.test.ts @@ -1,6 +1,7 @@ -import { PluginEvent } from '@posthog/plugin-scaffold' import { DateTime } from 'luxon' +import { PluginEvent } from '@posthog/plugin-scaffold' + import { Hub, Person, ProjectId, Team } from '../../../../src/types' import { closeHub, createHub } from '../../../../src/utils/db/hub' import { UUIDT } from '../../../../src/utils/utils' diff --git a/plugin-server/tests/worker/ingestion/event-pipeline/processPersonsStep.test.ts b/plugin-server/tests/worker/ingestion/event-pipeline/processPersonsStep.test.ts index c7d56fea9e..ea2e83b8ed 100644 --- a/plugin-server/tests/worker/ingestion/event-pipeline/processPersonsStep.test.ts +++ b/plugin-server/tests/worker/ingestion/event-pipeline/processPersonsStep.test.ts @@ -1,6 +1,7 @@ -import { PluginEvent } from '@posthog/plugin-scaffold' import { DateTime } from 'luxon' +import { PluginEvent } from '@posthog/plugin-scaffold' + import { BatchWritingPersonsStoreForBatch } from '~/worker/ingestion/persons/batch-writing-person-store' import { Hub, Team } from '../../../../src/types' diff --git a/plugin-server/tests/worker/ingestion/event-pipeline/runner.test.ts b/plugin-server/tests/worker/ingestion/event-pipeline/runner.test.ts index a3ecf6e4a5..5a7a21e811 100644 --- a/plugin-server/tests/worker/ingestion/event-pipeline/runner.test.ts +++ b/plugin-server/tests/worker/ingestion/event-pipeline/runner.test.ts @@ -1,7 +1,8 @@ -import { PluginEvent } from '@posthog/plugin-scaffold' import { DateTime } from 'luxon' import { v4 } from 'uuid' +import { PluginEvent } from '@posthog/plugin-scaffold' + import { forSnapshot } from '~/tests/helpers/snapshots' import { BatchWritingGroupStoreForBatch } from '~/worker/ingestion/groups/batch-writing-group-store' import { BatchWritingPersonsStoreForBatch } from '~/worker/ingestion/persons/batch-writing-person-store' diff --git a/plugin-server/tests/worker/ingestion/person-state-batch.test.ts b/plugin-server/tests/worker/ingestion/person-state-batch.test.ts index 9cc7ebe52b..bce75cf17e 100644 --- a/plugin-server/tests/worker/ingestion/person-state-batch.test.ts +++ b/plugin-server/tests/worker/ingestion/person-state-batch.test.ts @@ -1,9 +1,10 @@ -// eslint-disable-next-line simple-import-sort/imports import { KafkaProducerObserver } from '~/tests/helpers/mocks/producer.spy' -import { PluginEvent, Properties } from '@posthog/plugin-scaffold' import { DateTime } from 'luxon' +import { PluginEvent, Properties } from '@posthog/plugin-scaffold' + +import { KAFKA_PERSON, KAFKA_PERSON_DISTINCT_ID } from '~/config/kafka-topics' import { Clickhouse } from '~/tests/helpers/clickhouse' import { fromInternalPerson } from '~/worker/ingestion/persons/person-update-batch' @@ -42,7 +43,6 @@ import { getTeam, insertRow, } from '../../helpers/sql' -import { KAFKA_PERSON, KAFKA_PERSON_DISTINCT_ID } from '~/config/kafka-topics' jest.setTimeout(30000) diff --git a/plugin-server/tests/worker/ingestion/postgres-parity.test.ts b/plugin-server/tests/worker/ingestion/postgres-parity.test.ts index de68aae6c7..cb38af36f4 100644 --- a/plugin-server/tests/worker/ingestion/postgres-parity.test.ts +++ b/plugin-server/tests/worker/ingestion/postgres-parity.test.ts @@ -11,7 +11,7 @@ import { } from '../../../src/types' import { PostgresUse } from '../../../src/utils/db/postgres' import { parseJSON } from '../../../src/utils/json-parse' -import { castTimestampOrNow, UUIDT } from '../../../src/utils/utils' +import { UUIDT, castTimestampOrNow } from '../../../src/utils/utils' import { PostgresPersonRepository } from '../../../src/worker/ingestion/persons/repositories/postgres-person-repository' import { Clickhouse } from '../../helpers/clickhouse' import { resetKafka } from '../../helpers/kafka' diff --git a/plugin-server/tests/worker/plugins/inline.test.ts b/plugin-server/tests/worker/plugins/inline.test.ts index eaaf71658a..a06956f1da 100644 --- a/plugin-server/tests/worker/plugins/inline.test.ts +++ b/plugin-server/tests/worker/plugins/inline.test.ts @@ -4,9 +4,9 @@ import { Hub, LogLevel, Plugin, PluginConfig } from '../../../src/types' import { closeHub, createHub } from '../../../src/utils/db/hub' import { PostgresUse } from '../../../src/utils/db/postgres' import { - constructInlinePluginInstance, INLINE_PLUGIN_MAP, INLINE_PLUGIN_URLS, + constructInlinePluginInstance, syncInlinePlugins, } from '../../../src/worker/vm/inline/inline' import { VersionParts } from '../../../src/worker/vm/inline/semver-flattener' diff --git a/plugin-server/tests/worker/vm.test.ts b/plugin-server/tests/worker/vm.test.ts index e155947cb5..19b323bbed 100644 --- a/plugin-server/tests/worker/vm.test.ts +++ b/plugin-server/tests/worker/vm.test.ts @@ -1,15 +1,15 @@ -// eslint-disable-next-line simple-import-sort/imports import { mockProducerObserver } from '../helpers/mocks/producer.mock' -import { PluginEvent, ProcessedPluginEvent } from '@posthog/plugin-scaffold' // eslint-disable-next-line no-restricted-imports import { fetch } from 'undici' +import { PluginEvent, ProcessedPluginEvent } from '@posthog/plugin-scaffold' + import { KAFKA_PLUGIN_LOG_ENTRIES } from '../../src/config/kafka-topics' import { Hub, PluginLogEntrySource, PluginLogEntryType } from '../../src/types' import { PluginConfig, PluginConfigVMResponse } from '../../src/types' import { closeHub, createHub } from '../../src/utils/db/hub' -import { delay, UUIDT } from '../../src/utils/utils' +import { UUIDT, delay } from '../../src/utils/utils' import { createPluginConfigVM } from '../../src/worker/vm/vm' import { pluginConfig39 } from '../helpers/plugins' import { plugin60 } from '../helpers/plugins' diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3505c045d3..2716eed9ea 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -47,6 +47,9 @@ importers: '@parcel/transformer-typescript-types': specifier: 2.13.3 version: 2.13.3(@parcel/core@2.13.3)(typescript@5.2.2) + '@trivago/prettier-plugin-sort-imports': + specifier: ^5.2.2 + version: 5.2.2(prettier@3.6.2) '@types/uuid': specifier: ^10.0.0 version: 10.0.0 @@ -1558,9 +1561,6 @@ importers: eslint-plugin-promise: specifier: ^6.1.1 version: 6.6.0(eslint@8.57.0) - eslint-plugin-simple-import-sort: - specifier: ^7.0.0 - version: 7.0.0(eslint@8.57.0) jest: specifier: ^30.0.0 version: 30.0.5(@types/node@22.15.17)(esbuild-register@3.5.0(esbuild@0.25.0))(ts-node@10.9.1(@swc/core@1.10.14(@swc/helpers@0.5.15))(@types/node@22.15.17)(typescript@5.2.2)) @@ -7720,6 +7720,22 @@ packages: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} + '@trivago/prettier-plugin-sort-imports@5.2.2': + resolution: {integrity: sha512-fYDQA9e6yTNmA13TLVSA+WMQRc5Bn/c0EUBditUHNfMMxN7M82c38b1kEggVE3pLpZ0FwkwJkUEKMiOi52JXFA==} + engines: {node: '>18.12'} + peerDependencies: + '@vue/compiler-sfc': 3.x + prettier: 2.x - 3.x + prettier-plugin-svelte: 3.x + svelte: 4.x || 5.x + peerDependenciesMeta: + '@vue/compiler-sfc': + optional: true + prettier-plugin-svelte: + optional: true + svelte: + optional: true + '@trysound/sax@0.2.0': resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} @@ -10720,11 +10736,6 @@ packages: peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - eslint-plugin-simple-import-sort@7.0.0: - resolution: {integrity: sha512-U3vEDB5zhYPNfxT5TYR7u01dboFZp+HNpnGhkDB2g/2E4wZ/g1Q9Ton8UwCLfRV9yAKyYqDh62oHOamvkFxsvw==} - peerDependencies: - eslint: '>=5.0.0' - eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} @@ -12271,6 +12282,9 @@ packages: engines: {node: '>=10'} hasBin: true + javascript-natural-sort@0.7.1: + resolution: {integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==} + jest-canvas-mock@2.4.0: resolution: {integrity: sha512-mmMpZzpmLzn5vepIaHk5HoH3Ka4WykbSoLuG/EKoJd0x0ID/t+INo1l8ByfcUJuDM+RIsL4QDg/gDnBbrj2/IQ==} @@ -16944,8 +16958,8 @@ packages: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} - unlayer-types@1.289.0: - resolution: {integrity: sha512-3nqnOUbAPV84ektF3f1cKNvfl5uK8uwR7WzVR1nMqCCWLZTUo9j9Y9W5dcIVWVUcmJyWiPXADiPOcHxLbSo+Lw==} + unlayer-types@1.291.0: + resolution: {integrity: sha512-zbKfCa8OgKUWNVOiC/VoQ+P0tDsYxTRYCDIs+ktww6eXW5tSpD/dFhgLIA7RWVKnh4AusEClOxxLCkxlV9jWHQ==} unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} @@ -25627,6 +25641,18 @@ snapshots: '@tootallnate/once@2.0.0': {} + '@trivago/prettier-plugin-sort-imports@5.2.2(prettier@3.6.2)': + dependencies: + '@babel/generator': 7.28.0 + '@babel/parser': 7.28.0 + '@babel/traverse': 7.28.0 + '@babel/types': 7.28.1 + javascript-natural-sort: 0.7.1 + lodash: 4.17.21 + prettier: 3.6.2 + transitivePeerDependencies: + - supports-color + '@trysound/sax@0.2.0': {} '@tsconfig/node10@1.0.9': {} @@ -29236,10 +29262,6 @@ snapshots: dependencies: eslint: 8.57.0 - eslint-plugin-simple-import-sort@7.0.0(eslint@8.57.0): - dependencies: - eslint: 8.57.0 - eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0 @@ -30989,6 +31011,8 @@ snapshots: filelist: 1.0.4 minimatch: 3.1.2 + javascript-natural-sort@0.7.1: {} + jest-canvas-mock@2.4.0: dependencies: cssfontparser: 1.2.1 @@ -34926,7 +34950,7 @@ snapshots: react-email-editor@1.7.11(react@18.2.0): dependencies: react: 18.2.0 - unlayer-types: 1.289.0 + unlayer-types: 1.291.0 react-error-overlay@6.0.9: {} @@ -36928,7 +36952,7 @@ snapshots: universalify@2.0.0: {} - unlayer-types@1.289.0: {} + unlayer-types@1.291.0: {} unpipe@1.0.0: {} diff --git a/posthog/templates/demo.html b/posthog/templates/demo.html index ad5f31f94e..1fa4731b83 100644 --- a/posthog/templates/demo.html +++ b/posthog/templates/demo.html @@ -76,7 +76,7 @@

The one-stop shop for all your hedgehog movies.


- + {% endif %} @@ -93,6 +93,7 @@ {% endif %} + {% if request.path == '/demo/2' %}
@@ -101,8 +102,8 @@
- {% endif %} + {% if request.path == '/demo/3' %}
@@ -140,9 +141,8 @@
- - {% endif %} + {% if request.path == '/demo/4' %}
@@ -162,46 +162,43 @@

+ + +
+ + + +
+ +
+
 
+
+
+
+ + + {% endif %} -
- - - - -
-
-
 
-
-
- -
- - - - - {% endif %} - - - - + \ No newline at end of file diff --git a/posthog/temporal/README.md b/posthog/temporal/README.md index fa74f91916..1a8cae139a 100644 --- a/posthog/temporal/README.md +++ b/posthog/temporal/README.md @@ -1,11 +1,12 @@ # Temporal PostHog uses Temporal to power multiple products and features like: -* All of Batch exports, -* Syncs for data warehouse, -* Processing AI agent conversations, -* Data warehouse model materialization, -* And more... + +- All of Batch exports, +- Syncs for data warehouse, +- Processing AI agent conversations, +- Data warehouse model materialization, +- And more... All these products and features require a scheduling and orchestration system with idempotent execution, granular error management, and an observable history for debugging and maintenance. All while also being distributed across a scalable number of workers. @@ -60,6 +61,7 @@ if __name__ == "__main__": An activity represents a single operation executed by a workflow. Again, if you are familiar with Apache Airflow, activities are analogous to tasks. Like workflows, activities are also code: using the Python SDK, we decorate functions with `temporalio.activity.defn` to mark them as activities. There are three types of activities: + 1. Coroutines (`async def` functions), 2. Synchronous multithreaded functions, 3. And synchronous multiprocessing functions. @@ -150,7 +152,7 @@ schedule = Schedule( ## Implement a product or feature with Temporal -The first step when working with Temporal is deciding whether Temporal is the right tool for the job. If the application and/or feature you are implementing requires offloading work to specialized workers that must ensure durability and idempotency, offer tools to manage error handling and retry mechanisms, and you are willing to accept an increase in complexity and maintenance burden then Temporal could be the right tool for the job. Once you chosen Temporal, you will be please to know that a lot of our work here is making that increase complexity and maintenance burden small and easier to manage, so you get to re-use some of the tooling we have built when developing other products. *Yay!* +The first step when working with Temporal is deciding whether Temporal is the right tool for the job. If the application and/or feature you are implementing requires offloading work to specialized workers that must ensure durability and idempotency, offer tools to manage error handling and retry mechanisms, and you are willing to accept an increase in complexity and maintenance burden then Temporal could be the right tool for the job. Once you chosen Temporal, you will be please to know that a lot of our work here is making that increase complexity and maintenance burden small and easier to manage, so you get to re-use some of the tooling we have built when developing other products. _Yay!_ Let's now dive into some of the decisions you will need to take when developing a product or feature with Temporal. @@ -169,21 +171,22 @@ Temporal workers run multiple workflows and activities simultaneously. In order The most important rule when writing asyncio code is: **DO NOT BLOCK** the event loop. Asyncio is the optimal choice for code that is bound by I/O operations, like network or database requests. However, it is of utmost importance that those requests are done using non-blocking primitives. Otherwise, no tasks will be executing concurrently in the worker, and any performance benefit of using asyncio is lost. Moreover, the same event loop is also used to run other activities in the worker which can also be blocked and eventually timed-out. Asyncio is not new in Python (originally introduced in 3.4, and the new keywords in 3.5), but it has not been widely adopted in PostHog (yet!). This means that there isn't much code we can re-use from the PostHog monolith within Temporal activities. In particular, Django models will issue blocking requests when using the same method calls used anywhere else in PostHog. For this reason, more often than not, some amount of work is required to bring code from other parts of PostHog into activities: -* Sometimes, the library you need to use has adopted asyncio and offers methods that can be a drop-in replacement. - * For example: Django models have async methods that just append `a` to the front: `MyModel.objects.get(...)` becomes `await MyModel.objects.aget(...)`. But not all the Django model API has support for asyncio, so check the documentation for our current version of Django. -* If the library you require doesn't support asyncio, an alternative may exist. - * For example: The popular `requests` is blocking, but multiple alternatives with asyncio support exist, like `aiohttp` and `httpx`, and generally the API is quite similar, and doesn't require many code changes. - * Another example: The `aioboto3` implements asyncio support for `boto3`. - * One more: The `aiokafka` provides consumer and producer classes with non-blocking methods to interact with Kafka. -* If none of the above, you could get around by running blocking code in a thread pool using `concurrent.futures.ThreadPoolExecutor` or just `asyncio.to_thread`. - * Python releases the GIL on an I/O operation, so you can send that code to a different thread to avoid blocking the main thread with the asyncio event loop. -* Similarly, if the blocking code is CPU bound, you could try using a `concurrent.futures.ProcessPoolExecutor`. -* If nothing worked, you will need to re-implement the code using asyncio libraries and primitives. + +- Sometimes, the library you need to use has adopted asyncio and offers methods that can be a drop-in replacement. + - For example: Django models have async methods that just append `a` to the front: `MyModel.objects.get(...)` becomes `await MyModel.objects.aget(...)`. But not all the Django model API has support for asyncio, so check the documentation for our current version of Django. +- If the library you require doesn't support asyncio, an alternative may exist. + - For example: The popular `requests` is blocking, but multiple alternatives with asyncio support exist, like `aiohttp` and `httpx`, and generally the API is quite similar, and doesn't require many code changes. + - Another example: The `aioboto3` implements asyncio support for `boto3`. + - One more: The `aiokafka` provides consumer and producer classes with non-blocking methods to interact with Kafka. +- If none of the above, you could get around by running blocking code in a thread pool using `concurrent.futures.ThreadPoolExecutor` or just `asyncio.to_thread`. + - Python releases the GIL on an I/O operation, so you can send that code to a different thread to avoid blocking the main thread with the asyncio event loop. +- Similarly, if the blocking code is CPU bound, you could try using a `concurrent.futures.ProcessPoolExecutor`. +- If nothing worked, you will need to re-implement the code using asyncio libraries and primitives. Now that your code is using asyncio, it will run in the Temporal workers cooperating with everyone else to execute concurrently. > [!TIP] -> Having asyncio code opens up the door to applying *asyncio patterns* that go beyond adding an `await` and changing a method: That group of sequential requests could run concurrently if you wrap them in tasks and `asyncio.gather` or in an `asyncio.TaskGroup`, maybe that progress update request can be done as a background task while the rest of the application carries on, perhaps the data processing can be done as the data arrives using a `asyncio.Queue` in a consumer-producer pattern. Now you are using *asyncio patterns* instead of running sequential code with `await`s sprinkled around it. +> Having asyncio code opens up the door to applying _asyncio patterns_ that go beyond adding an `await` and changing a method: That group of sequential requests could run concurrently if you wrap them in tasks and `asyncio.gather` or in an `asyncio.TaskGroup`, maybe that progress update request can be done as a background task while the rest of the application carries on, perhaps the data processing can be done as the data arrives using a `asyncio.Queue` in a consumer-producer pattern. Now you are using _asyncio patterns_ instead of running sequential code with `await`s sprinkled around it. #### Multithreading @@ -196,6 +199,7 @@ Using synchronous activities means that you have to opt for synchronous versions ### Set timeouts for your activities Temporal allows us to apply multiple timeouts to activities: + 1. Schedule-to-close: Time out based on the time from the moment the Temporal service puts an activity task in its queue. 2. Start-to-close: Time out based on the time from the moment a worker starts executing an activity. 3. Schedule-to-start: Time out based on the time it takes for an activity to be picked up by a worker. @@ -227,6 +231,7 @@ By default activities retry forever. > Always set `max_retries` in tests. Here is an example showcasing all of the above, but more can be found by searching the codebase: + ```python import asyncio import datetime as dt @@ -295,8 +300,9 @@ class HelloWorldWorkflow: ### Logging from activities In our experience, we have identified two types of logs: -* Logs intended only for our internal monitoring dashboards. -* Logs that we want to show to users, and/or make available for querying by ClickHouse. + +- Logs intended only for our internal monitoring dashboards. +- Logs that we want to show to users, and/or make available for querying by ClickHouse. In order to support both types of logs, the `posthog/temporal/common/logger.py` module contains some useful logging functions, respectively `get_logger` and `get_external_logger`, which can be used to obtain a [structlog](https://www.structlog.org/en/stable/) logger. @@ -316,6 +322,7 @@ The key difference is that `get_external_logger` will return a logger named `EXT When developing an activity, you will most likely want **all** your logs to have Temporal context variables (like `activity_type`, or `workflow_id`). To achieve this, `logger.py` offers the `bind_contextvars` function to bind any context variables you want, plus include all relevant Temporal variables by default. These context variables will be available to **all** loggers in the same context, so they don't need to be bound again. The context is preserved when spawning tasks and threads, so most of the time you will only be calling `bind_contextvars` once at the beginning of the activity to set the context based on some input. This logging pipeline also works locally, if you run your tests with: + ```sh DEBUG=1 pytest path/to/your/tests.py --log-cli-level=info ``` @@ -463,7 +470,7 @@ All that being said, a common scenario is that workflows have to be executed reg ### Schedule workflow to run regularly -Create a Temporal schedule to, well, *schedule* workflows to run at set intervals. This can be achieved by calling the `create_schedule` method of a Temporal client. Similarly, a schedule can be updated by the `update_schedule` method in the client. +Create a Temporal schedule to, well, _schedule_ workflows to run at set intervals. This can be achieved by calling the `create_schedule` method of a Temporal client. Similarly, a schedule can be updated by the `update_schedule` method in the client. There are examples on how to achieve this throughout the codebase: Batch exports, for example, creates a new schedule every time a batch export is created, other products have a Django management command to initialize all their schedules. The pattern you choose will depend on how your product is set up. @@ -477,11 +484,11 @@ As you run workflows, you will be able to see the logs in the worker's logs, and ## Relevant documentation -* [Documentation for the Temporal Python SDK](https://docs.temporal.io/develop/python). -* [Documentation on Temporal schedules](https://docs.temporal.io/evaluate/development-production-features/schedules). -* [Documentation on different types of activities](https://docs.temporal.io/develop/python/python-sdk-sync-vs-async). -* [Temporal Python SDK repository](https://github.com/temporalio/sdk-python). -* [Temporal Python SDK code samples](https://github.com/temporalio/samples-python). +- [Documentation for the Temporal Python SDK](https://docs.temporal.io/develop/python). +- [Documentation on Temporal schedules](https://docs.temporal.io/evaluate/development-production-features/schedules). +- [Documentation on different types of activities](https://docs.temporal.io/develop/python/python-sdk-sync-vs-async). +- [Temporal Python SDK repository](https://github.com/temporalio/sdk-python). +- [Temporal Python SDK code samples](https://github.com/temporalio/samples-python). ## Examples in PostHog diff --git a/products/actions/frontend/components/ActionHogFunctions.tsx b/products/actions/frontend/components/ActionHogFunctions.tsx index f0f36b4479..d71508f790 100644 --- a/products/actions/frontend/components/ActionHogFunctions.tsx +++ b/products/actions/frontend/components/ActionHogFunctions.tsx @@ -1,12 +1,16 @@ -import { LemonBanner } from '@posthog/lemon-ui' import { useValues } from 'kea' + +import { LemonBanner } from '@posthog/lemon-ui' + +import { FEATURE_FLAGS } from 'lib/constants' +import { featureFlagLogic } from 'lib/logic/featureFlagLogic' +import { cn } from 'lib/utils/css-classes' +import { LinkedHogFunctions } from 'scenes/hog-functions/list/LinkedHogFunctions' + +import { SceneSection } from '~/layout/scenes/SceneContent' + import { actionEditLogic } from '../logics/actionEditLogic' import { actionLogic } from '../logics/actionLogic' -import { LinkedHogFunctions } from 'scenes/hog-functions/list/LinkedHogFunctions' -import { SceneSection } from '~/layout/scenes/SceneContent' -import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { FEATURE_FLAGS } from 'lib/constants' -import { cn } from 'lib/utils/css-classes' export function ActionHogFunctions(): JSX.Element | null { const { action } = useValues(actionLogic) diff --git a/products/actions/frontend/components/ActionStep.tsx b/products/actions/frontend/components/ActionStep.tsx index 9bf2bca62e..b4aefdb66b 100644 --- a/products/actions/frontend/components/ActionStep.tsx +++ b/products/actions/frontend/components/ActionStep.tsx @@ -1,21 +1,22 @@ +import { useValues } from 'kea' + import { IconX } from '@posthog/icons' import { LemonButton, LemonInput, LemonSegmentedButton, Link } from '@posthog/lemon-ui' + import { AuthorizedUrlList } from 'lib/components/AuthorizedUrlList/AuthorizedUrlList' import { AuthorizedUrlListType } from 'lib/components/AuthorizedUrlList/authorizedUrlListLogic' -import { OperandTag } from 'lib/components/PropertyFilters/components/OperandTag' import { PropertyFilters } from 'lib/components/PropertyFilters/PropertyFilters' -import { IconOpenInApp } from 'lib/lemon-ui/icons' - +import { OperandTag } from 'lib/components/PropertyFilters/components/OperandTag' +import { DEFAULT_TAXONOMIC_GROUP_TYPES } from 'lib/components/PropertyFilters/components/TaxonomicPropertyFilter' import { LemonDialog } from 'lib/lemon-ui/LemonDialog' import { LemonLabel } from 'lib/lemon-ui/LemonLabel/LemonLabel' -import { URL_MATCHING_HINTS } from '../utils/hints' -import { useValues } from 'kea' -import { groupsModel } from '~/models/groupsModel' +import { IconOpenInApp } from 'lib/lemon-ui/icons' +import { groupsModel } from '~/models/groupsModel' import { ActionStepStringMatching, ActionStepType } from '~/types' +import { URL_MATCHING_HINTS } from '../utils/hints' import { EventName } from './EventName' -import { DEFAULT_TAXONOMIC_GROUP_TYPES } from 'lib/components/PropertyFilters/components/TaxonomicPropertyFilter' const learnMoreLink = 'https://posthog.com/docs/data/actions?utm_medium=in-product&utm_campaign=action-page' diff --git a/products/actions/frontend/components/ActionsTable.tsx b/products/actions/frontend/components/ActionsTable.tsx index 59a0192b1c..11b3b8f431 100644 --- a/products/actions/frontend/components/ActionsTable.tsx +++ b/products/actions/frontend/components/ActionsTable.tsx @@ -1,31 +1,33 @@ +import { useActions, useValues } from 'kea' + import { IconCheckCircle, IconPin, IconPinFilled } from '@posthog/icons' import { LemonInput, LemonSegmentedButton } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import api from 'lib/api' import { ObjectTags } from 'lib/components/ObjectTags/ObjectTags' import { ProductIntroduction } from 'lib/components/ProductIntroduction/ProductIntroduction' -import { IconPlayCircle } from 'lib/lemon-ui/icons' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { More } from 'lib/lemon-ui/LemonButton/More' import { LemonDivider } from 'lib/lemon-ui/LemonDivider' import { LemonTable } from 'lib/lemon-ui/LemonTable' -import { createdAtColumn, createdByColumn } from 'lib/lemon-ui/LemonTable/columnUtils' import { LemonTableLink } from 'lib/lemon-ui/LemonTable/LemonTableLink' +import { createdAtColumn, createdByColumn } from 'lib/lemon-ui/LemonTable/columnUtils' import { LemonTableColumn, LemonTableColumns } from 'lib/lemon-ui/LemonTable/types' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' +import { IconPlayCircle } from 'lib/lemon-ui/icons' import { stripHTTP } from 'lib/utils' import { deleteWithUndo } from 'lib/utils/deleteWithUndo' import { ProductIntentContext } from 'lib/utils/product-intents' -import { actionsLogic } from '../logics/actionsLogic' +import { teamLogic } from 'scenes/teamLogic' +import { urls } from 'scenes/urls' import { userLogic } from 'scenes/userLogic' import { actionsModel } from '~/models/actionsModel' import { InsightVizNode, NodeKind } from '~/queries/schema/schema-general' import { ActionType, AvailableFeature, ChartDisplayType, FilterLogicalOperator, ProductKey, ReplayTabs } from '~/types' +import { actionsLogic } from '../logics/actionsLogic' import { NewActionButton } from './NewActionButton' -import { teamLogic } from 'scenes/teamLogic' -import { urls } from 'scenes/urls' export function ActionsTable(): JSX.Element { const { currentTeam } = useValues(teamLogic) diff --git a/products/actions/frontend/components/NewActionButton.tsx b/products/actions/frontend/components/NewActionButton.tsx index a70bc21b38..e21ebb862f 100644 --- a/products/actions/frontend/components/NewActionButton.tsx +++ b/products/actions/frontend/components/NewActionButton.tsx @@ -1,10 +1,12 @@ +import { router } from 'kea-router' +import { useState } from 'react' + import { IconPencil, IconSearch } from '@posthog/icons' import { LemonModal } from '@posthog/lemon-ui' -import { router } from 'kea-router' + import { AuthorizedUrlList } from 'lib/components/AuthorizedUrlList/AuthorizedUrlList' import { AuthorizedUrlListType } from 'lib/components/AuthorizedUrlList/authorizedUrlListLogic' import { LemonButton } from 'lib/lemon-ui/LemonButton' -import { useState } from 'react' import { urls } from 'scenes/urls' export function NewActionButton({ onSelectOption }: { onSelectOption?: () => void }): JSX.Element { diff --git a/products/actions/frontend/logics/actionEditLogic.tsx b/products/actions/frontend/logics/actionEditLogic.tsx index 5650fa0f8e..83b96b414b 100644 --- a/products/actions/frontend/logics/actionEditLogic.tsx +++ b/products/actions/frontend/logics/actionEditLogic.tsx @@ -2,20 +2,21 @@ import { actions, afterMount, connect, kea, key, listeners, path, props, reducer import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' import { beforeUnload, router, urlToAction } from 'kea-router' + import api from 'lib/api' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' import { Link } from 'lib/lemon-ui/Link' import { deleteWithUndo } from 'lib/utils/deleteWithUndo' import { eventDefinitionsTableLogic } from 'scenes/data-management/events/eventDefinitionsTableLogic' +import { urls } from 'scenes/urls' import { deleteFromTree, getLastNewFolder, refreshTreeItem } from '~/layout/panel-layout/ProjectTree/projectTreeLogic' import { actionsModel } from '~/models/actionsModel' import { tagsModel } from '~/models/tagsModel' import { ActionStepType, ActionType } from '~/types' -import { actionLogic } from './actionLogic' -import { urls } from 'scenes/urls' import type { actionEditLogicType } from './actionEditLogicType' +import { actionLogic } from './actionLogic' export interface SetActionProps { merge?: boolean diff --git a/products/actions/frontend/logics/actionLogic.ts b/products/actions/frontend/logics/actionLogic.ts index 019db1b2db..36e90b1940 100644 --- a/products/actions/frontend/logics/actionLogic.ts +++ b/products/actions/frontend/logics/actionLogic.ts @@ -1,6 +1,9 @@ import { actions, connect, events, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' +import { FEATURE_FLAGS } from 'lib/constants' +import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { DataManagementTab } from 'scenes/data-management/DataManagementScene' import { Scene } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' @@ -10,8 +13,6 @@ import { ActionStepType, ActionType, ActivityScope, Breadcrumb, HogFunctionType, import { actionEditLogic } from './actionEditLogic' import type { actionLogicType } from './actionLogicType' -import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { FEATURE_FLAGS } from 'lib/constants' export interface ActionLogicProps { id?: ActionType['id'] diff --git a/products/actions/frontend/logics/actionsLogic.ts b/products/actions/frontend/logics/actionsLogic.ts index ed1b8891e9..509e42d9ec 100644 --- a/products/actions/frontend/logics/actionsLogic.ts +++ b/products/actions/frontend/logics/actionsLogic.ts @@ -1,15 +1,17 @@ import Fuse from 'fuse.js' import { actions, connect, kea, path, reducers, selectors } from 'kea' -import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { userLogic } from 'scenes/userLogic' import { subscriptions } from 'kea-subscriptions' + +import { featureFlagLogic } from 'lib/logic/featureFlagLogic' +import { DataManagementTab } from 'scenes/data-management/DataManagementScene' +import { Scene } from 'scenes/sceneTypes' +import { urls } from 'scenes/urls' +import { userLogic } from 'scenes/userLogic' + import { actionsModel } from '~/models/actionsModel' import { ActionType, Breadcrumb } from '~/types' -import { Scene } from 'scenes/sceneTypes' -import type { actionsLogicType } from './actionsLogicType' -import { urls } from 'scenes/urls' -import { DataManagementTab } from 'scenes/data-management/DataManagementScene' +import type { actionsLogicType } from './actionsLogicType' export type ActionsFilterType = 'all' | 'me' diff --git a/products/actions/frontend/pages/Action.stories.tsx b/products/actions/frontend/pages/Action.stories.tsx index ac56771f8a..f261999b48 100644 --- a/products/actions/frontend/pages/Action.stories.tsx +++ b/products/actions/frontend/pages/Action.stories.tsx @@ -1,5 +1,7 @@ -import { Meta, StoryObj } from '@storybook/react' import { MOCK_DEFAULT_BASIC_USER } from 'lib/api.mock' + +import { Meta, StoryObj } from '@storybook/react' + import { App } from 'scenes/App' import { urls } from 'scenes/urls' diff --git a/products/actions/frontend/pages/Action.tsx b/products/actions/frontend/pages/Action.tsx index 20f8f974a2..c58d27eb6a 100644 --- a/products/actions/frontend/pages/Action.tsx +++ b/products/actions/frontend/pages/Action.tsx @@ -1,7 +1,11 @@ import { useValues } from 'kea' -import { actionLogic, ActionLogicProps } from 'products/actions/frontend/logics/actionLogic' + import { SceneExport } from 'scenes/sceneTypes' + import { ActionType } from '~/types' + +import { ActionLogicProps, actionLogic } from 'products/actions/frontend/logics/actionLogic' + import { ActionEdit } from './ActionEdit' export const scene: SceneExport = { diff --git a/products/actions/frontend/pages/ActionEdit.tsx b/products/actions/frontend/pages/ActionEdit.tsx index c0f6949031..e720f58d7d 100644 --- a/products/actions/frontend/pages/ActionEdit.tsx +++ b/products/actions/frontend/pages/ActionEdit.tsx @@ -1,8 +1,10 @@ -import { IconInfo, IconPlus, IconRewindPlay, IconTrash } from '@posthog/icons' import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' import { router } from 'kea-router' import { useEffect } from 'react' + +import { IconInfo, IconPlus, IconRewindPlay, IconTrash } from '@posthog/icons' + import { EditableField } from 'lib/components/EditableField/EditableField' import { NotFound } from 'lib/components/NotFound' import { ObjectTags } from 'lib/components/ObjectTags/ObjectTags' @@ -10,32 +12,32 @@ import { PageHeader } from 'lib/components/PageHeader' import { SceneFile } from 'lib/components/Scenes/SceneFile' import { SceneTags } from 'lib/components/Scenes/SceneTags' import { SceneActivityIndicator } from 'lib/components/Scenes/SceneUpdateActivityInfo' -import { IconPlayCircle } from 'lib/lemon-ui/icons' +import { FEATURE_FLAGS } from 'lib/constants' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonField } from 'lib/lemon-ui/LemonField' +import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' import { Link } from 'lib/lemon-ui/Link' +import { Spinner } from 'lib/lemon-ui/Spinner/Spinner' +import { IconPlayCircle } from 'lib/lemon-ui/icons' +import { featureFlagLogic } from 'lib/logic/featureFlagLogic' +import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' import { ProductIntentContext } from 'lib/utils/product-intents' -import { ActionHogFunctions } from '../components/ActionHogFunctions' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' +import { SceneContent, SceneDivider, SceneSection, SceneTitleSection } from '~/layout/scenes/SceneContent' import { ScenePanel, ScenePanelActions, ScenePanelDivider, ScenePanelMetaInfo } from '~/layout/scenes/SceneLayout' - import { tagsModel } from '~/models/tagsModel' +import { Query } from '~/queries/Query/Query' +import { defaultDataTableColumns } from '~/queries/nodes/DataTable/utils' +import { NodeKind } from '~/queries/schema/schema-general' import { ActionStepType, FilterLogicalOperator, ProductKey, ReplayTabs } from '~/types' -import { FEATURE_FLAGS } from 'lib/constants' -import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' -import { actionEditLogic, ActionEditLogicProps, DEFAULT_ACTION_STEP } from '../logics/actionEditLogic' +import { ActionHogFunctions } from '../components/ActionHogFunctions' import { ActionStep } from '../components/ActionStep' -import { SceneTitleSection, SceneSection, SceneDivider, SceneContent } from '~/layout/scenes/SceneContent' +import { ActionEditLogicProps, DEFAULT_ACTION_STEP, actionEditLogic } from '../logics/actionEditLogic' import { actionLogic } from '../logics/actionLogic' -import { Spinner } from 'lib/lemon-ui/Spinner/Spinner' -import { defaultDataTableColumns } from '~/queries/nodes/DataTable/utils' -import { Query } from '~/queries/Query/Query' -import { NodeKind } from '~/queries/schema/schema-general' -import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' + const RESOURCE_TYPE = 'action' export interface ActionEditProps extends ActionEditLogicProps { diff --git a/products/actions/frontend/pages/Actions.tsx b/products/actions/frontend/pages/Actions.tsx index b9ee6e2699..fa2ca6e437 100644 --- a/products/actions/frontend/pages/Actions.tsx +++ b/products/actions/frontend/pages/Actions.tsx @@ -1,10 +1,12 @@ -import { SceneExport } from 'scenes/sceneTypes' -import { ActionsTable } from '../components/ActionsTable' -import { actionsLogic } from '../logics/actionsLogic' import { PageHeader } from 'lib/components/PageHeader' -import { NewActionButton } from '../components/NewActionButton' +import { SceneExport } from 'scenes/sceneTypes' + import { SceneContent, SceneDivider, SceneTitleSection } from '~/layout/scenes/SceneContent' +import { ActionsTable } from '../components/ActionsTable' +import { NewActionButton } from '../components/NewActionButton' +import { actionsLogic } from '../logics/actionsLogic' + export const scene: SceneExport = { component: Actions, logic: actionsLogic, diff --git a/products/actions/manifest.tsx b/products/actions/manifest.tsx index e4eecbdef0..8e3d2b041c 100644 --- a/products/actions/manifest.tsx +++ b/products/actions/manifest.tsx @@ -1,4 +1,5 @@ import { IconCursor } from '@posthog/icons' + import { urls } from 'scenes/urls' import { ActionType, ProductManifest } from '../../frontend/src/types' diff --git a/products/cohorts/manifest.tsx b/products/cohorts/manifest.tsx index 51f07cf1d9..30bb24089d 100644 --- a/products/cohorts/manifest.tsx +++ b/products/cohorts/manifest.tsx @@ -1,4 +1,5 @@ import { IconPeople } from '@posthog/icons' + import { urls } from 'scenes/urls' import { ProductManifest } from '../../frontend/src/types' diff --git a/products/dashboards/manifest.tsx b/products/dashboards/manifest.tsx index fba4db0d51..12f3b3ddae 100644 --- a/products/dashboards/manifest.tsx +++ b/products/dashboards/manifest.tsx @@ -1,5 +1,7 @@ -import { IconDashboard } from '@posthog/icons' import { combineUrl } from 'kea-router' + +import { IconDashboard } from '@posthog/icons' + import { urls } from 'scenes/urls' import { ProductManifest } from '../../frontend/src/types' diff --git a/products/early_access_features/frontend/EarlyAccessFeature.tsx b/products/early_access_features/frontend/EarlyAccessFeature.tsx index 67de1dc0dd..6cb6851a4c 100644 --- a/products/early_access_features/frontend/EarlyAccessFeature.tsx +++ b/products/early_access_features/frontend/EarlyAccessFeature.tsx @@ -1,3 +1,9 @@ +import clsx from 'clsx' +import { useActions, useValues } from 'kea' +import { Form } from 'kea-forms' +import { router } from 'kea-router' +import { useState } from 'react' + import { IconFlag, IconQuestion, IconTrash, IconX } from '@posthog/icons' import { LemonBanner, @@ -11,23 +17,28 @@ import { LemonTextArea, Link, } from '@posthog/lemon-ui' -import clsx from 'clsx' -import { useActions, useValues } from 'kea' -import { Form } from 'kea-forms' -import { router } from 'kea-router' + import { FlagSelector } from 'lib/components/FlagSelector' import { NotFound } from 'lib/components/NotFound' import { PageHeader } from 'lib/components/PageHeader' +import { SceneFile } from 'lib/components/Scenes/SceneFile' +import { SceneMetalyticsSummaryButton } from 'lib/components/Scenes/SceneMetalyticsSummaryButton' +import { SceneSelect } from 'lib/components/Scenes/SceneSelect' +import { SceneTextInput } from 'lib/components/Scenes/SceneTextInput' +import { SceneTextarea } from 'lib/components/Scenes/SceneTextarea' +import { FEATURE_FLAGS } from 'lib/constants' import { LemonDialog } from 'lib/lemon-ui/LemonDialog' import { LemonField } from 'lib/lemon-ui/LemonField' import { LemonTabs } from 'lib/lemon-ui/LemonTabs' +import { featureFlagLogic } from 'lib/logic/featureFlagLogic' +import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' import { ProductIntentContext } from 'lib/utils/product-intents' -import { useState } from 'react' import { LinkedHogFunctions } from 'scenes/hog-functions/list/LinkedHogFunctions' import { SceneExport } from 'scenes/sceneTypes' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' +import { ScenePanel, ScenePanelActions, ScenePanelDivider, ScenePanelMetaInfo } from '~/layout/scenes/SceneLayout' import { Query } from '~/queries/Query/Query' import { Node, NodeKind, QuerySchema } from '~/queries/schema/schema-general' import { @@ -44,18 +55,8 @@ import { ReplayTabs, } from '~/types' -import { SceneFile } from 'lib/components/Scenes/SceneFile' - -import { SceneMetalyticsSummaryButton } from 'lib/components/Scenes/SceneMetalyticsSummaryButton' -import { SceneSelect } from 'lib/components/Scenes/SceneSelect' -import { SceneTextarea } from 'lib/components/Scenes/SceneTextarea' -import { SceneTextInput } from 'lib/components/Scenes/SceneTextInput' -import { FEATURE_FLAGS } from 'lib/constants' -import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' -import { ScenePanel, ScenePanelActions, ScenePanelDivider, ScenePanelMetaInfo } from '~/layout/scenes/SceneLayout' -import { earlyAccessFeatureLogic } from './earlyAccessFeatureLogic' import { InstructionsModal } from './InstructionsModal' +import { earlyAccessFeatureLogic } from './earlyAccessFeatureLogic' const RESOURCE_TYPE = 'early-access-feature' diff --git a/products/early_access_features/frontend/EarlyAccessFeatures.stories.tsx b/products/early_access_features/frontend/EarlyAccessFeatures.stories.tsx index 6ad0b61326..a867309d3a 100644 --- a/products/early_access_features/frontend/EarlyAccessFeatures.stories.tsx +++ b/products/early_access_features/frontend/EarlyAccessFeatures.stories.tsx @@ -1,4 +1,5 @@ import { Meta, StoryObj } from '@storybook/react' + import { App } from 'scenes/App' import { urls } from 'scenes/urls' diff --git a/products/early_access_features/frontend/EarlyAccessFeatures.tsx b/products/early_access_features/frontend/EarlyAccessFeatures.tsx index 1e7ff48825..906676d15b 100644 --- a/products/early_access_features/frontend/EarlyAccessFeatures.tsx +++ b/products/early_access_features/frontend/EarlyAccessFeatures.tsx @@ -1,6 +1,8 @@ -import { LemonButton, LemonTable, LemonTag } from '@posthog/lemon-ui' import { useValues } from 'kea' import { router } from 'kea-router' + +import { LemonButton, LemonTable, LemonTag } from '@posthog/lemon-ui' + import { PageHeader } from 'lib/components/PageHeader' import { ProductIntroduction } from 'lib/components/ProductIntroduction/ProductIntroduction' import { LemonTableLink } from 'lib/lemon-ui/LemonTable/LemonTableLink' diff --git a/products/early_access_features/frontend/InstructionsModal.tsx b/products/early_access_features/frontend/InstructionsModal.tsx index d3d093f301..cf0a8527ee 100644 --- a/products/early_access_features/frontend/InstructionsModal.tsx +++ b/products/early_access_features/frontend/InstructionsModal.tsx @@ -1,12 +1,15 @@ -import { LemonCollapse, LemonModal, Link } from '@posthog/lemon-ui' import { useValues } from 'kea' + +import { LemonCollapse, LemonModal, Link } from '@posthog/lemon-ui' + import { CodeSnippet, Language } from 'lib/components/CodeSnippet' -import EarlyAccessFeatureImage from 'public/early-access-feature-demo.png' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { urls } from 'scenes/urls' import { FeatureFlagType, PipelineStage } from '~/types' +import EarlyAccessFeatureImage from 'public/early-access-feature-demo.png' + interface InstructionsModalProps { flag: FeatureFlagType['key'] visible: boolean diff --git a/products/early_access_features/frontend/earlyAccessFeatureLogic.ts b/products/early_access_features/frontend/earlyAccessFeatureLogic.ts index 50d006e6b1..e9087a50f7 100644 --- a/products/early_access_features/frontend/earlyAccessFeatureLogic.ts +++ b/products/early_access_features/frontend/earlyAccessFeatureLogic.ts @@ -1,9 +1,13 @@ -import { lemonToast } from '@posthog/lemon-ui' import { actions, afterMount, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' import { router, urlToAction } from 'kea-router' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' +import { FEATURE_FLAGS } from 'lib/constants' +import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' @@ -25,9 +29,6 @@ import { import type { earlyAccessFeatureLogicType } from './earlyAccessFeatureLogicType' import { earlyAccessFeaturesLogic } from './earlyAccessFeaturesLogic' -import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { FEATURE_FLAGS } from 'lib/constants' - export const NEW_EARLY_ACCESS_FEATURE: NewEarlyAccessFeatureType = { name: '', description: '', diff --git a/products/early_access_features/frontend/earlyAccessFeaturesLogic.ts b/products/early_access_features/frontend/earlyAccessFeaturesLogic.ts index 1e5b01b212..01ad4cbeaa 100644 --- a/products/early_access_features/frontend/earlyAccessFeaturesLogic.ts +++ b/products/early_access_features/frontend/earlyAccessFeaturesLogic.ts @@ -1,5 +1,6 @@ import { afterMount, kea, path, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { urls } from 'scenes/urls' diff --git a/products/early_access_features/manifest.tsx b/products/early_access_features/manifest.tsx index 8abd666b9f..0dfd89ac18 100644 --- a/products/early_access_features/manifest.tsx +++ b/products/early_access_features/manifest.tsx @@ -1,4 +1,5 @@ import { IconRocket } from '@posthog/icons' + import { urls } from 'scenes/urls' import { ProductManifest } from '../../frontend/src/types' diff --git a/products/error_tracking/frontend/ErrorTracking.stories.tsx b/products/error_tracking/frontend/ErrorTracking.stories.tsx index 6e32427373..e73fb620e8 100644 --- a/products/error_tracking/frontend/ErrorTracking.stories.tsx +++ b/products/error_tracking/frontend/ErrorTracking.stories.tsx @@ -1,4 +1,5 @@ import { Meta, StoryObj } from '@storybook/react' + import { App } from 'scenes/App' import { urls } from 'scenes/urls' diff --git a/products/error_tracking/frontend/ErrorTrackingIssueScene.tsx b/products/error_tracking/frontend/ErrorTrackingIssueScene.tsx index 242073d46b..efcd54ed09 100644 --- a/products/error_tracking/frontend/ErrorTrackingIssueScene.tsx +++ b/products/error_tracking/frontend/ErrorTrackingIssueScene.tsx @@ -5,14 +5,15 @@ import { useActions, useValues } from 'kea' import { SceneExport } from 'scenes/sceneTypes' import { ErrorTrackingIssue } from '~/queries/schema/schema-general' + +import { ErrorTrackingIssueScenePanel } from './ErrorTrackingIssueScenePanel' import { ErrorFilters } from './components/ErrorFilters' import { ErrorTrackingSetupPrompt } from './components/ErrorTrackingSetupPrompt/ErrorTrackingSetupPrompt' +import { EventsTable } from './components/EventsTable/EventsTable' import { ExceptionCard } from './components/ExceptionCard' import { errorTrackingIssueSceneLogic } from './errorTrackingIssueSceneLogic' -import { Metadata } from './issue/Metadata' import { useErrorTagRenderer } from './hooks/use-error-tag-renderer' -import { ErrorTrackingIssueScenePanel } from './ErrorTrackingIssueScenePanel' -import { EventsTable } from './components/EventsTable/EventsTable' +import { Metadata } from './issue/Metadata' export const scene: SceneExport = { component: ErrorTrackingIssueScene, diff --git a/products/error_tracking/frontend/ErrorTrackingIssueScenePanel.tsx b/products/error_tracking/frontend/ErrorTrackingIssueScenePanel.tsx index f213a20c32..7b6e20557e 100644 --- a/products/error_tracking/frontend/ErrorTrackingIssueScenePanel.tsx +++ b/products/error_tracking/frontend/ErrorTrackingIssueScenePanel.tsx @@ -1,7 +1,8 @@ import { useActions, useValues } from 'kea' -import { SceneCommonButtons } from 'lib/components/Scenes/SceneCommonButtons' +import { SceneCommonButtons } from 'lib/components/Scenes/SceneCommonButtons' import { SceneTextInput } from 'lib/components/Scenes/SceneTextInput' +import { SceneTextarea } from 'lib/components/Scenes/SceneTextarea' import { SceneActivityIndicator } from 'lib/components/Scenes/SceneUpdateActivityInfo' import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' import { @@ -13,14 +14,15 @@ import { } from 'lib/ui/DropdownMenu/DropdownMenu' import { copyToClipboard } from 'lib/utils/copyToClipboard' import { urls } from 'scenes/urls' + import { ScenePanelCommonActions, ScenePanelDivider, ScenePanelLabel } from '~/layout/scenes/SceneLayout' import { ErrorTrackingIssue, ErrorTrackingIssueAssignee } from '~/queries/schema/schema-general' + import { AssigneeIconDisplay, AssigneeLabelDisplay } from './components/Assignee/AssigneeDisplay' import { AssigneeSelect } from './components/Assignee/AssigneeSelect' import { ExternalReferences } from './components/ExternalReferences' import { StatusIndicator } from './components/Indicator' import { errorTrackingIssueSceneLogic } from './errorTrackingIssueSceneLogic' -import { SceneTextarea } from 'lib/components/Scenes/SceneTextarea' const RESOURCE_TYPE = 'issue' diff --git a/products/error_tracking/frontend/ErrorTrackingListOptions.tsx b/products/error_tracking/frontend/ErrorTrackingListOptions.tsx index 2222599f29..99de6d51cf 100644 --- a/products/error_tracking/frontend/ErrorTrackingListOptions.tsx +++ b/products/error_tracking/frontend/ErrorTrackingListOptions.tsx @@ -2,8 +2,8 @@ import { useValues } from 'kea' import { BulkActions } from './components/IssueActions/BulkActions' import { IssueQueryOptions } from './components/IssueQueryOptions/IssueQueryOptions' -import { errorTrackingDataNodeLogic } from './errorTrackingDataNodeLogic' import { errorTrackingBulkSelectLogic } from './errorTrackingBulkSelectLogic' +import { errorTrackingDataNodeLogic } from './errorTrackingDataNodeLogic' export const ErrorTrackingListOptions = (): JSX.Element => { const { selectedIssueIds } = useValues(errorTrackingBulkSelectLogic) diff --git a/products/error_tracking/frontend/ErrorTrackingScene.tsx b/products/error_tracking/frontend/ErrorTrackingScene.tsx index 7277e4ce54..b9a62f4d9e 100644 --- a/products/error_tracking/frontend/ErrorTrackingScene.tsx +++ b/products/error_tracking/frontend/ErrorTrackingScene.tsx @@ -1,32 +1,34 @@ +import { BindLogic, useValues } from 'kea' +import { posthog } from 'posthog-js' + import { IconGear } from '@posthog/icons' import { LemonBanner, LemonButton, LemonDivider, Link, Tooltip } from '@posthog/lemon-ui' -import { BindLogic, useValues } from 'kea' + import { PageHeader } from 'lib/components/PageHeader' +import { FEATURE_FLAGS } from 'lib/constants' +import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { humanFriendlyLargeNumber } from 'lib/utils' -import { posthog } from 'posthog-js' +import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { SceneExport } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' -import { insightVizDataNodeKey } from '~/queries/nodes/InsightViz/InsightViz' import { Query } from '~/queries/Query/Query' +import { insightVizDataNodeKey } from '~/queries/nodes/InsightViz/InsightViz' import { ErrorTrackingIssue } from '~/queries/schema/schema-general' import { QueryContext, QueryContextColumnComponent, QueryContextColumnTitleComponent } from '~/queries/types' import { InsightLogicProps } from '~/types' -import { ErrorFilters } from './components/ErrorFilters' -import { errorIngestionLogic } from './components/ErrorTrackingSetupPrompt/errorIngestionLogic' -import { ErrorTrackingSetupPrompt } from './components/ErrorTrackingSetupPrompt/ErrorTrackingSetupPrompt' -import { errorTrackingDataNodeLogic } from './errorTrackingDataNodeLogic' import { ErrorTrackingListOptions } from './ErrorTrackingListOptions' +import { OccurrenceSparkline } from './OccurrenceSparkline' +import { ErrorFilters } from './components/ErrorFilters' +import { ErrorTrackingSetupPrompt } from './components/ErrorTrackingSetupPrompt/ErrorTrackingSetupPrompt' +import { errorIngestionLogic } from './components/ErrorTrackingSetupPrompt/errorIngestionLogic' +import { ErrorTrackingSceneTool } from './components/SceneTool' +import { IssueListTitleColumn, IssueListTitleHeader } from './components/TableColumns' +import { errorTrackingDataNodeLogic } from './errorTrackingDataNodeLogic' import { errorTrackingSceneLogic } from './errorTrackingSceneLogic' import { useSparklineData } from './hooks/use-sparkline-data' -import { OccurrenceSparkline } from './OccurrenceSparkline' import { ERROR_TRACKING_LISTING_RESOLUTION } from './utils' -import { ErrorTrackingSceneTool } from './components/SceneTool' -import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { FEATURE_FLAGS } from 'lib/constants' -import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' -import { IssueListTitleHeader, IssueListTitleColumn } from './components/TableColumns' export const scene: SceneExport = { component: ErrorTrackingScene, diff --git a/products/error_tracking/frontend/OccurrenceSparkline.tsx b/products/error_tracking/frontend/OccurrenceSparkline.tsx index 068fbe38c5..9322f68fc4 100644 --- a/products/error_tracking/frontend/OccurrenceSparkline.tsx +++ b/products/error_tracking/frontend/OccurrenceSparkline.tsx @@ -1,7 +1,8 @@ import { useValues } from 'kea' +import { useCallback, useMemo } from 'react' + import { AnyScaleOptions, Sparkline } from 'lib/components/Sparkline' import { dayjs } from 'lib/dayjs' -import { useCallback, useMemo } from 'react' import { themeLogic } from '~/layout/navigation-3000/themeLogic' diff --git a/products/error_tracking/frontend/__mocks__/events/index.tsx b/products/error_tracking/frontend/__mocks__/events/index.tsx index c94df650e6..041ac7768c 100644 --- a/products/error_tracking/frontend/__mocks__/events/index.tsx +++ b/products/error_tracking/frontend/__mocks__/events/index.tsx @@ -1,7 +1,8 @@ import { BindLogic, useActions } from 'kea' +import { useEffect } from 'react' + import { errorPropertiesLogic } from 'lib/components/Errors/errorPropertiesLogic' import { ErrorEventProperties } from 'lib/components/Errors/types' -import { useEffect } from 'react' import { exceptionCardLogic } from '../../components/ExceptionCard/exceptionCardLogic' import javascript_empty from './javascript_empty.json' diff --git a/products/error_tracking/frontend/components/Assignee/AssigneeDisplay.tsx b/products/error_tracking/frontend/components/Assignee/AssigneeDisplay.tsx index 697f0dcf60..6bbce9e938 100644 --- a/products/error_tracking/frontend/components/Assignee/AssigneeDisplay.tsx +++ b/products/error_tracking/frontend/components/Assignee/AssigneeDisplay.tsx @@ -1,11 +1,13 @@ -import { IconPerson } from '@posthog/icons' -import { ProfilePicture } from '@posthog/lemon-ui' import { useValues } from 'kea' -import { fullName, UnexpectedNeverError } from 'lib/utils' -import { cn } from 'lib/utils/css-classes' import React, { useMemo } from 'react' import { match } from 'ts-pattern' +import { IconPerson } from '@posthog/icons' +import { ProfilePicture } from '@posthog/lemon-ui' + +import { UnexpectedNeverError, fullName } from 'lib/utils' +import { cn } from 'lib/utils/css-classes' + import { ErrorTrackingIssue } from '~/queries/schema/schema-general' import { Assignee, assigneeSelectLogic } from './assigneeSelectLogic' diff --git a/products/error_tracking/frontend/components/Assignee/AssigneeDropdown.tsx b/products/error_tracking/frontend/components/Assignee/AssigneeDropdown.tsx index 2d03e6d4c5..d7c6c9b8c6 100644 --- a/products/error_tracking/frontend/components/Assignee/AssigneeDropdown.tsx +++ b/products/error_tracking/frontend/components/Assignee/AssigneeDropdown.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconPlusSmall, IconX } from '@posthog/icons' import { LemonButton, LemonInput } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { urls } from 'scenes/urls' import { ErrorTrackingIssue, ErrorTrackingIssueAssignee } from '~/queries/schema/schema-general' diff --git a/products/error_tracking/frontend/components/Assignee/AssigneeSelect.tsx b/products/error_tracking/frontend/components/Assignee/AssigneeSelect.tsx index 1b3c181edd..f779f8c49e 100644 --- a/products/error_tracking/frontend/components/Assignee/AssigneeSelect.tsx +++ b/products/error_tracking/frontend/components/Assignee/AssigneeSelect.tsx @@ -1,7 +1,8 @@ -import { LemonDropdown } from '@posthog/lemon-ui' import { useActions } from 'kea' import { useEffect, useState } from 'react' +import { LemonDropdown } from '@posthog/lemon-ui' + import { ErrorTrackingIssue } from '~/queries/schema/schema-general' import { AssigneeResolver } from './AssigneeDisplay' diff --git a/products/error_tracking/frontend/components/Assignee/assigneeSelectLogic.tsx b/products/error_tracking/frontend/components/Assignee/assigneeSelectLogic.tsx index 4a6816f5ec..e1f4d68b83 100644 --- a/products/error_tracking/frontend/components/Assignee/assigneeSelectLogic.tsx +++ b/products/error_tracking/frontend/components/Assignee/assigneeSelectLogic.tsx @@ -1,5 +1,6 @@ import Fuse from 'fuse.js' import { actions, connect, kea, listeners, path, props, reducers, selectors } from 'kea' + import { membersLogic } from 'scenes/organization/membersLogic' import { rolesLogic } from 'scenes/settings/organization/Permissions/Roles/rolesLogic' diff --git a/products/error_tracking/frontend/components/ContextDisplay.stories.tsx b/products/error_tracking/frontend/components/ContextDisplay.stories.tsx index efe5ba4772..fb118aa1b7 100644 --- a/products/error_tracking/frontend/components/ContextDisplay.stories.tsx +++ b/products/error_tracking/frontend/components/ContextDisplay.stories.tsx @@ -1,9 +1,11 @@ -import { LemonCard } from '@posthog/lemon-ui' import { Meta } from '@storybook/react' +import { LemonCard } from '@posthog/lemon-ui' + +import { getAdditionalProperties, getExceptionAttributes } from 'lib/components/Errors/utils' + import { TEST_EVENTS, TestEventName } from '../__mocks__/events' import { ContextDisplay, ContextDisplayProps } from './ContextDisplay' -import { getAdditionalProperties, getExceptionAttributes } from 'lib/components/Errors/utils' const meta: Meta = { title: 'ErrorTracking/ContextDisplay', diff --git a/products/error_tracking/frontend/components/ContextDisplay.tsx b/products/error_tracking/frontend/components/ContextDisplay.tsx index 7dc21a366d..0e865ac815 100644 --- a/products/error_tracking/frontend/components/ContextDisplay.tsx +++ b/products/error_tracking/frontend/components/ContextDisplay.tsx @@ -1,10 +1,12 @@ +import { match } from 'ts-pattern' + import { IconCopy } from '@posthog/icons' import { LemonButton, LemonTable, Spinner } from '@posthog/lemon-ui' + import { ExceptionAttributes } from 'lib/components/Errors/types' import { concatValues } from 'lib/components/Errors/utils' import { identifierToHuman } from 'lib/utils' import { copyToClipboard } from 'lib/utils/copyToClipboard' -import { match } from 'ts-pattern' export type ContextDisplayProps = { loading: boolean diff --git a/products/error_tracking/frontend/components/DataSourceTable/DataSourceTable.tsx b/products/error_tracking/frontend/components/DataSourceTable/DataSourceTable.tsx index 913ce7669f..e16e6b2fe0 100644 --- a/products/error_tracking/frontend/components/DataSourceTable/DataSourceTable.tsx +++ b/products/error_tracking/frontend/components/DataSourceTable/DataSourceTable.tsx @@ -1,7 +1,8 @@ -import { LemonButton, LemonTable, LemonTableColumn } from '@posthog/lemon-ui' import { BuiltLogic, useActions, useValues } from 'kea' -import { Children, isValidElement, MouseEvent, ReactElement, useCallback } from 'react' -import { match, P } from 'ts-pattern' +import { Children, MouseEvent, ReactElement, isValidElement, useCallback } from 'react' +import { P, match } from 'ts-pattern' + +import { LemonButton, LemonTable, LemonTableColumn } from '@posthog/lemon-ui' import type { DataSourceLogic } from './types' diff --git a/products/error_tracking/frontend/components/DataSourceTable/createDataSource.ts b/products/error_tracking/frontend/components/DataSourceTable/createDataSource.ts index ba49b0727e..259c291c3a 100644 --- a/products/error_tracking/frontend/components/DataSourceTable/createDataSource.ts +++ b/products/error_tracking/frontend/components/DataSourceTable/createDataSource.ts @@ -1,4 +1,4 @@ -import { connect, kea, key, KeyType, LogicWrapper, path, props, selectors } from 'kea' +import { KeyType, LogicWrapper, connect, kea, key, path, props, selectors } from 'kea' import { dataNodeLogic } from '~/queries/nodes/DataNode/dataNodeLogic' import { insightVizDataNodeKey } from '~/queries/nodes/InsightViz/InsightViz' diff --git a/products/error_tracking/frontend/components/ErrorFilters/DateRange.tsx b/products/error_tracking/frontend/components/ErrorFilters/DateRange.tsx index d63a90f214..4b801a9a4f 100644 --- a/products/error_tracking/frontend/components/ErrorFilters/DateRange.tsx +++ b/products/error_tracking/frontend/components/ErrorFilters/DateRange.tsx @@ -1,8 +1,10 @@ import { useActions, useValues } from 'kea' + import { DateFilter } from 'lib/components/DateFilter/DateFilter' +import { dayjs } from 'lib/dayjs' import { DATE_FORMAT, dateMapping } from 'lib/utils' import { cn } from 'lib/utils/css-classes' -import { dayjs } from 'lib/dayjs' + import { errorFiltersLogic } from './errorFiltersLogic' const errorTrackingDateOptions = dateMapping.filter((dm) => !['Yesterday', 'All time', 'Today'].includes(dm.key)) diff --git a/products/error_tracking/frontend/components/ErrorFilters/FilterGroup.tsx b/products/error_tracking/frontend/components/ErrorFilters/FilterGroup.tsx index 11d19cdae1..4e62c7b0e8 100644 --- a/products/error_tracking/frontend/components/ErrorFilters/FilterGroup.tsx +++ b/products/error_tracking/frontend/components/ErrorFilters/FilterGroup.tsx @@ -1,5 +1,9 @@ -import { LemonDropdown } from '@posthog/lemon-ui' import { BindLogic, useActions, useValues } from 'kea' +import { useRef, useState } from 'react' +import { useDebouncedCallback } from 'use-debounce' + +import { LemonDropdown } from '@posthog/lemon-ui' + import { InfiniteSelectResults } from 'lib/components/TaxonomicFilter/InfiniteSelectResults' import { TaxonomicFilterSearchInput } from 'lib/components/TaxonomicFilter/TaxonomicFilter' import { taxonomicFilterLogic } from 'lib/components/TaxonomicFilter/taxonomicFilterLogic' @@ -7,13 +11,11 @@ import { TaxonomicFilterGroupType, TaxonomicFilterLogicProps } from 'lib/compone import UniversalFilters from 'lib/components/UniversalFilters/UniversalFilters' import { universalFiltersLogic } from 'lib/components/UniversalFilters/universalFiltersLogic' import { isUniversalGroupFilterLike } from 'lib/components/UniversalFilters/utils' -import { useRef, useState } from 'react' -import { useDebouncedCallback } from 'use-debounce' +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { FilterLogicalOperator, PropertyFilterType, UniversalFiltersGroup } from '~/types' import { errorFiltersLogic } from './errorFiltersLogic' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' export const taxonomicFilterLogicKey = 'error-tracking' export const taxonomicGroupTypes = [ diff --git a/products/error_tracking/frontend/components/ErrorFilters/InternalAccounts.tsx b/products/error_tracking/frontend/components/ErrorFilters/InternalAccounts.tsx index 3da4fa8aea..65638d51db 100644 --- a/products/error_tracking/frontend/components/ErrorFilters/InternalAccounts.tsx +++ b/products/error_tracking/frontend/components/ErrorFilters/InternalAccounts.tsx @@ -1,4 +1,5 @@ import { useActions, useValues } from 'kea' + import { TestAccountFilter } from 'scenes/insights/filters/TestAccountFilter' import { errorFiltersLogic } from './errorFiltersLogic' diff --git a/products/error_tracking/frontend/components/ErrorFilters/errorFiltersLogic.ts b/products/error_tracking/frontend/components/ErrorFilters/errorFiltersLogic.ts index 1f49ab5e2a..ae58bd8153 100644 --- a/products/error_tracking/frontend/components/ErrorFilters/errorFiltersLogic.ts +++ b/products/error_tracking/frontend/components/ErrorFilters/errorFiltersLogic.ts @@ -1,6 +1,7 @@ import equal from 'fast-deep-equal' import { actions, kea, path, reducers } from 'kea' import { actionToUrl, router, urlToAction } from 'kea-router' + import { Params } from 'scenes/sceneTypes' import { DateRange } from '~/queries/schema/schema-general' diff --git a/products/error_tracking/frontend/components/ErrorTag.tsx b/products/error_tracking/frontend/components/ErrorTag.tsx index ecd04f9bff..ca1038262b 100644 --- a/products/error_tracking/frontend/components/ErrorTag.tsx +++ b/products/error_tracking/frontend/components/ErrorTag.tsx @@ -1,4 +1,5 @@ import { LemonTag } from '@posthog/lemon-ui' + import { cn } from 'lib/utils/css-classes' export interface ErrorTagProps { diff --git a/products/error_tracking/frontend/components/ErrorTrackingSetupPrompt/ErrorTrackingSetupPrompt.tsx b/products/error_tracking/frontend/components/ErrorTrackingSetupPrompt/ErrorTrackingSetupPrompt.tsx index 05a7a0cffa..c2e03c9e65 100644 --- a/products/error_tracking/frontend/components/ErrorTrackingSetupPrompt/ErrorTrackingSetupPrompt.tsx +++ b/products/error_tracking/frontend/components/ErrorTrackingSetupPrompt/ErrorTrackingSetupPrompt.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconExternal } from '@posthog/icons' import { LemonButton, Spinner } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { ProductIntroduction } from 'lib/components/ProductIntroduction/ProductIntroduction' import { ProductIntentContext } from 'lib/utils/product-intents' import { teamLogic } from 'scenes/teamLogic' diff --git a/products/error_tracking/frontend/components/ErrorTrackingSetupPrompt/errorIngestionLogic.tsx b/products/error_tracking/frontend/components/ErrorTrackingSetupPrompt/errorIngestionLogic.tsx index 4f1d24a425..ad82226fd9 100644 --- a/products/error_tracking/frontend/components/ErrorTrackingSetupPrompt/errorIngestionLogic.tsx +++ b/products/error_tracking/frontend/components/ErrorTrackingSetupPrompt/errorIngestionLogic.tsx @@ -1,5 +1,6 @@ import { afterMount, kea, path } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { isDefinitionStale } from 'lib/utils/definitions' diff --git a/products/error_tracking/frontend/components/EventsTable/EventsTable.tsx b/products/error_tracking/frontend/components/EventsTable/EventsTable.tsx index 5f5bf9a065..cd4e7a4bd3 100644 --- a/products/error_tracking/frontend/components/EventsTable/EventsTable.tsx +++ b/products/error_tracking/frontend/components/EventsTable/EventsTable.tsx @@ -1,12 +1,19 @@ -import { LemonButton, Link } from '@posthog/lemon-ui' import clsx from 'clsx' import { useValues } from 'kea' + +import { IconAI } from '@posthog/icons' +import { LemonButton, Link } from '@posthog/lemon-ui' + import { ErrorEventType } from 'lib/components/Errors/types' import { getExceptionAttributes, getRecordingStatus, getSessionId } from 'lib/components/Errors/utils' import { TZLabel } from 'lib/components/TZLabel' import ViewRecordingButton from 'lib/components/ViewRecordingButton/ViewRecordingButton' -import { asDisplay } from 'scenes/persons/person-utils' +import { More } from 'lib/lemon-ui/LemonButton/More' +import { IconLink } from 'lib/lemon-ui/icons' +import { copyToClipboard } from 'lib/utils/copyToClipboard' import { PersonDisplay, PersonIcon } from 'scenes/persons/PersonDisplay' +import { asDisplay } from 'scenes/persons/person-utils' +import { urls } from 'scenes/urls' import { useErrorTagRenderer } from '../../hooks/use-error-tag-renderer' import { cancelEvent } from '../../utils' @@ -14,11 +21,6 @@ import { DataSourceTable, DataSourceTableColumn } from '../DataSourceTable' import { ExceptionAttributesPreview } from '../ExceptionAttributesPreview' import { eventsQueryLogic } from './eventsQueryLogic' import { eventsSourceLogic } from './eventsSourceLogic' -import { IconAI } from '@posthog/icons' -import { urls } from 'scenes/urls' -import { More } from 'lib/lemon-ui/LemonButton/More' -import { IconLink } from 'lib/lemon-ui/icons' -import { copyToClipboard } from 'lib/utils/copyToClipboard' export interface EventsTableProps { issueId: string diff --git a/products/error_tracking/frontend/components/EventsTable/eventsQueryLogic.tsx b/products/error_tracking/frontend/components/EventsTable/eventsQueryLogic.tsx index ae6b29d593..74aba1edcf 100644 --- a/products/error_tracking/frontend/components/EventsTable/eventsQueryLogic.tsx +++ b/products/error_tracking/frontend/components/EventsTable/eventsQueryLogic.tsx @@ -1,4 +1,5 @@ -import { connect, kea, key, LogicWrapper, path, props, selectors } from 'kea' +import { LogicWrapper, connect, kea, key, path, props, selectors } from 'kea' + import { uuid } from 'lib/utils' import { ErrorTrackingRelationalIssue, EventsQuery } from '~/queries/schema/schema-general' diff --git a/products/error_tracking/frontend/components/EventsTable/eventsSourceLogic.ts b/products/error_tracking/frontend/components/EventsTable/eventsSourceLogic.ts index 4276493abc..433daf84c2 100644 --- a/products/error_tracking/frontend/components/EventsTable/eventsSourceLogic.ts +++ b/products/error_tracking/frontend/components/EventsTable/eventsSourceLogic.ts @@ -2,7 +2,7 @@ import { ErrorEventType } from 'lib/components/Errors/types' import { EventsQuery } from '~/queries/schema/schema-general' -import { createDataSourceLogic, DataSourceLogicProps } from '../DataSourceTable' +import { DataSourceLogicProps, createDataSourceLogic } from '../DataSourceTable' export interface EventsSourceProps { queryKey: string diff --git a/products/error_tracking/frontend/components/ExceptionAttributesPreview/ExceptionAttributesPreview.tsx b/products/error_tracking/frontend/components/ExceptionAttributesPreview/ExceptionAttributesPreview.tsx index 6b1bd9553a..512408dbb9 100644 --- a/products/error_tracking/frontend/components/ExceptionAttributesPreview/ExceptionAttributesPreview.tsx +++ b/products/error_tracking/frontend/components/ExceptionAttributesPreview/ExceptionAttributesPreview.tsx @@ -1,10 +1,12 @@ -import { IconBug } from '@posthog/icons' -import { LemonTag, Spinner } from '@posthog/lemon-ui' -import { ExceptionAttributes } from 'lib/components/Errors/types' -import { PropertyIcon } from 'lib/components/PropertyIcon/PropertyIcon' import { Children } from 'react' import { match } from 'ts-pattern' +import { IconBug } from '@posthog/icons' +import { LemonTag, Spinner } from '@posthog/lemon-ui' + +import { ExceptionAttributes } from 'lib/components/Errors/types' +import { PropertyIcon } from 'lib/components/PropertyIcon/PropertyIcon' + export interface ExceptionAttributesPreviewProps { attributes: ExceptionAttributes | null loading?: boolean diff --git a/products/error_tracking/frontend/components/ExceptionCard/ExceptionCard.tsx b/products/error_tracking/frontend/components/ExceptionCard/ExceptionCard.tsx index 0efe377276..ec59481dec 100644 --- a/products/error_tracking/frontend/components/ExceptionCard/ExceptionCard.tsx +++ b/products/error_tracking/frontend/components/ExceptionCard/ExceptionCard.tsx @@ -1,18 +1,20 @@ +import { BindLogic, useActions, useValues } from 'kea' +import { useEffect } from 'react' + import { IconLogomark } from '@posthog/icons' import { LemonCard } from '@posthog/lemon-ui' -import { BindLogic, useActions, useValues } from 'kea' -import { errorPropertiesLogic, ErrorPropertiesLogicProps } from 'lib/components/Errors/errorPropertiesLogic' + +import { ErrorPropertiesLogicProps, errorPropertiesLogic } from 'lib/components/Errors/errorPropertiesLogic' import { ErrorEventType } from 'lib/components/Errors/types' import { TZLabel } from 'lib/components/TZLabel' import { TabsPrimitive, TabsPrimitiveList, TabsPrimitiveTrigger } from 'lib/ui/TabsPrimitive/TabsPrimitive' -import { useEffect } from 'react' import { ErrorTrackingRelationalIssue } from '~/queries/schema/schema-general' -import { exceptionCardLogic } from './exceptionCardLogic' import { PropertiesTab } from './Tabs/PropertiesTab' -import { StacktraceTab } from './Tabs/StacktraceTab' import { SessionTab } from './Tabs/SessionTab' +import { StacktraceTab } from './Tabs/StacktraceTab' +import { exceptionCardLogic } from './exceptionCardLogic' interface ExceptionCardContentProps { issue?: ErrorTrackingRelationalIssue diff --git a/products/error_tracking/frontend/components/ExceptionCard/FixModal.tsx b/products/error_tracking/frontend/components/ExceptionCard/FixModal.tsx index 4d0b2d9412..1d2169d995 100644 --- a/products/error_tracking/frontend/components/ExceptionCard/FixModal.tsx +++ b/products/error_tracking/frontend/components/ExceptionCard/FixModal.tsx @@ -1,11 +1,13 @@ -import { LemonButton, LemonModal } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' +import posthog from 'posthog-js' +import { useEffect } from 'react' + +import { LemonButton, LemonModal } from '@posthog/lemon-ui' + import { errorPropertiesLogic } from 'lib/components/Errors/errorPropertiesLogic' import { stackFrameLogic } from 'lib/components/Errors/stackFrameLogic' import { ErrorTrackingException } from 'lib/components/Errors/types' import { copyToClipboard } from 'lib/utils/copyToClipboard' -import posthog from 'posthog-js' -import { useEffect } from 'react' interface FixModalProps { isOpen: boolean diff --git a/products/error_tracking/frontend/components/ExceptionCard/Stacktrace/StacktraceDisplay.stories.tsx b/products/error_tracking/frontend/components/ExceptionCard/Stacktrace/StacktraceDisplay.stories.tsx index daf3422741..16b30c8739 100644 --- a/products/error_tracking/frontend/components/ExceptionCard/Stacktrace/StacktraceDisplay.stories.tsx +++ b/products/error_tracking/frontend/components/ExceptionCard/Stacktrace/StacktraceDisplay.stories.tsx @@ -1,5 +1,7 @@ -import { LemonCard } from '@posthog/lemon-ui' import { Meta } from '@storybook/react' + +import { LemonCard } from '@posthog/lemon-ui' + import { sceneLogic } from 'scenes/sceneLogic' import { mswDecorator } from '~/mocks/browser' diff --git a/products/error_tracking/frontend/components/ExceptionCard/Stacktrace/StacktraceGenericDisplay.tsx b/products/error_tracking/frontend/components/ExceptionCard/Stacktrace/StacktraceGenericDisplay.tsx index 471712de35..48f49bef06 100644 --- a/products/error_tracking/frontend/components/ExceptionCard/Stacktrace/StacktraceGenericDisplay.tsx +++ b/products/error_tracking/frontend/components/ExceptionCard/Stacktrace/StacktraceGenericDisplay.tsx @@ -1,11 +1,13 @@ -import { LemonSkeleton } from '@posthog/lemon-ui' import { useValues } from 'kea' -import { errorPropertiesLogic } from 'lib/components/Errors/errorPropertiesLogic' +import { useCallback } from 'react' + +import { LemonSkeleton } from '@posthog/lemon-ui' + import { FingerprintRecordPartDisplay } from 'lib/components/Errors/FingerprintRecordPartDisplay' import { ChainedStackTraces, ExceptionHeaderProps } from 'lib/components/Errors/StackTraces' +import { errorPropertiesLogic } from 'lib/components/Errors/errorPropertiesLogic' import { Tooltip } from 'lib/lemon-ui/Tooltip' import { cn } from 'lib/utils/css-classes' -import { useCallback } from 'react' import { cancelEvent } from '../../../utils' import { RuntimeIcon } from '../../RuntimeIcon' diff --git a/products/error_tracking/frontend/components/ExceptionCard/Stacktrace/StacktraceTextDisplay.tsx b/products/error_tracking/frontend/components/ExceptionCard/Stacktrace/StacktraceTextDisplay.tsx index 529aa46520..13a2b5fc70 100644 --- a/products/error_tracking/frontend/components/ExceptionCard/Stacktrace/StacktraceTextDisplay.tsx +++ b/products/error_tracking/frontend/components/ExceptionCard/Stacktrace/StacktraceTextDisplay.tsx @@ -1,11 +1,13 @@ -import { LemonSkeleton } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' +import { useCallback, useEffect } from 'react' + +import { LemonSkeleton } from '@posthog/lemon-ui' + +import { ExceptionHeaderProps } from 'lib/components/Errors/StackTraces' import { errorPropertiesLogic } from 'lib/components/Errors/errorPropertiesLogic' import { stackFrameLogic } from 'lib/components/Errors/stackFrameLogic' -import { ExceptionHeaderProps } from 'lib/components/Errors/StackTraces' import { ErrorTrackingException, ErrorTrackingStackFrame } from 'lib/components/Errors/types' import { cn } from 'lib/utils/css-classes' -import { useCallback, useEffect } from 'react' import { exceptionCardLogic } from '../exceptionCardLogic' import { StacktraceBaseDisplayProps, StacktraceBaseExceptionHeaderProps } from './StacktraceBase' diff --git a/products/error_tracking/frontend/components/ExceptionCard/Tabs/PropertiesTab.tsx b/products/error_tracking/frontend/components/ExceptionCard/Tabs/PropertiesTab.tsx index 1c24c58aa7..96568e5191 100644 --- a/products/error_tracking/frontend/components/ExceptionCard/Tabs/PropertiesTab.tsx +++ b/products/error_tracking/frontend/components/ExceptionCard/Tabs/PropertiesTab.tsx @@ -1,9 +1,10 @@ -import { errorPropertiesLogic } from 'lib/components/Errors/errorPropertiesLogic' -import { JSONViewer } from 'lib/components/JSONViewer' -import { TabsPrimitiveContent, TabsPrimitiveContentProps } from 'lib/ui/TabsPrimitive/TabsPrimitive' import { useActions, useValues } from 'kea' -import { exceptionCardLogic } from '../exceptionCardLogic' +import { IconChevronDown } from '@posthog/icons' + +import { errorPropertiesLogic } from 'lib/components/Errors/errorPropertiesLogic' +import { JSONViewer } from 'lib/components/JSONViewer' +import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' import { DropdownMenu, DropdownMenuCheckboxItem, @@ -11,9 +12,10 @@ import { DropdownMenuItemIndicator, DropdownMenuTrigger, } from 'lib/ui/DropdownMenu/DropdownMenu' -import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' -import { IconChevronDown } from '@posthog/icons' +import { TabsPrimitiveContent, TabsPrimitiveContentProps } from 'lib/ui/TabsPrimitive/TabsPrimitive' + import { ContextDisplay } from '../../ContextDisplay' +import { exceptionCardLogic } from '../exceptionCardLogic' import { SubHeader } from './SubHeader' export interface PropertiesTabProps extends TabsPrimitiveContentProps {} diff --git a/products/error_tracking/frontend/components/ExceptionCard/Tabs/SessionTab/SessionRecording.tsx b/products/error_tracking/frontend/components/ExceptionCard/Tabs/SessionTab/SessionRecording.tsx index bbd4fc8973..d8e2575d1e 100644 --- a/products/error_tracking/frontend/components/ExceptionCard/Tabs/SessionTab/SessionRecording.tsx +++ b/products/error_tracking/frontend/components/ExceptionCard/Tabs/SessionTab/SessionRecording.tsx @@ -1,13 +1,15 @@ -import { Spinner } from '@posthog/lemon-ui' +import { SessionTabProps } from '.' import { useActions, useValues } from 'kea' -import { TabsPrimitiveContent } from 'lib/ui/TabsPrimitive/TabsPrimitive' import { useEffect } from 'react' +import { match } from 'ts-pattern' + +import { Spinner } from '@posthog/lemon-ui' + +import { TabsPrimitiveContent } from 'lib/ui/TabsPrimitive/TabsPrimitive' import { SessionRecordingPlayer } from 'scenes/session-recordings/player/SessionRecordingPlayer' import { SessionRecordingPlayerMode } from 'scenes/session-recordings/player/sessionRecordingPlayerLogic' import { exceptionCardLogic } from '../../exceptionCardLogic' -import { match } from 'ts-pattern' -import { SessionTabProps } from '.' import { sessionTabLogic } from './sessionTabLogic' export function SessionRecording({ ...props }: SessionTabProps): JSX.Element { diff --git a/products/error_tracking/frontend/components/ExceptionCard/Tabs/SessionTab/SessionTimeline/SessionTimeline.tsx b/products/error_tracking/frontend/components/ExceptionCard/Tabs/SessionTab/SessionTimeline/SessionTimeline.tsx index 28aa830f14..6479e638d5 100644 --- a/products/error_tracking/frontend/components/ExceptionCard/Tabs/SessionTab/SessionTimeline/SessionTimeline.tsx +++ b/products/error_tracking/frontend/components/ExceptionCard/Tabs/SessionTab/SessionTimeline/SessionTimeline.tsx @@ -1,19 +1,23 @@ -import { TabsPrimitiveContent, TabsPrimitiveContentProps } from 'lib/ui/TabsPrimitive/TabsPrimitive' -import { sessionTabLogic } from '../sessionTabLogic' +import { cva } from 'cva' import { useActions, useValues } from 'kea' +import { forwardRef, useCallback, useEffect, useMemo, useRef } from 'react' + +import { Link, Spinner } from '@posthog/lemon-ui' + +import { errorPropertiesLogic } from 'lib/components/Errors/errorPropertiesLogic' +import { dayjs } from 'lib/dayjs' import { IconVerticalAlignCenter } from 'lib/lemon-ui/icons' import { ButtonPrimitive, ButtonPrimitiveProps } from 'lib/ui/Button/ButtonPrimitives' -import { errorPropertiesLogic } from 'lib/components/Errors/errorPropertiesLogic' -import { forwardRef, useCallback, useEffect, useMemo, useRef } from 'react' -import { cva } from 'cva' -import { dayjs } from 'lib/dayjs' -import { Link, Spinner } from '@posthog/lemon-ui' -import { exceptionCardLogic } from '../../../exceptionCardLogic' -import { useScrollObserver } from '../../../../../hooks/use-scroll-observer' -import { useAsyncCallback } from 'products/error_tracking/frontend/hooks/use-async-callback' -import { ItemCollector, ItemRenderer, RendererProps, TimelineItem } from './timeline' +import { TabsPrimitiveContent, TabsPrimitiveContentProps } from 'lib/ui/TabsPrimitive/TabsPrimitive' import { cn } from 'lib/utils/css-classes' +import { useAsyncCallback } from 'products/error_tracking/frontend/hooks/use-async-callback' + +import { useScrollObserver } from '../../../../../hooks/use-scroll-observer' +import { exceptionCardLogic } from '../../../exceptionCardLogic' +import { sessionTabLogic } from '../sessionTabLogic' +import { ItemCollector, ItemRenderer, RendererProps, TimelineItem } from './timeline' + const LOADING_DEBOUNCE_OPTIONS = { leading: true, delay: 500 } export function SessionTimeline({ ...props }: TabsPrimitiveContentProps): JSX.Element { diff --git a/products/error_tracking/frontend/components/ExceptionCard/Tabs/SessionTab/SessionTimeline/timeline/index.ts b/products/error_tracking/frontend/components/ExceptionCard/Tabs/SessionTab/SessionTimeline/timeline/index.ts index eee9e46296..7321676ccd 100644 --- a/products/error_tracking/frontend/components/ExceptionCard/Tabs/SessionTab/SessionTimeline/timeline/index.ts +++ b/products/error_tracking/frontend/components/ExceptionCard/Tabs/SessionTab/SessionTimeline/timeline/index.ts @@ -1,7 +1,8 @@ import { Dayjs } from 'lib/dayjs' + +import { customItemLoader, customItemRenderer } from './items/custom' import { exceptionLoader, exceptionRenderer } from './items/exceptions' import { pageLoader, pageRenderer } from './items/page' -import { customItemLoader, customItemRenderer } from './items/custom' export enum ItemCategory { ERROR_TRACKING = 'error-tracking', diff --git a/products/error_tracking/frontend/components/ExceptionCard/Tabs/SessionTab/SessionTimeline/timeline/items/base.tsx b/products/error_tracking/frontend/components/ExceptionCard/Tabs/SessionTab/SessionTimeline/timeline/items/base.tsx index 52df3e877e..d008a1a460 100644 --- a/products/error_tracking/frontend/components/ExceptionCard/Tabs/SessionTab/SessionTimeline/timeline/items/base.tsx +++ b/products/error_tracking/frontend/components/ExceptionCard/Tabs/SessionTab/SessionTimeline/timeline/items/base.tsx @@ -1,7 +1,9 @@ -import { Dayjs } from 'lib/dayjs' import { ItemCache, ItemLoader, TimelineItem } from '..' -import { EventsQuery, NodeKind } from '~/queries/schema/schema-general' + import api from 'lib/api' +import { Dayjs } from 'lib/dayjs' + +import { EventsQuery, NodeKind } from '~/queries/schema/schema-general' export function BasePreview({ name, diff --git a/products/error_tracking/frontend/components/ExceptionCard/Tabs/SessionTab/SessionTimeline/timeline/items/custom.tsx b/products/error_tracking/frontend/components/ExceptionCard/Tabs/SessionTab/SessionTimeline/timeline/items/custom.tsx index f64dea4cec..82e01f7035 100644 --- a/products/error_tracking/frontend/components/ExceptionCard/Tabs/SessionTab/SessionTimeline/timeline/items/custom.tsx +++ b/products/error_tracking/frontend/components/ExceptionCard/Tabs/SessionTab/SessionTimeline/timeline/items/custom.tsx @@ -1,10 +1,14 @@ -import { RuntimeIcon } from 'products/error_tracking/frontend/components/RuntimeIcon' import { ItemCategory, ItemLoaderFactory, ItemRenderer, TimelineItem } from '..' -import { BasePreview, EventLoader } from './base' -import { ErrorTrackingRuntime } from 'lib/components/Errors/types' + import { IconGraph } from '@posthog/icons' -import { dayjs, Dayjs } from 'lib/dayjs' + +import { ErrorTrackingRuntime } from 'lib/components/Errors/types' import { getRuntimeFromLib } from 'lib/components/Errors/utils' +import { Dayjs, dayjs } from 'lib/dayjs' + +import { RuntimeIcon } from 'products/error_tracking/frontend/components/RuntimeIcon' + +import { BasePreview, EventLoader } from './base' export interface CustomItem extends TimelineItem { payload: { diff --git a/products/error_tracking/frontend/components/ExceptionCard/Tabs/SessionTab/SessionTimeline/timeline/items/exceptions.tsx b/products/error_tracking/frontend/components/ExceptionCard/Tabs/SessionTab/SessionTimeline/timeline/items/exceptions.tsx index b8abdcfb0b..8bd63244dd 100644 --- a/products/error_tracking/frontend/components/ExceptionCard/Tabs/SessionTab/SessionTimeline/timeline/items/exceptions.tsx +++ b/products/error_tracking/frontend/components/ExceptionCard/Tabs/SessionTab/SessionTimeline/timeline/items/exceptions.tsx @@ -1,12 +1,16 @@ -import { IconWarning } from '@posthog/icons' import { ItemCategory, ItemLoaderFactory, ItemRenderer, TimelineItem } from '..' -import { BasePreview, EventLoader } from './base' + +import { IconWarning } from '@posthog/icons' import { Link } from '@posthog/lemon-ui' -import { urls } from 'scenes/urls' + import { ErrorTrackingException, ErrorTrackingRuntime } from 'lib/components/Errors/types' -import { RuntimeIcon } from 'products/error_tracking/frontend/components/RuntimeIcon' -import { dayjs, Dayjs } from 'lib/dayjs' import { getRuntimeFromLib } from 'lib/components/Errors/utils' +import { Dayjs, dayjs } from 'lib/dayjs' +import { urls } from 'scenes/urls' + +import { RuntimeIcon } from 'products/error_tracking/frontend/components/RuntimeIcon' + +import { BasePreview, EventLoader } from './base' export interface ExceptionItem extends TimelineItem { payload: { diff --git a/products/error_tracking/frontend/components/ExceptionCard/Tabs/SessionTab/SessionTimeline/timeline/items/page.tsx b/products/error_tracking/frontend/components/ExceptionCard/Tabs/SessionTab/SessionTimeline/timeline/items/page.tsx index 69eabb91b7..f88341169b 100644 --- a/products/error_tracking/frontend/components/ExceptionCard/Tabs/SessionTab/SessionTimeline/timeline/items/page.tsx +++ b/products/error_tracking/frontend/components/ExceptionCard/Tabs/SessionTab/SessionTimeline/timeline/items/page.tsx @@ -1,11 +1,15 @@ -import { RuntimeIcon } from 'products/error_tracking/frontend/components/RuntimeIcon' import { ItemCategory, ItemLoaderFactory, ItemRenderer, TimelineItem } from '..' -import { BasePreview, EventLoader } from './base' -import { ErrorTrackingRuntime } from 'lib/components/Errors/types' -import { Link } from '@posthog/lemon-ui' + import { IconEye } from '@posthog/icons' -import { dayjs, Dayjs } from 'lib/dayjs' +import { Link } from '@posthog/lemon-ui' + +import { ErrorTrackingRuntime } from 'lib/components/Errors/types' import { getRuntimeFromLib } from 'lib/components/Errors/utils' +import { Dayjs, dayjs } from 'lib/dayjs' + +import { RuntimeIcon } from 'products/error_tracking/frontend/components/RuntimeIcon' + +import { BasePreview, EventLoader } from './base' export interface PageItem extends TimelineItem { payload: { diff --git a/products/error_tracking/frontend/components/ExceptionCard/Tabs/SessionTab/index.tsx b/products/error_tracking/frontend/components/ExceptionCard/Tabs/SessionTab/index.tsx index 6f0b129ebe..fe794b7f03 100644 --- a/products/error_tracking/frontend/components/ExceptionCard/Tabs/SessionTab/index.tsx +++ b/products/error_tracking/frontend/components/ExceptionCard/Tabs/SessionTab/index.tsx @@ -1,3 +1,10 @@ +import { BindLogic, useActions, useValues } from 'kea' +import { P, match } from 'ts-pattern' + +import { Spinner } from '@posthog/lemon-ui' + +import { EmptyMessage } from 'lib/components/EmptyMessage/EmptyMessage' +import { errorPropertiesLogic } from 'lib/components/Errors/errorPropertiesLogic' import { TabsPrimitive, TabsPrimitiveContent, @@ -5,16 +12,12 @@ import { TabsPrimitiveList, TabsPrimitiveTrigger, } from 'lib/ui/TabsPrimitive/TabsPrimitive' -import { SessionTimeline } from './SessionTimeline/SessionTimeline' -import { SessionRecording } from './SessionRecording' -import { SubHeader } from '../SubHeader' -import { BindLogic, useActions, useValues } from 'kea' -import { errorPropertiesLogic } from 'lib/components/Errors/errorPropertiesLogic' -import { sessionTabLogic } from './sessionTabLogic' -import { match, P } from 'ts-pattern' -import { Spinner } from '@posthog/lemon-ui' + import { exceptionCardLogic } from '../../exceptionCardLogic' -import { EmptyMessage } from 'lib/components/EmptyMessage/EmptyMessage' +import { SubHeader } from '../SubHeader' +import { SessionRecording } from './SessionRecording' +import { SessionTimeline } from './SessionTimeline/SessionTimeline' +import { sessionTabLogic } from './sessionTabLogic' export interface SessionTabProps extends TabsPrimitiveContentProps { timestamp?: string diff --git a/products/error_tracking/frontend/components/ExceptionCard/Tabs/SessionTab/sessionTabLogic.ts b/products/error_tracking/frontend/components/ExceptionCard/Tabs/SessionTab/sessionTabLogic.ts index ba20df83d2..e8dfdf12c0 100644 --- a/products/error_tracking/frontend/components/ExceptionCard/Tabs/SessionTab/sessionTabLogic.ts +++ b/products/error_tracking/frontend/components/ExceptionCard/Tabs/SessionTab/sessionTabLogic.ts @@ -1,11 +1,12 @@ -import { actions, connect, defaults, events, kea, key, path, props, reducers, selectors, propsChanged } from 'kea' +import { actions, connect, defaults, events, kea, key, path, props, propsChanged, reducers, selectors } from 'kea' -import type { sessionTabLogicType } from './sessionTabLogicType' import { Dayjs, dayjs } from 'lib/dayjs' import { SessionRecordingPlayerProps } from 'scenes/session-recordings/player/SessionRecordingPlayer' -import { sessionRecordingPlayerLogic } from 'scenes/session-recordings/player/sessionRecordingPlayerLogic' -import { ItemCategory, ItemCollector, TimelineItem } from './SessionTimeline/timeline' import { sessionRecordingDataLogic } from 'scenes/session-recordings/player/sessionRecordingDataLogic' +import { sessionRecordingPlayerLogic } from 'scenes/session-recordings/player/sessionRecordingPlayerLogic' + +import { ItemCategory, ItemCollector, TimelineItem } from './SessionTimeline/timeline' +import type { sessionTabLogicType } from './sessionTabLogicType' export type SessionTabLogicProps = { sessionId: string diff --git a/products/error_tracking/frontend/components/ExceptionCard/Tabs/StacktraceTab.tsx b/products/error_tracking/frontend/components/ExceptionCard/Tabs/StacktraceTab.tsx index 72bffba0ef..5287f509b7 100644 --- a/products/error_tracking/frontend/components/ExceptionCard/Tabs/StacktraceTab.tsx +++ b/products/error_tracking/frontend/components/ExceptionCard/Tabs/StacktraceTab.tsx @@ -1,7 +1,10 @@ -import { IconChevronDown, IconMagicWand } from '@posthog/icons' import { useActions, useValues } from 'kea' -import { errorPropertiesLogic } from 'lib/components/Errors/errorPropertiesLogic' +import { useState } from 'react' + +import { IconChevronDown, IconMagicWand } from '@posthog/icons' + import { ExceptionHeaderProps } from 'lib/components/Errors/StackTraces' +import { errorPropertiesLogic } from 'lib/components/Errors/errorPropertiesLogic' import { ErrorTrackingException } from 'lib/components/Errors/types' import { ButtonGroupPrimitive, ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' import { @@ -12,16 +15,15 @@ import { DropdownMenuTrigger, } from 'lib/ui/DropdownMenu/DropdownMenu' import { TabsPrimitiveContent, TabsPrimitiveContentProps } from 'lib/ui/TabsPrimitive/TabsPrimitive' -import { useState } from 'react' import { ErrorTrackingRelationalIssue } from '~/queries/schema/schema-general' import { ExceptionAttributesPreview } from '../../ExceptionAttributesPreview' -import { exceptionCardLogic } from '../exceptionCardLogic' import { FixModal } from '../FixModal' import { StacktraceBaseDisplayProps, StacktraceEmptyDisplay } from '../Stacktrace/StacktraceBase' import { StacktraceGenericDisplay } from '../Stacktrace/StacktraceGenericDisplay' import { StacktraceTextDisplay } from '../Stacktrace/StacktraceTextDisplay' +import { exceptionCardLogic } from '../exceptionCardLogic' import { SubHeader } from './SubHeader' export interface StacktraceTabProps extends Omit { diff --git a/products/error_tracking/frontend/components/ExceptionCard/Tabs/SubHeader.tsx b/products/error_tracking/frontend/components/ExceptionCard/Tabs/SubHeader.tsx index 1d2222146f..6966fcbf61 100644 --- a/products/error_tracking/frontend/components/ExceptionCard/Tabs/SubHeader.tsx +++ b/products/error_tracking/frontend/components/ExceptionCard/Tabs/SubHeader.tsx @@ -1,6 +1,7 @@ -import { cn } from 'lib/utils/css-classes' import { HTMLProps } from 'react' +import { cn } from 'lib/utils/css-classes' + export function SubHeader({ className, ...props }: HTMLProps): JSX.Element { return (
diff --git a/products/error_tracking/frontend/components/ExternalReferences.tsx b/products/error_tracking/frontend/components/ExternalReferences.tsx index c1469afdb8..fd5f56f352 100644 --- a/products/error_tracking/frontend/components/ExternalReferences.tsx +++ b/products/error_tracking/frontend/components/ExternalReferences.tsx @@ -1,15 +1,13 @@ -import { LemonDialog, LemonInput, LemonTextArea, Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' -import { ErrorTrackingRelationalIssue } from '~/queries/schema/schema-general' -import { IntegrationKind, IntegrationType } from '~/types' -import { urls } from 'scenes/urls' -import { integrationsLogic } from 'lib/integrations/integrationsLogic' -import { errorTrackingIssueSceneLogic } from '../errorTrackingIssueSceneLogic' -import { LemonField } from 'lib/lemon-ui/LemonField' -import { LinearTeamSelectField } from 'lib/integrations/LinearIntegrationHelpers' -import { ICONS } from 'lib/integrations/utils' +import { IconPlus } from '@posthog/icons' +import { LemonDialog, LemonInput, LemonTextArea, Link } from '@posthog/lemon-ui' + import { GitHubRepositorySelectField } from 'lib/integrations/GitHubIntegrationHelpers' +import { LinearTeamSelectField } from 'lib/integrations/LinearIntegrationHelpers' +import { integrationsLogic } from 'lib/integrations/integrationsLogic' +import { ICONS } from 'lib/integrations/utils' +import { LemonField } from 'lib/lemon-ui/LemonField' import { ButtonPrimitive } from 'lib/ui/Button/ButtonPrimitives' import { DropdownMenu, @@ -17,8 +15,13 @@ import { DropdownMenuItem, DropdownMenuTrigger, } from 'lib/ui/DropdownMenu/DropdownMenu' -import { IconPlus } from '@posthog/icons' import { WrappingLoadingSkeleton } from 'lib/ui/WrappingLoadingSkeleton/WrappingLoadingSkeleton' +import { urls } from 'scenes/urls' + +import { ErrorTrackingRelationalIssue } from '~/queries/schema/schema-general' +import { IntegrationKind, IntegrationType } from '~/types' + +import { errorTrackingIssueSceneLogic } from '../errorTrackingIssueSceneLogic' const ERROR_TRACKING_INTEGRATIONS: IntegrationKind[] = ['linear', 'github'] diff --git a/products/error_tracking/frontend/components/Indicator.tsx b/products/error_tracking/frontend/components/Indicator.tsx index 6ad78b0469..a93bf533b8 100644 --- a/products/error_tracking/frontend/components/Indicator.tsx +++ b/products/error_tracking/frontend/components/Indicator.tsx @@ -1,6 +1,7 @@ -import { LemonBadge, Tooltip } from '@posthog/lemon-ui' import clsx from 'clsx' +import { LemonBadge, Tooltip } from '@posthog/lemon-ui' + import { ErrorTrackingIssue } from '~/queries/schema/schema-general' export type IssueStatus = ErrorTrackingIssue['status'] diff --git a/products/error_tracking/frontend/components/IssueActions/BulkActions.tsx b/products/error_tracking/frontend/components/IssueActions/BulkActions.tsx index dbefa077f3..583f82ed61 100644 --- a/products/error_tracking/frontend/components/IssueActions/BulkActions.tsx +++ b/products/error_tracking/frontend/components/IssueActions/BulkActions.tsx @@ -1,16 +1,17 @@ -import { LemonButton, LemonDialog } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' +import { LemonButton, LemonDialog } from '@posthog/lemon-ui' + import { ErrorTrackingIssue } from '~/queries/schema/schema-general' import { FilterLogicalOperator, HogQLPropertyFilter, PropertyFilterType, UniversalFiltersGroup } from '~/types' +import { errorTrackingBulkSelectLogic } from '../../errorTrackingBulkSelectLogic' import { AssigneeLabelDisplay } from '../Assignee/AssigneeDisplay' import { AssigneeSelect } from '../Assignee/AssigneeSelect' import { errorFiltersLogic } from '../ErrorFilters/errorFiltersLogic' import { GenericSelect } from '../GenericSelect' import { IssueStatus, StatusIndicator } from '../Indicator' import { issueActionsLogic } from './issueActionsLogic' -import { errorTrackingBulkSelectLogic } from '../../errorTrackingBulkSelectLogic' export interface BulkActionsProps { issues: ErrorTrackingIssue[] diff --git a/products/error_tracking/frontend/components/IssueActions/issueActionsLogic.tsx b/products/error_tracking/frontend/components/IssueActions/issueActionsLogic.tsx index e997555375..5fb19621f8 100644 --- a/products/error_tracking/frontend/components/IssueActions/issueActionsLogic.tsx +++ b/products/error_tracking/frontend/components/IssueActions/issueActionsLogic.tsx @@ -1,7 +1,8 @@ import { actions, kea, listeners, path } from 'kea' -import api from 'lib/api' import posthog from 'posthog-js' +import api from 'lib/api' + import { ErrorTrackingIssue } from '~/queries/schema/schema-general' import type { issueActionsLogicType } from './issueActionsLogicType' diff --git a/products/error_tracking/frontend/components/IssueDateRange.tsx b/products/error_tracking/frontend/components/IssueDateRange.tsx index b71ab7c3bc..6ee0dcd81b 100644 --- a/products/error_tracking/frontend/components/IssueDateRange.tsx +++ b/products/error_tracking/frontend/components/IssueDateRange.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { IconChevronRight } from 'lib/lemon-ui/icons' import { errorTrackingIssueSceneLogic } from '../errorTrackingIssueSceneLogic' diff --git a/products/error_tracking/frontend/components/IssueQueryOptions/IssueQueryOptions.tsx b/products/error_tracking/frontend/components/IssueQueryOptions/IssueQueryOptions.tsx index 9d86fa1292..95ba98d4fe 100644 --- a/products/error_tracking/frontend/components/IssueQueryOptions/IssueQueryOptions.tsx +++ b/products/error_tracking/frontend/components/IssueQueryOptions/IssueQueryOptions.tsx @@ -1,6 +1,7 @@ +import { useActions, useValues } from 'kea' + import { IconRefresh } from '@posthog/icons' import { LemonButton, LemonSelect, Spinner } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' import { ErrorTrackingIssue } from '~/queries/schema/schema-general' diff --git a/products/error_tracking/frontend/components/IssueQueryOptions/issueQueryOptionsLogic.ts b/products/error_tracking/frontend/components/IssueQueryOptions/issueQueryOptionsLogic.ts index 87d1a5f7e8..278b41d333 100644 --- a/products/error_tracking/frontend/components/IssueQueryOptions/issueQueryOptionsLogic.ts +++ b/products/error_tracking/frontend/components/IssueQueryOptions/issueQueryOptionsLogic.ts @@ -1,6 +1,7 @@ import equal from 'fast-deep-equal' import { actions, kea, path, reducers } from 'kea' import { actionToUrl, router, urlToAction } from 'kea-router' + import { Params } from 'scenes/sceneTypes' import { ErrorTrackingIssue, ErrorTrackingQuery } from '~/queries/schema/schema-general' diff --git a/products/error_tracking/frontend/components/IssueStatusSelect.tsx b/products/error_tracking/frontend/components/IssueStatusSelect.tsx index d5e691c9b5..530cd4d25d 100644 --- a/products/error_tracking/frontend/components/IssueStatusSelect.tsx +++ b/products/error_tracking/frontend/components/IssueStatusSelect.tsx @@ -1,12 +1,14 @@ +import { useState } from 'react' + import { IconChevronDown } from '@posthog/icons' import { LemonButton } from '@posthog/lemon-ui' + import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from 'lib/ui/DropdownMenu/DropdownMenu' -import { useState } from 'react' import { ErrorTrackingIssue } from '~/queries/schema/schema-general' diff --git a/products/error_tracking/frontend/components/RuntimeIcon.tsx b/products/error_tracking/frontend/components/RuntimeIcon.tsx index d4e1b76215..ca04604c71 100644 --- a/products/error_tracking/frontend/components/RuntimeIcon.tsx +++ b/products/error_tracking/frontend/components/RuntimeIcon.tsx @@ -1,25 +1,26 @@ -import { ErrorTrackingRuntime } from 'lib/components/Errors/types' import { - IconPython, - IconJavascript, - IconNode, - IconRuby, - IconGo, - IconRust, - IconCSharp, - IconLogomark, - IconPHP, - IconJava, IconAndroid, IconApple, - IconReact, - IconElixir, - IconSwift, + IconCSharp, IconDart, + IconElixir, IconFlutter, + IconGo, + IconJava, + IconJavascript, + IconLogomark, + IconNode, + IconPHP, + IconPython, + IconReact, + IconRuby, + IconRust, + IconSwift, } from '@posthog/icons' import { IconProps } from '@posthog/icons/dist/src/types/icon-types' +import { ErrorTrackingRuntime } from 'lib/components/Errors/types' + const RuntimeIconMap: Record = { python: IconPython, web: IconJavascript, diff --git a/products/error_tracking/frontend/components/SceneTool.tsx b/products/error_tracking/frontend/components/SceneTool.tsx index 7d73425778..7999197d8b 100644 --- a/products/error_tracking/frontend/components/SceneTool.tsx +++ b/products/error_tracking/frontend/components/SceneTool.tsx @@ -1,12 +1,15 @@ -import MaxTool from 'scenes/max/MaxTool' -import { errorTrackingSceneLogic } from '../errorTrackingSceneLogic' -import { errorFiltersLogic } from './ErrorFilters/errorFiltersLogic' -import { issueQueryOptionsLogic } from './IssueQueryOptions/issueQueryOptionsLogic' import { useActions, useValues } from 'kea' + +import { taxonomicFilterLogic } from 'lib/components/TaxonomicFilter/taxonomicFilterLogic' +import MaxTool from 'scenes/max/MaxTool' + import { ErrorTrackingSceneToolOutput } from '~/queries/schema/schema-general' import { FilterLogicalOperator, UniversalFiltersGroup } from '~/types' -import { taxonomicFilterLogic } from 'lib/components/TaxonomicFilter/taxonomicFilterLogic' + +import { errorTrackingSceneLogic } from '../errorTrackingSceneLogic' import { taxonomicFilterLogicKey, taxonomicGroupTypes } from './ErrorFilters/FilterGroup' +import { errorFiltersLogic } from './ErrorFilters/errorFiltersLogic' +import { issueQueryOptionsLogic } from './IssueQueryOptions/issueQueryOptionsLogic' function updateFilterGroup( removedFilterIndexes: number[] | undefined, diff --git a/products/error_tracking/frontend/components/SparklineChart/SparklineChart.stories.tsx b/products/error_tracking/frontend/components/SparklineChart/SparklineChart.stories.tsx index 19b4b591c6..c1a43ce339 100644 --- a/products/error_tracking/frontend/components/SparklineChart/SparklineChart.stories.tsx +++ b/products/error_tracking/frontend/components/SparklineChart/SparklineChart.stories.tsx @@ -1,6 +1,7 @@ import { action } from '@storybook/addon-actions' import { Meta, StoryObj } from '@storybook/react' import * as d3 from 'd3' + import { dayjs } from 'lib/dayjs' import { SparklineChart, SparklineEvent, SparklineOptions } from './SparklineChart' diff --git a/products/error_tracking/frontend/components/SparklineChart/SparklineChart.tsx b/products/error_tracking/frontend/components/SparklineChart/SparklineChart.tsx index 9e674ee2f6..d4347e066a 100644 --- a/products/error_tracking/frontend/components/SparklineChart/SparklineChart.tsx +++ b/products/error_tracking/frontend/components/SparklineChart/SparklineChart.tsx @@ -1,8 +1,9 @@ import * as d3 from 'd3' -import { cn } from 'lib/utils/css-classes' import { useEffect, useRef } from 'react' import useResizeObserver from 'use-resize-observer' +import { cn } from 'lib/utils/css-classes' + export type SparklineDatum = { date: Date value: number diff --git a/products/error_tracking/frontend/components/TableColumns.tsx b/products/error_tracking/frontend/components/TableColumns.tsx index 792cc12ffd..79497b8599 100644 --- a/products/error_tracking/frontend/components/TableColumns.tsx +++ b/products/error_tracking/frontend/components/TableColumns.tsx @@ -1,18 +1,22 @@ +import { useActions, useValues } from 'kea' + +import { IconChevronDown, IconMinus } from '@posthog/icons' import { LemonCheckbox, LemonSkeleton, Link } from '@posthog/lemon-ui' + +import { getRuntimeFromLib } from 'lib/components/Errors/utils' import { TZLabel } from 'lib/components/TZLabel' import { IconChevronRight } from 'lib/lemon-ui/icons' -import { IconChevronDown, IconMinus } from '@posthog/icons' -import { AssigneeIconDisplay, AssigneeLabelDisplay } from './Assignee/AssigneeDisplay' -import { IssueStatusSelect } from './IssueStatusSelect' -import { AssigneeSelect } from './Assignee/AssigneeSelect' -import { RuntimeIcon } from './RuntimeIcon' -import { errorTrackingIssueSceneLogic } from '../errorTrackingIssueSceneLogic' import { urls } from 'scenes/urls' -import { getRuntimeFromLib } from 'lib/components/Errors/utils' + import { ErrorTrackingCorrelatedIssue, ErrorTrackingIssue } from '~/queries/schema/schema-general' -import { useActions, useValues } from 'kea' -import { issueActionsLogic } from './IssueActions/issueActionsLogic' + import { errorTrackingBulkSelectLogic } from '../errorTrackingBulkSelectLogic' +import { errorTrackingIssueSceneLogic } from '../errorTrackingIssueSceneLogic' +import { AssigneeIconDisplay, AssigneeLabelDisplay } from './Assignee/AssigneeDisplay' +import { AssigneeSelect } from './Assignee/AssigneeSelect' +import { issueActionsLogic } from './IssueActions/issueActionsLogic' +import { IssueStatusSelect } from './IssueStatusSelect' +import { RuntimeIcon } from './RuntimeIcon' export const IssueListTitleHeader = ({ results, diff --git a/products/error_tracking/frontend/components/TimeBoundary.tsx b/products/error_tracking/frontend/components/TimeBoundary.tsx index b946779229..2d9cb84894 100644 --- a/products/error_tracking/frontend/components/TimeBoundary.tsx +++ b/products/error_tracking/frontend/components/TimeBoundary.tsx @@ -1,9 +1,11 @@ -import { LemonSkeleton } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' +import { MouseEvent, useCallback } from 'react' +import { P, match } from 'ts-pattern' + +import { LemonSkeleton } from '@posthog/lemon-ui' + import { TZLabel } from 'lib/components/TZLabel' import { Dayjs } from 'lib/dayjs' -import { MouseEvent, useCallback } from 'react' -import { match, P } from 'ts-pattern' import { DateRange } from '~/queries/schema/schema-general' diff --git a/products/error_tracking/frontend/configuration/ErrorTrackingConfigurationScene.tsx b/products/error_tracking/frontend/configuration/ErrorTrackingConfigurationScene.tsx index 57f5dd7048..ae73c469bd 100644 --- a/products/error_tracking/frontend/configuration/ErrorTrackingConfigurationScene.tsx +++ b/products/error_tracking/frontend/configuration/ErrorTrackingConfigurationScene.tsx @@ -1,5 +1,6 @@ import { actions, connect, kea, path, props, reducers, selectors } from 'kea' import { actionToUrl, router } from 'kea-router' + import { Scene, SceneExport } from 'scenes/sceneTypes' import { Settings } from 'scenes/settings/Settings' import { settingsLogic } from 'scenes/settings/settingsLogic' diff --git a/products/error_tracking/frontend/configuration/ExceptionAutocaptureSettings.tsx b/products/error_tracking/frontend/configuration/ExceptionAutocaptureSettings.tsx index f773f2b283..bc79afdb5a 100644 --- a/products/error_tracking/frontend/configuration/ExceptionAutocaptureSettings.tsx +++ b/products/error_tracking/frontend/configuration/ExceptionAutocaptureSettings.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { LemonSwitch } from '@posthog/lemon-ui' import { LemonDivider } from '@posthog/lemon-ui' -import { useValues, useActions } from 'kea' + import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { Link } from 'lib/lemon-ui/Link' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' diff --git a/products/error_tracking/frontend/configuration/rules/ErrorTrackingAutoAssignment.tsx b/products/error_tracking/frontend/configuration/rules/ErrorTrackingAutoAssignment.tsx index b4001437d0..9650b566a5 100644 --- a/products/error_tracking/frontend/configuration/rules/ErrorTrackingAutoAssignment.tsx +++ b/products/error_tracking/frontend/configuration/rules/ErrorTrackingAutoAssignment.tsx @@ -1,4 +1,5 @@ import { LemonDivider } from '@posthog/lemon-ui' + import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import ErrorTrackingRules from './ErrorTrackingRules' diff --git a/products/error_tracking/frontend/configuration/rules/ErrorTrackingCustomGrouping.tsx b/products/error_tracking/frontend/configuration/rules/ErrorTrackingCustomGrouping.tsx index cd01195a70..c90623bc17 100644 --- a/products/error_tracking/frontend/configuration/rules/ErrorTrackingCustomGrouping.tsx +++ b/products/error_tracking/frontend/configuration/rules/ErrorTrackingCustomGrouping.tsx @@ -1,4 +1,5 @@ import { LemonDivider } from '@posthog/lemon-ui' + import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import ErrorTrackingRules from './ErrorTrackingRules' diff --git a/products/error_tracking/frontend/configuration/rules/ErrorTrackingRules.tsx b/products/error_tracking/frontend/configuration/rules/ErrorTrackingRules.tsx index 05d885a72f..4143954de8 100644 --- a/products/error_tracking/frontend/configuration/rules/ErrorTrackingRules.tsx +++ b/products/error_tracking/frontend/configuration/rules/ErrorTrackingRules.tsx @@ -1,9 +1,18 @@ -import { IconPencil, IconTrash } from '@posthog/icons' -import { LemonBanner, LemonButton, LemonCard, LemonDialog, LemonSelect, lemonToast, Spinner } from '@posthog/lemon-ui' +import { DndContext } from '@dnd-kit/core' +import { restrictToParentElement, restrictToVerticalAxis } from '@dnd-kit/modifiers' +import { SortableContext, arrayMove, useSortable, verticalListSortingStrategy } from '@dnd-kit/sortable' +import { CSS } from '@dnd-kit/utilities' import { BindLogic, useActions, useValues } from 'kea' -import { PropertyFilters, PropertyFiltersProps } from 'lib/components/PropertyFilters/PropertyFilters' import { PropsWithChildren, useEffect } from 'react' +import { IconPencil, IconTrash } from '@posthog/icons' +import { LemonBanner, LemonButton, LemonCard, LemonDialog, LemonSelect, Spinner, lemonToast } from '@posthog/lemon-ui' + +import { PropertyFilters, PropertyFiltersProps } from 'lib/components/PropertyFilters/PropertyFilters' +import { SortableDragIcon } from 'lib/lemon-ui/icons' +import { cn } from 'lib/utils/css-classes' + +import { sidePanelLogic } from '~/layout/navigation-3000/sidepanel/sidePanelLogic' import { AnyPropertyFilter, FilterLogicalOperator, SidePanelTab } from '~/types' import { AssigneeIconDisplay, AssigneeLabelDisplay, AssigneeResolver } from '../../components/Assignee/AssigneeDisplay' @@ -11,15 +20,6 @@ import { AssigneeSelect } from '../../components/Assignee/AssigneeSelect' import { errorTrackingRulesLogic } from './errorTrackingRulesLogic' import { ErrorTrackingAssignmentRule, ErrorTrackingRule, ErrorTrackingRuleType } from './types' -import { arrayMove, SortableContext, useSortable, verticalListSortingStrategy } from '@dnd-kit/sortable' -import { DndContext } from '@dnd-kit/core' -import { CSS } from '@dnd-kit/utilities' - -import { restrictToParentElement, restrictToVerticalAxis } from '@dnd-kit/modifiers' -import { SortableDragIcon } from 'lib/lemon-ui/icons' -import { cn } from 'lib/utils/css-classes' -import { sidePanelLogic } from '~/layout/navigation-3000/sidepanel/sidePanelLogic' - function isRuleDisabled(rule: ErrorTrackingRule): boolean { return 'disabled_data' in rule && !!rule.disabled_data } diff --git a/products/error_tracking/frontend/configuration/rules/errorTrackingRulesLogic.tsx b/products/error_tracking/frontend/configuration/rules/errorTrackingRulesLogic.tsx index 39f6b3d007..f3b0285dd4 100644 --- a/products/error_tracking/frontend/configuration/rules/errorTrackingRulesLogic.tsx +++ b/products/error_tracking/frontend/configuration/rules/errorTrackingRulesLogic.tsx @@ -1,11 +1,12 @@ import { actions, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { FilterLogicalOperator } from '~/types' import type { errorTrackingRulesLogicType } from './errorTrackingRulesLogicType' -import { ErrorTrackingRule, ErrorTrackingRuleNew, ErrorTrackingRulesLogicProps, ErrorTrackingRuleType } from './types' +import { ErrorTrackingRule, ErrorTrackingRuleNew, ErrorTrackingRuleType, ErrorTrackingRulesLogicProps } from './types' function createNewRule(ruleType: ErrorTrackingRuleType, order_key: number): ErrorTrackingRuleNew { switch (ruleType) { diff --git a/products/error_tracking/frontend/configuration/symbol-sets/ErrorTrackingSymbolSets.tsx b/products/error_tracking/frontend/configuration/symbol-sets/ErrorTrackingSymbolSets.tsx index 8d2026c48e..09f3f29f4e 100644 --- a/products/error_tracking/frontend/configuration/symbol-sets/ErrorTrackingSymbolSets.tsx +++ b/products/error_tracking/frontend/configuration/symbol-sets/ErrorTrackingSymbolSets.tsx @@ -1,3 +1,6 @@ +import { useActions, useValues } from 'kea' +import { useEffect, useState } from 'react' + import { IconCheckCircle, IconRevert, IconTrash, IconUpload, IconWarning } from '@posthog/icons' import { LemonButton, @@ -9,15 +12,14 @@ import { LemonTabs, Tooltip, } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { stackFrameLogic } from 'lib/components/Errors/stackFrameLogic' import { ErrorTrackingSymbolSet, SymbolSetStatusFilter } from 'lib/components/Errors/types' import { JSONViewer } from 'lib/components/JSONViewer' import { humanFriendlyDetailedTime } from 'lib/utils' -import { useEffect, useState } from 'react' -import { errorTrackingSymbolSetLogic } from './errorTrackingSymbolSetLogic' import { SymbolSetUploadModal } from './SymbolSetUploadModal' +import { errorTrackingSymbolSetLogic } from './errorTrackingSymbolSetLogic' const SYMBOL_SET_FILTER_OPTIONS = [ { diff --git a/products/error_tracking/frontend/configuration/symbol-sets/SymbolSetUploadModal.tsx b/products/error_tracking/frontend/configuration/symbol-sets/SymbolSetUploadModal.tsx index cc97f46bcf..243786af37 100644 --- a/products/error_tracking/frontend/configuration/symbol-sets/SymbolSetUploadModal.tsx +++ b/products/error_tracking/frontend/configuration/symbol-sets/SymbolSetUploadModal.tsx @@ -1,8 +1,10 @@ -import { LemonButton, LemonFileInput, LemonModal } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' -import { IconUploadFile } from 'lib/lemon-ui/icons' + +import { LemonButton, LemonFileInput, LemonModal } from '@posthog/lemon-ui' + import { LemonField } from 'lib/lemon-ui/LemonField' +import { IconUploadFile } from 'lib/lemon-ui/icons' import { errorTrackingSymbolSetLogic } from './errorTrackingSymbolSetLogic' diff --git a/products/error_tracking/frontend/configuration/symbol-sets/errorTrackingSymbolSetLogic.tsx b/products/error_tracking/frontend/configuration/symbol-sets/errorTrackingSymbolSetLogic.tsx index 9e7aceaf3a..cb1f62e1e3 100644 --- a/products/error_tracking/frontend/configuration/symbol-sets/errorTrackingSymbolSetLogic.tsx +++ b/products/error_tracking/frontend/configuration/symbol-sets/errorTrackingSymbolSetLogic.tsx @@ -1,7 +1,9 @@ -import { lemonToast } from '@posthog/lemon-ui' import { actions, defaults, kea, listeners, path, reducers, selectors } from 'kea' import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' + +import { lemonToast } from '@posthog/lemon-ui' + import api, { CountedPaginatedResponse } from 'lib/api' import { ErrorTrackingSymbolSet, SymbolSetStatusFilter } from 'lib/components/Errors/types' import { Scene } from 'scenes/sceneTypes' diff --git a/products/error_tracking/frontend/errorTrackingActivityDescriber.tsx b/products/error_tracking/frontend/errorTrackingActivityDescriber.tsx index 5c78ada128..9f09437c78 100644 --- a/products/error_tracking/frontend/errorTrackingActivityDescriber.tsx +++ b/products/error_tracking/frontend/errorTrackingActivityDescriber.tsx @@ -1,17 +1,19 @@ -import { Link } from '@posthog/lemon-ui' import { useActions } from 'kea' +import { useEffect } from 'react' + +import { Link } from '@posthog/lemon-ui' + +import { SentenceList } from 'lib/components/ActivityLog/SentenceList' import { ActivityChange, ActivityLogItem, ChangeMapping, - defaultDescriber, Description, HumanizedChange, + defaultDescriber, userNameForLogItem, } from 'lib/components/ActivityLog/humanizeActivity' -import { SentenceList } from 'lib/components/ActivityLog/SentenceList' import { objectsEqual } from 'lib/utils' -import { useEffect } from 'react' import { urls } from 'scenes/urls' import { ErrorTrackingIssue } from '~/queries/schema/schema-general' diff --git a/products/error_tracking/frontend/errorTrackingBulkSelectLogic.ts b/products/error_tracking/frontend/errorTrackingBulkSelectLogic.ts index 3af210f4ab..6d6dafa339 100644 --- a/products/error_tracking/frontend/errorTrackingBulkSelectLogic.ts +++ b/products/error_tracking/frontend/errorTrackingBulkSelectLogic.ts @@ -1,4 +1,5 @@ import { actions, afterMount, beforeUnmount, connect, kea, listeners, path, reducers } from 'kea' + import { issueActionsLogic } from './components/IssueActions/issueActionsLogic' import type { errorTrackingBulkSelectLogicType } from './errorTrackingBulkSelectLogicType' diff --git a/products/error_tracking/frontend/errorTrackingDataNodeLogic.tsx b/products/error_tracking/frontend/errorTrackingDataNodeLogic.tsx index 34ce3718c6..738a498935 100644 --- a/products/error_tracking/frontend/errorTrackingDataNodeLogic.tsx +++ b/products/error_tracking/frontend/errorTrackingDataNodeLogic.tsx @@ -1,6 +1,6 @@ import { actions, connect, kea, listeners, path, props, selectors } from 'kea' -import { dataNodeLogic, DataNodeLogicProps } from '~/queries/nodes/DataNode/dataNodeLogic' +import { DataNodeLogicProps, dataNodeLogic } from '~/queries/nodes/DataNode/dataNodeLogic' import { ErrorTrackingIssue } from '~/queries/schema/schema-general' import { issueActionsLogic } from './components/IssueActions/issueActionsLogic' diff --git a/products/error_tracking/frontend/errorTrackingIssueSceneLogic.ts b/products/error_tracking/frontend/errorTrackingIssueSceneLogic.ts index aaa5e9d734..01e0bdf47f 100644 --- a/products/error_tracking/frontend/errorTrackingIssueSceneLogic.ts +++ b/products/error_tracking/frontend/errorTrackingIssueSceneLogic.ts @@ -1,6 +1,8 @@ import { actions, connect, defaults, events, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { router } from 'kea-router' +import { subscriptions } from 'kea-subscriptions' + import api from 'lib/api' import { ErrorEventProperties, ErrorEventType } from 'lib/components/Errors/types' import { Dayjs, dayjs } from 'lib/dayjs' @@ -21,7 +23,6 @@ import { issueActionsLogic } from './components/IssueActions/issueActionsLogic' import type { errorTrackingIssueSceneLogicType } from './errorTrackingIssueSceneLogicType' import { errorTrackingIssueQuery } from './queries' import { ERROR_TRACKING_DETAILS_RESOLUTION } from './utils' -import { subscriptions } from 'kea-subscriptions' export interface ErrorTrackingIssueSceneLogicProps { id: ErrorTrackingIssue['id'] diff --git a/products/error_tracking/frontend/errorTrackingSceneLogic.ts b/products/error_tracking/frontend/errorTrackingSceneLogic.ts index 07731d1b2e..5a42613816 100644 --- a/products/error_tracking/frontend/errorTrackingSceneLogic.ts +++ b/products/error_tracking/frontend/errorTrackingSceneLogic.ts @@ -6,10 +6,10 @@ import { DataTableNode } from '~/queries/schema/schema-general' import { errorFiltersLogic } from './components/ErrorFilters/errorFiltersLogic' import { issueActionsLogic } from './components/IssueActions/issueActionsLogic' import { issueQueryOptionsLogic } from './components/IssueQueryOptions/issueQueryOptionsLogic' +import { errorTrackingBulkSelectLogic } from './errorTrackingBulkSelectLogic' import type { errorTrackingSceneLogicType } from './errorTrackingSceneLogicType' import { errorTrackingQuery } from './queries' import { ERROR_TRACKING_LISTING_RESOLUTION } from './utils' -import { errorTrackingBulkSelectLogic } from './errorTrackingBulkSelectLogic' export const errorTrackingSceneLogic = kea([ path(['scenes', 'error-tracking', 'errorTrackingSceneLogic']), diff --git a/products/error_tracking/frontend/hooks/use-error-tag-renderer.tsx b/products/error_tracking/frontend/hooks/use-error-tag-renderer.tsx index d906dffa83..e6456dfc32 100644 --- a/products/error_tracking/frontend/hooks/use-error-tag-renderer.tsx +++ b/products/error_tracking/frontend/hooks/use-error-tag-renderer.tsx @@ -1,7 +1,8 @@ import { useValues } from 'kea' +import { useCallback } from 'react' + import { ErrorEventType } from 'lib/components/Errors/types' import { dayjs } from 'lib/dayjs' -import { useCallback } from 'react' import { ErrorTag } from '../components/ErrorTag' import { errorTrackingIssueSceneLogic } from '../errorTrackingIssueSceneLogic' diff --git a/products/error_tracking/frontend/hooks/use-sparkline-events.tsx b/products/error_tracking/frontend/hooks/use-sparkline-events.tsx index fe91434328..f97849b88a 100644 --- a/products/error_tracking/frontend/hooks/use-sparkline-events.tsx +++ b/products/error_tracking/frontend/hooks/use-sparkline-events.tsx @@ -1,7 +1,8 @@ import { useValues } from 'kea' +import { useMemo } from 'react' + import { ErrorEventType } from 'lib/components/Errors/types' import { Dayjs } from 'lib/dayjs' -import { useMemo } from 'react' import { SparklineEvent } from '../components/SparklineChart/SparklineChart' import { errorTrackingIssueSceneLogic } from '../errorTrackingIssueSceneLogic' diff --git a/products/error_tracking/frontend/impact/ErrorTrackingImpactScene.tsx b/products/error_tracking/frontend/impact/ErrorTrackingImpactScene.tsx index 821b850bb9..254f7e6871 100644 --- a/products/error_tracking/frontend/impact/ErrorTrackingImpactScene.tsx +++ b/products/error_tracking/frontend/impact/ErrorTrackingImpactScene.tsx @@ -1,17 +1,21 @@ -import { SceneExport } from 'scenes/sceneTypes' - -import { ErrorTrackingSetupPrompt } from '../components/ErrorTrackingSetupPrompt/ErrorTrackingSetupPrompt' -import { errorTrackingImpactSceneLogic } from './errorTrackingImpactSceneLogic' import { useActions, useValues } from 'kea' -import { EventName } from 'products/actions/frontend/components/EventName' -import { useFeatureFlag } from 'lib/hooks/useFeatureFlag' + import { LemonTable, LemonTableColumns } from '@posthog/lemon-ui' -import { ErrorTrackingCorrelatedIssue } from '~/queries/schema/schema-general' -import { IssueListTitleColumn, IssueListTitleHeader } from '../components/TableColumns' + +import { useFeatureFlag } from 'lib/hooks/useFeatureFlag' import { humanFriendlyLargeNumber } from 'lib/utils' import { InsightEmptyState } from 'scenes/insights/EmptyStates' +import { SceneExport } from 'scenes/sceneTypes' + +import { ErrorTrackingCorrelatedIssue } from '~/queries/schema/schema-general' + +import { EventName } from 'products/actions/frontend/components/EventName' + +import { ErrorTrackingSetupPrompt } from '../components/ErrorTrackingSetupPrompt/ErrorTrackingSetupPrompt' import { BulkActions } from '../components/IssueActions/BulkActions' +import { IssueListTitleColumn, IssueListTitleHeader } from '../components/TableColumns' import { errorTrackingBulkSelectLogic } from '../errorTrackingBulkSelectLogic' +import { errorTrackingImpactSceneLogic } from './errorTrackingImpactSceneLogic' export const scene: SceneExport = { component: ErrorTrackingImpactScene, diff --git a/products/error_tracking/frontend/impact/errorTrackingImpactSceneLogic.tsx b/products/error_tracking/frontend/impact/errorTrackingImpactSceneLogic.tsx index f00ab1221b..2719fe9941 100644 --- a/products/error_tracking/frontend/impact/errorTrackingImpactSceneLogic.tsx +++ b/products/error_tracking/frontend/impact/errorTrackingImpactSceneLogic.tsx @@ -1,15 +1,17 @@ -import { path, selectors, kea, reducers, actions, listeners, connect } from 'kea' +import { actions, connect, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' +import { subscriptions } from 'kea-subscriptions' + +import api from 'lib/api' import { Scene } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' + +import { ErrorTrackingCorrelatedIssue } from '~/queries/schema/schema-general' import { Breadcrumb } from '~/types' -import type { errorTrackingImpactSceneLogicType } from './errorTrackingImpactSceneLogicType' -import { errorTrackingIssueCorrelationQuery } from '../queries' -import { ErrorTrackingCorrelatedIssue } from '~/queries/schema/schema-general' -import api from 'lib/api' -import { subscriptions } from 'kea-subscriptions' import { errorTrackingBulkSelectLogic } from '../errorTrackingBulkSelectLogic' +import { errorTrackingIssueCorrelationQuery } from '../queries' +import type { errorTrackingImpactSceneLogicType } from './errorTrackingImpactSceneLogicType' export const errorTrackingImpactSceneLogic = kea([ path(['scenes', 'error-tracking', 'configuration', 'errorTrackingImpactSceneLogic']), diff --git a/products/error_tracking/frontend/issue/Metadata.tsx b/products/error_tracking/frontend/issue/Metadata.tsx index 19eca8dd3a..1b6bb013a3 100644 --- a/products/error_tracking/frontend/issue/Metadata.tsx +++ b/products/error_tracking/frontend/issue/Metadata.tsx @@ -1,10 +1,12 @@ -import { LemonCard, LemonSkeleton, Tooltip } from '@posthog/lemon-ui' import { useValues } from 'kea' +import { useState } from 'react' +import { match } from 'ts-pattern' + +import { LemonCard, LemonSkeleton, Tooltip } from '@posthog/lemon-ui' + import { dayjs } from 'lib/dayjs' import { IconChevronRight } from 'lib/lemon-ui/icons' import { humanFriendlyLargeNumber } from 'lib/utils' -import { useState } from 'react' -import { match } from 'ts-pattern' import { ErrorTrackingIssueAggregations } from '~/queries/schema/schema-general' diff --git a/products/error_tracking/frontend/issue/tabs/BreakdownsTab.tsx b/products/error_tracking/frontend/issue/tabs/BreakdownsTab.tsx index ed45d7dade..bf1e79a747 100644 --- a/products/error_tracking/frontend/issue/tabs/BreakdownsTab.tsx +++ b/products/error_tracking/frontend/issue/tabs/BreakdownsTab.tsx @@ -1,9 +1,11 @@ -import { LemonSegmentedButton, LemonSegmentedButtonOption } from '@posthog/lemon-ui' import clsx from 'clsx' import { useValues } from 'kea' -import { useResizeBreakpoints } from 'lib/hooks/useResizeObserver' import { useState } from 'react' +import { LemonSegmentedButton, LemonSegmentedButtonOption } from '@posthog/lemon-ui' + +import { useResizeBreakpoints } from 'lib/hooks/useResizeObserver' + import { Query } from '~/queries/Query/Query' import { errorFiltersLogic } from '../../components/ErrorFilters/errorFiltersLogic' diff --git a/products/error_tracking/frontend/queries.test.ts b/products/error_tracking/frontend/queries.test.ts index 7ee32be5b8..568aa88846 100644 --- a/products/error_tracking/frontend/queries.test.ts +++ b/products/error_tracking/frontend/queries.test.ts @@ -1,5 +1,5 @@ -import { errorTrackingQuery } from './queries' import { FilterLogicalOperator } from '../../../frontend/src/types' +import { errorTrackingQuery } from './queries' describe('queries', () => { describe('errorTrackingQuery', () => { diff --git a/products/error_tracking/frontend/utils.test.ts b/products/error_tracking/frontend/utils.test.ts index 9e2204c8ed..9370cad0bb 100644 --- a/products/error_tracking/frontend/utils.test.ts +++ b/products/error_tracking/frontend/utils.test.ts @@ -1,7 +1,8 @@ +import { Dayjs, dayjs } from 'lib/dayjs' + import { ErrorTrackingIssue, ErrorTrackingIssueAggregations } from '~/queries/schema/schema-general' import { generateDateRangeLabel, mergeIssues } from './utils' -import { dayjs, Dayjs } from 'lib/dayjs' function wrapVolumeBuckets( initialDate: Dayjs, diff --git a/products/error_tracking/frontend/utils.ts b/products/error_tracking/frontend/utils.ts index 1d553c2051..99dfc79870 100644 --- a/products/error_tracking/frontend/utils.ts +++ b/products/error_tracking/frontend/utils.ts @@ -1,10 +1,11 @@ import equal from 'fast-deep-equal' import { LogicWrapper } from 'kea' import { routerType } from 'kea-router/lib/routerType' +import { MouseEvent } from 'react' + import { ErrorTrackingException } from 'lib/components/Errors/types' import { Dayjs, dayjs } from 'lib/dayjs' import { componentsToDayJs, dateStringToComponents, isStringDateRegex } from 'lib/utils' -import { MouseEvent } from 'react' import { Params } from 'scenes/sceneTypes' import { DateRange, ErrorTrackingIssue } from '~/queries/schema/schema-general' diff --git a/products/error_tracking/manifest.tsx b/products/error_tracking/manifest.tsx index 2d7acd2a08..7bb09e668c 100644 --- a/products/error_tracking/manifest.tsx +++ b/products/error_tracking/manifest.tsx @@ -1,4 +1,5 @@ import { combineUrl } from 'kea-router' + import { urls } from 'scenes/urls' import { ProductManifest } from '../../frontend/src/types' diff --git a/products/experiments/manifest.tsx b/products/experiments/manifest.tsx index 11452efdab..dc600bc759 100644 --- a/products/experiments/manifest.tsx +++ b/products/experiments/manifest.tsx @@ -1,4 +1,5 @@ import { IconFlask } from '@posthog/icons' + import { toParams } from 'lib/utils' import { urls } from 'scenes/urls' diff --git a/products/feature_flags/manifest.tsx b/products/feature_flags/manifest.tsx index 72e9ab5449..42499fc6f5 100644 --- a/products/feature_flags/manifest.tsx +++ b/products/feature_flags/manifest.tsx @@ -1,4 +1,5 @@ import { IconToggle } from '@posthog/icons' + import { urls } from 'scenes/urls' import { ProductManifest } from '../../frontend/src/types' diff --git a/products/games/368Hedgehogs/368Hedgehogs.tsx b/products/games/368Hedgehogs/368Hedgehogs.tsx index 95ebcd4726..ffc814e6f8 100644 --- a/products/games/368Hedgehogs/368Hedgehogs.tsx +++ b/products/games/368Hedgehogs/368Hedgehogs.tsx @@ -1,9 +1,12 @@ import './368Hedgehogs.scss' +import { useCallback, useRef, useState } from 'react' + import { IconInfo } from '@posthog/icons' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { Tooltip } from 'lib/lemon-ui/Tooltip' -import { useCallback, useRef, useState } from 'react' + // ========================================================================== export type Hog = 'hog1' | 'hog2' | 'hog3' | 'hog4' export type Orientation = 'horizontal' | 'vertical' diff --git a/products/links/frontend/LinkMetricSparkline.tsx b/products/links/frontend/LinkMetricSparkline.tsx index 24568a8db4..9c1350dd7a 100644 --- a/products/links/frontend/LinkMetricSparkline.tsx +++ b/products/links/frontend/LinkMetricSparkline.tsx @@ -1,4 +1,5 @@ import { useValues } from 'kea' + import { Sparkline, SparklineTimeSeries } from 'lib/components/Sparkline' import { linkMetricSparklineLogic } from './linkMetricSparklineLogic' diff --git a/products/links/frontend/LinkScene.tsx b/products/links/frontend/LinkScene.tsx index 4a41a1cd3b..736640d1fe 100644 --- a/products/links/frontend/LinkScene.tsx +++ b/products/links/frontend/LinkScene.tsx @@ -1,3 +1,8 @@ +import { useActions, useValues } from 'kea' +import { Form } from 'kea-forms' +import { router } from 'kea-router' +import { QRCodeSVG } from 'qrcode.react' + import { IconCopy, IconDownload } from '@posthog/icons' import { LemonButton, @@ -11,14 +16,11 @@ import { LemonTextArea, Link, } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' -import { Form } from 'kea-forms' -import { router } from 'kea-router' + import { NotFound } from 'lib/components/NotFound' import { PageHeader } from 'lib/components/PageHeader' import { LemonDialog } from 'lib/lemon-ui/LemonDialog' import { LemonField } from 'lib/lemon-ui/LemonField' -import { QRCodeSVG } from 'qrcode.react' import { SceneExport } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' diff --git a/products/links/frontend/LinksScene.stories.tsx b/products/links/frontend/LinksScene.stories.tsx index 1fcf28bdef..3c11e7dc3e 100644 --- a/products/links/frontend/LinksScene.stories.tsx +++ b/products/links/frontend/LinksScene.stories.tsx @@ -1,4 +1,5 @@ import { Meta, StoryObj } from '@storybook/react' + import { App } from 'scenes/App' import { urls } from 'scenes/urls' diff --git a/products/links/frontend/LinksScene.tsx b/products/links/frontend/LinksScene.tsx index abb5eb788c..22d03ddba5 100644 --- a/products/links/frontend/LinksScene.tsx +++ b/products/links/frontend/LinksScene.tsx @@ -1,13 +1,15 @@ -import { IconPlus } from '@posthog/icons' -import { LemonBanner, LemonButton, LemonTable, LemonTableColumn, Link } from '@posthog/lemon-ui' import { useValues } from 'kea' import { router } from 'kea-router' + +import { IconPlus } from '@posthog/icons' +import { LemonBanner, LemonButton, LemonTable, LemonTableColumn, Link } from '@posthog/lemon-ui' + import { PageHeader } from 'lib/components/PageHeader' import { ProductIntroduction } from 'lib/components/ProductIntroduction/ProductIntroduction' import { More } from 'lib/lemon-ui/LemonButton/More' import { LemonMenuOverlay } from 'lib/lemon-ui/LemonMenu/LemonMenu' -import { createdAtColumn, createdByColumn } from 'lib/lemon-ui/LemonTable/columnUtils' import { LemonTableLink } from 'lib/lemon-ui/LemonTable/LemonTableLink' +import { createdAtColumn, createdByColumn } from 'lib/lemon-ui/LemonTable/columnUtils' import stringWithWBR from 'lib/utils/stringWithWBR' import { SceneExport } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' diff --git a/products/links/frontend/linkLogic.ts b/products/links/frontend/linkLogic.ts index f0f05d7f50..a92da48f3c 100644 --- a/products/links/frontend/linkLogic.ts +++ b/products/links/frontend/linkLogic.ts @@ -1,8 +1,10 @@ -import { lemonToast } from '@posthog/lemon-ui' import { actions, afterMount, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' import { router, urlToAction } from 'kea-router' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' diff --git a/products/links/frontend/linkMetricSparklineLogic.ts b/products/links/frontend/linkMetricSparklineLogic.ts index 496841da14..ad2b69dad1 100644 --- a/products/links/frontend/linkMetricSparklineLogic.ts +++ b/products/links/frontend/linkMetricSparklineLogic.ts @@ -1,5 +1,6 @@ import { afterMount, kea, key, path, props } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { NodeKind, TrendsQuery } from '~/queries/schema/schema-general' diff --git a/products/links/frontend/linksLogic.ts b/products/links/frontend/linksLogic.ts index a826194af9..a612ee13c6 100644 --- a/products/links/frontend/linksLogic.ts +++ b/products/links/frontend/linksLogic.ts @@ -1,5 +1,6 @@ import { afterMount, kea, path } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { LinkType } from '~/types' diff --git a/products/links/manifest.tsx b/products/links/manifest.tsx index 9b0f2dece7..55aa4d4910 100644 --- a/products/links/manifest.tsx +++ b/products/links/manifest.tsx @@ -1,4 +1,5 @@ import { IconExternal } from '@posthog/icons' + import { FEATURE_FLAGS } from 'lib/constants' import { urls } from 'scenes/urls' diff --git a/products/llm_observability/frontend/ConversationDisplay/ConversationDisplay.tsx b/products/llm_observability/frontend/ConversationDisplay/ConversationDisplay.tsx index 87a07f10c6..00dbb7c44f 100644 --- a/products/llm_observability/frontend/ConversationDisplay/ConversationDisplay.tsx +++ b/products/llm_observability/frontend/ConversationDisplay/ConversationDisplay.tsx @@ -1,15 +1,17 @@ +import { useActions, useValues } from 'kea' + import { IconChat } from '@posthog/icons' import { LemonButton } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { EventType } from '~/types' import { llmObservabilityPlaygroundLogic } from '../llmObservabilityPlaygroundLogic' +import { normalizeMessages } from '../utils' import { ConversationMessagesDisplay } from './ConversationMessagesDisplay' import { MetadataHeader } from './MetadataHeader' -import { normalizeMessages } from '../utils' export function ConversationDisplay({ eventProperties }: { eventProperties: EventType['properties'] }): JSX.Element { const { setupPlaygroundFromEvent } = useActions(llmObservabilityPlaygroundLogic) diff --git a/products/llm_observability/frontend/ConversationDisplay/ConversationMessagesDisplay.tsx b/products/llm_observability/frontend/ConversationDisplay/ConversationMessagesDisplay.tsx index f6df02d4ec..213bb7fef3 100644 --- a/products/llm_observability/frontend/ConversationDisplay/ConversationMessagesDisplay.tsx +++ b/products/llm_observability/frontend/ConversationDisplay/ConversationMessagesDisplay.tsx @@ -1,23 +1,25 @@ -import { IconEye, IconMarkdown, IconMarkdownFilled, IconCode } from '@posthog/icons' -import { LemonButton } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useValues } from 'kea' -import { XMLViewer } from './XMLViewer' -import { HighlightedXMLViewer } from './HighlightedXMLViewer' -import { HighlightedLemonMarkdown } from './HighlightedLemonMarkdown' +import React from 'react' + +import { IconCode, IconEye, IconMarkdown, IconMarkdownFilled } from '@posthog/icons' +import { LemonButton } from '@posthog/lemon-ui' + import { CopyToClipboardInline } from 'lib/components/CopyToClipboard' import { HighlightedJSONViewer } from 'lib/components/HighlightedJSONViewer' -import { IconExclamation, IconEyeHidden } from 'lib/lemon-ui/icons' import { LemonMarkdown } from 'lib/lemon-ui/LemonMarkdown' +import { IconExclamation, IconEyeHidden } from 'lib/lemon-ui/icons' import { isObject } from 'lib/utils' -import { looksLikeXml } from '../utils' -import React from 'react' import { LLMInputOutput } from '../LLMInputOutput' import { SearchHighlight } from '../SearchHighlight' -import { containsSearchQuery } from '../searchUtils' import { llmObservabilityTraceLogic } from '../llmObservabilityTraceLogic' +import { containsSearchQuery } from '../searchUtils' import { CompatMessage, VercelSDKImageMessage } from '../types' +import { looksLikeXml } from '../utils' +import { HighlightedLemonMarkdown } from './HighlightedLemonMarkdown' +import { HighlightedXMLViewer } from './HighlightedXMLViewer' +import { XMLViewer } from './XMLViewer' export function ConversationMessagesDisplay({ inputNormalized, diff --git a/products/llm_observability/frontend/ConversationDisplay/DisplayOptionsModal.tsx b/products/llm_observability/frontend/ConversationDisplay/DisplayOptionsModal.tsx index b33b37368a..ec310cabd5 100644 --- a/products/llm_observability/frontend/ConversationDisplay/DisplayOptionsModal.tsx +++ b/products/llm_observability/frontend/ConversationDisplay/DisplayOptionsModal.tsx @@ -1,8 +1,10 @@ -import { LemonModal, LemonButton } from '@posthog/lemon-ui' -import { LemonRadio, LemonRadioOption } from 'lib/lemon-ui/LemonRadio' import { useActions, useValues } from 'kea' -import { llmObservabilityTraceLogic, DisplayOption } from '../llmObservabilityTraceLogic' +import { LemonButton, LemonModal } from '@posthog/lemon-ui' + +import { LemonRadio, LemonRadioOption } from 'lib/lemon-ui/LemonRadio' + +import { DisplayOption, llmObservabilityTraceLogic } from '../llmObservabilityTraceLogic' export function DisplayOptionsModal(): JSX.Element { const { displayOptionsModalVisible, displayOption } = useValues(llmObservabilityTraceLogic) diff --git a/products/llm_observability/frontend/ConversationDisplay/HighlightedLemonMarkdown.tsx b/products/llm_observability/frontend/ConversationDisplay/HighlightedLemonMarkdown.tsx index 1ba1973f94..c88052cc88 100644 --- a/products/llm_observability/frontend/ConversationDisplay/HighlightedLemonMarkdown.tsx +++ b/products/llm_observability/frontend/ConversationDisplay/HighlightedLemonMarkdown.tsx @@ -1,4 +1,5 @@ import { LemonMarkdown } from 'lib/lemon-ui/LemonMarkdown' + import { HighlightedContentWrapper } from './HighlightedContentWrapper' interface HighlightedLemonMarkdownProps { diff --git a/products/llm_observability/frontend/ConversationDisplay/MetadataHeader.tsx b/products/llm_observability/frontend/ConversationDisplay/MetadataHeader.tsx index 69138f489a..f8604008f5 100644 --- a/products/llm_observability/frontend/ConversationDisplay/MetadataHeader.tsx +++ b/products/llm_observability/frontend/ConversationDisplay/MetadataHeader.tsx @@ -1,5 +1,7 @@ -import { LemonTag } from '@posthog/lemon-ui' import classNames from 'classnames' + +import { LemonTag } from '@posthog/lemon-ui' + import { lowercaseFirstLetter } from 'lib/utils' import { MetadataTag } from '../components/MetadataTag' diff --git a/products/llm_observability/frontend/LLMObservabilityPlaygroundScene.tsx b/products/llm_observability/frontend/LLMObservabilityPlaygroundScene.tsx index 70c9eeb511..04b9980159 100644 --- a/products/llm_observability/frontend/LLMObservabilityPlaygroundScene.tsx +++ b/products/llm_observability/frontend/LLMObservabilityPlaygroundScene.tsx @@ -1,3 +1,6 @@ +import { BindLogic, useActions, useValues } from 'kea' +import { useRef, useState } from 'react' + import { IconGear, IconMessage, IconPencil, IconPlay, IconPlus, IconTrash } from '@posthog/icons' import { LemonButton, @@ -11,9 +14,8 @@ import { LemonTag, LemonTextArea, } from '@posthog/lemon-ui' -import { BindLogic, useActions, useValues } from 'kea' + import { IconArrowDown, IconArrowUp } from 'lib/lemon-ui/icons' -import { useRef, useState } from 'react' import { SceneExport } from 'scenes/sceneTypes' import { llmObservabilityPlaygroundLogic } from './llmObservabilityPlaygroundLogic' diff --git a/products/llm_observability/frontend/LLMObservabilityReloadAction.tsx b/products/llm_observability/frontend/LLMObservabilityReloadAction.tsx index 5ce0ebebd1..bbbdb3fb00 100644 --- a/products/llm_observability/frontend/LLMObservabilityReloadAction.tsx +++ b/products/llm_observability/frontend/LLMObservabilityReloadAction.tsx @@ -1,8 +1,10 @@ -import { LemonButton } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonButton } from '@posthog/lemon-ui' + import { dayjs } from 'lib/dayjs' -import { IconRefresh } from 'lib/lemon-ui/icons' import { Spinner } from 'lib/lemon-ui/Spinner' +import { IconRefresh } from 'lib/lemon-ui/icons' import { llmObservabilityLogic } from './llmObservabilityLogic' diff --git a/products/llm_observability/frontend/LLMObservabilityScene.tsx b/products/llm_observability/frontend/LLMObservabilityScene.tsx index da7d6c19ef..d09781cad5 100644 --- a/products/llm_observability/frontend/LLMObservabilityScene.tsx +++ b/products/llm_observability/frontend/LLMObservabilityScene.tsx @@ -1,8 +1,10 @@ -import { IconArchive } from '@posthog/icons' -import { LemonBanner, LemonButton, LemonTab, LemonTabs, Link } from '@posthog/lemon-ui' import clsx from 'clsx' import { BindLogic, useActions, useValues } from 'kea' import { combineUrl, router } from 'kea-router' + +import { IconArchive } from '@posthog/icons' +import { LemonBanner, LemonButton, LemonTab, LemonTabs, Link } from '@posthog/lemon-ui' + import { QueryCard } from 'lib/components/Cards/InsightCard/QueryCard' import { DateFilter } from 'lib/components/DateFilter/DateFilter' import { FeedbackNotice } from 'lib/components/FeedbackNotice' @@ -11,6 +13,7 @@ import { PropertyFilters } from 'lib/components/PropertyFilters/PropertyFilters' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { TestAccountFilterSwitch } from 'lib/components/TestAccountFiltersSwitch' import { FEATURE_FLAGS } from 'lib/constants' +import { Tooltip } from 'lib/lemon-ui/Tooltip' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { SceneExport } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' @@ -20,12 +23,11 @@ import { DataTable } from '~/queries/nodes/DataTable/DataTable' import { InsightVizNode, NodeKind } from '~/queries/schema/schema-general' import { isEventsQuery } from '~/queries/utils' -import { LLM_OBSERVABILITY_DATA_COLLECTION_NODE_ID, llmObservabilityLogic } from './llmObservabilityLogic' import { LLMObservabilityPlaygroundScene } from './LLMObservabilityPlaygroundScene' import { LLMObservabilityReloadAction } from './LLMObservabilityReloadAction' import { LLMObservabilityTraces } from './LLMObservabilityTracesScene' import { LLMObservabilityUsers } from './LLMObservabilityUsers' -import { Tooltip } from 'lib/lemon-ui/Tooltip' +import { LLM_OBSERVABILITY_DATA_COLLECTION_NODE_ID, llmObservabilityLogic } from './llmObservabilityLogic' export const scene: SceneExport = { component: LLMObservabilityScene, diff --git a/products/llm_observability/frontend/LLMObservabilityTraceScene.stories.tsx b/products/llm_observability/frontend/LLMObservabilityTraceScene.stories.tsx index 2652dd9bae..1851f12be9 100644 --- a/products/llm_observability/frontend/LLMObservabilityTraceScene.stories.tsx +++ b/products/llm_observability/frontend/LLMObservabilityTraceScene.stories.tsx @@ -1,13 +1,14 @@ import { Meta, StoryFn } from '@storybook/react' import { router } from 'kea-router' + +import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' import { urls } from 'scenes/urls' import { useStorybookMocks } from '~/mocks/browser' import { LLMTrace } from '~/queries/schema/schema-general' -import fullTrace from './__mocks__/fullTrace.json' import { LLMObservabilityTraceScene } from './LLMObservabilityTraceScene' -import { useOnMountEffect } from 'lib/hooks/useOnMountEffect' +import fullTrace from './__mocks__/fullTrace.json' const meta: Meta = { title: 'Scenes-App/LLM Observability/Trace', diff --git a/products/llm_observability/frontend/LLMObservabilityTraceScene.tsx b/products/llm_observability/frontend/LLMObservabilityTraceScene.tsx index 0425615213..e0aa541e43 100644 --- a/products/llm_observability/frontend/LLMObservabilityTraceScene.tsx +++ b/products/llm_observability/frontend/LLMObservabilityTraceScene.tsx @@ -1,46 +1,50 @@ +import classNames from 'classnames' +import clsx from 'clsx' +import { BindLogic, useActions, useValues } from 'kea' +import React, { useEffect, useRef, useState } from 'react' +import { useDebouncedCallback } from 'use-debounce' + import { IconAIText, IconChat, IconCopy, IconGear, IconMessage, IconReceipt, IconSearch } from '@posthog/icons' import { LemonButton, LemonDivider, LemonInput, LemonTable, + LemonTabs, LemonTag, LemonTagProps, - LemonTabs, Link, SpinnerOverlay, Tooltip, } from '@posthog/lemon-ui' -import classNames from 'classnames' -import clsx from 'clsx' -import { BindLogic, useActions, useValues } from 'kea' + import { JSONViewer } from 'lib/components/JSONViewer' import { NotFound } from 'lib/components/NotFound' +import ViewRecordingButton from 'lib/components/ViewRecordingButton/ViewRecordingButton' import { FEATURE_FLAGS } from 'lib/constants' import { IconArrowDown, IconArrowUp } from 'lib/lemon-ui/icons' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { identifierToHuman, isObject, pluralize } from 'lib/utils' import { cn } from 'lib/utils/css-classes' -import React, { useEffect, useRef, useState } from 'react' import { InsightEmptyState, InsightErrorState } from 'scenes/insights/EmptyStates' import { PersonDisplay } from 'scenes/persons/PersonDisplay' import { SceneExport } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' -import { useDebouncedCallback } from 'use-debounce' -import { SearchHighlight } from './SearchHighlight' import { LLMTrace, LLMTraceEvent } from '~/queries/schema/schema-general' -import { FeedbackTag } from './components/FeedbackTag' -import { MetricTag } from './components/MetricTag' import { ConversationMessagesDisplay } from './ConversationDisplay/ConversationMessagesDisplay' import { DisplayOptionsModal } from './ConversationDisplay/DisplayOptionsModal' import { MetadataHeader } from './ConversationDisplay/MetadataHeader' import { ParametersHeader } from './ConversationDisplay/ParametersHeader' import { LLMInputOutput } from './LLMInputOutput' +import { SearchHighlight } from './SearchHighlight' +import { FeedbackTag } from './components/FeedbackTag' +import { MetricTag } from './components/MetricTag' import { llmObservabilityPlaygroundLogic } from './llmObservabilityPlaygroundLogic' -import { llmObservabilityTraceDataLogic, EnrichedTraceTreeNode } from './llmObservabilityTraceDataLogic' +import { EnrichedTraceTreeNode, llmObservabilityTraceDataLogic } from './llmObservabilityTraceDataLogic' import { llmObservabilityTraceLogic } from './llmObservabilityTraceLogic' +import { exportTraceToClipboard } from './traceExportUtils' import { formatLLMCost, formatLLMEventTitle, @@ -52,8 +56,6 @@ import { normalizeMessages, removeMilliseconds, } from './utils' -import ViewRecordingButton from 'lib/components/ViewRecordingButton/ViewRecordingButton' -import { exportTraceToClipboard } from './traceExportUtils' export const scene: SceneExport = { component: LLMObservabilityTraceScene, diff --git a/products/llm_observability/frontend/LLMObservabilityTracesScene.tsx b/products/llm_observability/frontend/LLMObservabilityTracesScene.tsx index bfa2bb85f4..1619fe800d 100644 --- a/products/llm_observability/frontend/LLMObservabilityTracesScene.tsx +++ b/products/llm_observability/frontend/LLMObservabilityTracesScene.tsx @@ -1,4 +1,5 @@ import { useActions, useValues } from 'kea' + import { TZLabel } from 'lib/components/TZLabel' import { Link } from 'lib/lemon-ui/Link' import { Tooltip } from 'lib/lemon-ui/Tooltip' diff --git a/products/llm_observability/frontend/LLMObservabilityUsers.tsx b/products/llm_observability/frontend/LLMObservabilityUsers.tsx index 1c491808b0..63bc0a4f13 100644 --- a/products/llm_observability/frontend/LLMObservabilityUsers.tsx +++ b/products/llm_observability/frontend/LLMObservabilityUsers.tsx @@ -1,5 +1,6 @@ import { useActions, useValues } from 'kea' import { combineUrl } from 'kea-router' + import { PersonDisplay } from 'scenes/persons/PersonDisplay' import { urls } from 'scenes/urls' diff --git a/products/llm_observability/frontend/SearchHighlight.tsx b/products/llm_observability/frontend/SearchHighlight.tsx index 0e68c977d8..ff67f2e4ee 100644 --- a/products/llm_observability/frontend/SearchHighlight.tsx +++ b/products/llm_observability/frontend/SearchHighlight.tsx @@ -1,4 +1,5 @@ import React from 'react' + import { findSearchMatches } from './searchUtils' interface SearchHighlightProps { diff --git a/products/llm_observability/frontend/components/FeedbackTag.tsx b/products/llm_observability/frontend/components/FeedbackTag.tsx index bb361d34df..83d8c26d92 100644 --- a/products/llm_observability/frontend/components/FeedbackTag.tsx +++ b/products/llm_observability/frontend/components/FeedbackTag.tsx @@ -1,4 +1,5 @@ import { LemonTag } from '@posthog/lemon-ui' + import { CopyToClipboardInline } from 'lib/components/CopyToClipboard' interface FeedbackTagProps { diff --git a/products/llm_observability/frontend/components/MetadataTag.tsx b/products/llm_observability/frontend/components/MetadataTag.tsx index 8c8b8142b8..a484680b06 100644 --- a/products/llm_observability/frontend/components/MetadataTag.tsx +++ b/products/llm_observability/frontend/components/MetadataTag.tsx @@ -1,4 +1,5 @@ import { LemonTag, Tooltip } from '@posthog/lemon-ui' + import { CopyToClipboardInline } from 'lib/components/CopyToClipboard' interface MetadataTagProps { diff --git a/products/llm_observability/frontend/components/MetricTag.tsx b/products/llm_observability/frontend/components/MetricTag.tsx index 3ecf242a24..13a394e95d 100644 --- a/products/llm_observability/frontend/components/MetricTag.tsx +++ b/products/llm_observability/frontend/components/MetricTag.tsx @@ -1,4 +1,5 @@ import { LemonTag } from '@posthog/lemon-ui' + import { CopyToClipboardInline } from 'lib/components/CopyToClipboard' import { identifierToHuman } from 'lib/utils' diff --git a/products/llm_observability/frontend/llmObservabilityLogic.tsx b/products/llm_observability/frontend/llmObservabilityLogic.tsx index 73c572ec69..8605840089 100644 --- a/products/llm_observability/frontend/llmObservabilityLogic.tsx +++ b/products/llm_observability/frontend/llmObservabilityLogic.tsx @@ -1,6 +1,7 @@ import { actions, afterMount, connect, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { actionToUrl, router, urlToAction } from 'kea-router' + import api from 'lib/api' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { dayjs } from 'lib/dayjs' @@ -11,8 +12,8 @@ import { sceneLogic } from 'scenes/sceneLogic' import { urls } from 'scenes/urls' import { groupsModel } from '~/models/groupsModel' -import { DataTableNode, NodeKind, TrendsQuery } from '~/queries/schema/schema-general' import { isAnyPropertyFilters } from '~/queries/schema-guards' +import { DataTableNode, NodeKind, TrendsQuery } from '~/queries/schema/schema-general' import { QueryContext } from '~/queries/types' import { AnyPropertyFilter, diff --git a/products/llm_observability/frontend/llmObservabilityPlaygroundLogic.ts b/products/llm_observability/frontend/llmObservabilityPlaygroundLogic.ts index e1939be936..030bb0b929 100644 --- a/products/llm_observability/frontend/llmObservabilityPlaygroundLogic.ts +++ b/products/llm_observability/frontend/llmObservabilityPlaygroundLogic.ts @@ -1,7 +1,9 @@ -import { lemonToast } from '@posthog/lemon-ui' import { actions, afterMount, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { router } from 'kea-router' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { uuid } from 'lib/utils' import { isObject } from 'lib/utils' diff --git a/products/llm_observability/frontend/llmObservabilityTraceDataLogic.ts b/products/llm_observability/frontend/llmObservabilityTraceDataLogic.ts index 5da55eacdd..2be7745ac7 100644 --- a/products/llm_observability/frontend/llmObservabilityTraceDataLogic.ts +++ b/products/llm_observability/frontend/llmObservabilityTraceDataLogic.ts @@ -1,6 +1,6 @@ import { connect, kea, path, props, selectors } from 'kea' -import { dataNodeLogic, DataNodeLogicProps } from '~/queries/nodes/DataNode/dataNodeLogic' +import { DataNodeLogicProps, dataNodeLogic } from '~/queries/nodes/DataNode/dataNodeLogic' import { insightVizDataNodeKey } from '~/queries/nodes/InsightViz/InsightViz' import { AnyResponseType, @@ -13,14 +13,14 @@ import { InsightLogicProps } from '~/types' import type { llmObservabilityTraceDataLogicType } from './llmObservabilityTraceDataLogicType' import { llmObservabilityTraceLogic } from './llmObservabilityTraceLogic' -import { formatLLMUsage, normalizeMessages } from './utils' import { + SearchOccurrence, eventMatchesSearch, findMessageOccurrences, findSidebarOccurrences, findTraceOccurrences, - SearchOccurrence, } from './searchUtils' +import { formatLLMUsage, normalizeMessages } from './utils' export interface TraceDataLogicProps { traceId: string diff --git a/products/llm_observability/frontend/llmObservabilityTraceLogic.test.ts b/products/llm_observability/frontend/llmObservabilityTraceLogic.test.ts index 61620c3fdf..b7be9bdaf6 100644 --- a/products/llm_observability/frontend/llmObservabilityTraceLogic.test.ts +++ b/products/llm_observability/frontend/llmObservabilityTraceLogic.test.ts @@ -1,6 +1,8 @@ +import { MOCK_TEAM_ID } from 'lib/api.mock' + import { combineUrl, router } from 'kea-router' import { expectLogic } from 'kea-test-utils' -import { MOCK_TEAM_ID } from 'lib/api.mock' + import { addProjectIdIfMissing } from 'lib/utils/router-utils' import { urls } from 'scenes/urls' diff --git a/products/llm_observability/frontend/llmObservabilityTraceLogic.ts b/products/llm_observability/frontend/llmObservabilityTraceLogic.ts index d9a0e74314..048a3f0a4a 100644 --- a/products/llm_observability/frontend/llmObservabilityTraceLogic.ts +++ b/products/llm_observability/frontend/llmObservabilityTraceLogic.ts @@ -1,5 +1,6 @@ import { actions, afterMount, kea, listeners, path, reducers, selectors } from 'kea' import { router, urlToAction } from 'kea-router' + import { dayjs } from 'lib/dayjs' import { urls } from 'scenes/urls' diff --git a/products/llm_observability/frontend/traceExportUtils.test.ts b/products/llm_observability/frontend/traceExportUtils.test.ts index f5bc5fa329..af79cfc471 100644 --- a/products/llm_observability/frontend/traceExportUtils.test.ts +++ b/products/llm_observability/frontend/traceExportUtils.test.ts @@ -1,4 +1,5 @@ import { LLMTrace, LLMTraceEvent } from '~/queries/schema/schema-general' + import { EnrichedTraceTreeNode } from './llmObservabilityTraceDataLogic' import { buildMinimalTraceJSON } from './traceExportUtils' diff --git a/products/llm_observability/frontend/traceExportUtils.ts b/products/llm_observability/frontend/traceExportUtils.ts index 398041cf46..785d67858b 100644 --- a/products/llm_observability/frontend/traceExportUtils.ts +++ b/products/llm_observability/frontend/traceExportUtils.ts @@ -1,8 +1,10 @@ -import { LLMTrace, LLMTraceEvent } from '~/queries/schema/schema-general' -import { EnrichedTraceTreeNode } from './llmObservabilityTraceDataLogic' import { copyToClipboard } from 'lib/utils/copyToClipboard' -import { normalizeMessages, formatLLMEventTitle } from './utils' + +import { LLMTrace, LLMTraceEvent } from '~/queries/schema/schema-general' + +import { EnrichedTraceTreeNode } from './llmObservabilityTraceDataLogic' import { CompatMessage } from './types' +import { formatLLMEventTitle, normalizeMessages } from './utils' interface EventMetrics { latency?: number diff --git a/products/llm_observability/frontend/utils.test.ts b/products/llm_observability/frontend/utils.test.ts index f7c50f4110..861021d394 100644 --- a/products/llm_observability/frontend/utils.test.ts +++ b/products/llm_observability/frontend/utils.test.ts @@ -1,7 +1,8 @@ -import { AnthropicInputMessage, OpenAICompletionMessage } from './types' -import { normalizeMessage, looksLikeXml, formatLLMEventTitle } from './utils' import { LLMTrace, LLMTraceEvent } from '~/queries/schema/schema-general' +import { AnthropicInputMessage, OpenAICompletionMessage } from './types' +import { formatLLMEventTitle, looksLikeXml, normalizeMessage } from './utils' + describe('LLM Observability utils', () => { it('normalizeOutputMessage: parses OpenAI message', () => { const message: OpenAICompletionMessage = { diff --git a/products/llm_observability/frontend/utils.ts b/products/llm_observability/frontend/utils.ts index 9431589783..9f7ce53a9c 100644 --- a/products/llm_observability/frontend/utils.ts +++ b/products/llm_observability/frontend/utils.ts @@ -3,7 +3,6 @@ import { dayjs } from 'lib/dayjs' import { LLMTrace, LLMTraceEvent } from '~/queries/schema/schema-general' import type { SpanAggregation } from './llmObservabilityTraceDataLogic' - import { AnthropicInputMessage, AnthropicTextMessage, diff --git a/products/logs/frontend/AttributeBreakdowns.tsx b/products/logs/frontend/AttributeBreakdowns.tsx index 951120fd36..cb22d5e06a 100644 --- a/products/logs/frontend/AttributeBreakdowns.tsx +++ b/products/logs/frontend/AttributeBreakdowns.tsx @@ -1,6 +1,7 @@ +import { useValues } from 'kea' + import { IconMinusSquare, IconPlusSquare } from '@posthog/icons' import { LemonButton, LemonTable } from '@posthog/lemon-ui' -import { useValues } from 'kea' import { PropertyOperator } from '~/types' diff --git a/products/logs/frontend/LogsScene.tsx b/products/logs/frontend/LogsScene.tsx index aaeecbf999..9ee74120cd 100644 --- a/products/logs/frontend/LogsScene.tsx +++ b/products/logs/frontend/LogsScene.tsx @@ -1,15 +1,17 @@ import './sparkline-loading.scss' +import colors from 'ansi-colors' +import { useActions, useValues } from 'kea' +import { useEffect } from 'react' + import { IconFilter, IconMinusSquare, IconPlusSquare } from '@posthog/icons' import { LemonButton, LemonCheckbox, LemonSegmentedButton, LemonTable, LemonTag, LemonTagType } from '@posthog/lemon-ui' -import colors from 'ansi-colors' -import { useActions, useValues } from 'kea' + import { Sparkline } from 'lib/components/Sparkline' import { TZLabel } from 'lib/components/TZLabel' import { IconRefresh } from 'lib/lemon-ui/icons' import { humanFriendlyDetailedTime } from 'lib/utils' import { cn } from 'lib/utils/css-classes' -import { useEffect } from 'react' import { SceneExport } from 'scenes/sceneTypes' import { LogMessage } from '~/queries/schema/schema-general' diff --git a/products/logs/frontend/filters/AttributesFilter.tsx b/products/logs/frontend/filters/AttributesFilter.tsx index d05b74fde3..8dbb4ff5ea 100644 --- a/products/logs/frontend/filters/AttributesFilter.tsx +++ b/products/logs/frontend/filters/AttributesFilter.tsx @@ -1,4 +1,5 @@ import { useActions, useValues } from 'kea' + import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import UniversalFilters from 'lib/components/UniversalFilters/UniversalFilters' import { universalFiltersLogic } from 'lib/components/UniversalFilters/universalFiltersLogic' diff --git a/products/logs/frontend/filters/DateRangeFilter.tsx b/products/logs/frontend/filters/DateRangeFilter.tsx index 3537d6d2af..408c2e9bfc 100644 --- a/products/logs/frontend/filters/DateRangeFilter.tsx +++ b/products/logs/frontend/filters/DateRangeFilter.tsx @@ -1,4 +1,5 @@ import { useActions, useValues } from 'kea' + import { DateFilter } from 'lib/components/DateFilter/DateFilter' import { CUSTOM_OPTION_KEY } from 'lib/components/DateFilter/types' import { dayjs } from 'lib/dayjs' diff --git a/products/logs/frontend/filters/SearchTermFilter.tsx b/products/logs/frontend/filters/SearchTermFilter.tsx index 700f6538eb..b5cf7d2da0 100644 --- a/products/logs/frontend/filters/SearchTermFilter.tsx +++ b/products/logs/frontend/filters/SearchTermFilter.tsx @@ -1,6 +1,7 @@ -import { LemonInput } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' +import { LemonInput } from '@posthog/lemon-ui' + import { logsLogic } from '../logsLogic' export const SearchTermFilter = (): JSX.Element => { diff --git a/products/logs/frontend/filters/ServiceFilter.tsx b/products/logs/frontend/filters/ServiceFilter.tsx index 7ae6a6153a..4b03b0d706 100644 --- a/products/logs/frontend/filters/ServiceFilter.tsx +++ b/products/logs/frontend/filters/ServiceFilter.tsx @@ -1,5 +1,6 @@ import { useActions, useValues } from 'kea' import { combineUrl } from 'kea-router' + import { PropertyValue } from 'lib/components/PropertyFilters/components/PropertyValue' import { projectLogic } from 'scenes/projectLogic' diff --git a/products/logs/frontend/filters/SeverityLevelsFilter.tsx b/products/logs/frontend/filters/SeverityLevelsFilter.tsx index 4aec12353f..312d58a6e6 100644 --- a/products/logs/frontend/filters/SeverityLevelsFilter.tsx +++ b/products/logs/frontend/filters/SeverityLevelsFilter.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconFilter } from '@posthog/icons' import { LemonButton, LemonMenu } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { capitalizeFirstLetter } from 'lib/utils' import { LogMessage } from '~/queries/schema/schema-general' diff --git a/products/logs/frontend/logsLogic.tsx b/products/logs/frontend/logsLogic.tsx index 9ab8baae22..879e28ad69 100644 --- a/products/logs/frontend/logsLogic.tsx +++ b/products/logs/frontend/logsLogic.tsx @@ -1,8 +1,10 @@ -import { syncSearchParams, updateSearchParams } from '@posthog/products-error-tracking/frontend/utils' import equal from 'fast-deep-equal' import { actions, kea, listeners, path, reducers } from 'kea' import { loaders } from 'kea-loaders' import { actionToUrl, router, urlToAction } from 'kea-router' + +import { syncSearchParams, updateSearchParams } from '@posthog/products-error-tracking/frontend/utils' + import api from 'lib/api' import { DEFAULT_UNIVERSAL_GROUP_FILTER } from 'lib/components/UniversalFilters/universalFiltersLogic' import { Params } from 'scenes/sceneTypes' diff --git a/products/managed_migrations/frontend/ManagedMigration.tsx b/products/managed_migrations/frontend/ManagedMigration.tsx index 28f21380ab..9e5ce4ac6b 100644 --- a/products/managed_migrations/frontend/ManagedMigration.tsx +++ b/products/managed_migrations/frontend/ManagedMigration.tsx @@ -1,7 +1,9 @@ -import { LemonButton } from '@posthog/lemon-ui' -import { LemonTable, LemonTag } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' + +import { LemonButton } from '@posthog/lemon-ui' +import { LemonTable, LemonTag } from '@posthog/lemon-ui' + import { PageHeader } from 'lib/components/PageHeader' import { TZLabel } from 'lib/components/TZLabel' import { dayjs } from 'lib/dayjs' diff --git a/products/managed_migrations/frontend/managedMigrationLogic.ts b/products/managed_migrations/frontend/managedMigrationLogic.ts index 1b1ac6d4c6..b03efc1d0b 100644 --- a/products/managed_migrations/frontend/managedMigrationLogic.ts +++ b/products/managed_migrations/frontend/managedMigrationLogic.ts @@ -2,6 +2,7 @@ import { actions, afterMount, beforeUnmount, kea, listeners, path, props, reduce import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' import { router, urlToAction } from 'kea-router' + import api, { ApiConfig } from 'lib/api' import { dayjs } from 'lib/dayjs' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' diff --git a/products/messaging/frontend/Campaigns/CampaignMetrics.tsx b/products/messaging/frontend/Campaigns/CampaignMetrics.tsx index 77c8792eaf..09511ba379 100644 --- a/products/messaging/frontend/Campaigns/CampaignMetrics.tsx +++ b/products/messaging/frontend/Campaigns/CampaignMetrics.tsx @@ -1,12 +1,14 @@ +import { BindLogic, useActions, useValues } from 'kea' +import { useEffect } from 'react' + import { IconCalendar } from '@posthog/icons' import { LemonSelect, LemonSkeleton } from '@posthog/lemon-ui' -import { BindLogic, useActions, useValues } from 'kea' + import { DateFilter } from 'lib/components/DateFilter/DateFilter' import { Tooltip } from 'lib/lemon-ui/Tooltip' import { humanFriendlyNumber } from 'lib/utils' -import { useEffect } from 'react' -import { campaignMetricsLogic, CampaignMetricsLogicProps } from './campaignMetricsLogic' +import { CampaignMetricsLogicProps, campaignMetricsLogic } from './campaignMetricsLogic' export function CampaignMetrics({ id }: CampaignMetricsLogicProps): JSX.Element { // Get the metrics based off of the campaign id diff --git a/products/messaging/frontend/Campaigns/CampaignOverview.tsx b/products/messaging/frontend/Campaigns/CampaignOverview.tsx index 7c3fee0045..03513660ed 100644 --- a/products/messaging/frontend/Campaigns/CampaignOverview.tsx +++ b/products/messaging/frontend/Campaigns/CampaignOverview.tsx @@ -4,6 +4,9 @@ import { useValues } from 'kea' import { Form } from 'kea-forms' import posthog from 'posthog-js' +import { IconBolt, IconLeave, IconPlusSmall, IconTarget } from '@posthog/icons' +import { LemonButton, LemonLabel, LemonTag, LemonTextArea, lemonToast } from '@posthog/lemon-ui' + import { PropertyFilters } from 'lib/components/PropertyFilters/PropertyFilters' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { LemonDivider } from 'lib/lemon-ui/LemonDivider' @@ -12,10 +15,8 @@ import { LemonInput } from 'lib/lemon-ui/LemonInput' import { LemonRadio } from 'lib/lemon-ui/LemonRadio' import { LemonSelect } from 'lib/lemon-ui/LemonSelect' -import { campaignLogic, CampaignLogicProps } from './campaignLogic' +import { CampaignLogicProps, campaignLogic } from './campaignLogic' import { HogFlowFilters } from './hogflows/filters/HogFlowFilters' -import { IconBolt, IconLeave, IconPlusSmall, IconTarget } from '@posthog/icons' -import { LemonButton, LemonLabel, LemonTag, LemonTextArea, lemonToast } from '@posthog/lemon-ui' export function CampaignOverview(props: CampaignLogicProps): JSX.Element { return ( diff --git a/products/messaging/frontend/Campaigns/CampaignScene.tsx b/products/messaging/frontend/Campaigns/CampaignScene.tsx index dd17b51dc9..291a3b8469 100644 --- a/products/messaging/frontend/Campaigns/CampaignScene.tsx +++ b/products/messaging/frontend/Campaigns/CampaignScene.tsx @@ -1,17 +1,19 @@ import { useValues } from 'kea' import { router } from 'kea-router' + +import { SpinnerOverlay } from '@posthog/lemon-ui' + import { LemonTab, LemonTabs } from 'lib/lemon-ui/LemonTabs' import { LogsViewer } from 'scenes/hog-functions/logs/LogsViewer' import { SceneExport } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' -import { campaignLogic } from './campaignLogic' import { CampaignMetrics } from './CampaignMetrics' import { CampaignOverview } from './CampaignOverview' -import { campaignSceneLogic, CampaignSceneLogicProps, CampaignTab } from './campaignSceneLogic' -import { CampaignWorkflow } from './CampaignWorkflow' -import { SpinnerOverlay } from '@posthog/lemon-ui' import { CampaignSceneHeader } from './CampaignSceneHeader' +import { CampaignWorkflow } from './CampaignWorkflow' +import { campaignLogic } from './campaignLogic' +import { CampaignSceneLogicProps, CampaignTab, campaignSceneLogic } from './campaignSceneLogic' export const scene: SceneExport = { component: CampaignScene, diff --git a/products/messaging/frontend/Campaigns/CampaignSceneHeader.tsx b/products/messaging/frontend/Campaigns/CampaignSceneHeader.tsx index 410519f0a3..4daa46d108 100644 --- a/products/messaging/frontend/Campaigns/CampaignSceneHeader.tsx +++ b/products/messaging/frontend/Campaigns/CampaignSceneHeader.tsx @@ -1,6 +1,9 @@ +import { useActions, useValues } from 'kea' + import { LemonButton, LemonDivider } from '@posthog/lemon-ui' + import { PageHeader } from 'lib/components/PageHeader' -import { useValues, useActions } from 'kea' + import { campaignLogic } from './campaignLogic' import { CampaignSceneLogicProps } from './campaignSceneLogic' diff --git a/products/messaging/frontend/Campaigns/CampaignWorkflow.tsx b/products/messaging/frontend/Campaigns/CampaignWorkflow.tsx index bea89ed070..2fd325920e 100644 --- a/products/messaging/frontend/Campaigns/CampaignWorkflow.tsx +++ b/products/messaging/frontend/Campaigns/CampaignWorkflow.tsx @@ -1,7 +1,8 @@ -import { SpinnerOverlay } from '@posthog/lemon-ui' import { BindLogic, useValues } from 'kea' -import { campaignLogic, CampaignLogicProps } from './campaignLogic' +import { SpinnerOverlay } from '@posthog/lemon-ui' + +import { CampaignLogicProps, campaignLogic } from './campaignLogic' import { HogFlowEditor } from './hogflows/HogFlowEditor' export function CampaignWorkflow(props: CampaignLogicProps): JSX.Element { diff --git a/products/messaging/frontend/Campaigns/CampaignsTable.tsx b/products/messaging/frontend/Campaigns/CampaignsTable.tsx index 97a22603dc..ad827f7f42 100644 --- a/products/messaging/frontend/Campaigns/CampaignsTable.tsx +++ b/products/messaging/frontend/Campaigns/CampaignsTable.tsx @@ -1,14 +1,16 @@ import { useActions, useMountedLogic, useValues } from 'kea' + +import { LemonTag } from '@posthog/lemon-ui' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { More } from 'lib/lemon-ui/LemonButton/More' import { LemonTable, LemonTableColumns } from 'lib/lemon-ui/LemonTable' import { LemonTableLink } from 'lib/lemon-ui/LemonTable/LemonTableLink' +import { capitalizeFirstLetter } from 'lib/utils' import { urls } from 'scenes/urls' import { campaignsLogic } from './campaignsLogic' import { HogFlow } from './hogflows/types' -import { LemonTag } from '@posthog/lemon-ui' -import { capitalizeFirstLetter } from 'lib/utils' export function CampaignsTable(): JSX.Element { useMountedLogic(campaignsLogic) diff --git a/products/messaging/frontend/Campaigns/campaignLogic.ts b/products/messaging/frontend/Campaigns/campaignLogic.ts index f7ef753b8a..681ae62acf 100644 --- a/products/messaging/frontend/Campaigns/campaignLogic.ts +++ b/products/messaging/frontend/Campaigns/campaignLogic.ts @@ -1,8 +1,10 @@ -import { LemonDialog } from '@posthog/lemon-ui' import { actions, afterMount, kea, key, listeners, path, props, selectors } from 'kea' import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' import { router } from 'kea-router' + +import { LemonDialog } from '@posthog/lemon-ui' + import api from 'lib/api' import { lemonToast } from 'lib/lemon-ui/LemonToast' import { urls } from 'scenes/urls' diff --git a/products/messaging/frontend/Campaigns/campaignMetricsLogic.ts b/products/messaging/frontend/Campaigns/campaignMetricsLogic.ts index 668e659d23..2c3b958b6a 100644 --- a/products/messaging/frontend/Campaigns/campaignMetricsLogic.ts +++ b/products/messaging/frontend/Campaigns/campaignMetricsLogic.ts @@ -1,5 +1,6 @@ import { actions, kea, key, listeners, path, props, reducers } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { MetricsFilters } from 'scenes/hog-functions/metrics/hogFunctionMetricsLogic' diff --git a/products/messaging/frontend/Campaigns/campaignSceneLogic.ts b/products/messaging/frontend/Campaigns/campaignSceneLogic.ts index 1f4a80873a..2912455b03 100644 --- a/products/messaging/frontend/Campaigns/campaignSceneLogic.ts +++ b/products/messaging/frontend/Campaigns/campaignSceneLogic.ts @@ -1,5 +1,6 @@ import { actions, kea, path, props, reducers, selectors } from 'kea' import { actionToUrl, urlToAction } from 'kea-router' + import { Scene } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' diff --git a/products/messaging/frontend/Campaigns/campaignsLogic.ts b/products/messaging/frontend/Campaigns/campaignsLogic.ts index 3b493e3de6..f326734c8b 100644 --- a/products/messaging/frontend/Campaigns/campaignsLogic.ts +++ b/products/messaging/frontend/Campaigns/campaignsLogic.ts @@ -1,5 +1,6 @@ import { actions, afterMount, kea, path } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import type { campaignsLogicType } from './campaignsLogicType' diff --git a/products/messaging/frontend/Campaigns/hogflows/HogFlowEditor.tsx b/products/messaging/frontend/Campaigns/hogflows/HogFlowEditor.tsx index 810c91a596..d4ad3265f8 100644 --- a/products/messaging/frontend/Campaigns/hogflows/HogFlowEditor.tsx +++ b/products/messaging/frontend/Campaigns/hogflows/HogFlowEditor.tsx @@ -17,11 +17,11 @@ import { useEffect, useRef } from 'react' import { themeLogic } from '~/layout/navigation-3000/themeLogic' import { campaignLogic } from '../campaignLogic' +import { HogFlowEditorRightPanel } from './HogFlowEditorRightPanel' import { hogFlowEditorLogic } from './hogFlowEditorLogic' import { REACT_FLOW_NODE_TYPES } from './steps/Nodes' -import { HogFlowActionNode } from './types' -import { HogFlowEditorRightPanel } from './HogFlowEditorRightPanel' import { REACT_FLOW_EDGE_TYPES } from './steps/SmartEdge' +import { HogFlowActionNode } from './types' // Inner component that encapsulates React Flow function HogFlowEditorContent(): JSX.Element { diff --git a/products/messaging/frontend/Campaigns/hogflows/HogFlowEditorDetailsPanel.tsx b/products/messaging/frontend/Campaigns/hogflows/HogFlowEditorDetailsPanel.tsx index 676e6e13cd..f76218dfdb 100644 --- a/products/messaging/frontend/Campaigns/hogflows/HogFlowEditorDetailsPanel.tsx +++ b/products/messaging/frontend/Campaigns/hogflows/HogFlowEditorDetailsPanel.tsx @@ -1,7 +1,9 @@ -import { IconTrash, IconX } from '@posthog/icons' -import { LemonButton, LemonDivider, LemonLabel, LemonSwitch } from '@posthog/lemon-ui' import { getOutgoers, useReactFlow } from '@xyflow/react' import { useActions, useValues } from 'kea' + +import { IconTrash, IconX } from '@posthog/icons' +import { LemonButton, LemonDivider, LemonLabel, LemonSwitch } from '@posthog/lemon-ui' + import { ScrollableShadows } from 'lib/components/ScrollableShadows/ScrollableShadows' import { HogFlowFilters } from './filters/HogFlowFilters' diff --git a/products/messaging/frontend/Campaigns/hogflows/HogFlowEditorRightPanel.tsx b/products/messaging/frontend/Campaigns/hogflows/HogFlowEditorRightPanel.tsx index 9534de97c4..5817f42fd9 100644 --- a/products/messaging/frontend/Campaigns/hogflows/HogFlowEditorRightPanel.tsx +++ b/products/messaging/frontend/Campaigns/hogflows/HogFlowEditorRightPanel.tsx @@ -1,10 +1,11 @@ -import { LemonTab, LemonTabs } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' -import { hogFlowEditorLogic, HogFlowEditorMode } from './hogFlowEditorLogic' -import { HogFlowEditorPanel } from './components/HogFlowEditorPanel' +import { LemonTab, LemonTabs } from '@posthog/lemon-ui' + import { HogFlowEditorDetailsPanel } from './HogFlowEditorDetailsPanel' import { HogFlowEditorToolbar } from './HogFlowEditorToolbar' +import { HogFlowEditorPanel } from './components/HogFlowEditorPanel' +import { HogFlowEditorMode, hogFlowEditorLogic } from './hogFlowEditorLogic' import { HogFlowEditorTestPanel, HogFlowTestPanelNonSelected } from './testing/HogFlowEditorTestPanel' export function HogFlowEditorRightPanel(): JSX.Element | null { diff --git a/products/messaging/frontend/Campaigns/hogflows/HogFlowEditorToolbar.tsx b/products/messaging/frontend/Campaigns/hogflows/HogFlowEditorToolbar.tsx index 8a30517a53..8e9895a066 100644 --- a/products/messaging/frontend/Campaigns/hogflows/HogFlowEditorToolbar.tsx +++ b/products/messaging/frontend/Campaigns/hogflows/HogFlowEditorToolbar.tsx @@ -1,6 +1,7 @@ +import { useActions } from 'kea' + import { IconDrag } from '@posthog/icons' import { LemonButton, LemonDivider } from '@posthog/lemon-ui' -import { useActions } from 'kea' import { hogFlowEditorLogic } from './hogFlowEditorLogic' import { getHogFlowStep } from './steps/HogFlowSteps' diff --git a/products/messaging/frontend/Campaigns/hogflows/autolayout.ts b/products/messaging/frontend/Campaigns/hogflows/autolayout.ts index c5fbd56f6e..f6ff39de3d 100644 --- a/products/messaging/frontend/Campaigns/hogflows/autolayout.ts +++ b/products/messaging/frontend/Campaigns/hogflows/autolayout.ts @@ -1,7 +1,7 @@ import { Edge, Position } from '@xyflow/react' import ELK, { ElkExtendedEdge, ElkNode } from 'elkjs/lib/elk.bundled.js' -import { NODE_GAP, NODE_LAYER_GAP, NODE_HEIGHT, NODE_WIDTH, NODE_EDGE_GAP } from './constants' +import { NODE_EDGE_GAP, NODE_GAP, NODE_HEIGHT, NODE_LAYER_GAP, NODE_WIDTH } from './constants' import type { HogFlowActionNode } from './types' /** diff --git a/products/messaging/frontend/Campaigns/hogflows/hogFlowEditorLogic.tsx b/products/messaging/frontend/Campaigns/hogflows/hogFlowEditorLogic.tsx index c313e29d7a..95abafcb6f 100644 --- a/products/messaging/frontend/Campaigns/hogflows/hogFlowEditorLogic.tsx +++ b/products/messaging/frontend/Campaigns/hogflows/hogFlowEditorLogic.tsx @@ -1,28 +1,30 @@ -import { lemonToast } from '@posthog/lemon-ui' import { - applyEdgeChanges, - applyNodeChanges, EdgeChange, - getOutgoers, MarkerType, NodeChange, Position, ReactFlowInstance, + applyEdgeChanges, + applyNodeChanges, + getOutgoers, } from '@xyflow/react' import { Edge, Node } from '@xyflow/react' import { actions, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { subscriptions } from 'kea-subscriptions' +import type { DragEvent } from 'react' + +import { lemonToast } from '@posthog/lemon-ui' + import { uuid } from 'lib/utils' -import { campaignLogic, CampaignLogicProps } from '../campaignLogic' +import { CampaignLogicProps, campaignLogic } from '../campaignLogic' import { getFormattedNodes } from './autolayout' import { BOTTOM_HANDLE_POSITION, NODE_HEIGHT, NODE_WIDTH, TOP_HANDLE_POSITION } from './constants' import type { hogFlowEditorLogicType } from './hogFlowEditorLogicType' import { getHogFlowStep } from './steps/HogFlowSteps' +import { getSmartStepPath } from './steps/SmartEdge' import { StepViewNodeHandle } from './steps/types' import type { HogFlow, HogFlowAction, HogFlowActionNode } from './types' -import type { DragEvent } from 'react' -import { getSmartStepPath } from './steps/SmartEdge' const getEdgeId = (edge: HogFlow['edges'][number]): string => `${edge.from}->${edge.to} ${edge.index ?? ''}`.trim() diff --git a/products/messaging/frontend/Campaigns/hogflows/steps/Nodes.tsx b/products/messaging/frontend/Campaigns/hogflows/steps/Nodes.tsx index fb7012d858..0584d38228 100644 --- a/products/messaging/frontend/Campaigns/hogflows/steps/Nodes.tsx +++ b/products/messaging/frontend/Campaigns/hogflows/steps/Nodes.tsx @@ -1,15 +1,16 @@ -import { IconPlus } from '@posthog/icons' import { Handle, useUpdateNodeInternals } from '@xyflow/react' import clsx from 'clsx' import { useActions, useValues } from 'kea' import { useEffect, useState } from 'react' +import { IconPlus } from '@posthog/icons' + +import { NODE_HEIGHT, NODE_WIDTH } from '../constants' import { hogFlowEditorLogic } from '../hogFlowEditorLogic' import type { HogFlowAction } from '../types' -import { StepView } from './components/StepView' import { getHogFlowStep } from './HogFlowSteps' +import { StepView } from './components/StepView' import { HogFlowStepNodeProps } from './types' -import { NODE_HEIGHT, NODE_WIDTH } from '../constants' export type ReactFlowNodeType = HogFlowAction['type'] | 'dropzone' diff --git a/products/messaging/frontend/Campaigns/hogflows/steps/SmartEdge.tsx b/products/messaging/frontend/Campaigns/hogflows/steps/SmartEdge.tsx index da6e863cd6..6a6f9705d2 100644 --- a/products/messaging/frontend/Campaigns/hogflows/steps/SmartEdge.tsx +++ b/products/messaging/frontend/Campaigns/hogflows/steps/SmartEdge.tsx @@ -1,7 +1,9 @@ -import { BaseEdge, EdgeProps, useEdges, Edge, EdgeLabelRenderer } from '@xyflow/react' -import { HogFlowEdge } from '../types' +import { BaseEdge, Edge, EdgeLabelRenderer, EdgeProps, useEdges } from '@xyflow/react' + import { LemonTag } from '@posthog/lemon-ui' + import { MINIMUM_EDGE_SPACING } from '../constants' +import { HogFlowEdge } from '../types' // Programmatic function to get smart step path with horizontal branching // Handles both edge-to-edge spacing and edge-to-node collision avoidance diff --git a/products/messaging/frontend/Campaigns/hogflows/steps/StepConditionalBranch.tsx b/products/messaging/frontend/Campaigns/hogflows/steps/StepConditionalBranch.tsx index 5e110437f3..34edd78351 100644 --- a/products/messaging/frontend/Campaigns/hogflows/steps/StepConditionalBranch.tsx +++ b/products/messaging/frontend/Campaigns/hogflows/steps/StepConditionalBranch.tsx @@ -1,9 +1,11 @@ -import { IconDecisionTree, IconPlus, IconX } from '@posthog/icons' import { Node } from '@xyflow/react' import { useActions, useValues } from 'kea' +import { useMemo } from 'react' + +import { IconDecisionTree, IconPlus, IconX } from '@posthog/icons' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonLabel } from 'lib/lemon-ui/LemonLabel' -import { useMemo } from 'react' import { HogFlowFilters } from '../filters/HogFlowFilters' import { hogFlowEditorLogic } from '../hogFlowEditorLogic' diff --git a/products/messaging/frontend/Campaigns/hogflows/steps/StepDelay.tsx b/products/messaging/frontend/Campaigns/hogflows/steps/StepDelay.tsx index 8017b8cdfa..d133eda1d3 100644 --- a/products/messaging/frontend/Campaigns/hogflows/steps/StepDelay.tsx +++ b/products/messaging/frontend/Campaigns/hogflows/steps/StepDelay.tsx @@ -1,7 +1,8 @@ -import { IconClock } from '@posthog/icons' import { Node } from '@xyflow/react' import { useActions } from 'kea' +import { IconClock } from '@posthog/icons' + import { hogFlowEditorLogic } from '../hogFlowEditorLogic' import { HogFlowAction } from '../types' import { HogFlowDuration } from './components/HogFlowDuration' diff --git a/products/messaging/frontend/Campaigns/hogflows/steps/StepExit.tsx b/products/messaging/frontend/Campaigns/hogflows/steps/StepExit.tsx index 59f85ef9c9..8bf59384d4 100644 --- a/products/messaging/frontend/Campaigns/hogflows/steps/StepExit.tsx +++ b/products/messaging/frontend/Campaigns/hogflows/steps/StepExit.tsx @@ -1,6 +1,7 @@ -import { IconLeave } from '@posthog/icons' import { Node } from '@xyflow/react' +import { IconLeave } from '@posthog/icons' + import { HogFlowAction } from '../types' import { StepView } from './components/StepView' import { HogFlowStep, HogFlowStepNodeProps } from './types' diff --git a/products/messaging/frontend/Campaigns/hogflows/steps/StepFunction.tsx b/products/messaging/frontend/Campaigns/hogflows/steps/StepFunction.tsx index 59ff38fc07..430962580b 100644 --- a/products/messaging/frontend/Campaigns/hogflows/steps/StepFunction.tsx +++ b/products/messaging/frontend/Campaigns/hogflows/steps/StepFunction.tsx @@ -1,12 +1,15 @@ -import { CyclotronJobInputs } from 'lib/components/CyclotronJob/CyclotronJobInputs' -import { CyclotronJobInputType } from '~/types' - -import { hogFunctionStepLogic, StepFunctionNode } from './hogFunctionStepLogic' -import { Spinner } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' import { useEffect } from 'react' + +import { Spinner } from '@posthog/lemon-ui' + +import { CyclotronJobInputs } from 'lib/components/CyclotronJob/CyclotronJobInputs' + +import { CyclotronJobInputType } from '~/types' + import { hogFlowEditorLogic } from '../hogFlowEditorLogic' +import { StepFunctionNode, hogFunctionStepLogic } from './hogFunctionStepLogic' export function StepFunctionConfiguration({ node }: { node: StepFunctionNode }): JSX.Element { const { configuration, templateLoading, template } = useValues(hogFunctionStepLogic({ node })) diff --git a/products/messaging/frontend/Campaigns/hogflows/steps/StepFunctionEmail.tsx b/products/messaging/frontend/Campaigns/hogflows/steps/StepFunctionEmail.tsx index 825aae389d..ab4435f1a7 100644 --- a/products/messaging/frontend/Campaigns/hogflows/steps/StepFunctionEmail.tsx +++ b/products/messaging/frontend/Campaigns/hogflows/steps/StepFunctionEmail.tsx @@ -1,10 +1,11 @@ -import { IconLetter } from '@posthog/icons' import { Node } from '@xyflow/react' +import { IconLetter } from '@posthog/icons' + import { HogFlowAction } from '../types' +import { StepFunctionConfiguration } from './StepFunction' import { StepView } from './components/StepView' import { HogFlowStep, HogFlowStepNodeProps } from './types' -import { StepFunctionConfiguration } from './StepFunction' export const StepFunctionEmail: HogFlowStep<'function_email'> = { type: 'function_email', diff --git a/products/messaging/frontend/Campaigns/hogflows/steps/StepFunctionSlack.tsx b/products/messaging/frontend/Campaigns/hogflows/steps/StepFunctionSlack.tsx index af63fa5432..2f7f23c04b 100644 --- a/products/messaging/frontend/Campaigns/hogflows/steps/StepFunctionSlack.tsx +++ b/products/messaging/frontend/Campaigns/hogflows/steps/StepFunctionSlack.tsx @@ -1,10 +1,11 @@ import { Node } from '@xyflow/react' +import { IconSlack } from 'lib/lemon-ui/icons/icons' + import { HogFlowAction } from '../types' +import { StepFunctionConfiguration } from './StepFunction' import { StepView } from './components/StepView' import { HogFlowStep, HogFlowStepNodeProps } from './types' -import { StepFunctionConfiguration } from './StepFunction' -import { IconSlack } from 'lib/lemon-ui/icons/icons' export const StepFunctionSlack: HogFlowStep<'function_slack'> = { type: 'function_slack', diff --git a/products/messaging/frontend/Campaigns/hogflows/steps/StepFunctionSms.tsx b/products/messaging/frontend/Campaigns/hogflows/steps/StepFunctionSms.tsx index 37ef4d1960..9b8d8397b0 100644 --- a/products/messaging/frontend/Campaigns/hogflows/steps/StepFunctionSms.tsx +++ b/products/messaging/frontend/Campaigns/hogflows/steps/StepFunctionSms.tsx @@ -1,10 +1,11 @@ import { Node } from '@xyflow/react' +import { IconTwilio } from 'lib/lemon-ui/icons' + import { HogFlowAction } from '../types' +import { StepFunctionConfiguration } from './StepFunction' import { StepView } from './components/StepView' import { HogFlowStep, HogFlowStepNodeProps } from './types' -import { IconTwilio } from 'lib/lemon-ui/icons' -import { StepFunctionConfiguration } from './StepFunction' export const StepFunctionSms: HogFlowStep<'function_sms'> = { type: 'function_sms', diff --git a/products/messaging/frontend/Campaigns/hogflows/steps/StepFunctionWebhook.tsx b/products/messaging/frontend/Campaigns/hogflows/steps/StepFunctionWebhook.tsx index e76bf05d7f..288d40ed33 100644 --- a/products/messaging/frontend/Campaigns/hogflows/steps/StepFunctionWebhook.tsx +++ b/products/messaging/frontend/Campaigns/hogflows/steps/StepFunctionWebhook.tsx @@ -1,10 +1,11 @@ -import { IconWebhooks } from '@posthog/icons' import { Node } from '@xyflow/react' +import { IconWebhooks } from '@posthog/icons' + import { HogFlowAction } from '../types' +import { StepFunctionConfiguration } from './StepFunction' import { StepView } from './components/StepView' import { HogFlowStep, HogFlowStepNodeProps } from './types' -import { StepFunctionConfiguration } from './StepFunction' export const StepFunctionWebhook: HogFlowStep<'function_webhook'> = { type: 'function_webhook', diff --git a/products/messaging/frontend/Campaigns/hogflows/steps/StepRandomCohortBranch.tsx b/products/messaging/frontend/Campaigns/hogflows/steps/StepRandomCohortBranch.tsx index 2236a2aef3..a169923a70 100644 --- a/products/messaging/frontend/Campaigns/hogflows/steps/StepRandomCohortBranch.tsx +++ b/products/messaging/frontend/Campaigns/hogflows/steps/StepRandomCohortBranch.tsx @@ -1,9 +1,11 @@ -import { IconPercentage, IconPlus, IconX } from '@posthog/icons' import { Node } from '@xyflow/react' import { useActions, useValues } from 'kea' +import { useMemo } from 'react' + +import { IconPercentage, IconPlus, IconX } from '@posthog/icons' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonLabel } from 'lib/lemon-ui/LemonLabel' -import { useMemo } from 'react' import { hogFlowEditorLogic } from '../hogFlowEditorLogic' import { HogFlow, HogFlowAction } from '../types' diff --git a/products/messaging/frontend/Campaigns/hogflows/steps/StepTrigger.tsx b/products/messaging/frontend/Campaigns/hogflows/steps/StepTrigger.tsx index 5d638277c1..b28bb8c4ef 100644 --- a/products/messaging/frontend/Campaigns/hogflows/steps/StepTrigger.tsx +++ b/products/messaging/frontend/Campaigns/hogflows/steps/StepTrigger.tsx @@ -1,7 +1,8 @@ -import { IconBolt } from '@posthog/icons' import { Node } from '@xyflow/react' import { useActions } from 'kea' +import { IconBolt } from '@posthog/icons' + import { HogFlowFilters } from '../filters/HogFlowFilters' import { hogFlowEditorLogic } from '../hogFlowEditorLogic' import { HogFlowAction } from '../types' diff --git a/products/messaging/frontend/Campaigns/hogflows/steps/StepWaitUntilCondition.tsx b/products/messaging/frontend/Campaigns/hogflows/steps/StepWaitUntilCondition.tsx index f5ac983fb8..0b128e541b 100644 --- a/products/messaging/frontend/Campaigns/hogflows/steps/StepWaitUntilCondition.tsx +++ b/products/messaging/frontend/Campaigns/hogflows/steps/StepWaitUntilCondition.tsx @@ -1,8 +1,9 @@ -import { IconHourglass } from '@posthog/icons' -import { LemonLabel } from '@posthog/lemon-ui' import { Node } from '@xyflow/react' import { useActions } from 'kea' +import { IconHourglass } from '@posthog/icons' +import { LemonLabel } from '@posthog/lemon-ui' + import { HogFlowFilters } from '../filters/HogFlowFilters' import { hogFlowEditorLogic } from '../hogFlowEditorLogic' import { HogFlowAction } from '../types' diff --git a/products/messaging/frontend/Campaigns/hogflows/steps/StepWaitUntilTimeWindow.tsx b/products/messaging/frontend/Campaigns/hogflows/steps/StepWaitUntilTimeWindow.tsx index 2eea852091..649c2e5d20 100644 --- a/products/messaging/frontend/Campaigns/hogflows/steps/StepWaitUntilTimeWindow.tsx +++ b/products/messaging/frontend/Campaigns/hogflows/steps/StepWaitUntilTimeWindow.tsx @@ -1,10 +1,13 @@ -import { IconDay } from '@posthog/icons' -import { LemonLabel, LemonSelect, LemonInputSelect, LemonDivider } from '@posthog/lemon-ui' import { Node } from '@xyflow/react' import { useActions, useValues } from 'kea' + +import { IconDay } from '@posthog/icons' +import { LemonDivider, LemonInputSelect, LemonLabel, LemonSelect } from '@posthog/lemon-ui' + +import { timeZoneLabel } from 'lib/utils' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import { teamLogic } from 'scenes/teamLogic' -import { timeZoneLabel } from 'lib/utils' + import { WeekdayType } from '~/types' import { hogFlowEditorLogic } from '../hogFlowEditorLogic' diff --git a/products/messaging/frontend/Campaigns/hogflows/steps/hogFunctionStepLogic.tsx b/products/messaging/frontend/Campaigns/hogflows/steps/hogFunctionStepLogic.tsx index f725208dd5..2992666d91 100644 --- a/products/messaging/frontend/Campaigns/hogflows/steps/hogFunctionStepLogic.tsx +++ b/products/messaging/frontend/Campaigns/hogflows/steps/hogFunctionStepLogic.tsx @@ -1,13 +1,15 @@ +import { Node } from '@xyflow/react' import { afterMount, kea, key, listeners, path, props } from 'kea' import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' + import api from 'lib/api' +import { templateToConfiguration } from 'scenes/hog-functions/configuration/hogFunctionConfigurationLogic' + import { HogFunctionTemplateType } from '~/types' -import type { hogFunctionStepLogicType } from './hogFunctionStepLogicType' import { HogFlowAction } from '../types' -import { Node } from '@xyflow/react' -import { templateToConfiguration } from 'scenes/hog-functions/configuration/hogFunctionConfigurationLogic' +import type { hogFunctionStepLogicType } from './hogFunctionStepLogicType' export type StepFunctionNode = Node< Extract< diff --git a/products/messaging/frontend/Campaigns/hogflows/steps/types.ts b/products/messaging/frontend/Campaigns/hogflows/steps/types.ts index 1ca9532fa6..d722ba8488 100644 --- a/products/messaging/frontend/Campaigns/hogflows/steps/types.ts +++ b/products/messaging/frontend/Campaigns/hogflows/steps/types.ts @@ -1,8 +1,8 @@ import { Handle, Node, NodeProps } from '@xyflow/react' +import { z } from 'zod' import { Optional } from '~/types' -import { z } from 'zod' import { HogFlowAction } from '../types' export type HogFlowStepNodeProps = NodeProps & { diff --git a/products/messaging/frontend/Campaigns/hogflows/testing/HogFlowEditorTestPanel.tsx b/products/messaging/frontend/Campaigns/hogflows/testing/HogFlowEditorTestPanel.tsx index 25dd906e59..1d3eb39c12 100644 --- a/products/messaging/frontend/Campaigns/hogflows/testing/HogFlowEditorTestPanel.tsx +++ b/products/messaging/frontend/Campaigns/hogflows/testing/HogFlowEditorTestPanel.tsx @@ -1,3 +1,6 @@ +import { useActions, useValues } from 'kea' +import { Form } from 'kea-forms' + import { IconInfo, IconPlay, IconRedo, IconTestTube, IconX } from '@posthog/icons' import { LemonBanner, @@ -10,17 +13,16 @@ import { ProfilePicture, Tooltip, } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' -import { Form } from 'kea-forms' + import { TZLabel } from 'lib/components/TZLabel' import { LemonField } from 'lib/lemon-ui/LemonField' import { asDisplay } from 'scenes/persons/person-utils' import { urls } from 'scenes/urls' -import { hogFlowEditorTestLogic } from './hogFlowEditorTestLogic' import { campaignLogic } from '../../campaignLogic' import { hogFlowEditorLogic } from '../hogFlowEditorLogic' import { getHogFlowStep } from '../steps/HogFlowSteps' +import { hogFlowEditorTestLogic } from './hogFlowEditorTestLogic' export function HogFlowTestPanelNonSelected(): JSX.Element { return ( diff --git a/products/messaging/frontend/Campaigns/hogflows/testing/hogFlowEditorTestLogic.ts b/products/messaging/frontend/Campaigns/hogflows/testing/hogFlowEditorTestLogic.ts index 6f80d68a6a..8b41859e8e 100644 --- a/products/messaging/frontend/Campaigns/hogflows/testing/hogFlowEditorTestLogic.ts +++ b/products/messaging/frontend/Campaigns/hogflows/testing/hogFlowEditorTestLogic.ts @@ -1,8 +1,10 @@ -import { lemonToast } from '@posthog/lemon-ui' import equal from 'fast-deep-equal' import { actions, afterMount, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' import { dayjs } from 'lib/dayjs' import { uuid } from 'lib/utils' @@ -19,10 +21,10 @@ import { } from '~/types' import { PropertyGroupFilter } from '~/types' -import type { hogFlowEditorTestLogicType } from './hogFlowEditorTestLogicType' import { CampaignLogicProps } from '../../campaignLogic' import { campaignLogic } from '../../campaignLogic' import { HogFlow } from '../types' +import type { hogFlowEditorTestLogicType } from './hogFlowEditorTestLogicType' export interface HogflowTestInvocation { globals: string diff --git a/products/messaging/frontend/Campaigns/hogflows/types.ts b/products/messaging/frontend/Campaigns/hogflows/types.ts index f13d806d75..80b365cc95 100644 --- a/products/messaging/frontend/Campaigns/hogflows/types.ts +++ b/products/messaging/frontend/Campaigns/hogflows/types.ts @@ -1,5 +1,6 @@ import { Node } from '@xyflow/react' import { z } from 'zod' + import { HogFlowActionSchema } from './steps/types' const HogFlowEdgeSchema = z.object({ diff --git a/products/messaging/frontend/Channels/ChannelSetupModal.tsx b/products/messaging/frontend/Channels/ChannelSetupModal.tsx index 3ee0828edb..ed959068fb 100644 --- a/products/messaging/frontend/Channels/ChannelSetupModal.tsx +++ b/products/messaging/frontend/Channels/ChannelSetupModal.tsx @@ -1,8 +1,9 @@ import { IntegrationType } from '~/types' + import { EmailSetupModal } from './EmailSetup/EmailSetupModal' +import { ChannelType } from './MessageChannels' import { SlackSetupModal } from './SlackSetup/SlackSetupModal' import { TwilioSetupModal } from './TwilioSetup/TwilioSetupModal' -import { ChannelType } from './MessageChannels' interface ChannelSetupModalProps { isOpen: boolean diff --git a/products/messaging/frontend/Channels/EmailSetup/EmailSetupModal.tsx b/products/messaging/frontend/Channels/EmailSetup/EmailSetupModal.tsx index d4fcf79866..416d0305e0 100644 --- a/products/messaging/frontend/Channels/EmailSetup/EmailSetupModal.tsx +++ b/products/messaging/frontend/Channels/EmailSetup/EmailSetupModal.tsx @@ -1,10 +1,12 @@ -import { IconCheckCircle, IconCopy, IconWarning } from '@posthog/icons' -import { LemonButton, LemonInput, LemonModal, lemonToast, Spinner } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' + +import { IconCheckCircle, IconCopy, IconWarning } from '@posthog/icons' +import { LemonButton, LemonInput, LemonModal, Spinner, lemonToast } from '@posthog/lemon-ui' + import { LemonField } from 'lib/lemon-ui/LemonField' -import { DnsRecord, emailSetupModalLogic, EmailSetupModalLogicProps } from './emailSetupModalLogic' +import { DnsRecord, EmailSetupModalLogicProps, emailSetupModalLogic } from './emailSetupModalLogic' export const EmailSetupModal = (props: EmailSetupModalLogicProps): JSX.Element => { const { integration, integrationLoading, verification, verificationLoading } = useValues( diff --git a/products/messaging/frontend/Channels/EmailSetup/emailSetupModalLogic.ts b/products/messaging/frontend/Channels/EmailSetup/emailSetupModalLogic.ts index c86f40c08d..8fff25b011 100644 --- a/products/messaging/frontend/Channels/EmailSetup/emailSetupModalLogic.ts +++ b/products/messaging/frontend/Channels/EmailSetup/emailSetupModalLogic.ts @@ -1,6 +1,7 @@ import { afterMount, connect, kea, key, listeners, path, props, selectors } from 'kea' import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { integrationsLogic } from 'lib/integrations/integrationsLogic' import { lemonToast } from 'lib/lemon-ui/LemonToast' diff --git a/products/messaging/frontend/Channels/MessageChannels.tsx b/products/messaging/frontend/Channels/MessageChannels.tsx index ba74dd63fb..51ff49fc01 100644 --- a/products/messaging/frontend/Channels/MessageChannels.tsx +++ b/products/messaging/frontend/Channels/MessageChannels.tsx @@ -1,17 +1,19 @@ +import { useActions, useValues } from 'kea' + import { IconLetter, IconPlusSmall } from '@posthog/icons' import { LemonButton, LemonSkeleton } from '@posthog/lemon-ui' -import { LemonMenu, LemonMenuItems } from 'lib/lemon-ui/LemonMenu' -import { useActions, useValues } from 'kea' + +import api from 'lib/api' import { PageHeader } from 'lib/components/PageHeader' import { ProductIntroduction } from 'lib/components/ProductIntroduction/ProductIntroduction' +import { EmailIntegrationsList } from 'lib/integrations/EmailIntegrationsList' +import { IntegrationsList } from 'lib/integrations/IntegrationsList' +import { integrationsLogic } from 'lib/integrations/integrationsLogic' +import { LemonMenu, LemonMenuItems } from 'lib/lemon-ui/LemonMenu' +import { IconSlack, IconTwilio } from 'lib/lemon-ui/icons/icons' +import { urls } from 'scenes/urls' import { ChannelSetupModal } from './ChannelSetupModal' -import { IconSlack, IconTwilio } from 'lib/lemon-ui/icons/icons' -import { IntegrationsList } from 'lib/integrations/IntegrationsList' -import api from 'lib/api' -import { urls } from 'scenes/urls' -import { integrationsLogic } from 'lib/integrations/integrationsLogic' -import { EmailIntegrationsList } from 'lib/integrations/EmailIntegrationsList' const MESSAGING_CHANNEL_TYPES = ['email', 'slack', 'twilio'] as const export type ChannelType = (typeof MESSAGING_CHANNEL_TYPES)[number] diff --git a/products/messaging/frontend/Channels/SlackSetup/SlackSetupModal.tsx b/products/messaging/frontend/Channels/SlackSetup/SlackSetupModal.tsx index 90ccbaa2f2..220107de83 100644 --- a/products/messaging/frontend/Channels/SlackSetup/SlackSetupModal.tsx +++ b/products/messaging/frontend/Channels/SlackSetup/SlackSetupModal.tsx @@ -1,9 +1,11 @@ -import { LemonButton, LemonModal, Link } from '@posthog/lemon-ui' import { useValues } from 'kea' + +import { LemonButton, LemonModal, Link } from '@posthog/lemon-ui' + import api from 'lib/api' import { IconSlack } from 'lib/lemon-ui/icons' -import { slackSetupModalLogic, SlackSetupModalLogicProps } from './slackSetupModalLogic' +import { SlackSetupModalLogicProps, slackSetupModalLogic } from './slackSetupModalLogic' export const SlackSetupModal = (props: SlackSetupModalLogicProps): JSX.Element => { const logic = slackSetupModalLogic(props) diff --git a/products/messaging/frontend/Channels/SlackSetup/slackSetupModalLogic.ts b/products/messaging/frontend/Channels/SlackSetup/slackSetupModalLogic.ts index 2c0bcfd1f8..efb9cfb07e 100644 --- a/products/messaging/frontend/Channels/SlackSetup/slackSetupModalLogic.ts +++ b/products/messaging/frontend/Channels/SlackSetup/slackSetupModalLogic.ts @@ -1,5 +1,6 @@ import { connect, kea, path, props } from 'kea' import { forms } from 'kea-forms' + import api from 'lib/api' import { integrationsLogic } from 'lib/integrations/integrationsLogic' import { lemonToast } from 'lib/lemon-ui/LemonToast' diff --git a/products/messaging/frontend/Channels/TwilioSetup/TwilioSetupModal.tsx b/products/messaging/frontend/Channels/TwilioSetup/TwilioSetupModal.tsx index 1b33d34cd6..817aee4944 100644 --- a/products/messaging/frontend/Channels/TwilioSetup/TwilioSetupModal.tsx +++ b/products/messaging/frontend/Channels/TwilioSetup/TwilioSetupModal.tsx @@ -1,11 +1,13 @@ -import { LemonButton, LemonInput, LemonModal } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' -import { LemonField } from 'lib/lemon-ui/LemonField' -import { twilioSetupModalLogic, TwilioSetupModalLogicProps } from './twilioSetupModalLogic' +import { LemonButton, LemonInput, LemonModal } from '@posthog/lemon-ui' + +import { LemonField } from 'lib/lemon-ui/LemonField' import { IconTwilio } from 'lib/lemon-ui/icons' +import { TwilioSetupModalLogicProps, twilioSetupModalLogic } from './twilioSetupModalLogic' + export const TwilioSetupModal = (props: TwilioSetupModalLogicProps): JSX.Element => { const { isTwilioIntegrationSubmitting } = useValues(twilioSetupModalLogic(props)) const { submitTwilioIntegration } = useActions(twilioSetupModalLogic(props)) diff --git a/products/messaging/frontend/Channels/TwilioSetup/twilioSetupModalLogic.ts b/products/messaging/frontend/Channels/TwilioSetup/twilioSetupModalLogic.ts index 7b741d68be..6a2961e9db 100644 --- a/products/messaging/frontend/Channels/TwilioSetup/twilioSetupModalLogic.ts +++ b/products/messaging/frontend/Channels/TwilioSetup/twilioSetupModalLogic.ts @@ -1,5 +1,6 @@ import { connect, kea, path, props } from 'kea' import { forms } from 'kea-forms' + import api from 'lib/api' import { integrationsLogic } from 'lib/integrations/integrationsLogic' import { lemonToast } from 'lib/lemon-ui/LemonToast' diff --git a/products/messaging/frontend/Channels/messageChannelLogic.ts b/products/messaging/frontend/Channels/messageChannelLogic.ts index 264e2f3fed..aeff3815a5 100644 --- a/products/messaging/frontend/Channels/messageChannelLogic.ts +++ b/products/messaging/frontend/Channels/messageChannelLogic.ts @@ -1,4 +1,5 @@ import { kea, key, path, props, selectors } from 'kea' + import { IntegrationType } from '~/types' import type { messageChannelLogicType } from './messageChannelLogicType' diff --git a/products/messaging/frontend/MessagingScene.tsx b/products/messaging/frontend/MessagingScene.tsx index e24e9895a5..67d824cba6 100644 --- a/products/messaging/frontend/MessagingScene.tsx +++ b/products/messaging/frontend/MessagingScene.tsx @@ -1,7 +1,9 @@ -import { IconPlusSmall } from '@posthog/icons' -import { LemonButton } from '@posthog/lemon-ui' import { actions, kea, listeners, path, props, reducers, selectors, useActions, useValues } from 'kea' import { router, urlToAction } from 'kea-router' + +import { IconPlusSmall } from '@posthog/icons' +import { LemonButton } from '@posthog/lemon-ui' + import { PageHeader } from 'lib/components/PageHeader' import { useFeatureFlag } from 'lib/hooks/useFeatureFlag' import { LemonTab, LemonTabs } from 'lib/lemon-ui/LemonTabs' @@ -12,10 +14,10 @@ import { urls } from 'scenes/urls' import { Breadcrumb } from '~/types' import { CampaignsTable } from './Campaigns/CampaignsTable' -import type { messagingSceneLogicType } from './MessagingSceneType' import { MessageChannels } from './Channels/MessageChannels' -import { MessageTemplatesTable } from './TemplateLibrary/MessageTemplatesTable' +import type { messagingSceneLogicType } from './MessagingSceneType' import { OptOutScene } from './OptOuts/OptOutScene' +import { MessageTemplatesTable } from './TemplateLibrary/MessageTemplatesTable' const MESSAGING_SCENE_TABS = ['campaigns', 'library', 'channels', 'opt-outs'] as const export type MessagingSceneTab = (typeof MESSAGING_SCENE_TABS)[number] diff --git a/products/messaging/frontend/OptOuts/NewCategoryModal.tsx b/products/messaging/frontend/OptOuts/NewCategoryModal.tsx index 16fddbe707..c134409277 100644 --- a/products/messaging/frontend/OptOuts/NewCategoryModal.tsx +++ b/products/messaging/frontend/OptOuts/NewCategoryModal.tsx @@ -1,7 +1,10 @@ import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' -import { LemonButton, LemonInput, LemonTextArea, LemonModal, LemonSelect, Link } from '@posthog/lemon-ui' + +import { LemonButton, LemonInput, LemonModal, LemonSelect, LemonTextArea, Link } from '@posthog/lemon-ui' + import { LemonField } from 'lib/lemon-ui/LemonField' + import { newCategoryLogic } from './newCategoryLogic' interface MessageCategory { diff --git a/products/messaging/frontend/OptOuts/OptOutCategories.tsx b/products/messaging/frontend/OptOuts/OptOutCategories.tsx index eb09f5a999..6fa887500d 100644 --- a/products/messaging/frontend/OptOuts/OptOutCategories.tsx +++ b/products/messaging/frontend/OptOuts/OptOutCategories.tsx @@ -1,15 +1,18 @@ +import { useActions, useValues } from 'kea' import { useEffect, useMemo, useState } from 'react' -import { PageHeader } from 'lib/components/PageHeader' -import { LemonButton, LemonCollapse, LemonDialog, LemonSkeleton, LemonTag } from '@posthog/lemon-ui' + import { IconPlusSmall } from '@posthog/icons' +import { LemonButton, LemonCollapse, LemonDialog, LemonSkeleton, LemonTag } from '@posthog/lemon-ui' + +import { PageHeader } from 'lib/components/PageHeader' import { More } from 'lib/lemon-ui/LemonButton/More' import { LemonDivider } from 'lib/lemon-ui/LemonDivider' -import { useActions, useValues } from 'kea' -import { optOutCategoriesLogic } from './optOutCategoriesLogic' -import { OptOutList } from './OptOutList' -import { NewCategoryModal } from './NewCategoryModal' import { capitalizeFirstLetter } from 'lib/utils' +import { NewCategoryModal } from './NewCategoryModal' +import { OptOutList } from './OptOutList' +import { optOutCategoriesLogic } from './optOutCategoriesLogic' + interface MessageCategory { id: string key: string diff --git a/products/messaging/frontend/OptOuts/OptOutList.tsx b/products/messaging/frontend/OptOuts/OptOutList.tsx index 721b62ce80..7329386945 100644 --- a/products/messaging/frontend/OptOuts/OptOutList.tsx +++ b/products/messaging/frontend/OptOuts/OptOutList.tsx @@ -1,12 +1,16 @@ -import { LemonButton, LemonTable, LemonTableColumns, LemonModal } from '@posthog/lemon-ui' -import { More } from 'lib/lemon-ui/LemonButton/More' -import { TZLabel } from 'lib/components/TZLabel' -import { OptOutEntry, optOutListLogic } from './optOutListLogic' import { useActions, useValues } from 'kea' -import { DataTable } from '~/queries/nodes/DataTable/DataTable' -import { DataTableNode, ActorsQuery, NodeKind } from '~/queries/schema/schema-general' -import { MessageCategory } from './optOutCategoriesLogic' + import { IconExternal } from '@posthog/icons' +import { LemonButton, LemonModal, LemonTable, LemonTableColumns } from '@posthog/lemon-ui' + +import { TZLabel } from 'lib/components/TZLabel' +import { More } from 'lib/lemon-ui/LemonButton/More' + +import { DataTable } from '~/queries/nodes/DataTable/DataTable' +import { ActorsQuery, DataTableNode, NodeKind } from '~/queries/schema/schema-general' + +import { MessageCategory } from './optOutCategoriesLogic' +import { OptOutEntry, optOutListLogic } from './optOutListLogic' export function OptOutList({ category }: { category?: MessageCategory }): JSX.Element { const logic = optOutListLogic({ category }) diff --git a/products/messaging/frontend/OptOuts/OptOutScene.tsx b/products/messaging/frontend/OptOuts/OptOutScene.tsx index abce7111e6..eddd7852c0 100644 --- a/products/messaging/frontend/OptOuts/OptOutScene.tsx +++ b/products/messaging/frontend/OptOuts/OptOutScene.tsx @@ -1,10 +1,13 @@ -import { LemonButton } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { IconExternal } from '@posthog/icons' +import { LemonButton } from '@posthog/lemon-ui' + import { userLogic } from 'scenes/userLogic' + import { OptOutCategories } from './OptOutCategories' import { OptOutList } from './OptOutList' import { optOutSceneLogic } from './optOutSceneLogic' -import { IconExternal } from '@posthog/icons' export function OptOutScene(): JSX.Element { const { user } = useValues(userLogic) diff --git a/products/messaging/frontend/OptOuts/newCategoryLogic.ts b/products/messaging/frontend/OptOuts/newCategoryLogic.ts index d1c7d9f4ce..3c1204c7ce 100644 --- a/products/messaging/frontend/OptOuts/newCategoryLogic.ts +++ b/products/messaging/frontend/OptOuts/newCategoryLogic.ts @@ -1,10 +1,11 @@ -import { kea, path, actions, listeners, props, key } from 'kea' +import { actions, kea, key, listeners, path, props } from 'kea' import { forms } from 'kea-forms' + import api from 'lib/api' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' -import { MessageCategory, optOutCategoriesLogic } from './optOutCategoriesLogic' import type { newCategoryLogicType } from './newCategoryLogicType' +import { MessageCategory, optOutCategoriesLogic } from './optOutCategoriesLogic' export type CategoryForm = { name: string diff --git a/products/messaging/frontend/OptOuts/optOutCategoriesLogic.ts b/products/messaging/frontend/OptOuts/optOutCategoriesLogic.ts index ead5dd6e04..adf0d26c54 100644 --- a/products/messaging/frontend/OptOuts/optOutCategoriesLogic.ts +++ b/products/messaging/frontend/OptOuts/optOutCategoriesLogic.ts @@ -1,5 +1,6 @@ -import { kea, path, actions, reducers, listeners } from 'kea' +import { actions, kea, listeners, path, reducers } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import type { optOutCategoriesLogicType } from './optOutCategoriesLogicType' diff --git a/products/messaging/frontend/OptOuts/optOutListLogic.ts b/products/messaging/frontend/OptOuts/optOutListLogic.ts index 72776c188d..382692a9d8 100644 --- a/products/messaging/frontend/OptOuts/optOutListLogic.ts +++ b/products/messaging/frontend/OptOuts/optOutListLogic.ts @@ -1,10 +1,12 @@ -import { kea, path, actions, props, reducers, key, afterMount, connect } from 'kea' +import { actions, afterMount, connect, kea, key, path, props, reducers } from 'kea' import { loaders } from 'kea-loaders' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' -import type { optOutListLogicType } from './optOutListLogicType' -import { lemonToast } from '@posthog/lemon-ui' import { MessageCategory } from './optOutCategoriesLogic' +import type { optOutListLogicType } from './optOutListLogicType' import { optOutSceneLogic } from './optOutSceneLogic' export type OptOutEntry = { diff --git a/products/messaging/frontend/OptOuts/optOutSceneLogic.ts b/products/messaging/frontend/OptOuts/optOutSceneLogic.ts index 5cce444028..1fc102062a 100644 --- a/products/messaging/frontend/OptOuts/optOutSceneLogic.ts +++ b/products/messaging/frontend/OptOuts/optOutSceneLogic.ts @@ -1,10 +1,12 @@ -import { kea, path, actions, connect } from 'kea' +import { actions, connect, kea, path } from 'kea' import { loaders } from 'kea-loaders' + +import { lemonToast } from '@posthog/lemon-ui' + import api from 'lib/api' +import { userLogic } from 'scenes/userLogic' import type { optOutSceneLogicType } from './optOutSceneLogicType' -import { userLogic } from 'scenes/userLogic' -import { lemonToast } from '@posthog/lemon-ui' export const optOutSceneLogic = kea([ path(['products', 'messaging', 'frontend', 'OptOuts', 'optOutSceneLogic']), diff --git a/products/messaging/frontend/TemplateLibrary/MessageTemplate.tsx b/products/messaging/frontend/TemplateLibrary/MessageTemplate.tsx index 8b97e55513..3c3c2b81ee 100644 --- a/products/messaging/frontend/TemplateLibrary/MessageTemplate.tsx +++ b/products/messaging/frontend/TemplateLibrary/MessageTemplate.tsx @@ -1,12 +1,14 @@ -import { LemonButton, LemonInput, LemonTextArea, Spinner } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' + +import { LemonButton, LemonInput, LemonTextArea, Spinner } from '@posthog/lemon-ui' + import { PageHeader } from 'lib/components/PageHeader' import { LemonField } from 'lib/lemon-ui/LemonField' import { EmailTemplater } from 'scenes/hog-functions/email-templater/EmailTemplater' import { SceneExport } from 'scenes/sceneTypes' -import { messageTemplateLogic, MessageTemplateLogicProps } from './messageTemplateLogic' +import { MessageTemplateLogicProps, messageTemplateLogic } from './messageTemplateLogic' export const scene: SceneExport = { component: MessageTemplate, diff --git a/products/messaging/frontend/TemplateLibrary/MessageTemplatesTable.tsx b/products/messaging/frontend/TemplateLibrary/MessageTemplatesTable.tsx index 8dd056936e..182fa1d3bf 100644 --- a/products/messaging/frontend/TemplateLibrary/MessageTemplatesTable.tsx +++ b/products/messaging/frontend/TemplateLibrary/MessageTemplatesTable.tsx @@ -1,9 +1,10 @@ import { useActions, useMountedLogic, useValues } from 'kea' + import { LemonButton } from 'lib/lemon-ui/LemonButton' import { More } from 'lib/lemon-ui/LemonButton/More' import { LemonTable, LemonTableColumn, LemonTableColumns } from 'lib/lemon-ui/LemonTable' -import { createdAtColumn, createdByColumn } from 'lib/lemon-ui/LemonTable/columnUtils' import { LemonTableLink } from 'lib/lemon-ui/LemonTable/LemonTableLink' +import { createdAtColumn, createdByColumn } from 'lib/lemon-ui/LemonTable/columnUtils' import { urls } from 'scenes/urls' import { MessageTemplate, messageTemplatesLogic } from './messageTemplatesLogic' diff --git a/products/messaging/frontend/TemplateLibrary/messageTemplateLogic.ts b/products/messaging/frontend/TemplateLibrary/messageTemplateLogic.ts index 7c96472e5d..3f41af177a 100644 --- a/products/messaging/frontend/TemplateLibrary/messageTemplateLogic.ts +++ b/products/messaging/frontend/TemplateLibrary/messageTemplateLogic.ts @@ -2,6 +2,7 @@ import { actions, afterMount, kea, key, listeners, path, props, reducers, select import { forms } from 'kea-forms' import { loaders } from 'kea-loaders' import { router } from 'kea-router' + import api from 'lib/api' import { lemonToast } from 'lib/lemon-ui/LemonToast' import { Scene } from 'scenes/sceneTypes' diff --git a/products/messaging/frontend/TemplateLibrary/messageTemplatesLogic.ts b/products/messaging/frontend/TemplateLibrary/messageTemplatesLogic.ts index 5e0ad10076..9065b1f36d 100644 --- a/products/messaging/frontend/TemplateLibrary/messageTemplatesLogic.ts +++ b/products/messaging/frontend/TemplateLibrary/messageTemplatesLogic.ts @@ -1,5 +1,6 @@ import { afterMount, kea, path } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { lemonToast } from 'lib/lemon-ui/LemonToast' import { deleteWithUndo } from 'lib/utils/deleteWithUndo' diff --git a/products/messaging/manifest.tsx b/products/messaging/manifest.tsx index a3743e59bd..bf805f68c7 100644 --- a/products/messaging/manifest.tsx +++ b/products/messaging/manifest.tsx @@ -1,4 +1,5 @@ import { IconCursor } from '@posthog/icons' + import { FEATURE_FLAGS, PRODUCT_VISUAL_ORDER } from 'lib/constants' import { urls } from 'scenes/urls' diff --git a/products/notebooks/manifest.tsx b/products/notebooks/manifest.tsx index b6e24c88ab..70238cc986 100644 --- a/products/notebooks/manifest.tsx +++ b/products/notebooks/manifest.tsx @@ -1,4 +1,5 @@ import { IconNotebook } from '@posthog/icons' + import { urls } from 'scenes/urls' import { ProductManifest } from '../../frontend/src/types' diff --git a/products/product_analytics/manifest.tsx b/products/product_analytics/manifest.tsx index 181f7a86a3..d34d733793 100644 --- a/products/product_analytics/manifest.tsx +++ b/products/product_analytics/manifest.tsx @@ -1,5 +1,7 @@ -import { IconGraph } from '@posthog/icons' import { combineUrl } from 'kea-router' + +import { IconGraph } from '@posthog/icons' + import { AlertType } from 'lib/components/Alerts/types' import { FEATURE_FLAGS, INSIGHT_VISUAL_ORDER } from 'lib/constants' import { urls } from 'scenes/urls' diff --git a/products/replay/manifest.tsx b/products/replay/manifest.tsx index 586165a949..bea280223b 100644 --- a/products/replay/manifest.tsx +++ b/products/replay/manifest.tsx @@ -1,5 +1,7 @@ -import { IconRewindPlay } from '@posthog/icons' import { combineUrl } from 'kea-router' + +import { IconRewindPlay } from '@posthog/icons' + import { urls } from 'scenes/urls' import { ProductManifest, RecordingUniversalFilters, ReplayTabs } from '../../frontend/src/types' diff --git a/products/revenue_analytics/frontend/RevenueAnalyticsFilters.tsx b/products/revenue_analytics/frontend/RevenueAnalyticsFilters.tsx index 1429fc42a5..57dcdfe83f 100644 --- a/products/revenue_analytics/frontend/RevenueAnalyticsFilters.tsx +++ b/products/revenue_analytics/frontend/RevenueAnalyticsFilters.tsx @@ -1,5 +1,7 @@ -import { LemonInputSelect, LemonInputSelectOption, Tooltip } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonInputSelect, LemonInputSelectOption, Tooltip } from '@posthog/lemon-ui' + import { DateFilter } from 'lib/components/DateFilter/DateFilter' import { CUSTOM_OPTION_KEY } from 'lib/components/DateFilter/types' import { PropertyFilters } from 'lib/components/PropertyFilters/PropertyFilters' diff --git a/products/revenue_analytics/frontend/RevenueAnalyticsScene.stories.tsx b/products/revenue_analytics/frontend/RevenueAnalyticsScene.stories.tsx index 9ff92ca572..0e9d33ffc4 100644 --- a/products/revenue_analytics/frontend/RevenueAnalyticsScene.stories.tsx +++ b/products/revenue_analytics/frontend/RevenueAnalyticsScene.stories.tsx @@ -1,7 +1,8 @@ import { Meta, StoryObj } from '@storybook/react' import { useActions } from 'kea' -import { FEATURE_FLAGS } from 'lib/constants' import { useEffect } from 'react' + +import { FEATURE_FLAGS } from 'lib/constants' import { App } from 'scenes/App' import { urls } from 'scenes/urls' @@ -12,11 +13,10 @@ import { RevenueAnalyticsGroupBy } from '~/queries/schema/schema-general' import { PropertyFilterType, PropertyOperator, RevenueAnalyticsPropertyFilter } from '~/types' import databaseSchemaMock from './__mocks__/DatabaseSchemaQuery.json' - import revenueAnalyticsGrowthRateMock from './__mocks__/RevenueAnalyticsGrowthRateQuery.json' import revenueAnalyticsMetricsQueryMock from './__mocks__/RevenueAnalyticsMetricsQuery.json' -import revenueAnalyticsRevenueQueryMock from './__mocks__/RevenueAnalyticsRevenueQuery.json' import revenueAnalyticsOverviewMock from './__mocks__/RevenueAnalyticsOverviewQuery.json' +import revenueAnalyticsRevenueQueryMock from './__mocks__/RevenueAnalyticsRevenueQuery.json' import revenueAnalyticsTopCustomersMock from './__mocks__/RevenueAnalyticsTopCustomersQuery.json' import { revenueAnalyticsLogic } from './revenueAnalyticsLogic' diff --git a/products/revenue_analytics/frontend/RevenueAnalyticsScene.tsx b/products/revenue_analytics/frontend/RevenueAnalyticsScene.tsx index 7434bd5875..0f5fe01b47 100644 --- a/products/revenue_analytics/frontend/RevenueAnalyticsScene.tsx +++ b/products/revenue_analytics/frontend/RevenueAnalyticsScene.tsx @@ -1,7 +1,9 @@ -import { IconDatabase, IconPieChart, IconPlus } from '@posthog/icons' -import { LemonBanner, LemonButton, Link, SpinnerOverlay } from '@posthog/lemon-ui' import { BindLogic, useActions, useValues } from 'kea' import { router } from 'kea-router' + +import { IconDatabase, IconPieChart, IconPlus } from '@posthog/icons' +import { LemonBanner, LemonButton, Link, SpinnerOverlay } from '@posthog/lemon-ui' + import { ProductIntroduction } from 'lib/components/ProductIntroduction/ProductIntroduction' import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' diff --git a/products/revenue_analytics/frontend/nodes/RevenueAnalyticsGrowthRateNode.tsx b/products/revenue_analytics/frontend/nodes/RevenueAnalyticsGrowthRateNode.tsx index 9bc05f24af..d7721824f0 100644 --- a/products/revenue_analytics/frontend/nodes/RevenueAnalyticsGrowthRateNode.tsx +++ b/products/revenue_analytics/frontend/nodes/RevenueAnalyticsGrowthRateNode.tsx @@ -1,8 +1,9 @@ import { BindLogic, useValues } from 'kea' import { useState } from 'react' + import { InsightLoadingState } from 'scenes/insights/EmptyStates' -import { insightLogic } from 'scenes/insights/insightLogic' import { InsightsWrapper } from 'scenes/insights/InsightsWrapper' +import { insightLogic } from 'scenes/insights/insightLogic' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' import { LineGraph } from 'scenes/insights/views/LineGraph/LineGraph' @@ -14,6 +15,7 @@ import { } from '~/queries/schema/schema-general' import { QueryContext } from '~/queries/types' import { GraphDataset, GraphType } from '~/types' + import { revenueAnalyticsLogic } from '../revenueAnalyticsLogic' let uniqueNode = 0 diff --git a/products/revenue_analytics/frontend/nodes/RevenueAnalyticsMetricsNode.tsx b/products/revenue_analytics/frontend/nodes/RevenueAnalyticsMetricsNode.tsx index 992d9c3150..544f5c5db8 100644 --- a/products/revenue_analytics/frontend/nodes/RevenueAnalyticsMetricsNode.tsx +++ b/products/revenue_analytics/frontend/nodes/RevenueAnalyticsMetricsNode.tsx @@ -1,5 +1,9 @@ import { BindLogic, useActions, useValues } from 'kea' import { useState } from 'react' + +import { LemonSegmentedButton } from '@posthog/lemon-ui' + +import { getCurrencySymbol } from 'lib/utils/geography/currency' import { InsightLoadingState } from 'scenes/insights/EmptyStates' import { insightLogic } from 'scenes/insights/insightLogic' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' @@ -14,16 +18,14 @@ import { QueryContext } from '~/queries/types' import { GraphDataset } from '~/types' import { revenueAnalyticsLogic } from '../revenueAnalyticsLogic' -import { LemonSegmentedButton } from '@posthog/lemon-ui' import { AlphaTag, DISPLAY_MODE_OPTIONS, - extractLabelAndDatasets, RevenueAnalyticsLineGraph, TileProps, TileWrapper, + extractLabelAndDatasets, } from './shared' -import { getCurrencySymbol } from 'lib/utils/geography/currency' let uniqueNode = 0 export function RevenueAnalyticsMetricsNode(props: { diff --git a/products/revenue_analytics/frontend/nodes/RevenueAnalyticsOverviewNode.tsx b/products/revenue_analytics/frontend/nodes/RevenueAnalyticsOverviewNode.tsx index 199bc0dcc7..20502a3f58 100644 --- a/products/revenue_analytics/frontend/nodes/RevenueAnalyticsOverviewNode.tsx +++ b/products/revenue_analytics/frontend/nodes/RevenueAnalyticsOverviewNode.tsx @@ -1,9 +1,11 @@ -import { LemonSkeleton } from '@posthog/lemon-ui' import { useValues } from 'kea' +import { useState } from 'react' + +import { LemonSkeleton } from '@posthog/lemon-ui' + import { humanFriendlyNumber, range } from 'lib/utils' import { cn } from 'lib/utils/css-classes' import { getCurrencySymbol } from 'lib/utils/geography/currency' -import { useState } from 'react' import { teamLogic } from 'scenes/teamLogic' import { dataNodeLogic } from '~/queries/nodes/DataNode/dataNodeLogic' diff --git a/products/revenue_analytics/frontend/nodes/RevenueAnalyticsRevenueNode.tsx b/products/revenue_analytics/frontend/nodes/RevenueAnalyticsRevenueNode.tsx index def656ccdd..c307508377 100644 --- a/products/revenue_analytics/frontend/nodes/RevenueAnalyticsRevenueNode.tsx +++ b/products/revenue_analytics/frontend/nodes/RevenueAnalyticsRevenueNode.tsx @@ -1,7 +1,11 @@ import { BindLogic, useActions, useValues } from 'kea' -import { dayjs } from 'lib/dayjs' -import { getCurrencySymbol } from 'lib/utils/geography/currency' import { useState } from 'react' + +import { LemonButton, LemonSegmentedButton } from '@posthog/lemon-ui' + +import { dayjs } from 'lib/dayjs' +import { IconSwapHoriz } from 'lib/lemon-ui/icons' +import { getCurrencySymbol } from 'lib/utils/geography/currency' import { InsightLoadingState } from 'scenes/insights/EmptyStates' import { insightLogic } from 'scenes/insights/insightLogic' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' @@ -16,15 +20,13 @@ import { QueryContext } from '~/queries/types' import { GraphDataset } from '~/types' import { revenueAnalyticsLogic } from '../revenueAnalyticsLogic' -import { LemonButton, LemonSegmentedButton } from '@posthog/lemon-ui' -import { IconSwapHoriz } from 'lib/lemon-ui/icons' import { AlphaTag, DISPLAY_MODE_OPTIONS, - extractLabelAndDatasets, RevenueAnalyticsLineGraph, TileProps, TileWrapper, + extractLabelAndDatasets, } from './shared' let uniqueNode = 0 diff --git a/products/revenue_analytics/frontend/nodes/RevenueAnalyticsTopCustomersNode.tsx b/products/revenue_analytics/frontend/nodes/RevenueAnalyticsTopCustomersNode.tsx index 2ff8628a63..1edda5c012 100644 --- a/products/revenue_analytics/frontend/nodes/RevenueAnalyticsTopCustomersNode.tsx +++ b/products/revenue_analytics/frontend/nodes/RevenueAnalyticsTopCustomersNode.tsx @@ -1,9 +1,10 @@ import { BindLogic, useValues } from 'kea' -import { getCurrencySymbol } from 'lib/utils/geography/currency' import { useState } from 'react' + +import { getCurrencySymbol } from 'lib/utils/geography/currency' import { InsightLoadingState } from 'scenes/insights/EmptyStates' -import { insightLogic } from 'scenes/insights/insightLogic' import { InsightsWrapper } from 'scenes/insights/InsightsWrapper' +import { insightLogic } from 'scenes/insights/insightLogic' import { insightVizDataLogic } from 'scenes/insights/insightVizDataLogic' import { LineGraph } from 'scenes/insights/views/LineGraph/LineGraph' import { teamLogic } from 'scenes/teamLogic' @@ -16,6 +17,7 @@ import { } from '~/queries/schema/schema-general' import { QueryContext } from '~/queries/types' import { GraphDataset, GraphType } from '~/types' + import { revenueAnalyticsLogic } from '../revenueAnalyticsLogic' let uniqueNode = 0 diff --git a/products/revenue_analytics/frontend/nodes/shared.tsx b/products/revenue_analytics/frontend/nodes/shared.tsx index 5cc2c5c32c..1fbc4cb42b 100644 --- a/products/revenue_analytics/frontend/nodes/shared.tsx +++ b/products/revenue_analytics/frontend/nodes/shared.tsx @@ -1,16 +1,18 @@ -import { LemonSegmentedButtonOption, LemonTag, Tooltip } from '@posthog/lemon-ui' +import { useValues } from 'kea' import { IconGraph, IconInfo, IconLineGraph } from '@posthog/icons' +import { LemonSegmentedButtonOption, LemonTag, Tooltip } from '@posthog/lemon-ui' -import { InsightsWrapper } from 'scenes/insights/InsightsWrapper' -import { QueryContext } from '~/queries/types' -import { AnalyticsQueryResponseBase } from '~/queries/schema/schema-general' import { IconAreaChart } from 'lib/lemon-ui/icons' -import { DisplayMode, revenueAnalyticsLogic } from '../revenueAnalyticsLogic' +import { InsightsWrapper } from 'scenes/insights/InsightsWrapper' import { LineGraph, LineGraphProps } from 'scenes/insights/views/LineGraph/LineGraph' -import { useValues } from 'kea' + +import { AnalyticsQueryResponseBase } from '~/queries/schema/schema-general' +import { QueryContext } from '~/queries/types' import { GraphDataset, GraphType } from '~/types' +import { DisplayMode, revenueAnalyticsLogic } from '../revenueAnalyticsLogic' + // Simple mapping for the display mode options and their icons export const DISPLAY_MODE_OPTIONS: LemonSegmentedButtonOption[] = [ { value: 'line', icon: }, diff --git a/products/revenue_analytics/frontend/revenueAnalyticsLogic.ts b/products/revenue_analytics/frontend/revenueAnalyticsLogic.ts index ba7d2adffd..af4a9c767e 100644 --- a/products/revenue_analytics/frontend/revenueAnalyticsLogic.ts +++ b/products/revenue_analytics/frontend/revenueAnalyticsLogic.ts @@ -1,10 +1,12 @@ import { actions, connect, kea, path, reducers, selectors } from 'kea' import { actionToUrl, router, urlToAction } from 'kea-router' + import { getDefaultInterval, objectsEqual } from 'lib/utils' import { dataWarehouseSettingsLogic } from 'scenes/data-warehouse/settings/dataWarehouseSettingsLogic' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' +import { isRevenueAnalyticsPropertyFilters } from '~/queries/schema-guards' import { DataTableNode, NodeKind, @@ -13,7 +15,6 @@ import { RevenueAnalyticsPropertyFilters, RevenueAnalyticsTopCustomersGroupBy, } from '~/queries/schema/schema-general' -import { isRevenueAnalyticsPropertyFilters } from '~/queries/schema-guards' import { Breadcrumb, InsightLogicProps } from '~/types' import type { revenueAnalyticsLogicType } from './revenueAnalyticsLogicType' diff --git a/products/revenue_analytics/frontend/settings/EventConfiguration.tsx b/products/revenue_analytics/frontend/settings/EventConfiguration.tsx index 245f6a6c99..12343ca51a 100644 --- a/products/revenue_analytics/frontend/settings/EventConfiguration.tsx +++ b/products/revenue_analytics/frontend/settings/EventConfiguration.tsx @@ -1,6 +1,8 @@ +import { useActions, useValues } from 'kea' + import { IconInfo, IconTrash } from '@posthog/icons' import { LemonInput, LemonSelect, LemonSwitch, Tooltip } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { CurrencyDropdown } from 'lib/components/BaseCurrency/CurrencyDropdown' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { TaxonomicPopover } from 'lib/components/TaxonomicPopover/TaxonomicPopover' diff --git a/products/revenue_analytics/frontend/settings/ExternalDataSourceConfiguration.tsx b/products/revenue_analytics/frontend/settings/ExternalDataSourceConfiguration.tsx index 1e705f22b6..64581db4db 100644 --- a/products/revenue_analytics/frontend/settings/ExternalDataSourceConfiguration.tsx +++ b/products/revenue_analytics/frontend/settings/ExternalDataSourceConfiguration.tsx @@ -1,14 +1,18 @@ -import { LemonButton, LemonSwitch, Link, Tooltip } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { router } from 'kea-router' -import { LemonTable } from 'lib/lemon-ui/LemonTable' -import { DataWarehouseSourceIcon } from 'scenes/data-warehouse/settings/DataWarehouseSourceIcon' -import { urls } from 'scenes/urls' -import { ExternalDataSource, PipelineNodeTab, PipelineStage } from '~/types' -import { revenueAnalyticsSettingsLogic } from './revenueAnalyticsSettingsLogic' + import { IconInfo, IconPlus } from '@posthog/icons' +import { LemonButton, LemonSwitch, Link, Tooltip } from '@posthog/lemon-ui' + +import { LemonTable } from 'lib/lemon-ui/LemonTable' import { ViewLinkModal } from 'scenes/data-warehouse/ViewLinkModal' +import { DataWarehouseSourceIcon } from 'scenes/data-warehouse/settings/DataWarehouseSourceIcon' import { viewLinkLogic } from 'scenes/data-warehouse/viewLinkLogic' +import { urls } from 'scenes/urls' + +import { ExternalDataSource, PipelineNodeTab, PipelineStage } from '~/types' + +import { revenueAnalyticsSettingsLogic } from './revenueAnalyticsSettingsLogic' const VALID_REVENUE_SOURCES: ExternalDataSource['source_type'][] = ['Stripe'] diff --git a/products/revenue_analytics/frontend/settings/FilterTestAccountsConfiguration.tsx b/products/revenue_analytics/frontend/settings/FilterTestAccountsConfiguration.tsx index 2b1d6b3420..b8d78dbcc5 100644 --- a/products/revenue_analytics/frontend/settings/FilterTestAccountsConfiguration.tsx +++ b/products/revenue_analytics/frontend/settings/FilterTestAccountsConfiguration.tsx @@ -1,5 +1,7 @@ -import { LemonSwitch, Link } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' + +import { LemonSwitch, Link } from '@posthog/lemon-ui' + import { urls } from 'scenes/urls' import { revenueAnalyticsSettingsLogic } from './revenueAnalyticsSettingsLogic' diff --git a/products/revenue_analytics/frontend/settings/GoalsConfiguration.tsx b/products/revenue_analytics/frontend/settings/GoalsConfiguration.tsx index 84c8912ade..cde1b05acf 100644 --- a/products/revenue_analytics/frontend/settings/GoalsConfiguration.tsx +++ b/products/revenue_analytics/frontend/settings/GoalsConfiguration.tsx @@ -1,6 +1,9 @@ +import { useActions, useValues } from 'kea' +import { useState } from 'react' + import { IconPlus, IconTrash } from '@posthog/icons' import { LemonTag } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { dayjs } from 'lib/dayjs' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonCalendarSelectInput } from 'lib/lemon-ui/LemonCalendar/LemonCalendarSelect' @@ -8,7 +11,6 @@ import { LemonInput } from 'lib/lemon-ui/LemonInput' import { LemonTable, LemonTableColumns } from 'lib/lemon-ui/LemonTable' import { humanFriendlyNumber, inStorybook, inStorybookTestRunner } from 'lib/utils' import { getCurrencySymbol } from 'lib/utils/geography/currency' -import { useState } from 'react' import { teamLogic } from 'scenes/teamLogic' import { CurrencyCode, RevenueAnalyticsGoal } from '~/queries/schema/schema-general' diff --git a/products/revenue_analytics/frontend/settings/RevenueAnalyticsSettings.stories.tsx b/products/revenue_analytics/frontend/settings/RevenueAnalyticsSettings.stories.tsx index cdcde79b5b..8925400bb9 100644 --- a/products/revenue_analytics/frontend/settings/RevenueAnalyticsSettings.stories.tsx +++ b/products/revenue_analytics/frontend/settings/RevenueAnalyticsSettings.stories.tsx @@ -1,12 +1,15 @@ import { Meta, StoryObj } from '@storybook/react' + import { FEATURE_FLAGS } from 'lib/constants' import { App } from 'scenes/App' import { urls } from 'scenes/urls' + import { mswDecorator } from '~/mocks/browser' -import DatabaseSchemaQuery from '../__mocks__/DatabaseSchemaQuery.json' import externalDataSourceResponseMock from '~/mocks/fixtures/api/projects/team_id/external_data_sources/externalDataSource.json' import { EMPTY_PAGINATED_RESPONSE } from '~/mocks/handlers' +import DatabaseSchemaQuery from '../__mocks__/DatabaseSchemaQuery.json' + const meta: Meta = { component: App, title: 'Scenes-App/Data Management', diff --git a/products/revenue_analytics/frontend/settings/RevenueAnalyticsSettings.tsx b/products/revenue_analytics/frontend/settings/RevenueAnalyticsSettings.tsx index 734f89f116..3dd714bd46 100644 --- a/products/revenue_analytics/frontend/settings/RevenueAnalyticsSettings.tsx +++ b/products/revenue_analytics/frontend/settings/RevenueAnalyticsSettings.tsx @@ -1,21 +1,23 @@ +import { useValues } from 'kea' +import { useRef, useState } from 'react' + import { IconPlus } from '@posthog/icons' import { LemonTabs, Link } from '@posthog/lemon-ui' -import { useValues } from 'kea' + import { BaseCurrency } from 'lib/components/BaseCurrency/BaseCurrency' import { ProductIntroduction } from 'lib/components/ProductIntroduction/ProductIntroduction' import { FEATURE_FLAGS } from 'lib/constants' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' -import { useRef, useState } from 'react' import { dataWarehouseSettingsLogic } from 'scenes/data-warehouse/settings/dataWarehouseSettingsLogic' import { EventConfiguration } from './EventConfiguration' import { ExternalDataSourceConfiguration } from './ExternalDataSourceConfiguration' import { FilterTestAccountsConfiguration } from './FilterTestAccountsConfiguration' import { GoalsConfiguration } from './GoalsConfiguration' -import { revenueAnalyticsSettingsLogic } from './revenueAnalyticsSettingsLogic' import { RevenueExampleDataWarehouseTablesData } from './RevenueExampleDataWarehouseTablesData' import { RevenueExampleEventsTable } from './RevenueExampleEventsTable' +import { revenueAnalyticsSettingsLogic } from './revenueAnalyticsSettingsLogic' type Tab = 'events' | 'data-warehouse' diff --git a/products/revenue_analytics/frontend/settings/RevenueExampleDataWarehouseTablesData.tsx b/products/revenue_analytics/frontend/settings/RevenueExampleDataWarehouseTablesData.tsx index 10bdc37b25..94b852ba44 100644 --- a/products/revenue_analytics/frontend/settings/RevenueExampleDataWarehouseTablesData.tsx +++ b/products/revenue_analytics/frontend/settings/RevenueExampleDataWarehouseTablesData.tsx @@ -4,8 +4,8 @@ import { Query } from '~/queries/Query/Query' import { CurrencyCode } from '~/queries/schema/schema-general' import { QueryContext } from '~/queries/types' -import { revenueAnalyticsSettingsLogic } from './revenueAnalyticsSettingsLogic' import { Currency, Revenue } from './RevenueExampleTableColumns' +import { revenueAnalyticsSettingsLogic } from './revenueAnalyticsSettingsLogic' const queryContext: QueryContext = { showOpenEditorButton: true, diff --git a/products/revenue_analytics/frontend/settings/RevenueExampleEventsTable.tsx b/products/revenue_analytics/frontend/settings/RevenueExampleEventsTable.tsx index 0fd1f79330..4490e25af2 100644 --- a/products/revenue_analytics/frontend/settings/RevenueExampleEventsTable.tsx +++ b/products/revenue_analytics/frontend/settings/RevenueExampleEventsTable.tsx @@ -4,8 +4,8 @@ import { Query } from '~/queries/Query/Query' import { CurrencyCode } from '~/queries/schema/schema-general' import { QueryContext } from '~/queries/types' -import { revenueAnalyticsSettingsLogic } from './revenueAnalyticsSettingsLogic' import { Currency, Revenue } from './RevenueExampleTableColumns' +import { revenueAnalyticsSettingsLogic } from './revenueAnalyticsSettingsLogic' const queryContext: QueryContext = { showOpenEditorButton: true, diff --git a/products/revenue_analytics/frontend/settings/revenueAnalyticsSettingsLogic.ts b/products/revenue_analytics/frontend/settings/revenueAnalyticsSettingsLogic.ts index 93fe8c2831..7f71310b7f 100644 --- a/products/revenue_analytics/frontend/settings/revenueAnalyticsSettingsLogic.ts +++ b/products/revenue_analytics/frontend/settings/revenueAnalyticsSettingsLogic.ts @@ -1,8 +1,10 @@ import { actions, afterMount, connect, kea, listeners, path, reducers, selectors } from 'kea' import { loaders } from 'kea-loaders' import { beforeUnload } from 'kea-router' + import { dayjs } from 'lib/dayjs' import { objectsEqual } from 'lib/utils' +import { databaseTableListLogic } from 'scenes/data-management/database/databaseTableListLogic' import { dataWarehouseSettingsLogic } from 'scenes/data-warehouse/settings/dataWarehouseSettingsLogic' import { teamLogic } from 'scenes/teamLogic' @@ -19,7 +21,6 @@ import { import { ExternalDataSource } from '~/types' import type { revenueAnalyticsSettingsLogicType } from './revenueAnalyticsSettingsLogicType' -import { databaseTableListLogic } from 'scenes/data-management/database/databaseTableListLogic' const createEmptyConfig = (): RevenueAnalyticsConfig => ({ events: [], diff --git a/products/revenue_analytics/frontend/tiles/MetricsTile.tsx b/products/revenue_analytics/frontend/tiles/MetricsTile.tsx index 46d34cf070..5286feab8b 100644 --- a/products/revenue_analytics/frontend/tiles/MetricsTile.tsx +++ b/products/revenue_analytics/frontend/tiles/MetricsTile.tsx @@ -6,10 +6,10 @@ import { InsightVizNode } from '~/queries/schema/schema-general' import { InsightLogicProps } from '~/types' import { - buildDashboardItemId, REVENUE_ANALYTICS_DATA_COLLECTION_NODE_ID, - revenueAnalyticsLogic, RevenueAnalyticsQuery, + buildDashboardItemId, + revenueAnalyticsLogic, } from '../revenueAnalyticsLogic' const QUERY_ID = RevenueAnalyticsQuery.METRICS diff --git a/products/revenue_analytics/frontend/tiles/OverviewTile.tsx b/products/revenue_analytics/frontend/tiles/OverviewTile.tsx index c5959d6ce7..e4ddb8f6ea 100644 --- a/products/revenue_analytics/frontend/tiles/OverviewTile.tsx +++ b/products/revenue_analytics/frontend/tiles/OverviewTile.tsx @@ -6,10 +6,10 @@ import { InsightVizNode } from '~/queries/schema/schema-general' import { InsightLogicProps } from '~/types' import { - buildDashboardItemId, REVENUE_ANALYTICS_DATA_COLLECTION_NODE_ID, - revenueAnalyticsLogic, RevenueAnalyticsQuery, + buildDashboardItemId, + revenueAnalyticsLogic, } from '../revenueAnalyticsLogic' const QUERY_ID = RevenueAnalyticsQuery.OVERVIEW diff --git a/products/revenue_analytics/frontend/tiles/RevenueGrowthRateTile.tsx b/products/revenue_analytics/frontend/tiles/RevenueGrowthRateTile.tsx index 6c6457632c..488e092d6d 100644 --- a/products/revenue_analytics/frontend/tiles/RevenueGrowthRateTile.tsx +++ b/products/revenue_analytics/frontend/tiles/RevenueGrowthRateTile.tsx @@ -1,12 +1,14 @@ +import { useActions, useValues } from 'kea' +import { useMemo } from 'react' + import { IconInfo, IconLineGraph } from '@posthog/icons' import { LemonSegmentedButton } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' -import { IconTableChart } from 'lib/lemon-ui/icons' + import { Tooltip } from 'lib/lemon-ui/Tooltip' +import { IconTableChart } from 'lib/lemon-ui/icons' import { humanFriendlyNumber } from 'lib/utils' import { cn } from 'lib/utils/css-classes' import { getCurrencySymbol } from 'lib/utils/geography/currency' -import { useMemo } from 'react' import { teamLogic } from 'scenes/teamLogic' import { Query } from '~/queries/Query/Query' @@ -15,10 +17,10 @@ import { QueryContext } from '~/queries/types' import { InsightLogicProps } from '~/types' import { - buildDashboardItemId, REVENUE_ANALYTICS_DATA_COLLECTION_NODE_ID, - revenueAnalyticsLogic, RevenueAnalyticsQuery, + buildDashboardItemId, + revenueAnalyticsLogic, } from '../revenueAnalyticsLogic' const QUERY_ID = RevenueAnalyticsQuery.GROWTH_RATE diff --git a/products/revenue_analytics/frontend/tiles/RevenueTile.tsx b/products/revenue_analytics/frontend/tiles/RevenueTile.tsx index 61dc84d669..18f52f9be5 100644 --- a/products/revenue_analytics/frontend/tiles/RevenueTile.tsx +++ b/products/revenue_analytics/frontend/tiles/RevenueTile.tsx @@ -6,10 +6,10 @@ import { InsightVizNode } from '~/queries/schema/schema-general' import { InsightLogicProps } from '~/types' import { - buildDashboardItemId, REVENUE_ANALYTICS_DATA_COLLECTION_NODE_ID, - revenueAnalyticsLogic, RevenueAnalyticsQuery, + buildDashboardItemId, + revenueAnalyticsLogic, } from '../revenueAnalyticsLogic' const QUERY_ID = RevenueAnalyticsQuery.REVENUE diff --git a/products/revenue_analytics/frontend/tiles/TopCustomersTile.tsx b/products/revenue_analytics/frontend/tiles/TopCustomersTile.tsx index db73a90d40..c28616057c 100644 --- a/products/revenue_analytics/frontend/tiles/TopCustomersTile.tsx +++ b/products/revenue_analytics/frontend/tiles/TopCustomersTile.tsx @@ -1,10 +1,12 @@ +import { useActions, useValues } from 'kea' +import { useMemo } from 'react' + import { IconInfo, IconLineGraph } from '@posthog/icons' import { LemonSegmentedButton, Tooltip } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' + import { IconTableChart } from 'lib/lemon-ui/icons' import { humanFriendlyNumber } from 'lib/utils' import { getCurrencySymbol } from 'lib/utils/geography/currency' -import { useMemo } from 'react' import { teamLogic } from 'scenes/teamLogic' import { Query } from '~/queries/Query/Query' @@ -13,10 +15,10 @@ import { QueryContext } from '~/queries/types' import { InsightLogicProps } from '~/types' import { - buildDashboardItemId, REVENUE_ANALYTICS_DATA_COLLECTION_NODE_ID, - revenueAnalyticsLogic, RevenueAnalyticsQuery, + buildDashboardItemId, + revenueAnalyticsLogic, } from '../revenueAnalyticsLogic' const QUERY_ID = RevenueAnalyticsQuery.TOP_CUSTOMERS diff --git a/products/surveys/manifest.tsx b/products/surveys/manifest.tsx index a7ab7159cb..9a4d9ba51d 100644 --- a/products/surveys/manifest.tsx +++ b/products/surveys/manifest.tsx @@ -1,4 +1,5 @@ import { IconMessage } from '@posthog/icons' + import { SurveysTabs } from 'scenes/surveys/surveysLogic' import { urls } from 'scenes/urls' diff --git a/products/user_interviews/frontend/UserInterview.tsx b/products/user_interviews/frontend/UserInterview.tsx index 812fd7950b..f1f99acdfe 100644 --- a/products/user_interviews/frontend/UserInterview.tsx +++ b/products/user_interviews/frontend/UserInterview.tsx @@ -1,13 +1,15 @@ +import { useAsyncActions, useValues } from 'kea' +import posthog from 'posthog-js' +import { useState } from 'react' + import { IconCheck, IconPencil, IconX } from '@posthog/icons' import { LemonButton, LemonSkeleton, LemonTag, LemonTextAreaMarkdown } from '@posthog/lemon-ui' -import { useAsyncActions, useValues } from 'kea' + import { NotFound } from 'lib/components/NotFound' import { PageHeader } from 'lib/components/PageHeader' import { dayjs } from 'lib/dayjs' import { LemonMarkdown } from 'lib/lemon-ui/LemonMarkdown' import { LemonWidget } from 'lib/lemon-ui/LemonWidget/LemonWidget' -import posthog from 'posthog-js' -import { useState } from 'react' import { PersonDisplay } from 'scenes/persons/PersonDisplay' import { SceneExport } from 'scenes/sceneTypes' diff --git a/products/user_interviews/frontend/UserInterviews.tsx b/products/user_interviews/frontend/UserInterviews.tsx index f8ac9d5f7f..dd2f3b6aaa 100644 --- a/products/user_interviews/frontend/UserInterviews.tsx +++ b/products/user_interviews/frontend/UserInterviews.tsx @@ -1,10 +1,12 @@ +import { useActions, useValues } from 'kea' + import { IconDownload } from '@posthog/icons' import { LemonButton, LemonTable, LemonTableColumn } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' -import { PhonePairHogs } from 'lib/components/hedgehogs' + import { ProductIntroduction } from 'lib/components/ProductIntroduction/ProductIntroduction' -import { createdAtColumn, createdByColumn } from 'lib/lemon-ui/LemonTable/columnUtils' +import { PhonePairHogs } from 'lib/components/hedgehogs' import { LemonTableLink } from 'lib/lemon-ui/LemonTable/LemonTableLink' +import { createdAtColumn, createdByColumn } from 'lib/lemon-ui/LemonTable/columnUtils' import { MaxTool } from 'scenes/max/MaxTool' import { SceneExport } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' diff --git a/products/user_interviews/frontend/userInterviewLogic.ts b/products/user_interviews/frontend/userInterviewLogic.ts index 2b0e8a880c..14979dfd31 100644 --- a/products/user_interviews/frontend/userInterviewLogic.ts +++ b/products/user_interviews/frontend/userInterviewLogic.ts @@ -1,5 +1,6 @@ import { afterMount, kea, key, path, props, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { urls } from 'scenes/urls' diff --git a/products/user_interviews/frontend/userInterviewsLogic.ts b/products/user_interviews/frontend/userInterviewsLogic.ts index c698f52a38..a12985febf 100644 --- a/products/user_interviews/frontend/userInterviewsLogic.ts +++ b/products/user_interviews/frontend/userInterviewsLogic.ts @@ -1,5 +1,6 @@ import { afterMount, kea, path, selectors } from 'kea' import { loaders } from 'kea-loaders' + import api from 'lib/api' import { urls } from 'scenes/urls' diff --git a/products/user_interviews/manifest.tsx b/products/user_interviews/manifest.tsx index 87977dbf0e..58f8b67e76 100644 --- a/products/user_interviews/manifest.tsx +++ b/products/user_interviews/manifest.tsx @@ -1,4 +1,5 @@ import { IconChat } from '@posthog/icons' + import { FEATURE_FLAGS } from 'lib/constants' import { urls } from 'scenes/urls'