Skip to content

Commit 8e7df15

Browse files
jctimbolevanugarte
andauthored
homepage image endpoint + random image on home screen (#1978)
* homepage image endpoint + random image on home screen * move array + helper fcn to util file * homepage image endpoint returns url and alt; update file names * add visit counter to home page * revert visit count changes; moved to new pr * whitespace fixes; tweak image api url handling * getting there * list of images * all done --------- Co-authored-by: evan <evanuxd@gmail.com>
1 parent 27bff5c commit 8e7df15

File tree

3 files changed

+82
-5
lines changed

3 files changed

+82
-5
lines changed

api/main_endpoints/routes/Image.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
const express = require ('express');
2+
const router = express.Router();
3+
const { OK, NOT_FOUND } = require('../../util/constants').STATUS_CODES;
4+
5+
const imageUrls = [
6+
{url: 'https://live.staticflickr.com/2182/2377582173_89e0ca2f83_b.jpg', alt: 'empty room'},
7+
{url: 'https://raw.githubusercontent.com/SCE-Development/Clark/93b422f177118942b725bbe090ea8d50abd3c1c3/public/2022intern.jpg', alt: '2022intern'},
8+
{url: 'https://raw.githubusercontent.com/SCE-Development/Clark/93b422f177118942b725bbe090ea8d50abd3c1c3/public/2023_spring.jpg', alt: '2023_spring'},
9+
{url: 'https://raw.githubusercontent.com/SCE-Development/Clark/93b422f177118942b725bbe090ea8d50abd3c1c3/public/2025intern.jpg', alt: '2025 intern'},
10+
{url: 'https://raw.githubusercontent.com/SCE-Development/Clark/93b422f177118942b725bbe090ea8d50abd3c1c3/public/4monitor.jpg', alt: 'using 4 monitors in sce'},
11+
{url: 'https://raw.githubusercontent.com/SCE-Development/Clark/93b422f177118942b725bbe090ea8d50abd3c1c3/public/alumni_visit.jpg', alt: 'alumni visit'},
12+
{url: 'https://raw.githubusercontent.com/SCE-Development/Clark/93b422f177118942b725bbe090ea8d50abd3c1c3/public/alumni_visit2.jpg', alt: 'alumni visit'},
13+
{url: 'https://raw.githubusercontent.com/SCE-Development/Clark/93b422f177118942b725bbe090ea8d50abd3c1c3/public/cleezy_demo.jpg', alt: 'cleezy_demo'},
14+
{url: 'https://raw.githubusercontent.com/SCE-Development/Clark/93b422f177118942b725bbe090ea8d50abd3c1c3/public/companytour.jpg', alt: 'companytour'},
15+
{url: 'https://raw.githubusercontent.com/SCE-Development/Clark/93b422f177118942b725bbe090ea8d50abd3c1c3/public/dragon.jpg', alt: 'dragon'},
16+
{url: 'https://raw.githubusercontent.com/SCE-Development/Clark/93b422f177118942b725bbe090ea8d50abd3c1c3/public/endofyear.jpg', alt: 'endofyear'},
17+
{url: 'https://raw.githubusercontent.com/SCE-Development/Clark/93b422f177118942b725bbe090ea8d50abd3c1c3/public/game.jpg', alt: 'game'},
18+
{url: 'https://raw.githubusercontent.com/SCE-Development/Clark/93b422f177118942b725bbe090ea8d50abd3c1c3/public/hackathon.jpg', alt: 'hackathon'},
19+
{url: 'https://raw.githubusercontent.com/SCE-Development/Clark/93b422f177118942b725bbe090ea8d50abd3c1c3/public/hackinit.jpg', alt: 'working in the hardware lab'},
20+
{url: 'https://raw.githubusercontent.com/SCE-Development/Clark/93b422f177118942b725bbe090ea8d50abd3c1c3/public/kahoot.jpg', alt: 'kahoot'},
21+
{url: 'https://raw.githubusercontent.com/SCE-Development/Clark/93b422f177118942b725bbe090ea8d50abd3c1c3/public/lego.jpg', alt: 'lego'},
22+
{url: 'https://raw.githubusercontent.com/SCE-Development/Clark/93b422f177118942b725bbe090ea8d50abd3c1c3/public/piza.jpg', alt: 'pizza'},
23+
{url: 'https://raw.githubusercontent.com/SCE-Development/Clark/93b422f177118942b725bbe090ea8d50abd3c1c3/public/scemakescoffee.jpg', alt: 'sce makes coffee'},
24+
];
25+
26+
const getRandomImage = () => {
27+
if(imageUrls.length === 0) return null;
28+
return imageUrls[Math.floor(Math.random() * imageUrls.length)];
29+
};
30+
31+
router.get('/Homepage', (req, res) => {
32+
const image = getRandomImage();
33+
if(!image) return res.sendStatus(NOT_FOUND);
34+
res.status(OK).send(image);
35+
});
36+
37+
module.exports = router;

src/APIFunctions/Image.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { ApiResponse } from './ApiResponses';
2+
import { BASE_API_URL } from '../Enums';
3+
4+
export async function getHomeImage() {
5+
let status = new ApiResponse();
6+
try {
7+
const url = new URL('/api/Image/Homepage', BASE_API_URL);
8+
const res = await fetch (url.href);
9+
if (res.ok) {
10+
const result = await res.json();
11+
status.responseData = result;
12+
} else {
13+
status.error = true;
14+
}
15+
} catch (err) {
16+
status.responseData = err;
17+
status.error = true;
18+
}
19+
return status;
20+
}

src/Pages/Home/Home.js

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,16 @@ import Footer from '../../Components/Footer/Footer.js';
33
import './Home.css';
44

55
import { getAd } from '../../APIFunctions/Advertisement.js';
6+
import { getHomeImage } from '../../APIFunctions/Image.js';
67

78
const Home = () => {
89

910
const [message, setMessage] = useState('');
1011
const [showMessage, setShowMessage] = useState(false);
1112
const [showAll, setShowAll] = useState(false);
13+
const [homeImageUrl, setHomeImageUrl] = useState('');
14+
const [homeImageAlt, setHomeImageAlt] = useState('');
15+
1216
async function getMessage() {
1317
try {
1418
const messageData = await getAd();
@@ -20,8 +24,22 @@ const Home = () => {
2024
}
2125
}
2226

27+
async function loadHomeImage() {
28+
const DEFAULT_IMAGE = 'https://raw.githubusercontent.com/thebeninator/Clark/refs/heads/add_comp_homepage/public/images/compressed2.jpg';
29+
const response = await getHomeImage();
30+
let url = DEFAULT_IMAGE;
31+
let alt = 'sce club image';
32+
if (!response.error) {
33+
url = response.responseData.url;
34+
alt = response.responseData.alt;
35+
}
36+
setHomeImageUrl(url);
37+
setHomeImageAlt(alt);
38+
}
39+
2340
useEffect(() => {
2441
getMessage();
42+
loadHomeImage();
2543
setTimeout(() => setShowAll(true), 100);
2644
}, []);
2745

@@ -89,13 +107,15 @@ const Home = () => {
89107

90108

91109
<div className={`fade-in-img w-full h-full p-6 md:p-12 overflow-visible xl:w-3/5${showAll ? ' show' : ''}`}>
92-
<div className="relative max-w-max mx-auto">
110+
<div className="relative max-w-4xl mx-auto">
93111
<img
94-
className="w-full mx-auto transform md:w-4/5 rounded-xl shadow-2xl hover-grow"
95-
src="https://raw.githubusercontent.com/thebeninator/Clark/refs/heads/add_comp_homepage/public/images/compressed2.jpg"
112+
className="w-full aspect-video object-cover mx-auto rounded-xl shadow-2xl hover-grow"
113+
src={homeImageUrl}
114+
alt={homeImageAlt}
96115
/>
97-
<div className={`absolute -top-2 -right-2 md:right-10 md:top-0 z-10 fade-scale-in${showMessage ? ' show' : ''}`}>
98-
<div className="minecraft-styling text-yellow-400 drop-shadow-lg transform rotate-[-20deg] text-sm md:text-xl whitespace-nowrap">
116+
117+
<div className={`absolute -top-4 -right-4 md:right-0 md:-top-2 z-10 fade-scale-in${showMessage ? ' show' : ''}`}>
118+
<div className="minecraft-styling text-yellow-400 drop-shadow-lg transform rotate-[-20deg] text-sm md:text-2xl whitespace-nowrap">
99119
{renderMessageWithLinks(message)}
100120
</div>
101121
</div>

0 commit comments

Comments
 (0)