Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 33 additions & 33 deletions .github/workflows/or-test.yml
Original file line number Diff line number Diff line change
@@ -1,38 +1,38 @@
name: OR test

on:
push:
branches: ['main', 'develop']
pull_request:
types: [opened, synchronize]
push:
branches: ["main", "develop"]
pull_request:
types: [opened, synchronize]

jobs:
build:
name: Build and Test
timeout-minutes: 15
runs-on: ubuntu-latest

steps:
- name: Check out code
uses: actions/checkout@v4
with:
fetch-depth: 2

- uses: pnpm/action-setup@v3
with:
version: 8

- name: Setup Node.js environment
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'pnpm'

- name: Install dependencies
run: pnpm install

- name: Build
run: pnpm --filter="./packages/*" --filter=or68 build

- name: Test
run: pnpm --filter=or68 test
build:
name: Build and Test
timeout-minutes: 15
runs-on: ubuntu-latest

steps:
- name: Check out code
uses: actions/checkout@v4
with:
fetch-depth: 2

- uses: pnpm/action-setup@v3
with:
version: 8

- name: Setup Node.js environment
uses: actions/setup-node@v4
with:
node-version: 20
cache: "pnpm"

- name: Install dependencies
run: pnpm install

- name: Build
run: pnpm --filter="./packages/*" --filter=or69 build

- name: Test
run: pnpm --filter=or69 test
4 changes: 2 additions & 2 deletions src/app/(max-w)/calendar/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ export default function Page(): JSX.Element {
✨<br />
👉
<Link
className='z-50 underline text-primary font-bold'
className='z-50 font-bold text-primary underline'
href='https://bit.ly/nisit109-entry-form'
rel='noopener noreferrer'
target='_blank'
Expand Down Expand Up @@ -141,7 +141,7 @@ export default function Page(): JSX.Element {
<Image alt='' src={Calendar2} />
<p className='mb-12 mt-4 px-2 text-start'>
📣 กำหนดการการลงทะเบียนนิสิตใหม่ ภาคการศึกษาต้น
ปีการศึกษา 2568 ⚙️📚 [รหัส 68]
ปีการศึกษา 2569 ⚙️📚 [รหัส 69]
</p>
</Link>
</div>
Expand Down
18 changes: 9 additions & 9 deletions src/app/(max-w)/handbook/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,20 @@ import Handbook5 from '@/assets/images/handbook/handbook5.png';
function Header({ children }: { children: string }): JSX.Element {
return (
<div className='flex h-fit w-full gap-3'>
<div className='bg-primary w-fit'>
<h2 className='text-primary-foreground px-5 py-3 text-lg font-bold md:text-xl lg:px-10 lg:py-5 lg:text-2xl'>
<div className='w-fit bg-primary'>
<h2 className='px-5 py-3 text-lg font-bold text-primary-foreground md:text-xl lg:px-10 lg:py-5 lg:text-2xl'>
{children}
</h2>
</div>
<div className='bg-primary w-3 lg:w-6' />
<div className='w-3 bg-primary lg:w-6' />
</div>
);
}

function Link({ href }: { href: string }): JSX.Element {
return (
<NextLink
className='text-primary font-semibold underline'
className='font-semibold text-primary underline'
href={href}
rel='noreferrer noopener'
target='_blank'
Expand All @@ -37,7 +37,7 @@ export default function Handbook(): JSX.Element {
return (
<main className='mt-24 flex flex-col justify-center gap-8 pb-12 text-sm md:text-lg lg:mt-0 lg:pb-28 lg:text-2xl'>
<NextLink className='absolute top-8' href='/'>
<BackIcon className='stroke-primary size-7 lg:hidden' />
<BackIcon className='size-7 stroke-primary lg:hidden' />
</NextLink>
<div className='mb-8 flex w-full flex-col items-center gap-6'>
<ESCLogoWithText className='lg:hidden' />
Expand All @@ -49,7 +49,7 @@ export default function Handbook(): JSX.Element {
<Header>การตรวจสอบตารางเรียน</Header>
<ol className='flex list-inside list-decimal flex-col gap-2 px-5'>
<li>
เข้าเว็บไซต์ <Link href='https://or68.intania.org' />{' '}
เข้าเว็บไซต์ <Link href='https://or69.intania.org' />{' '}
เพื่อตรวจสอบตารางเรียน
</li>
<li>
Expand Down Expand Up @@ -118,19 +118,19 @@ export default function Handbook(): JSX.Element {
<ol className='mt-4 flex list-inside list-decimal flex-col gap-2 pl-8 [counter-reset:section]'>
<li className="[counter-increment:section] marker:[content:counters(section,'.''.')]">
สำหรับกลุ่มรายวิชา ให้นิสิตเปลี่ยนคำว่า{' '}
<span className='text-primary font-bold underline'>
<span className='font-bold text-primary underline'>
เท่านั้น
</span>{' '}
เป็น{' '}
<span className='text-primary font-bold underline'>
<span className='font-bold text-primary underline'>
G
</span>{' '}
และใส่รหัสกลุ่มรายวิชาบริเวณสีแดง <br />
</li>
<li className="[counter-increment:section] marker:[content:counters(section,'.')'.']">
สำหรับรายวิชา EXP ENG I (5500111)
ให้นิสิตกรอกตอนเรียนของตนเองหน้าช่อง{' '}
<span className='text-primary font-semibold underline'>
<span className='font-semibold text-primary underline'>
เท่านั้น
</span>{' '}
บริเวณสีน้ำเงินและเขียว ตามลำดับ <br />
Expand Down
2 changes: 1 addition & 1 deletion src/app/(max-w)/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import type { Metadata } from 'next';
import '@/styles/globals.css';

export const metadata: Metadata = {
title: 'OR68',
title: 'OR69',
};

export default function RootLayout({
Expand Down
81 changes: 81 additions & 0 deletions src/app/_page-active.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
'use client';
import { useState } from 'react';
import Image from 'next/image';
import { ESCLogoWithText } from '@/components/esc';
import { Button } from '@/components/ui/button';
import { Input } from '@/components/ui/input';
import { Label } from '@/components/ui/label';
import { useToast } from '@/components/ui/use-toast';
import { cn } from '@/lib/utils';
import { useUser } from '@/contexts/user-context';
import backgroundImage from '@/assets/backgrounds/imageBG.png';
import LandingPageBG from '@/assets/backgrounds/landing-page-bg';

export default function LandingPage(): JSX.Element {
const { setUser, error } = useUser();
const { toast } = useToast();
const [studentId, setStudentId] = useState<string>('');

const submitHandler = (e: React.FormEvent): void => {
e.preventDefault();

setUser(studentId);
if (error) {
toast({
variant: 'destructive',
title: 'Uh oh! Something went wrong.',
description: error.message,
});
}
};

return (
<main className='flex min-h-dvh w-full items-center justify-center'>
<div className='shadow-primary/25 bg-background flex aspect-[3/4] w-full max-w-sm flex-col items-center justify-center gap-10 rounded-3xl px-5 pb-16 pt-11 shadow-2xl md:aspect-[4/3] md:max-w-3xl'>
<ESCLogoWithText className='h-max w-14 md:w-20' />
<h1 className='flex flex-wrap items-center justify-center text-center text-xl font-semibold md:text-3xl'>
<span>ตรวจสอบตารางเรียน</span>
<span>และอาจารย์ที่ปรึกษา</span>
<span>&nbsp;สำหรับนิสิตชั้นปีที่ 1</span>
</h1>
<form
className='flex w-full max-w-lg flex-col gap-5 px-6'
onSubmit={submitHandler}
>
<div className='group relative w-full'>
<Input
id='student-id'
onChange={(e) => {
setStudentId(e.target.value);
}}
type='text'
value={studentId}
/>
<Label
className={cn(
'bg-background group-focus-within:text-foreground text-muted-foreground absolute left-4 top-1/2 -translate-y-1/2 duration-150 group-focus-within:-top-1 group-focus-within:px-2',
studentId && 'text-foreground -top-1 px-2'
)}
htmlFor='student-id'
>
เลขประจำตัวนิสิต
</Label>
</div>
<Button className='h-12 w-full py-4' type='submit'>
ตรวจสอบ
</Button>
</form>
</div>
<div className='pointer-events-none absolute left-0 top-0 -z-50 size-full select-none overflow-hidden'>
<div className='absolute left-0 top-0 -z-50 aspect-square w-full'>
<Image
alt=''
className='absolute aspect-square min-h-dvh min-w-full object-cover'
src={backgroundImage}
/>
<LandingPageBG className='absolute aspect-square min-h-dvh min-w-full object-cover' />
</div>
</div>
</main>
);
}
2 changes: 1 addition & 1 deletion src/app/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { UserProvider } from '@/contexts/user-context';
import '@/styles/globals.css';

export const metadata: Metadata = {
title: 'OR68',
title: 'OR69',
};

export default function RootLayout({
Expand Down
59 changes: 33 additions & 26 deletions src/app/page.tsx
Original file line number Diff line number Diff line change
@@ -1,44 +1,51 @@
'use client';
import { useState } from 'react';
// 'use client';
// import { useState } from 'react';
import Image from 'next/image';
import { ESCLogoWithText } from '@/components/esc';
import { Button } from '@/components/ui/button';
import { Input } from '@/components/ui/input';
import { Label } from '@/components/ui/label';
import { useToast } from '@/components/ui/use-toast';
import { cn } from '@/lib/utils';
import { useUser } from '@/contexts/user-context';
// import { Button } from '@/components/ui/button';
// import { Input } from '@/components/ui/input';
// import { Label } from '@/components/ui/label';
// import { useToast } from '@/components/ui/use-toast';
// import { cn } from '@/lib/utils';
// import { useUser } from '@/contexts/user-context';
import backgroundImage from '@/assets/backgrounds/imageBG.png';
import LandingPageBG from '@/assets/backgrounds/landing-page-bg';

export default function LandingPage(): JSX.Element {
const { setUser, error } = useUser();
const { toast } = useToast();
const [studentId, setStudentId] = useState<string>('');
// const { setUser, error } = useUser();
// const { toast } = useToast();
// const [studentId, setStudentId] = useState<string>('');

const submitHandler = (e: React.FormEvent): void => {
e.preventDefault();

setUser(studentId);
if (error) {
toast({
variant: 'destructive',
title: 'Uh oh! Something went wrong.',
description: error.message,
});
}
};
// const submitHandler = (e: React.FormEvent): void => {
// e.preventDefault();
//
// setUser(studentId);
// if (error) {
// toast({
// variant: 'destructive',
// title: 'Uh oh! Something went wrong.',
// description: error.message,
// });
// }
// };

return (
<main className='flex min-h-dvh w-full items-center justify-center'>
<div className='shadow-primary/25 bg-background flex aspect-[3/4] w-full max-w-sm flex-col items-center justify-center gap-10 rounded-3xl px-5 pb-16 pt-11 shadow-2xl md:aspect-[4/3] md:max-w-3xl'>
<div className='flex aspect-[3/4] w-full max-w-sm flex-col items-center justify-center gap-10 rounded-3xl bg-background px-5 pb-16 pt-11 shadow-2xl shadow-primary/25 md:aspect-[4/3] md:max-w-3xl'>
<ESCLogoWithText className='h-max w-14 md:w-20' />
<h1 className='flex flex-wrap items-center justify-center text-center text-xl font-semibold md:text-3xl'>
<span>ตรวจสอบตารางเรียน</span>
<span>และอาจารย์ที่ปรึกษา</span>
<span>&nbsp;สำหรับนิสิตชั้นปีที่ 1</span>
</h1>
<form
<p className='text-center text-base text-muted-foreground md:text-lg'>
<strong>ขออภัยระบบยังไม่เปิดให้ใช้งาน</strong> <br />
ระบบนี้จะเปิดให้ใช้งานในวันพบอาจารย์และลงทะเบียนเรียน (8
กรกฎาคม 2569) เป็นต้นไป <br />
หากระบบเปิดให้ใช้งานแล้วจะมีการแจ้งให้ทราบผ่านช่องทางต่าง ๆ
ของกวศ.อีกครั้ง
</p>
{/* <form
className='flex w-full max-w-lg flex-col gap-5 px-6'
onSubmit={submitHandler}
>
Expand All @@ -64,7 +71,7 @@ export default function LandingPage(): JSX.Element {
<Button className='h-12 w-full py-4' type='submit'>
ตรวจสอบ
</Button>
</form>
</form> */}
</div>
<div className='pointer-events-none absolute left-0 top-0 -z-50 size-full select-none overflow-hidden'>
<div className='absolute left-0 top-0 -z-50 aspect-square w-full'>
Expand Down
4 changes: 2 additions & 2 deletions src/utils/validator.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
export const validateStudentId = (studentId: string): boolean => {
// starts with "683", then digit exactly 5 times, ends with "21"
const pattern = /^683\d{5}21$/;
// starts with "693", then digit exactly 5 times, ends with "21"
const pattern = /^693\d{5}21$/;
return pattern.test(studentId);
};

Expand Down
2 changes: 1 addition & 1 deletion wrangler.toml
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
compatibility_date = "2025-07-06"
compatibility_date = "2026-06-19"
compatibility_flags = ["nodejs_compat"]
Loading