diff --git a/src/components/MicroCountdownTimer/index.js b/src/components/MicroCountdownTimer/index.js
index af70214..a1c816d 100644
--- a/src/components/MicroCountdownTimer/index.js
+++ b/src/components/MicroCountdownTimer/index.js
@@ -29,7 +29,7 @@ const MicroCountdownTimer = () => {
}, []);
if (timeLeft.days === 0) {
- return
-
- Ideas
{ideaCount || 0}
-
-
+ Ideas
{ideaCount || 0}
+
+ )}
+ {/*
- Projects
{projectCount || 0}
-
-
{projectCount || 0}
+ */}
+ {this.state.showMyStuffTab && (
+
+ My Stuff
{myProjectsCount || 0}
+
+ )}
+ {/*
- My Stuff
{myProjectsCount || 0}
-
+ My Votes
{myVotesCount || 0}
+ */}
+
+ {this.shouldShowRegionToggle() ? (
+
+
+
+
+
+
+
+ ) : (
+
+
+
+ )}
{this.state.isWide && (
@@ -378,11 +568,56 @@ class ProjectList extends Component {
projectList,
userList,
groupsList,
+ year,
} = this.props;
if (!groupsList) {
groupsList = {};
}
let projects = mapObject(projectList);
+
+ // Apply region filtering for closed years
+ if (this.state.selectedRegion !== 'all') {
+ if (this.state.selectedRegion === 'west') {
+ projects = projects.filter((project) => {
+ const group = groupsList[project.group];
+ return (
+ group &&
+ (group.name.toLowerCase().includes('west') ||
+ group.name.toLowerCase().includes('california') ||
+ group.name.toLowerCase().includes('seattle'))
+ );
+ });
+ } else if (this.state.selectedRegion === 'east') {
+ projects = projects.filter((project) => {
+ const group = groupsList[project.group];
+ return (
+ group &&
+ (group.name.toLowerCase().includes('east') ||
+ group.name.toLowerCase().includes('new york') ||
+ group.name.toLowerCase().includes('boston'))
+ );
+ });
+ } else if (this.state.selectedRegion === 'europe') {
+ projects = projects.filter((project) => {
+ const group = groupsList[project.group];
+ return (
+ group &&
+ (group.name.toLowerCase().includes('europe') ||
+ group.name.toLowerCase().includes('london') ||
+ group.name.toLowerCase().includes('berlin'))
+ );
+ });
+ } else if (this.state.selectedRegion === 'my-votes') {
+ // Filter for projects the user has voted on
+ const userVotes = this.props.year
+ ? getAuthUserVotes(auth.uid, this.props.year.votes)
+ : [];
+ projects = projects.filter((project) =>
+ userVotes.some((vote) => vote.project === project.key)
+ );
+ }
+ }
+
let winningProjects = [];
let otherProjects = [];
@@ -395,6 +630,17 @@ class ProjectList extends Component {
});
let awardCategoryOptions = getAwardCategories(awardCategoryList);
+ let userVotes = this.props.year
+ ? getAuthUserVotes(auth.uid, this.props.year.votes)
+ : [];
+
+ // Get projects the user has voted on
+ let myVotedProjects = [];
+ if (userVotes.length > 0) {
+ myVotedProjects = projects.filter((project) =>
+ userVotes.some((vote) => vote.project === project.key)
+ );
+ }
if (this.state.groupFilter) {
if (this.state.groupFilter.value === '') {
@@ -411,6 +657,7 @@ class ProjectList extends Component {
const showIdeas = !showParam || showParam === 'ideas';
const showProjects = showParam === 'projects';
const showMyProjects = showParam === 'my-projects';
+ const showMyVotes = showParam === 'my-votes';
let viewStyle = viewParam === 'grid' ? 'grid' : 'list';
if (!this.state.isWide) viewStyle = 'list';
@@ -430,10 +677,16 @@ class ProjectList extends Component {
showIdeas,
showProjects,
showMyProjects,
+ showMyVotes,
ideaCount: projectIdeas.length,
projectCount: actualProjects.length,
myProjectsCount: myProjects.length,
+ myVotesCount: userVotes.length,
viewStyle,
+ westCoastCount: this.state.regionCounts.westCoast,
+ eastCoastCount: this.state.regionCounts.eastCoast,
+ europeCount: this.state.regionCounts.europe,
+ allProjectsCount: this.state.regionCounts.allProjects,
})}
{showIdeas && projectIdeas.length > 0 && (
@@ -444,6 +697,7 @@ class ProjectList extends Component {
v.project === project.key)}
firebase={firebase}
project={project}
awardCategoryOptions={awardCategoryOptions}
@@ -461,6 +715,7 @@ class ProjectList extends Component {
v.project === project.key)}
firebase={firebase}
project={project}
awardCategoryOptions={awardCategoryOptions}
@@ -484,6 +739,7 @@ class ProjectList extends Component {
v.project === project.key)}
firebase={firebase}
project={project}
awardCategoryOptions={awardCategoryOptions}
@@ -501,6 +757,7 @@ class ProjectList extends Component {
v.project === project.key)}
firebase={firebase}
project={project}
awardCategoryOptions={awardCategoryOptions}
@@ -516,6 +773,48 @@ class ProjectList extends Component {
)}
+ {showMyVotes && myVotedProjects.length > 0 && (
+
+ {viewStyle === 'grid' ? (
+
+ {myVotedProjects.map((project) => (
+ v.project === project.key)}
+ firebase={firebase}
+ project={project}
+ awardCategoryOptions={awardCategoryOptions}
+ awardList={awardList}
+ userList={userList}
+ group={{id: project.group, ...groupsList[project.group]}}
+ submissionsClosed={submissionsClosed}
+ isOlderYear={isOlderYear}
+ />
+ ))}
+
+ ) : (
+
+ {myVotedProjects.map((project) => (
+ v.project === project.key)}
+ firebase={firebase}
+ project={project}
+ awardCategoryOptions={awardCategoryOptions}
+ awardList={awardList}
+ userList={userList}
+ group={{id: project.group, ...groupsList[project.group]}}
+ submissionsClosed={submissionsClosed}
+ isOlderYear={isOlderYear}
+ />
+ ))}
+
+ )}
+
+ )}
+
{showProjects && (
{!!winningProjects.length && (
@@ -527,6 +826,7 @@ class ProjectList extends Component {
v.project === project.key)}
firebase={firebase}
project={project}
awardCategoryOptions={awardCategoryOptions}
@@ -544,6 +844,7 @@ class ProjectList extends Component {
v.project === project.key)}
firebase={firebase}
project={project}
awardCategoryOptions={awardCategoryOptions}
@@ -568,6 +869,7 @@ class ProjectList extends Component {
v.project === project.key)}
firebase={firebase}
project={project}
awardCategoryOptions={awardCategoryOptions}
@@ -585,6 +887,7 @@ class ProjectList extends Component {
v.project === project.key)}
firebase={firebase}
project={project}
awardCategoryOptions={awardCategoryOptions}
@@ -611,6 +914,7 @@ class ProjectList extends Component {
v.project === project.key)}
firebase={firebase}
project={project}
awardCategoryOptions={awardCategoryOptions}
@@ -628,6 +932,7 @@ class ProjectList extends Component {
v.project === project.key)}
firebase={firebase}
project={project}
awardCategoryOptions={awardCategoryOptions}
@@ -673,6 +978,53 @@ class ProjectList extends Component {
}
let projects = mapObject(projectList);
+
+ // Apply region filtering
+ if (this.state.selectedRegion !== 'all') {
+ if (this.state.selectedRegion === 'west') {
+ projects = projects.filter((project) => {
+ // Filter for West Coast projects - you can customize this logic
+ const group = groupsList[project.group];
+ return (
+ group &&
+ (group.name.toLowerCase().includes('west') ||
+ group.name.toLowerCase().includes('california') ||
+ group.name.toLowerCase().includes('seattle'))
+ );
+ });
+ } else if (this.state.selectedRegion === 'east') {
+ projects = projects.filter((project) => {
+ // Filter for East Coast projects
+ const group = groupsList[project.group];
+ return (
+ group &&
+ (group.name.toLowerCase().includes('east') ||
+ group.name.toLowerCase().includes('new york') ||
+ group.name.toLowerCase().includes('boston'))
+ );
+ });
+ } else if (this.state.selectedRegion === 'europe') {
+ projects = projects.filter((project) => {
+ // Filter for Europe projects
+ const group = groupsList[project.group];
+ return (
+ group &&
+ (group.name.toLowerCase().includes('europe') ||
+ group.name.toLowerCase().includes('london') ||
+ group.name.toLowerCase().includes('berlin'))
+ );
+ });
+ } else if (this.state.selectedRegion === 'my-votes') {
+ // Filter for projects the user has voted on
+ const userVotes = this.props.year
+ ? getAuthUserVotes(auth.uid, this.props.year.votes)
+ : [];
+ projects = projects.filter((project) =>
+ userVotes.some((vote) => vote.project === project.key)
+ );
+ }
+ }
+
if (this.state.groupFilter) {
if (this.state.groupFilter.value === '') {
projects = projects.filter((project) => !project.group);
@@ -697,34 +1049,50 @@ class ProjectList extends Component {
const showIdeas = !showParam || showParam === 'ideas';
const showProjects = showParam === 'projects';
const showMyProjects = showParam === 'my-projects';
+ const showMyVotes = showParam === 'my-votes';
let viewStyle = viewParam === 'grid' ? 'grid' : 'list';
if (!this.state.isWide) viewStyle = 'list';
+ let userVotes = this.props.year
+ ? getAuthUserVotes(auth.uid, this.props.year.votes)
+ : [];
+ let awardCategoryOptions = getAwardCategories(awardCategoryList);
+
+ // Get projects the user has voted on
+ let myVotedProjects = [];
+ if (userVotes.length > 0) {
+ myVotedProjects = projects.filter((project) =>
+ userVotes.some((vote) => vote.project === project.key)
+ );
+ }
+
const hasAnyProjects = projectsLFH.length > 0 || otherProjects.length > 0;
const hasAnyIdeas = projectIdeas.length > 0;
const hasAnyMyProjects = myProjects.length > 0;
-
- let userVotes = year ? getAuthUserVotes(auth.uid, year.votes) : [];
- let awardCategoryOptions = getAwardCategories(awardCategoryList);
+ const hasAnyMyVotes = myVotedProjects.length > 0;
let emptyState = null;
- if (showProjects && !hasAnyProjects) {
+ if ((showMyVotes || this.state.selectedRegion === 'my-votes') && !hasAnyMyVotes) {
emptyState = (
- Oops! No projects have been created yet for this year!
+ No votes cast yet! Start voting on projects to see them here.
);
- }
- if (showIdeas && !hasAnyIdeas) {
+ } else if (showMyProjects && !hasAnyMyProjects) {
+ emptyState = (
+
+ Oops! You don't have any projects yet! Create, claim or join a project!
+
+ );
+ } else if (showIdeas && !hasAnyIdeas) {
emptyState = (
Oops! No project ideas have been submitted yet for this year!
);
- }
- if (showMyProjects && !hasAnyMyProjects) {
+ } else if (showProjects && !hasAnyProjects) {
emptyState = (
- Oops! You don't have any projects yet! Create, claim or join a project!
+ Oops! No projects have been created yet for this year!
);
}
@@ -735,10 +1103,16 @@ class ProjectList extends Component {
showIdeas,
showProjects,
showMyProjects,
+ showMyVotes,
ideaCount: projectIdeas.length,
projectCount: projectsLFH.length + otherProjects.length,
myProjectsCount: myProjects.length,
+ myVotesCount: userVotes.length,
viewStyle,
+ westCoastCount: this.state.regionCounts.westCoast,
+ eastCoastCount: this.state.regionCounts.eastCoast,
+ europeCount: this.state.regionCounts.europe,
+ allProjectsCount: this.state.regionCounts.allProjects,
})}
{emptyState}
@@ -827,6 +1201,48 @@ class ProjectList extends Component {
)}
+ {showMyVotes && myVotedProjects.length > 0 && (
+
+ {viewStyle === 'grid' ? (
+
+ {myVotedProjects.map((project) => (
+ v.project === project.key)}
+ firebase={firebase}
+ project={project}
+ awardCategoryOptions={awardCategoryOptions}
+ awardList={awardList}
+ userList={userList}
+ group={{id: project.group, ...groupsList[project.group]}}
+ submissionsClosed={submissionsClosed}
+ isOlderYear={isOlderYear}
+ />
+ ))}
+
+ ) : (
+
+ {myVotedProjects.map((project) => (
+ v.project === project.key)}
+ firebase={firebase}
+ project={project}
+ awardCategoryOptions={awardCategoryOptions}
+ awardList={awardList}
+ userList={userList}
+ group={{id: project.group, ...groupsList[project.group]}}
+ submissionsClosed={submissionsClosed}
+ isOlderYear={isOlderYear}
+ />
+ ))}
+
+ )}
+
+ )}
+
{showProjects && projectsLFH.length + otherProjects.length > 0 && (
{viewStyle === 'grid' ? (
@@ -912,7 +1328,7 @@ class ProjectList extends Component {
currentYear={this.props.params.year || currentYear}
showAddProjectButton={!year.submissionsClosed}
/>
-
+ {/*
Submit your demo videos{' '}
{' '}
in your group's folder.
-
+ */}
{this.renderBody(year)}
);