Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: clear app detail group filters if param has envId #2384

Open
wants to merge 9 commits into
base: develop
Choose a base branch
from
2 changes: 1 addition & 1 deletion src/components/ApplicationGroup/AppGroup.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ export function getCIConfig(envID: string, appIds: string): Promise<ResponseType
}

export function getCIConfigMin(envID: string, appIds: string): Promise<ResponseType> {
return get(`${Routes.ENV_WORKFLOW}/${envID}/${URLS.APP_CI_CONFIG}/min${getFilteredAppQueryString(appIds)}`)
return get(`${Routes.ENV_WORKFLOW}/${envID}/${Routes.APP_CI_PIPELINE}${getFilteredAppQueryString(appIds)}`)
}

export function getCDConfig(envID: string, appIds: string): Promise<ResponseType> {
Expand Down
1 change: 1 addition & 0 deletions src/components/ApplicationGroup/AppGroup.types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -321,6 +321,7 @@ export interface AppGroupDetailDefaultType {
description?: string
getAppListData?: () => Promise<OptionType[]>
handleSaveDescription?: (description: string) => Promise<void>
clearAppListSelection?: () => void
}

interface CIPipeline {
Expand Down
11 changes: 11 additions & 0 deletions src/components/ApplicationGroup/AppGroupAppFilter.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

import { useEffect, useRef, useState } from 'react'
import ReactSelect, { SelectInstance } from 'react-select'
import ReactGA from 'react-ga4'
import { useAppGroupAppFilterContext } from './AppGroupDetailsRoute'
import { appGroupAppSelectorStyle } from './AppGroup.utils'
import { AppGroupAppFilterContextType, FilterParentType } from './AppGroup.types'
Expand Down Expand Up @@ -52,7 +53,15 @@ export default function AppGroupAppFilter() {
setSelectedFilterTab(_filterTab)
}

const handleFilterGAEvent = (isItemClick?: boolean) => {
ReactGA.event({
category: 'Group filter',
action: `${filterParentType} filter ${isItemClick ? 'item' : ''} clicked`,
})
}

const handleOpenFilter = (): void => {
handleFilterGAEvent()
selectDefaultFilterTab()
setMenuOpen(true)
}
Expand Down Expand Up @@ -86,6 +95,7 @@ export default function AppGroupAppFilter() {
}

const onChangeFilter = (selectedValue): void => {
handleFilterGAEvent(true)
if (selectedFilterTab === AppFilterTabs.APP_FILTER) {
setSelectedAppList(selectedValue)
setSelectedGroupFilter([])
Expand Down Expand Up @@ -119,6 +129,7 @@ export default function AppGroupAppFilter() {
}

const handleFilterFocus = () => {
handleFilterGAEvent()
appGroupFilterRef.current.focus()
appGroupFilterRef.current.onMenuOpen()
}
Expand Down
27 changes: 24 additions & 3 deletions src/components/ApplicationGroup/AppGroupDetailsRoute.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -425,6 +425,17 @@ export default function AppGroupDetailsRoute({ isSuperAdmin }: AppGroupAdminType
return _appListData
}, [selectedAppList, appGroupListData?.apps, appGroupListData?.description])

const clearAppListSelection = () => {
setSelectedAppList([])
setSelectedGroupFilter([])
setAppGroupFilterInLocalStorage({
filterParentType: FilterParentType.env,
resourceId: envId,
resourceList: [],
groupList: [],
})
}

const renderRoute = () => {
if (initLoading || loading || appListLoading) {
return <Progressing pageLoader />
Expand Down Expand Up @@ -454,15 +465,25 @@ export default function AppGroupDetailsRoute({ isSuperAdmin }: AppGroupAdminType
<EnvTriggerView filteredAppIds={_filteredAppsIds} isVirtualEnv={isVirtualEnv} />
</Route>
<Route path={`${path}/${URLS.APP_CI_DETAILS}/:pipelineId(\\d+)?/:buildId(\\d+)?`}>
<EnvCIDetails filteredAppIds={_filteredAppsIds} />
<EnvCIDetails
filteredAppIds={_filteredAppsIds}
clearAppListSelection={clearAppListSelection}
/>
</Route>
<Route
path={`${path}/${URLS.APP_CD_DETAILS}/:appId(\\d+)?/:pipelineId(\\d+)?/:triggerId(\\d+)?`}
>
<EnvCDDetails filteredAppIds={_filteredAppsIds} />
<EnvCDDetails
filteredAppIds={_filteredAppsIds}
clearAppListSelection={clearAppListSelection}
/>
</Route>
<Route path={`${path}/${URLS.APP_CONFIG}/:appId(\\d+)?`}>
<EnvConfig filteredAppIds={_filteredAppsIds} envName={envName} />
<EnvConfig
filteredAppIds={_filteredAppsIds}
envName={envName}
clearAppListSelection={clearAppListSelection}
/>
</Route>
<Redirect to={`${path}/${URLS.APP_OVERVIEW}`} />
</Switch>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* limitations under the License.
*/

import { useState, useEffect } from 'react'
import { useState, useEffect, useRef } from 'react'
import {
Progressing,
showError,
Expand Down Expand Up @@ -56,13 +56,14 @@ import {
renderVirtualHistoryArtifacts,
} from '../../../app/details/cdDetails/utils'

export default function EnvCDDetails({ filteredAppIds }: AppGroupDetailDefaultType) {
export default function EnvCDDetails({ filteredAppIds, clearAppListSelection }: AppGroupDetailDefaultType) {
const { appId, envId, triggerId, pipelineId } = useParams<{
appId: string
envId: string
triggerId: string
pipelineId: string
}>()
const isMounted = useRef<boolean>(false)
const [pagination, setPagination] = useState<{ offset: number; size: number }>({ offset: 0, size: 20 })
const [hasMore, setHasMore] = useState<boolean>(false)
const [hasMoreLoading, setHasMoreLoading] = useState<boolean>(false)
Expand All @@ -79,13 +80,21 @@ export default function EnvCDDetails({ filteredAppIds }: AppGroupDetailDefaultTy
autoBottomScroll: triggerDetails && TRIGGER_STATUS_PROGRESSING.includes(triggerDetails.status.toLowerCase()),
})

useEffect(() => {
if (appId && !isMounted.current) {
clearAppListSelection()
}
isMounted.current = true
}, [])

const [loading, result] = useAsync(
() =>
Promise.allSettled([
getAppsCDConfigMin(envId, filteredAppIds),
getModuleConfigured(ModuleNameMap.BLOB_STORAGE),
]),
[filteredAppIds],
isMounted.current,
)
const [loadingDeploymentHistory, deploymentHistoryResult, , , , dependencyState] = useAsync(
() => getTriggerHistory({ appId: Number(appId), envId: Number(envId), pagination }),
Expand All @@ -97,7 +106,6 @@ export default function EnvCDDetails({ filteredAppIds }: AppGroupDetailDefaultTy
const { currentEnvironmentName } = useAppContext()
useInterval(pollHistory, 30000)


useEffect(() => {
if (result?.[0]?.['value']?.result?.length) {
const selectedPipelineExist = result[0]['value'].result.some((pipeline) => pipeline.id === +pipelineId)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* limitations under the License.
*/

import { useEffect, useState } from 'react'
import { useEffect, useRef, useState } from 'react'
import { generatePath, Route, useHistory, useParams, useRouteMatch } from 'react-router-dom'
import {
Progressing,
Expand Down Expand Up @@ -44,12 +44,15 @@ import { getCIConfigList } from '../../AppGroup.service'
import { AppGroupDetailDefaultType } from '../../AppGroup.types'
import { CIPipelineBuildType } from '../../../ciPipeline/types'

export default function EnvCIDetails({ filteredAppIds }: AppGroupDetailDefaultType) {
export default function EnvCIDetails({ filteredAppIds, clearAppListSelection }: AppGroupDetailDefaultType) {
const { envId, pipelineId, buildId } = useParams<{
pipelineId: string
buildId: string
envId: string
}>()
const { path } = useRouteMatch()
const { replace } = useHistory()
const isMounted = useRef<boolean>(false)
const [pagination, setPagination] = useState<{ offset: number; size: number }>({ offset: 0, size: 20 })
const [hasMore, setHasMore] = useState<boolean>(false)
const [triggerHistory, setTriggerHistory] = useState<Map<number, History>>(new Map())
Expand All @@ -71,8 +74,11 @@ export default function EnvCIDetails({ filteredAppIds }: AppGroupDetailDefaultTy
autoBottomScroll: triggerDetails && TRIGGER_STATUS_PROGRESSING.includes(triggerDetails.status.toLowerCase()),
})


useEffect(() => {
if (pipelineId && !isMounted.current) {
clearAppListSelection()
}
isMounted.current = true
try {
setCiGroupLoading(true)
getCIConfigList(envId, filteredAppIds).then((result) => {
Expand Down Expand Up @@ -120,8 +126,6 @@ export default function EnvCIDetails({ filteredAppIds }: AppGroupDetailDefaultTy
[pipelineId, pagination],
!!pipelineId,
)
const { path } = useRouteMatch()
const { replace } = useHistory()
useInterval(pollHistory, 30000)

useEffect(() => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* limitations under the License.
*/

import { useEffect, useMemo } from 'react'
import { useEffect, useMemo, useRef } from 'react'
import { generatePath, Route, Switch, useHistory, useLocation, useRouteMatch } from 'react-router-dom'

import {
Expand All @@ -41,12 +41,20 @@ import ApplicationRoute from './ApplicationRoutes'
const getApprovalPolicyConfigForEnv: (envId: number) => Promise<ResourceIdToResourceApprovalPolicyConfigMapType> =
importComponentFromFELibrary('getApprovalPolicyConfigForEnv', null, 'function')

const EnvConfig = ({ filteredAppIds, envName }: AppGroupDetailDefaultType) => {
const EnvConfig = ({ filteredAppIds, envName, clearAppListSelection }: AppGroupDetailDefaultType) => {
// HOOKS
const { path, params } = useRouteMatch<{ envId: string; appId: string }>()
const { appId, envId } = params
const { pathname } = useLocation()
const { replace } = useHistory()
const isMounted = useRef<boolean>(false)

useEffect(() => {
if (appId && !isMounted.current) {
clearAppListSelection()
}
isMounted.current = true
}, [])

// ASYNC CALLS
const [loading, initDataResults] = useAsync(
Expand All @@ -58,6 +66,7 @@ const EnvConfig = ({ filteredAppIds, envName }: AppGroupDetailDefaultType) => {
: null,
]),
[filteredAppIds],
isMounted.current,
)
const [envConfigLoading, envConfigRes, , refetch] = useAsync(
() => (appId ? getEnvConfig(+appId, +envId) : null),
Expand Down
Loading
Loading