@explita/cloud-auth-client 0.0.1
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/README.md +238 -0
- package/dist/components/change-password.d.ts +11 -0
- package/dist/components/change-password.js +101 -0
- package/dist/components/loader.d.ts +2 -0
- package/dist/components/loader.js +11 -0
- package/dist/components/logged-in.d.ts +3 -0
- package/dist/components/logged-in.js +9 -0
- package/dist/components/logged-out.d.ts +3 -0
- package/dist/components/logged-out.js +9 -0
- package/dist/components/login-form.d.ts +2 -0
- package/dist/components/login-form.js +102 -0
- package/dist/components/message.d.ts +6 -0
- package/dist/components/message.js +15 -0
- package/dist/components/must-login.d.ts +4 -0
- package/dist/components/must-login.js +23 -0
- package/dist/components/optional-otp-wrapper.d.ts +3 -0
- package/dist/components/optional-otp-wrapper.js +52 -0
- package/dist/components/optional-otp.d.ts +3 -0
- package/dist/components/optional-otp.js +70 -0
- package/dist/components/reset-password.d.ts +8 -0
- package/dist/components/reset-password.js +118 -0
- package/dist/components/roles.d.ts +6 -0
- package/dist/components/roles.js +54 -0
- package/dist/components/settings.d.ts +9 -0
- package/dist/components/settings.js +26 -0
- package/dist/components/signup-form.d.ts +11 -0
- package/dist/components/signup-form.js +138 -0
- package/dist/components/toggle-2fa.d.ts +7 -0
- package/dist/components/toggle-2fa.js +81 -0
- package/dist/components/toggle-account-status.d.ts +11 -0
- package/dist/components/toggle-account-status.js +91 -0
- package/dist/components/ui/button.d.ts +10 -0
- package/dist/components/ui/button.js +68 -0
- package/dist/components/ui/card.d.ts +9 -0
- package/dist/components/ui/card.js +65 -0
- package/dist/components/ui/dialog.d.ts +15 -0
- package/dist/components/ui/dialog.js +86 -0
- package/dist/components/ui/dropdown-menu.d.ts +11 -0
- package/dist/components/ui/dropdown-menu.js +63 -0
- package/dist/components/ui/input.d.ts +3 -0
- package/dist/components/ui/input.js +41 -0
- package/dist/components/ui/label.d.ts +3 -0
- package/dist/components/ui/label.js +42 -0
- package/dist/components/ui/switch.d.ts +4 -0
- package/dist/components/ui/switch.js +44 -0
- package/dist/components/user-card.d.ts +10 -0
- package/dist/components/user-card.js +67 -0
- package/dist/components/x-icon.d.ts +2 -0
- package/dist/components/x-icon.js +11 -0
- package/dist/contexts/auth-provider.d.ts +4 -0
- package/dist/contexts/auth-provider.js +208 -0
- package/dist/hooks/use-token-refresher.d.ts +2 -0
- package/dist/hooks/use-token-refresher.js +118 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +21 -0
- package/dist/lib/api-client.d.ts +2 -0
- package/dist/lib/api-client.js +38 -0
- package/dist/lib/api-server.d.ts +2 -0
- package/dist/lib/api-server.js +39 -0
- package/dist/lib/api.d.ts +2 -0
- package/dist/lib/api.js +10 -0
- package/dist/lib/error.d.ts +6 -0
- package/dist/lib/error.js +15 -0
- package/dist/lib/refresh-helper.d.ts +12 -0
- package/dist/lib/refresh-helper.js +82 -0
- package/dist/lib/utils.d.ts +21 -0
- package/dist/lib/utils.js +148 -0
- package/dist/server/cookie.d.ts +1 -0
- package/dist/server/cookie.js +29 -0
- package/dist/server/index.d.ts +7 -0
- package/dist/server/index.js +23 -0
- package/dist/server/reset-password.d.ts +3 -0
- package/dist/server/reset-password.js +41 -0
- package/dist/server/role.d.ts +7 -0
- package/dist/server/role.js +63 -0
- package/dist/server/server-session.d.ts +8 -0
- package/dist/server/server-session.js +31 -0
- package/dist/server/server-token.d.ts +4 -0
- package/dist/server/server-token.js +39 -0
- package/dist/server/toggle-2fa.d.ts +4 -0
- package/dist/server/toggle-2fa.js +33 -0
- package/dist/server/users-accounts.d.ts +11 -0
- package/dist/server/users-accounts.js +94 -0
- package/dist/styles.css +1799 -0
- package/dist/types.d.ts +284 -0
- package/dist/types.js +2 -0
- package/dist/ui/index.d.ts +11 -0
- package/dist/ui/index.js +27 -0
- package/package.json +65 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.OptionalOTPInner = OptionalOTPInner;
|
|
38
|
+
const react_1 = __importStar(require("react"));
|
|
39
|
+
let OTPDialog = null;
|
|
40
|
+
let useOTP = null;
|
|
41
|
+
try {
|
|
42
|
+
const module = require("@explita/cloud-otp-client");
|
|
43
|
+
if (module) {
|
|
44
|
+
OTPDialog = module.OTPDialog;
|
|
45
|
+
useOTP = module.useOTP;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch (e) {
|
|
49
|
+
// Module not available
|
|
50
|
+
console.warn("@explita/cloud-otp-client is not available. OTP functionality will be disabled.");
|
|
51
|
+
}
|
|
52
|
+
function OptionalOTPInner({ user, onVerified, onCanceled }) {
|
|
53
|
+
if (!useOTP || !OTPDialog) {
|
|
54
|
+
console.warn("OTP functionality is not available. Please install @explita/cloud-otp-client to enable it.");
|
|
55
|
+
return null; // or a fallback UI
|
|
56
|
+
}
|
|
57
|
+
const otp = useOTP({
|
|
58
|
+
referenceId: user === null || user === void 0 ? void 0 : user.id,
|
|
59
|
+
onVerified,
|
|
60
|
+
onCanceled,
|
|
61
|
+
sentTo: user === null || user === void 0 ? void 0 : user.email,
|
|
62
|
+
channel: "email",
|
|
63
|
+
});
|
|
64
|
+
(0, react_1.useEffect)(() => {
|
|
65
|
+
if (user && otp) {
|
|
66
|
+
otp.open();
|
|
67
|
+
}
|
|
68
|
+
}, [user, otp]);
|
|
69
|
+
return react_1.default.createElement(OTPDialog, { use: otp });
|
|
70
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { GeneralResponse, ResetPasswordWithToken } from "../types";
|
|
3
|
+
type Props = {
|
|
4
|
+
className?: string;
|
|
5
|
+
onChangePassword: (data: ResetPasswordWithToken) => Promise<GeneralResponse>;
|
|
6
|
+
};
|
|
7
|
+
export declare function ResetPassword({ className, onChangePassword, ...props }: Props): React.JSX.Element;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.ResetPassword = ResetPassword;
|
|
38
|
+
const react_1 = __importStar(require("react"));
|
|
39
|
+
const utils_1 = require("../lib/utils");
|
|
40
|
+
const button_1 = require("./ui/button");
|
|
41
|
+
const card_1 = require("./ui/card");
|
|
42
|
+
const input_1 = require("./ui/input");
|
|
43
|
+
const label_1 = require("./ui/label");
|
|
44
|
+
const message_1 = require("./message");
|
|
45
|
+
const auth_provider_1 = require("../contexts/auth-provider");
|
|
46
|
+
function ResetPassword({ className, onChangePassword, ...props }) {
|
|
47
|
+
var _a;
|
|
48
|
+
const { sendPasswordResetRequest, computedRouteContext } = (0, auth_provider_1.useAuth)();
|
|
49
|
+
const [token, setToken] = (0, react_1.useState)(null);
|
|
50
|
+
const { loginUrl } = computedRouteContext;
|
|
51
|
+
(0, react_1.useEffect)(() => {
|
|
52
|
+
const token = new URLSearchParams(window.location.search).get("token");
|
|
53
|
+
setToken(token);
|
|
54
|
+
}, []);
|
|
55
|
+
const [state, handleSubmit, isPending] = (0, react_1.useActionState)(async function (prevState, formData) {
|
|
56
|
+
try {
|
|
57
|
+
if (!token) {
|
|
58
|
+
const result = await sendPasswordResetRequest(formData.get("email"));
|
|
59
|
+
return { ...result, form: { email: formData.get("email") } };
|
|
60
|
+
}
|
|
61
|
+
if (typeof onChangePassword !== "function") {
|
|
62
|
+
return {
|
|
63
|
+
message: "onChangePassword function is not defined. Please pass onChangePassword function to ResetPassword component.",
|
|
64
|
+
status: "failure",
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
const result = await onChangePassword({
|
|
68
|
+
token,
|
|
69
|
+
password: formData.get("password"),
|
|
70
|
+
confirmPassword: formData.get("confirmPassword"),
|
|
71
|
+
});
|
|
72
|
+
return result;
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
console.log(error);
|
|
76
|
+
}
|
|
77
|
+
}, undefined);
|
|
78
|
+
(0, react_1.useEffect)(() => {
|
|
79
|
+
let timer;
|
|
80
|
+
if ((state === null || state === void 0 ? void 0 : state.status) === "success") {
|
|
81
|
+
if (loginUrl) {
|
|
82
|
+
timer = setTimeout(() => {
|
|
83
|
+
window.location.href = loginUrl;
|
|
84
|
+
}, 2000);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return () => {
|
|
88
|
+
clearTimeout(timer);
|
|
89
|
+
};
|
|
90
|
+
}, [state === null || state === void 0 ? void 0 : state.status]);
|
|
91
|
+
return (react_1.default.createElement("div", { className: (0, utils_1.cn)("ecpauth:flex ecpauth:flex-col ecpauth:gap-6 ecpauth:w-full ecpauth:max-w-sm", className), ...props },
|
|
92
|
+
react_1.default.createElement(card_1.Card, null,
|
|
93
|
+
react_1.default.createElement(card_1.CardHeader, null,
|
|
94
|
+
react_1.default.createElement(card_1.CardTitle, { className: "ecpauth:text-2xl" }, "Reset Password"),
|
|
95
|
+
react_1.default.createElement(card_1.CardDescription, null, "Provide your details to reset your password.")),
|
|
96
|
+
react_1.default.createElement(card_1.CardContent, null,
|
|
97
|
+
(state === null || state === void 0 ? void 0 : state.status) === "success" ? (react_1.default.createElement(message_1.Message, { message: state === null || state === void 0 ? void 0 : state.message, className: "ecpauth:mb-4 ecpauth:font-semibold ecpauth:text-base", variant: "success" })) : (react_1.default.createElement(message_1.Message, { message: state === null || state === void 0 ? void 0 : state.message, className: "ecpauth:mb-4" })),
|
|
98
|
+
!token ? (react_1.default.createElement("form", { action: handleSubmit },
|
|
99
|
+
react_1.default.createElement("div", { className: "ecpauth:flex ecpauth:flex-col ecpauth:gap-6" },
|
|
100
|
+
react_1.default.createElement("div", { className: "ecpauth:grid ecpauth:gap-2" },
|
|
101
|
+
react_1.default.createElement(label_1.Label, { htmlFor: "email" }, "Email"),
|
|
102
|
+
react_1.default.createElement(input_1.Input, { id: "email", type: "email", placeholder: "email@example.com", name: "email", defaultValue:
|
|
103
|
+
//@ts-ignore
|
|
104
|
+
(_a = state === null || state === void 0 ? void 0 : state.form) === null || _a === void 0 ? void 0 : _a.email })),
|
|
105
|
+
react_1.default.createElement(button_1.Button, { type: "submit", className: "ecpauth:w-full ecpauth:cursor-pointer", disabled: isPending }, "Send Reset Password Link")))) : (react_1.default.createElement("form", { action: handleSubmit },
|
|
106
|
+
react_1.default.createElement("div", { className: "ecpauth:flex ecpauth:flex-col ecpauth:gap-6" },
|
|
107
|
+
react_1.default.createElement("div", { className: "ecpauth:grid ecpauth:gap-2" },
|
|
108
|
+
react_1.default.createElement(label_1.Label, { htmlFor: "password" }, "Password"),
|
|
109
|
+
react_1.default.createElement(input_1.Input, { id: "password", type: "password", name: "password" })),
|
|
110
|
+
react_1.default.createElement("div", { className: "ecpauth:grid ecpauth:gap-2" },
|
|
111
|
+
react_1.default.createElement(label_1.Label, { htmlFor: "confirmPassword" }, "Confirm Password"),
|
|
112
|
+
react_1.default.createElement(input_1.Input, { id: "confirmPassword", type: "password", name: "confirmPassword" })),
|
|
113
|
+
react_1.default.createElement(button_1.Button, { type: "submit", className: "ecpauth:w-full ecpauth:cursor-pointer", disabled: isPending }, "Reset Password")))),
|
|
114
|
+
loginUrl && (react_1.default.createElement("div", { className: "ecpauth:mt-4 ecpauth:text-center ecpauth:text-sm" },
|
|
115
|
+
"Back to",
|
|
116
|
+
" ",
|
|
117
|
+
react_1.default.createElement("a", { href: loginUrl, className: "ecpauth:underline ecpauth:underline-offset-4" }, "Login")))))));
|
|
118
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Role } from "../types";
|
|
2
|
+
import React from "react";
|
|
3
|
+
export declare function Roles({ children, fallback, }: {
|
|
4
|
+
children: (role: Role, index: number) => React.ReactNode;
|
|
5
|
+
fallback?: React.ReactNode;
|
|
6
|
+
}): string | number | bigint | true | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | React.ReactPortal | Iterable<React.ReactNode> | null | undefined> | React.JSX.Element;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.Roles = Roles;
|
|
37
|
+
const api_1 = require("../lib/api");
|
|
38
|
+
const react_1 = __importStar(require("react"));
|
|
39
|
+
function Roles({ children, fallback, }) {
|
|
40
|
+
const [roles, setRoles] = (0, react_1.useState)([]);
|
|
41
|
+
const [loading, setLoading] = (0, react_1.useState)(true);
|
|
42
|
+
(0, react_1.useEffect)(() => {
|
|
43
|
+
const fetchRoles = async () => {
|
|
44
|
+
const response = await (0, api_1.apiFactory)("/roles", { method: "GET" });
|
|
45
|
+
setRoles(response.data);
|
|
46
|
+
setLoading(false);
|
|
47
|
+
};
|
|
48
|
+
fetchRoles();
|
|
49
|
+
}, []);
|
|
50
|
+
if (loading && fallback) {
|
|
51
|
+
return fallback;
|
|
52
|
+
}
|
|
53
|
+
return (react_1.default.createElement(react_1.default.Fragment, null, roles.map((role, index) => (react_1.default.createElement(react_1.default.Fragment, { key: index }, children(role, index))))));
|
|
54
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { GeneralResponse } from "../types";
|
|
3
|
+
type Props = {
|
|
4
|
+
open: boolean;
|
|
5
|
+
onOpenChange: (open: boolean) => void;
|
|
6
|
+
onToggle2FA?: () => Promise<GeneralResponse>;
|
|
7
|
+
};
|
|
8
|
+
export declare function Settings({ open, onOpenChange, onToggle2FA }: Props): React.JSX.Element;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Settings = Settings;
|
|
7
|
+
const react_1 = __importDefault(require("react"));
|
|
8
|
+
const dialog_1 = require("./ui/dialog");
|
|
9
|
+
const auth_provider_1 = require("../contexts/auth-provider");
|
|
10
|
+
const must_login_1 = require("./must-login");
|
|
11
|
+
const toggle_2fa_1 = require("./toggle-2fa");
|
|
12
|
+
const utils_1 = require("../lib/utils");
|
|
13
|
+
function Settings({ open, onOpenChange, onToggle2FA }) {
|
|
14
|
+
const { user } = (0, auth_provider_1.useAuth)();
|
|
15
|
+
return (react_1.default.createElement(dialog_1.Dialog, { open: open, onOpenChange: (state) => {
|
|
16
|
+
onOpenChange(state);
|
|
17
|
+
(0, utils_1.unstuckPointerEvents)();
|
|
18
|
+
} },
|
|
19
|
+
react_1.default.createElement(dialog_1.DialogContent, null, !user ? (react_1.default.createElement(must_login_1.MustLogin, { onOpenChange: onOpenChange })) : (react_1.default.createElement("div", { className: "ecpauth:relative" },
|
|
20
|
+
react_1.default.createElement(dialog_1.DialogHeader, { className: "ecpauth:border-b ecpauth:border-gray-200 ecpauth:dark:border-gray-800 ecpauth:pb-2" },
|
|
21
|
+
react_1.default.createElement(dialog_1.DialogTitle, { className: "ecpauth:flex ecpauth:items-center ecpauth:justify-between" },
|
|
22
|
+
react_1.default.createElement("span", { className: "ecpauth:text-stone-800 ecpauth:dark:text-stone-50" }, "Account Settings")),
|
|
23
|
+
react_1.default.createElement(dialog_1.DialogDescription, { className: "ecpauth:sr-only" }, "Manage your account settings here.")),
|
|
24
|
+
react_1.default.createElement("div", { className: "ecpauth:flex-1 ecpauth:flex ecpauth:flex-col ecpauth:gap-6 ecpauth:my-5 ecpauth:p-0 ecpauth:!max-h-[calc(100vh-12rem)] ecpauth:overflow-y-auto" },
|
|
25
|
+
react_1.default.createElement(toggle_2fa_1.Toggle2FA, { onSubmit: onToggle2FA })))))));
|
|
26
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Signup, FormResponse, User } from "../types";
|
|
3
|
+
type Props = {
|
|
4
|
+
className?: string;
|
|
5
|
+
onSubmit: (data: Signup) => Promise<FormResponse<User>>;
|
|
6
|
+
groupId?: string;
|
|
7
|
+
metaData?: Record<string, string>;
|
|
8
|
+
acceptUsername?: boolean;
|
|
9
|
+
};
|
|
10
|
+
export declare function Signup({ className, onSubmit, groupId, metaData, acceptUsername, ...props }: Props): React.JSX.Element;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.Signup = Signup;
|
|
38
|
+
const react_1 = __importStar(require("react"));
|
|
39
|
+
const utils_1 = require("../lib/utils");
|
|
40
|
+
const button_1 = require("./ui/button");
|
|
41
|
+
const card_1 = require("./ui/card");
|
|
42
|
+
const input_1 = require("./ui/input");
|
|
43
|
+
const label_1 = require("./ui/label");
|
|
44
|
+
const message_1 = require("./message");
|
|
45
|
+
const auth_provider_1 = require("../contexts/auth-provider");
|
|
46
|
+
function Signup({ className, onSubmit, groupId, metaData, acceptUsername = true, ...props }) {
|
|
47
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
48
|
+
const { computedRouteContext } = (0, auth_provider_1.useAuth)();
|
|
49
|
+
const { loginUrl } = computedRouteContext;
|
|
50
|
+
const [state, handleSubmit, isPending] = (0, react_1.useActionState)(async function (prevState, formData) {
|
|
51
|
+
const form = {
|
|
52
|
+
firstName: formData.get("firstName"),
|
|
53
|
+
lastName: formData.get("lastName"),
|
|
54
|
+
email: formData.get("email"),
|
|
55
|
+
username: (formData.get("username") || ""),
|
|
56
|
+
password: formData.get("password"),
|
|
57
|
+
confirmPassword: formData.get("confirmPassword"),
|
|
58
|
+
groupId,
|
|
59
|
+
metaData,
|
|
60
|
+
};
|
|
61
|
+
if (typeof onSubmit !== "function") {
|
|
62
|
+
return {
|
|
63
|
+
message: "onSubmit function is not defined. Please pass onSubmit function to SignupForm component.",
|
|
64
|
+
status: "failure",
|
|
65
|
+
form,
|
|
66
|
+
errors: undefined,
|
|
67
|
+
authToken: undefined,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
const result = await onSubmit({ ...form });
|
|
71
|
+
return {
|
|
72
|
+
...result,
|
|
73
|
+
form: result.status !== "success" ? form : undefined,
|
|
74
|
+
authToken: result.status === "success" ? result.authToken : undefined,
|
|
75
|
+
};
|
|
76
|
+
}, undefined);
|
|
77
|
+
(0, react_1.useEffect)(() => {
|
|
78
|
+
let timer;
|
|
79
|
+
if ((state === null || state === void 0 ? void 0 : state.status) === "success" && loginUrl) {
|
|
80
|
+
timer = setTimeout(() => {
|
|
81
|
+
window.location.href = `${loginUrl}?authToken=${state === null || state === void 0 ? void 0 : state.authToken}`;
|
|
82
|
+
}, 2000);
|
|
83
|
+
}
|
|
84
|
+
return () => {
|
|
85
|
+
clearTimeout(timer);
|
|
86
|
+
};
|
|
87
|
+
}, [state === null || state === void 0 ? void 0 : state.status, loginUrl]);
|
|
88
|
+
return (react_1.default.createElement("div", { className: (0, utils_1.cn)("ecpauth:flex ecpauth:flex-col ecpauth:gap-6 ecpauth:w-full ecpauth:max-w-sm", className), ...props },
|
|
89
|
+
react_1.default.createElement(card_1.Card, null,
|
|
90
|
+
react_1.default.createElement(card_1.CardHeader, null,
|
|
91
|
+
react_1.default.createElement(card_1.CardTitle, { className: "ecpauth:text-2xl" }, "Sign Up"),
|
|
92
|
+
react_1.default.createElement(card_1.CardDescription, null, "Provide your details to sign up from your account.")),
|
|
93
|
+
react_1.default.createElement(card_1.CardContent, null,
|
|
94
|
+
(state === null || state === void 0 ? void 0 : state.status) === "success" ? (react_1.default.createElement(message_1.Message, { message: state === null || state === void 0 ? void 0 : state.message, className: "ecpauth:mb-4 ecpauth:font-semibold ecpauth:text-lg", variant: "success" })) : (react_1.default.createElement(message_1.Message, { message: state === null || state === void 0 ? void 0 : state.message, className: "ecpauth:mb-4" })),
|
|
95
|
+
react_1.default.createElement("form", { action: handleSubmit },
|
|
96
|
+
react_1.default.createElement("div", { className: "ecpauth:flex ecpauth:flex-col ecpauth:gap-6" },
|
|
97
|
+
react_1.default.createElement("div", { className: "ecpauth:grid ecpauth:gap-2" },
|
|
98
|
+
react_1.default.createElement(label_1.Label, { htmlFor: "firstName" }, "First Name"),
|
|
99
|
+
react_1.default.createElement(input_1.Input, { id: "firstName", type: "text", placeholder: "First Name", name: "firstName", defaultValue: (_a = state === null || state === void 0 ? void 0 : state.form) === null || _a === void 0 ? void 0 : _a.firstName }),
|
|
100
|
+
react_1.default.createElement(message_1.Message, { message: (state === null || state === void 0 ? void 0 : state.status) === "validation-error"
|
|
101
|
+
? (_b = state === null || state === void 0 ? void 0 : state.errors) === null || _b === void 0 ? void 0 : _b.firstName
|
|
102
|
+
: "" })),
|
|
103
|
+
react_1.default.createElement("div", { className: "ecpauth:grid ecpauth:gap-2" },
|
|
104
|
+
react_1.default.createElement(label_1.Label, { htmlFor: "lastName" }, "Last Name"),
|
|
105
|
+
react_1.default.createElement(input_1.Input, { id: "lastName", type: "text", placeholder: "Last Name", name: "lastName", defaultValue: (_c = state === null || state === void 0 ? void 0 : state.form) === null || _c === void 0 ? void 0 : _c.lastName }),
|
|
106
|
+
react_1.default.createElement(message_1.Message, { message: (state === null || state === void 0 ? void 0 : state.status) === "validation-error"
|
|
107
|
+
? (_d = state === null || state === void 0 ? void 0 : state.errors) === null || _d === void 0 ? void 0 : _d.lastName
|
|
108
|
+
: "" })),
|
|
109
|
+
react_1.default.createElement("div", { className: "ecpauth:grid ecpauth:gap-2" },
|
|
110
|
+
react_1.default.createElement(label_1.Label, { htmlFor: "email" }, "Email"),
|
|
111
|
+
react_1.default.createElement(input_1.Input, { id: "email", type: "email", placeholder: "email@example.com", name: "email", defaultValue: (_e = state === null || state === void 0 ? void 0 : state.form) === null || _e === void 0 ? void 0 : _e.email }),
|
|
112
|
+
react_1.default.createElement(message_1.Message, { message: (state === null || state === void 0 ? void 0 : state.status) === "validation-error"
|
|
113
|
+
? (_f = state === null || state === void 0 ? void 0 : state.errors) === null || _f === void 0 ? void 0 : _f.email
|
|
114
|
+
: "" })),
|
|
115
|
+
acceptUsername && (react_1.default.createElement("div", { className: "ecpauth:grid ecpauth:gap-2" },
|
|
116
|
+
react_1.default.createElement(label_1.Label, { htmlFor: "username" }, "Username"),
|
|
117
|
+
react_1.default.createElement(input_1.Input, { id: "username", type: "text", placeholder: "Username", name: "username", defaultValue: (_g = state === null || state === void 0 ? void 0 : state.form) === null || _g === void 0 ? void 0 : _g.username }),
|
|
118
|
+
react_1.default.createElement(message_1.Message, { message: (state === null || state === void 0 ? void 0 : state.status) === "validation-error"
|
|
119
|
+
? (_h = state === null || state === void 0 ? void 0 : state.errors) === null || _h === void 0 ? void 0 : _h.username
|
|
120
|
+
: "" }))),
|
|
121
|
+
react_1.default.createElement("div", { className: "ecpauth:grid ecpauth:gap-2" },
|
|
122
|
+
react_1.default.createElement(label_1.Label, { htmlFor: "password" }, "Password"),
|
|
123
|
+
react_1.default.createElement(input_1.Input, { id: "password", type: "password", name: "password" }),
|
|
124
|
+
react_1.default.createElement(message_1.Message, { message: (state === null || state === void 0 ? void 0 : state.status) === "validation-error"
|
|
125
|
+
? (_j = state === null || state === void 0 ? void 0 : state.errors) === null || _j === void 0 ? void 0 : _j.password
|
|
126
|
+
: "" })),
|
|
127
|
+
react_1.default.createElement("div", { className: "ecpauth:grid ecpauth:gap-2" },
|
|
128
|
+
react_1.default.createElement(label_1.Label, { htmlFor: "confirmPassword" }, "Confirm Password"),
|
|
129
|
+
react_1.default.createElement(input_1.Input, { id: "confirmPassword", type: "password", name: "confirmPassword" }),
|
|
130
|
+
react_1.default.createElement(message_1.Message, { message: (state === null || state === void 0 ? void 0 : state.status) === "validation-error"
|
|
131
|
+
? (_k = state === null || state === void 0 ? void 0 : state.errors) === null || _k === void 0 ? void 0 : _k.confirmPassword
|
|
132
|
+
: "" })),
|
|
133
|
+
react_1.default.createElement(button_1.Button, { type: "submit", className: "ecpauth:w-full ecpauth:cursor-pointer", disabled: isPending }, isPending ? "Signing up..." : "Sign Up")),
|
|
134
|
+
loginUrl && (react_1.default.createElement("div", { className: "ecpauth:mt-4 ecpauth:text-center ecpauth:text-sm" },
|
|
135
|
+
"Already have an account?",
|
|
136
|
+
" ",
|
|
137
|
+
react_1.default.createElement("a", { href: loginUrl, className: "ecpauth:underline ecpauth:underline-offset-4" }, "Login"))))))));
|
|
138
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.Toggle2FA = Toggle2FA;
|
|
38
|
+
const react_1 = __importStar(require("react"));
|
|
39
|
+
const auth_provider_1 = require("../contexts/auth-provider");
|
|
40
|
+
const switch_1 = require("./ui/switch");
|
|
41
|
+
const loader_1 = require("./loader");
|
|
42
|
+
const message_1 = require("./message");
|
|
43
|
+
const utils_1 = require("../lib/utils");
|
|
44
|
+
function Toggle2FA({ onSubmit }) {
|
|
45
|
+
const { user, revalidate } = (0, auth_provider_1.useAuth)();
|
|
46
|
+
const [_, startTransition] = (0, react_1.useTransition)();
|
|
47
|
+
const canUseOtp = (0, utils_1.isOtpAvailable)();
|
|
48
|
+
const [state, handleSubmit, isPending] = (0, react_1.useActionState)(async function () {
|
|
49
|
+
if (typeof onSubmit !== "function") {
|
|
50
|
+
return {
|
|
51
|
+
message: "Toggle 2FA function is not defined. Please pass onSubmit function to Settings component. If you are using UserCard component, please pass onToggle2FA function to it.",
|
|
52
|
+
status: "failure",
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
const result = await onSubmit();
|
|
57
|
+
revalidate();
|
|
58
|
+
return result;
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
console.log(error);
|
|
62
|
+
}
|
|
63
|
+
}, undefined);
|
|
64
|
+
return (react_1.default.createElement("div", { className: "ecpauth:text-stone-800 ecpauth:dark:text-stone-50" },
|
|
65
|
+
isPending && react_1.default.createElement(loader_1.Loader, null),
|
|
66
|
+
react_1.default.createElement("p", { className: "ecpauth:font-semibold ecpauth:text-lg ecpauth:mb-2" }, "Toggle Two Factor Authentication"),
|
|
67
|
+
(state === null || state === void 0 ? void 0 : state.status) === "success" ? (react_1.default.createElement(message_1.Message, { message: state === null || state === void 0 ? void 0 : state.message, className: "ecpauth:my-2 ecpauth:font-semibold ecpauth:text-base", variant: "success" })) : (react_1.default.createElement(message_1.Message, { message: state === null || state === void 0 ? void 0 : state.message, className: "ecpauth:my-2" })),
|
|
68
|
+
react_1.default.createElement("p", null,
|
|
69
|
+
"This action will enable or disable 2FA on your account. If enabled, you\u2019ll be asked for a code sent to ",
|
|
70
|
+
react_1.default.createElement("strong", null, user === null || user === void 0 ? void 0 : user.email),
|
|
71
|
+
" during login."),
|
|
72
|
+
react_1.default.createElement("div", { className: "ecpauth:flex ecpauth:items-center ecpauth:justify-between ecpauth:py-3 ecpauth:my-3 ecpauth:border-y ecpauth:border-gray-200 ecpauth:dark:border-gray-800" },
|
|
73
|
+
react_1.default.createElement("p", { className: "ecpauth:flex-1 ecpauth:mb-0" }, "You can enable or disable your Two Factor Authentication"),
|
|
74
|
+
react_1.default.createElement("div", { className: "ecpauth:w-40 ecpauth:flex ecpauth:justify-end ecpauth:pe-3" },
|
|
75
|
+
react_1.default.createElement(switch_1.Switch, { checked: !!(user === null || user === void 0 ? void 0 : user.with2fa), onCheckedChange: () => startTransition(handleSubmit), disabled: !canUseOtp }))),
|
|
76
|
+
!canUseOtp && (react_1.default.createElement("p", { className: "ecpauth:text-red-500 ecpauth:my-2 ecpauth:text-sm" },
|
|
77
|
+
"2FA is not available. Please install",
|
|
78
|
+
" ",
|
|
79
|
+
react_1.default.createElement("code", null, "@explita/cloud-otp-client"),
|
|
80
|
+
" to enable it."))));
|
|
81
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { GeneralResponse, User } from "../types";
|
|
3
|
+
type Props = {
|
|
4
|
+
open: boolean;
|
|
5
|
+
onOpenChange: (open: boolean) => void;
|
|
6
|
+
onSubmit: (userId: string) => Promise<GeneralResponse>;
|
|
7
|
+
onSuccess?: () => void;
|
|
8
|
+
user: User | null;
|
|
9
|
+
};
|
|
10
|
+
export declare function ToggleAccountStatus({ user, open, onOpenChange, onSuccess, onSubmit, }: Props): React.JSX.Element;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.ToggleAccountStatus = ToggleAccountStatus;
|
|
37
|
+
const react_1 = __importStar(require("react"));
|
|
38
|
+
const dialog_1 = require("./ui/dialog");
|
|
39
|
+
const button_1 = require("./ui/button");
|
|
40
|
+
const auth_provider_1 = require("../contexts/auth-provider");
|
|
41
|
+
const message_1 = require("./message");
|
|
42
|
+
const must_login_1 = require("./must-login");
|
|
43
|
+
function ToggleAccountStatus({ user, open, onOpenChange, onSuccess, onSubmit, }) {
|
|
44
|
+
const { user: loggedInUser } = (0, auth_provider_1.useAuth)();
|
|
45
|
+
const [state, handleSubmit, isPending] = (0, react_1.useActionState)(async function () {
|
|
46
|
+
if (!user) {
|
|
47
|
+
return {
|
|
48
|
+
message: "Please provide a user to toggle account status.",
|
|
49
|
+
status: "failure",
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
if (typeof onSubmit !== "function") {
|
|
53
|
+
return {
|
|
54
|
+
message: "Toggle account status function is not defined. Please pass onSubmit function to ToggleAccountStatus component.",
|
|
55
|
+
status: "failure",
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
try {
|
|
59
|
+
const result = await onSubmit(user.id);
|
|
60
|
+
onSuccess === null || onSuccess === void 0 ? void 0 : onSuccess();
|
|
61
|
+
return result;
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
console.log(error);
|
|
65
|
+
}
|
|
66
|
+
}, undefined);
|
|
67
|
+
return (react_1.default.createElement(dialog_1.Dialog, { open: open, onOpenChange: onOpenChange },
|
|
68
|
+
react_1.default.createElement(dialog_1.DialogContent, null, !loggedInUser ? (react_1.default.createElement(must_login_1.MustLogin, { onOpenChange: onOpenChange })) : (react_1.default.createElement("form", { action: handleSubmit },
|
|
69
|
+
react_1.default.createElement(dialog_1.DialogHeader, null,
|
|
70
|
+
react_1.default.createElement(dialog_1.DialogTitle, null,
|
|
71
|
+
"Toggle account status (", user === null || user === void 0 ? void 0 :
|
|
72
|
+
user.firstName,
|
|
73
|
+
" ", user === null || user === void 0 ? void 0 :
|
|
74
|
+
user.lastName,
|
|
75
|
+
")"),
|
|
76
|
+
(state === null || state === void 0 ? void 0 : state.status) === "success" ? (react_1.default.createElement(message_1.Message, { message: state === null || state === void 0 ? void 0 : state.message, className: "ecpauth:my-2 ecpauth:font-semibold ecpauth:text-base", variant: "success" })) : (react_1.default.createElement(message_1.Message, { message: state === null || state === void 0 ? void 0 : state.message, className: "ecpauth:my-2" }))),
|
|
77
|
+
react_1.default.createElement(dialog_1.DialogDescription, { className: "ecpauth:flex ecpauth:flex-col ecpauth:gap-2 ecpauth:text-gray-700 ecpauth:dark:text-gray-50 ecpauth:mt-4" },
|
|
78
|
+
react_1.default.createElement("span", null,
|
|
79
|
+
"This action will",
|
|
80
|
+
" ",
|
|
81
|
+
react_1.default.createElement("strong", null, (user === null || user === void 0 ? void 0 : user.isActive) ? "suspend" : "unsuspend"),
|
|
82
|
+
" the user."),
|
|
83
|
+
react_1.default.createElement("span", null,
|
|
84
|
+
"You can always",
|
|
85
|
+
" ",
|
|
86
|
+
react_1.default.createElement("strong", null, (user === null || user === void 0 ? void 0 : user.isActive) ? "unsuspend" : "suspend"),
|
|
87
|
+
" the user if you change your mind.")),
|
|
88
|
+
react_1.default.createElement(dialog_1.DialogFooter, { className: "ecpauth:flex ecpauth:justify-center ecpauth:gap-2 ecpauth:mt-4" },
|
|
89
|
+
react_1.default.createElement(button_1.Button, { type: "button", variant: "outline", onClick: () => onOpenChange(false) }, "Cancel"),
|
|
90
|
+
react_1.default.createElement(button_1.Button, { disabled: isPending, type: "submit" }, (user === null || user === void 0 ? void 0 : user.isActive) ? "Suspend" : "Unsuspend")))))));
|
|
91
|
+
}
|