diff --git a/frontend/src/lib/constants.tsx b/frontend/src/lib/constants.tsx index 4f5dab68b9942..a06134986b9b1 100644 --- a/frontend/src/lib/constants.tsx +++ b/frontend/src/lib/constants.tsx @@ -198,19 +198,14 @@ export const FEATURE_FLAGS = { SETTINGS_BOUNCE_RATE_PAGE_VIEW_MODE: 'settings-bounce-rate-page-view-mode', // owner: @robbie-c ONBOARDING_DASHBOARD_TEMPLATES: 'onboarding-dashboard-templates', // owner: @raquelmsmith MULTIPLE_BREAKDOWNS: 'multiple-breakdowns', // owner: @skoob13 #team-product-analytics - WEB_ANALYTICS_LIVE_USER_COUNT: 'web-analytics-live-user-count', // owner: @robbie-c SETTINGS_SESSION_TABLE_VERSION: 'settings-session-table-version', // owner: @robbie-c INSIGHT_FUNNELS_USE_UDF: 'insight-funnels-use-udf', // owner: @aspicer #team-product-analytics INSIGHT_FUNNELS_USE_UDF_TRENDS: 'insight-funnels-use-udf-trends', // owner: @aspicer #team-product-analytics FIRST_TIME_FOR_USER_MATH: 'first-time-for-user-math', // owner: @skoob13 #team-product-analytics MULTITAB_EDITOR: 'multitab-editor', // owner: @EDsCODE #team-data-warehouse - WEB_ANALYTICS_REPLAY: 'web-analytics-replay', // owner: @robbie-c BATCH_EXPORTS_POSTHOG_HTTP: 'posthog-http-batch-exports', EXPERIMENT_MAKE_DECISION: 'experiment-make-decision', // owner: @jurajmajerik #team-feature-success DATA_MODELING: 'data-modeling', // owner: @EDsCODE #team-data-warehouse - WEB_ANALYTICS_CONVERSION_GOALS: 'web-analytics-conversion-goals', // owner: @robbie-c - WEB_ANALYTICS_LAST_CLICK: 'web-analytics-last-click', // owner: @robbie-c - WEB_ANALYTICS_LCP_SCORE: 'web-analytics-lcp-score', // owner: @robbie-c HEDGEHOG_SKIN_SPIDERHOG: 'hedgehog-skin-spiderhog', // owner: @benjackwhite INSIGHT_VARIABLES: 'insight_variables', // owner: @Gilbert09 #team-data-warehouse WEB_EXPERIMENTS: 'web-experiments', // owner: @team-feature-success @@ -225,13 +220,11 @@ export const FEATURE_FLAGS = { BILLING_TRIAL_FLOW: 'billing-trial-flow', // owner: @zach EDIT_DWH_SOURCE_CONFIG: 'edit_dwh_source_config', // owner: @Gilbert09 #team-data-warehouse AI_SURVEY_RESPONSE_SUMMARY: 'ai-survey-response-summary', // owner: @pauldambra - CUSTOM_CHANNEL_TYPE_RULES: 'custom-channel-type-rules', // owner: @robbie-c #team-web-analytics SELF_SERVE_CREDIT_OVERRIDE: 'self-serve-credit-override', // owner: @zach FEATURE_MANAGEMENT_UI: 'feature-management-ui', // owner: @haven #team-feature-flags CUSTOM_CSS_THEMES: 'custom-css-themes', // owner: @daibhin METALYTICS: 'metalytics', // owner: @surbhi EXPERIMENTS_MULTIPLE_METRICS: 'experiments-multiple-metrics', // owner: @jurajmajerik #team-experiments - WEB_ANALYTICS_WARN_CUSTOM_EVENT_NO_SESSION: 'web-analytics-warn-custom-event-no-session', // owner: @robbie-c #team-web-analytics REMOTE_CONFIG: 'remote-config', // owner: @benjackwhite SITE_DESTINATIONS: 'site-destinations', // owner: @mariusandra #team-cdp SITE_APP_FUNCTIONS: 'site-app-functions', // owner: @mariusandra #team-cdp diff --git a/frontend/src/scenes/settings/SettingsMap.tsx b/frontend/src/scenes/settings/SettingsMap.tsx index 67c0c99f827d1..8985441f89067 100644 --- a/frontend/src/scenes/settings/SettingsMap.tsx +++ b/frontend/src/scenes/settings/SettingsMap.tsx @@ -219,7 +219,6 @@ export const SETTINGS_MAP: SettingSection[] = [ component: , }, ], - flag: 'CUSTOM_CHANNEL_TYPE_RULES', }, { diff --git a/frontend/src/scenes/web-analytics/WebAnalyticsHealthCheck.tsx b/frontend/src/scenes/web-analytics/WebAnalyticsHealthCheck.tsx index b5374e075f9bf..51de3e725a13d 100644 --- a/frontend/src/scenes/web-analytics/WebAnalyticsHealthCheck.tsx +++ b/frontend/src/scenes/web-analytics/WebAnalyticsHealthCheck.tsx @@ -1,14 +1,12 @@ import { useValues } from 'kea' -import { useFeatureFlag } from 'lib/hooks/useFeatureFlag' import { LemonBanner } from 'lib/lemon-ui/LemonBanner' import { Link } from 'lib/lemon-ui/Link' import { ConversionGoalWarning, webAnalyticsLogic } from 'scenes/web-analytics/webAnalyticsLogic' export const WebAnalyticsHealthCheck = (): JSX.Element | null => { const { statusCheck, conversionGoalWarning } = useValues(webAnalyticsLogic) - const isFlagConversionGoalWarningsSet = useFeatureFlag('WEB_ANALYTICS_WARN_CUSTOM_EVENT_NO_SESSION') - if (conversionGoalWarning && isFlagConversionGoalWarningsSet) { + if (conversionGoalWarning) { switch (conversionGoalWarning) { case ConversionGoalWarning.CustomEventWithNoSessionId: return ( diff --git a/frontend/src/scenes/web-analytics/WebDashboard.tsx b/frontend/src/scenes/web-analytics/WebDashboard.tsx index ebd6e478d1e42..710577cfcf5f9 100644 --- a/frontend/src/scenes/web-analytics/WebDashboard.tsx +++ b/frontend/src/scenes/web-analytics/WebDashboard.tsx @@ -43,7 +43,6 @@ const Filters = (): JSX.Element => { } = useValues(webAnalyticsLogic) const { setWebAnalyticsFilters, setDates, setCompareFilter } = useActions(webAnalyticsLogic) const { mobileLayout } = useValues(navigationLogic) - const { conversionGoal } = useValues(webAnalyticsLogic) const { featureFlags } = useValues(featureFlagLogic) return ( @@ -63,9 +62,7 @@ const Filters = (): JSX.Element => { setWebAnalyticsFilters={setWebAnalyticsFilters} webAnalyticsFilters={webAnalyticsFilters} /> - {featureFlags[FEATURE_FLAGS.WEB_ANALYTICS_CONVERSION_GOALS] || conversionGoal ? ( - - ) : null} +
diff --git a/frontend/src/scenes/web-analytics/liveWebAnalyticsLogic.tsx b/frontend/src/scenes/web-analytics/liveWebAnalyticsLogic.tsx index ef6b96398e775..66b628974045b 100644 --- a/frontend/src/scenes/web-analytics/liveWebAnalyticsLogic.tsx +++ b/frontend/src/scenes/web-analytics/liveWebAnalyticsLogic.tsx @@ -1,5 +1,4 @@ import { actions, connect, events, kea, listeners, path, reducers, selectors } from 'kea' -import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { liveEventsHostOrigin } from 'lib/utils/apiHost' import { teamLogic } from 'scenes/teamLogic' @@ -78,20 +77,18 @@ export const liveEventsTableLogic = kea([ } }, })), - events(({ actions, cache, values }) => ({ + events(({ actions, cache }) => ({ afterMount: () => { - if (values.featureFlags[FEATURE_FLAGS.WEB_ANALYTICS_LIVE_USER_COUNT]) { - actions.setNow({ now: new Date() }) - actions.pollStats() + actions.setNow({ now: new Date() }) + actions.pollStats() - cache.statsInterval = setInterval(() => { - actions.pollStats() - }, 30000) + cache.statsInterval = setInterval(() => { + actions.pollStats() + }, 30000) - cache.nowInterval = setInterval(() => { - actions.setNow({ now: new Date() }) - }, 500) - } + cache.nowInterval = setInterval(() => { + actions.setNow({ now: new Date() }) + }, 500) }, beforeUnmount: () => { if (cache.statsInterval) { diff --git a/frontend/src/scenes/web-analytics/webAnalyticsLogic.tsx b/frontend/src/scenes/web-analytics/webAnalyticsLogic.tsx index bcd20388cc026..bd3f9afb4e78e 100644 --- a/frontend/src/scenes/web-analytics/webAnalyticsLogic.tsx +++ b/frontend/src/scenes/web-analytics/webAnalyticsLogic.tsx @@ -6,7 +6,7 @@ import api from 'lib/api' import { FEATURE_FLAGS, RETENTION_FIRST_TIME, STALE_EVENT_SECONDS } from 'lib/constants' import { dayjs } from 'lib/dayjs' import { Link, PostHogComDocsURL } from 'lib/lemon-ui/Link/Link' -import { featureFlagLogic, FeatureFlagsSet } from 'lib/logic/featureFlagLogic' +import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { getDefaultInterval, isNotNil, objectsEqual, updateDatesWithInterval } from 'lib/utils' import { errorTrackingQuery } from 'scenes/error-tracking/queries' import { urls } from 'scenes/urls' @@ -696,7 +696,7 @@ export const webAnalyticsLogic = kea([ compareFilter, filterTestAccounts, conversionGoal, - includeLCPScore: featureFlags[FEATURE_FLAGS.WEB_ANALYTICS_LCP_SCORE] ? true : undefined, + includeLCPScore: true, }, insightProps: createInsightProps(TileId.OVERVIEW), canOpenModal: false, @@ -870,45 +870,43 @@ export const webAnalyticsLogic = kea([ }, } ), - featureFlags[FEATURE_FLAGS.WEB_ANALYTICS_LAST_CLICK] - ? { - id: PathTab.EXIT_CLICK, - title: 'Outbound link clicks', - linkText: 'Outbound clicks', - query: { - full: true, - kind: NodeKind.DataTableNode, - source: { - kind: NodeKind.WebExternalClicksTableQuery, - properties: webAnalyticsFilters, - dateRange, - compareFilter, - sampling, - limit: 10, - filterTestAccounts, - conversionGoal: featureFlags[ - FEATURE_FLAGS.WEB_ANALYTICS_CONVERSION_GOAL_FILTERS - ] - ? conversionGoal - : undefined, - stripQueryParams: shouldStripQueryParams, - }, - embedded: false, - columns: ['url', 'visitors', 'clicks'], - }, - insightProps: createInsightProps(TileId.PATHS, PathTab.END_PATH), - canOpenModal: true, - docs: { - title: 'Outbound Clicks', - description: ( -
- You'll be able to verify when someone leaves your website by - clicking an outbound link (to a separate domain) -
- ), - }, - } - : null, + { + id: PathTab.EXIT_CLICK, + title: 'Outbound link clicks', + linkText: 'Outbound clicks', + query: { + full: true, + kind: NodeKind.DataTableNode, + source: { + kind: NodeKind.WebExternalClicksTableQuery, + properties: webAnalyticsFilters, + dateRange, + compareFilter, + sampling, + limit: 10, + filterTestAccounts, + conversionGoal: featureFlags[ + FEATURE_FLAGS.WEB_ANALYTICS_CONVERSION_GOAL_FILTERS + ] + ? conversionGoal + : undefined, + stripQueryParams: shouldStripQueryParams, + }, + embedded: false, + columns: ['url', 'visitors', 'clicks'], + }, + insightProps: createInsightProps(TileId.PATHS, PathTab.END_PATH), + canOpenModal: true, + docs: { + title: 'Outbound Clicks', + description: ( +
+ You'll be able to verify when someone leaves your website by clicking an + outbound link (to a separate domain) +
+ ), + }, + }, ] as (TabsTileTab | undefined)[] ).filter(isNotNil), }, @@ -939,21 +937,15 @@ export const webAnalyticsLogic = kea([ Channels are the different sources that bring traffic to your website, e.g. Paid Search, Organic Social, Direct, etc.

- {featureFlags[FEATURE_FLAGS.CUSTOM_CHANNEL_TYPE_RULES] && ( -

- You can also{' '} - - create custom channel types - - , allowing you to further categorize your channels. -

- )} - +

+ You can also{' '} + + create custom channel types + + , allowing you to further categorize your channels. +

Something unexpected? Try the{' '} @@ -1276,7 +1268,7 @@ export const webAnalyticsLogic = kea([ } : null, // Hiding if conversionGoal is set already because values aren't representative - !conversionGoal && featureFlags[FEATURE_FLAGS.WEB_ANALYTICS_CONVERSION_GOALS] + !conversionGoal ? { kind: 'query', tileId: TileId.GOALS, @@ -1323,7 +1315,7 @@ export const webAnalyticsLogic = kea([ }, } : null, - !conversionGoal && featureFlags[FEATURE_FLAGS.WEB_ANALYTICS_REPLAY] + !conversionGoal ? { kind: 'replay', tileId: TileId.REPLAY, @@ -1825,8 +1817,7 @@ export const webAnalyticsLogic = kea([ checkCustomEventConversionGoalHasSessionIdsHelper( conversionGoal, breakpoint, - actions.setConversionGoalWarning, - values.featureFlags + actions.setConversionGoalWarning ), ], } @@ -1835,8 +1826,7 @@ export const webAnalyticsLogic = kea([ checkCustomEventConversionGoalHasSessionIdsHelper( values.conversionGoal, undefined, - actions.setConversionGoalWarning, - values.featureFlags + actions.setConversionGoalWarning ).catch(() => { // ignore, this warning is just a nice-to-have, no point showing an error to the user }) @@ -1851,13 +1841,8 @@ const isDefinitionStale = (definition: EventDefinition | PropertyDefinition): bo const checkCustomEventConversionGoalHasSessionIdsHelper = async ( conversionGoal: WebAnalyticsConversionGoal | null, breakpoint: BreakPointFunction | undefined, - setConversionGoalWarning: (warning: ConversionGoalWarning | null) => void, - featureFlags: FeatureFlagsSet + setConversionGoalWarning: (warning: ConversionGoalWarning | null) => void ): Promise => { - if (!featureFlags[FEATURE_FLAGS.WEB_ANALYTICS_WARN_CUSTOM_EVENT_NO_SESSION]) { - return - } - if (!conversionGoal || !('customEventName' in conversionGoal) || !conversionGoal.customEventName) { setConversionGoalWarning(null) return