11import DateRangePopover from "@/app/user/[userId]/submissions/_components/DateRangePopover/DateRangePopover" ;
22import TopicFilterPopover from "@/app/user/[userId]/submissions/_components/TopicFilters/TopicFilterPopover" ;
3+ import { DateRangeClockIcon } from "@/app/user/[userId]/submissions/_components/UserSubmissions/DateRangeClockIcon" ;
34import UserSubmissionsSkeleton from "@/app/user/[userId]/submissions/_components/UserSubmissions/UserSubmissionsSkeleton" ;
45import FilterDropdown from "@/components/ui/dropdown/FilterDropdown" ;
56import FilterDropdownItem from "@/components/ui/dropdown/FilterDropdownItem" ;
@@ -24,6 +25,7 @@ import {
2425 Flex ,
2526} from "@mantine/core" ;
2627import { useMediaQuery } from "@mantine/hooks" ;
28+ import d from "dayjs" ;
2729import { useMemo } from "react" ;
2830import { Link } from "react-router-dom" ;
2931
@@ -54,15 +56,10 @@ export default function UserSubmissions({ userId }: { userId: string }) {
5456 } ) ;
5557
5658 const selectedTopicsSet = useMemo ( ( ) => new Set ( topics ) , [ topics ] ) ;
57-
5859 const isMobile = useMediaQuery ( "(max-width: 768px)" ) ;
5960
6061 if ( status === "pending" ) {
61- return (
62- < >
63- < UserSubmissionsSkeleton />
64- </ >
65- ) ;
62+ return < UserSubmissionsSkeleton /> ;
6663 }
6764
6865 if ( status === "error" ) {
@@ -73,6 +70,37 @@ export default function UserSubmissions({ userId }: { userId: string }) {
7370
7471 const pageData = data . payload ;
7572
73+ const dateRangeLabel =
74+ ( startDate || endDate ) &&
75+ `Viewing submissions from ${ startDate ? d ( startDate ) . format ( "MMM D, YYYY" ) : "now" } to ${ endDate ? d ( endDate ) . format ( "MMM D, YYYY" ) : "now" } ` ;
76+
77+ const filterControls = (
78+ < FilterDropdown buttonName = "Filters" >
79+ < TopicFilterPopover
80+ value = { topics }
81+ selectedTopicsSet = { selectedTopicsSet }
82+ onChange = { setTopics }
83+ onClear = { clearTopics }
84+ />
85+ < FilterDropdownItem
86+ value = { pointFilter }
87+ toggle = { togglePointFilter }
88+ switchMode
89+ name = {
90+ < Flex gap = "0.5rem" align = "center" >
91+ Points Received
92+ </ Flex >
93+ }
94+ />
95+ < DateRangePopover
96+ startDate = { startDate }
97+ endDate = { endDate }
98+ onStartDateChange = { setStartDate }
99+ onEndDateChange = { setEndDate }
100+ />
101+ </ FilterDropdown >
102+ ) ;
103+
76104 return (
77105 < Box
78106 mt = { 10 }
@@ -84,30 +112,10 @@ export default function UserSubmissions({ userId }: { userId: string }) {
84112 >
85113 { ! isMobile && (
86114 < Box display = "block" style = { { textAlign : "right" } } >
87- < FilterDropdown buttonName = "Filters" >
88- < TopicFilterPopover
89- value = { topics }
90- selectedTopicsSet = { selectedTopicsSet }
91- onChange = { setTopics }
92- onClear = { clearTopics }
93- />
94- < FilterDropdownItem
95- value = { pointFilter }
96- toggle = { togglePointFilter }
97- switchMode
98- name = {
99- < Flex gap = "0.5rem" align = "center" >
100- Points Received
101- </ Flex >
102- }
103- />
104- < DateRangePopover
105- startDate = { startDate }
106- endDate = { endDate }
107- onStartDateChange = { setStartDate }
108- onEndDateChange = { setEndDate }
109- />
110- </ FilterDropdown >
115+ < Box pos = "relative" display = "inline-block" >
116+ { filterControls }
117+ { dateRangeLabel && < DateRangeClockIcon label = { dateRangeLabel } /> }
118+ </ Box >
111119 </ Box >
112120 ) }
113121 < Group
@@ -127,30 +135,10 @@ export default function UserSubmissions({ userId }: { userId: string }) {
127135 />
128136 </ Box >
129137 { isMobile && (
130- < FilterDropdown buttonName = "Filters" >
131- < TopicFilterPopover
132- value = { topics }
133- selectedTopicsSet = { selectedTopicsSet }
134- onChange = { setTopics }
135- onClear = { clearTopics }
136- />
137- < FilterDropdownItem
138- value = { pointFilter }
139- toggle = { togglePointFilter }
140- switchMode
141- name = {
142- < Flex gap = "0.5rem" align = "center" >
143- Points Received
144- </ Flex >
145- }
146- />
147- < DateRangePopover
148- startDate = { startDate }
149- endDate = { endDate }
150- onStartDateChange = { setStartDate }
151- onEndDateChange = { setEndDate }
152- />
153- </ FilterDropdown >
138+ < Box pos = "relative" style = { { flexShrink : 0 } } >
139+ { filterControls }
140+ { dateRangeLabel && < DateRangeClockIcon label = { dateRangeLabel } /> }
141+ </ Box >
154142 ) }
155143 </ Group >
156144 < Box pos = "relative" >
@@ -178,28 +166,16 @@ export default function UserSubmissions({ userId }: { userId: string }) {
178166 </ Card >
179167 : pageData . items . map ( ( submission ) => {
180168 const badgeDifficultyColor = ( ( ) => {
181- if ( submission . questionDifficulty === "Easy" ) {
182- return undefined ;
183- }
184- if ( submission . questionDifficulty === "Medium" ) {
185- return "yellow" ;
186- }
187- if ( submission . questionDifficulty === "Hard" ) {
188- return "red" ;
189- }
169+ if ( submission . questionDifficulty === "Easy" ) return undefined ;
170+ if ( submission . questionDifficulty === "Medium" ) return "yellow" ;
171+ if ( submission . questionDifficulty === "Hard" ) return "red" ;
190172 return undefined ;
191173 } ) ( ) ;
192174 const badgeAcceptedColor = ( ( ) => {
193175 const acceptanceRate = submission . acceptanceRate * 100 ;
194- if ( acceptanceRate >= 75 ) {
195- return undefined ;
196- }
197- if ( acceptanceRate >= 50 ) {
198- return "yellow" ;
199- }
200- if ( acceptanceRate >= 0 ) {
201- return "red" ;
202- }
176+ if ( acceptanceRate >= 75 ) return undefined ;
177+ if ( acceptanceRate >= 50 ) return "yellow" ;
178+ if ( acceptanceRate >= 0 ) return "red" ;
203179 return undefined ;
204180 } ) ( ) ;
205181 const LanguageIcon =
0 commit comments