mirror of
https://github.com/supabase/supabase.git
synced 2026-10-06 01:45:10 +03:00
fix(studio): convert tableCreateGeneratePolicies flag to multivariate for PostHog experimentation (#41706)
Co-authored-by: pamelachia <26612111+pamelachia@users.noreply.github.com>
This commit is contained in:
1 parent
a6ef6c8a75
commit
1077b50a5b
3 files changed
+26
-12
No files matched your search
+4
-3
@@ -26,6 +26,7 @@ import { RetrieveTableResult } from 'data/tables/table-retrieve-query'
|
||||
import { getTables } from 'data/tables/tables-query'
|
||||
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
|
||||
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import { isValidExperimentVariant } from 'hooks/misc/useTableCreateGeneratePolicies'
|
||||
import { useConfirmOnClose, type ConfirmOnCloseModalProps } from 'hooks/ui/useConfirmOnClose'
|
||||
import { usePHFlag } from 'hooks/ui/useFlag'
|
||||
import { useUrlState } from 'hooks/ui/useUrlState'
|
||||
@@ -140,7 +141,7 @@ export const SidePanelEditor = ({
|
||||
const { data: project } = useSelectedProjectQuery()
|
||||
const { data: org } = useSelectedOrganizationQuery()
|
||||
const getImpersonatedRoleState = useGetImpersonatedRoleState()
|
||||
const generatePoliciesFlag = usePHFlag<boolean>('tableCreateGeneratePolicies')
|
||||
const generatePoliciesFlag = usePHFlag<string>('tableCreateGeneratePolicies')
|
||||
|
||||
const [isEdited, setIsEdited] = useState<boolean>(false)
|
||||
|
||||
@@ -551,10 +552,10 @@ export const SidePanelEditor = ({
|
||||
}
|
||||
|
||||
// Track experiment conversion if user is in the experiment
|
||||
if (generatePoliciesFlag !== undefined) {
|
||||
if (isValidExperimentVariant(generatePoliciesFlag)) {
|
||||
track('table_create_generate_policies_experiment_converted', {
|
||||
experiment_id: 'tableCreateGeneratePolicies',
|
||||
variant: generatePoliciesFlag ? 'treatment' : 'control',
|
||||
variant: generatePoliciesFlag,
|
||||
has_rls_enabled: isRLSEnabled,
|
||||
has_rls_policies: generatedPolicies.length > 0,
|
||||
has_generated_policies: generatedPolicies.length > 0,
|
||||
|
||||
@@ -8,6 +8,19 @@ import { useTrack } from 'lib/telemetry/track'
|
||||
|
||||
dayjs.extend(utc)
|
||||
|
||||
export type TableCreateGeneratePoliciesVariant = 'control' | 'variation'
|
||||
|
||||
const VALID_VARIANTS: TableCreateGeneratePoliciesVariant[] = ['control', 'variation']
|
||||
|
||||
export function isValidExperimentVariant(
|
||||
value: unknown
|
||||
): value is TableCreateGeneratePoliciesVariant {
|
||||
return (
|
||||
typeof value === 'string' &&
|
||||
VALID_VARIANTS.includes(value as TableCreateGeneratePoliciesVariant)
|
||||
)
|
||||
}
|
||||
|
||||
interface UseTableCreateGeneratePoliciesOptions {
|
||||
/**
|
||||
* Whether this is a new table being created
|
||||
@@ -38,12 +51,12 @@ export function useTableCreateGeneratePolicies({
|
||||
projectInsertedAt,
|
||||
}: UseTableCreateGeneratePoliciesOptions): UseTableCreateGeneratePoliciesResult {
|
||||
const track = useTrack()
|
||||
const tableCreateGeneratePoliciesFlag = usePHFlag<boolean>('tableCreateGeneratePolicies')
|
||||
const tableCreateGeneratePoliciesFlag = usePHFlag<string>('tableCreateGeneratePolicies')
|
||||
const hasTrackedExposure = useRef(false)
|
||||
|
||||
const enabled = useMemo(() => {
|
||||
if (!IS_PLATFORM) return false
|
||||
if (!tableCreateGeneratePoliciesFlag) return false
|
||||
if (tableCreateGeneratePoliciesFlag !== 'variation') return false
|
||||
return true
|
||||
}, [tableCreateGeneratePoliciesFlag])
|
||||
|
||||
@@ -51,7 +64,7 @@ export function useTableCreateGeneratePolicies({
|
||||
if (!IS_PLATFORM) return
|
||||
if (hasTrackedExposure.current) return
|
||||
if (!isNewRecord) return
|
||||
if (tableCreateGeneratePoliciesFlag === undefined) return
|
||||
if (!isValidExperimentVariant(tableCreateGeneratePoliciesFlag)) return
|
||||
if (!projectInsertedAt) return
|
||||
|
||||
try {
|
||||
@@ -61,7 +74,7 @@ export function useTableCreateGeneratePolicies({
|
||||
const daysSinceCreation = dayjs.utc().diff(insertedDate, 'day')
|
||||
track('table_create_generate_policies_experiment_exposed', {
|
||||
experiment_id: 'tableCreateGeneratePolicies',
|
||||
variant: tableCreateGeneratePoliciesFlag ? 'treatment' : 'control',
|
||||
variant: tableCreateGeneratePoliciesFlag,
|
||||
days_since_project_creation: daysSinceCreation,
|
||||
})
|
||||
hasTrackedExposure.current = true
|
||||
|
||||
@@ -2046,9 +2046,9 @@ export interface TableCreateGeneratePoliciesExperimentConvertedEvent {
|
||||
*/
|
||||
experiment_id: 'tableCreateGeneratePolicies'
|
||||
/**
|
||||
* Experiment variant: 'control' (feature disabled) or 'treatment' (feature enabled)
|
||||
* Experiment variant: 'control' (feature disabled) or 'variation' (feature enabled)
|
||||
*/
|
||||
variant: 'control' | 'treatment'
|
||||
variant: 'control' | 'variation'
|
||||
/**
|
||||
* Whether RLS was enabled on the table
|
||||
*/
|
||||
@@ -2058,7 +2058,7 @@ export interface TableCreateGeneratePoliciesExperimentConvertedEvent {
|
||||
*/
|
||||
has_rls_policies: boolean
|
||||
/**
|
||||
* Whether AI-generated policies were used (only possible in treatment)
|
||||
* Whether AI-generated policies were used (only possible in variation)
|
||||
*/
|
||||
has_generated_policies: boolean
|
||||
}
|
||||
@@ -2080,9 +2080,9 @@ export interface TableCreateGeneratePoliciesExperimentExposedEvent {
|
||||
*/
|
||||
experiment_id: 'tableCreateGeneratePolicies'
|
||||
/**
|
||||
* Experiment variant: 'control' (feature disabled) or 'treatment' (feature enabled)
|
||||
* Experiment variant: 'control' (feature disabled) or 'variation' (feature enabled)
|
||||
*/
|
||||
variant: 'control' | 'treatment'
|
||||
variant: 'control' | 'variation'
|
||||
/**
|
||||
* Days since project creation (to segment by new user cohorts)
|
||||
*/
|
||||
|
||||
Reference in new issue
Block a user