Skip to content

Instantly share code, notes, and snippets.

@yakkomajuri
Created September 30, 2020 14:29
Show Gist options
  • Save yakkomajuri/453f275869b93882d7aea55e17549a4c to your computer and use it in GitHub Desktop.
Save yakkomajuri/453f275869b93882d7aea55e17549a4c to your computer and use it in GitHub Desktop.
PostHog Feature Flags Playground
const resultElementFlag1 = document.getElementById('result-flag-1')
const resultElementFlag2 = document.getElementById('result-flag-2')
const iceCreamSelectorElement = document.getElementById('select-ice-cream')
const savePreferenceElement = document.getElementById('save-preference-btn')
const loadingRingElement = document.getElementById('loading-ring')
let loadingRingOn = false
posthog.init('sTMFPsFhdP1Ssg', { api_host: 'https://app.posthog.com', loaded: () => { updateFeatureFlagsDisplay(0) } })
const updateFeatureFlagsDisplay = (timeout) => {
setTimeout(() => {
const isFeature1Enabled = posthog.isFeatureEnabled('demo-flag-1')
const isFeature2Enabled = posthog.isFeatureEnabled('demo-flag-2')
resultElementFlag1.innerHTML = isFeature1Enabled ? 'On' : 'Off'
resultElementFlag2.innerHTML = isFeature2Enabled ? 'On' : 'Off'
resultElementFlag1['style']['color'] = isFeature1Enabled ? 'green' : 'red'
resultElementFlag2['style']['color'] = isFeature2Enabled ? 'green' : 'red'
savePreferenceElement['className'] = 'btn btn-md ' + (isFeature2Enabled ? 'btn-success' : 'btn-primary')
console.log('[POSTHOG] Updated display')
}, timeout)
}
const toggleLoadingRing = () => {
if (loadingRingOn) loadingRingElement['style']['display'] = 'none'
else loadingRingElement['style']['display'] = 'inline-block'
loadingRingOn = !loadingRingOn
}
const handlePreferenceChange = () => {
toggleLoadingRing()
posthog.people.set({ 'favorite_icecream': iceCreamSelectorElement.value })
console.log('[POSTHOG] Set user property')
posthog.people._flush()
console.log('[POSTHOG] Flushing...')
setTimeout(() => {
console.log('[POSTHOG] Reloading feature flags')
posthog.reloadFeatureFlags()
}, 2000)
setTimeout(() => {
toggleLoadingRing()
}, 3000)
}
// Listeners
savePreferenceElement.addEventListener('click', handlePreferenceChange)
posthog.onFeatureFlags(() => {
console.log('[POSTHOG] Feature flags reloaded successfully')
console.log('[POSTHOG] Updating display...')
updateFeatureFlagsDisplay(500)
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment