Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/common/DatePicker/DatePicker.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -54,14 +54,14 @@ import { isTargetElementInContainerElement } from '../../utils/checkElementsPosi

const defaultProps = {
date: new Date(),
dateTo: null
setExternalInvalid: () => {}
}

const DatePicker = ({
className = '',
customOptions = null,
date = defaultProps.date,
dateTo = defaultProps.dateTo,
dateTo = null,
disabled = false,
excludeCustomRange = false,
externalInvalid = null,
Expand All @@ -72,7 +72,7 @@ const DatePicker = ({
required = false,
requiredText = 'This field is required',
selectedOptionId = '',
setExternalInvalid = () => {},
setExternalInvalid = defaultProps.setExternalInvalid,
timeFrameLimit = Infinity,
tip = '',
type = 'date',
Expand Down
49 changes: 41 additions & 8 deletions src/components/ActionBar/ActionBar.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,13 @@ import {
REQUEST_CANCELED,
TAG_FILTER_ALL_ITEMS
} from '../../constants'
import { CUSTOM_RANGE_DATE_OPTION } from '../../utils/datePicker.util'
import {
ANY_TIME_DATE_OPTION,
CUSTOM_RANGE_DATE_OPTION,
datePickerFutureOptions,
datePickerPastOptions,
getDatePickerFilterValue
} from '../../utils/datePicker.util'
import { FILTERS_CONFIG } from '../../types'
import { getCloseDetailsLink } from '../../utils/link-helper.util'
import { setFieldState } from 'igz-controls/utils/form.util'
Expand Down Expand Up @@ -189,13 +195,36 @@ const ActionBar = ({
[filtersConfig, setSearchParams, withoutSearchParams]
)

const updateRelativeTimeValue = useCallback(
filters => {
if (
filters[DATES_FILTER]?.initialSelectedOptionId &&
filters[DATES_FILTER].initialSelectedOptionId !== CUSTOM_RANGE_DATE_OPTION &&
filters[DATES_FILTER].initialSelectedOptionId !== ANY_TIME_DATE_OPTION
) {
const isFuture = filtersConfig[DATES_FILTER]?.isFuture
const options = isFuture ? datePickerFutureOptions : datePickerPastOptions

filters[DATES_FILTER] = getDatePickerFilterValue(
options,
filters[DATES_FILTER].initialSelectedOptionId,
isFuture
)
formRef.current.change(DATES_FILTER, filters[DATES_FILTER])
dispatch(setFilters({ relativeDateChange: Date.now() }))
}
},
[dispatch, filtersConfig]
)

const applyFilters = useCallback(
async (formValues, filters, actionCanBePerformedChecked) => {
const actionCanBePerformed =
actionCanBePerformedChecked || (await performDetailsActionHelper(changes, dispatch, true))
const newFilters = { ...filters, ...formValues }

if (actionCanBePerformed) {
const newFilters = { ...filters, ...formValues }

if (closeParamName) {
navigate(getCloseDetailsLink(closeParamName, true, selectedItemName), { replace: true })
}
Expand All @@ -216,6 +245,7 @@ const ActionBar = ({
if (withoutSearchParams) {
setLocalFilters(newFilters)
} else {
updateRelativeTimeValue(newFilters)
saveFilters(newFilters)
}

Expand All @@ -228,17 +258,18 @@ const ActionBar = ({
[
changes,
dispatch,
updateRelativeTimeValue,
closeParamName,
filtersStore.groupBy,
saveFilters,
withoutSearchParams,
removeSelectedItem,
setSelectedRowData,
toggleAllRows,
handleRefresh,
navigate,
selectedItemName,
withoutSearchParams,
setLocalFilters
setLocalFilters,
saveFilters
]
)

Expand All @@ -258,6 +289,7 @@ const ActionBar = ({
if (withoutSearchParams) {
setLocalFilters(newFilters)
} else {
updateRelativeTimeValue(newFilters)
saveFilters(formState.values)
}

Expand All @@ -269,11 +301,12 @@ const ActionBar = ({
changes,
dispatch,
cancelRequest,
saveFilters,
handleRefresh,
filters,
updateRelativeTimeValue,
withoutSearchParams,
setLocalFilters
handleRefresh,
setLocalFilters,
saveFilters
]
)

Expand Down
3 changes: 2 additions & 1 deletion src/components/Alerts/Alerts.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,8 @@ const Alerts = () => {

const alertsFilters = useFiltersFromSearchParams(
alertsFiltersConfig,
parseAlertsQueryParamsCallback
parseAlertsQueryParamsCallback,
params.projectName
)

const {
Expand Down
6 changes: 5 additions & 1 deletion src/components/FunctionsPage/Functions.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,11 @@ const Functions = ({ isAllVersions = false }) => {
}
}, [selectedFunction.node_selector])

const functionsFilters = useFiltersFromSearchParams(functionsFiltersConfig)
const functionsFilters = useFiltersFromSearchParams(
functionsFiltersConfig,
undefined,
params.projectName
)

const terminateDeleteTasksPolling = useCallback(() => {
terminatePollRef?.current?.()
Expand Down
6 changes: 5 additions & 1 deletion src/components/FunctionsPageOld/FunctionsOld.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,11 @@ const Functions = () => {
}
}, [])

const functionsFilters = useFiltersFromSearchParams(functionsFiltersConfig)
const functionsFilters = useFiltersFromSearchParams(
functionsFiltersConfig,
undefined,
params.projectName
)

const terminateDeleteTasksPolling = useCallback(() => {
terminatePollRef?.current?.()
Expand Down
6 changes: 4 additions & 2 deletions src/components/Jobs/Jobs.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,8 @@ const Jobs = () => {
parseQueryParamsCallback: parseScheduledQueryParamsCallback
}
}
}, [params.jobName])
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [params.jobName, params.projectName, selectedTab])

const {
abortControllerRef,
Expand Down Expand Up @@ -197,7 +198,8 @@ const Jobs = () => {

const filters = useFiltersFromSearchParams(
initialTabData[selectedTab]?.filtersConfig,
initialTabData[selectedTab]?.parseQueryParamsCallback
initialTabData[selectedTab]?.parseQueryParamsCallback,
`${params.projectName}+${selectedTab}`
)

return (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ const MonitoringApplicationsPage = () => {
const params = useParams()
const navigate = useNavigate()
const filtersConfig = useMemo(() => getFiltersConfig(), [])
const filters = useFiltersFromSearchParams(filtersConfig)
const filters = useFiltersFromSearchParams(filtersConfig, undefined, params.projectName)
const [, setSearchParams] = useSearchParams()
const contentRef = useRef(null)

Expand Down
33 changes: 28 additions & 5 deletions src/hooks/useFiltersFromSearchParams.hook.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,15 @@ such restriction.
*/
import { useMemo } from 'react'
import { mapValues, isNil, pickBy } from 'lodash'
import { useSelector } from 'react-redux'
import { useSearchParams } from 'react-router-dom'

import {
DATES_FILTER,
ITERATIONS_FILTER,
SHOW_ITERATIONS,
SHOW_UNTAGGED_FILTER
} from '../constants'
import { useSearchParams } from 'react-router-dom'
import {
datePickerFutureOptions,
datePickerPastOptions,
Expand All @@ -42,7 +44,19 @@ const getFiltersFromSearchParams = (filtersConfig, searchParams, paramsParsingCa
return mapValues(filtersConfigToApply, (filterConfig, filterName) => {
const searchParamValue = searchParams.get(filterName)?.trim?.()

if (isNil(searchParamValue)) return filterConfig.initialValue
if (isNil(searchParamValue)) {
if (filterName === DATES_FILTER) {
return (
getDatePickerFilterValue(
filterConfig.isFuture ? datePickerFutureOptions : datePickerPastOptions,
filterConfig.initialValue.initialSelectedOptionId,
filterConfig.isFuture
) ?? filterConfig.initialValue
)
}

return filterConfig.initialValue
}

let parsedValue = paramsParsingCallback(filterName, searchParamValue)

Expand Down Expand Up @@ -78,12 +92,21 @@ export const getInitialFiltersByConfig = (filtersConfig = {}) => {

export const useFiltersFromSearchParams = (
filtersConfig = null,
paramsParsingCallback = defaultParamsParsingCallback
paramsParsingCallback = defaultParamsParsingCallback,
triggerKey = ''
) => {
const relativeDateChange = useSelector(store => store.filtersStore.relativeDateChange)
const [searchParams] = useSearchParams()
const filters = useMemo(() => {
return getFiltersFromSearchParams(filtersConfig, searchParams, paramsParsingCallback)
}, [filtersConfig, paramsParsingCallback, searchParams])
// triggerKey and relativeDateChange are added to dependencies to trigger date (timestamp for relative time) filter recalculation
return getFiltersFromSearchParams(
filtersConfig,
searchParams,
paramsParsingCallback,
triggerKey,
relativeDateChange
)
}, [filtersConfig, paramsParsingCallback, searchParams, relativeDateChange, triggerKey])

return filters
}
3 changes: 2 additions & 1 deletion src/reducers/filtersReducer.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ const initialState = {
internalAutoRefresh: false,
tagOptions: null,
projectOptions: [],
[FILTER_MENU_MODAL]: {}
[FILTER_MENU_MODAL]: {},
relativeDateChange: null
}

export const getFilterTagOptions = createAsyncThunk(
Expand Down
Loading