Skip to content
This repository was archived by the owner on Aug 26, 2022. It is now read-only.

Commit 7fae9c6

Browse files
author
Max Leiter
committed
Merge branch 'staging' of github.com:HackSC/odyssey into staging
2 parents 689b0c6 + 18017cc commit 7fae9c6

File tree

12 files changed

+163
-32
lines changed

12 files changed

+163
-32
lines changed

.circleci/config.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@ jobs:
3737
success_message: ":tada: A $CIRCLE_JOB job has succeeded for $CIRCLE_PROJECT_REPONAME on the $CIRCLE_BRANCH branch! Triggered by: $CIRCLE_USERNAME :rocket:"
3838
workflows:
3939
version: 2.1
40-
e2e_tests:
41-
jobs:
42-
- E2ETest
40+
# e2e_tests:
41+
# jobs:
42+
# - E2ETest
4343
build:
4444
jobs:
4545
- build

api/announcements.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ router.get("/:role", async (req, res) => {
1313
announcements = await models.Announcement.findAll({
1414
where: {
1515
target: role,
16-
},
16+
}
1717
});
1818
} else {
1919
announcements = await models.Announcement.findAll({});

api/slackAnnouncement.js

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
const express = require("express");
2+
const router = express.Router();
3+
4+
router.post("/", async (req, res) => {
5+
const url_route = process.env.URL_BASE + "api/announcements";
6+
const slackId = req.body.user_id.replace(" ", "");
7+
const cmd = req.body.command;
8+
let announcement = {};
9+
let organizer_ids = [
10+
"U01N1S6214J",
11+
"U01NVG2GNJV",
12+
"U01NDPEMFQD",
13+
"U01NYKU45BN",
14+
"U01MX41UM9Q",
15+
"U01NPCJAF7X",
16+
"U01NFSECVPV",
17+
"U01P5G8GPC0",
18+
"U01P6MBPRRN",
19+
"U01N23B0DE3",
20+
"U01NUA44R7T",
21+
"U01NDP9TFFF",
22+
"U01NLR1KNGY",
23+
"U01LT1NJ3M2",
24+
"U01NA34EVT8",
25+
"U01NMRMB0Q4",
26+
"U01P6N75QEL",
27+
"U01NKTTC8J2",
28+
"U01NRMFTESU",
29+
"U01NH2NJ3BM",
30+
"U01NH2MR3EF",
31+
"U01NA368B8E",
32+
];
33+
if (organizer_ids.indexOf(slackId) > -1) {
34+
const target = cmd.replace("/", "").replace(" ", "");
35+
let roles = [
36+
"hacker",
37+
"admin",
38+
"sponsor",
39+
"volunteer",
40+
"superadmin",
41+
"judge",
42+
];
43+
44+
let isValid = false;
45+
for (let i = 0; i < roles.length; i++) {
46+
if (roles[i] == target) {
47+
isValid = true;
48+
break;
49+
}
50+
}
51+
52+
if (!isValid) {
53+
responseText =
54+
"Your command was not valid. \
55+
Please ensure you're using one of the following commands: \
56+
/hacker, /admin, /sponsor, /volunteer, /superadmin, /judge";
57+
return responseText;
58+
} else {
59+
announcement["target"] = target;
60+
announcement["text"] = req.body.text;
61+
announcement["from"] = req.body.user_name;
62+
announcement["img"] = "";
63+
}
64+
65+
try {
66+
await fetch(url_route, {
67+
method: "POST",
68+
body: JSON.stringify(announcement),
69+
headers: {
70+
"Content-Type": "application/json",
71+
},
72+
});
73+
} catch (error) {
74+
console.error(error);
75+
return res.json({ text: "Failed to send Announcement." });
76+
}
77+
return res.json({ text: "Announcement sent successfully!" });
78+
} else {
79+
return res.json({ text: "Invalid Slack user." });
80+
}
81+
});
82+
83+
module.exports = router;

assets/hacksc-white.png

93.6 KB
Loading

components/hackerDashboard/Dashboard.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ const Empty = styled.div`
8383

8484
const Container = styled.div`
8585
width: 100vw;
86-
height: 100vh;
86+
height: auto;
8787
display: grid;
8888
grid-template-columns: 0.6fr 1.3fr 0.9fr 0.6fr;
8989
grid-template-rows: 0.4fr 1fr 1.4fr 0.6fr;

components/hackerDashboard/layout/Header.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import styled from "styled-components";
22
import Image from "next/image";
33

44
// import Logo from "@/assets/header_logo_21_transparent.png";
5-
import Logo from "@/assets/logo.png";
5+
import Logo from "@/assets/hacksc-white.png";
66

77
type Props = {
88
text?: string;
@@ -15,7 +15,7 @@ const DashHeader = ({ text }: Props) => {
1515
<Title>HackSC 2021</Title>
1616
) : (
1717
<LogoWrapper>
18-
<Image src={Logo} width="220%" height="100%" alt="" />
18+
<Image src={Logo} width="240%" height="85%" alt="" />
1919
</LogoWrapper>
2020
)}
2121
</Header>

components/hackerDashboard/widgets/sidebar/events.tsx

Lines changed: 35 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,26 @@ import moment from "moment-timezone";
33
import { useEffect } from "react";
44

55
const HackathonEvents = ({ events }) => {
6-
const currentDate = moment.tz(moment(), "UTC");
6+
const currentDate = moment.utc().subtract(8, "hour");
77

88
let nextEvent;
99
for (let i = 0; i < events.length; i++) {
1010
nextEvent = events[i].id;
1111
if (
12-
moment(events[i].endsAt) > currentDate ||
13-
moment(events[i].startsAt) > currentDate
12+
moment.utc(events[i].endsAt) > currentDate ||
13+
moment.utc(events[i].startsAt) > currentDate
1414
) {
1515
break;
1616
}
1717
}
1818

19-
// useEffect(() => {
20-
// if (nextEvent) {
21-
// document.getElementById("eventList").scrollTop = document.getElementById(
22-
// nextEvent
23-
// ).offsetTop;
24-
// }
25-
// }, []);
19+
useEffect(() => {
20+
if (nextEvent) {
21+
document.getElementById("eventList").scrollTop = document.getElementById(
22+
nextEvent
23+
).offsetTop;
24+
}
25+
}, []);
2626

2727
return (
2828
<div>
@@ -35,22 +35,42 @@ const HackathonEvents = ({ events }) => {
3535
style={
3636
moment(e.endsAt) > currentDate
3737
? { color: "#FFFFFF" }
38-
: { color: "#FFFFFF" }
38+
: { color: "#7E7E7E" }
3939
}
4040
>
4141
<h3
4242
style={
4343
moment(e.endsAt) > currentDate
4444
? { color: "#FF8379" }
45-
: { color: "#FF8379" }
45+
: { color: "#7E7E7E" }
4646
}
4747
>
4848
{e.name}
4949
</h3>
5050
<p>{e.description}</p>
51-
<p>{moment.utc(e.startsAt).format("MMM D, h:mm a")}</p>
52-
<p>{moment.utc(e.endsAt).format("MMM D, h:mm a")}</p>
53-
{e.zoomUrl ? <a href={e.zoomUrl}>Join Zoom Meeting</a> : null}
51+
{moment(e.startsAt).isSame(e.endsAt, "day") ? (
52+
<p>
53+
{moment.utc(e.startsAt).format("MMM D, h:mm")} -{" "}
54+
{moment.utc(e.endsAt).format("h:mm a")}
55+
</p>
56+
) : (
57+
<p>
58+
{moment.utc(e.startsAt).format("MMM D, h:mm a")} -{" "}
59+
{moment.utc(e.endsAt).format("MMM D, h:mm a")}
60+
</p>
61+
)}
62+
{e.zoomUrl ? (
63+
<a
64+
href={e.zoomUrl}
65+
style={
66+
moment(e.endsAt) > currentDate
67+
? { color: "#FF8379" }
68+
: { color: "#7E7E7E" }
69+
}
70+
>
71+
Join Zoom Meeting
72+
</a>
73+
) : null}
5474
</Event>
5575
))}
5676
</EventList>

components/hackerDashboard/widgets/updates.tsx

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import Logo from "@/assets/hackscFox.png";
66
const UpdatesWidget = ({ profile, announcements }) => {
77
const items = [];
88
if (announcements != null) {
9-
for (let i = 0; i < announcements.length; i++) {
9+
for (let i = announcements.length - 1; i >= 0; i--) {
1010
const target = announcements[i].target;
1111
if (target != profile.role) {
1212
continue;
@@ -19,11 +19,11 @@ const UpdatesWidget = ({ profile, announcements }) => {
1919
}
2020
}
2121
return (
22-
<div>
22+
<>
2323
<Header>Announcements</Header>
2424
<AfterHeader>from Slack</AfterHeader>
2525
<UpdateList>{items}</UpdateList>
26-
</div>
26+
</>
2727
);
2828
};
2929

@@ -57,7 +57,6 @@ const AfterHeader = styled.h3`
5757
`;
5858

5959
const UpdateList = styled.div`
60-
width: 100%;
6160
max-height: 400px;
6261
overflow: hidden;
6362
overflow-y: scroll;
@@ -66,20 +65,23 @@ const UpdateList = styled.div`
6665
const UpdateItem = styled.div`
6766
border-bottom: 1px solid #4a96f0;
6867
margin: 16px 0;
69-
height: 55px;
68+
padding-bottom: 10px;
69+
height: auto;
70+
width: auto;
7071
display: flex;
7172
align-items: center;
7273
`;
7374

7475
const UpdateImg = styled.div`
7576
display: inline-block;
76-
width: 45px;
77+
min-width: 45px;
7778
height: 45px;
7879
border-radius: 50%;
7980
`;
8081

8182
const UpdateInfo = styled.div`
8283
margin-left: 20px;
84+
width: 100%;
8385
`;
8486

8587
const UpdateFrom = styled.div`
@@ -88,10 +90,12 @@ const UpdateFrom = styled.div`
8890
line-height: 23px;
8991
`;
9092

91-
const UpdateText = styled.div`
93+
const UpdateText = styled.p`
94+
width: auto;
9295
font-size: 14px;
9396
line-height: 16px;
9497
letter-spacing: 1px;
98+
word-wrap: break-word;
9599
`;
96100

97101
export default UpdatesWidget;

express.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ const publicRouter = require("./api/public");
2727
const matchingRouter = require("./api/teamMatching");
2828
const announcementsRouter = require("./api/announcements");
2929
const linkSlackRouter = require("./api/linkSlack");
30+
const slackAnnouncementRouter = require("./api/slackAnnouncement");
3031
const submitProjectRouter = require("./api/submitProject");
3132
const fileUpload = require("express-fileupload");
3233
const dotenv = require("dotenv");
@@ -99,6 +100,7 @@ server.use("/api/teamMatching", matchingRouter);
99100
server.use("/api/announcements", announcementsRouter);
100101
server.use("/api/linkSlack", linkSlackRouter);
101102
server.use("/api/submitProject", submitProjectRouter);
103+
server.use("/api/slackAnnouncement", slackAnnouncementRouter);
102104

103105
server.post("/api/scan", (req, res) => {
104106
console.info("Scanned: ", req.body.code);
@@ -124,6 +126,7 @@ server.use("/admin/api/unlockable", battlepassRouter);
124126
server.use("/admin/api/hacker/live", hackerLiveRouter);
125127
server.use("/admin/api/prize", prizeRouter);
126128
server.use("/admin/api/public", publicRouter);
129+
server.use("/admin/api/slackAnnouncement", slackAnnouncementRouter);
127130

128131
server.post("/admin/api/scan", (req, res) => {
129132
console.info("Scanned: ", req.body.code);

pages/admin/tickets.tsx

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ const Tickets = ({ profile }) => {
2121
const [tickets, setTickets] = useState("0");
2222
const [error, setError] = useState("");
2323
const [success, setSuccess] = useState(false);
24+
const [message, setMessage] = useState("");
2425

2526
const giveTickets = async (e) => {
2627
e.preventDefault();
@@ -50,6 +51,16 @@ const Tickets = ({ profile }) => {
5051
} else {
5152
setError("");
5253
setSuccess(true);
54+
setMessage(
55+
(email ? email : firstName + lastName) +
56+
" successfully given " +
57+
tickets +
58+
" tickets! :)"
59+
);
60+
setFirstName("");
61+
setLastName("");
62+
setTickets("");
63+
setEmail("");
5364
}
5465
return data;
5566
} catch (e) {
@@ -101,8 +112,12 @@ const Tickets = ({ profile }) => {
101112
/>
102113
<Button type="submit">Give tickets</Button>
103114
</form>
104-
{error && error}
105-
{success && <h3>Success!</h3>}
115+
<StatusMessage
116+
style={error ? { color: "#ff0000" } : { color: "#00cc00" }}
117+
>
118+
{error && <h3>{error}</h3>}
119+
{success && <h3>{message}</h3>}
120+
</StatusMessage>
106121
</Flex>
107122
</Container>
108123
</Background>
@@ -229,4 +244,9 @@ const Input = styled.input`
229244
margin-bottom: 10px;
230245
`;
231246

247+
const StatusMessage = styled.div`
248+
padding-top: 20px;
249+
font-weight: 300;
250+
font-size: 16px;
251+
`;
232252
export default Tickets;

0 commit comments

Comments
 (0)