diff --git a/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/chart-view.tsx b/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/chart-view.tsx
index 4e8857a9f9..d5430b03ad 100644
--- a/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/chart-view.tsx
+++ b/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/chart-view.tsx
@@ -40,13 +40,11 @@ export default function ChartView({ appId, headerRight }: IChartViewProps) {
{t('common.appMenus.overview')}
diff --git a/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/time-range-picker.tsx b/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/time-range-picker.tsx
index 096a22b09a..e41277101b 100644
--- a/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/time-range-picker.tsx
+++ b/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/time-range-picker.tsx
@@ -9,6 +9,8 @@ import { HourglassShape } from '@/app/components/base/icons/src/vender/other'
import TimePicker from '@/app/components/base/date-and-time-picker/time-picker'
import { noop } from 'lodash-es'
import { useTranslation } from 'react-i18next'
+import cn from '@/utils/classnames'
+import { RiArrowDownSLine, RiCheckLine } from '@remixicon/react'
const today = dayjs()
@@ -25,6 +27,35 @@ const TimeRangePicker: FC = ({
}) => {
const { t } = useTranslation()
+ const isCustom = false
+
+ const renderRangeTrigger = useCallback((item: Item | null, isOpen: boolean) => {
+ // todo: custom i18n and last 30days i18n
+ return (
+
+
{isCustom ? 'Custom' : item?.name}
+
+
+ )
+ }, [isCustom])
+
+ const renderOption = useCallback(({ item, selected }: { item: Item; selected: boolean }) => {
+ return (
+ <>
+ {selected && (
+
+
+
+ )}
+ {item.name}
+ >
+ )
+ }, [])
+
const handleSelectRange = useCallback((item: Item) => {
const { name, value } = item
let period: PeriodParams['query'] | null = null
@@ -46,6 +77,11 @@ const TimeRangePicker: FC = ({
notClearable={true}
onSelect={handleSelectRange}
defaultValue={0}
+ wrapperClassName='h-8'
+ optionWrapClassName='w-[200px] translate-x-[-24px]'
+ renderTrigger={renderRangeTrigger}
+ optionClassName='flex items-center py-0 pl-7 pr-2 h-8'
+ renderOption={renderOption}
/>
-
+
diff --git a/web/app/components/base/icons/src/vender/other/HourglassShape.json b/web/app/components/base/icons/src/vender/other/HourglassShape.json
index 4b007e2e9c..27f31bbe28 100644
--- a/web/app/components/base/icons/src/vender/other/HourglassShape.json
+++ b/web/app/components/base/icons/src/vender/other/HourglassShape.json
@@ -17,7 +17,7 @@
"attributes": {
"d": "M8 14C8 11.7909 6.20914 10 4 10C1.79086 10 0 11.7909 0 14V0C8.05332e-08 2.20914 1.79086 4 4 4C6.20914 4 8 2.20914 8 0V14Z",
"fill": "currentColor",
- "fill-opacity": "0.25"
+ "fill-opacity": "1"
},
"children": []
}
diff --git a/web/app/components/base/select/index.tsx b/web/app/components/base/select/index.tsx
index a1e8ac2724..f2ca32d660 100644
--- a/web/app/components/base/select/index.tsx
+++ b/web/app/components/base/select/index.tsx
@@ -31,7 +31,7 @@ export type Item = {
export type ISelectProps = {
className?: string
wrapperClassName?: string
- renderTrigger?: (value: Item | null) => React.JSX.Element | null
+ renderTrigger?: (value: Item | null, isOpen: boolean) => React.JSX.Element | null
items?: Item[]
defaultValue?: number | string
disabled?: boolean
@@ -216,7 +216,7 @@ const SimpleSelect: FC = ({
>
{({ open }) => (
- {renderTrigger && {renderTrigger(selectedItem)}}
+ {renderTrigger && {renderTrigger(selectedItem, open)}}
{!renderTrigger && (
{
onOpenChange?.(open)