Spaces:
Running
Running
Update deadlines
Browse files- README.md +1 -1
- src/data/conferences.yml +16 -4
- src/pages/Index.tsx +7 -20
- src/utils/dateUtils.ts +12 -4
README.md
CHANGED
|
@@ -16,7 +16,7 @@ This helps researchers in quickly seeing when to submit their paper.
|
|
| 16 |
|
| 17 |
Note: papers can be submitted at any time to [hf.co/papers](https://hf.co/papers) at [hf.co/papers/submit](https://hf.co/papers/submit), assuming the paper is available on [Arxiv](https://arxiv.org/).
|
| 18 |
|
| 19 |
-
The benefit of hf.co/papers is that it allows people to quickly find related artifacts, such as models, datasets and demos. See [this paper page](https://huggingface.co/papers/2502.04328) as a nice example - it has 3 models, 1 dataset and 1 demo linked.
|
| 20 |
|
| 21 |
## Project info
|
| 22 |
|
|
|
|
| 16 |
|
| 17 |
Note: papers can be submitted at any time to [hf.co/papers](https://hf.co/papers) at [hf.co/papers/submit](https://hf.co/papers/submit), assuming the paper is available on [Arxiv](https://arxiv.org/).
|
| 18 |
|
| 19 |
+
The benefit of [hf.co/papers](https://hf.co/papers) is that it allows people to quickly find related artifacts, such as models, datasets and demos. See [this paper page](https://huggingface.co/papers/2502.04328) as a nice example - it has 3 models, 1 dataset and 1 demo linked.
|
| 20 |
|
| 21 |
## Project info
|
| 22 |
|
src/data/conferences.yml
CHANGED
|
@@ -68,8 +68,12 @@
|
|
| 68 |
id: icassp26
|
| 69 |
full_name: International Conference on Acoustics, Speech and Signal Processing
|
| 70 |
link: https://2026.ieeeicassp.org
|
| 71 |
-
|
| 72 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 73 |
city: Barcelona
|
| 74 |
country: Spain
|
| 75 |
venue: Barcelona International Convention Center (CCIB), Barcelona, Spain
|
|
@@ -295,7 +299,11 @@
|
|
| 295 |
id: icassp25
|
| 296 |
full_name: International Conference on Acoustics, Speech and Signal Processing
|
| 297 |
link: https://2025.ieeeicassp.org/
|
| 298 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 299 |
timezone: UTC-12
|
| 300 |
city: Hyderabad
|
| 301 |
country: India
|
|
@@ -1061,7 +1069,11 @@
|
|
| 1061 |
id: icra26
|
| 1062 |
full_name: International Conference on Robotics and Automation
|
| 1063 |
link: https://2026.ieee-icra.org/
|
| 1064 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1065 |
timezone: PST
|
| 1066 |
city: Vienna
|
| 1067 |
country: Austria
|
|
|
|
| 68 |
id: icassp26
|
| 69 |
full_name: International Conference on Acoustics, Speech and Signal Processing
|
| 70 |
link: https://2026.ieeeicassp.org
|
| 71 |
+
deadlines:
|
| 72 |
+
- type: submission
|
| 73 |
+
label: Paper Submission
|
| 74 |
+
date: '2025-09-18 08:59:59'
|
| 75 |
+
timezone: GMT+02
|
| 76 |
+
timezone: GMT+02
|
| 77 |
city: Barcelona
|
| 78 |
country: Spain
|
| 79 |
venue: Barcelona International Convention Center (CCIB), Barcelona, Spain
|
|
|
|
| 299 |
id: icassp25
|
| 300 |
full_name: International Conference on Acoustics, Speech and Signal Processing
|
| 301 |
link: https://2025.ieeeicassp.org/
|
| 302 |
+
deadlines:
|
| 303 |
+
- type: submission
|
| 304 |
+
label: Paper Submission
|
| 305 |
+
date: '2025-09-18 08:59:59'
|
| 306 |
+
timezone: GMT+02
|
| 307 |
timezone: UTC-12
|
| 308 |
city: Hyderabad
|
| 309 |
country: India
|
|
|
|
| 1069 |
id: icra26
|
| 1070 |
full_name: International Conference on Robotics and Automation
|
| 1071 |
link: https://2026.ieee-icra.org/
|
| 1072 |
+
deadlines:
|
| 1073 |
+
- type: submission
|
| 1074 |
+
label: Paper Submission
|
| 1075 |
+
date: '2025-09-15 23:59:59'
|
| 1076 |
+
timezone: GMT-08
|
| 1077 |
timezone: PST
|
| 1078 |
city: Vienna
|
| 1079 |
country: Austria
|
src/pages/Index.tsx
CHANGED
|
@@ -14,6 +14,7 @@ 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());
|
|
@@ -43,12 +44,10 @@ const Index = () => {
|
|
| 43 |
return [];
|
| 44 |
}
|
| 45 |
|
| 46 |
-
|
| 47 |
.filter((conf: Conference) => {
|
| 48 |
-
// Filter by deadline (past/future)
|
| 49 |
-
|
| 50 |
-
const isUpcoming = !deadlineDate || !isValid(deadlineDate) || !isPast(deadlineDate);
|
| 51 |
-
if (!showPastConferences && !isUpcoming) return false;
|
| 52 |
|
| 53 |
// Filter by tags
|
| 54 |
const matchesTags = selectedTags.size === 0 ||
|
|
@@ -64,22 +63,10 @@ const Index = () => {
|
|
| 64 |
(conf.full_name && conf.full_name.toLowerCase().includes(searchQuery.toLowerCase()));
|
| 65 |
|
| 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 |
|
| 85 |
// Update handleTagsChange to handle multiple tags
|
|
|
|
| 14 |
import { getAllCountries } from "@/utils/countryExtractor";
|
| 15 |
import { getDeadlineInLocalTime } from "@/utils/dateUtils";
|
| 16 |
import { sortConferencesByDeadline } from "@/utils/conferenceUtils";
|
| 17 |
+
import { hasUpcomingDeadlines } from "@/utils/deadlineUtils";
|
| 18 |
|
| 19 |
const Index = () => {
|
| 20 |
const [selectedTags, setSelectedTags] = useState<Set<string>>(new Set());
|
|
|
|
| 44 |
return [];
|
| 45 |
}
|
| 46 |
|
| 47 |
+
const filtered = conferencesData
|
| 48 |
.filter((conf: Conference) => {
|
| 49 |
+
// Filter by deadline (past/future) - use new deadline logic
|
| 50 |
+
if (!showPastConferences && !hasUpcomingDeadlines(conf)) return false;
|
|
|
|
|
|
|
| 51 |
|
| 52 |
// Filter by tags
|
| 53 |
const matchesTags = selectedTags.size === 0 ||
|
|
|
|
| 63 |
(conf.full_name && conf.full_name.toLowerCase().includes(searchQuery.toLowerCase()));
|
| 64 |
|
| 65 |
return matchesTags && matchesCountry && matchesSearch;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 66 |
});
|
| 67 |
+
|
| 68 |
+
// Use the proper sorting function that handles both deadline formats
|
| 69 |
+
return sortConferencesByDeadline(filtered);
|
| 70 |
}, [selectedTags, selectedCountries, searchQuery, showPastConferences]);
|
| 71 |
|
| 72 |
// Update handleTagsChange to handle multiple tags
|
src/utils/dateUtils.ts
CHANGED
|
@@ -22,13 +22,21 @@ export const getDeadlineInLocalTime = (deadline: string | undefined, timezone: s
|
|
| 22 |
// Handle AoE (Anywhere on Earth) timezone
|
| 23 |
if (tz === 'AoE') return '-12:00';
|
| 24 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 25 |
// If it's already an IANA timezone, return as is
|
| 26 |
-
if (!tz.toUpperCase().startsWith('UTC')) return tz;
|
| 27 |
|
| 28 |
// Convert UTC±XX to proper format
|
| 29 |
-
const
|
| 30 |
-
if (
|
| 31 |
-
const [, sign, hours] =
|
| 32 |
const paddedHours = hours.padStart(2, '0');
|
| 33 |
return `${sign}${paddedHours}:00`;
|
| 34 |
}
|
|
|
|
| 22 |
// Handle AoE (Anywhere on Earth) timezone
|
| 23 |
if (tz === 'AoE') return '-12:00';
|
| 24 |
|
| 25 |
+
// Handle GMT±XX format
|
| 26 |
+
const gmtMatch = tz.match(/^GMT([+-])(\d+)$/);
|
| 27 |
+
if (gmtMatch) {
|
| 28 |
+
const [, sign, hours] = gmtMatch;
|
| 29 |
+
const paddedHours = hours.padStart(2, '0');
|
| 30 |
+
return `${sign}${paddedHours}:00`;
|
| 31 |
+
}
|
| 32 |
+
|
| 33 |
// If it's already an IANA timezone, return as is
|
| 34 |
+
if (!tz.toUpperCase().startsWith('UTC') && !tz.toUpperCase().startsWith('GMT')) return tz;
|
| 35 |
|
| 36 |
// Convert UTC±XX to proper format
|
| 37 |
+
const utcMatch = tz.match(/^UTC([+-])(\d+)$/);
|
| 38 |
+
if (utcMatch) {
|
| 39 |
+
const [, sign, hours] = utcMatch;
|
| 40 |
const paddedHours = hours.padStart(2, '0');
|
| 41 |
return `${sign}${paddedHours}:00`;
|
| 42 |
}
|