Compare commits
26 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b2355576b1 | |||
| f23c2ed68d | |||
| 77c9052d1b | |||
| 0db4837fe1 | |||
| 2799c80f56 | |||
| 8af519ac9a | |||
| 3350d33c82 | |||
| 5a097080ee | |||
| 433d9c67d7 | |||
| d538e6c92e | |||
| 1be914f37f | |||
| 521df27aa1 | |||
| 8bf38f512c | |||
| 3ffe8a1e17 | |||
| 32e541533f | |||
| 9f33c667d3 | |||
| 0e4e02e1b3 | |||
| cfc7dd11f5 | |||
| 63df5e6f5f | |||
| bdcf4840f5 | |||
| 0dc349161e | |||
| d101931020 | |||
| b4d41cd6a7 | |||
| ea82b493d5 | |||
| fe8f9328fa | |||
| 71d19d44cf |
+4
-10
@@ -86,9 +86,8 @@ publish:dev:
|
|||||||
only:
|
only:
|
||||||
- master
|
- master
|
||||||
script:
|
script:
|
||||||
- docker info
|
|
||||||
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
|
|
||||||
- docker build . -t "$IMAGE_NAME":latest --build-arg SENTRY_AUTH_TOKEN="$SENTRY_AUTH_TOKEN" --build-arg NEXT_PUBLIC_DEPLOY_ENV=development --build-arg NEXT_PUBLIC_API_URL=https://api.dev.sahkoinsinoorikilta.fi/api --build-arg NEXT_PUBLIC_SITE_URL=https://dev.sahkoinsinoorikilta.fi
|
- docker build . -t "$IMAGE_NAME":latest --build-arg SENTRY_AUTH_TOKEN="$SENTRY_AUTH_TOKEN" --build-arg NEXT_PUBLIC_DEPLOY_ENV=development --build-arg NEXT_PUBLIC_API_URL=https://api.dev.sahkoinsinoorikilta.fi/api --build-arg NEXT_PUBLIC_SITE_URL=https://dev.sahkoinsinoorikilta.fi
|
||||||
|
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
|
||||||
- docker push "$IMAGE_NAME":latest
|
- docker push "$IMAGE_NAME":latest
|
||||||
|
|
||||||
publish:prod:
|
publish:prod:
|
||||||
@@ -99,9 +98,8 @@ publish:prod:
|
|||||||
only:
|
only:
|
||||||
- production
|
- production
|
||||||
script:
|
script:
|
||||||
- docker info
|
|
||||||
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
|
|
||||||
- docker build . -t "$IMAGE_NAME":prod --build-arg SENTRY_AUTH_TOKEN="$SENTRY_AUTH_TOKEN"
|
- docker build . -t "$IMAGE_NAME":prod --build-arg SENTRY_AUTH_TOKEN="$SENTRY_AUTH_TOKEN"
|
||||||
|
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
|
||||||
- docker push "$IMAGE_NAME":prod
|
- docker push "$IMAGE_NAME":prod
|
||||||
|
|
||||||
deploy:dev:
|
deploy:dev:
|
||||||
@@ -120,11 +118,9 @@ deploy:dev:
|
|||||||
- echo "$DEV_TLSCACERT" > ~/.docker/ca.pem
|
- echo "$DEV_TLSCACERT" > ~/.docker/ca.pem
|
||||||
- echo "$DEV_TLSCERT" > ~/.docker/cert.pem
|
- echo "$DEV_TLSCERT" > ~/.docker/cert.pem
|
||||||
- echo "$DEV_TLSKEY" > ~/.docker/key.pem
|
- echo "$DEV_TLSKEY" > ~/.docker/key.pem
|
||||||
- docker login -u gitlab-ci-token -p "$CI_BUILD_TOKEN" "$CI_REGISTRY"
|
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
|
||||||
script:
|
script:
|
||||||
- docker stack deploy --with-registry-auth -c stack-compose-dev.yml "$SERVICE_NAME"
|
- docker stack deploy --with-registry-auth -c stack-compose-dev.yml "$SERVICE_NAME"
|
||||||
after_script:
|
|
||||||
- docker logout "$CI_REGISTRY"
|
|
||||||
|
|
||||||
deploy:prod:
|
deploy:prod:
|
||||||
stage: deploy
|
stage: deploy
|
||||||
@@ -142,8 +138,6 @@ deploy:prod:
|
|||||||
- echo "$TLSCACERT" > ~/.docker/ca.pem
|
- echo "$TLSCACERT" > ~/.docker/ca.pem
|
||||||
- echo "$TLSCERT" > ~/.docker/cert.pem
|
- echo "$TLSCERT" > ~/.docker/cert.pem
|
||||||
- echo "$TLSKEY" > ~/.docker/key.pem
|
- echo "$TLSKEY" > ~/.docker/key.pem
|
||||||
- docker login -u gitlab-ci-token -p "$CI_BUILD_TOKEN" "$CI_REGISTRY"
|
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
|
||||||
script:
|
script:
|
||||||
- docker stack deploy --with-registry-auth -c stack-compose.yml "$SERVICE_NAME"
|
- docker stack deploy --with-registry-auth -c stack-compose.yml "$SERVICE_NAME"
|
||||||
after_script:
|
|
||||||
- docker logout "$CI_REGISTRY"
|
|
||||||
|
|||||||
Generated
+653
-495
File diff suppressed because it is too large
Load Diff
+2
-1
@@ -72,7 +72,7 @@
|
|||||||
"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",
|
||||||
"next": "^13.1.6",
|
"next": "^13.4.19",
|
||||||
"normalize.css": "^8.0.1",
|
"normalize.css": "^8.0.1",
|
||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
"react-csv": "^2.2.2",
|
"react-csv": "^2.2.2",
|
||||||
@@ -88,6 +88,7 @@
|
|||||||
"rehype-sanitize": "^5.0.1",
|
"rehype-sanitize": "^5.0.1",
|
||||||
"sharp": "^0.30.3",
|
"sharp": "^0.30.3",
|
||||||
"shortid": "^2.2.16",
|
"shortid": "^2.2.16",
|
||||||
|
"stripe": "^13.6.0",
|
||||||
"styled-components": "^5.3.5",
|
"styled-components": "^5.3.5",
|
||||||
"swr": "^1.2.2"
|
"swr": "^1.2.2"
|
||||||
},
|
},
|
||||||
|
|||||||
+1
-40
@@ -1,10 +1,7 @@
|
|||||||
import {
|
import {
|
||||||
deleteTokenCookies, getAccessTokenCookie, getRefreshTokenCookie, setAccessTokenCookie, setRefreshTokenCookie,
|
deleteTokenCookies, getAccessTokenCookie, getRefreshTokenCookie, setAccessTokenCookie, setRefreshTokenCookie,
|
||||||
} from "@utils/auth";
|
} from "@utils/auth";
|
||||||
import {
|
import { APIPath, postBackendAPI } from "./backend";
|
||||||
APIPath, postBackendAPI, getBackendAPI, putBackendAPI, deleteBackendAPI,
|
|
||||||
API,
|
|
||||||
} from "./backend";
|
|
||||||
|
|
||||||
export type AuthTokenRequest = {
|
export type AuthTokenRequest = {
|
||||||
username: string;
|
username: string;
|
||||||
@@ -74,39 +71,3 @@ export const authenticate = async (): Promise<boolean> => {
|
|||||||
return refreshToken();
|
return refreshToken();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const authedGetBackendAPI = async <ResponseType>({
|
|
||||||
path, urlParams, queryParams, authenticated = true,
|
|
||||||
}: API): Promise<ResponseType> => {
|
|
||||||
if (authenticated) await authenticate();
|
|
||||||
return getBackendAPI<ResponseType>({
|
|
||||||
path, urlParams, queryParams, authenticated,
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export const authedPostBackendAPI = async <RequestType, ResponseType>({
|
|
||||||
path, urlParams, queryParams, authenticated = true,
|
|
||||||
}: API, body: RequestType): Promise<ResponseType> => {
|
|
||||||
if (authenticated) await authenticate();
|
|
||||||
return postBackendAPI<RequestType, ResponseType>({
|
|
||||||
path, urlParams, queryParams, authenticated,
|
|
||||||
}, body);
|
|
||||||
};
|
|
||||||
|
|
||||||
export const authedPutBackendAPI = async <RequestType, ResponseType>({
|
|
||||||
path, urlParams, queryParams, authenticated = true,
|
|
||||||
}: API, body: RequestType): Promise<ResponseType> => {
|
|
||||||
if (authenticated) await authenticate();
|
|
||||||
return putBackendAPI<RequestType, ResponseType>({
|
|
||||||
path, urlParams, queryParams, authenticated,
|
|
||||||
}, body);
|
|
||||||
};
|
|
||||||
|
|
||||||
export const authedDeleteBackendAPI = async <ResponseType>({
|
|
||||||
path, urlParams, queryParams, authenticated = true,
|
|
||||||
}: API): Promise<ResponseType> => {
|
|
||||||
if (authenticated) await authenticate();
|
|
||||||
return deleteBackendAPI<ResponseType>({
|
|
||||||
path, urlParams, queryParams, authenticated,
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|||||||
+9
-12
@@ -1,11 +1,8 @@
|
|||||||
/* eslint-disable no-console */
|
/* eslint-disable no-console */
|
||||||
import Event from "@models/Event";
|
import Event from "@models/Event";
|
||||||
import {
|
import {
|
||||||
APIPath,
|
APIPath, deleteBackendAPI, getBackendAPI, postBackendAPI, putBackendAPI,
|
||||||
} from "./backend";
|
} from "./backend";
|
||||||
import {
|
|
||||||
authedGetBackendAPI, authedPostBackendAPI, authedDeleteBackendAPI, authedPutBackendAPI,
|
|
||||||
} from "./auth";
|
|
||||||
|
|
||||||
interface Options {
|
interface Options {
|
||||||
limit?: number;
|
limit?: number;
|
||||||
@@ -17,7 +14,7 @@ interface Options {
|
|||||||
class EventApi {
|
class EventApi {
|
||||||
static getEvent = async (id: number, auth = false): Promise<Event> => {
|
static getEvent = async (id: number, auth = false): Promise<Event> => {
|
||||||
try {
|
try {
|
||||||
return await authedGetBackendAPI<Event>({
|
return await getBackendAPI<Event>({
|
||||||
path: APIPath.EVENTS, urlParams: { id }, authenticated: auth,
|
path: APIPath.EVENTS, urlParams: { id }, authenticated: auth,
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
@@ -27,10 +24,10 @@ class EventApi {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static getEvents = async ({
|
static getEvents = async ({
|
||||||
since, limit, offset, auth = false,
|
since, limit, offset, auth,
|
||||||
}: Options = {}): Promise<Event[]> => {
|
}: Options = {}): Promise<Event[]> => {
|
||||||
try {
|
try {
|
||||||
return await authedGetBackendAPI<Event[]>({
|
return await getBackendAPI<Event[]>({
|
||||||
path: APIPath.EVENTS,
|
path: APIPath.EVENTS,
|
||||||
queryParams: {
|
queryParams: {
|
||||||
since,
|
since,
|
||||||
@@ -47,8 +44,8 @@ class EventApi {
|
|||||||
|
|
||||||
static createEvent = async (data: Event): Promise<Event> => {
|
static createEvent = async (data: Event): Promise<Event> => {
|
||||||
try {
|
try {
|
||||||
return await authedPostBackendAPI<Event, Event>({
|
return await postBackendAPI<Event, Event>({
|
||||||
path: APIPath.EVENTS,
|
path: APIPath.EVENTS, authenticated: true,
|
||||||
}, data);
|
}, data);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
@@ -58,8 +55,8 @@ class EventApi {
|
|||||||
|
|
||||||
static updateEvent = async (data: Event): Promise<Event> => {
|
static updateEvent = async (data: Event): Promise<Event> => {
|
||||||
try {
|
try {
|
||||||
return await authedPutBackendAPI<Event, Event>({
|
return await putBackendAPI<Event, Event>({
|
||||||
path: APIPath.EVENTS, urlParams: { id: data.id },
|
path: APIPath.EVENTS, urlParams: { id: data.id }, authenticated: true,
|
||||||
}, data);
|
}, data);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
@@ -69,7 +66,7 @@ class EventApi {
|
|||||||
|
|
||||||
static deleteEvent = async (id: number): Promise<void> => {
|
static deleteEvent = async (id: number): Promise<void> => {
|
||||||
try {
|
try {
|
||||||
await authedDeleteBackendAPI<{ message: "OK" }>({ path: APIPath.EVENTS, urlParams: { id } });
|
await deleteBackendAPI<{ message: "OK" }>({ path: APIPath.EVENTS, urlParams: { id }, authenticated: true });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
throw err;
|
throw err;
|
||||||
|
|||||||
+9
-12
@@ -1,11 +1,8 @@
|
|||||||
/* eslint-disable no-console */
|
/* eslint-disable no-console */
|
||||||
import Post from "@models/Feed";
|
import Post from "@models/Feed";
|
||||||
import {
|
import {
|
||||||
APIPath,
|
APIPath, deleteBackendAPI, getBackendAPI, postBackendAPI, putBackendAPI,
|
||||||
} from "./backend";
|
} from "./backend";
|
||||||
import {
|
|
||||||
authedGetBackendAPI, authedPostBackendAPI, authedDeleteBackendAPI, authedPutBackendAPI,
|
|
||||||
} from "./auth";
|
|
||||||
|
|
||||||
interface Options {
|
interface Options {
|
||||||
limit?: number;
|
limit?: number;
|
||||||
@@ -14,9 +11,9 @@ interface Options {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class FeedApi {
|
class FeedApi {
|
||||||
static getPost = async (id: number, auth = false): Promise<Post> => {
|
static getPost = async (id: number, auth?: boolean): Promise<Post> => {
|
||||||
try {
|
try {
|
||||||
return await authedGetBackendAPI<Post>({
|
return await getBackendAPI<Post>({
|
||||||
path: APIPath.FEED, urlParams: { id }, authenticated: auth,
|
path: APIPath.FEED, urlParams: { id }, authenticated: auth,
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
@@ -25,9 +22,9 @@ class FeedApi {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static getFeed = async ({ limit, offset, auth = false }: Options = {}): Promise<Post[]> => {
|
static getFeed = async ({ limit, offset, auth }: Options = {}): Promise<Post[]> => {
|
||||||
try {
|
try {
|
||||||
return await authedGetBackendAPI<Post[]>({
|
return await getBackendAPI<Post[]>({
|
||||||
path: APIPath.FEED,
|
path: APIPath.FEED,
|
||||||
queryParams: {
|
queryParams: {
|
||||||
limit,
|
limit,
|
||||||
@@ -43,7 +40,7 @@ class FeedApi {
|
|||||||
|
|
||||||
static createPost = async (data: Post): Promise<Post> => {
|
static createPost = async (data: Post): Promise<Post> => {
|
||||||
try {
|
try {
|
||||||
return await authedPostBackendAPI<Post, Post>({ path: APIPath.FEED }, data);
|
return await postBackendAPI<Post, Post>({ path: APIPath.FEED, authenticated: true }, data);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
throw err;
|
throw err;
|
||||||
@@ -52,8 +49,8 @@ class FeedApi {
|
|||||||
|
|
||||||
static updatePost = async (data: Post): Promise<Post> => {
|
static updatePost = async (data: Post): Promise<Post> => {
|
||||||
try {
|
try {
|
||||||
return await authedPutBackendAPI<Post, Post>({
|
return await putBackendAPI<Post, Post>({
|
||||||
path: APIPath.FEED, urlParams: { id: data.id },
|
path: APIPath.FEED, urlParams: { id: data.id }, authenticated: true,
|
||||||
}, data);
|
}, data);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
@@ -63,7 +60,7 @@ class FeedApi {
|
|||||||
|
|
||||||
static deletePost = async (id: number): Promise<void> => {
|
static deletePost = async (id: number): Promise<void> => {
|
||||||
try {
|
try {
|
||||||
await authedDeleteBackendAPI<{ message: "OK" }>({ path: APIPath.EVENTS, urlParams: { id } });
|
await deleteBackendAPI<{ message: "OK" }>({ path: APIPath.EVENTS, urlParams: { id }, authenticated: true });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
throw err;
|
throw err;
|
||||||
|
|||||||
+9
-12
@@ -1,11 +1,8 @@
|
|||||||
/* eslint-disable no-console */
|
/* eslint-disable no-console */
|
||||||
import JobAd from "@models/JobAd";
|
import JobAd from "@models/JobAd";
|
||||||
import {
|
import {
|
||||||
APIPath,
|
APIPath, deleteBackendAPI, getBackendAPI, postBackendAPI, putBackendAPI,
|
||||||
} from "./backend";
|
} from "./backend";
|
||||||
import {
|
|
||||||
authedGetBackendAPI, authedPostBackendAPI, authedDeleteBackendAPI, authedPutBackendAPI,
|
|
||||||
} from "./auth";
|
|
||||||
|
|
||||||
interface Options {
|
interface Options {
|
||||||
since?: Date;
|
since?: Date;
|
||||||
@@ -17,7 +14,7 @@ interface Options {
|
|||||||
class JobAdApi {
|
class JobAdApi {
|
||||||
static getJobAd = async (id: number, auth = false): Promise<JobAd> => {
|
static getJobAd = async (id: number, auth = false): Promise<JobAd> => {
|
||||||
try {
|
try {
|
||||||
return await authedGetBackendAPI({
|
return await getBackendAPI({
|
||||||
path: APIPath.JOBADS, urlParams: { id }, authenticated: auth,
|
path: APIPath.JOBADS, urlParams: { id }, authenticated: auth,
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
@@ -27,10 +24,10 @@ class JobAdApi {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static getJobAds = async ({
|
static getJobAds = async ({
|
||||||
since, limit, offset, auth = false,
|
since, limit, offset, auth,
|
||||||
}: Options = {}): Promise<JobAd[]> => {
|
}: Options = {}): Promise<JobAd[]> => {
|
||||||
try {
|
try {
|
||||||
return await authedGetBackendAPI<JobAd[]>({
|
return await getBackendAPI<JobAd[]>({
|
||||||
path: APIPath.JOBADS,
|
path: APIPath.JOBADS,
|
||||||
queryParams: {
|
queryParams: {
|
||||||
since,
|
since,
|
||||||
@@ -47,8 +44,8 @@ class JobAdApi {
|
|||||||
|
|
||||||
static createJobAd = async (data: JobAd): Promise<JobAd> => {
|
static createJobAd = async (data: JobAd): Promise<JobAd> => {
|
||||||
try {
|
try {
|
||||||
return await authedPostBackendAPI<JobAd, JobAd>({
|
return await postBackendAPI<JobAd, JobAd>({
|
||||||
path: APIPath.JOBADS,
|
path: APIPath.JOBADS, authenticated: true,
|
||||||
}, data);
|
}, data);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
@@ -58,8 +55,8 @@ class JobAdApi {
|
|||||||
|
|
||||||
static updateJobAd = async (data: JobAd): Promise<JobAd> => {
|
static updateJobAd = async (data: JobAd): Promise<JobAd> => {
|
||||||
try {
|
try {
|
||||||
return await authedPutBackendAPI<JobAd, JobAd>({
|
return await putBackendAPI<JobAd, JobAd>({
|
||||||
path: APIPath.JOBADS, urlParams: { id: data.id },
|
path: APIPath.JOBADS, urlParams: { id: data.id }, authenticated: true,
|
||||||
}, data);
|
}, data);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
@@ -69,7 +66,7 @@ class JobAdApi {
|
|||||||
|
|
||||||
static deleteJobAd = async (id: number): Promise<void> => {
|
static deleteJobAd = async (id: number): Promise<void> => {
|
||||||
try {
|
try {
|
||||||
await authedDeleteBackendAPI<{ message: "OK" }>({ path: APIPath.JOBADS, urlParams: { id } });
|
await deleteBackendAPI<{ message: "OK" }>({ path: APIPath.JOBADS, urlParams: { id }, authenticated: true });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
throw err;
|
throw err;
|
||||||
|
|||||||
+15
-18
@@ -1,11 +1,8 @@
|
|||||||
/* eslint-disable no-console */
|
/* eslint-disable no-console */
|
||||||
import { Signup, SignupForm } from "@models/Signup";
|
import { Signup, SignupForm } from "@models/Signup";
|
||||||
import {
|
import {
|
||||||
APIPath, postBackendAPI,
|
APIPath, deleteBackendAPI, getBackendAPI, postBackendAPI, putBackendAPI,
|
||||||
} from "./backend";
|
} from "./backend";
|
||||||
import {
|
|
||||||
authedGetBackendAPI, authedPostBackendAPI, authedDeleteBackendAPI, authedPutBackendAPI,
|
|
||||||
} from "./auth";
|
|
||||||
|
|
||||||
export type EmailRequest = {
|
export type EmailRequest = {
|
||||||
mode: "all" | "actual" | "reserve";
|
mode: "all" | "actual" | "reserve";
|
||||||
@@ -16,8 +13,8 @@ export type EmailRequest = {
|
|||||||
class SignupApi {
|
class SignupApi {
|
||||||
static getSignup = async (id: number): Promise<Signup> => {
|
static getSignup = async (id: number): Promise<Signup> => {
|
||||||
try {
|
try {
|
||||||
return await authedGetBackendAPI<Signup>({
|
return await getBackendAPI<Signup>({
|
||||||
path: APIPath.SIGNUPS, urlParams: { id },
|
path: APIPath.SIGNUPS, urlParams: { id }, authenticated: true,
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
@@ -40,7 +37,7 @@ class SignupApi {
|
|||||||
try {
|
try {
|
||||||
const { id } = data;
|
const { id } = data;
|
||||||
if (!id) throw new Error("SignupId required!");
|
if (!id) throw new Error("SignupId required!");
|
||||||
return await authedPutBackendAPI<Signup, Signup>({
|
return await putBackendAPI<Signup, Signup>({
|
||||||
path: APIPath.SIGNUPS_EDIT,
|
path: APIPath.SIGNUPS_EDIT,
|
||||||
urlParams: {
|
urlParams: {
|
||||||
id,
|
id,
|
||||||
@@ -57,7 +54,7 @@ class SignupApi {
|
|||||||
|
|
||||||
static getSignupUUID = async (id: number, uuid: string): Promise<Signup> => {
|
static getSignupUUID = async (id: number, uuid: string): Promise<Signup> => {
|
||||||
try {
|
try {
|
||||||
return await authedGetBackendAPI<Signup>({
|
return await getBackendAPI<Signup>({
|
||||||
path: APIPath.SIGNUPS_EDIT,
|
path: APIPath.SIGNUPS_EDIT,
|
||||||
urlParams: {
|
urlParams: {
|
||||||
id,
|
id,
|
||||||
@@ -74,7 +71,7 @@ class SignupApi {
|
|||||||
|
|
||||||
static deleteSignup = async (id: number): Promise<void> => {
|
static deleteSignup = async (id: number): Promise<void> => {
|
||||||
try {
|
try {
|
||||||
await authedDeleteBackendAPI<{ message: "OK" }>({ path: APIPath.SIGNUPS, urlParams: { id } });
|
await deleteBackendAPI<{ message: "OK" }>({ path: APIPath.SIGNUPS, urlParams: { id }, authenticated: true });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
throw err;
|
throw err;
|
||||||
@@ -83,7 +80,7 @@ class SignupApi {
|
|||||||
|
|
||||||
static getForm = async (id: number, auth = false): Promise<SignupForm> => {
|
static getForm = async (id: number, auth = false): Promise<SignupForm> => {
|
||||||
try {
|
try {
|
||||||
return await authedGetBackendAPI<SignupForm>({
|
return await getBackendAPI<SignupForm>({
|
||||||
path: APIPath.SIGNUP_FORMS, urlParams: { id }, authenticated: auth,
|
path: APIPath.SIGNUP_FORMS, urlParams: { id }, authenticated: auth,
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
@@ -94,7 +91,7 @@ class SignupApi {
|
|||||||
|
|
||||||
static getForms = async (auth = false): Promise<SignupForm[]> => {
|
static getForms = async (auth = false): Promise<SignupForm[]> => {
|
||||||
try {
|
try {
|
||||||
return await authedGetBackendAPI<SignupForm[]>({
|
return await getBackendAPI<SignupForm[]>({
|
||||||
path: APIPath.SIGNUP_FORMS, authenticated: auth,
|
path: APIPath.SIGNUP_FORMS, authenticated: auth,
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
@@ -105,8 +102,8 @@ class SignupApi {
|
|||||||
|
|
||||||
static createForm = async (data: SignupForm): Promise<SignupForm> => {
|
static createForm = async (data: SignupForm): Promise<SignupForm> => {
|
||||||
try {
|
try {
|
||||||
return await authedPostBackendAPI<SignupForm, SignupForm>({
|
return await postBackendAPI<SignupForm, SignupForm>({
|
||||||
path: APIPath.SIGNUP_FORMS,
|
path: APIPath.SIGNUP_FORMS, authenticated: true,
|
||||||
}, data);
|
}, data);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
@@ -116,8 +113,8 @@ class SignupApi {
|
|||||||
|
|
||||||
static updateForm = async (data: SignupForm): Promise<SignupForm> => {
|
static updateForm = async (data: SignupForm): Promise<SignupForm> => {
|
||||||
try {
|
try {
|
||||||
return await authedPutBackendAPI<SignupForm, SignupForm>({
|
return await putBackendAPI<SignupForm, SignupForm>({
|
||||||
path: APIPath.SIGNUP_FORMS, urlParams: { id: data.id },
|
path: APIPath.SIGNUP_FORMS, urlParams: { id: data.id }, authenticated: true,
|
||||||
}, data);
|
}, data);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
@@ -127,7 +124,7 @@ class SignupApi {
|
|||||||
|
|
||||||
static deleteForm = async (id: number): Promise<void> => {
|
static deleteForm = async (id: number): Promise<void> => {
|
||||||
try {
|
try {
|
||||||
await authedDeleteBackendAPI<{ message: "OK" }>({ path: APIPath.SIGNUP_FORMS, urlParams: { id } });
|
await deleteBackendAPI<{ message: "OK" }>({ path: APIPath.SIGNUP_FORMS, urlParams: { id }, authenticated: true });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
throw err;
|
throw err;
|
||||||
@@ -136,7 +133,7 @@ class SignupApi {
|
|||||||
|
|
||||||
static signupFormSendEmail = async (data: EmailRequest, id: number): Promise<void> => {
|
static signupFormSendEmail = async (data: EmailRequest, id: number): Promise<void> => {
|
||||||
try {
|
try {
|
||||||
await authedPostBackendAPI<EmailRequest, { message: "Email sent" }>({ path: APIPath.SIGNUP_FORMS_EMAIL, urlParams: { id } }, data);
|
await postBackendAPI<EmailRequest, { message: "Email sent" }>({ path: APIPath.SIGNUP_FORMS_EMAIL, urlParams: { id }, authenticated: true }, data);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
throw err;
|
throw err;
|
||||||
@@ -145,7 +142,7 @@ class SignupApi {
|
|||||||
|
|
||||||
static getSignups = async (id: number): Promise<Signup[]> => {
|
static getSignups = async (id: number): Promise<Signup[]> => {
|
||||||
try {
|
try {
|
||||||
return await authedGetBackendAPI<Signup[]>({ path: APIPath.SIGNUP_FORMS_SIGNUPS, urlParams: { id } });
|
return await getBackendAPI<Signup[]>({ path: APIPath.SIGNUP_FORMS_SIGNUPS, urlParams: { id }, authenticated: true });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
throw err;
|
throw err;
|
||||||
|
|||||||
@@ -28,6 +28,9 @@ const Events: React.FC<EventsProps> = ({ events, lang }) => {
|
|||||||
const pageLinkText = t("Kaikki tapahtumat");
|
const pageLinkText = t("Kaikki tapahtumat");
|
||||||
const pageLinkDesc = `${t("löydät tapahtumakalenterista")}\xa0›`;
|
const pageLinkDesc = `${t("löydät tapahtumakalenterista")}\xa0›`;
|
||||||
|
|
||||||
|
const googleCalendarText = t("Lisää killan");
|
||||||
|
const googleCalendarDesc = `${t("Google-kalenteri")}\xa0›`;
|
||||||
|
|
||||||
const locale = isFi ? "fi-FI" : "en-GB";
|
const locale = isFi ? "fi-FI" : "en-GB";
|
||||||
|
|
||||||
const filteredEvents = events.map((e) => ({
|
const filteredEvents = events.map((e) => ({
|
||||||
@@ -62,6 +65,9 @@ const Events: React.FC<EventsProps> = ({ events, lang }) => {
|
|||||||
<PageLink to="/kilta/toiminta#tapahtumat" desc={pageLinkDesc}>
|
<PageLink to="/kilta/toiminta#tapahtumat" desc={pageLinkDesc}>
|
||||||
{pageLinkText}
|
{pageLinkText}
|
||||||
</PageLink>
|
</PageLink>
|
||||||
|
<PageLink to="https://calendar.google.com/calendar/u/0?cid=Y19mYjhhNWUwMjVjMjhkMTg5YTkzMWYyN2U5N2M4ODBmMGFhNTdmN2M1NDFlYzVhNjdlZDM4NzliYTVhNDEwNWI1QGdyb3VwLmNhbGVuZGFyLmdvb2dsZS5jb20" desc={googleCalendarDesc}>
|
||||||
|
{googleCalendarText}
|
||||||
|
</PageLink>
|
||||||
</aside>
|
</aside>
|
||||||
|
|
||||||
</CardSection>
|
</CardSection>
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ export const renderNavigationItems = (mobile = false): JSX.Element => (
|
|||||||
<NavbarChildLink to="/kilta/kunnianosoitukset">Kunnianosoitukset</NavbarChildLink>
|
<NavbarChildLink to="/kilta/kunnianosoitukset">Kunnianosoitukset</NavbarChildLink>
|
||||||
<NavbarChildLink to="https://static.sahkoinsinoorikilta.fi">Dokumenttiarkisto</NavbarChildLink>
|
<NavbarChildLink to="https://static.sahkoinsinoorikilta.fi">Dokumenttiarkisto</NavbarChildLink>
|
||||||
<NavbarChildLink to="https://sik.kuvat.fi">Kuvagalleria</NavbarChildLink>
|
<NavbarChildLink to="https://sik.kuvat.fi">Kuvagalleria</NavbarChildLink>
|
||||||
|
<NavbarChildLink to="/kilta/liity">Jäseneksi</NavbarChildLink>
|
||||||
</NavbarDropdownLink>
|
</NavbarDropdownLink>
|
||||||
<NavbarDropdownLink to="/opinnot_ja_ura" text="Opinnot ja ura" exploded={mobile} />
|
<NavbarDropdownLink to="/opinnot_ja_ura" text="Opinnot ja ura" exploded={mobile} />
|
||||||
<NavbarDropdownLink to="/yritysyhteistyo" text="Yritysyhteistyö" exploded={mobile} />
|
<NavbarDropdownLink to="/yritysyhteistyo" text="Yritysyhteistyö" exploded={mobile} />
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
import React from "react";
|
||||||
|
import { NextPage } from "next";
|
||||||
|
import Head from "next/head";
|
||||||
|
import JoinPageView from "@views/JoinPage/JoinPageView";
|
||||||
|
import PageWrapper from "@views/common/PageWrapper";
|
||||||
|
|
||||||
|
const JoinPage: NextPage = () => (
|
||||||
|
<>
|
||||||
|
<Head>
|
||||||
|
<link rel="canonical" href={`${process.env.NEXT_PUBLIC_SITE_URL}/kilta/liity`} />
|
||||||
|
</Head>
|
||||||
|
<PageWrapper>
|
||||||
|
<JoinPageView />
|
||||||
|
</PageWrapper>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
|
||||||
|
export default JoinPage;
|
||||||
@@ -111,13 +111,13 @@ const ActualPageView: React.FC<ActualPageViewProps> = ({ events, feed }) => (
|
|||||||
<div>
|
<div>
|
||||||
<h6 id="elepaja">Rakenna kaikkea elektroniikkaan liittyvää</h6>
|
<h6 id="elepaja">Rakenna kaikkea elektroniikkaan liittyvää</h6>
|
||||||
<p>
|
<p>
|
||||||
Elepaja on sähköinsinöörikillan ylläpitämä elektroniikkapaja, jossa opiskelijat pääsevät soveltamaan koulussa oppimiaan taitojaan käytännön projekteissa.
|
SIK-PAJA on sähköinsinöörikillan ylläpitämä elektroniikkapaja, jossa opiskelijat pääsevät soveltamaan koulussa oppimiaan taitojaan käytännön projekteissa.
|
||||||
Opiskelijat ovat aikojen saatossa rakentaneet pajalla mitä monimuotoisempia projekteja kuten ensimmäisiä ledivilkkujaan, teslakäämejä, robotteja ja radiolähettimiä.
|
Opiskelijat ovat aikojen saatossa rakentaneet pajalla mitä monimuotoisempia projekteja kuten ensimmäisiä ledivilkkujaan, teslakäämejä, robotteja ja radiolähettimiä.
|
||||||
Jos elektroniikan rakentelu kiinnostaa tai tarvitset jonkun projektin kanssa apua niin tule ihmeessä käymään elepajalla.
|
Jos elektroniikan rakentelu kiinnostaa tai tarvitset jonkun projektin kanssa apua niin tule ihmeessä käymään elepajalla.
|
||||||
Pajan varustukseen kuluu perustyökalut, piirilevyn syövytysvälineet, kolvit, komponentit, pylväsporakone sekä laaja valikoima mittauslaitteita.
|
Pajan varustukseen kuluu perustyökalut, kolvit, komponentit sekä laaja valikoima mittauslaitteita.
|
||||||
Ota siis kola ja tule nauttimaan elepajan mukavasta ilmapiiristä Elepajan uusissa tiloissa kanditaattikeskuksessa ruokala alvarin alla.
|
Tule tutustumaan toimintaamme Kandidaattikeskuksessa ruokala Alvarin alapuolella sijaitseviin tiloihimme.
|
||||||
{" "}
|
{" "}
|
||||||
<Link to="https://elepaja.fi/tg">Tästä</Link> pääset liittymään elepajan Telegram-ryhmään.
|
<Link to="https://t.me/sikpaja">Tästä</Link> pääset liittymään pajan Telegram-ryhmään.
|
||||||
</p>
|
</p>
|
||||||
<h6 id="urheilu">Urheilua ja lajikokeiluja</h6>
|
<h6 id="urheilu">Urheilua ja lajikokeiluja</h6>
|
||||||
<p>
|
<p>
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"name": "Otto Julkunen",
|
"name": "Otto Julkunen",
|
||||||
"phone_number": null,
|
"phone_number": null,
|
||||||
"email": "otto.julkunen@sahkoinsinoorikilta.fi",
|
"email": "otto.julkunen@sahkoinsinoorikilta.fi",
|
||||||
"image": "https://static.sahkoinsinoorikilta.fi/img/board/placeholder.jpg"
|
"image": "https://static.sahkoinsinoorikilta.fi/img/board/ottom.jpg"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
"name": "Karoliina Talvikangas",
|
"name": "Karoliina Talvikangas",
|
||||||
"phone_number": null,
|
"phone_number": null,
|
||||||
"email": "karoliina.talvikangas@sahkoinsinoorikilta.fi",
|
"email": "karoliina.talvikangas@sahkoinsinoorikilta.fi",
|
||||||
"image": "https://static.sahkoinsinoorikilta.fi/img/board/placeholder.jpg"
|
"image": "https://static.sahkoinsinoorikilta.fi/img/board/karoliina.jpg"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -35,7 +35,7 @@
|
|||||||
"name": "Ville Lairila",
|
"name": "Ville Lairila",
|
||||||
"phone_number": null,
|
"phone_number": null,
|
||||||
"email": "ville.lairila@sahkoinsinoorikilta.fi",
|
"email": "ville.lairila@sahkoinsinoorikilta.fi",
|
||||||
"image": "https://static.sahkoinsinoorikilta.fi/img/board/placeholder.jpg"
|
"image": "https://static.sahkoinsinoorikilta.fi/img/board/ville.jpg"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -47,7 +47,7 @@
|
|||||||
"name": "Aaron Löfgren",
|
"name": "Aaron Löfgren",
|
||||||
"phone_number": null,
|
"phone_number": null,
|
||||||
"email": "aaron.lofgren@sahkoinsinoorikilta.fi",
|
"email": "aaron.lofgren@sahkoinsinoorikilta.fi",
|
||||||
"image": "https://static.sahkoinsinoorikilta.fi/img/board/placeholder.jpg"
|
"image": "https://static.sahkoinsinoorikilta.fi/img/board/aaron.jpg"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -59,7 +59,7 @@
|
|||||||
"name": "Kasper Skog",
|
"name": "Kasper Skog",
|
||||||
"phone_number": null,
|
"phone_number": null,
|
||||||
"email": "kasper.skog@sahkoinsinoorikilta.fi",
|
"email": "kasper.skog@sahkoinsinoorikilta.fi",
|
||||||
"image": "https://static.sahkoinsinoorikilta.fi/img/board/placeholder.jpg"
|
"image": "https://static.sahkoinsinoorikilta.fi/img/board/kasper.jpg"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -71,7 +71,7 @@
|
|||||||
"name": "Roni Vallius",
|
"name": "Roni Vallius",
|
||||||
"phone_number": null,
|
"phone_number": null,
|
||||||
"email": "roni.vallius@sahkoinsinoorikilta.fi",
|
"email": "roni.vallius@sahkoinsinoorikilta.fi",
|
||||||
"image": "https://static.sahkoinsinoorikilta.fi/img/board/placeholder.jpg"
|
"image": "https://static.sahkoinsinoorikilta.fi/img/board/roni.jpg"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -83,7 +83,7 @@
|
|||||||
"name": "Elina Huttunen",
|
"name": "Elina Huttunen",
|
||||||
"phone_number": null,
|
"phone_number": null,
|
||||||
"email": "elina.huttunen@sahkoinsinoorikilta.fi",
|
"email": "elina.huttunen@sahkoinsinoorikilta.fi",
|
||||||
"image": "https://static.sahkoinsinoorikilta.fi/img/board/placeholder.jpg"
|
"image": "https://static.sahkoinsinoorikilta.fi/img/board/elina.jpg"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -95,7 +95,7 @@
|
|||||||
"name": "Julia Pykälä-aho",
|
"name": "Julia Pykälä-aho",
|
||||||
"phone_number": null,
|
"phone_number": null,
|
||||||
"email": "julia.pykalaaho@sahkoinsinoorikilta.fi",
|
"email": "julia.pykalaaho@sahkoinsinoorikilta.fi",
|
||||||
"image": "https://static.sahkoinsinoorikilta.fi/img/board/placeholder.jpg"
|
"image": "https://static.sahkoinsinoorikilta.fi/img/board/julia.jpg"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -107,7 +107,7 @@
|
|||||||
"name": "Juulia Härkönen",
|
"name": "Juulia Härkönen",
|
||||||
"phone_number": null,
|
"phone_number": null,
|
||||||
"email": "juulia.harkonen@sahkoinsinoorikilta.fi",
|
"email": "juulia.harkonen@sahkoinsinoorikilta.fi",
|
||||||
"image": "https://static.sahkoinsinoorikilta.fi/img/board/placeholder.jpg"
|
"image": "https://static.sahkoinsinoorikilta.fi/img/board/juulia.jpg"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -119,7 +119,7 @@
|
|||||||
"name": "Tommi Sytelä",
|
"name": "Tommi Sytelä",
|
||||||
"phone_number": null,
|
"phone_number": null,
|
||||||
"email": "tommi.sytela@sahkoinsinoorikilta.fi",
|
"email": "tommi.sytela@sahkoinsinoorikilta.fi",
|
||||||
"image": "https://static.sahkoinsinoorikilta.fi/img/board/placeholder.jpg"
|
"image": "https://static.sahkoinsinoorikilta.fi/img/board/tommi.jpg"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -131,7 +131,7 @@
|
|||||||
"name": "Pyry Vaara",
|
"name": "Pyry Vaara",
|
||||||
"phone_number": null,
|
"phone_number": null,
|
||||||
"email": "pyry.vaara@sahkoinsinoorikilta.fi",
|
"email": "pyry.vaara@sahkoinsinoorikilta.fi",
|
||||||
"image": "https://static.sahkoinsinoorikilta.fi/img/board/placeholder.jpg"
|
"image": "https://static.sahkoinsinoorikilta.fi/img/board/pyry.jpg"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -143,7 +143,7 @@
|
|||||||
"name": "Nette Levijoki",
|
"name": "Nette Levijoki",
|
||||||
"phone_number": null,
|
"phone_number": null,
|
||||||
"email": "nette.levijoki@sahkoinsinoorikilta.fi",
|
"email": "nette.levijoki@sahkoinsinoorikilta.fi",
|
||||||
"image": "https://static.sahkoinsinoorikilta.fi/img/board/placeholder.jpg"
|
"image": "https://static.sahkoinsinoorikilta.fi/img/board/nette.jpg"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -155,7 +155,7 @@
|
|||||||
"name": "Visa Kurvi",
|
"name": "Visa Kurvi",
|
||||||
"phone_number": null,
|
"phone_number": null,
|
||||||
"email": "visa.kurvi@sahkoinsinoorikilta.fi",
|
"email": "visa.kurvi@sahkoinsinoorikilta.fi",
|
||||||
"image": "https://static.sahkoinsinoorikilta.fi/img/board/placeholder.jpg"
|
"image": "https://static.sahkoinsinoorikilta.fi/img/board/visa.jpg"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,11 +65,9 @@ const CorporatePageView: React.FC<CorporatePageViewProps> = ({ jobAds }) => (
|
|||||||
|
|
||||||
<h6>Potentiaalin Tasaus</h6>
|
<h6>Potentiaalin Tasaus</h6>
|
||||||
<p>
|
<p>
|
||||||
Kiltamme viettää perinteikkäitä vuosijuhliaan helmikuun kolmantena lauantaina.
|
Kiltamme viettää perinteikästä vuosijuhlaansa helmikuun kolmantena lauantaina.
|
||||||
Potentiaalin Tasaus on kiltamme juhlavin ja rakkain tapahtuma.
|
Potentiaalin Tasaus on kiltamme juhlavin ja rakkain tapahtuma.
|
||||||
Yrityksillä on mahdollisuus osallistua vuosijuhliin niin pienellä kuin suurellakin panoksella.
|
Yrityksillä on mahdollisuus osallistua vuosijuhliin niin pienellä kuin suurellakin panoksella!
|
||||||
Killan 100-vuotisjuhla PoTa100 lähestyy myös kovaa vauhtia.
|
|
||||||
Jos yrityksesi on kiinnostunut 100-vuotisjuhlasta, kannattaa ohjautua osoitteeseen <Link to="https://sik100.fi">sik100.fi</Link>.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h6>Killan nettisivut ja työpaikkamainokset</h6>
|
<h6>Killan nettisivut ja työpaikkamainokset</h6>
|
||||||
|
|||||||
@@ -13,24 +13,24 @@ const FreshmenPageHero: React.FC = () => (
|
|||||||
<HeroAside bgColor="lightTurquoise">
|
<HeroAside bgColor="lightTurquoise">
|
||||||
<HeroAsideItem
|
<HeroAsideItem
|
||||||
header="Lue killan fuksiopas"
|
header="Lue killan fuksiopas"
|
||||||
link="https://static.sahkoinsinoorikilta.fi/FTMK/Fuksiopas2022.pdf"
|
link="https://static.sahkoinsinoorikilta.fi/FTMK/Fuksiopas2023.pdf"
|
||||||
linkText="lue fuksiopas täältä!"
|
linkText="lue fuksiopas täältä!"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<HeroAsideItem
|
<HeroAsideItem
|
||||||
header="Seuraa killan tiedotusta"
|
header="Seuraa killan tiedotusta"
|
||||||
link="https://t.me/+ubTeGSYKTvg3NmVk"
|
link="https://t.me/+AB-JMbAxM2c0MDc0"
|
||||||
linkText="Liity killan Telegram-ryhmiin"
|
linkText="Liity killan Telegram-ryhmään!"
|
||||||
/>
|
/>
|
||||||
<HeroAsideItem
|
<HeroAsideItem
|
||||||
header="Kaikki kunnossa opiskelua varten?"
|
header="Kaikki kunnossa opiskelua varten?"
|
||||||
link="https://into.aalto.fi/pages/viewpage.action?pageId=1183171"
|
link="https://www.aalto.fi/fi/ohjelmat/sahkotekniikan-kandidaattiohjelma/opintojen-aloittaminen"
|
||||||
linkText="Lue korkeakoulun tietopaketti"
|
linkText="Lue korkeakoulun tietopaketti"
|
||||||
/>
|
/>
|
||||||
<HeroAsideItem
|
<HeroAsideItem
|
||||||
header="ISO-ryhmät ja ISO-henkilöt?"
|
header="Fuksiryhmät ja ISOt?"
|
||||||
link="#isot"
|
link="#isot"
|
||||||
linkText="Tsekkaa ISO-henkilöiden tiedot"
|
linkText="Tietoa fuksiryhmistä"
|
||||||
/>
|
/>
|
||||||
</HeroAside>
|
</HeroAside>
|
||||||
</Hero>
|
</Hero>
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ import {
|
|||||||
import FreshmenPageHero from "./FreshmenPageHero";
|
import FreshmenPageHero from "./FreshmenPageHero";
|
||||||
|
|
||||||
const FUKSI_POINTS_LINK = "https://static.sahkoinsinoorikilta.fi/FTMK/Fuksipisteohje.pdf";
|
const FUKSI_POINTS_LINK = "https://static.sahkoinsinoorikilta.fi/FTMK/Fuksipisteohje.pdf";
|
||||||
const TG_GROUP_CHAT_LINK = "https://t.me/+1PqQHRVMjiAxMTU0";
|
const TG_GROUP_CHAT_LINK = "https://t.me/+6rAKYPVaCmg4ZTlk";
|
||||||
const TG_NOTIFICATIONS_LINK = "https://t.me/+Ln8TvQ-_id9kZTU0";
|
const TG_NOTIFICATIONS_LINK = "https://t.me/+57BnXcTlsuU0YWQ0";
|
||||||
const EMAIL_LINK = "ftmk@sahkoinsinoorikilta.fi";
|
const EMAIL_LINK = "ftmk@sahkoinsinoorikilta.fi";
|
||||||
const EMAIL_LINK_MAILTO = `mailto:${EMAIL_LINK}`;
|
const EMAIL_LINK_MAILTO = `mailto:${EMAIL_LINK}`;
|
||||||
|
|
||||||
@@ -58,7 +58,7 @@ const FreshmenPageView: React.FC = () => (
|
|||||||
|
|
||||||
<ImageContainer>
|
<ImageContainer>
|
||||||
<Image
|
<Image
|
||||||
src="https://static.sahkoinsinoorikilta.fi/uus_webi/fuksikipparit-2022.jpg"
|
src="https://static.sahkoinsinoorikilta.fi/uus_webi/fuksikipparit-2023.jpg"
|
||||||
alt="Kipparit"
|
alt="Kipparit"
|
||||||
layout="responsive"
|
layout="responsive"
|
||||||
width={100}
|
width={100}
|
||||||
@@ -69,7 +69,7 @@ const FreshmenPageView: React.FC = () => (
|
|||||||
|
|
||||||
<h6>Fuksikapteenit</h6>
|
<h6>Fuksikapteenit</h6>
|
||||||
<p>
|
<p>
|
||||||
Me olemme fuksikapteenisi <strong>Melisa</strong> ja <strong>Eveliina</strong> ja tulemme olemaan tukenasi sekä valvomassa suorituksiasi fuksivuoden seikkailuissa kohti teekkarilakkia, jonka voit ansaita mahdollisesti järjestettävänä Wappuna ensi keväällä.
|
Me olemme fuksikapteenisi <strong>Aaron</strong> ja <strong>Kasper</strong> ja tulemme olemaan tukenasi sekä valvomassa suorituksiasi fuksivuoden seikkailuissa kohti teekkarilakkia, jonka voit ansaita mahdollisesti järjestettävänä Wappuna ensi keväällä.
|
||||||
Jos sinulla on mitään kysymyksiä, ota ihmeessä meihin yhteyttä esimerkiksi <Link to={TG_GROUP_CHAT_LINK} target="_blank">Telegramissa</Link> tai <a href={EMAIL_LINK_MAILTO}>sähköpostitse</a>.
|
Jos sinulla on mitään kysymyksiä, ota ihmeessä meihin yhteyttä esimerkiksi <Link to={TG_GROUP_CHAT_LINK} target="_blank">Telegramissa</Link> tai <a href={EMAIL_LINK_MAILTO}>sähköpostitse</a>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -79,14 +79,14 @@ const FreshmenPageView: React.FC = () => (
|
|||||||
Ajan myötä palapelin palat muodostavat sinun näköisesi kuvan ja pääset itse vaikuttamaan siihen, miltä lopputulos näyttää.
|
Ajan myötä palapelin palat muodostavat sinun näköisesi kuvan ja pääset itse vaikuttamaan siihen, miltä lopputulos näyttää.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Orientaatioviikko järjestetään 29.08.2022-02.09.2022, mutta jo ennen sitä sinulla on mahdollisuus tulla tutustumaan meihin, muihin fuksiehin ja ISOihin rennon Varaslähtöön. Varaslähtö fuksivuoteen järjestetään 20.8.2022. Siitä lisää Telegram-ryhmissä!
|
Orientaatioviikko järjestetään 28.8.-1.9.2023, mutta jo ennen sitä sinulla on mahdollisuus tulla tutustumaan meihin, muihin fuksiehin ja ISOihin rennon Varaslähtöön. Varaslähtö fuksivuoteen järjestetään 19.8.2023. Siitä lisää Telegram-ryhmissä!
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h6>Melisa Dönmez</h6>
|
<h6>Aaron Löfgren</h6>
|
||||||
<p>044 239 2385 <br />melisa.donmez (ät) sahkoinsinoorikilta.fi <br />@melisadonmez</p>
|
<p>040 484 5418<br />aaron.lofgren (ät) sahkoinsinoorikilta.fi <br />@aaronlofgren</p>
|
||||||
|
|
||||||
<h6>Eveliina Ahonen</h6>
|
<h6>Kasper Skog</h6>
|
||||||
<p>050 911 8818 <br />eveliina.ahonen (ät) sahkoinsinoorikilta.fi <br />@ahoonen</p>
|
<p>040 667 5266<br />kasper.skog (ät) sahkoinsinoorikilta.fi <br />@Skooogi</p>
|
||||||
</div>
|
</div>
|
||||||
<aside>
|
<aside>
|
||||||
<div>
|
<div>
|
||||||
@@ -103,14 +103,14 @@ const FreshmenPageView: React.FC = () => (
|
|||||||
<div>
|
<div>
|
||||||
<InfoBox>
|
<InfoBox>
|
||||||
<h6>Killan Fuksiopas</h6>
|
<h6>Killan Fuksiopas</h6>
|
||||||
<Link to="https://static.sahkoinsinoorikilta.fi/FTMK/Fuksiopas2022.pdf" target="_blank">
|
<Link to="https://static.sahkoinsinoorikilta.fi/FTMK/Fuksiopas2023.pdf" target="_blank">
|
||||||
<FopasImage
|
<FopasImage
|
||||||
src="https://static.sahkoinsinoorikilta.fi/FTMK/Fuksiopas2022-kansi.jpg"
|
src="https://static.sahkoinsinoorikilta.fi/FTMK/Fuksiopas2023-kansi.png"
|
||||||
/>
|
/>
|
||||||
</Link>
|
</Link>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Ennen opintojen alkua on hyvä tutustua killan fuksioppaaseen. Sitä pääset selailemaan <Link to="https://static.sahkoinsinoorikilta.fi/FTMK/Fuksiopas2022.pdf" target="_blank"> tästä.</Link>
|
Ennen opintojen alkua on hyvä tutustua killan fuksioppaaseen. Sitä pääset selailemaan <Link to="https://static.sahkoinsinoorikilta.fi/FTMK/Fuksiopas2023.pdf" target="_blank"> tästä.</Link>
|
||||||
</p>
|
</p>
|
||||||
<br />
|
<br />
|
||||||
<h6>Telegram?</h6>
|
<h6>Telegram?</h6>
|
||||||
@@ -123,12 +123,12 @@ const FreshmenPageView: React.FC = () => (
|
|||||||
SIK:n fukseilla on oma Telegram-ryhmä, jonne pääset liitymään tästä:
|
SIK:n fukseilla on oma Telegram-ryhmä, jonne pääset liitymään tästä:
|
||||||
</p>
|
</p>
|
||||||
<QRImages
|
<QRImages
|
||||||
src="https://static.sahkoinsinoorikilta.fi/FTMK/sik-fuksit-2022.jpg"
|
src="https://static.sahkoinsinoorikilta.fi/FTMK/sik-fuksit-2023.jpg"
|
||||||
/>
|
/>
|
||||||
<p>tai <Link to={TG_GROUP_CHAT_LINK} target="_blank">tästä</Link></p>
|
<p>tai <Link to={TG_GROUP_CHAT_LINK} target="_blank">tästä</Link></p>
|
||||||
<p>Liity myös samalla SIK-fuksien tiedotuskanavalle tästä:</p>
|
<p>Liity myös samalla SIK-fuksien tiedotuskanavalle tästä:</p>
|
||||||
<QRImages
|
<QRImages
|
||||||
src="https://static.sahkoinsinoorikilta.fi/FTMK/sik-fuksit-2022-tiedotus.jpg"
|
src="https://static.sahkoinsinoorikilta.fi/FTMK/sik-fuksit-2023-tiedotus.jpg"
|
||||||
/>
|
/>
|
||||||
<p>tai <Link to={TG_NOTIFICATIONS_LINK} target="_blank">tästä</Link></p>
|
<p>tai <Link to={TG_NOTIFICATIONS_LINK} target="_blank">tästä</Link></p>
|
||||||
</InfoBox>
|
</InfoBox>
|
||||||
@@ -144,10 +144,10 @@ const FreshmenPageView: React.FC = () => (
|
|||||||
</CTASection>
|
</CTASection>
|
||||||
|
|
||||||
<TextSection>
|
<TextSection>
|
||||||
<h3 id="isot">Isoryhmät</h3>
|
<h3 id="isot">Fuksiryhmät ja ISO-toiminta</h3>
|
||||||
<div>
|
<div>
|
||||||
<p>
|
<p>
|
||||||
SIK:n fuksit nauttivat hurmaavien ISOhenkilöidensä opastuksesta ja hellästä huolenpidosta omissa fuksiryhmissään.
|
SIK:n fuksit nauttivat hurmaavien ISOjen opastuksesta ja hellästä huolenpidosta omissa fuksiryhmissään.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
ISOt ovat hiukan vanhempia opiskelijoita ja kiltalaisia, joiden tehtävänä on olla tukenasi fuksivuoden ajan. Ensimmäisenä päivänä teidät jaetaan noin kymmenen hengen fuksiryhmiin ja jokaiseen ryhmään kuuluu kolmesta viiteen ISOa, joista yksi toimii opintoISOna. ISOilta voit kysyä mitä vain opiskeluun ja opiskelijaelämään liittyen. Vaikka he eivät tietäisi vastausta, he luultavimmin osaavat auttaa sinua vastausten löytämisessä.
|
ISOt ovat hiukan vanhempia opiskelijoita ja kiltalaisia, joiden tehtävänä on olla tukenasi fuksivuoden ajan. Ensimmäisenä päivänä teidät jaetaan noin kymmenen hengen fuksiryhmiin ja jokaiseen ryhmään kuuluu kolmesta viiteen ISOa, joista yksi toimii opintoISOna. ISOilta voit kysyä mitä vain opiskeluun ja opiskelijaelämään liittyen. Vaikka he eivät tietäisi vastausta, he luultavimmin osaavat auttaa sinua vastausten löytämisessä.
|
||||||
|
|||||||
@@ -84,6 +84,7 @@ const HonoraryPageView: React.FC = () => (
|
|||||||
<li>2020 Anni Parkkila, Aliisa Pietilä</li>
|
<li>2020 Anni Parkkila, Aliisa Pietilä</li>
|
||||||
<li>2021 Essi Jukkala</li>
|
<li>2021 Essi Jukkala</li>
|
||||||
<li>2022 Erna Virtanen, Tuukka Syrjänen</li>
|
<li>2022 Erna Virtanen, Tuukka Syrjänen</li>
|
||||||
|
<li>2023 Emmaleena Ahonen</li>
|
||||||
</ul>
|
</ul>
|
||||||
<h2>Standaari</h2>
|
<h2>Standaari</h2>
|
||||||
<p>Standaari voidaan hallituksen päätöksellä lahjoittaa killan toimintaan myönteisesti vaikuttaneille tahoille. Standaarit on numeroitu lahjoittamisjärjestyksessä.</p>
|
<p>Standaari voidaan hallituksen päätöksellä lahjoittaa killan toimintaan myönteisesti vaikuttaneille tahoille. Standaarit on numeroitu lahjoittamisjärjestyksessä.</p>
|
||||||
@@ -102,6 +103,7 @@ const HonoraryPageView: React.FC = () => (
|
|||||||
<li>2013 Martti Valtonen</li>
|
<li>2013 Martti Valtonen</li>
|
||||||
<li>2016 ABB Oy</li>
|
<li>2016 ABB Oy</li>
|
||||||
<li>2021 Elektroteknologsektionens Kalle Anka-Kommitté</li>
|
<li>2021 Elektroteknologsektionens Kalle Anka-Kommitté</li>
|
||||||
|
<li>2023 Tekniikan akateemiset TEK, Automaatio- ja systeemitekniikan kilta ry</li>
|
||||||
</ul>
|
</ul>
|
||||||
<h2>Kultaiset ansiomerkit</h2>
|
<h2>Kultaiset ansiomerkit</h2>
|
||||||
<p>
|
<p>
|
||||||
@@ -205,6 +207,12 @@ const HonoraryPageView: React.FC = () => (
|
|||||||
<li>2022 Sini Huhtinen</li>
|
<li>2022 Sini Huhtinen</li>
|
||||||
<li>2022 Ukko Kasvi</li>
|
<li>2022 Ukko Kasvi</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
<ul>
|
||||||
|
<li>2023 Sasu Saalasti</li>
|
||||||
|
<li>2023 Ville Kaakinen</li>
|
||||||
|
<li>2023 Mikael Liimatainen</li>
|
||||||
|
<li>2023 Jami Hyytiäinen</li>
|
||||||
|
</ul>
|
||||||
<h2>Hopeiset ansiomerkit</h2>
|
<h2>Hopeiset ansiomerkit</h2>
|
||||||
<p>Killan hallitus voi myöntää hopeitosen ansiomerkin killan jäsenelle tai perustellusta syystä myös muulle henkilölle tunnustuksena erityisestä kiinnostuksesta kiltaa kohtaan sekä ansioituneesta toiminnasta killan hyväksi.</p>
|
<p>Killan hallitus voi myöntää hopeitosen ansiomerkin killan jäsenelle tai perustellusta syystä myös muulle henkilölle tunnustuksena erityisestä kiinnostuksesta kiltaa kohtaan sekä ansioituneesta toiminnasta killan hyväksi.</p>
|
||||||
<ul>
|
<ul>
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ const InEnglishPageView: React.FC<InEnglishPageViewProps> = ({ events, feed }) =
|
|||||||
<p>Balance your studies and get connected</p>
|
<p>Balance your studies and get connected</p>
|
||||||
<div>
|
<div>
|
||||||
<h6>Build everything related to electronics</h6>
|
<h6>Build everything related to electronics</h6>
|
||||||
<p>Elepaja is an electronics workshop run by the guild, where students get to apply skills they have learned at school in practical projects. Over time, students have built diverse projects in the workshop, such as their first LED flashlights, tesla windings, robots and radio transmitters. If you are interested in building electronics or you need help with a project, then come visit the workshop located at Otakaari 1 h023b. The workshop is equipped with basic tools such as circuit boards, etching tools, soldering tools, various components, column drill and a wide range of measuring equipment. You can join <Link to="https://elepaja.fi/tg">elepaja's Telegram group here</Link>.</p>
|
<p>SIK-PAJA is an electronics workshop run by the guild, where students get to apply skills they have learned at school in practical projects. Over time, students have built diverse projects in the workshop, such as their first LED overall badges, tesla windings, robots and radio transmitters. If you are interested in building electronics or you need help with a project, then come visit the workshop located at Otakaari 1 h023b. The workshop is equipped with basic tools such as circuit boards, etching tools, soldering tools, various components and a wide range of measuring equipment. You can join <Link to="https://t.me/sikpaja">sikpaja's Telegram group here</Link>.</p>
|
||||||
<h6>Sports events</h6>
|
<h6>Sports events</h6>
|
||||||
<p>The committee of Well Being runs many things in our guild. One of these is providing sports events to the guild members. In cooperation with other guilds, we regularly organize opportunities to play floorball and other sports. Sports tryouts are available throughout the year and are organized in co-operation with various sports organizations in Otaniemi. Keep your eyes open in the <Link to="#events">events</Link> section and join the <Link to="https://t.me/joinchat/DJRXxkKd0SMj0e9pBPXF1A/"> sports Telegram group.</Link></p>
|
<p>The committee of Well Being runs many things in our guild. One of these is providing sports events to the guild members. In cooperation with other guilds, we regularly organize opportunities to play floorball and other sports. Sports tryouts are available throughout the year and are organized in co-operation with various sports organizations in Otaniemi. Keep your eyes open in the <Link to="#events">events</Link> section and join the <Link to="https://t.me/joinchat/DJRXxkKd0SMj0e9pBPXF1A/"> sports Telegram group.</Link></p>
|
||||||
<h6>Culture from culinarism to theater</h6>
|
<h6>Culture from culinarism to theater</h6>
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
import React from "react";
|
||||||
|
import { TextSection, Link } from "@components/index";
|
||||||
|
import Button from "@components/Button";
|
||||||
|
import Stripe from "stripe";
|
||||||
|
|
||||||
|
const stripe = new Stripe(
|
||||||
|
"", // <--- API AVAIN
|
||||||
|
{ apiVersion: "2023-08-16" },
|
||||||
|
);
|
||||||
|
|
||||||
|
const paymentIntentTest = async () => {
|
||||||
|
const intent = await stripe.paymentIntents.create({
|
||||||
|
amount: 8,
|
||||||
|
currency: "eur",
|
||||||
|
});
|
||||||
|
return intent;
|
||||||
|
};
|
||||||
|
|
||||||
|
const JoinPageView: React.FC = () => (
|
||||||
|
<TextSection>
|
||||||
|
<h1>Liity jäseneksi ja maksa jäsenmaksu</h1>
|
||||||
|
<p>
|
||||||
|
Killan jäsenhakemuksen voi täyttää <Link to="https://api.sahkoinsinoorikilta.fi/members/application">täältä.</Link> Muistakaa
|
||||||
|
myös maksaa jäsenmaksu!
|
||||||
|
<Button onClick={paymentIntentTest} buttonStyle="hero">
|
||||||
|
Payment intent testi
|
||||||
|
</Button>
|
||||||
|
</p>
|
||||||
|
</TextSection>
|
||||||
|
);
|
||||||
|
|
||||||
|
export default JoinPageView;
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import { Selector } from "testcafe";
|
import { Selector } from "testcafe";
|
||||||
import {
|
import {
|
||||||
getSiteRoot, getPageUrl, generateTestForm, deleteEvent, deleteForm, doLogin, generateAccessToken, getPostRequestLogger,
|
getSiteRoot, getPageUrl, generateTestForm, deleteEvent, deleteForm, doLogin, generateAccessToken, getPostRequestLogger, waitForLogger,
|
||||||
} from "../utils";
|
} from "../utils";
|
||||||
|
|
||||||
const LOGGER = getPostRequestLogger("events/");
|
const LOGGER = getPostRequestLogger("events/");
|
||||||
@@ -78,6 +78,8 @@ test("Logged in user can create event", async (t) => {
|
|||||||
await t.click(submit);
|
await t.click(submit);
|
||||||
|
|
||||||
const parsed = JSON.parse(LOGGER.requests[0].response.body as string);
|
const parsed = JSON.parse(LOGGER.requests[0].response.body as string);
|
||||||
|
|
||||||
|
await waitForLogger(LOGGER);
|
||||||
// eslint-disable-next-line no-param-reassign
|
// eslint-disable-next-line no-param-reassign
|
||||||
t.fixtureCtx.eventId = parsed.id;
|
t.fixtureCtx.eventId = parsed.id;
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { Selector } from "testcafe";
|
import { Selector } from "testcafe";
|
||||||
import {
|
import {
|
||||||
getSiteRoot, getPageUrl, deleteForm, doLogin, generateAccessToken, getPostRequestLogger,
|
getSiteRoot, getPageUrl, deleteForm, doLogin, generateAccessToken, getPostRequestLogger, waitForLogger
|
||||||
} from "../utils";
|
} from "../utils";
|
||||||
|
|
||||||
const LOGGER = getPostRequestLogger("signupForm/");
|
const LOGGER = getPostRequestLogger("signupForm/");
|
||||||
@@ -97,6 +97,8 @@ test("Logged in user can create signup", async (t) => {
|
|||||||
await t.click(submit);
|
await t.click(submit);
|
||||||
|
|
||||||
const parsed = JSON.parse(LOGGER.requests[0].response.body as string);
|
const parsed = JSON.parse(LOGGER.requests[0].response.body as string);
|
||||||
|
|
||||||
|
await waitForLogger(LOGGER);
|
||||||
// eslint-disable-next-line no-param-reassign
|
// eslint-disable-next-line no-param-reassign
|
||||||
t.fixtureCtx.formId = parsed.id;
|
t.fixtureCtx.formId = parsed.id;
|
||||||
|
|
||||||
|
|||||||
@@ -157,3 +157,12 @@ export const generateTestEvent = async (formIds = [], jwt_access: string) => (
|
|||||||
);
|
);
|
||||||
|
|
||||||
export const sleep = async (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
|
export const sleep = async (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
|
||||||
|
|
||||||
|
export const waitForLogger = async (logger: RequestLogger) => {
|
||||||
|
for (let i = 0; i < 50; i++) {
|
||||||
|
await sleep(100);
|
||||||
|
if (logger.requests.length > 0 ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user