@enadhq/enad-react-sdk 0.0.6 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +70 -18
- package/dist/client/cart/components/cart-drawer.d.mts +0 -19
- package/dist/client/cart/components/cart-drawer.mjs +0 -180
- package/dist/client/cart/components/cart-drawer.mjs.map +0 -1
- package/dist/client/cart/components/cart-trigger.d.mts +0 -5
- package/dist/client/cart/components/cart-trigger.mjs +0 -18
- package/dist/client/cart/components/cart-trigger.mjs.map +0 -1
- package/dist/client/cart/constants/session.d.mts +0 -3
- package/dist/client/cart/constants/session.mjs +0 -5
- package/dist/client/cart/constants/session.mjs.map +0 -1
- package/dist/client/cart/contexts/cart.d.mts +0 -27
- package/dist/client/cart/contexts/cart.mjs +0 -22
- package/dist/client/cart/contexts/cart.mjs.map +0 -1
- package/dist/client/cart/hooks/useCart.d.mts +0 -29
- package/dist/client/cart/hooks/useCart.mjs +0 -26
- package/dist/client/cart/hooks/useCart.mjs.map +0 -1
- package/dist/client/cart/hooks/useCartActions.d.mts +0 -26
- package/dist/client/cart/hooks/useCartActions.mjs +0 -58
- package/dist/client/cart/hooks/useCartActions.mjs.map +0 -1
- package/dist/client/cart/queries/addToCartQueryFn.d.mts +0 -10
- package/dist/client/cart/queries/addToCartQueryFn.mjs +0 -27
- package/dist/client/cart/queries/addToCartQueryFn.mjs.map +0 -1
- package/dist/client/cart/queries/getCartQueryFn.d.mts +0 -7
- package/dist/client/cart/queries/getCartQueryFn.mjs +0 -34
- package/dist/client/cart/queries/getCartQueryFn.mjs.map +0 -1
- package/dist/client/cart/queries/removeCartItemQueryFn.d.mts +0 -9
- package/dist/client/cart/queries/removeCartItemQueryFn.mjs +0 -24
- package/dist/client/cart/queries/removeCartItemQueryFn.mjs.map +0 -1
- package/dist/client/cart/queries/updateCartItemQueryFn.d.mts +0 -10
- package/dist/client/cart/queries/updateCartItemQueryFn.mjs +0 -27
- package/dist/client/cart/queries/updateCartItemQueryFn.mjs.map +0 -1
- package/dist/client/cart/types/cart.d.mts +0 -36
- package/dist/client/cart/types/cart.mjs +0 -1
- package/dist/client/cart/types/cart.mjs.map +0 -1
- package/dist/client/cart/utils/session.d.mts +0 -6
- package/dist/client/cart/utils/session.mjs +0 -21
- package/dist/client/cart/utils/session.mjs.map +0 -1
- package/dist/client/cms/storyblok/preview/registerStoryblokBridge.d.mts +0 -6
- package/dist/client/cms/storyblok/preview/registerStoryblokBridge.mjs +0 -24
- package/dist/client/cms/storyblok/preview/registerStoryblokBridge.mjs.map +0 -1
- package/dist/client/cms/storyblok/preview/storyblok-preview-syncer.d.mts +0 -22
- package/dist/client/cms/storyblok/preview/storyblok-preview-syncer.mjs +0 -79
- package/dist/client/cms/storyblok/preview/storyblok-preview-syncer.mjs.map +0 -1
- package/dist/client/global/auth/withAuth.d.mts +0 -6
- package/dist/client/global/auth/withAuth.mjs +0 -25
- package/dist/client/global/auth/withAuth.mjs.map +0 -1
- package/dist/client/global/config/index.d.mts +0 -17
- package/dist/client/global/config/index.mjs +0 -34
- package/dist/client/global/config/index.mjs.map +0 -1
- package/dist/client/global/constants/tags.d.mts +0 -16
- package/dist/client/global/constants/tags.mjs +0 -18
- package/dist/client/global/constants/tags.mjs.map +0 -1
- package/dist/client/global/providers/enad-provider.d.mts +0 -23
- package/dist/client/global/providers/enad-provider.mjs +0 -11
- package/dist/client/global/providers/enad-provider.mjs.map +0 -1
- package/dist/client/search/actions/searchAction.d.mts +0 -5
- package/dist/client/search/actions/searchAction.mjs +0 -18
- package/dist/client/search/actions/searchAction.mjs.map +0 -1
- package/dist/client/search/components/search-bar.d.mts +0 -2
- package/dist/client/search/components/search-bar.mjs +0 -1
- package/dist/client/search/components/search-bar.mjs.map +0 -1
- package/dist/client/search/hooks/useSearch.d.mts +0 -18
- package/dist/client/search/hooks/useSearch.mjs +0 -37
- package/dist/client/search/hooks/useSearch.mjs.map +0 -1
- package/dist/client/user/actions/createResetPasswordLinkAction.d.mts +0 -14
- package/dist/client/user/actions/createResetPasswordLinkAction.mjs +0 -30
- package/dist/client/user/actions/createResetPasswordLinkAction.mjs.map +0 -1
- package/dist/client/user/actions/getUserAction.d.mts +0 -5
- package/dist/client/user/actions/getUserAction.mjs +0 -19
- package/dist/client/user/actions/getUserAction.mjs.map +0 -1
- package/dist/client/user/actions/logInUserAction.d.mts +0 -15
- package/dist/client/user/actions/logInUserAction.mjs +0 -34
- package/dist/client/user/actions/logInUserAction.mjs.map +0 -1
- package/dist/client/user/actions/logoutUserAction.d.mts +0 -3
- package/dist/client/user/actions/logoutUserAction.mjs +0 -10
- package/dist/client/user/actions/logoutUserAction.mjs.map +0 -1
- package/dist/client/user/actions/registerOrganisationAction.d.mts +0 -12
- package/dist/client/user/actions/registerOrganisationAction.mjs +0 -18
- package/dist/client/user/actions/registerOrganisationAction.mjs.map +0 -1
- package/dist/client/user/actions/registerUserAction.d.mts +0 -18
- package/dist/client/user/actions/registerUserAction.mjs +0 -42
- package/dist/client/user/actions/registerUserAction.mjs.map +0 -1
- package/dist/client/user/actions/registerUserWithoutRedirectAction.d.mts +0 -44
- package/dist/client/user/actions/registerUserWithoutRedirectAction.mjs +0 -58
- package/dist/client/user/actions/registerUserWithoutRedirectAction.mjs.map +0 -1
- package/dist/client/user/actions/updatePasswordAction.d.mts +0 -21
- package/dist/client/user/actions/updatePasswordAction.mjs +0 -37
- package/dist/client/user/actions/updatePasswordAction.mjs.map +0 -1
- package/dist/client/user/api/userRoute.d.mts +0 -9
- package/dist/client/user/api/userRoute.mjs +0 -65
- package/dist/client/user/api/userRoute.mjs.map +0 -1
- package/dist/client/user/clients/enad.d.mts +0 -6
- package/dist/client/user/clients/enad.mjs +0 -19
- package/dist/client/user/clients/enad.mjs.map +0 -1
- package/dist/client/user/components/login-form.d.mts +0 -20
- package/dist/client/user/components/login-form.mjs +0 -113
- package/dist/client/user/components/login-form.mjs.map +0 -1
- package/dist/client/user/components/reset-password-form.d.mts +0 -15
- package/dist/client/user/components/reset-password-form.mjs +0 -86
- package/dist/client/user/components/reset-password-form.mjs.map +0 -1
- package/dist/client/user/components/sign-out.d.mts +0 -5
- package/dist/client/user/components/sign-out.mjs +0 -23
- package/dist/client/user/components/sign-out.mjs.map +0 -1
- package/dist/client/user/components/signup-form.d.mts +0 -15
- package/dist/client/user/components/signup-form.mjs +0 -155
- package/dist/client/user/components/signup-form.mjs.map +0 -1
- package/dist/client/user/components/signup-organisation-form.d.mts +0 -20
- package/dist/client/user/components/signup-organisation-form.mjs +0 -813
- package/dist/client/user/components/signup-organisation-form.mjs.map +0 -1
- package/dist/client/user/components/update-password-form.d.mts +0 -11
- package/dist/client/user/components/update-password-form.mjs +0 -69
- package/dist/client/user/components/update-password-form.mjs.map +0 -1
- package/dist/client/user/hooks/index.d.mts +0 -3
- package/dist/client/user/hooks/index.mjs +0 -2
- package/dist/client/user/hooks/index.mjs.map +0 -1
- package/dist/client/user/hooks/useUser.d.mts +0 -16
- package/dist/client/user/hooks/useUser.mjs +0 -32
- package/dist/client/user/hooks/useUser.mjs.map +0 -1
- package/dist/client/user/types/user.d.mts +0 -202
- package/dist/client/user/types/user.mjs +0 -1
- package/dist/client/user/types/user.mjs.map +0 -1
- package/dist/client/user/utils/userCookieService.d.mts +0 -20
- package/dist/client/user/utils/userCookieService.mjs +0 -51
- package/dist/client/user/utils/userCookieService.mjs.map +0 -1
- package/dist/client/wishlist/actions/addItemsToWishlistAction.d.mts +0 -7
- package/dist/client/wishlist/actions/addItemsToWishlistAction.mjs +0 -20
- package/dist/client/wishlist/actions/addItemsToWishlistAction.mjs.map +0 -1
- package/dist/client/wishlist/actions/createOrGetShareTokenAction.d.mts +0 -6
- package/dist/client/wishlist/actions/createOrGetShareTokenAction.mjs +0 -20
- package/dist/client/wishlist/actions/createOrGetShareTokenAction.mjs.map +0 -1
- package/dist/client/wishlist/actions/createWishlistAction.d.mts +0 -6
- package/dist/client/wishlist/actions/createWishlistAction.mjs +0 -16
- package/dist/client/wishlist/actions/createWishlistAction.mjs.map +0 -1
- package/dist/client/wishlist/actions/deleteItemsFromWishlistAction.d.mts +0 -7
- package/dist/client/wishlist/actions/deleteItemsFromWishlistAction.mjs +0 -20
- package/dist/client/wishlist/actions/deleteItemsFromWishlistAction.mjs.map +0 -1
- package/dist/client/wishlist/actions/deleteWishlistAction.d.mts +0 -5
- package/dist/client/wishlist/actions/deleteWishlistAction.mjs +0 -16
- package/dist/client/wishlist/actions/deleteWishlistAction.mjs.map +0 -1
- package/dist/client/wishlist/actions/getSharedWishlistAction.d.mts +0 -6
- package/dist/client/wishlist/actions/getSharedWishlistAction.mjs +0 -20
- package/dist/client/wishlist/actions/getSharedWishlistAction.mjs.map +0 -1
- package/dist/client/wishlist/actions/getSpecificWishlistAction.d.mts +0 -6
- package/dist/client/wishlist/actions/getSpecificWishlistAction.mjs +0 -20
- package/dist/client/wishlist/actions/getSpecificWishlistAction.mjs.map +0 -1
- package/dist/client/wishlist/actions/getUserWishlists.d.mts +0 -7
- package/dist/client/wishlist/actions/getUserWishlists.mjs +0 -25
- package/dist/client/wishlist/actions/getUserWishlists.mjs.map +0 -1
- package/dist/client/wishlist/actions/revokeShareTokenAction.d.mts +0 -5
- package/dist/client/wishlist/actions/revokeShareTokenAction.mjs +0 -20
- package/dist/client/wishlist/actions/revokeShareTokenAction.mjs.map +0 -1
- package/dist/client/wishlist/actions/updateWishlistAction.d.mts +0 -6
- package/dist/client/wishlist/actions/updateWishlistAction.mjs +0 -20
- package/dist/client/wishlist/actions/updateWishlistAction.mjs.map +0 -1
- package/dist/client/wishlist/hooks/index.d.mts +0 -3
- package/dist/client/wishlist/hooks/index.mjs +0 -2
- package/dist/client/wishlist/hooks/index.mjs.map +0 -1
- package/dist/client/wishlist/hooks/useWishlist.d.mts +0 -98
- package/dist/client/wishlist/hooks/useWishlist.mjs +0 -66
- package/dist/client/wishlist/hooks/useWishlist.mjs.map +0 -1
- package/dist/client/wishlist/hooks/useWishlistActions.d.mts +0 -48
- package/dist/client/wishlist/hooks/useWishlistActions.mjs +0 -101
- package/dist/client/wishlist/hooks/useWishlistActions.mjs.map +0 -1
- package/dist/client/wishlist/wishlist-drawer.d.mts +0 -19
- package/dist/client/wishlist/wishlist-drawer.mjs +0 -180
- package/dist/client/wishlist/wishlist-drawer.mjs.map +0 -1
- package/dist/styles.css +0 -959
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/client/user/clients/enad.ts"],"sourcesContent":["import { CustomerClient, ShopperClient } from \"@enadhq/enad-ts-sdk\"\nimport { enadConfig } from \"../../../client/global/config\"\n\nexport const customerClient = new CustomerClient({\n apiKey: enadConfig.server.userApiKey,\n appId: enadConfig.client.appId,\n groupId: enadConfig.client.groupId,\n})\n\nexport const shopperClient = new ShopperClient({\n apiKey: enadConfig.client.apiKey,\n appId: enadConfig.client.appId,\n groupId: enadConfig.client.groupId,\n defaultLocale: enadConfig.client.defaultLocale,\n defaultMarket: enadConfig.client.defaultMarket,\n})\n"],"mappings":"AAAA,SAAS,gBAAgB,qBAAqB;AAC9C,SAAS,kBAAkB;AAEpB,MAAM,iBAAiB,IAAI,eAAe;AAAA,EAC/C,QAAQ,WAAW,OAAO;AAAA,EAC1B,OAAO,WAAW,OAAO;AAAA,EACzB,SAAS,WAAW,OAAO;AAC7B,CAAC;AAEM,MAAM,gBAAgB,IAAI,cAAc;AAAA,EAC7C,QAAQ,WAAW,OAAO;AAAA,EAC1B,OAAO,WAAW,OAAO;AAAA,EACzB,SAAS,WAAW,OAAO;AAAA,EAC3B,eAAe,WAAW,OAAO;AAAA,EACjC,eAAe,WAAW,OAAO;AACnC,CAAC;","names":[]}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import React__default from 'react';
|
|
2
|
-
|
|
3
|
-
interface LoginFormProps {
|
|
4
|
-
title?: string;
|
|
5
|
-
subtitle?: string;
|
|
6
|
-
emailLabel?: string;
|
|
7
|
-
emailPlaceholder?: string;
|
|
8
|
-
passwordLabel?: string;
|
|
9
|
-
passwordPlaceholder?: string;
|
|
10
|
-
forgotPasswordLink?: string;
|
|
11
|
-
submitText?: string;
|
|
12
|
-
signup?: {
|
|
13
|
-
href: string;
|
|
14
|
-
label: string;
|
|
15
|
-
};
|
|
16
|
-
successRedirect?: string;
|
|
17
|
-
}
|
|
18
|
-
declare const LoginForm: React__default.FC<LoginFormProps>;
|
|
19
|
-
|
|
20
|
-
export { LoginForm };
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useState } from "react";
|
|
4
|
-
import { logInUserAction } from "../actions/logInUserAction";
|
|
5
|
-
const LoginForm = ({
|
|
6
|
-
title = "Welcome back",
|
|
7
|
-
subtitle = "Sign in to access your account",
|
|
8
|
-
emailLabel = "Email address",
|
|
9
|
-
emailPlaceholder = "you@example.com",
|
|
10
|
-
passwordLabel = "Password",
|
|
11
|
-
passwordPlaceholder = "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022",
|
|
12
|
-
forgotPasswordLink = "/reset-password/start",
|
|
13
|
-
submitText = "Sign In",
|
|
14
|
-
signup = { href: "/signup", label: "Sign up" },
|
|
15
|
-
successRedirect = "/"
|
|
16
|
-
}) => {
|
|
17
|
-
const [errors, setErrors] = useState({});
|
|
18
|
-
const [isPending, setIsPending] = useState(false);
|
|
19
|
-
const action = async (formData) => {
|
|
20
|
-
setIsPending(true);
|
|
21
|
-
setErrors({});
|
|
22
|
-
const res = await logInUserAction(formData, { redirectPath: successRedirect });
|
|
23
|
-
if (res?.errors) {
|
|
24
|
-
setErrors(res.errors);
|
|
25
|
-
}
|
|
26
|
-
setIsPending(false);
|
|
27
|
-
};
|
|
28
|
-
const handleSubmit = async (e) => {
|
|
29
|
-
e.preventDefault();
|
|
30
|
-
const formData = new FormData(e.currentTarget);
|
|
31
|
-
await action(formData);
|
|
32
|
-
};
|
|
33
|
-
return /* @__PURE__ */ jsx("main", { className: "flex items-center justify-center px-4 font-enad", children: /* @__PURE__ */ jsxs("div", { className: "w-full max-w-md bg-(--enad-surface) border border-(--enad-border-color) shadow-lg rounded-(--enad-border-radius) p-8", children: [
|
|
34
|
-
/* @__PURE__ */ jsx("h2", { className: "text-2xl font-semibold text-(--enad-text-primary-color) mb-2 text-center", children: title }),
|
|
35
|
-
/* @__PURE__ */ jsx("p", { className: "text-(--enad-text-muted-color) text-sm text-center mb-8", children: subtitle }),
|
|
36
|
-
/* @__PURE__ */ jsxs("form", { onSubmit: handleSubmit, className: "space-y-5", children: [
|
|
37
|
-
/* @__PURE__ */ jsxs("div", { children: [
|
|
38
|
-
/* @__PURE__ */ jsx(
|
|
39
|
-
"label",
|
|
40
|
-
{
|
|
41
|
-
htmlFor: "email",
|
|
42
|
-
className: "block text-sm font-medium text-(--enad-text-primary-color) mb-1",
|
|
43
|
-
children: emailLabel
|
|
44
|
-
}
|
|
45
|
-
),
|
|
46
|
-
/* @__PURE__ */ jsx(
|
|
47
|
-
"input",
|
|
48
|
-
{
|
|
49
|
-
type: "email",
|
|
50
|
-
id: "email",
|
|
51
|
-
name: "email",
|
|
52
|
-
required: true,
|
|
53
|
-
placeholder: emailPlaceholder,
|
|
54
|
-
className: "w-full px-4 py-2.5 border border-(--enad-border-color) rounded-(--enad-border-radius) focus:ring-2 focus:ring-(--enad-button-bg) focus:border-(--enad-button-bg) outline-none transition text-(--enad-text-primary-color) bg-(--enad-background)"
|
|
55
|
-
}
|
|
56
|
-
),
|
|
57
|
-
errors.email && /* @__PURE__ */ jsx("p", { className: "text-(--enad-error-color) text-sm mt-1", children: errors.email.join(", ") })
|
|
58
|
-
] }),
|
|
59
|
-
/* @__PURE__ */ jsxs("div", { children: [
|
|
60
|
-
/* @__PURE__ */ jsx(
|
|
61
|
-
"label",
|
|
62
|
-
{
|
|
63
|
-
htmlFor: "password",
|
|
64
|
-
className: "block text-sm font-medium text-(--enad-text-primary-color) mb-1",
|
|
65
|
-
children: passwordLabel
|
|
66
|
-
}
|
|
67
|
-
),
|
|
68
|
-
/* @__PURE__ */ jsx(
|
|
69
|
-
"input",
|
|
70
|
-
{
|
|
71
|
-
type: "password",
|
|
72
|
-
id: "password",
|
|
73
|
-
name: "password",
|
|
74
|
-
required: true,
|
|
75
|
-
placeholder: passwordPlaceholder,
|
|
76
|
-
className: "w-full px-4 py-2.5 border border-(--enad-border-color) rounded-(--enad-border-radius) focus:ring-2 focus:ring-(--enad-button-bg) focus:border-(--enad-button-bg) outline-none transition text-(--enad-text-primary-color) bg-(--enad-background)"
|
|
77
|
-
}
|
|
78
|
-
),
|
|
79
|
-
errors.password && /* @__PURE__ */ jsx("p", { className: "text-(--enad-error-color) text-sm mt-1", children: errors.password.join(", ") })
|
|
80
|
-
] }),
|
|
81
|
-
/* @__PURE__ */ jsx("div", { className: "flex justify-start text-sm", children: /* @__PURE__ */ jsx(
|
|
82
|
-
"a",
|
|
83
|
-
{
|
|
84
|
-
href: forgotPasswordLink,
|
|
85
|
-
className: "text-(--enad-link-color) hover:text-(--enad-link-hover-color) transition",
|
|
86
|
-
children: "Forgot password?"
|
|
87
|
-
}
|
|
88
|
-
) }),
|
|
89
|
-
/* @__PURE__ */ jsx(
|
|
90
|
-
"button",
|
|
91
|
-
{
|
|
92
|
-
type: "submit",
|
|
93
|
-
disabled: isPending,
|
|
94
|
-
className: "w-full py-2.5 bg-(--enad-button-bg) hover:bg-(--enad-button-hover-bg) text-(--enad-button-color) font-medium rounded-(--enad-border-radius) transition shadow-sm hover:shadow",
|
|
95
|
-
children: isPending ? "Signing in..." : submitText
|
|
96
|
-
}
|
|
97
|
-
),
|
|
98
|
-
errors.general && /* @__PURE__ */ jsx("p", { className: "text-(--enad-error-color) text-sm mt-2 text-center", children: errors.general.join(", ") })
|
|
99
|
-
] }),
|
|
100
|
-
signup && /* @__PURE__ */ jsx("p", { className: "text-sm text-(--enad-text-muted-color) text-center mt-2", children: /* @__PURE__ */ jsx(
|
|
101
|
-
"a",
|
|
102
|
-
{
|
|
103
|
-
href: signup.href,
|
|
104
|
-
className: "text-(--enad-link-color) hover:text-(--enad-link-hover-color) font-medium",
|
|
105
|
-
children: signup.label
|
|
106
|
-
}
|
|
107
|
-
) })
|
|
108
|
-
] }) });
|
|
109
|
-
};
|
|
110
|
-
export {
|
|
111
|
-
LoginForm
|
|
112
|
-
};
|
|
113
|
-
//# sourceMappingURL=login-form.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/client/user/components/login-form.tsx"],"sourcesContent":["\"use client\"\n\nimport React, { useState, FormEvent } from \"react\"\nimport { logInUserAction } from \"../actions/logInUserAction\"\n\ninterface LoginFormProps {\n title?: string\n subtitle?: string\n emailLabel?: string\n emailPlaceholder?: string\n passwordLabel?: string\n passwordPlaceholder?: string\n forgotPasswordLink?: string\n submitText?: string\n signup?: {\n href: string\n label: string\n }\n successRedirect?: string\n}\n\ninterface FormErrors {\n email?: string[]\n password?: string[]\n general?: string[]\n}\n\nexport const LoginForm: React.FC<LoginFormProps> = ({\n title = \"Welcome back\",\n subtitle = \"Sign in to access your account\",\n emailLabel = \"Email address\",\n emailPlaceholder = \"you@example.com\",\n passwordLabel = \"Password\",\n passwordPlaceholder = \"••••••••\",\n forgotPasswordLink = \"/reset-password/start\",\n submitText = \"Sign In\",\n signup = { href: \"/signup\", label: \"Sign up\" },\n successRedirect = \"/\",\n}) => {\n const [errors, setErrors] = useState<FormErrors>({})\n const [isPending, setIsPending] = useState(false)\n\n const action = async (formData: FormData): Promise<void> => {\n setIsPending(true)\n setErrors({})\n\n const res = await logInUserAction(formData, { redirectPath: successRedirect })\n\n if (res?.errors) {\n setErrors(res.errors)\n }\n\n setIsPending(false)\n }\n\n const handleSubmit = async (e: FormEvent<HTMLFormElement>) => {\n e.preventDefault()\n const formData = new FormData(e.currentTarget)\n await action(formData)\n }\n\n return (\n <main className=\"flex items-center justify-center px-4 font-enad\">\n <div className=\"w-full max-w-md bg-(--enad-surface) border border-(--enad-border-color) shadow-lg rounded-(--enad-border-radius) p-8\">\n <h2 className=\"text-2xl font-semibold text-(--enad-text-primary-color) mb-2 text-center\">\n {title}\n </h2>\n <p className=\"text-(--enad-text-muted-color) text-sm text-center mb-8\">{subtitle}</p>\n\n <form onSubmit={handleSubmit} className=\"space-y-5\">\n {/* Email */}\n <div>\n <label\n htmlFor=\"email\"\n className=\"block text-sm font-medium text-(--enad-text-primary-color) mb-1\"\n >\n {emailLabel}\n </label>\n <input\n type=\"email\"\n id=\"email\"\n name=\"email\"\n required\n placeholder={emailPlaceholder}\n className=\"w-full px-4 py-2.5 border border-(--enad-border-color) rounded-(--enad-border-radius) focus:ring-2 focus:ring-(--enad-button-bg) focus:border-(--enad-button-bg) outline-none transition text-(--enad-text-primary-color) bg-(--enad-background)\"\n />\n {errors.email && (\n <p className=\"text-(--enad-error-color) text-sm mt-1\">{errors.email.join(\", \")}</p>\n )}\n </div>\n\n {/* Password */}\n <div>\n <label\n htmlFor=\"password\"\n className=\"block text-sm font-medium text-(--enad-text-primary-color) mb-1\"\n >\n {passwordLabel}\n </label>\n <input\n type=\"password\"\n id=\"password\"\n name=\"password\"\n required\n placeholder={passwordPlaceholder}\n className=\"w-full px-4 py-2.5 border border-(--enad-border-color) rounded-(--enad-border-radius) focus:ring-2 focus:ring-(--enad-button-bg) focus:border-(--enad-button-bg) outline-none transition text-(--enad-text-primary-color) bg-(--enad-background)\"\n />\n {errors.password && (\n <p className=\"text-(--enad-error-color) text-sm mt-1\">{errors.password.join(\", \")}</p>\n )}\n </div>\n\n {/* Forgot password */}\n <div className=\"flex justify-start text-sm\">\n <a\n href={forgotPasswordLink}\n className=\"text-(--enad-link-color) hover:text-(--enad-link-hover-color) transition\"\n >\n Forgot password?\n </a>\n </div>\n\n {/* Submit */}\n <button\n type=\"submit\"\n disabled={isPending}\n className=\"w-full py-2.5 bg-(--enad-button-bg) hover:bg-(--enad-button-hover-bg) text-(--enad-button-color) font-medium rounded-(--enad-border-radius) transition shadow-sm hover:shadow\"\n >\n {isPending ? \"Signing in...\" : submitText}\n </button>\n\n {/* General errors */}\n {errors.general && (\n <p className=\"text-(--enad-error-color) text-sm mt-2 text-center\">\n {errors.general.join(\", \")}\n </p>\n )}\n </form>\n\n {/* Signup link */}\n {signup && (\n <p className=\"text-sm text-(--enad-text-muted-color) text-center mt-2\">\n <a\n href={signup.href}\n className=\"text-(--enad-link-color) hover:text-(--enad-link-hover-color) font-medium\"\n >\n {signup.label}\n </a>\n </p>\n )}\n </div>\n </main>\n )\n}\n"],"mappings":";AAgEQ,cAOE,YAPF;AA9DR,SAAgB,gBAA2B;AAC3C,SAAS,uBAAuB;AAwBzB,MAAM,YAAsC,CAAC;AAAA,EAClD,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,aAAa;AAAA,EACb,mBAAmB;AAAA,EACnB,gBAAgB;AAAA,EAChB,sBAAsB;AAAA,EACtB,qBAAqB;AAAA,EACrB,aAAa;AAAA,EACb,SAAS,EAAE,MAAM,WAAW,OAAO,UAAU;AAAA,EAC7C,kBAAkB;AACpB,MAAM;AACJ,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAqB,CAAC,CAAC;AACnD,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAEhD,QAAM,SAAS,OAAO,aAAsC;AAC1D,iBAAa,IAAI;AACjB,cAAU,CAAC,CAAC;AAEZ,UAAM,MAAM,MAAM,gBAAgB,UAAU,EAAE,cAAc,gBAAgB,CAAC;AAE7E,QAAI,KAAK,QAAQ;AACf,gBAAU,IAAI,MAAM;AAAA,IACtB;AAEA,iBAAa,KAAK;AAAA,EACpB;AAEA,QAAM,eAAe,OAAO,MAAkC;AAC5D,MAAE,eAAe;AACjB,UAAM,WAAW,IAAI,SAAS,EAAE,aAAa;AAC7C,UAAM,OAAO,QAAQ;AAAA,EACvB;AAEA,SACE,oBAAC,UAAK,WAAU,mDACd,+BAAC,SAAI,WAAU,wHACb;AAAA,wBAAC,QAAG,WAAU,4EACX,iBACH;AAAA,IACA,oBAAC,OAAE,WAAU,2DAA2D,oBAAS;AAAA,IAEjF,qBAAC,UAAK,UAAU,cAAc,WAAU,aAEtC;AAAA,2BAAC,SACC;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,SAAQ;AAAA,YACR,WAAU;AAAA,YAET;AAAA;AAAA,QACH;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,IAAG;AAAA,YACH,MAAK;AAAA,YACL,UAAQ;AAAA,YACR,aAAa;AAAA,YACb,WAAU;AAAA;AAAA,QACZ;AAAA,QACC,OAAO,SACN,oBAAC,OAAE,WAAU,0CAA0C,iBAAO,MAAM,KAAK,IAAI,GAAE;AAAA,SAEnF;AAAA,MAGA,qBAAC,SACC;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,SAAQ;AAAA,YACR,WAAU;AAAA,YAET;AAAA;AAAA,QACH;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,IAAG;AAAA,YACH,MAAK;AAAA,YACL,UAAQ;AAAA,YACR,aAAa;AAAA,YACb,WAAU;AAAA;AAAA,QACZ;AAAA,QACC,OAAO,YACN,oBAAC,OAAE,WAAU,0CAA0C,iBAAO,SAAS,KAAK,IAAI,GAAE;AAAA,SAEtF;AAAA,MAGA,oBAAC,SAAI,WAAU,8BACb;AAAA,QAAC;AAAA;AAAA,UACC,MAAM;AAAA,UACN,WAAU;AAAA,UACX;AAAA;AAAA,MAED,GACF;AAAA,MAGA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,UAAU;AAAA,UACV,WAAU;AAAA,UAET,sBAAY,kBAAkB;AAAA;AAAA,MACjC;AAAA,MAGC,OAAO,WACN,oBAAC,OAAE,WAAU,sDACV,iBAAO,QAAQ,KAAK,IAAI,GAC3B;AAAA,OAEJ;AAAA,IAGC,UACC,oBAAC,OAAE,WAAU,2DACX;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,OAAO;AAAA,QACb,WAAU;AAAA,QAET,iBAAO;AAAA;AAAA,IACV,GACF;AAAA,KAEJ,GACF;AAEJ;","names":[]}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import React__default from 'react';
|
|
2
|
-
|
|
3
|
-
interface ResetPasswordFormProps {
|
|
4
|
-
title?: string;
|
|
5
|
-
subtitle?: string;
|
|
6
|
-
submitText?: string;
|
|
7
|
-
extraLink?: {
|
|
8
|
-
href: string;
|
|
9
|
-
text: string;
|
|
10
|
-
};
|
|
11
|
-
successRedirect?: string;
|
|
12
|
-
}
|
|
13
|
-
declare const ResetPasswordForm: React__default.FC<ResetPasswordFormProps>;
|
|
14
|
-
|
|
15
|
-
export { ResetPasswordForm };
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useState } from "react";
|
|
4
|
-
import { createPasswordResetLinkAction } from "../actions/createResetPasswordLinkAction";
|
|
5
|
-
const ResetPasswordForm = ({
|
|
6
|
-
title = "Reset your password",
|
|
7
|
-
subtitle = "Enter your email to receive reset instructions",
|
|
8
|
-
submitText = "Send Reset Link",
|
|
9
|
-
extraLink = { href: "/login", text: "Back to sign in" },
|
|
10
|
-
successRedirect = "/login"
|
|
11
|
-
}) => {
|
|
12
|
-
const [errors, setErrors] = useState({});
|
|
13
|
-
const [isPending, setIsPending] = useState(false);
|
|
14
|
-
const [successMessage, setSuccessMessage] = useState("");
|
|
15
|
-
const action = async (formData) => {
|
|
16
|
-
setIsPending(true);
|
|
17
|
-
setErrors({});
|
|
18
|
-
setSuccessMessage("");
|
|
19
|
-
const res = await createPasswordResetLinkAction(formData, { redirectPath: successRedirect });
|
|
20
|
-
if (res?.errors) {
|
|
21
|
-
setErrors(res.errors);
|
|
22
|
-
} else {
|
|
23
|
-
setSuccessMessage("Check your email for reset instructions.");
|
|
24
|
-
}
|
|
25
|
-
setIsPending(false);
|
|
26
|
-
};
|
|
27
|
-
const handleSubmit = async (e) => {
|
|
28
|
-
e.preventDefault();
|
|
29
|
-
const formData = new FormData(e.currentTarget);
|
|
30
|
-
await action(formData);
|
|
31
|
-
};
|
|
32
|
-
const inputClasses = `
|
|
33
|
-
w-full px-4 py-2.5 border border-(--enad-border-color)
|
|
34
|
-
rounded-(--enad-border-radius)
|
|
35
|
-
focus:ring-2 focus:ring-(--enad-button-bg)
|
|
36
|
-
focus:border-(--enad-button-bg)
|
|
37
|
-
outline-none transition
|
|
38
|
-
bg-(--enad-background) text-(--enad-text-primary-color)
|
|
39
|
-
`;
|
|
40
|
-
const buttonClasses = `
|
|
41
|
-
w-full py-2.5 bg-(--enad-button-bg)
|
|
42
|
-
hover:bg-(--enad-button-hover-bg)
|
|
43
|
-
text-(--enad-button-color)
|
|
44
|
-
font-medium rounded-(--enad-border-radius)
|
|
45
|
-
transition shadow-sm hover:shadow
|
|
46
|
-
`;
|
|
47
|
-
const labelClasses = `block text-sm font-medium text-(--enad-text-primary-color) mb-1`;
|
|
48
|
-
const errorClasses = `text-(--enad-error-color) text-sm mt-1`;
|
|
49
|
-
const successClasses = `text-(--enad-success-color) text-sm mt-2 text-center`;
|
|
50
|
-
return /* @__PURE__ */ jsx("main", { className: "flex items-center justify-center px-4 font-enad", children: /* @__PURE__ */ jsxs("div", { className: "w-full max-w-md bg-(--enad-surface) shadow-lg p-8 border border-(--enad-border-color) rounded-(--enad-border-radius)", children: [
|
|
51
|
-
/* @__PURE__ */ jsx("h2", { className: "text-2xl font-semibold text-(--enad-text-primary-color) mb-2 text-center", children: title }),
|
|
52
|
-
/* @__PURE__ */ jsx("p", { className: "text-sm text-(--enad-text-muted-color) mb-8 text-center", children: subtitle }),
|
|
53
|
-
/* @__PURE__ */ jsxs("form", { onSubmit: handleSubmit, className: "space-y-5", children: [
|
|
54
|
-
/* @__PURE__ */ jsxs("div", { children: [
|
|
55
|
-
/* @__PURE__ */ jsx("label", { htmlFor: "email", className: labelClasses, children: "Email" }),
|
|
56
|
-
/* @__PURE__ */ jsx(
|
|
57
|
-
"input",
|
|
58
|
-
{
|
|
59
|
-
type: "email",
|
|
60
|
-
id: "email",
|
|
61
|
-
name: "email",
|
|
62
|
-
required: true,
|
|
63
|
-
placeholder: "you@example.com",
|
|
64
|
-
className: inputClasses
|
|
65
|
-
}
|
|
66
|
-
),
|
|
67
|
-
errors.email && /* @__PURE__ */ jsx("p", { className: errorClasses, children: errors.email.join(", ") })
|
|
68
|
-
] }),
|
|
69
|
-
/* @__PURE__ */ jsx("button", { type: "submit", disabled: isPending, className: buttonClasses, children: isPending ? "Sending..." : submitText }),
|
|
70
|
-
errors.general && /* @__PURE__ */ jsx("p", { className: errorClasses + " text-center", children: errors.general.join(", ") }),
|
|
71
|
-
successMessage && /* @__PURE__ */ jsx("p", { className: successClasses, children: successMessage })
|
|
72
|
-
] }),
|
|
73
|
-
extraLink && /* @__PURE__ */ jsx("p", { className: "text-sm text-(--enad-text-muted-color) text-center mt-4", children: /* @__PURE__ */ jsx(
|
|
74
|
-
"a",
|
|
75
|
-
{
|
|
76
|
-
href: extraLink.href,
|
|
77
|
-
className: "text-(--enad-link-color) hover:text-(--enad-link-hover-color) font-medium",
|
|
78
|
-
children: extraLink.text
|
|
79
|
-
}
|
|
80
|
-
) })
|
|
81
|
-
] }) });
|
|
82
|
-
};
|
|
83
|
-
export {
|
|
84
|
-
ResetPasswordForm
|
|
85
|
-
};
|
|
86
|
-
//# sourceMappingURL=reset-password-form.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/client/user/components/reset-password-form.tsx"],"sourcesContent":["\"use client\"\n\nimport React, { useState, FormEvent } from \"react\"\nimport { createPasswordResetLinkAction } from \"../actions/createResetPasswordLinkAction\"\n\ninterface ResetPasswordFormProps {\n title?: string\n subtitle?: string\n submitText?: string\n extraLink?: {\n href: string\n text: string\n }\n successRedirect?: string\n}\n\ninterface FormErrors {\n email?: string[]\n general?: string[]\n}\n\nexport const ResetPasswordForm: React.FC<ResetPasswordFormProps> = ({\n title = \"Reset your password\",\n subtitle = \"Enter your email to receive reset instructions\",\n submitText = \"Send Reset Link\",\n extraLink = { href: \"/login\", text: \"Back to sign in\" },\n successRedirect = \"/login\",\n}) => {\n const [errors, setErrors] = useState<FormErrors>({})\n const [isPending, setIsPending] = useState(false)\n const [successMessage, setSuccessMessage] = useState(\"\")\n\n const action = async (formData: FormData) => {\n setIsPending(true)\n setErrors({})\n setSuccessMessage(\"\")\n\n const res = await createPasswordResetLinkAction(formData, { redirectPath: successRedirect })\n\n if (res?.errors) {\n setErrors(res.errors)\n } else {\n setSuccessMessage(\"Check your email for reset instructions.\")\n }\n\n setIsPending(false)\n }\n\n const handleSubmit = async (e: FormEvent<HTMLFormElement>) => {\n e.preventDefault()\n const formData = new FormData(e.currentTarget)\n await action(formData)\n }\n\n const inputClasses = `\n w-full px-4 py-2.5 border border-(--enad-border-color)\n rounded-(--enad-border-radius)\n focus:ring-2 focus:ring-(--enad-button-bg)\n focus:border-(--enad-button-bg)\n outline-none transition\n bg-(--enad-background) text-(--enad-text-primary-color)\n `\n\n const buttonClasses = `\n w-full py-2.5 bg-(--enad-button-bg)\n hover:bg-(--enad-button-hover-bg)\n text-(--enad-button-color)\n font-medium rounded-(--enad-border-radius)\n transition shadow-sm hover:shadow\n `\n\n const labelClasses = `block text-sm font-medium text-(--enad-text-primary-color) mb-1`\n const errorClasses = `text-(--enad-error-color) text-sm mt-1`\n const successClasses = `text-(--enad-success-color) text-sm mt-2 text-center`\n\n return (\n <main className=\"flex items-center justify-center px-4 font-enad\">\n <div className=\"w-full max-w-md bg-(--enad-surface) shadow-lg p-8 border border-(--enad-border-color) rounded-(--enad-border-radius)\">\n <h2 className=\"text-2xl font-semibold text-(--enad-text-primary-color) mb-2 text-center\">\n {title}\n </h2>\n <p className=\"text-sm text-(--enad-text-muted-color) mb-8 text-center\">{subtitle}</p>\n\n <form onSubmit={handleSubmit} className=\"space-y-5\">\n {/* Email */}\n <div>\n <label htmlFor=\"email\" className={labelClasses}>\n Email\n </label>\n <input\n type=\"email\"\n id=\"email\"\n name=\"email\"\n required\n placeholder=\"you@example.com\"\n className={inputClasses}\n />\n {errors.email && <p className={errorClasses}>{errors.email.join(\", \")}</p>}\n </div>\n\n {/* Submit */}\n <button type=\"submit\" disabled={isPending} className={buttonClasses}>\n {isPending ? \"Sending...\" : submitText}\n </button>\n\n {/* General error */}\n {errors.general && (\n <p className={errorClasses + \" text-center\"}>{errors.general.join(\", \")}</p>\n )}\n\n {/* Success message */}\n {successMessage && <p className={successClasses}>{successMessage}</p>}\n </form>\n\n {/* Extra Link */}\n {extraLink && (\n <p className=\"text-sm text-(--enad-text-muted-color) text-center mt-4\">\n <a\n href={extraLink.href}\n className=\"text-(--enad-link-color) hover:text-(--enad-link-hover-color) font-medium\"\n >\n {extraLink.text}\n </a>\n </p>\n )}\n </div>\n </main>\n )\n}\n"],"mappings":";AA8EQ,cAOE,YAPF;AA5ER,SAAgB,gBAA2B;AAC3C,SAAS,qCAAqC;AAkBvC,MAAM,oBAAsD,CAAC;AAAA,EAClE,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,aAAa;AAAA,EACb,YAAY,EAAE,MAAM,UAAU,MAAM,kBAAkB;AAAA,EACtD,kBAAkB;AACpB,MAAM;AACJ,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAqB,CAAC,CAAC;AACnD,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAChD,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAS,EAAE;AAEvD,QAAM,SAAS,OAAO,aAAuB;AAC3C,iBAAa,IAAI;AACjB,cAAU,CAAC,CAAC;AACZ,sBAAkB,EAAE;AAEpB,UAAM,MAAM,MAAM,8BAA8B,UAAU,EAAE,cAAc,gBAAgB,CAAC;AAE3F,QAAI,KAAK,QAAQ;AACf,gBAAU,IAAI,MAAM;AAAA,IACtB,OAAO;AACL,wBAAkB,0CAA0C;AAAA,IAC9D;AAEA,iBAAa,KAAK;AAAA,EACpB;AAEA,QAAM,eAAe,OAAO,MAAkC;AAC5D,MAAE,eAAe;AACjB,UAAM,WAAW,IAAI,SAAS,EAAE,aAAa;AAC7C,UAAM,OAAO,QAAQ;AAAA,EACvB;AAEA,QAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASrB,QAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQtB,QAAM,eAAe;AACrB,QAAM,eAAe;AACrB,QAAM,iBAAiB;AAEvB,SACE,oBAAC,UAAK,WAAU,mDACd,+BAAC,SAAI,WAAU,wHACb;AAAA,wBAAC,QAAG,WAAU,4EACX,iBACH;AAAA,IACA,oBAAC,OAAE,WAAU,2DAA2D,oBAAS;AAAA,IAEjF,qBAAC,UAAK,UAAU,cAAc,WAAU,aAEtC;AAAA,2BAAC,SACC;AAAA,4BAAC,WAAM,SAAQ,SAAQ,WAAW,cAAc,mBAEhD;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,IAAG;AAAA,YACH,MAAK;AAAA,YACL,UAAQ;AAAA,YACR,aAAY;AAAA,YACZ,WAAW;AAAA;AAAA,QACb;AAAA,QACC,OAAO,SAAS,oBAAC,OAAE,WAAW,cAAe,iBAAO,MAAM,KAAK,IAAI,GAAE;AAAA,SACxE;AAAA,MAGA,oBAAC,YAAO,MAAK,UAAS,UAAU,WAAW,WAAW,eACnD,sBAAY,eAAe,YAC9B;AAAA,MAGC,OAAO,WACN,oBAAC,OAAE,WAAW,eAAe,gBAAiB,iBAAO,QAAQ,KAAK,IAAI,GAAE;AAAA,MAIzE,kBAAkB,oBAAC,OAAE,WAAW,gBAAiB,0BAAe;AAAA,OACnE;AAAA,IAGC,aACC,oBAAC,OAAE,WAAU,2DACX;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,UAAU;AAAA,QAChB,WAAU;AAAA,QAET,oBAAU;AAAA;AAAA,IACb,GACF;AAAA,KAEJ,GACF;AAEJ;","names":[]}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { jsx } from "react/jsx-runtime";
|
|
3
|
-
import { useQueryClient } from "@tanstack/react-query";
|
|
4
|
-
import { logOutUserAction } from "../actions/logoutUserAction";
|
|
5
|
-
const SignOut = () => {
|
|
6
|
-
const queryClient = useQueryClient();
|
|
7
|
-
return /* @__PURE__ */ jsx(
|
|
8
|
-
"button",
|
|
9
|
-
{
|
|
10
|
-
onClick: async () => {
|
|
11
|
-
const success = await logOutUserAction();
|
|
12
|
-
if (success) {
|
|
13
|
-
queryClient.setQueryData(["user"], null);
|
|
14
|
-
}
|
|
15
|
-
},
|
|
16
|
-
children: "Sign out"
|
|
17
|
-
}
|
|
18
|
-
);
|
|
19
|
-
};
|
|
20
|
-
export {
|
|
21
|
-
SignOut
|
|
22
|
-
};
|
|
23
|
-
//# sourceMappingURL=sign-out.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/client/user/components/sign-out.tsx"],"sourcesContent":["\"use client\"\n\nimport { useQueryClient } from \"@tanstack/react-query\"\nimport { logOutUserAction } from \"../actions/logoutUserAction\"\n\nexport const SignOut = () => {\n const queryClient = useQueryClient()\n\n return (\n <button\n onClick={async () => {\n const success = await logOutUserAction()\n\n if (success) {\n queryClient.setQueryData([\"user\"], null)\n }\n }}\n >\n Sign out\n </button>\n )\n}\n"],"mappings":";AASI;AAPJ,SAAS,sBAAsB;AAC/B,SAAS,wBAAwB;AAE1B,MAAM,UAAU,MAAM;AAC3B,QAAM,cAAc,eAAe;AAEnC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,SAAS,YAAY;AACnB,cAAM,UAAU,MAAM,iBAAiB;AAEvC,YAAI,SAAS;AACX,sBAAY,aAAa,CAAC,MAAM,GAAG,IAAI;AAAA,QACzC;AAAA,MACF;AAAA,MACD;AAAA;AAAA,EAED;AAEJ;","names":[]}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import React__default from 'react';
|
|
2
|
-
|
|
3
|
-
interface SignupFormProps {
|
|
4
|
-
title?: string;
|
|
5
|
-
subtitle?: string;
|
|
6
|
-
submitText?: string;
|
|
7
|
-
extraLink?: {
|
|
8
|
-
href: string;
|
|
9
|
-
text: string;
|
|
10
|
-
};
|
|
11
|
-
successRedirect: string;
|
|
12
|
-
}
|
|
13
|
-
declare const SignupForm: React__default.FC<SignupFormProps>;
|
|
14
|
-
|
|
15
|
-
export { SignupForm };
|
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useState } from "react";
|
|
4
|
-
import { registerUserAction } from "../actions/registerUserAction";
|
|
5
|
-
const SignupForm = ({
|
|
6
|
-
title = "Create your account",
|
|
7
|
-
subtitle = "Sign up to get started",
|
|
8
|
-
submitText = "Sign Up",
|
|
9
|
-
extraLink = { href: "/login", text: "Already have an account? Sign in" },
|
|
10
|
-
successRedirect = "/"
|
|
11
|
-
}) => {
|
|
12
|
-
const [errors, setErrors] = useState({});
|
|
13
|
-
const [isPending, setIsPending] = useState(false);
|
|
14
|
-
const action = async (formData) => {
|
|
15
|
-
setIsPending(true);
|
|
16
|
-
setErrors({});
|
|
17
|
-
const res = await registerUserAction(formData, { redirectPath: successRedirect });
|
|
18
|
-
if (res?.errors) {
|
|
19
|
-
setErrors(res.errors);
|
|
20
|
-
}
|
|
21
|
-
setIsPending(false);
|
|
22
|
-
};
|
|
23
|
-
const handleSubmit = async (e) => {
|
|
24
|
-
e.preventDefault();
|
|
25
|
-
const formData = new FormData(e.currentTarget);
|
|
26
|
-
await action(formData);
|
|
27
|
-
};
|
|
28
|
-
const inputBaseClasses = `
|
|
29
|
-
w-full px-4 py-2.5
|
|
30
|
-
border border-(--enad-border-color)
|
|
31
|
-
rounded-(--enad-border-radius)
|
|
32
|
-
focus:ring-2 focus:ring-(--enad-button-bg)
|
|
33
|
-
focus:border-(--enad-button-bg)
|
|
34
|
-
outline-none transition
|
|
35
|
-
bg-(--enad-background)
|
|
36
|
-
text-(--enad-text-primary-color)
|
|
37
|
-
`;
|
|
38
|
-
const buttonBaseClasses = `
|
|
39
|
-
w-full py-2.5
|
|
40
|
-
bg-(--enad-button-bg)
|
|
41
|
-
hover:bg-(--enad-button-hover-bg)
|
|
42
|
-
text-(--enad-button-color)
|
|
43
|
-
font-medium rounded-(--enad-border-radius)
|
|
44
|
-
transition shadow-sm hover:shadow
|
|
45
|
-
`;
|
|
46
|
-
const labelClasses = `block text-sm font-medium text-(--enad-text-primary-color) mb-1`;
|
|
47
|
-
const checkboxLabelClasses = `ml-2 text-sm text-(--enad-text-primary-color)`;
|
|
48
|
-
const errorClasses = `text-(--enad-error-color) text-sm mt-1`;
|
|
49
|
-
return /* @__PURE__ */ jsx("main", { className: "flex items-center justify-center px-4", children: /* @__PURE__ */ jsxs("div", { className: "w-full max-w-md bg-(--enad-surface) shadow-lg p-8 border border-(--enad-border-color) rounded-(--enad-border-radius)", children: [
|
|
50
|
-
/* @__PURE__ */ jsx("h2", { className: "text-2xl font-semibold mb-2 text-center text-(--enad-text-primary-color)", children: title }),
|
|
51
|
-
/* @__PURE__ */ jsx("p", { className: "text-sm mb-8 text-center text-(--enad-text-muted-color)", children: subtitle }),
|
|
52
|
-
/* @__PURE__ */ jsxs("form", { onSubmit: handleSubmit, className: "space-y-5", children: [
|
|
53
|
-
/* @__PURE__ */ jsxs("div", { children: [
|
|
54
|
-
/* @__PURE__ */ jsx("label", { htmlFor: "firstName", className: labelClasses, children: "First Name" }),
|
|
55
|
-
/* @__PURE__ */ jsx(
|
|
56
|
-
"input",
|
|
57
|
-
{
|
|
58
|
-
type: "text",
|
|
59
|
-
id: "firstName",
|
|
60
|
-
name: "firstName",
|
|
61
|
-
required: true,
|
|
62
|
-
placeholder: "John",
|
|
63
|
-
className: inputBaseClasses
|
|
64
|
-
}
|
|
65
|
-
),
|
|
66
|
-
errors.firstName && /* @__PURE__ */ jsx("p", { className: errorClasses, children: errors.firstName.join(", ") })
|
|
67
|
-
] }),
|
|
68
|
-
/* @__PURE__ */ jsxs("div", { children: [
|
|
69
|
-
/* @__PURE__ */ jsx("label", { htmlFor: "lastName", className: labelClasses, children: "Last Name" }),
|
|
70
|
-
/* @__PURE__ */ jsx(
|
|
71
|
-
"input",
|
|
72
|
-
{
|
|
73
|
-
type: "text",
|
|
74
|
-
id: "lastName",
|
|
75
|
-
name: "lastName",
|
|
76
|
-
required: true,
|
|
77
|
-
placeholder: "Doe",
|
|
78
|
-
className: inputBaseClasses
|
|
79
|
-
}
|
|
80
|
-
),
|
|
81
|
-
errors.lastName && /* @__PURE__ */ jsx("p", { className: errorClasses, children: errors.lastName.join(", ") })
|
|
82
|
-
] }),
|
|
83
|
-
/* @__PURE__ */ jsxs("div", { children: [
|
|
84
|
-
/* @__PURE__ */ jsx("label", { htmlFor: "email", className: labelClasses, children: "Email" }),
|
|
85
|
-
/* @__PURE__ */ jsx(
|
|
86
|
-
"input",
|
|
87
|
-
{
|
|
88
|
-
type: "email",
|
|
89
|
-
id: "email",
|
|
90
|
-
name: "email",
|
|
91
|
-
required: true,
|
|
92
|
-
placeholder: "you@example.com",
|
|
93
|
-
className: inputBaseClasses
|
|
94
|
-
}
|
|
95
|
-
),
|
|
96
|
-
errors.email && /* @__PURE__ */ jsx("p", { className: errorClasses, children: errors.email.join(", ") })
|
|
97
|
-
] }),
|
|
98
|
-
/* @__PURE__ */ jsxs("div", { children: [
|
|
99
|
-
/* @__PURE__ */ jsx("label", { htmlFor: "password", className: labelClasses, children: "Password" }),
|
|
100
|
-
/* @__PURE__ */ jsx(
|
|
101
|
-
"input",
|
|
102
|
-
{
|
|
103
|
-
type: "password",
|
|
104
|
-
id: "password",
|
|
105
|
-
name: "password",
|
|
106
|
-
required: true,
|
|
107
|
-
placeholder: "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022",
|
|
108
|
-
className: inputBaseClasses
|
|
109
|
-
}
|
|
110
|
-
),
|
|
111
|
-
errors.password && /* @__PURE__ */ jsx("p", { className: errorClasses, children: errors.password.join(", ") })
|
|
112
|
-
] }),
|
|
113
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
114
|
-
/* @__PURE__ */ jsx(
|
|
115
|
-
"input",
|
|
116
|
-
{
|
|
117
|
-
type: "checkbox",
|
|
118
|
-
id: "acceptTerms",
|
|
119
|
-
name: "acceptTerms",
|
|
120
|
-
required: true,
|
|
121
|
-
className: "h-4 w-4 text-(--enad-button-bg) focus:ring-2 focus:ring-(--enad-button-bg) border border-(--enad-border-color) rounded transition"
|
|
122
|
-
}
|
|
123
|
-
),
|
|
124
|
-
/* @__PURE__ */ jsxs("label", { htmlFor: "acceptTerms", className: checkboxLabelClasses, children: [
|
|
125
|
-
"I accept the",
|
|
126
|
-
" ",
|
|
127
|
-
/* @__PURE__ */ jsx(
|
|
128
|
-
"a",
|
|
129
|
-
{
|
|
130
|
-
href: "/terms",
|
|
131
|
-
target: "_blank",
|
|
132
|
-
className: "text-(--enad-link-color) hover:text-(--enad-link-hover-color) hover:underline",
|
|
133
|
-
children: "terms and conditions"
|
|
134
|
-
}
|
|
135
|
-
)
|
|
136
|
-
] })
|
|
137
|
-
] }),
|
|
138
|
-
errors.acceptTerms && /* @__PURE__ */ jsx("p", { className: errorClasses, children: errors.acceptTerms.join(", ") }),
|
|
139
|
-
/* @__PURE__ */ jsx("button", { type: "submit", disabled: isPending, className: buttonBaseClasses, children: isPending ? "Signing up..." : submitText }),
|
|
140
|
-
errors.general && /* @__PURE__ */ jsx("p", { className: errorClasses + " mt-2 text-center", children: errors.general.join(", ") })
|
|
141
|
-
] }),
|
|
142
|
-
extraLink && /* @__PURE__ */ jsx("p", { className: "text-sm text-(--enad-text-muted-color) text-center mt-2", children: /* @__PURE__ */ jsx(
|
|
143
|
-
"a",
|
|
144
|
-
{
|
|
145
|
-
href: extraLink.href,
|
|
146
|
-
className: "text-(--enad-link-color) hover:text-(--enad-link-hover-color) font-medium",
|
|
147
|
-
children: extraLink.text
|
|
148
|
-
}
|
|
149
|
-
) })
|
|
150
|
-
] }) });
|
|
151
|
-
};
|
|
152
|
-
export {
|
|
153
|
-
SignupForm
|
|
154
|
-
};
|
|
155
|
-
//# sourceMappingURL=signup-form.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/client/user/components/signup-form.tsx"],"sourcesContent":["\"use client\"\n\nimport React, { useState, FormEvent } from \"react\"\nimport { registerUserAction } from \"../actions/registerUserAction\"\n\ninterface SignupFormProps {\n title?: string\n subtitle?: string\n submitText?: string\n extraLink?: {\n href: string\n text: string\n }\n successRedirect: string\n}\n\ninterface FormErrors {\n firstName?: string[]\n lastName?: string[]\n email?: string[]\n password?: string[]\n acceptTerms?: string[]\n general?: string[]\n}\n\nexport const SignupForm: React.FC<SignupFormProps> = ({\n title = \"Create your account\",\n subtitle = \"Sign up to get started\",\n submitText = \"Sign Up\",\n extraLink = { href: \"/login\", text: \"Already have an account? Sign in\" },\n successRedirect = \"/\",\n}) => {\n const [errors, setErrors] = useState<FormErrors>({})\n const [isPending, setIsPending] = useState(false)\n\n const action = async (formData: FormData) => {\n setIsPending(true)\n setErrors({})\n\n const res = await registerUserAction(formData, { redirectPath: successRedirect })\n\n if (res?.errors) {\n setErrors(res.errors)\n }\n\n setIsPending(false)\n }\n\n const handleSubmit = async (e: FormEvent<HTMLFormElement>) => {\n e.preventDefault()\n const formData = new FormData(e.currentTarget)\n await action(formData)\n }\n\n const inputBaseClasses = `\n w-full px-4 py-2.5\n border border-(--enad-border-color) \n rounded-(--enad-border-radius)\n focus:ring-2 focus:ring-(--enad-button-bg)\n focus:border-(--enad-button-bg)\n outline-none transition\n bg-(--enad-background)\n text-(--enad-text-primary-color)\n `\n\n const buttonBaseClasses = `\n w-full py-2.5\n bg-(--enad-button-bg)\n hover:bg-(--enad-button-hover-bg)\n text-(--enad-button-color)\n font-medium rounded-(--enad-border-radius)\n transition shadow-sm hover:shadow\n `\n\n const labelClasses = `block text-sm font-medium text-(--enad-text-primary-color) mb-1`\n const checkboxLabelClasses = `ml-2 text-sm text-(--enad-text-primary-color)`\n const errorClasses = `text-(--enad-error-color) text-sm mt-1`\n\n return (\n <main className=\"flex items-center justify-center px-4\">\n <div className=\"w-full max-w-md bg-(--enad-surface) shadow-lg p-8 border border-(--enad-border-color) rounded-(--enad-border-radius)\">\n <h2 className=\"text-2xl font-semibold mb-2 text-center text-(--enad-text-primary-color)\">\n {title}\n </h2>\n <p className=\"text-sm mb-8 text-center text-(--enad-text-muted-color)\">{subtitle}</p>\n\n <form onSubmit={handleSubmit} className=\"space-y-5\">\n {/* First Name */}\n <div>\n <label htmlFor=\"firstName\" className={labelClasses}>\n First Name\n </label>\n <input\n type=\"text\"\n id=\"firstName\"\n name=\"firstName\"\n required\n placeholder=\"John\"\n className={inputBaseClasses}\n />\n {errors.firstName && <p className={errorClasses}>{errors.firstName.join(\", \")}</p>}\n </div>\n\n {/* Last Name */}\n <div>\n <label htmlFor=\"lastName\" className={labelClasses}>\n Last Name\n </label>\n <input\n type=\"text\"\n id=\"lastName\"\n name=\"lastName\"\n required\n placeholder=\"Doe\"\n className={inputBaseClasses}\n />\n {errors.lastName && <p className={errorClasses}>{errors.lastName.join(\", \")}</p>}\n </div>\n\n {/* Email */}\n <div>\n <label htmlFor=\"email\" className={labelClasses}>\n Email\n </label>\n <input\n type=\"email\"\n id=\"email\"\n name=\"email\"\n required\n placeholder=\"you@example.com\"\n className={inputBaseClasses}\n />\n {errors.email && <p className={errorClasses}>{errors.email.join(\", \")}</p>}\n </div>\n\n {/* Password */}\n <div>\n <label htmlFor=\"password\" className={labelClasses}>\n Password\n </label>\n <input\n type=\"password\"\n id=\"password\"\n name=\"password\"\n required\n placeholder=\"••••••••\"\n className={inputBaseClasses}\n />\n {errors.password && <p className={errorClasses}>{errors.password.join(\", \")}</p>}\n </div>\n\n {/* Accept Terms */}\n <div className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n id=\"acceptTerms\"\n name=\"acceptTerms\"\n required\n className=\"h-4 w-4 text-(--enad-button-bg) focus:ring-2 focus:ring-(--enad-button-bg) border border-(--enad-border-color) rounded transition\"\n />\n <label htmlFor=\"acceptTerms\" className={checkboxLabelClasses}>\n I accept the{\" \"}\n <a\n href=\"/terms\"\n target=\"_blank\"\n className=\"text-(--enad-link-color) hover:text-(--enad-link-hover-color) hover:underline\"\n >\n terms and conditions\n </a>\n </label>\n </div>\n {errors.acceptTerms && <p className={errorClasses}>{errors.acceptTerms.join(\", \")}</p>}\n\n {/* Submit */}\n <button type=\"submit\" disabled={isPending} className={buttonBaseClasses}>\n {isPending ? \"Signing up...\" : submitText}\n </button>\n\n {/* General errors */}\n {errors.general && (\n <p className={errorClasses + \" mt-2 text-center\"}>{errors.general.join(\", \")}</p>\n )}\n </form>\n\n {/* Extra Link */}\n {extraLink && (\n <p className=\"text-sm text-(--enad-text-muted-color) text-center mt-2\">\n <a\n href={extraLink.href}\n className=\"text-(--enad-link-color) hover:text-(--enad-link-hover-color) font-medium\"\n >\n {extraLink.text}\n </a>\n </p>\n )}\n </div>\n </main>\n )\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import React__default from 'react';
|
|
2
|
-
|
|
3
|
-
interface SignupOrganisationFormProps {
|
|
4
|
-
title?: string;
|
|
5
|
-
subtitle?: string;
|
|
6
|
-
submitText?: string;
|
|
7
|
-
extraLink?: {
|
|
8
|
-
href: string;
|
|
9
|
-
text: string;
|
|
10
|
-
};
|
|
11
|
-
successRedirect?: string;
|
|
12
|
-
organisationStatus?: "active" | "pending";
|
|
13
|
-
defaultMarket?: string;
|
|
14
|
-
defaultLanguage?: string;
|
|
15
|
-
defaultCountry?: string;
|
|
16
|
-
defaultStoreGroup?: string;
|
|
17
|
-
}
|
|
18
|
-
declare const SignupOrganisationForm: React__default.FC<SignupOrganisationFormProps>;
|
|
19
|
-
|
|
20
|
-
export { SignupOrganisationForm };
|