Compare commits

..

7 Commits

Author SHA1 Message Date
Simeon Pursiainen 6494647ec9 Merge branch 'master' into 'New_visual'
# Conflicts:
#   src/components/Navigation.tsx
2025-09-11 20:37:57 +03:00
SimeonPursiainen 3e7cd87f97 Fixed mobile scrolling + 404 site not found 2025-09-11 20:34:19 +03:00
SimeonPursiainen 1f72bfbf05 Changes to page setup 2025-09-11 19:57:40 +03:00
jadera eb1348445f removed social links from navbar to footer, cleaned up navbar on mobile 2025-09-11 00:18:13 +03:00
jadera dc1d641c17 teipattu mobile menu scrollaus takas. syypää on blockscroll.tsx ja tää teippaa sen 2025-09-10 22:21:30 +03:00
jadera 45dc2ed3b8 rako poistettu navigationin dropdown hommeli 2025-09-10 22:20:28 +03:00
Justus Ojala 7c23bc5103 Moved new student stuff under new dropdown 2025-09-10 17:14:45 +03:00
12 changed files with 101 additions and 1182 deletions
-1
View File
@@ -1,4 +1,3 @@
NEXT_PUBLIC_DEPLOY_ENV=local NEXT_PUBLIC_DEPLOY_ENV=local
NEXT_PUBLIC_API_URL=https://api.dev.sahkoinsinoorikilta.fi/api NEXT_PUBLIC_API_URL=https://api.dev.sahkoinsinoorikilta.fi/api
NEXT_PUBLIC_SITE_URL=https://dev.sahkoinsinoorikilta.fi NEXT_PUBLIC_SITE_URL=https://dev.sahkoinsinoorikilta.fi
NEXT_MQTT_HOST=mqtt.dev.sahkoinsinoorikilta.fi
+59 -999
View File
File diff suppressed because it is too large Load Diff
+1 -3
View File
@@ -72,7 +72,6 @@
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
"js-cookie": "^3.0.1", "js-cookie": "^3.0.1",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"mqtt": "^5.14.1",
"next": "^13.1.6", "next": "^13.1.6",
"normalize.css": "^8.0.1", "normalize.css": "^8.0.1",
"react": "^18.2.0", "react": "^18.2.0",
@@ -90,8 +89,7 @@
"sharp": "^0.30.3", "sharp": "^0.30.3",
"shortid": "^2.2.16", "shortid": "^2.2.16",
"styled-components": "^5.3.5", "styled-components": "^5.3.5",
"swr": "^1.2.2", "swr": "^1.2.2"
"uuid": "^13.0.0"
}, },
"overrides": { "overrides": {
"react-mde": { "react-mde": {
-1
View File
@@ -43,7 +43,6 @@ const StyledCard = styled.article`
} }
h3 { h3 {
hyphens: auto;
padding: 0.5rem; padding: 0.5rem;
font-size: 1.5rem; font-size: 1.5rem;
font-weight: 300; font-weight: 300;
+1 -2
View File
@@ -1,8 +1,7 @@
import { OptionTypes } from "@components/Widgets/SignupQuestionsWidget/common"; import { OptionTypes } from "@components/Widgets/SignupQuestionsWidget/common";
export interface Signup { export interface Signup {
id?: number; // Database id for completed signup id?: number;
submit_id?: string; // Signup request idempotency key
signupForm_id: number; signupForm_id: number;
answer: string; answer: string;
} }
-18
View File
@@ -1,18 +0,0 @@
import React from "react";
import { NextPage } from "next";
import Head from "next/head";
import GuildroomPageView from "@views/GuildroomPage/GuildroomPageView";
import PageWrapper from "@views/common/PageWrapper";
const GuildroomPage: NextPage = () => (
<>
<Head>
<link rel="canonical" href={`${process.env.NEXT_PUBLIC_SITE_URL}/kilta/guildroom`} />
</Head>
<PageWrapper>
<GuildroomPageView />
</PageWrapper>
</>
);
export default GuildroomPage;
-3
View File
@@ -13,7 +13,6 @@ import PageWrapper from "@views/common/PageWrapper";
import LoadingView from "@views/common/LoadingView"; import LoadingView from "@views/common/LoadingView";
import noop from "@utils/noop"; import noop from "@utils/noop";
import NotFoundPage from "@pages/404"; import NotFoundPage from "@pages/404";
import { v4 as uuid } from "uuid";
type InitialProps = { type InitialProps = {
initialForm: SignupForm; initialForm: SignupForm;
@@ -24,7 +23,6 @@ const FORM_URL = `${process.env.NEXT_PUBLIC_API_URL}/signupForm/`;
const SignUpPage: NextPage<InitialProps> = ({ initialForm }) => { const SignUpPage: NextPage<InitialProps> = ({ initialForm }) => {
const router = useRouter(); const router = useRouter();
const id = String(initialForm?.id ?? ""); const id = String(initialForm?.id ?? "");
const SUBMIT_ID = uuid(); // Submission key, generated on page refresh
const URL = `${FORM_URL}${id}/`; const URL = `${FORM_URL}${id}/`;
const { data: signupForm, error } = useSWR<SignupForm>(URL, (url) => axios.get(url).then((res) => res.data), { fallbackData: initialForm }); const { data: signupForm, error } = useSWR<SignupForm>(URL, (url) => axios.get(url).then((res) => res.data), { fallbackData: initialForm });
@@ -45,7 +43,6 @@ const SignUpPage: NextPage<InitialProps> = ({ initialForm }) => {
const onSubmit = async ({ formData }: ISubmitEvent<string>) => { const onSubmit = async ({ formData }: ISubmitEvent<string>) => {
const payload: Signup = { const payload: Signup = {
submit_id: SUBMIT_ID, // This is for preventing duplicate requests; NOT RELATED TO THE SIGNUP ID IN DATABASE
signupForm_id: signupForm.id, signupForm_id: signupForm.id,
answer: formData, answer: formData,
}; };
+38 -38
View File
@@ -8,10 +8,10 @@
"name_en": "Chairman of the Board", "name_en": "Chairman of the Board",
"representatives": [ "representatives": [
{ {
"name": "Sauli Hakala", "name": "Emma Uusküla",
"phone_number": null, "phone_number": null,
"email": "sauli.hakala@sahkoinsinoorikilta.fi", "email": "emma.uuskula@sahkoinsinoorikilta.fi",
"image": "" "image": "https://static.sahkoinsinoorikilta.fi/img/board/Emma.jpg"
} }
] ]
}, },
@@ -20,10 +20,10 @@
"name_en": "Vice Chair", "name_en": "Vice Chair",
"representatives": [ "representatives": [
{ {
"name": "Eemeli Hintsanen", "name": "Johannes Viirimäki",
"phone_number": null, "phone_number": null,
"email": "eemeli.hintsanen@sahkoinsinoorikilta.fi", "email": "johannes.viirimaki@sahkoinsinoorikilta.fi",
"image": "" "image": "https://static.sahkoinsinoorikilta.fi/img/board/Johannes.jpg"
} }
] ]
}, },
@@ -32,10 +32,10 @@
"name_en": "Treasurer", "name_en": "Treasurer",
"representatives": [ "representatives": [
{ {
"name": "Nea Kanerva", "name": "Nelli Liljasto",
"phone_number": null, "phone_number": null,
"email": "nea.kanerva@sahkoinsinoorikilta.fi", "email": "nelli.liljasto@sahkoinsinoorikilta.fi",
"image": "" "image": "https://static.sahkoinsinoorikilta.fi/img/board/Nelli.jpg"
} }
] ]
}, },
@@ -44,10 +44,10 @@
"name_en": "", "name_en": "",
"representatives": [ "representatives": [
{ {
"name": "Aura Friman", "name": "Teemu Heikkinen",
"phone_number": null, "phone_number": null,
"email": "aura.friman@sahkoinsinoorikilta.fi", "email": "teemu.heikkinen@sahkoinsinoorikilta.fi",
"image": "" "image": "https://static.sahkoinsinoorikilta.fi/img/board/Teemu.jpg"
} }
] ]
}, },
@@ -56,10 +56,10 @@
"name_en": "", "name_en": "",
"representatives": [ "representatives": [
{ {
"name": "Antti Salpakari", "name": "Henri Aito",
"phone_number": null, "phone_number": null,
"email": "antti.salpakari@sahkoinsinoorikilta.fi", "email": "henri.aito@sahkoinsinoorikilta.fi",
"image": "" "image": "https://static.sahkoinsinoorikilta.fi/img/board/Henri.jpg"
} }
] ]
}, },
@@ -68,10 +68,10 @@
"name_en": "", "name_en": "",
"representatives": [ "representatives": [
{ {
"name": "Aino Saarela", "name": "Tuomas Rantamäki",
"phone_number": null, "phone_number": null,
"email": "aino.saarela@sahkoinsinoorikilta.fi", "email": "tuomas.rantamaki@sahkoinsinoorikilta.fi",
"image": "" "image": "https://static.sahkoinsinoorikilta.fi/img/board/TuomasR.jpg"
} }
] ]
}, },
@@ -80,10 +80,10 @@
"name_en": "", "name_en": "",
"representatives": [ "representatives": [
{ {
"name": "Rosanna Reims", "name": "Matilda Ahonen",
"phone_number": null, "phone_number": null,
"email": "rosanna.reims@sahkoinsinoorikilta.fi", "email": "matilda.ahonen@sahkoinsinoorikilta.fi",
"image": "" "image": "https://static.sahkoinsinoorikilta.fi/img/board/Matilda.jpg"
} }
] ]
}, },
@@ -92,9 +92,9 @@
"name_en": "", "name_en": "",
"representatives": [ "representatives": [
{ {
"name": "Valentin Juhela", "name": "Niklas Ritalahti",
"phone_number": null, "phone_number": null,
"email": "valentin.juhela@sahkoinsinoorikilta.fi", "email": "niklas.ritalahti@sahkoinsinoorikilta.fi",
"image": "" "image": ""
} }
] ]
@@ -104,10 +104,10 @@
"name_en": "", "name_en": "",
"representatives": [ "representatives": [
{ {
"name": "Elida Widgren", "name": "Mikael Vatiainen",
"phone_number": null, "phone_number": null,
"email": "elida.widgren@sahkoinsinoorikilta.fi", "email": "mikael.vatiainen@sahkoinsinoorikilta.fi",
"image": "" "image": "https://static.sahkoinsinoorikilta.fi/img/board/Mikael.jpg"
} }
] ]
}, },
@@ -116,10 +116,10 @@
"name_en": "", "name_en": "",
"representatives": [ "representatives": [
{ {
"name": "Joona Maaranen", "name": "Simeon Pursiainen",
"phone_number": null, "phone_number": null,
"email": "joona.maaranen@sahkoinsinoorikilta.fi", "email": "simeon.pursiainen@sahkoinsinoorikilta.fi",
"image": "" "image": "https://static.sahkoinsinoorikilta.fi/img/board/Simeon.jpg"
} }
] ]
}, },
@@ -128,10 +128,10 @@
"name_en": "", "name_en": "",
"representatives": [ "representatives": [
{ {
"name": "Jere Oinonen", "name": "Markus Aaltio",
"phone_number": null, "phone_number": null,
"email": "jere.oinonen@sahkoinsinoorikilta.fi", "email": "markus.aaltio@sahkoinsinoorikilta.fi",
"image": "" "image": "https://static.sahkoinsinoorikilta.fi/img/board/Markus.jpg"
} }
] ]
}, },
@@ -140,10 +140,10 @@
"name_en": "", "name_en": "",
"representatives": [ "representatives": [
{ {
"name": "Into Saarinen", "name": "Tuomas Hintikka",
"phone_number": null, "phone_number": null,
"email": "into.saarinen@sahkoinsinoorikilta.fi", "email": "tuomas.hintikka@sahkoinsinoorikilta.fi",
"image": "" "image": "https://static.sahkoinsinoorikilta.fi/img/board/TuomasH.jpg"
} }
] ]
}, },
@@ -152,10 +152,10 @@
"name_en": "", "name_en": "",
"representatives": [ "representatives": [
{ {
"name": "Aino Svahn", "name": "Yassine Ramid",
"phone_number": null, "phone_number": null,
"email": "aino.svahn@sahkoinsinoorikilta.fi", "email": "yassine.ramid@sahkoinsinoorikilta.fi",
"image": "" "image": "https://static.sahkoinsinoorikilta.fi/img/board/Yassine.jpg"
} }
] ]
} }
+1 -1
View File
@@ -54,7 +54,7 @@
"name_en": "Guild Room Representative", "name_en": "Guild Room Representative",
"representatives": [ "representatives": [
{ {
"name": "Milja Kuusela" "name": "Justus Ojala"
}, },
{ {
"name": "Aaro Rasilainen" "name": "Aaro Rasilainen"
+1 -1
View File
@@ -30,7 +30,7 @@ const FrontPageHero: React.FC = () => (
<HeroAsideItem <HeroAsideItem
header="Vasta-aloittaneelle opiskelijalle" header="Vasta-aloittaneelle opiskelijalle"
text="Fuksikasvatusta ja ISOtoimintaa" text="Fuksikasvatusta ja ISOtoimintaa"
link="/newStudent/fuksi" link="/kilta/fuksi"
linkText="Fuksit&nbsp; " linkText="Fuksit&nbsp; "
/> />
<HeroAsideItem <HeroAsideItem
@@ -1,97 +0,0 @@
import { useState, useEffect } from "react";
import mqtt from "mqtt";
import { TextSection } from "@components/index";
import styled from "styled-components";
const CoffeeTitle = styled.div`
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
font-size: 3rem;
font-weight: bold;
`;
const Cups = styled.div`
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
font-size: 7rem;
font-variant-numeric: tabular-nums;
`;
const Time = styled.div`
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
font-size: 1rem;
`;
const GuildroomView = () => {
const [brewing, setBrewing] = useState<boolean>(false);
const [time, setTime] = useState<number>(0);
const [cups, setCups] = useState<number>(0);
const [client, setClient] = useState<mqtt.MqttClient | null>(null);
const [status, setStatus] = useState<boolean>(false);
useEffect(() => {
setStatus(false);
if (process.env.NEXT_PUBLIC_MQTT_HOST) {
setClient(mqtt.connect(`wss://${process.env.NEXT_PUBLIC_MQTT_HOST}`));
} else {
console.error("MQTT host undefined");
}
}, []);
useEffect(() => {
if (client) {
client.on("connect", () => {
setStatus(true);
client.subscribe("sik/kiltahuone/kahvivaaka/#", (err) => {
if (!err) {
console.log("Connected to MQTT server!");
}
});
});
client.on("error", (err) => {
console.error("Connection error: ", err);
client.end();
});
client.on("reconnect", () => {
setStatus(false);
});
client.on("offline", () => {
setStatus(false);
});
client.on("message", (topic, message) => {
if (topic === "sik/kiltahuone/kahvivaaka/cups") {
setCups(Number(message.toString()));
}
if (topic === "sik/kiltahuone/kahvivaaka/brewtime") {
setTime(Number(message.toString()));
}
if (topic === "sik/kiltahuone/kahvivaaka/brewing") {
setBrewing(Boolean(message.toString()));
}
});
}
}, [client]);
if (!status) {
return (
<CoffeeTitle style={{ margin: "10%" }}>NO MQTT CONNECTION</CoffeeTitle>
);
}
return (
<div style={{ margin: "10%" }}>
<CoffeeTitle>{brewing ? "Brewing more..." : "Cups left"}</CoffeeTitle>
<Cups>{cups}</Cups>
<Time>Brewed {time} min ago</Time>
</div>
);
};
export default GuildroomView;
@@ -19,19 +19,6 @@ const MembershipPageView: React.FC = () => (
Killan ulkojäseneksi voidaan hyväksyä jäsenmaksun maksanut henkilö, joita ei voida hyväksyä varsinaiseksi jäseneksi. Killan ulkojäseneksi voidaan hyväksyä jäsenmaksun maksanut henkilö, joita ei voida hyväksyä varsinaiseksi jäseneksi.
Killan kannatusjäseneksi voidaan hyväksyä henkilö tai yhteisö, joka haluaa tukea killan toimintaa. Killan kannatusjäseneksi voidaan hyväksyä henkilö tai yhteisö, joka haluaa tukea killan toimintaa.
</p> </p>
<p>
Killan sääntöjen mukaan jäsenmaksuista määrätään seuraavasti:
<br />
</p>
<p>
<h5>8 § Jäsenmaksut</h5>
<br />
Jäsenet ovat velvollisia suorittamaan lukuvuosittain killalle jäsenmaksun.
Kunniajäsenet ovat vapautettuja jäsenmaksuista.
</p>
<p>
Jäsenmaksujen suuruudet määrää killan yleinen kokous.
</p>
<h6 id="jasenmaksu">Jäsenmaksu</h6> <h6 id="jasenmaksu">Jäsenmaksu</h6>
<p> <p>
@@ -49,11 +36,6 @@ const MembershipPageView: React.FC = () => (
Jäsenrekisterin tietosuojaseloste Jäsenrekisterin tietosuojaseloste
</Link> </Link>
</p> </p>
<p>
<Link to="https://static.sahkoinsinoorikilta.fi/saannot/killansaannot.pdf">
Killan säännöt
</Link>
</p>
</div> </div>
</TextSection> </TextSection>
</> </>