Skip to content

Commit d475120

Browse files
committed
feat: Shop 계정 정보 노출용 컴포넌트 추가
1 parent bdc8de1 commit d475120

File tree

5 files changed

+59
-2
lines changed

5 files changed

+59
-2
lines changed

apps/pyconkr-admin/src/consts/mdx_components.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,8 @@ const PythonKRShopMDXComponents: MDXComponents = {
146146
Shop__Common__PriceDisplay: Shop.Components.Common.PriceDisplay,
147147
Shop__Common__SignInGuard: Shop.Components.Common.SignInGuard,
148148
Shop__Common__ContextProvider: Shop.Components.Common.ShopContextProvider,
149+
Shop__Common__UserSignInMethod: Shop.Components.Common.UserSignInMethod,
150+
Shop__Common__UserSignInAccount: Shop.Components.Common.UserSignInAccount,
149151
Shop__Feature__CartStatus: Shop.Components.Features.CartStatus,
150152
Shop__Feature__ProductList: Shop.Components.Features.ProductList,
151153
Shop__Feature__ProductImageCardList: Shop.Components.Features.ProductImageCardList,

apps/pyconkr/src/consts/mdx_components.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,8 @@ const PythonKRShopMDXComponents: MDXComponents = {
146146
Shop__Common__PriceDisplay: Shop.Components.Common.PriceDisplay,
147147
Shop__Common__SignInGuard: Shop.Components.Common.SignInGuard,
148148
Shop__Common__ContextProvider: Shop.Components.Common.ShopContextProvider,
149+
Shop__Common__UserSignInMethod: Shop.Components.Common.UserSignInMethod,
150+
Shop__Common__UserSignInAccount: Shop.Components.Common.UserSignInAccount,
149151
Shop__Feature__CartStatus: Shop.Components.Features.CartStatus,
150152
Shop__Feature__ProductList: Shop.Components.Features.ProductList,
151153
Shop__Feature__ProductImageCardList: Shop.Components.Features.ProductImageCardList,

packages/shop/src/components/common/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { OptionGroupInput as OptionGroupInput_, OrderProductRelationOptionInput
33
import { PriceDisplay as PriceDisplay_ } from "./price_display";
44
import { ShopContextProvider as ShopContextProvider_ } from "./shop_context";
55
import { SignInGuard as SignInGuard_ } from "./signin_guard";
6+
import { UserSignInAccount as UserSignInAccount_, UserSignInMethod as UserSignInMethod_ } from "./user_ident";
67

78
namespace CommonComponents {
89
export const ShopContextProvider = ShopContextProvider_;
@@ -11,6 +12,8 @@ namespace CommonComponents {
1112
export const PriceDisplay = PriceDisplay_;
1213
export const SignInGuard = SignInGuard_;
1314
export const CustomerInfoFormDialog = CustomerInfoFormDialog_;
15+
export const UserSignInMethod = UserSignInMethod_;
16+
export const UserSignInAccount = UserSignInAccount_;
1417
}
1518

1619
export default CommonComponents;
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import { CircularProgress } from "@mui/material";
2+
import { ErrorBoundary, Suspense } from "@suspensive/react";
3+
import * as React from "react";
4+
import * as R from "remeda";
5+
6+
import ShopHooks from "../../hooks";
7+
8+
const ProviderTranslation: Record<string, { ko: string; en: string }> = {
9+
google: { ko: "구글", en: "Google" },
10+
kakao: { ko: "카카오", en: "Kakao" },
11+
naver: { ko: "네이버", en: "Naver" },
12+
};
13+
14+
const ErrorBoundariedText: React.FC<{ ko: string; en: string }> = (props) => {
15+
const { language } = ShopHooks.useShopContext();
16+
return props[language];
17+
};
18+
19+
export const UserSignInMethod: React.FC = ErrorBoundary.with(
20+
{ fallback: <ErrorBoundariedText ko="손님" en="Guest" /> },
21+
Suspense.with({ fallback: <CircularProgress /> }, () => {
22+
const { language } = ShopHooks.useShopContext();
23+
const shopAPIClient = ShopHooks.useShopClient();
24+
const { data } = ShopHooks.useUserStatus(shopAPIClient);
25+
26+
const notSignedInStr = language === "ko" ? "손님" : "Guest";
27+
const directSignInStr = language === "ko" ? "계정 로그인" : "Direct Sign-in";
28+
29+
if (!data?.meta?.is_authenticated) return notSignedInStr;
30+
if (!R.isArray(data.data.methods) || R.isEmpty(data.data.methods)) return directSignInStr;
31+
32+
const signInMethod = data.data.methods[0];
33+
return signInMethod.method === "socialaccount"
34+
? ProviderTranslation[signInMethod.provider]?.[language] || signInMethod.provider
35+
: signInMethod.method;
36+
})
37+
);
38+
39+
export const UserSignInAccount: React.FC = ErrorBoundary.with(
40+
{ fallback: <ErrorBoundariedText ko="로그아웃됨" en="Signed-out" /> },
41+
Suspense.with({ fallback: <CircularProgress /> }, () => {
42+
const { language } = ShopHooks.useShopContext();
43+
const shopAPIClient = ShopHooks.useShopClient();
44+
const { data } = ShopHooks.useUserStatus(shopAPIClient);
45+
46+
const notSignedInStr = language === "ko" ? "로그아웃됨" : "Signed-out";
47+
return data?.meta?.is_authenticated ? data.data.user.email : notSignedInStr;
48+
})
49+
);

packages/shop/src/schemas/index.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,10 @@ namespace ShopSchemas {
4545
username: string;
4646
};
4747
methods: {
48-
method: string;
48+
method: "socialaccount";
4949
at: number;
50-
email: string;
50+
provider: SocialSignInProvider;
51+
uid: string;
5152
}[];
5253
};
5354
};

0 commit comments

Comments
 (0)