Spaces:
Running
Running
Update ICCV data, sort chronologically
Browse files- src/components/ConferenceList.tsx +4 -0
- src/data/conferences.yml +4 -2
- src/pages/Index.tsx +15 -3
- src/utils/conferenceUtils.ts +26 -0
src/components/ConferenceList.tsx
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { sortConferencesByDeadline } from "@/utils/conferenceUtils";
|
| 2 |
+
|
| 3 |
+
// When loading the conferences:
|
| 4 |
+
const sortedConferences = sortConferencesByDeadline(conferences);
|
src/data/conferences.yml
CHANGED
|
@@ -578,15 +578,17 @@
|
|
| 578 |
id: iccv25
|
| 579 |
full_name: International Conference on Computer Vision
|
| 580 |
link: https://iccv.thecvf.com/Conferences/2025
|
| 581 |
-
deadline: '2025-03-
|
| 582 |
-
timezone: UTC
|
| 583 |
city: Honolulu
|
| 584 |
country: Hawaii
|
| 585 |
date: October 19-25, 2025
|
|
|
|
| 586 |
tags:
|
| 587 |
- machine-learning
|
| 588 |
- computer-vision
|
| 589 |
rankings: 'CCF: A, CORE: A*, THCPL: A'
|
|
|
|
| 590 |
rebuttal_period_start: '2025-05-10'
|
| 591 |
rebuttal_period_end: '2025-05-16'
|
| 592 |
final_decision_date: '2025-06-20'
|
|
|
|
| 578 |
id: iccv25
|
| 579 |
full_name: International Conference on Computer Vision
|
| 580 |
link: https://iccv.thecvf.com/Conferences/2025
|
| 581 |
+
deadline: '2025-03-03 23:59:59'
|
| 582 |
+
timezone: UTC-10
|
| 583 |
city: Honolulu
|
| 584 |
country: Hawaii
|
| 585 |
date: October 19-25, 2025
|
| 586 |
+
note: All info can be found <a href='https://iccv.thecvf.com/Conferences/2025/CallForPapers'>here</a>.
|
| 587 |
tags:
|
| 588 |
- machine-learning
|
| 589 |
- computer-vision
|
| 590 |
rankings: 'CCF: A, CORE: A*, THCPL: A'
|
| 591 |
+
abstract_deadline: '2025-03-03 23:59:59'
|
| 592 |
rebuttal_period_start: '2025-05-10'
|
| 593 |
rebuttal_period_end: '2025-05-16'
|
| 594 |
final_decision_date: '2025-06-20'
|
src/pages/Index.tsx
CHANGED
|
@@ -12,6 +12,8 @@ import { Button } from "@/components/ui/button";
|
|
| 12 |
import { Checkbox } from "@/components/ui/checkbox";
|
| 13 |
import { X, ChevronRight, Filter, Globe } from "lucide-react";
|
| 14 |
import { getAllCountries } from "@/utils/countryExtractor";
|
|
|
|
|
|
|
| 15 |
|
| 16 |
const Index = () => {
|
| 17 |
const [selectedTags, setSelectedTags] = useState<Set<string>>(new Set());
|
|
@@ -64,9 +66,19 @@ const Index = () => {
|
|
| 64 |
return matchesTags && matchesCountry && matchesSearch;
|
| 65 |
})
|
| 66 |
.sort((a: Conference, b: Conference) => {
|
| 67 |
-
const
|
| 68 |
-
const
|
| 69 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 70 |
});
|
| 71 |
}, [selectedTags, selectedCountries, searchQuery, showPastConferences]);
|
| 72 |
|
|
|
|
| 12 |
import { Checkbox } from "@/components/ui/checkbox";
|
| 13 |
import { X, ChevronRight, Filter, Globe } from "lucide-react";
|
| 14 |
import { getAllCountries } from "@/utils/countryExtractor";
|
| 15 |
+
import { getDeadlineInLocalTime } from "@/utils/dateUtils";
|
| 16 |
+
import { sortConferencesByDeadline } from "@/utils/conferenceUtils";
|
| 17 |
|
| 18 |
const Index = () => {
|
| 19 |
const [selectedTags, setSelectedTags] = useState<Set<string>>(new Set());
|
|
|
|
| 66 |
return matchesTags && matchesCountry && matchesSearch;
|
| 67 |
})
|
| 68 |
.sort((a: Conference, b: Conference) => {
|
| 69 |
+
const aDeadline = getDeadlineInLocalTime(a.deadline, a.timezone);
|
| 70 |
+
const bDeadline = getDeadlineInLocalTime(b.deadline, b.timezone);
|
| 71 |
+
|
| 72 |
+
if (aDeadline && bDeadline) {
|
| 73 |
+
return aDeadline.getTime() - bDeadline.getTime();
|
| 74 |
+
}
|
| 75 |
+
|
| 76 |
+
// Handle cases where one or both deadlines are invalid
|
| 77 |
+
if (!aDeadline && !bDeadline) return 0;
|
| 78 |
+
if (!aDeadline) return 1;
|
| 79 |
+
if (!bDeadline) return -1;
|
| 80 |
+
|
| 81 |
+
return 0;
|
| 82 |
});
|
| 83 |
}, [selectedTags, selectedCountries, searchQuery, showPastConferences]);
|
| 84 |
|
src/utils/conferenceUtils.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { Conference } from "@/types/conference";
|
| 2 |
+
import { getDeadlineInLocalTime } from './dateUtils';
|
| 3 |
+
|
| 4 |
+
/**
|
| 5 |
+
* Sort conferences by their adjusted deadline (accounting for timezone)
|
| 6 |
+
*/
|
| 7 |
+
export function sortConferencesByDeadline(conferences: Conference[]): Conference[] {
|
| 8 |
+
return [...conferences].sort((a, b) => {
|
| 9 |
+
const aDeadline = getDeadlineInLocalTime(a.deadline, a.timezone);
|
| 10 |
+
const bDeadline = getDeadlineInLocalTime(b.deadline, b.timezone);
|
| 11 |
+
|
| 12 |
+
// If either date is invalid, place it later in the list
|
| 13 |
+
if (!aDeadline || !bDeadline) {
|
| 14 |
+
if (!aDeadline && !bDeadline) return 0;
|
| 15 |
+
if (!aDeadline) return 1;
|
| 16 |
+
if (!bDeadline) return -1;
|
| 17 |
+
}
|
| 18 |
+
|
| 19 |
+
// Both dates are valid, compare them
|
| 20 |
+
if (aDeadline && bDeadline) {
|
| 21 |
+
return aDeadline.getTime() - bDeadline.getTime();
|
| 22 |
+
}
|
| 23 |
+
|
| 24 |
+
return 0;
|
| 25 |
+
});
|
| 26 |
+
}
|