Skip to content

Commit 1764d7f

Browse files
feat: create public profile URLs for users and develop functionality to make the report template public
1 parent f5e216f commit 1764d7f

File tree

8 files changed

+349
-36
lines changed

8 files changed

+349
-36
lines changed

apps/OpenSign/src/json/ReportJson.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,14 @@ export default function reportJson(id) {
368368
redirectUrl: "",
369369
action: "bulksend"
370370
},
371+
{
372+
btnId: "1835",
373+
btnLabel: "Make public",
374+
hoverLabel: "Make public",
375+
btnIcon: "fa-solid fa-users-line",
376+
redirectUrl: "",
377+
action: "public"
378+
},
371379
{
372380
btnId: "1834",
373381
btnLabel: "Delete",

apps/OpenSign/src/pages/UserProfile.js

Lines changed: 87 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ function UserProfile() {
2727
const [percentage, setpercentage] = useState(0);
2828
const [isDisableDocId, setIsDisableDocId] = useState(false);
2929
const [isSubscribe, setIsSubscribe] = useState(false);
30+
const [publicUserName, setPublicUserName] = useState(
31+
(extendUser && extendUser?.[0]?.UserName) || ""
32+
);
3033
const [company, setCompany] = useState(
3134
extendUser && extendUser?.[0]?.Company
3235
);
@@ -37,6 +40,7 @@ function UserProfile() {
3740
const [otp, setOtp] = useState("");
3841
const [otpLoader, setOtpLoader] = useState(false);
3942
const [isEmailVerified, setIsEmailVerified] = useState(false);
43+
const [userNameError, setUserNameError] = useState("");
4044
useEffect(() => {
4145
getUserDetail();
4246
}, []);
@@ -74,46 +78,68 @@ function UserProfile() {
7478
}
7579
}
7680
};
81+
82+
const handleCheckPublicUserName = async () => {
83+
try {
84+
const res = await Parse.Cloud.run("getPublicUserName", {
85+
userName: publicUserName
86+
});
87+
if (res) {
88+
setIsLoader(false);
89+
setUserNameError("user name already exist");
90+
setTimeout(() => {
91+
setUserNameError("");
92+
}, 3000);
93+
return res;
94+
}
95+
} catch (e) {
96+
console.log("extend error");
97+
}
98+
};
7799
const handleSubmit = async (e) => {
78100
e.preventDefault();
79101
setIsLoader(true);
80102
let phn = Phone;
81103

82-
try {
83-
const tour = Parse.Object.extend("_User");
84-
const query = new Parse.Query(tour);
104+
const res = await handleCheckPublicUserName();
105+
if (!res) {
106+
try {
107+
const tour = Parse.Object.extend("_User");
108+
const query = new Parse.Query(tour);
85109

86-
await query.get(UserProfile.objectId).then((object) => {
87-
object.set("name", name);
88-
object.set("ProfilePic", Image);
89-
object.set("phone", phn);
110+
await query.get(UserProfile.objectId).then((object) => {
111+
object.set("name", name);
112+
object.set("ProfilePic", Image);
113+
object.set("phone", phn);
90114

91-
object.save().then(
92-
async (response) => {
93-
if (response) {
94-
let res = response.toJSON();
95-
let rr = JSON.stringify(res);
96-
localStorage.setItem("UserInformation", rr);
97-
SetName(res.name);
98-
SetPhone(res.phone);
99-
setImage(res.ProfilePic);
100-
localStorage.setItem("username", res.name);
101-
localStorage.setItem("profileImg", res.ProfilePic);
102-
await updateExtUser({ Name: res.name, Phone: res.phone });
103-
alert("Profile updated successfully.");
104-
setEditMode(false);
105-
navigate("/dashboard/35KBoSgoAK");
115+
object.save().then(
116+
async (response) => {
117+
if (response) {
118+
let res = response.toJSON();
119+
let rr = JSON.stringify(res);
120+
localStorage.setItem("UserInformation", rr);
121+
SetName(res.name);
122+
SetPhone(res.phone);
123+
setImage(res.ProfilePic);
124+
localStorage.setItem("username", res.name);
125+
localStorage.setItem("profileImg", res.ProfilePic);
126+
await updateExtUser({ Name: res.name, Phone: res.phone });
127+
alert("Profile updated successfully.");
128+
setEditMode(false);
129+
setIsLoader(false);
130+
// navigate("/dashboard/35KBoSgoAK");
131+
}
132+
},
133+
(error) => {
134+
alert("Something went wrong.");
135+
console.error("Error while updating tour", error);
136+
setIsLoader(false);
106137
}
107-
},
108-
(error) => {
109-
alert("Something went wrong.");
110-
console.error("Error while updating tour", error);
111-
setIsLoader(false);
112-
}
113-
);
114-
});
115-
} catch (error) {
116-
console.log("err", error);
138+
);
139+
});
140+
} catch (error) {
141+
console.log("err", error);
142+
}
117143
}
118144
};
119145

@@ -128,7 +154,8 @@ function UserProfile() {
128154
Name: obj.Name,
129155
HeaderDocId: isDisableDocId,
130156
JobTitle: jobTitle,
131-
Company: company
157+
Company: company,
158+
UserName: publicUserName
132159
};
133160
await axios.put(
134161
parseBaseUrl + "classes/" + extClass + "/" + ExtUserId,
@@ -147,9 +174,7 @@ function UserProfile() {
147174

148175
const json = JSON.parse(JSON.stringify([res]));
149176
const extRes = JSON.stringify(json);
150-
151177
localStorage.setItem("Extand_Class", extRes);
152-
// console.log("updateRes ", updateRes);
153178
};
154179
// file upload function
155180
const fileUpload = async (file) => {
@@ -241,6 +266,9 @@ function UserProfile() {
241266
setOtpLoader(false);
242267
alert("OTP sent on you email");
243268
};
269+
const handlePublicUrl = (e) => {
270+
setPublicUserName(e.target.value);
271+
};
244272
return (
245273
<React.Fragment>
246274
<Title title={"Profile"} />
@@ -262,7 +290,15 @@ function UserProfile() {
262290
></div>
263291
</div>
264292
) : (
265-
<div className="flex justify-center items-center w-full">
293+
<div className="flex justify-center items-center w-full relative">
294+
{/* <Alert type={alertMsg.type}>{alertMsg.message}</Alert> */}
295+
{userNameError && (
296+
<div
297+
className={`z-[1000] fixed top-20 transform border-[1px] text-sm border-[#f0a8a8] bg-[#f4bebe] text-[#c42121] rounded py-[.75rem] px-[1.25rem]`}
298+
>
299+
{userNameError}
300+
</div>
301+
)}
266302
<div className="bg-white flex flex-col justify-center shadow rounded w-[450px]">
267303
<div className="flex flex-col justify-center items-center my-4">
268304
<div className="w-[200px] h-[200px] overflow-hidden rounded-full">
@@ -390,6 +426,21 @@ function UserProfile() {
390426
)}
391427
</span>
392428
</li>
429+
<li className="flex justify-between items-center border-t-[1px] border-gray-300 py-2 break-all">
430+
<span className="font-semibold">Public profile:</span>
431+
<div className="flex items-center">
432+
<span>opensign.me/</span>
433+
434+
<input
435+
onChange={handlePublicUrl}
436+
value={publicUserName}
437+
disabled={!editmode}
438+
placeholder="enter user name"
439+
className="border-[1px] border-gray-200 rounded-[3px]"
440+
/>
441+
</div>
442+
</li>
443+
393444
<li className="border-y-[1px] border-gray-300 break-all">
394445
<div className="flex justify-between items-center py-2">
395446
<span

0 commit comments

Comments
 (0)