Skip to content

Commit fa15487

Browse files
authored
Merge pull request #4 from NCUAppTeam/main
UI updates and Refactoring
2 parents 979ff1c + 1390425 commit fa15487

File tree

21 files changed

+785
-689
lines changed

21 files changed

+785
-689
lines changed

.env.example

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
VITE_SUPABASE_URL=
2+
VITE_SUPABASE_ANON_KEY=
3+
VITE_NCU_PORTAL_CLIENT_ID=
4+
VITE_NCU_PORTAL_CLIENT_SECRET=

.env.exmaple

Lines changed: 0 additions & 1 deletion
This file was deleted.

README.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,22 @@ Tailwind 的配置檔位於 `tailwind.config.js`。
7373

7474
### 環境配置
7575

76-
要與 Supabase 資料庫互動,你需要設置 `.env.local` 檔案,並填入以下變數:
76+
要與 Supabase 資料庫互動,你需要設置 `.env` 檔案(模板可參考`.env.example`),並填入以下變數:
7777

7878
```
7979
VITE_SUPABASE_URL=your-supabase-url
8080
VITE_SUPABASE_ANON_KEY=your-supabase-key
8181
```
82+
若您為中央大學學生,想在本地端測試、使用portal註冊功能,則需先於portal申請portal開發成員:
83+
申請時的Single Sign On Url填為:http://localhost:5173
84+
Return To Address填為:http://localhost:5173/callback
85+
86+
`.env`檔則填入申請後說得到的client-id和client-secret:
87+
```
88+
VITE_NCU_PORTAL_CLIENT_ID=
89+
VITE_NCU_PORTAL_CLIENT_SECRET=
90+
```
91+
8292

8393
### Edge Functions
8494

package-lock.json

Lines changed: 411 additions & 393 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
"node-fetch": "^3.3.2",
2424
"react": "^18.3.1",
2525
"react-dom": "^18.3.1",
26+
"react-icons": "^5.5.0",
2627
"react-router-dom": "^7.4.0",
2728
"save-dev": "^0.0.1-security",
2829
"spin-wheel-game": "^1.0.3-alpha.3",
@@ -60,4 +61,4 @@
6061
"sharp": "0.32.6",
6162
"sharp-ico": "0.1.5"
6263
}
63-
}
64+
}

src/components/DrawerOption.tsx

Lines changed: 0 additions & 49 deletions
This file was deleted.

src/components/DrawerSideBar.tsx

Lines changed: 0 additions & 53 deletions
This file was deleted.

src/components/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ export { DialogBox } from './Common/DialogBox';
44
export { HStack } from './Common/HStack';
55
export { Image } from './Common/Image';
66
export { VStack } from './Common/VStack';
7-
export { Header } from './Header';
7+
export { Header } from './pages/home/Header';
88

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
import { HStack, VStack } from "../..";
2+
3+
// for future use of other function development
4+
// const options = [
5+
// { name: "首頁", engName: "Home", pageNav: "/" },
6+
// { name: "活動/揪人", engName: "Events", pageNav: "/events" },
7+
// { name: "拍賣", engName: "Market", pageNav: "/sales" },
8+
// { name: "行事曆", engName: "Calendar", pageNav: "/calendar" },
9+
// { name: "地圖", engName: "Map", pageNav: "/map" },
10+
// { name: "今晚吃什麼", engName: "Dinner Decider", pageNav: "/dinner" },
11+
// ];
12+
const options = [
13+
{ name: "首頁", engName: "Home", pageNav: "/" },
14+
{ name: "揪人", engName: "Gather 'Round", pageNav: "/events" },
15+
{ name: "綠洲拾橡", engName: "Acorn Trails in the Oasis", pageNav: "/dinner" },
16+
];
17+
18+
export const DrawerOption = () => {
19+
// for future use of several function in one page
20+
// const [openOptions, setOpenOptions] = useState<{ [key: string]: boolean }>({});
21+
22+
// const toggleOption = (name: string) => {
23+
// setOpenOptions((prev) => {
24+
// return {
25+
// ...prev,
26+
// [name]: !prev[name],
27+
// };
28+
// });
29+
// };
30+
31+
return (
32+
<VStack id="all-nav-func" className="gap-2">
33+
{options.map((option) => (
34+
<li
35+
key={option.name}
36+
onClick={() => window.location.href = option.pageNav}
37+
className="cursor-pointer p-2 rounded-md hover:bg-gray-200 lg:w-full lg:flex lg:items-center lg:justify-between lg:gap-4 lg:p-2 lg:border lg:border-gray-300 lg:shadow-sm"
38+
>
39+
<HStack className="lg:gap-2">
40+
<VStack className="justify-start">
41+
<p className="font-medium lg:text-lg">{option.name}</p>
42+
<p className="text-sm text-gray-500 lg:text-base">{option.engName}</p>
43+
</VStack>
44+
</HStack>
45+
</li>
46+
))}
47+
</VStack>
48+
49+
// for future use of several function in one page
50+
// <VStack id="all-nav-func">
51+
// {options.map((option) => (
52+
// <HStack className="bg-blue-200" key={option.name}>
53+
// <div className="flex items-center" onClick={() => toggleOption(option.name)}>
54+
// {openOptions[option.name] ? (
55+
// <CaretDown />
56+
// ) : (
57+
// <CaretRight />
58+
// )}
59+
// </div>
60+
// <Link to={option.pageNav}>
61+
// <li className="bg-white">
62+
// <VStack className="justify-start">
63+
// <p className="bg-green-100">{option.name}({option.engName})</p>
64+
// </VStack>
65+
// </li>
66+
// </Link>
67+
// </HStack>
68+
// ))}
69+
// </VStack>
70+
);
71+
};
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import { Image, VStack } from "../..";
2+
import { DrawerOption } from "./DrawerOption";
3+
import SidebarFooter from "./SidebarFooter";
4+
5+
export const DrawerSideBar = ({ name, avatar }: { name: string, avatar: string }) => {
6+
return (
7+
<div className="flex xl:sticky xl:top-0">
8+
{/* Drawer for smaller screens */}
9+
<div className="px-3 py-4 w-fit xl:hidden drawer z-40" title='開啟側邊欄 Open sidebar'>
10+
<input id="my-drawer" type="checkbox" className="drawer-toggle" />
11+
<div className="drawer-content">
12+
<label htmlFor="my-drawer" className="drawer-button">
13+
<Image src={avatar} children={undefined} className="w-10 rounded-full" />
14+
</label>
15+
</div>
16+
<div className="drawer-side grid content-between">
17+
<label htmlFor="my-drawer" aria-label="close sidebar" className="drawer-overlay"></label>
18+
<ul className="menu bg-base-200 text-base-content h-screen w-80 p-4 grid overflow-y-auto">
19+
<VStack className="h-full self-start">
20+
<Image src={avatar} children={undefined} className="mb-2 w-10 rounded-full" />
21+
<p className="font-bold">{name}</p>
22+
<p className="text-xs">View Profile</p>
23+
<div className="divider divider-neutral" />
24+
<DrawerOption />
25+
</VStack>
26+
<SidebarFooter />
27+
</ul>
28+
</div>
29+
</div>
30+
31+
{/* Fixed sidebar for larger screens */}
32+
<div className="hidden xl:flex flex-col bg-base-200 text-base-content h-screen w-80 p-4 overflow-y-auto">
33+
<VStack className="w-full h-full self-start">
34+
<Image src={avatar} children={undefined} className="mb-2 w-10 rounded-full" />
35+
<p className="font-bold">{name}</p>
36+
<p className="text-xs">View Profile</p>
37+
<div className="divider divider-neutral" />
38+
<DrawerOption />
39+
</VStack>
40+
<SidebarFooter />
41+
</div>
42+
</div>
43+
);
44+
};

0 commit comments

Comments
 (0)