@w-iris/react 0.1.1 → 0.1.2
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/dist/admin/index.d.ts +3 -0
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +3 -0
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/pages/ProfilePage.d.ts +40 -0
- package/dist/admin/pages/ProfilePage.d.ts.map +1 -0
- package/dist/admin/pages/ProfilePage.js +169 -0
- package/dist/admin/pages/ProfilePage.js.map +1 -0
- package/dist/admin/pages/SecurityPage.d.ts +17 -0
- package/dist/admin/pages/SecurityPage.d.ts.map +1 -0
- package/dist/admin/pages/SecurityPage.js +97 -0
- package/dist/admin/pages/SecurityPage.js.map +1 -0
- package/dist/admin/pages/SettingsPage.d.ts +39 -0
- package/dist/admin/pages/SettingsPage.d.ts.map +1 -0
- package/dist/admin/pages/SettingsPage.js +61 -0
- package/dist/admin/pages/SettingsPage.js.map +1 -0
- package/package.json +1 -1
package/dist/admin/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC"}
|
package/dist/admin/index.js
CHANGED
|
@@ -17,4 +17,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
__exportStar(require("./AdminAuth"), exports);
|
|
18
18
|
__exportStar(require("./AdminNavigation"), exports);
|
|
19
19
|
__exportStar(require("./AdminUser"), exports);
|
|
20
|
+
__exportStar(require("./pages/ProfilePage"), exports);
|
|
21
|
+
__exportStar(require("./pages/SecurityPage"), exports);
|
|
22
|
+
__exportStar(require("./pages/SettingsPage"), exports);
|
|
20
23
|
//# sourceMappingURL=index.js.map
|
package/dist/admin/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,oDAAkC;AAClC,8CAA4B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,oDAAkC;AAClC,8CAA4B;AAC5B,sDAAoC;AACpC,uDAAqC;AACrC,uDAAqC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export type AdminProfileUser = {
|
|
2
|
+
fullName?: string | null;
|
|
3
|
+
email?: string | null;
|
|
4
|
+
phone?: string | null;
|
|
5
|
+
avatarUrl?: string | null;
|
|
6
|
+
bio?: string | null;
|
|
7
|
+
birthday?: string | null;
|
|
8
|
+
address?: string | null;
|
|
9
|
+
city?: string | null;
|
|
10
|
+
country?: string | null;
|
|
11
|
+
jobTitle?: string | null;
|
|
12
|
+
department?: string | null;
|
|
13
|
+
website?: string | null;
|
|
14
|
+
tenantName?: string | null;
|
|
15
|
+
tenantCode?: string | null;
|
|
16
|
+
role?: string | null;
|
|
17
|
+
};
|
|
18
|
+
export type AdminProfileForm = {
|
|
19
|
+
fullName: string;
|
|
20
|
+
email: string;
|
|
21
|
+
phone: string;
|
|
22
|
+
avatarUrl: string;
|
|
23
|
+
bio: string;
|
|
24
|
+
birthday: string;
|
|
25
|
+
address: string;
|
|
26
|
+
city: string;
|
|
27
|
+
country: string;
|
|
28
|
+
jobTitle: string;
|
|
29
|
+
department: string;
|
|
30
|
+
website: string;
|
|
31
|
+
location: string;
|
|
32
|
+
};
|
|
33
|
+
export type AdminProfilePageProps = {
|
|
34
|
+
user?: AdminProfileUser | null;
|
|
35
|
+
onSaveProfile: (payload: Omit<AdminProfileForm, "email" | "location">) => Promise<void> | void;
|
|
36
|
+
onUploadAvatar: (file: File) => Promise<string>;
|
|
37
|
+
onUserUpdated?: (next: Partial<AdminProfileUser>) => void;
|
|
38
|
+
};
|
|
39
|
+
export declare function AdminProfilePage({ user, onSaveProfile, onUploadAvatar, onUserUpdated, }: AdminProfilePageProps): import("react").JSX.Element;
|
|
40
|
+
//# sourceMappingURL=ProfilePage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProfilePage.d.ts","sourceRoot":"","sources":["../../../src/admin/pages/ProfilePage.tsx"],"names":[],"mappings":"AAeA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC/B,aAAa,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,UAAU,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC/F,cAAc,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;CAC3D,CAAC;AAqBF,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,aAAa,EACb,cAAc,EACd,aAAa,GACd,EAAE,qBAAqB,+BA6UvB"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.AdminProfilePage = AdminProfilePage;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
const react_1 = require("react");
|
|
7
|
+
const avatar_1 = require("primereact/avatar");
|
|
8
|
+
const button_1 = require("primereact/button");
|
|
9
|
+
const dialog_1 = require("primereact/dialog");
|
|
10
|
+
const inputtext_1 = require("primereact/inputtext");
|
|
11
|
+
const inputtextarea_1 = require("primereact/inputtextarea");
|
|
12
|
+
const tabview_1 = require("primereact/tabview");
|
|
13
|
+
const tag_1 = require("primereact/tag");
|
|
14
|
+
const divider_1 = require("primereact/divider");
|
|
15
|
+
const panel_1 = require("primereact/panel");
|
|
16
|
+
const progressbar_1 = require("primereact/progressbar");
|
|
17
|
+
const toast_1 = require("primereact/toast");
|
|
18
|
+
function profileFromUser(user) {
|
|
19
|
+
const location = [user?.city, user?.country].filter(Boolean).join(", ");
|
|
20
|
+
return {
|
|
21
|
+
fullName: user?.fullName ?? "",
|
|
22
|
+
email: user?.email ?? "",
|
|
23
|
+
phone: user?.phone ?? "",
|
|
24
|
+
avatarUrl: user?.avatarUrl ?? "",
|
|
25
|
+
bio: user?.bio ?? "",
|
|
26
|
+
birthday: user?.birthday ? user.birthday.slice(0, 10) : "",
|
|
27
|
+
address: user?.address ?? "",
|
|
28
|
+
city: user?.city ?? "",
|
|
29
|
+
country: user?.country ?? "",
|
|
30
|
+
jobTitle: user?.jobTitle ?? "",
|
|
31
|
+
department: user?.department ?? "",
|
|
32
|
+
website: user?.website ?? "",
|
|
33
|
+
location,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function AdminProfilePage({ user, onSaveProfile, onUploadAvatar, onUserUpdated, }) {
|
|
37
|
+
const [form, setForm] = (0, react_1.useState)(() => profileFromUser(user));
|
|
38
|
+
const [loading, setLoading] = (0, react_1.useState)(false);
|
|
39
|
+
const [avatarDialogOpen, setAvatarDialogOpen] = (0, react_1.useState)(false);
|
|
40
|
+
const [avatarFile, setAvatarFile] = (0, react_1.useState)(null);
|
|
41
|
+
const [avatarPreviewUrl, setAvatarPreviewUrl] = (0, react_1.useState)("");
|
|
42
|
+
const [avatarSaving, setAvatarSaving] = (0, react_1.useState)(false);
|
|
43
|
+
const [editMode, setEditMode] = (0, react_1.useState)(false);
|
|
44
|
+
const toast = (0, react_1.useRef)(null);
|
|
45
|
+
(0, react_1.useEffect)(() => {
|
|
46
|
+
if (!editMode)
|
|
47
|
+
setForm(profileFromUser(user));
|
|
48
|
+
}, [editMode, user]);
|
|
49
|
+
(0, react_1.useEffect)(() => {
|
|
50
|
+
return () => {
|
|
51
|
+
if (avatarPreviewUrl.startsWith("blob:"))
|
|
52
|
+
URL.revokeObjectURL(avatarPreviewUrl);
|
|
53
|
+
};
|
|
54
|
+
}, [avatarPreviewUrl]);
|
|
55
|
+
function showToast(severity, detail) {
|
|
56
|
+
toast.current?.show({ severity, summary: severity === "success" ? "Success" : "Error", detail, life: 3000 });
|
|
57
|
+
}
|
|
58
|
+
async function handleSave() {
|
|
59
|
+
setLoading(true);
|
|
60
|
+
try {
|
|
61
|
+
const { email: _email, location: _location, ...profilePayload } = form;
|
|
62
|
+
await onSaveProfile(profilePayload);
|
|
63
|
+
showToast("success", "Profile updated successfully.");
|
|
64
|
+
setEditMode(false);
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
showToast("error", err instanceof Error ? err.message : "Failed to update profile.");
|
|
68
|
+
}
|
|
69
|
+
finally {
|
|
70
|
+
setLoading(false);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
function handleInputChange(key, value) {
|
|
74
|
+
setForm((prev) => {
|
|
75
|
+
const next = { ...prev, [key]: value };
|
|
76
|
+
if (key === "city" || key === "country") {
|
|
77
|
+
next.location = [next.city, next.country].filter(Boolean).join(", ");
|
|
78
|
+
}
|
|
79
|
+
return next;
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
function openAvatarDialog() {
|
|
83
|
+
setAvatarFile(null);
|
|
84
|
+
setAvatarPreviewUrl(form.avatarUrl);
|
|
85
|
+
setAvatarDialogOpen(true);
|
|
86
|
+
}
|
|
87
|
+
function handleAvatarFileChange(file) {
|
|
88
|
+
if (!file)
|
|
89
|
+
return;
|
|
90
|
+
if (!file.type.startsWith("image/")) {
|
|
91
|
+
showToast("error", "Avatar file must be an image.");
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
if (file.size > 5 * 1024 * 1024) {
|
|
95
|
+
showToast("error", "Avatar image must be 5 MB or smaller.");
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
if (avatarPreviewUrl.startsWith("blob:"))
|
|
99
|
+
URL.revokeObjectURL(avatarPreviewUrl);
|
|
100
|
+
setAvatarFile(file);
|
|
101
|
+
setAvatarPreviewUrl(URL.createObjectURL(file));
|
|
102
|
+
}
|
|
103
|
+
async function handleAvatarSave() {
|
|
104
|
+
if (!avatarFile) {
|
|
105
|
+
showToast("error", "Choose an image before saving.");
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
setAvatarSaving(true);
|
|
109
|
+
try {
|
|
110
|
+
const avatarUrl = await onUploadAvatar(avatarFile);
|
|
111
|
+
setForm((prev) => ({ ...prev, avatarUrl }));
|
|
112
|
+
onUserUpdated?.({ avatarUrl });
|
|
113
|
+
setAvatarDialogOpen(false);
|
|
114
|
+
setAvatarFile(null);
|
|
115
|
+
setAvatarPreviewUrl(avatarUrl);
|
|
116
|
+
showToast("success", "Avatar updated successfully.");
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
showToast("error", err instanceof Error ? err.message : "Failed to update avatar.");
|
|
120
|
+
}
|
|
121
|
+
finally {
|
|
122
|
+
setAvatarSaving(false);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
const initial = (form.fullName || form.email || "M").charAt(0).toUpperCase();
|
|
126
|
+
const profileCompletion = (0, react_1.useMemo)(() => {
|
|
127
|
+
const fields = [
|
|
128
|
+
form.fullName,
|
|
129
|
+
form.email,
|
|
130
|
+
form.phone,
|
|
131
|
+
form.avatarUrl,
|
|
132
|
+
form.bio,
|
|
133
|
+
form.birthday,
|
|
134
|
+
form.address,
|
|
135
|
+
form.city,
|
|
136
|
+
form.country,
|
|
137
|
+
form.jobTitle,
|
|
138
|
+
form.department,
|
|
139
|
+
form.website,
|
|
140
|
+
];
|
|
141
|
+
return Math.round((fields.filter((field) => field && field.trim() !== "").length / fields.length) * 100);
|
|
142
|
+
}, [form]);
|
|
143
|
+
const stats = (0, react_1.useMemo)(() => [
|
|
144
|
+
{ label: "Profile Completion", value: `${profileCompletion}%`, icon: "pi pi-chart-bar", color: "text-blue-500" },
|
|
145
|
+
{ label: "Account Type", value: "Admin", icon: "pi pi-verified", color: "text-green-500" },
|
|
146
|
+
{ label: "Member Since", value: "2024", icon: "pi pi-calendar", color: "text-purple-500" },
|
|
147
|
+
], [profileCompletion]);
|
|
148
|
+
const getCompletionSeverity = (value) => {
|
|
149
|
+
if (value < 30)
|
|
150
|
+
return "danger";
|
|
151
|
+
if (value < 70)
|
|
152
|
+
return "warning";
|
|
153
|
+
return "success";
|
|
154
|
+
};
|
|
155
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "grid", children: [(0, jsx_runtime_1.jsx)(toast_1.Toast, { ref: toast }), (0, jsx_runtime_1.jsx)("div", { className: "col-12", children: (0, jsx_runtime_1.jsx)("div", { className: "card p-5 bg-gradient-to-r from-blue-50 to-purple-50 border-none", children: (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-column md:flex-row gap-5 align-items-center", children: [(0, jsx_runtime_1.jsxs)("div", { className: "relative", children: [(0, jsx_runtime_1.jsxs)("button", { type: "button", className: "relative border-none border-circle p-0 bg-transparent cursor-pointer", onClick: openAvatarDialog, "aria-label": "Change avatar", children: [(0, jsx_runtime_1.jsx)(avatar_1.Avatar, { image: form.avatarUrl || undefined, label: form.avatarUrl ? undefined : initial, size: "xlarge", shape: "circle", className: "shadow-5 border-4 border-white avatar-glow", style: { width: "130px", height: "130px", fontSize: "3.5rem" } }), (0, jsx_runtime_1.jsx)("span", { className: "absolute bottom-0 right-0 flex align-items-center justify-content-center bg-primary text-white border-circle shadow-3", style: { width: "2.5rem", height: "2.5rem", border: "3px solid #fff" }, children: (0, jsx_runtime_1.jsx)("i", { className: "pi pi-camera" }) })] }), form.jobTitle ? (0, jsx_runtime_1.jsx)(tag_1.Tag, { value: form.jobTitle, severity: "info", className: "absolute bottom-0 left-50 transform -translate-x-1/2 translate-y-1/2" }) : null] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex-1 text-center md:text-left", children: [(0, jsx_runtime_1.jsx)("h2", { className: "text-3xl font-bold m-0 text-900", children: form.fullName || "Your Name" }), (0, jsx_runtime_1.jsxs)("p", { className: "text-600 mt-2 mb-1 flex align-items-center gap-2 justify-content-center md:justify-content-start", children: [(0, jsx_runtime_1.jsx)("i", { className: "pi pi-envelope text-blue-500" }), form.email] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-wrap gap-2 mt-3 justify-content-center md:justify-content-start", children: [form.department ? (0, jsx_runtime_1.jsx)(tag_1.Tag, { value: form.department, severity: "warning", icon: "pi pi-briefcase", className: "text-sm" }) : null, user?.tenantName ? (0, jsx_runtime_1.jsx)(tag_1.Tag, { value: user.tenantName, severity: "success", icon: "pi pi-building", className: "text-sm" }) : null, form.location ? (0, jsx_runtime_1.jsx)(tag_1.Tag, { value: form.location, severity: "info", icon: "pi pi-map-marker", className: "text-sm" }) : null] }), (0, jsx_runtime_1.jsxs)("div", { className: "mt-3 w-full md:w-20rem", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex align-items-center justify-content-between mb-2", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-600 font-medium", children: "Profile Completion" }), (0, jsx_runtime_1.jsxs)("span", { className: "text-900 font-bold", children: [profileCompletion, "%"] })] }), (0, jsx_runtime_1.jsx)(progressbar_1.ProgressBar, { value: profileCompletion, className: `h-8rem ${getCompletionSeverity(profileCompletion)}` })] }), (0, jsx_runtime_1.jsx)("div", { className: "grid mt-4 w-full", children: stats.map((stat) => ((0, jsx_runtime_1.jsx)("div", { className: "col-12 md:col-4", children: (0, jsx_runtime_1.jsxs)("div", { className: "flex align-items-center gap-3 p-3 bg-white border-1 border-gray-100 border-round shadow-1", style: { transition: "all 0.3s ease" }, children: [(0, jsx_runtime_1.jsx)("i", { className: `${stat.icon} text-2xl ${stat.color}` }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("p", { className: "text-600 text-sm m-0", children: stat.label }), (0, jsx_runtime_1.jsx)("p", { className: "text-900 font-bold text-lg m-0", children: stat.value })] })] }) }, stat.label))) })] }), (0, jsx_runtime_1.jsx)("div", { className: "flex gap-2", children: !editMode ? ((0, jsx_runtime_1.jsx)(button_1.Button, { label: "Edit Profile", icon: "pi pi-pencil", onClick: () => setEditMode(true), className: "p-button-outlined shadow-3", size: "large" })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(button_1.Button, { label: "Cancel", icon: "pi pi-times", onClick: () => setEditMode(false), className: "p-button-secondary shadow-3", size: "large" }), (0, jsx_runtime_1.jsx)(button_1.Button, { label: "Save changes", icon: loading ? undefined : "pi pi-save", loading: loading, onClick: handleSave, className: "p-button-primary shadow-3", size: "large" })] })) })] }) }) }), (0, jsx_runtime_1.jsx)("div", { className: "col-12", children: (0, jsx_runtime_1.jsx)("div", { className: "card surface-0 border-1 border-gray-100 shadow-2", children: (0, jsx_runtime_1.jsxs)(tabview_1.TabView, { className: "profile-tabs", children: [(0, jsx_runtime_1.jsx)(tabview_1.TabPanel, { header: "Personal Information", leftIcon: "pi pi-user mr-2", children: (0, jsx_runtime_1.jsxs)("div", { className: "formgrid grid", children: [[
|
|
156
|
+
["fullName", "Display Name", "pi pi-user text-blue-500", "Enter your full name"],
|
|
157
|
+
["email", "Email Address", "pi pi-envelope text-blue-500", "Email used for login"],
|
|
158
|
+
["phone", "Phone Number", "pi pi-phone text-green-500", "Enter your phone number"],
|
|
159
|
+
["birthday", "Birthday", "pi pi-calendar text-orange-500", ""],
|
|
160
|
+
["jobTitle", "Job Title", "pi pi-briefcase text-purple-500", "Enter your job title"],
|
|
161
|
+
["department", "Department", "pi pi-building text-cyan-500", "Enter your department"],
|
|
162
|
+
["website", "Website", "pi pi-globe text-indigo-500", "https://example.com"],
|
|
163
|
+
].map(([key, label, icon, placeholder]) => ((0, jsx_runtime_1.jsxs)("div", { className: "field col-12 md:col-6", children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: key, className: "block mb-2 font-medium text-900", children: label }), (0, jsx_runtime_1.jsxs)("span", { className: "p-input-icon-left w-full", children: [(0, jsx_runtime_1.jsx)("i", { className: icon }), (0, jsx_runtime_1.jsx)(inputtext_1.InputText, { id: key, type: key === "birthday" ? "date" : key === "email" ? "email" : "text", value: form[key], onChange: (e) => handleInputChange(key, e.target.value), className: "w-full p-inputtext-lg pl-5", placeholder: placeholder, disabled: !editMode || key === "email", readOnly: key === "email" })] }), key === "email" ? (0, jsx_runtime_1.jsx)("small", { className: "text-600 block mt-2", children: "Email is used for login and cannot be changed here." }) : null] }, key))), (0, jsx_runtime_1.jsxs)("div", { className: "field col-12", children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "bio", className: "block mb-2 font-medium text-900", children: "Bio" }), (0, jsx_runtime_1.jsx)(inputtextarea_1.InputTextarea, { id: "bio", value: form.bio, onChange: (e) => handleInputChange("bio", e.target.value), rows: 4, className: "w-full", placeholder: "Tell us about yourself...", disabled: !editMode })] })] }) }), (0, jsx_runtime_1.jsxs)(tabview_1.TabPanel, { header: "Location", leftIcon: "pi pi-map-marker mr-2", children: [(0, jsx_runtime_1.jsx)("div", { className: "grid", children: [
|
|
164
|
+
["address", "Address", "pi pi-home text-blue-500", "Enter your address"],
|
|
165
|
+
["city", "City", "pi pi-map-marker text-red-500", "Enter your city"],
|
|
166
|
+
["country", "Country", "pi pi-flag text-green-500", "Enter your country"],
|
|
167
|
+
].map(([key, label, icon, placeholder]) => ((0, jsx_runtime_1.jsx)("div", { className: "col-12 md:col-6", children: (0, jsx_runtime_1.jsxs)("div", { className: "field", children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: key, className: "block mb-2 font-medium text-900", children: label }), (0, jsx_runtime_1.jsxs)("span", { className: "p-input-icon-left w-full", children: [(0, jsx_runtime_1.jsx)("i", { className: icon }), (0, jsx_runtime_1.jsx)(inputtext_1.InputText, { id: key, type: "text", value: form[key], onChange: (e) => handleInputChange(key, e.target.value), className: "w-full p-inputtext-lg pl-5", placeholder: placeholder, disabled: !editMode })] })] }) }, key))) }), form.address ? ((0, jsx_runtime_1.jsxs)("div", { className: "mt-4", children: [(0, jsx_runtime_1.jsx)(divider_1.Divider, { align: "center", children: (0, jsx_runtime_1.jsx)(tag_1.Tag, { value: "Location Preview", severity: "info" }) }), (0, jsx_runtime_1.jsx)(panel_1.Panel, { className: "bg-blue-50 border-blue-200", children: (0, jsx_runtime_1.jsxs)("div", { className: "flex align-items-center gap-3 text-600", children: [(0, jsx_runtime_1.jsx)("i", { className: "pi pi-map-marker text-blue-500 text-xl" }), (0, jsx_runtime_1.jsx)("span", { className: "text-lg", children: [form.address, form.city, form.country].filter(Boolean).join(", ") })] }) })] })) : null] }), (0, jsx_runtime_1.jsx)(tabview_1.TabPanel, { header: "Account Settings", leftIcon: "pi pi-cog mr-2", children: (0, jsx_runtime_1.jsxs)("div", { className: "grid", children: [(0, jsx_runtime_1.jsx)("div", { className: "col-12", children: (0, jsx_runtime_1.jsx)(panel_1.Panel, { header: "Account Information", toggleable: true, className: "border-blue-200", children: (0, jsx_runtime_1.jsxs)("div", { className: "flex align-items-start gap-3", children: [(0, jsx_runtime_1.jsx)("i", { className: "pi pi-info-circle text-blue-600 text-2xl mt-1" }), (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsxs)("p", { className: "m-0 text-700 line-height-3", children: [(0, jsx_runtime_1.jsx)("strong", { children: "Email:" }), " ", form.email, (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)("strong", { children: "Tenant:" }), " ", user?.tenantName || user?.tenantCode || "N/A", (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)("strong", { children: "Role:" }), " ", (0, jsx_runtime_1.jsx)(tag_1.Tag, { value: "Admin", severity: "danger", className: "text-xs" })] }) })] }) }) }), (0, jsx_runtime_1.jsx)("div", { className: "col-12 md:col-6", children: (0, jsx_runtime_1.jsxs)("div", { className: "field", children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "currentPassword", className: "block mb-2 font-medium text-900", children: "Current Password" }), (0, jsx_runtime_1.jsxs)("span", { className: "p-input-icon-left w-full", children: [(0, jsx_runtime_1.jsx)("i", { className: "pi pi-lock text-red-500" }), (0, jsx_runtime_1.jsx)(inputtext_1.InputText, { id: "currentPassword", type: "password", className: "w-full p-inputtext-lg pl-5", placeholder: "Enter current password", disabled: !editMode })] })] }) }), (0, jsx_runtime_1.jsx)("div", { className: "col-12 md:col-6", children: (0, jsx_runtime_1.jsxs)("div", { className: "field", children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "newPassword", className: "block mb-2 font-medium text-900", children: "New Password" }), (0, jsx_runtime_1.jsxs)("span", { className: "p-input-icon-left w-full", children: [(0, jsx_runtime_1.jsx)("i", { className: "pi pi-lock text-green-500" }), (0, jsx_runtime_1.jsx)(inputtext_1.InputText, { id: "newPassword", type: "password", className: "w-full p-inputtext-lg pl-5", placeholder: "Enter new password", disabled: !editMode })] })] }) })] }) })] }) }) }), (0, jsx_runtime_1.jsx)(dialog_1.Dialog, { header: "Change Avatar", visible: avatarDialogOpen, onHide: () => setAvatarDialogOpen(false), style: { width: "min(92vw, 30rem)" }, modal: true, draggable: false, resizable: false, footer: (0, jsx_runtime_1.jsxs)("div", { className: "flex justify-content-end gap-2", children: [(0, jsx_runtime_1.jsx)(button_1.Button, { label: "Cancel", icon: "pi pi-times", className: "p-button-text", onClick: () => setAvatarDialogOpen(false), disabled: avatarSaving }), (0, jsx_runtime_1.jsx)(button_1.Button, { label: "Save avatar", icon: avatarSaving ? undefined : "pi pi-save", loading: avatarSaving, onClick: handleAvatarSave, disabled: !avatarFile || avatarSaving })] }), children: (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-column align-items-center gap-4", children: [(0, jsx_runtime_1.jsx)(avatar_1.Avatar, { image: avatarPreviewUrl || undefined, label: avatarPreviewUrl ? undefined : initial, size: "xlarge", shape: "circle", className: "shadow-3 border-3 border-white", style: { width: "8rem", height: "8rem", fontSize: "3rem" } }), (0, jsx_runtime_1.jsxs)("div", { className: "w-full", children: [(0, jsx_runtime_1.jsx)("label", { htmlFor: "profile-avatar-file", className: "block mb-2 font-medium text-900", children: "Avatar image" }), (0, jsx_runtime_1.jsx)("input", { id: "profile-avatar-file", type: "file", accept: "image/*", className: "w-full", onChange: (event) => handleAvatarFileChange(event.target.files?.[0]), disabled: avatarSaving }), (0, jsx_runtime_1.jsx)("small", { className: "text-600 block mt-2", children: "Choose a JPG, PNG, or WebP image up to 5 MB." })] })] }) })] }));
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=ProfilePage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProfilePage.js","sourceRoot":"","sources":["../../../src/admin/pages/ProfilePage.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type AdminMfaSetup = {
|
|
2
|
+
qrCode: string;
|
|
3
|
+
secret: string;
|
|
4
|
+
};
|
|
5
|
+
export type AdminSecurityPageProps = {
|
|
6
|
+
userEmail?: string;
|
|
7
|
+
mfaEnabled: boolean;
|
|
8
|
+
mustChangePassword?: boolean;
|
|
9
|
+
onSetupMfa: () => Promise<AdminMfaSetup>;
|
|
10
|
+
onVerifyMfa: (code: string) => Promise<void>;
|
|
11
|
+
onDisableMfa: (code: string) => Promise<void>;
|
|
12
|
+
onChangePassword: (currentPassword: string, newPassword: string) => Promise<void>;
|
|
13
|
+
onMfaEnabledChange?: (enabled: boolean) => void;
|
|
14
|
+
onPasswordReset?: () => void;
|
|
15
|
+
};
|
|
16
|
+
export declare function AdminSecurityPage({ userEmail, mfaEnabled, mustChangePassword, onSetupMfa, onVerifyMfa, onDisableMfa, onChangePassword, onMfaEnabledChange, }: AdminSecurityPageProps): import("react").JSX.Element;
|
|
17
|
+
//# sourceMappingURL=SecurityPage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SecurityPage.d.ts","sourceRoot":"","sources":["../../../src/admin/pages/SecurityPage.tsx"],"names":[],"mappings":"AAUA,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,UAAU,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;IACzC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,gBAAgB,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClF,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;CAC9B,CAAC;AAMF,wBAAgB,iBAAiB,CAAC,EAChC,SAAS,EACT,UAAU,EACV,kBAAkB,EAClB,UAAU,EACV,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,GACnB,EAAE,sBAAsB,+BA2JxB"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.AdminSecurityPage = AdminSecurityPage;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
const react_1 = require("react");
|
|
7
|
+
const button_1 = require("primereact/button");
|
|
8
|
+
const divider_1 = require("primereact/divider");
|
|
9
|
+
const inputtext_1 = require("primereact/inputtext");
|
|
10
|
+
const message_1 = require("primereact/message");
|
|
11
|
+
const password_1 = require("primereact/password");
|
|
12
|
+
const tag_1 = require("primereact/tag");
|
|
13
|
+
function normalizeMfaCode(value) {
|
|
14
|
+
return value.replace(/\D/g, "").slice(0, 6);
|
|
15
|
+
}
|
|
16
|
+
function AdminSecurityPage({ userEmail, mfaEnabled, mustChangePassword, onSetupMfa, onVerifyMfa, onDisableMfa, onChangePassword, onMfaEnabledChange, }) {
|
|
17
|
+
const [setupData, setSetupData] = (0, react_1.useState)(null);
|
|
18
|
+
const [setupCode, setSetupCode] = (0, react_1.useState)("");
|
|
19
|
+
const [disableCode, setDisableCode] = (0, react_1.useState)("");
|
|
20
|
+
const [passwords, setPasswords] = (0, react_1.useState)({ currentPassword: "", newPassword: "", confirmPassword: "" });
|
|
21
|
+
const [loading, setLoading] = (0, react_1.useState)(false);
|
|
22
|
+
const [message, setMessage] = (0, react_1.useState)(null);
|
|
23
|
+
async function startMfaSetup() {
|
|
24
|
+
setLoading(true);
|
|
25
|
+
setMessage(null);
|
|
26
|
+
try {
|
|
27
|
+
setSetupData(await onSetupMfa());
|
|
28
|
+
setSetupCode("");
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
setMessage({ severity: "error", text: err instanceof Error ? err.message : "Failed to start MFA setup." });
|
|
32
|
+
}
|
|
33
|
+
finally {
|
|
34
|
+
setLoading(false);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
async function verifyMfa() {
|
|
38
|
+
const code = normalizeMfaCode(setupCode);
|
|
39
|
+
if (code.length !== 6)
|
|
40
|
+
return setMessage({ severity: "error", text: "Enter the 6-digit authenticator code." });
|
|
41
|
+
setLoading(true);
|
|
42
|
+
setMessage(null);
|
|
43
|
+
try {
|
|
44
|
+
await onVerifyMfa(code);
|
|
45
|
+
onMfaEnabledChange?.(true);
|
|
46
|
+
setSetupData(null);
|
|
47
|
+
setSetupCode("");
|
|
48
|
+
setMessage({ severity: "success", text: "MFA is now enabled." });
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
setMessage({ severity: "error", text: err instanceof Error ? err.message : "Failed to verify MFA code." });
|
|
52
|
+
}
|
|
53
|
+
finally {
|
|
54
|
+
setLoading(false);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async function disableMfa() {
|
|
58
|
+
const code = normalizeMfaCode(disableCode);
|
|
59
|
+
if (code.length !== 6)
|
|
60
|
+
return setMessage({ severity: "error", text: "Enter the current 6-digit MFA code." });
|
|
61
|
+
setLoading(true);
|
|
62
|
+
setMessage(null);
|
|
63
|
+
try {
|
|
64
|
+
await onDisableMfa(code);
|
|
65
|
+
onMfaEnabledChange?.(false);
|
|
66
|
+
setDisableCode("");
|
|
67
|
+
setMessage({ severity: "success", text: "MFA has been disabled." });
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
setMessage({ severity: "error", text: err instanceof Error ? err.message : "Failed to disable MFA." });
|
|
71
|
+
}
|
|
72
|
+
finally {
|
|
73
|
+
setLoading(false);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
async function changePassword() {
|
|
77
|
+
if (passwords.newPassword.length < 8)
|
|
78
|
+
return setMessage({ severity: "error", text: "New password must be at least 8 characters." });
|
|
79
|
+
if (passwords.newPassword !== passwords.confirmPassword)
|
|
80
|
+
return setMessage({ severity: "error", text: "Password confirmation does not match." });
|
|
81
|
+
setLoading(true);
|
|
82
|
+
setMessage(null);
|
|
83
|
+
try {
|
|
84
|
+
await onChangePassword(passwords.currentPassword, passwords.newPassword);
|
|
85
|
+
setPasswords({ currentPassword: "", newPassword: "", confirmPassword: "" });
|
|
86
|
+
setMessage({ severity: "success", text: "Password updated successfully." });
|
|
87
|
+
}
|
|
88
|
+
catch (err) {
|
|
89
|
+
setMessage({ severity: "error", text: err instanceof Error ? err.message : "Failed to update password." });
|
|
90
|
+
}
|
|
91
|
+
finally {
|
|
92
|
+
setLoading(false);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "grid", children: [(0, jsx_runtime_1.jsx)("div", { className: "col-12", children: (0, jsx_runtime_1.jsx)("div", { className: "card", children: (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-column md:flex-row gap-3 justify-content-between md:align-items-center", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("h3", { className: "m-0", children: "Account Security" }), (0, jsx_runtime_1.jsxs)("p", { className: "text-600 mt-2 mb-0", children: ["Signed in as ", userEmail || "Unknown account"] })] }), (0, jsx_runtime_1.jsx)(tag_1.Tag, { severity: mfaEnabled ? "success" : "warning", value: mfaEnabled ? "MFA enabled" : "MFA disabled", icon: mfaEnabled ? "pi pi-check-circle" : "pi pi-exclamation-triangle" })] }) }) }), message ? ((0, jsx_runtime_1.jsx)("div", { className: "col-12", children: (0, jsx_runtime_1.jsx)(message_1.Message, { severity: message.severity, text: message.text, className: "w-full" }) })) : null, (0, jsx_runtime_1.jsx)("div", { className: "col-12 lg:col-7", children: (0, jsx_runtime_1.jsxs)("div", { className: "card", children: [(0, jsx_runtime_1.jsx)("h5", { children: "Multi-factor Authentication" }), (0, jsx_runtime_1.jsx)("p", { className: "text-600 line-height-3", children: "Use an authenticator app to add a second verification step to this admin account." }), !mfaEnabled ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(button_1.Button, { label: "Start MFA setup", icon: loading ? undefined : "pi pi-mobile", loading: loading, disabled: loading, onClick: startMfaSetup }), setupData ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(divider_1.Divider, {}), (0, jsx_runtime_1.jsxs)("div", { className: "grid", children: [(0, jsx_runtime_1.jsx)("div", { className: "col-12 md:col-5", children: (0, jsx_runtime_1.jsx)("div", { className: "surface-border border-1 border-round p-3 flex justify-content-center", children: (0, jsx_runtime_1.jsx)("img", { src: setupData.qrCode, alt: "MFA QR code", className: "w-full", style: { maxWidth: 220 } }) }) }), (0, jsx_runtime_1.jsxs)("div", { className: "col-12 md:col-7", children: [(0, jsx_runtime_1.jsxs)("div", { className: "field", children: [(0, jsx_runtime_1.jsx)("label", { children: "Manual setup key" }), (0, jsx_runtime_1.jsx)(inputtext_1.InputText, { value: setupData.secret, readOnly: true, className: "w-full" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "field", children: [(0, jsx_runtime_1.jsx)("label", { children: "Verification code" }), (0, jsx_runtime_1.jsx)(inputtext_1.InputText, { value: setupCode, onChange: (e) => setSetupCode(normalizeMfaCode(e.target.value)), maxLength: 6, inputMode: "numeric", className: "w-full" })] }), (0, jsx_runtime_1.jsx)(button_1.Button, { label: "Verify and enable", icon: loading ? undefined : "pi pi-check", loading: loading, disabled: loading || setupCode.length !== 6, onClick: verifyMfa })] })] })] })) : null] })) : ((0, jsx_runtime_1.jsxs)("div", { className: "formgrid grid", children: [(0, jsx_runtime_1.jsxs)("div", { className: "field col-12 md:col-8", children: [(0, jsx_runtime_1.jsx)("label", { children: "Current MFA code" }), (0, jsx_runtime_1.jsx)(inputtext_1.InputText, { value: disableCode, onChange: (e) => setDisableCode(normalizeMfaCode(e.target.value)), maxLength: 6, inputMode: "numeric", className: "w-full" })] }), (0, jsx_runtime_1.jsx)("div", { className: "field col-12 md:col-4 flex align-items-end", children: (0, jsx_runtime_1.jsx)(button_1.Button, { label: "Disable MFA", severity: "danger", outlined: true, icon: loading ? undefined : "pi pi-lock", loading: loading, disabled: loading || disableCode.length !== 6, onClick: disableMfa, className: "w-full" }) })] }))] }) }), (0, jsx_runtime_1.jsx)("div", { className: "col-12 lg:col-5", children: (0, jsx_runtime_1.jsxs)("div", { className: "card", children: [(0, jsx_runtime_1.jsx)("h5", { children: "Password" }), mustChangePassword ? (0, jsx_runtime_1.jsx)(message_1.Message, { severity: "warn", text: "This account must change its temporary password.", className: "w-full mb-3" }) : null, (0, jsx_runtime_1.jsxs)("div", { className: "field", children: [(0, jsx_runtime_1.jsx)("label", { children: "Current password" }), (0, jsx_runtime_1.jsx)(password_1.Password, { value: passwords.currentPassword, onChange: (e) => setPasswords({ ...passwords, currentPassword: e.target.value }), feedback: false, toggleMask: true, className: "w-full", inputClassName: "w-full" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "field", children: [(0, jsx_runtime_1.jsx)("label", { children: "New password" }), (0, jsx_runtime_1.jsx)(password_1.Password, { value: passwords.newPassword, onChange: (e) => setPasswords({ ...passwords, newPassword: e.target.value }), toggleMask: true, className: "w-full", inputClassName: "w-full" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "field", children: [(0, jsx_runtime_1.jsx)("label", { children: "Confirm new password" }), (0, jsx_runtime_1.jsx)(inputtext_1.InputText, { type: "password", value: passwords.confirmPassword, onChange: (e) => setPasswords({ ...passwords, confirmPassword: e.target.value }), className: "w-full" })] }), (0, jsx_runtime_1.jsx)(button_1.Button, { label: "Update password", icon: loading ? undefined : "pi pi-key", loading: loading, disabled: loading, onClick: changePassword })] }) })] }));
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=SecurityPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SecurityPage.js","sourceRoot":"","sources":["../../../src/admin/pages/SecurityPage.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export type AdminSettings = {
|
|
2
|
+
locale: string;
|
|
3
|
+
timeZone: string;
|
|
4
|
+
theme: string;
|
|
5
|
+
colorScheme?: "light" | "dark";
|
|
6
|
+
notifications?: {
|
|
7
|
+
email?: boolean;
|
|
8
|
+
sms?: boolean;
|
|
9
|
+
inApp?: boolean;
|
|
10
|
+
[key: string]: boolean | undefined;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
export type AdminThemeOption = {
|
|
14
|
+
name: string;
|
|
15
|
+
value: string;
|
|
16
|
+
colorScheme: "light" | "dark";
|
|
17
|
+
image: string;
|
|
18
|
+
};
|
|
19
|
+
export type AdminSettingsPageProps = {
|
|
20
|
+
settings: AdminSettings;
|
|
21
|
+
activeTheme?: string;
|
|
22
|
+
localeOptions?: Array<{
|
|
23
|
+
label: string;
|
|
24
|
+
value: string;
|
|
25
|
+
}>;
|
|
26
|
+
timeZoneOptions?: Array<{
|
|
27
|
+
label: string;
|
|
28
|
+
value: string;
|
|
29
|
+
}>;
|
|
30
|
+
themeGroups: Array<{
|
|
31
|
+
label: string;
|
|
32
|
+
themes: AdminThemeOption[];
|
|
33
|
+
}>;
|
|
34
|
+
onThemeChange: (theme: string, colorScheme: "light" | "dark") => void | Promise<void>;
|
|
35
|
+
onSaveSettings: (settings: AdminSettings) => Promise<void> | void;
|
|
36
|
+
onChangePassword: (currentPassword: string, newPassword: string) => Promise<void> | void;
|
|
37
|
+
};
|
|
38
|
+
export declare function AdminSettingsPage({ settings, activeTheme, localeOptions, timeZoneOptions, themeGroups, onThemeChange, onSaveSettings, onChangePassword, }: AdminSettingsPageProps): import("react").JSX.Element;
|
|
39
|
+
//# sourceMappingURL=SettingsPage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SettingsPage.d.ts","sourceRoot":"","sources":["../../../src/admin/pages/SettingsPage.tsx"],"names":[],"mappings":"AAUA,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC/B,aAAa,CAAC,EAAE;QACd,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,GAAG,CAAC,EAAE,OAAO,CAAC;QACd,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;KACpC,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,OAAO,GAAG,MAAM,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE,aAAa,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,eAAe,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1D,WAAW,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,gBAAgB,EAAE,CAAA;KAAE,CAAC,CAAC;IAClE,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtF,cAAc,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAClE,gBAAgB,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC1F,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,WAAW,EACX,aAAkB,EAClB,eAAoB,EACpB,WAAW,EACX,aAAa,EACb,cAAc,EACd,gBAAgB,GACjB,EAAE,sBAAsB,+BAsIxB"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.AdminSettingsPage = AdminSettingsPage;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
const react_1 = require("react");
|
|
7
|
+
const button_1 = require("primereact/button");
|
|
8
|
+
const dropdown_1 = require("primereact/dropdown");
|
|
9
|
+
const inputtext_1 = require("primereact/inputtext");
|
|
10
|
+
const message_1 = require("primereact/message");
|
|
11
|
+
const password_1 = require("primereact/password");
|
|
12
|
+
const togglebutton_1 = require("primereact/togglebutton");
|
|
13
|
+
function AdminSettingsPage({ settings, activeTheme, localeOptions = [], timeZoneOptions = [], themeGroups, onThemeChange, onSaveSettings, onChangePassword, }) {
|
|
14
|
+
const [localSettings, setLocalSettings] = (0, react_1.useState)(settings);
|
|
15
|
+
const [passwords, setPasswords] = (0, react_1.useState)({ currentPassword: "", newPassword: "", confirmPassword: "" });
|
|
16
|
+
const [saving, setSaving] = (0, react_1.useState)(false);
|
|
17
|
+
const [message, setMessage] = (0, react_1.useState)(null);
|
|
18
|
+
(0, react_1.useEffect)(() => {
|
|
19
|
+
setLocalSettings(settings);
|
|
20
|
+
}, [settings]);
|
|
21
|
+
const currentTheme = activeTheme ?? localSettings.theme;
|
|
22
|
+
const isActiveTheme = (0, react_1.useMemo)(() => (themeValue) => currentTheme === themeValue, [currentTheme]);
|
|
23
|
+
async function saveSettings() {
|
|
24
|
+
setSaving(true);
|
|
25
|
+
setMessage(null);
|
|
26
|
+
try {
|
|
27
|
+
await onSaveSettings(localSettings);
|
|
28
|
+
setMessage({ severity: "success", text: "Settings updated successfully." });
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
setMessage({ severity: "error", text: err instanceof Error ? err.message : "Failed to update settings." });
|
|
32
|
+
}
|
|
33
|
+
finally {
|
|
34
|
+
setSaving(false);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
async function changePassword() {
|
|
38
|
+
if (passwords.newPassword.length < 8)
|
|
39
|
+
return setMessage({ severity: "error", text: "New password must be at least 8 characters." });
|
|
40
|
+
if (passwords.newPassword !== passwords.confirmPassword)
|
|
41
|
+
return setMessage({ severity: "error", text: "Password confirmation does not match." });
|
|
42
|
+
setSaving(true);
|
|
43
|
+
setMessage(null);
|
|
44
|
+
try {
|
|
45
|
+
await onChangePassword(passwords.currentPassword, passwords.newPassword);
|
|
46
|
+
setPasswords({ currentPassword: "", newPassword: "", confirmPassword: "" });
|
|
47
|
+
setMessage({ severity: "success", text: "Password updated successfully." });
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
setMessage({ severity: "error", text: err instanceof Error ? err.message : "Failed to update password." });
|
|
51
|
+
}
|
|
52
|
+
finally {
|
|
53
|
+
setSaving(false);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "grid", children: [message ? ((0, jsx_runtime_1.jsx)("div", { className: "col-12", children: (0, jsx_runtime_1.jsx)(message_1.Message, { severity: message.severity, text: message.text, className: "w-full" }) })) : null, (0, jsx_runtime_1.jsxs)("div", { className: "col-12 lg:col-8", children: [(0, jsx_runtime_1.jsxs)("div", { className: "card", children: [(0, jsx_runtime_1.jsx)("h5", { children: "Workspace Preferences" }), (0, jsx_runtime_1.jsxs)("div", { className: "formgrid grid", children: [(0, jsx_runtime_1.jsxs)("div", { className: "field col-12 md:col-6", children: [(0, jsx_runtime_1.jsx)("label", { children: "Language" }), (0, jsx_runtime_1.jsx)(dropdown_1.Dropdown, { value: localSettings.locale, options: localeOptions, onChange: (e) => setLocalSettings({ ...localSettings, locale: e.value }), className: "w-full" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "field col-12 md:col-6", children: [(0, jsx_runtime_1.jsx)("label", { children: "Time zone" }), (0, jsx_runtime_1.jsx)(dropdown_1.Dropdown, { value: localSettings.timeZone, options: timeZoneOptions, onChange: (e) => setLocalSettings({ ...localSettings, timeZone: e.value }), className: "w-full" })] })] }), (0, jsx_runtime_1.jsx)("h5", { className: "mt-4", children: "Theme" }), (0, jsx_runtime_1.jsx)("p", { className: "text-600 mb-3", children: "Choose a theme for your workspace. This will be saved to your account." }), themeGroups.map((group) => ((0, jsx_runtime_1.jsxs)("div", { className: "mb-4", children: [(0, jsx_runtime_1.jsx)("h6", { className: "text-sm font-semibold mb-2 text-600", children: group.label }), (0, jsx_runtime_1.jsx)("div", { className: "grid", style: { margin: "-0.35rem" }, children: group.themes.map((theme) => ((0, jsx_runtime_1.jsx)("div", { className: "col-6 sm:col-4 md:col-3 xl:col-2 p-1", children: (0, jsx_runtime_1.jsxs)("button", { className: `p-link w-full border-round-lg overflow-hidden transition-all transition-duration-200 ${isActiveTheme(theme.value) ? "ring-2 ring-primary-500 ring-offset-2" : "hover:shadow-2"}`, onClick: () => {
|
|
57
|
+
setLocalSettings((prev) => ({ ...prev, theme: theme.value, colorScheme: theme.colorScheme }));
|
|
58
|
+
void onThemeChange(theme.value, theme.colorScheme);
|
|
59
|
+
}, style: { padding: 0, border: "none", background: "transparent", cursor: "pointer" }, title: theme.name, type: "button", children: [(0, jsx_runtime_1.jsx)("div", { style: { width: "100%", aspectRatio: "16/9", overflow: "hidden", borderRadius: "8px", background: "#f8fafc" }, children: (0, jsx_runtime_1.jsx)("img", { src: theme.image, alt: theme.name, className: "w-full h-full", style: { objectFit: "cover", borderRadius: "8px" } }) }), (0, jsx_runtime_1.jsx)("small", { className: "block mt-1 text-center text-700 text-xs", children: theme.name })] }) }, theme.value))) })] }, group.label))), (0, jsx_runtime_1.jsx)("div", { className: "border-top-1 surface-border pt-3 mt-3", children: (0, jsx_runtime_1.jsxs)("small", { className: "text-500", children: ["Current theme: ", (0, jsx_runtime_1.jsx)("strong", { children: currentTheme })] }) })] }), (0, jsx_runtime_1.jsxs)("div", { className: "card mt-4", children: [(0, jsx_runtime_1.jsx)("h5", { children: "Notifications" }), (0, jsx_runtime_1.jsx)("div", { className: "flex flex-column sm:flex-row gap-3 mb-4", children: ["email", "sms", "inApp"].map((key) => ((0, jsx_runtime_1.jsx)(togglebutton_1.ToggleButton, { checked: Boolean(localSettings.notifications?.[key]), onChange: (e) => setLocalSettings({ ...localSettings, notifications: { ...localSettings.notifications, [key]: e.value } }), onLabel: key, offLabel: key }, key))) }), (0, jsx_runtime_1.jsx)(button_1.Button, { label: "Save preferences", icon: saving ? undefined : "pi pi-save", loading: saving, disabled: saving, onClick: saveSettings })] })] }), (0, jsx_runtime_1.jsx)("div", { className: "col-12 lg:col-4", children: (0, jsx_runtime_1.jsxs)("div", { className: "card", children: [(0, jsx_runtime_1.jsx)("h5", { children: "Change Password" }), (0, jsx_runtime_1.jsxs)("div", { className: "field", children: [(0, jsx_runtime_1.jsx)("label", { children: "Current password" }), (0, jsx_runtime_1.jsx)(password_1.Password, { value: passwords.currentPassword, onChange: (e) => setPasswords({ ...passwords, currentPassword: e.target.value }), feedback: false, toggleMask: true, className: "w-full", inputClassName: "w-full" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "field", children: [(0, jsx_runtime_1.jsx)("label", { children: "New password" }), (0, jsx_runtime_1.jsx)(password_1.Password, { value: passwords.newPassword, onChange: (e) => setPasswords({ ...passwords, newPassword: e.target.value }), toggleMask: true, className: "w-full", inputClassName: "w-full" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "field", children: [(0, jsx_runtime_1.jsx)("label", { children: "Confirm new password" }), (0, jsx_runtime_1.jsx)(inputtext_1.InputText, { type: "password", value: passwords.confirmPassword, onChange: (e) => setPasswords({ ...passwords, confirmPassword: e.target.value }), className: "w-full" })] }), (0, jsx_runtime_1.jsx)(button_1.Button, { label: "Update password", icon: saving ? undefined : "pi pi-key", loading: saving, disabled: saving, onClick: changePassword })] }) })] }));
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=SettingsPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SettingsPage.js","sourceRoot":"","sources":["../../../src/admin/pages/SettingsPage.tsx"],"names":[],"mappings":"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"}
|