Skip to content

Commit 95558d1

Browse files
Merge pull request #11 from OpenSignLabs/staging
update
2 parents fc2eab7 + 3164ee5 commit 95558d1

File tree

12 files changed

+309
-156
lines changed

12 files changed

+309
-156
lines changed

.all-contributorsrc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,15 @@
169169
"contributions": [
170170
"bug"
171171
]
172+
},
173+
{
174+
"login": "lsprr",
175+
"name": "Luis Parra",
176+
"avatar_url": "https://avatars.githubusercontent.com/u/16653744?v=4",
177+
"profile": "https://luisparra.dev",
178+
"contributions": [
179+
"a11y"
180+
]
172181
}
173182
]
174183
}

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
33
<div align="center">
44

5-
The free open source alternative to DocuSign | PandaDoc | SignNow | Adobe Sign | Smartwaiver | SignRequest | HelloSign | Zoho sign.
5+
The free and open source alternative to DocuSign
66

77
[![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/opensignlabs/opensign.svg)](http://isitmaintained.com/project/opensignlabs/opensign "Average time to resolve an issue")
88
[![All Contributors](https://img.shields.io/github/all-contributors/opensignlabs/opensign?color=ee8449&style=flat-square)](#contributors)
@@ -23,7 +23,7 @@ The free open source alternative to DocuSign | PandaDoc | SignNow | Adobe Sign |
2323
<a href="https://www.linkedin.com/company/opensign%E2%84%A2/about/">LinkedIn</a>
2424

2525

26-
## An Open-Source Alternative to DocuSign, PandaDoc, SignNow, Adobe Sign, Smartwaiver, SignRequest, and HelloSign
26+
## An open-source document e-signing solution
2727

2828
---
2929
</div>
@@ -124,6 +124,7 @@ We would like to thank all our contributors and users for their support and feed
124124
<td align="center" valign="top" width="14.28%"><a href="https://github.com/andrew-opensignlabs"><img src="https://avatars.githubusercontent.com/u/148278535?v=4?s=100" width="100px;" alt="Andrew"/><br /><sub><b>Andrew</b></sub></a><br /><a href="#code-andrew-opensignlabs" title="Code">💻</a></td>
125125
<td align="center" valign="top" width="14.28%"><a href="https://github.com/rishabjasrotia"><img src="https://avatars.githubusercontent.com/u/33950743?v=4?s=100" width="100px;" alt="Rishab"/><br /><sub><b>Rishab</b></sub></a><br /><a href="#code-rishabjasrotia" title="Code">💻</a></td>
126126
<td align="center" valign="top" width="14.28%"><a href="https://session.it"><img src="https://avatars.githubusercontent.com/u/327285?v=4?s=100" width="100px;" alt="Maurizio Pillitu"/><br /><sub><b>Maurizio Pillitu</b></sub></a><br /><a href="#bug-maoo" title="Bug reports">🐛</a></td>
127+
<td align="center" valign="top" width="14.28%"><a href="https://luisparra.dev"><img src="https://avatars.githubusercontent.com/u/16653744?v=4?s=100" width="100px;" alt="Luis Parra"/><br /><sub><b>Luis Parra</b></sub></a><br /><a href="#a11y-lsprr" title="Accessibility">️️️️♿️</a></td>
127128
</tr>
128129
</tbody>
129130
</table>

apps/OpenSign/src/components/fields/FileUpload.js

Lines changed: 31 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import React, { useState, useEffect } from "react";
22
import { SaveFileSize } from "../../constant/saveFileSize";
3-
// import Parse from "parse";
4-
// import sanitizeFileName from "../../primitives/sanitizeFileName";
5-
import axios from "axios";
3+
import Parse from "parse";
4+
import sanitizeFileName from "../../primitives/sanitizeFileName";
65

76
const FileUpload = (props) => {
87
const [parseBaseUrl] = useState(localStorage.getItem("baseUrl"));
@@ -69,53 +68,44 @@ const FileUpload = (props) => {
6968
};
7069

7170
const handleFileUpload = async (file) => {
71+
Parse.serverURL = parseBaseUrl;
72+
Parse.initialize(parseAppId);
7273
setfileload(true);
73-
const file_url = parseBaseUrl.slice(0, -4);
74-
const url = `${file_url}file_upload`;
75-
const formData = new FormData();
76-
formData.append("file", file);
77-
const config = {
78-
headers: {
79-
"content-type": "multipart/form-data",
80-
"X-Parse-Application-Id": parseAppId
81-
},
82-
onUploadProgress: function (progressEvent) {
83-
var percentCompleted = Math.round(
84-
(progressEvent.loaded * 100) / progressEvent.total
85-
);
86-
setpercentage(percentCompleted);
87-
}
88-
};
74+
const size = file.size;
75+
const fileName = file.name;
76+
const name = sanitizeFileName(fileName);
77+
const pdfFile = file;
78+
const parseFile = new Parse.File(name, pdfFile);
8979

9080
try {
91-
await axios
92-
.post(url, formData, config)
93-
.then((res) => {
94-
if (res.data.status === "Error") {
95-
alert(res.data.message);
81+
const response = await parseFile.save({
82+
progress: (progressValue, loaded, total, { type }) => {
83+
if (type === "upload" && progressValue !== null) {
84+
const percentCompleted = Math.round((loaded * 100) / total);
85+
// console.log("percentCompleted ", percentCompleted);
86+
setpercentage(percentCompleted);
9687
}
97-
setFileUpload(res.data.imageUrl);
98-
props.onChange(res.data.imageUrl);
99-
setfileload(false);
100-
setpercentage(0);
88+
}
89+
});
10190

102-
if (res.data.imageUrl) {
103-
SaveFileSize(file.size, res.data.imageUrl);
104-
return res.data.imageUrl;
105-
}
106-
})
107-
.catch((err) => {
108-
alert(`${err.message}`);
109-
setfileload(false);
110-
setpercentage(0);
111-
});
91+
setFileUpload(response.url());
92+
props.onChange(response.url());
93+
setfileload(false);
94+
// The response object will contain information about the uploaded file
95+
// console.log("File uploaded:", response);
96+
97+
// You can access the URL of the uploaded file using response.url()
98+
// console.log("File URL:", response.url());
99+
if (response.url()) {
100+
SaveFileSize(size, response.url());
101+
return response.url();
102+
}
112103
} catch (error) {
113-
alert(error.message);
114104
setfileload(false);
115105
setpercentage(0);
106+
console.error("Error uploading file:", error);
116107
}
117108
};
118-
119109
let fileView =
120110
props.formData &&
121111
props.schema.uploadtype === "s3viajw" ? null : props.formData &&
@@ -124,7 +114,7 @@ const FileUpload = (props) => {
124114
<a
125115
href={props.formData}
126116
title={props.formData}
127-
style={{ paddingBottom: "10px", color: "blue"}}
117+
style={{ paddingBottom: "10px", color: "blue" }}
128118
>
129119
Download
130120
</a>
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import React from "react";
2+
import { NavLink } from "react-router-dom";
3+
4+
const Menu = ({ item, isOpen, closeSidebar }) => {
5+
return (
6+
<li key={item.title} role="none">
7+
<NavLink
8+
to={`/${item.pageType}/${item.objectId}`}
9+
className="mx-auto flex items-center hover:bg-[#eef1f5] p-3 lg:p-4"
10+
onClick={closeSidebar}
11+
tabIndex={isOpen ? 0 : -1}
12+
role="menuitem"
13+
>
14+
<i className={`${item.icon} text-[18px]`} aria-hidden="true"></i>
15+
<span className="ml-3 lg:ml-4">{item.title}</span>
16+
</NavLink>
17+
</li>
18+
)
19+
}
20+
21+
export default Menu;

apps/OpenSign/src/components/sidebar/Sidebar.js

Lines changed: 34 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1,115 +1,77 @@
11
import React, { useState, useEffect } from "react";
2-
import { Link, NavLink } from "react-router-dom";
2+
3+
import Menu from './Menu';
34
import Submenu from "./SubMenu";
4-
import dp from "../../assets/images/dp.png";
5+
import SocialMedia from './SocialMedia';
6+
57
import Parse from "parse";
8+
import dp from "../../assets/images/dp.png";
9+
610
const Sidebar = ({ isOpen, closeSidebar }) => {
11+
const [menuList, setmenuList] = useState([]);
712
let username = localStorage.getItem("username");
813
const image = localStorage.getItem("profileImg") || dp;
914
const tenantname = localStorage.getItem("TenantName");
10-
const [menuList, setmenuList] = useState([]);
1115

1216
useEffect(() => {
1317
if (localStorage.getItem("accesstoken")) {
1418
menuItem();
1519
}
1620
}, []);
21+
1722
const menuItem = async () => {
1823
const parseBaseUrl = localStorage.getItem("baseUrl");
1924
const parseAppId = localStorage.getItem("parseAppId");
25+
2026
try {
2127
Parse.serverURL = parseBaseUrl;
2228
Parse.initialize(parseAppId);
2329
var sideMenu = Parse.Object.extend("w_menu");
2430
var query = new Parse.Query(sideMenu);
2531
query.equalTo("objectId", localStorage.getItem("defaultmenuid"));
26-
32+
2733
const results = await query.first();
2834
const resultjson = results.toJSON();
29-
// console.log("resultjson ", resultjson);
3035
let result = resultjson;
3136
setmenuList(result.menuItems);
3237
} catch (e) {
3338
console.error("Problem", e);
3439
}
40+
3541
};
3642

3743
return (
38-
<div
39-
className={`${
40-
isOpen ? "block" : "hidden"
41-
} bg-white text-[#444] h-screen w-full md:w-[300px] overflow-y-auto transform transition-transform z-40 ${
42-
isOpen ? "translate-x-0" : "-translate-x-full"
43-
}`}
44+
<aside
45+
className={`${isOpen ? "block" : "hidden"
46+
} bg-white text-[#444] h-screen w-full md:w-[300px] overflow-y-auto transform transition-transform z-40 ${isOpen ? "translate-x-0" : "-translate-x-full"
47+
}`}
4448
>
4549
<div className="flex px-2 py-3 gap-2 items-center shadow-md">
4650
<div className="w-[75px] h-[75px] rounded-full ring-[2px] ring-offset-2 ring-gray-400 overflow-hidden">
47-
<img className="w-full h-full object-contain" src={image} alt="img" />
51+
<img className="w-full h-full object-cover" src={image} alt="Profile" />
4852
</div>
4953
<div>
50-
<p className="text-[14px] font-bold">{username && username}</p>
51-
<p
52-
className={`text-[12px] ${tenantname && tenantname ? "mt-2" : ""}`}
53-
>
54-
{tenantname && tenantname}
54+
<p className="text-[14px] font-bold">{username}</p>
55+
<p className={`text-[12px] ${tenantname ? "mt-2" : ""}`}>
56+
{tenantname}
5557
</p>
5658
</div>
5759
</div>
58-
<ul className="text-sm">
59-
{menuList.length > 0 && (
60-
<>
61-
{menuList.map((item) =>
62-
!item.children ? (
63-
<li key={item.title} onClick={() => closeSidebar()}>
64-
<Link
65-
className={`mx-auto flex items-center hover:bg-[#eef1f5] p-3 lg:p-4 hover:no-underline cursor-pointer`}
66-
to={`/${item.pageType}/${item.objectId}`}
67-
>
68-
<i className={item.icon + " text-[18px]"}></i>
69-
<span title={item.description} className="ml-3 lg:ml-4">
70-
{item.title}
71-
</span>
72-
</Link>
73-
</li>
74-
) : (
75-
<Submenu key={item.title} icon={item.icon} title={item.title}>
76-
{item.children.map((item) => (
77-
<li key={item.title} onClick={() => closeSidebar()} className="pl-6 md:pl-8 hover:bg-[#eef1f5] cursor-pointer">
78-
<Link
79-
className={`mx-auto flex items-center p-2 lg:p-3 hover:no-underline`}
80-
to={`/${item.pageType}/${item.objectId}`}
81-
>
82-
<i className={item.icon + " text-[18px]"}></i>
83-
<span title={item.description} className="ml-3 lg:ml-4">
84-
{item.title}
85-
</span>
86-
</Link>
87-
</li>
88-
))}
89-
</Submenu>
90-
)
91-
)}
92-
</>
93-
)}
94-
</ul>
95-
<div className="mt-4 flex justify-center items-center text-[25px] text-black gap-3">
96-
<NavLink to="https://github.com/opensignlabs/opensign" target="_blank">
97-
<i className="fa-brands fa-github"></i>
98-
</NavLink>
99-
<NavLink
100-
to="https://www.linkedin.com/company/opensign%E2%84%A2/"
101-
target="_blank"
102-
>
103-
<i className="fa-brands fa-linkedin"></i>
104-
</NavLink>
105-
<NavLink to="https://www.twitter.com/opensignlabs" target="_blank">
106-
<i className="fa-brands fa-square-x-twitter"></i>
107-
</NavLink>
108-
<NavLink to="https://discord.com/invite/xe9TDuyAyj" target="_blank">
109-
<i className="fa-brands fa-discord"></i>
110-
</NavLink>
111-
</div>
112-
</div>
60+
<nav aria-label="OpenSign Sidebar Navigation">
61+
<ul className="text-sm" role="menubar" aria-label="OpenSign Sidebar Navigation">
62+
{menuList.map((item) => (
63+
!item.children ? (
64+
<Menu key={item.title} item={item} isOpen={isOpen} closeSidebar={closeSidebar} />
65+
) : (
66+
<Submenu key={item.title} item={item} closeSidebar={closeSidebar} />
67+
)
68+
))}
69+
</ul>
70+
</nav>
71+
<footer className="mt-4 flex justify-center items-center text-[25px] text-black gap-3">
72+
<SocialMedia />
73+
</footer>
74+
</aside>
11375
);
11476
};
11577

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import React from "react";
2+
import { NavLink } from "react-router-dom";
3+
4+
const SocialMedia = () => {
5+
return (
6+
<React.Fragment>
7+
<NavLink to="https://github.com/opensignlabs/opensign" target="_blank" rel="noopener noreferrer">
8+
<i aria-hidden="true" className="fa-brands fa-github"></i>
9+
<span className="fa-sr-only">OpenSign&apos;s Github</span>
10+
</NavLink>
11+
<NavLink to="https://www.linkedin.com/company/opensign%E2%84%A2/" target="_blank" rel="noopener noreferrer">
12+
<i aria-hidden="true" className="fa-brands fa-linkedin"></i>
13+
<span className="fa-sr-only">OpenSign&apos;s LinkedIn</span>
14+
</NavLink>
15+
<NavLink to="https://www.twitter.com/opensignlabs" target="_blank" rel="noopener noreferrer">
16+
<i aria-hidden="true" className="fa-brands fa-square-x-twitter"></i>
17+
<span className="fa-sr-only">OpenSign&apos;s Twitter</span>
18+
</NavLink>
19+
<NavLink to="https://discord.com/invite/xe9TDuyAyj" target="_blank" rel="noopener noreferrer">
20+
<i aria-hidden="true" className="fa-brands fa-discord"></i>
21+
<span className="fa-sr-only">OpenSign&apos;s Discord</span>
22+
</NavLink>
23+
</React.Fragment>
24+
)
25+
}
26+
27+
export default SocialMedia;

0 commit comments

Comments
 (0)