diff --git a/public/images/frame/frame-blue-sp.svg b/public/images/frame/frame-blue-sp.svg new file mode 100644 index 0000000..b0a46cc --- /dev/null +++ b/public/images/frame/frame-blue-sp.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/images/frame/frame-purple-sp.svg b/public/images/frame/frame-purple-sp.svg new file mode 100644 index 0000000..d25bebd --- /dev/null +++ b/public/images/frame/frame-purple-sp.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/images/rpkm/diffuser-workshop.webp b/public/images/rpkm/diffuser-workshop.webp new file mode 100644 index 0000000..233af83 Binary files /dev/null and b/public/images/rpkm/diffuser-workshop.webp differ diff --git a/public/images/rpkm/keychain-workshop.webp b/public/images/rpkm/keychain-workshop.webp new file mode 100644 index 0000000..35bbed9 Binary files /dev/null and b/public/images/rpkm/keychain-workshop.webp differ diff --git a/src/components/common/Divider.astro b/src/components/common/Divider.astro index 1a22123..3df957c 100644 --- a/src/components/common/Divider.astro +++ b/src/components/common/Divider.astro @@ -94,7 +94,26 @@ const wrapperClasses = cn( fill="none" xmlns="http://www.w3.org/2000/svg" class="flex-shrink-0" + style="overflow: visible;" > - + + + + + + diff --git a/src/components/common/Footer.astro b/src/components/common/Footer.astro index bde02f9..cb88292 100644 --- a/src/components/common/Footer.astro +++ b/src/components/common/Footer.astro @@ -27,8 +27,8 @@ const footerGradient = bgGradient[variant].classes; variant === "rpkm_summary" || variant === "rpkm_workshops" || variant === "rpkm_rubpuen") && ( -
-

PRESENTED BY

+
+

PRESENTED BY

-
-

Contact Us

-
-
- ISD Logo - - Website - + { + variant === "firstdate" && ( +
+

Contact Us

+
+ +
-
-
+ ) + } diff --git a/src/components/common/Frame.astro b/src/components/common/Frame.astro index ae60cf1..bd0f908 100644 --- a/src/components/common/Frame.astro +++ b/src/components/common/Frame.astro @@ -27,7 +27,7 @@ */ export interface Props { - size?: "lg" | "md" | "sm" | "xs"; + size?: "lg" | "md" | "sm" | "xs" | "sp"; color?: "blue" | "purple"; class?: string; contentContainerClass?: string; @@ -44,6 +44,10 @@ const frameSvg = `/images/frame/frame-${color}-${size}.svg`; // Size configuration with aspect ratios and minimum heights const sizeConfig = { + sp: { + aspectRatio: "346/300", + minHeight: "300px", + }, lg: { aspectRatio: "346/550", minHeight: "550px", @@ -110,6 +114,10 @@ const config = sizeConfig[size]; margin: 4% 7%; } + .frame-container[data-size="sp"] .frame-content-clip { + margin: 3% 5%; + } + /* Custom scrollbar styling */ .frame-content-clip { scrollbar-width: thin; diff --git a/src/components/common/MapDropdown.tsx b/src/components/common/MapDropdown.tsx index 4fc83ae..5eb4dbb 100644 --- a/src/components/common/MapDropdown.tsx +++ b/src/components/common/MapDropdown.tsx @@ -64,13 +64,13 @@ const MapDropdown: React.FC = ({ aria-expanded={open} aria-haspopup="true" type="button" - onClick={handleTriggerClick} + onClick={options.length > 1 ? handleTriggerClick : undefined} > {selectedOption.label}
- + {options.length > 1 ? : null}
-
+
{icon &&
{icon}
}
{children}
diff --git a/src/components/common/react/Frame.tsx b/src/components/common/react/Frame.tsx index 78ff8f3..2dfa9c4 100644 --- a/src/components/common/react/Frame.tsx +++ b/src/components/common/react/Frame.tsx @@ -1,6 +1,6 @@ -import React from "react"; import type { ReactNode } from "react"; +import React from "react"; import { X } from "lucide-react"; @@ -42,6 +42,7 @@ export interface FrameProps { noWrapper?: boolean; children: ReactNode; frameId?: string; + noScroll?: boolean; // Optional prop to disable scrolling onClickX?: () => void; } @@ -52,6 +53,7 @@ const Frame: React.FC = ({ noWrapper = false, children, frameId: propFrameId, + noScroll = false, onClickX, }) => { const { theme } = useTheme(); @@ -158,7 +160,7 @@ const Frame: React.FC = ({ {/* Content area with proper clipping */}
{noWrapper ? ( children diff --git a/src/components/firstdate/Navbar.astro b/src/components/firstdate/Navbar.astro index d7d4581..1e008b6 100644 --- a/src/components/firstdate/Navbar.astro +++ b/src/components/firstdate/Navbar.astro @@ -69,6 +69,9 @@ import ButtonFd from "@common/ButtonFd.astro";
  • รับเพื่อนก้าวใหม่
  • +
  • + Freshmen Night +
  • PROFILE
  • diff --git a/src/components/rpkm/components/group-picker.astro b/src/components/rpkm/components/group-picker.astro index 60dcfcd..4ac1163 100644 --- a/src/components/rpkm/components/group-picker.astro +++ b/src/components/rpkm/components/group-picker.astro @@ -3,31 +3,36 @@ import GroupProfile from "@rpkm/rubpuen/GroupProfile"; import Divider from "@/components/common/Divider.astro"; import Frame from "@/components/common/Frame.astro"; -import { getGroupData } from "@/lib/groupAPI"; +import { getGroupByGroupId } from "@/lib/groupAPI"; import { getProfile } from "@/lib/profileAPI"; import type { Group, User } from "@/types/common"; const token = Astro.cookies.get("token")?.value; -let groupData = null; -let user = null; +let groupData: Group | null = null; +let user: User | null = null; if (token) { - const response = await getGroupData(token); - if (response.success && response.data) { - groupData = response.data.data as Group; - } - - try { - const userResponse = await getProfile(token); - if (userResponse.success && userResponse.data) { - user = userResponse.data.user as User; + let groupID = ""; + const userResponse = await getProfile(token); + if (userResponse.success && userResponse.data) { + user = userResponse.data.user as User; + groupID = user.groupId ? user.groupId : ""; + if (groupID) { + const groupResponse = await getGroupByGroupId(groupID, token); + if (groupResponse.success && groupResponse.data) { + groupData = groupResponse.data.data as Group; + } else { + return Astro.redirect("/login"); + } } else { - console.error("Failed to fetch user data:", userResponse.error); + return Astro.redirect("/login"); } - } catch (error) { - console.error("Error fetching user data:", error); + } else { + console.error("Failed to fetch user data:", userResponse.error); } +} else { + return Astro.redirect("/login"); } if (!groupData || !user) { @@ -35,16 +40,29 @@ if (!groupData || !user) { } const inviteCode = groupData.inviteCode; +const isOwner = groupData.ownerId === user.id; +const isConfirmed = groupData.isConfirmed; +const memberCount = groupData.memberCount; + +const canDisplayDefault = !isConfirmed && memberCount === 1 && isOwner; +const canDisplayHead = + (isConfirmed && isOwner) || (!isConfirmed && isOwner && memberCount != 1); +const canDisplayMember = !isOwner; const member1 = groupData.memberCount > 1 ? groupData.users[1] : null; const member2 = groupData.memberCount > 2 ? groupData.users[2] : null; --- -
    +
    -

    จับกลุ่มเพื่อน (1/3)

    +

    + {`จับกลุ่มเพื่อน (${memberCount}/3)`} +

    @@ -103,62 +121,43 @@ const member2 = groupData.memberCount > 2 ? groupData.users[2] : null;
    -