Skip to content

Commit

Permalink
Merge pull request #123 from OpenSignLabs/staging
Browse files Browse the repository at this point in the history
v1.0.1 - Bug fixes and UI improvements
  • Loading branch information
nxglabs authored Nov 3, 2023
2 parents 9a70778 + 6fc7a41 commit 3592d57
Show file tree
Hide file tree
Showing 6 changed files with 167 additions and 94 deletions.
12 changes: 4 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
The free open source alternative to DocuSign | PandaDoc | SignNow | Adobe Sign | Smartwaiver | SignRequest | HelloSign | Zoho sign.

[![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")

[![All Contributors](https://img.shields.io/github/all-contributors/opensignlabs/opensign?color=ee8449&style=flat-square)](#contributors)
![GitHub commit activity (branch)](https://img.shields.io/github/commit-activity/w/opensignlabs/opensign)
![GitHub last commit (by committer)](https://img.shields.io/github/last-commit/opensignlabs/opensign)


<a href="https://www.opensignlabs.com/">Website</a>
<span>&nbsp;&nbsp;&nbsp;&nbsp;</span>
Expand All @@ -23,12 +25,6 @@ The free open source alternative to DocuSign | PandaDoc | SignNow | Adobe Sign |

## An Open-Source Alternative to DocuSign, PandaDoc, SignNow, Adobe Sign, Smartwaiver, SignRequest, and HelloSign

Support us -

<a href="https://www.producthunt.com/posts/opensign-transforming-how-we-sign-docs?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-opensign&#0045;transforming&#0045;how&#0045;we&#0045;sign&#0045;docs" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=418556&theme=light" alt="OpenSign™&#0058;&#0032;Transforming&#0032;How&#0032;We&#0032;Sign&#0032;Docs - Enterprise&#0045;Level&#0032;Document&#0032;Signing&#0032;Goes&#0032;Open&#0045;Source | Product Hunt" style="width: 250px; height: 54px;" width="250" height="54" /></a>

[![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/opensignlabs.svg?style=social&label=Follow%20%40opensignlabs)](https://twitter.com/opensignlabs)

---
</div>

Expand Down Expand Up @@ -88,7 +84,7 @@ We welcome contributions from the open-source community. For more information on

### License

OpenSign is licensed under the AGPL License. For more details, see the [LICENSE](LICENSE.md) file.
OpenSign is licensed under the AGPL License. For more details, see the [LICENSE](LICENSE) file.

---

Expand Down
30 changes: 29 additions & 1 deletion apps/OpenSign/src/components/dashboard/DashboardCard.js
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,35 @@ const DashboardCard = (props) => {
if (props.Data.key !== "count") {
setresponse(res.data.results[0][props.Data.key]);
} else {
setresponse(res.data[props.Data.key]);
if (props.Label === "Need your Signature") {
const listData = res.data?.results.filter(
(x) => x.Signers.length > 0
);
let arr = [];
for (const obj of listData) {
const isSigner = obj.Signers.some(
(item) => item.UserId.objectId === currentUser.id
);
if (isSigner) {
let isRecord;
if (obj?.AuditTrail && obj?.AuditTrail.length > 0) {
isRecord = obj?.AuditTrail.some(
(item) =>
item?.UserPtr?.UserId?.objectId === currentUser.id &&
item.Activity === "Signed"
);
} else {
isRecord = false;
}
if (isRecord === false) {
arr.push(obj);
}
}
}
setresponse(arr.length);
} else {
setresponse(res.data[props.Data.key]);
}
}
} else {
setresponse(0);
Expand Down
33 changes: 31 additions & 2 deletions apps/OpenSign/src/components/dashboard/DashboardReport.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,39 @@ function DashboardReport(props) {
"X-Parse-Session-Token": localStorage.getItem("accesstoken")
};
try {
const url = `${serverURL}?where=${strParams}&keys=${strKeys}&order=${orderBy}`;
const url = `${serverURL}?where=${strParams}&keys=${strKeys}&order=${orderBy}&include=AuditTrail.UserPtr`;
const res = await axios.get(url, { headers: headers });
// console.log("res ", res.data?.results);
setList(res.data?.results);
if (id === "5Go51Q7T8r") {
const currentUser = Parse.User.current().id;
const listData = res.data?.results.filter(
(x) => x.Signers.length > 0
);
let arr = [];
for (const obj of listData) {
const isSigner = obj.Signers.some(
(item) => item.UserId.objectId === currentUser
);
if (isSigner) {
let isRecord;
if (obj?.AuditTrail && obj?.AuditTrail.length > 0) {
isRecord = obj?.AuditTrail.some(
(item) =>
item?.UserPtr?.UserId?.objectId === currentUser &&
item.Activity === "Signed"
);
} else {
isRecord = false;
}
if (isRecord === false) {
arr.push(obj);
}
}
}
setList(arr);
} else {
setList(res.data?.results);
}
setIsLoader(false);
} catch (err) {
console.log("err ", err);
Expand Down
84 changes: 52 additions & 32 deletions apps/OpenSign/src/components/fields/FileUpload.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import React, { useState, useEffect } from "react";
import { SaveFileSize } from "../../constant/saveFileSize";
import Parse from "parse";
import sanitizeFileName from "../../primitives/sanitizeFileName";
// import Parse from "parse";
// import sanitizeFileName from "../../primitives/sanitizeFileName";
import axios from "axios";

const FileUpload = (props) => {
const [parseBaseUrl] = useState(localStorage.getItem("baseUrl"));
Expand All @@ -11,7 +12,7 @@ const FileUpload = (props) => {

const [localValue, setLocalValue] = useState("");
const [Message] = useState(false);
const [percentage] = useState(0);
const [percentage, setpercentage] = useState(0);

const REQUIRED_FIELD_SYMBOL = "*";

Expand Down Expand Up @@ -68,33 +69,50 @@ const FileUpload = (props) => {
};

const handleFileUpload = async (file) => {
Parse.serverURL = parseBaseUrl;
Parse.initialize(parseAppId);
const size = file.size;
const fileName = file.name;
const name = sanitizeFileName(fileName);
setfileload(true);
const pdfFile = file;
const parseFile = new Parse.File(name, pdfFile);
const file_url = parseBaseUrl.slice(0, -4);
const url = `${file_url}file_upload`;
const formData = new FormData();
formData.append("file", file);
const config = {
headers: {
"content-type": "multipart/form-data",
"X-Parse-Application-Id": parseAppId
},
onUploadProgress: function (progressEvent) {
var percentCompleted = Math.round(
(progressEvent.loaded * 100) / progressEvent.total
);
setpercentage(percentCompleted);
}
};

try {
const response = await parseFile.save();

setFileUpload(response.url());
props.onChange(response.url());
setfileload(false);
// The response object will contain information about the uploaded file
// console.log("File uploaded:", response);

// You can access the URL of the uploaded file using response.url()
// console.log("File URL:", response.url());
if (response.url()) {
SaveFileSize(size, response.url());
await axios
.post(url, formData, config)
.then((res) => {
if (res.data.status === "Error") {
alert(res.data.message);
}
setFileUpload(res.data.imageUrl);
props.onChange(res.data.imageUrl);
setfileload(false);
setpercentage(0);

return response.url();
}
if (res.data.imageUrl) {
SaveFileSize(file.size, res.data.imageUrl);
return res.data.imageUrl;
}
})
.catch((err) => {
alert(`${err.message}`);
setfileload(false);
setpercentage(0);
});
} catch (error) {
console.error("Error uploading file:", error);
alert(error.message);
setfileload(false);
setpercentage(0);
}
};

Expand All @@ -106,7 +124,7 @@ const FileUpload = (props) => {
<a
href={props.formData}
title={props.formData}
style={{ paddingBottom: "10px", color: "blue" }}
style={{ paddingBottom: "10px", color: "blue"}}
>
Download
</a>
Expand All @@ -133,12 +151,14 @@ const FileUpload = (props) => {
<span className="required">{REQUIRED_FIELD_SYMBOL}</span>
)}
{fileload ? (
<div className="progress pull-right">
<div
className="progress__bar"
style={{ width: `${percentage}%` }}
></div>
<span className="progress__value">{percentage}%</span>
<div className="flex items-center gap-x-2">
<div className="h-2 rounded-full w-[200px] md:w-[400px] bg-gray-200">
<div
className="h-2 rounded-full bg-blue-500"
style={{ width: `${percentage}%` }}
></div>
</div>
<span className="text-black text-sm">{percentage}%</span>
</div>
) : (
Message && (
Expand Down
68 changes: 20 additions & 48 deletions apps/OpenSign/src/json/ReportJson.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import Parse from "parse";
export default function reportJson(id) {
const currentUserId = Parse.User.current().id;
// console.log("userId", currentUserId)
// console.log("json ", json);

switch (id) {
// draft documents report
Expand Down Expand Up @@ -53,36 +53,17 @@ export default function reportJson(id) {
ExpiryDate: {
$gt: { __type: "Date", iso: new Date().toISOString() }
},
$and: [
{
"AuditTrail.UserPtr": {
$ne: {
__type: "Pointer",
className: "contracts_Users",
objectId: "CkpaR0F6mj"
}
}
},
{ "AuditTrail.Activity": { $ne: "Signed" } }
],
Placeholders: { $ne: null },
Signers: {
$in: [
{
__type: "Pointer",
className: "contracts_Users",
objectId: "CkpaR0F6mj"
}
]
}
Placeholders: { $ne: null }
},
keys: [
"Name",
"Note",
"Folder.Name",
"URL",
"ExtUserPtr.Name",
"Signers.Name"
"Signers.Name",
"Signers.UserId",
"AuditTrail"
],
orderBy: "-updatedAt",
actions: [
Expand Down Expand Up @@ -144,7 +125,12 @@ export default function reportJson(id) {
params: {
Type: null,
IsCompleted: true,
$or: [{ IsDeclined: null }, { IsDeclined: false }]
CreatedBy: {
__type: "Pointer",
className: "_User",
objectId: currentUserId
},
IsDeclined: { $ne: true }
},
keys: [
"Name",
Expand Down Expand Up @@ -210,6 +196,11 @@ export default function reportJson(id) {
reportName: "Declined Documents",
className: "contracts_Document",
params: { Type: null, IsDeclined: true },
CreatedBy: {
__type: "Pointer",
className: "_User",
objectId: currentUserId
},
keys: [
"Name",
"Note",
Expand Down Expand Up @@ -330,36 +321,17 @@ export default function reportJson(id) {
ExpiryDate: {
$gt: { __type: "Date", iso: new Date().toISOString() }
},
$and: [
{
"AuditTrail.UserPtr": {
$ne: {
__type: "Pointer",
className: "contracts_Users",
objectId: "CkpaR0F6mj"
}
}
},
{ "AuditTrail.Activity": { $ne: "Signed" } }
],
Placeholders: { $ne: null },
Signers: {
$in: [
{
__type: "Pointer",
className: "contracts_Users",
objectId: "CkpaR0F6mj"
}
]
}
Placeholders: { $ne: null }
},
keys: [
"Name",
"Note",
"Folder.Name",
"URL",
"ExtUserPtr.Name",
"Signers.Name"
"Signers.Name",
"Signers.UserId",
"AuditTrail"
],
orderBy: "-updatedAt",
actions: [
Expand Down
Loading

0 comments on commit 3592d57

Please sign in to comment.