0
0
mirror of https://github.com/PostHog/posthog.git synced 2024-11-21 21:49:51 +01:00

fix(flags): prevent kea logic loop and clean filters on tab switch (#26258)

This commit is contained in:
Haven 2024-11-18 17:17:43 -08:00 committed by GitHub
parent e2f4caf218
commit a41bd2d4f9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 12 additions and 21 deletions

View File

@ -17,10 +17,8 @@ describe('Feature Flags', () => {
}) })
it('Display product introduction when no feature flags exist', () => { it('Display product introduction when no feature flags exist', () => {
// ensure unique names to avoid clashes
cy.get('[data-attr=top-bar-name]').should('contain', 'Feature flags') cy.get('[data-attr=top-bar-name]').should('contain', 'Feature flags')
cy.get('[data-attr=new-feature-flag]').click() cy.contains('Welcome to Feature flags!').should('exist')
cy.contains('Create your first feature flag').should('exist')
}) })
it('Create feature flag', () => { it('Create feature flag', () => {
@ -104,6 +102,7 @@ describe('Feature Flags', () => {
cy.get('[data-attr=feature-flag-key]').focus().type(name).should('have.value', name) cy.get('[data-attr=feature-flag-key]').focus().type(name).should('have.value', name)
cy.get('[data-attr=rollout-percentage]').type('{selectall}50').should('have.value', '50') cy.get('[data-attr=rollout-percentage]').type('{selectall}50').should('have.value', '50')
cy.get('[data-attr=save-feature-flag]').first().click() cy.get('[data-attr=save-feature-flag]').first().click()
cy.get('[data-attr=toast-close-button]').click()
// after save there should be a delete button // after save there should be a delete button
cy.get('[data-attr="more-button"]').click() cy.get('[data-attr="more-button"]').click()
@ -336,6 +335,9 @@ describe('Feature Flags', () => {
cy.get('[data-attr=feature-flags-tab-navigation]').contains('Overview').click() cy.get('[data-attr=feature-flags-tab-navigation]').contains('Overview').click()
cy.url().should('include', `tab=overview`) cy.url().should('include', `tab=overview`)
cy.get('[data-attr=feature-flags-tab-navigation]').contains('History').click()
cy.url().should('include', `tab=history`)
}) })
it('Renders flags in FlagSelector', () => { it('Renders flags in FlagSelector', () => {

View File

@ -180,6 +180,10 @@ export const featureFlagsLogic = kea<featureFlagsLogicType>([
await breakpoint(300) await breakpoint(300)
actions.loadFeatureFlags() actions.loadFeatureFlags()
}, },
setActiveTab: () => {
// Don't carry over pagination from previous tab
actions.setFeatureFlagsFilters({ page: 1 }, true)
},
})), })),
actionToUrl(({ values }) => { actionToUrl(({ values }) => {
const changeUrl = (): const changeUrl = ():
@ -231,25 +235,10 @@ export const featureFlagsLogic = kea<featureFlagsLogicType>([
order, order,
} }
if (active !== undefined) { pageFiltersFromUrl.active = active !== undefined ? String(active) : undefined
pageFiltersFromUrl.active = String(active) pageFiltersFromUrl.page = page !== undefined ? parseInt(page) : undefined
}
if (page !== undefined) {
pageFiltersFromUrl.page = parseInt(page)
}
// Initialize filters with the URL params if none are set
const isInitializingFilters =
objectsEqual(DEFAULT_FILTERS, values.filters) && !objectsEqual(DEFAULT_FILTERS, pageFiltersFromUrl)
/**
* Pagination search param in the URL is modified directly by the LemonTable component,
* so let's update filter state if it changes
*/
const isChangingPage = page !== undefined && page !== values.filters.page
if (isInitializingFilters || isChangingPage) {
actions.setFeatureFlagsFilters({ ...DEFAULT_FILTERS, ...pageFiltersFromUrl }) actions.setFeatureFlagsFilters({ ...DEFAULT_FILTERS, ...pageFiltersFromUrl })
}
}, },
})), })),
events(({ actions }) => ({ events(({ actions }) => ({