mirror of
https://github.com/OpenSignLabs/OpenSign.git
synced 2026-09-05 01:07:39 +02:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
494103163c | ||
|
|
72e9e4848b | ||
|
|
1181ba6f90 | ||
|
|
b8d6ec5fe0 | ||
|
|
7335d7df0a | ||
|
|
44754095fb | ||
|
|
0f515bae01 | ||
|
|
76a11f6ee6 | ||
|
|
5fb28feb65 | ||
|
|
e5f1524b10 | ||
|
|
8a875691fb | ||
|
|
0b2710b97d | ||
|
|
57552a32b0 | ||
|
|
572ec3658e | ||
|
|
6d5c791f61 | ||
|
|
168e479c0c | ||
|
|
927e1b7ef9 | ||
|
|
76dccf804e | ||
|
|
4262e0e6eb | ||
|
|
7d487420aa | ||
|
|
c422b11e3a |
+1
-1
@@ -20,7 +20,7 @@ appName=open_sign_server
|
|||||||
# A 12 character long random secret key that allows access to all the data. It is used in Parse dashboard config to view all the data in the database.
|
# A 12 character long random secret key that allows access to all the data. It is used in Parse dashboard config to view all the data in the database.
|
||||||
MASTER_KEY=XnAadwKxxByMr
|
MASTER_KEY=XnAadwKxxByMr
|
||||||
# Mongodb URI to connect to
|
# Mongodb URI to connect to
|
||||||
MONGODB_URI=mongodb://mongo:27017/OpenSignDB
|
MONGODB_URI=mongodb://host.docker.internal:27018/OpenSignDB
|
||||||
# Path on which APIs should be mounted. Do not change this. This variable shall be removed & value hardcoded in the source code in coming versions.
|
# Path on which APIs should be mounted. Do not change this. This variable shall be removed & value hardcoded in the source code in coming versions.
|
||||||
PARSE_MOUNT=/app
|
PARSE_MOUNT=/app
|
||||||
# Set it to the URL from where APIs will be accessible to the NodeJS functions, for local development it should be localhost:3000/api/app (use your local port number instead)
|
# Set it to the URL from where APIs will be accessible to the NodeJS functions, for local development it should be localhost:3000/api/app (use your local port number instead)
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
Binary file not shown.
@@ -17,7 +17,7 @@ const AddTeam = (props) => {
|
|||||||
const getTeamList = async () => {
|
const getTeamList = async () => {
|
||||||
setIsLoader(true);
|
setIsLoader(true);
|
||||||
try {
|
try {
|
||||||
const teams = await Parse.Cloud.run("getteams");
|
const teams = await Parse.Cloud.run("getteams", { active: true });
|
||||||
const teamRes = JSON.parse(JSON.stringify(teams));
|
const teamRes = JSON.parse(JSON.stringify(teams));
|
||||||
if (teamRes.length > 0) {
|
if (teamRes.length > 0) {
|
||||||
const _teamRes = JSON.parse(JSON.stringify(teamRes));
|
const _teamRes = JSON.parse(JSON.stringify(teamRes));
|
||||||
|
|||||||
@@ -35,15 +35,7 @@ const AddUser = (props) => {
|
|||||||
|
|
||||||
const getTeamList = async () => {
|
const getTeamList = async () => {
|
||||||
setFormdata((prev) => ({ ...prev, password: generatePassword(12) }));
|
setFormdata((prev) => ({ ...prev, password: generatePassword(12) }));
|
||||||
const extUser = JSON.parse(localStorage.getItem("Extand_Class"))?.[0];
|
const teamRes = await Parse.Cloud.run("getteams", { active: true });
|
||||||
const team = new Parse.Query("contracts_Teams");
|
|
||||||
team.equalTo("OrganizationId", {
|
|
||||||
__type: "Pointer",
|
|
||||||
className: "contracts_Organizations",
|
|
||||||
objectId: extUser.OrganizationId.objectId
|
|
||||||
});
|
|
||||||
team.notEqualTo("IsActive", false);
|
|
||||||
const teamRes = await team.find();
|
|
||||||
if (teamRes.length > 0) {
|
if (teamRes.length > 0) {
|
||||||
const _teamRes = JSON.parse(JSON.stringify(teamRes));
|
const _teamRes = JSON.parse(JSON.stringify(teamRes));
|
||||||
setTeamList(_teamRes);
|
setTeamList(_teamRes);
|
||||||
|
|||||||
@@ -4,7 +4,12 @@ import FullScreenButton from "./FullScreenButton";
|
|||||||
import { useNavigate } from "react-router-dom";
|
import { useNavigate } from "react-router-dom";
|
||||||
import Parse from "parse";
|
import Parse from "parse";
|
||||||
import { useWindowSize } from "../hook/useWindowSize";
|
import { useWindowSize } from "../hook/useWindowSize";
|
||||||
import { checkIsSubscribed, getAppLogo, openInNewTab } from "../constant/Utils";
|
import {
|
||||||
|
checkIsSubscribed,
|
||||||
|
checkIsSubscribedTeam,
|
||||||
|
getAppLogo,
|
||||||
|
openInNewTab
|
||||||
|
} from "../constant/Utils";
|
||||||
import { isEnableSubscription, isStaging } from "../constant/const";
|
import { isEnableSubscription, isStaging } from "../constant/const";
|
||||||
|
|
||||||
const Header = ({ showSidebar }) => {
|
const Header = ({ showSidebar }) => {
|
||||||
@@ -15,6 +20,7 @@ const Header = ({ showSidebar }) => {
|
|||||||
const [isOpen, setIsOpen] = useState(false);
|
const [isOpen, setIsOpen] = useState(false);
|
||||||
const [isSubscribe, setIsSubscribe] = useState(true);
|
const [isSubscribe, setIsSubscribe] = useState(true);
|
||||||
const [isPro, setIsPro] = useState(false);
|
const [isPro, setIsPro] = useState(false);
|
||||||
|
const [isTeam, setIsTeam] = useState(false);
|
||||||
const [applogo, setAppLogo] = useState(
|
const [applogo, setAppLogo] = useState(
|
||||||
localStorage.getItem("appLogo") || " "
|
localStorage.getItem("appLogo") || " "
|
||||||
);
|
);
|
||||||
@@ -29,6 +35,7 @@ const Header = ({ showSidebar }) => {
|
|||||||
async function checkSubscription() {
|
async function checkSubscription() {
|
||||||
if (isEnableSubscription) {
|
if (isEnableSubscription) {
|
||||||
const getIsSubscribe = await checkIsSubscribed();
|
const getIsSubscribe = await checkIsSubscribed();
|
||||||
|
const getIsTeam = await checkIsSubscribedTeam();
|
||||||
if (getIsSubscribe) {
|
if (getIsSubscribe) {
|
||||||
const applogo = await getAppLogo();
|
const applogo = await getAppLogo();
|
||||||
if (applogo?.logo) {
|
if (applogo?.logo) {
|
||||||
@@ -38,6 +45,7 @@ const Header = ({ showSidebar }) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
setIsPro(getIsSubscribe);
|
setIsPro(getIsSubscribe);
|
||||||
|
setIsTeam(getIsTeam);
|
||||||
setIsSubscribe(getIsSubscribe);
|
setIsSubscribe(getIsSubscribe);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -122,11 +130,16 @@ const Header = ({ showSidebar }) => {
|
|||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
{isPro && (
|
{!isTeam && isPro && (
|
||||||
<div className="w-[35px] h-[35px] bg-white rounded-full ring-[1px] ring-offset-2 ring-[#002862] text-[#002862] overflow-hidden font-semibold flex items-center justify-center">
|
<div className="w-[35px] h-[35px] bg-white rounded-full ring-[1px] ring-offset-2 ring-[#002862] text-[#002862] overflow-hidden font-semibold flex items-center justify-center">
|
||||||
PRO
|
PRO
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
{isTeam && (
|
||||||
|
<div className="w-[35px] h-[35px] bg-white rounded-full ring-[1px] text-[13px] ring-offset-2 ring-[#002862] text-[#002862] overflow-hidden font-semibold flex items-center justify-center">
|
||||||
|
TEAM
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
<div>
|
<div>
|
||||||
<FullScreenButton />
|
<FullScreenButton />
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import PlaceholderBorder from "./PlaceholderBorder";
|
|||||||
import { Rnd } from "react-rnd";
|
import { Rnd } from "react-rnd";
|
||||||
import {
|
import {
|
||||||
defaultWidthHeight,
|
defaultWidthHeight,
|
||||||
|
getContainerScale,
|
||||||
handleCopyNextToWidget,
|
handleCopyNextToWidget,
|
||||||
isTabAndMobile,
|
isTabAndMobile,
|
||||||
onChangeInput,
|
onChangeInput,
|
||||||
@@ -634,10 +635,11 @@ function Placeholder(props) {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
const xPos = (pos, signYourself) => {
|
const xPos = (pos, signYourself) => {
|
||||||
const getPdfPageWidth = props.pdfOriginalWH.find(
|
const containerScale = getContainerScale(
|
||||||
(data) => data.pageNumber === props.pageNumber
|
props.pdfOriginalWH,
|
||||||
|
props.pageNumber,
|
||||||
|
props.containerWH
|
||||||
);
|
);
|
||||||
const containerScale = props.containerWH.width / getPdfPageWidth?.width;
|
|
||||||
const resizePos = pos.xPosition;
|
const resizePos = pos.xPosition;
|
||||||
if (signYourself) {
|
if (signYourself) {
|
||||||
return resizePos * containerScale * props.scale;
|
return resizePos * containerScale * props.scale;
|
||||||
@@ -659,10 +661,11 @@ function Placeholder(props) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
const yPos = (pos, signYourself) => {
|
const yPos = (pos, signYourself) => {
|
||||||
const getPdfPageWidth = props.pdfOriginalWH.find(
|
const containerScale = getContainerScale(
|
||||||
(data) => data.pageNumber === props.pageNumber
|
props.pdfOriginalWH,
|
||||||
|
props.pageNumber,
|
||||||
|
props.containerWH
|
||||||
);
|
);
|
||||||
const containerScale = props.containerWH.width / getPdfPageWidth.width;
|
|
||||||
const resizePos = pos.yPosition;
|
const resizePos = pos.yPosition;
|
||||||
|
|
||||||
if (signYourself) {
|
if (signYourself) {
|
||||||
|
|||||||
@@ -47,14 +47,11 @@ function PlaceholderBorder(props) {
|
|||||||
onTouchEnd={() =>
|
onTouchEnd={() =>
|
||||||
props.pos.type === textWidget && props?.setDraggingEnabled(true)
|
props.pos.type === textWidget && props?.setDraggingEnabled(true)
|
||||||
}
|
}
|
||||||
className="absolute inline-block w-[14px] h-[14px] hover:cursor-sw-resize"
|
className="absolute inline-block w-[14px] h-[14px] border-[0.2px] overflow-hidden border-dashed"
|
||||||
style={{
|
style={{
|
||||||
borderColor: themeColor,
|
borderColor: themeColor,
|
||||||
borderStyle: "dashed",
|
|
||||||
minWidth: handleMinWidth() || 0,
|
minWidth: handleMinWidth() || 0,
|
||||||
minHeight: handleMinHeight() || 0,
|
minHeight: handleMinHeight() || 0
|
||||||
borderWidth: "0.2px",
|
|
||||||
overflow: "hidden"
|
|
||||||
}}
|
}}
|
||||||
></div>
|
></div>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -140,8 +140,7 @@ function PlaceholderType(props) {
|
|||||||
|
|
||||||
const ExampleCustomInput = forwardRef(({ value, onClick }, ref) => (
|
const ExampleCustomInput = forwardRef(({ value, onClick }, ref) => (
|
||||||
<div
|
<div
|
||||||
className={`${selectWidgetCls} overflow-hidden`}
|
className={`${selectWidgetCls} text-[12px] overflow-hidden`}
|
||||||
style={{ fontSize: calculateFontSize() }}
|
|
||||||
onClick={onClick}
|
onClick={onClick}
|
||||||
ref={ref}
|
ref={ref}
|
||||||
>
|
>
|
||||||
@@ -172,12 +171,6 @@ function PlaceholderType(props) {
|
|||||||
}
|
}
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, [type]);
|
}, [type]);
|
||||||
|
|
||||||
const calculateFontSize = () => {
|
|
||||||
const fontSize = 10 + Math.min(props.pos.Width, props.pos.Height) * 0.1;
|
|
||||||
const size = fontSize ? fontSize : 12;
|
|
||||||
return size + "px";
|
|
||||||
};
|
|
||||||
//function for show checked checkbox
|
//function for show checked checkbox
|
||||||
const selectCheckbox = (ind) => {
|
const selectCheckbox = (ind) => {
|
||||||
const res = props.pos.options?.response;
|
const res = props.pos.options?.response;
|
||||||
@@ -427,7 +420,8 @@ function PlaceholderType(props) {
|
|||||||
fontSize: props.pos.options?.fontSize
|
fontSize: props.pos.options?.fontSize
|
||||||
? props.pos.options?.fontSize + "px"
|
? props.pos.options?.fontSize + "px"
|
||||||
: "12px",
|
: "12px",
|
||||||
color: props.pos.options?.fontColor || "black"
|
color: props.pos.options?.fontColor || "black",
|
||||||
|
overflow: "hidden"
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<span>{type}</span>
|
<span>{type}</span>
|
||||||
@@ -466,10 +460,7 @@ function PlaceholderType(props) {
|
|||||||
})}
|
})}
|
||||||
</select>
|
</select>
|
||||||
) : (
|
) : (
|
||||||
<div
|
<div className="text-[12px] overflow-hidden">
|
||||||
className={selectWidgetCls}
|
|
||||||
style={{ fontSize: calculateFontSize() }}
|
|
||||||
>
|
|
||||||
{props.pos?.options?.name ? props.pos.options.name : type}
|
{props.pos?.options?.name ? props.pos.options.name : type}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
@@ -528,7 +519,9 @@ function PlaceholderType(props) {
|
|||||||
fontSize: props.pos.options?.fontSize
|
fontSize: props.pos.options?.fontSize
|
||||||
? props.pos.options?.fontSize + "px"
|
? props.pos.options?.fontSize + "px"
|
||||||
: "12px",
|
: "12px",
|
||||||
color: props.pos.options?.fontColor || "black"
|
color: props.pos.options?.fontColor || "black",
|
||||||
|
fontFamily: "Arial, sans-serif",
|
||||||
|
overflow: "hidden"
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<span>{type}</span>
|
<span>{type}</span>
|
||||||
@@ -570,7 +563,9 @@ function PlaceholderType(props) {
|
|||||||
fontSize: props.pos.options?.fontSize
|
fontSize: props.pos.options?.fontSize
|
||||||
? props.pos.options?.fontSize + "px"
|
? props.pos.options?.fontSize + "px"
|
||||||
: "12px",
|
: "12px",
|
||||||
color: props.pos.options?.fontColor || "black"
|
color: props.pos.options?.fontColor || "black",
|
||||||
|
overflow: "hidden",
|
||||||
|
fontFamily: "Arial, sans-serif"
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<span>{type}</span>
|
<span>{type}</span>
|
||||||
@@ -612,7 +607,9 @@ function PlaceholderType(props) {
|
|||||||
fontSize: props.pos.options?.fontSize
|
fontSize: props.pos.options?.fontSize
|
||||||
? props.pos.options?.fontSize + "px"
|
? props.pos.options?.fontSize + "px"
|
||||||
: "12px",
|
: "12px",
|
||||||
color: props.pos.options?.fontColor || "black"
|
color: props.pos.options?.fontColor || "black",
|
||||||
|
fontFamily: "Arial, sans-serif",
|
||||||
|
overflow: "hidden"
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<span>{type}</span>
|
<span>{type}</span>
|
||||||
@@ -678,7 +675,7 @@ function PlaceholderType(props) {
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
) : (
|
) : (
|
||||||
<div className="text-[12px] text-black uppercase items-center">
|
<div className="text-[12px] text-black items-center overflow-hidden">
|
||||||
<span>
|
<span>
|
||||||
{props.selectDate
|
{props.selectDate
|
||||||
? props.selectDate?.format
|
? props.selectDate?.format
|
||||||
@@ -733,7 +730,8 @@ function PlaceholderType(props) {
|
|||||||
fontSize: props.pos.options?.fontSize
|
fontSize: props.pos.options?.fontSize
|
||||||
? props.pos.options?.fontSize + "px"
|
? props.pos.options?.fontSize + "px"
|
||||||
: "12px",
|
: "12px",
|
||||||
color: props.pos.options?.fontColor || "black"
|
color: props.pos.options?.fontColor || "black",
|
||||||
|
fontFamily: "Arial, sans-serif"
|
||||||
}}
|
}}
|
||||||
cols="50"
|
cols="50"
|
||||||
/>
|
/>
|
||||||
@@ -743,7 +741,9 @@ function PlaceholderType(props) {
|
|||||||
fontSize: props.pos.options?.fontSize
|
fontSize: props.pos.options?.fontSize
|
||||||
? props.pos.options?.fontSize + "px"
|
? props.pos.options?.fontSize + "px"
|
||||||
: "12px",
|
: "12px",
|
||||||
color: props.pos.options?.fontColor || "black"
|
color: props.pos.options?.fontColor || "black",
|
||||||
|
fontFamily: "Arial, sans-serif",
|
||||||
|
overflow: "hidden"
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<span>{type}</span>
|
<span>{type}</span>
|
||||||
@@ -802,6 +802,7 @@ function PlaceholderType(props) {
|
|||||||
}}
|
}}
|
||||||
className={textWidgetCls}
|
className={textWidgetCls}
|
||||||
style={{
|
style={{
|
||||||
|
fontFamily: "Arial, sans-serif",
|
||||||
fontSize: props.pos.options?.fontSize
|
fontSize: props.pos.options?.fontSize
|
||||||
? props.pos.options?.fontSize + "px"
|
? props.pos.options?.fontSize + "px"
|
||||||
: "12px",
|
: "12px",
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import RSC from "react-scrollbars-custom";
|
|||||||
import { Document, Page } from "react-pdf";
|
import { Document, Page } from "react-pdf";
|
||||||
import {
|
import {
|
||||||
defaultWidthHeight,
|
defaultWidthHeight,
|
||||||
|
getContainerScale,
|
||||||
handleImageResize,
|
handleImageResize,
|
||||||
handleSignYourselfImageResize
|
handleSignYourselfImageResize
|
||||||
} from "../../constant/Utils";
|
} from "../../constant/Utils";
|
||||||
@@ -68,10 +69,11 @@ function RenderPdf({
|
|||||||
|
|
||||||
// handle signature block width and height according to screen
|
// handle signature block width and height according to screen
|
||||||
const posWidth = (pos, signYourself) => {
|
const posWidth = (pos, signYourself) => {
|
||||||
const getPdfPageWidth = pdfOriginalWH.find(
|
const containerScale = getContainerScale(
|
||||||
(data) => data.pageNumber === pageNumber
|
pdfOriginalWH,
|
||||||
|
pageNumber,
|
||||||
|
containerWH
|
||||||
);
|
);
|
||||||
const containerScale = containerWH.width / getPdfPageWidth.width || 1;
|
|
||||||
const defaultWidth = defaultWidthHeight(pos.type).width;
|
const defaultWidth = defaultWidthHeight(pos.type).width;
|
||||||
const posWidth = pos.Width ? pos.Width : defaultWidth;
|
const posWidth = pos.Width ? pos.Width : defaultWidth;
|
||||||
if (signYourself) {
|
if (signYourself) {
|
||||||
@@ -97,11 +99,11 @@ function RenderPdf({
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
const posHeight = (pos, signYourself) => {
|
const posHeight = (pos, signYourself) => {
|
||||||
const getPdfPageWidth = pdfOriginalWH.find(
|
const containerScale = getContainerScale(
|
||||||
(data) => data.pageNumber === pageNumber
|
pdfOriginalWH,
|
||||||
|
pageNumber,
|
||||||
|
containerWH
|
||||||
);
|
);
|
||||||
const containerScale = containerWH.width / getPdfPageWidth?.width || 1;
|
|
||||||
|
|
||||||
const posHeight = pos.Height || defaultWidthHeight(pos.type).height;
|
const posHeight = pos.Height || defaultWidthHeight(pos.type).height;
|
||||||
if (signYourself) {
|
if (signYourself) {
|
||||||
return posHeight * scale * containerScale;
|
return posHeight * scale * containerScale;
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import { appInfo } from "./appinfo";
|
|||||||
import { saveAs } from "file-saver";
|
import { saveAs } from "file-saver";
|
||||||
import printModule from "print-js";
|
import printModule from "print-js";
|
||||||
|
|
||||||
export const fontsizeArr = [7, 8, 9, 10, 11, 12, 13, 14, 15, 18];
|
export const fontsizeArr = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28];
|
||||||
export const fontColorArr = ["red", "black", "blue", "yellow"];
|
export const fontColorArr = ["red", "black", "blue", "yellow"];
|
||||||
export const isMobile = window.innerWidth < 767;
|
export const isMobile = window.innerWidth < 767;
|
||||||
export const isTabAndMobile = window.innerWidth < 1023;
|
export const isTabAndMobile = window.innerWidth < 1023;
|
||||||
@@ -1249,14 +1249,30 @@ export const changeImageWH = async (base64Image) => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//function to calculate font size of text area widgets
|
||||||
|
const calculateFontSize = (position, containerScale, signyourself) => {
|
||||||
|
const font = position?.options?.fontSize || 12;
|
||||||
|
if (!signyourself && position?.isMobile && position?.scale) {
|
||||||
|
return font / position?.scale / containerScale;
|
||||||
|
} else {
|
||||||
|
return font / containerScale;
|
||||||
|
}
|
||||||
|
};
|
||||||
//function for embed multiple signature using pdf-lib
|
//function for embed multiple signature using pdf-lib
|
||||||
export const multiSignEmbed = async (
|
export const multiSignEmbed = async (
|
||||||
xyPositionArray,
|
xyPositionArray,
|
||||||
pdfDoc,
|
pdfDoc,
|
||||||
signyourself,
|
signyourself,
|
||||||
scale
|
scale,
|
||||||
|
pdfOriginalWH,
|
||||||
|
containerWH
|
||||||
) => {
|
) => {
|
||||||
for (let item of xyPositionArray) {
|
for (let item of xyPositionArray) {
|
||||||
|
const containerScale = getContainerScale(
|
||||||
|
pdfOriginalWH,
|
||||||
|
item?.pageNumber,
|
||||||
|
containerWH
|
||||||
|
);
|
||||||
const typeExist = item.pos.some((data) => data?.type);
|
const typeExist = item.pos.some((data) => data?.type);
|
||||||
let updateItem;
|
let updateItem;
|
||||||
|
|
||||||
@@ -1416,7 +1432,13 @@ export const multiSignEmbed = async (
|
|||||||
}
|
}
|
||||||
} else if (widgetTypeExist) {
|
} else if (widgetTypeExist) {
|
||||||
const font = await pdfDoc.embedFont("Helvetica");
|
const font = await pdfDoc.embedFont("Helvetica");
|
||||||
const fontSize = parseInt(position?.options?.fontSize) || 12;
|
const fontSize = calculateFontSize(
|
||||||
|
position,
|
||||||
|
containerScale,
|
||||||
|
signyourself
|
||||||
|
);
|
||||||
|
parseInt(fontSize);
|
||||||
|
|
||||||
const color = position?.options?.fontColor;
|
const color = position?.options?.fontColor;
|
||||||
let updateColorInRgb;
|
let updateColorInRgb;
|
||||||
if (color === "red") {
|
if (color === "red") {
|
||||||
@@ -1591,7 +1613,7 @@ export const multiSignEmbed = async (
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
const pdfBytes = await pdfDoc.saveAsBase64({ useObjectStreams: false });
|
const pdfBytes = await pdfDoc.saveAsBase64({ useObjectStreams: false });
|
||||||
// console.log("pdf", pdfBytes);
|
//console.log("pdf", pdfBytes);
|
||||||
return pdfBytes;
|
return pdfBytes;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -2211,3 +2233,11 @@ function getImagePosition(page, image, sizeRatio) {
|
|||||||
rotate: page.getRotation()
|
rotate: page.getRotation()
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
//function to use calculate pdf rendering scale in the container
|
||||||
|
export const getContainerScale = (pdfOriginalWH, pageNumber, containerWH) => {
|
||||||
|
const getPdfPageWidth = pdfOriginalWH.find(
|
||||||
|
(data) => data.pageNumber === pageNumber
|
||||||
|
);
|
||||||
|
const containerScale = containerWH?.width / getPdfPageWidth?.width || 1;
|
||||||
|
return containerScale;
|
||||||
|
};
|
||||||
|
|||||||
@@ -4,10 +4,10 @@ export const documentCls = "contracts_Document";
|
|||||||
export const themeColor = "#47a3ad";
|
export const themeColor = "#47a3ad";
|
||||||
export const iconColor = "#686968";
|
export const iconColor = "#686968";
|
||||||
export const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
|
export const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
|
||||||
export const isEnableSubscription = true;
|
export const isEnableSubscription =
|
||||||
// process.env.REACT_APP_ENABLE_SUBSCRIPTION &&
|
process.env.REACT_APP_ENABLE_SUBSCRIPTION &&
|
||||||
// process.env.REACT_APP_ENABLE_SUBSCRIPTION?.toLowerCase() === "true"
|
process.env.REACT_APP_ENABLE_SUBSCRIPTION?.toLowerCase() === "true"
|
||||||
// ? true
|
? true
|
||||||
// : false;
|
: false;
|
||||||
export const isStaging = "http://localhost:3001";
|
export const isStaging =
|
||||||
// window.location.origin === "https://staging-app.opensignlabs.com";
|
window.location.origin === "https://staging-app.opensignlabs.com";
|
||||||
|
|||||||
@@ -26,6 +26,27 @@ const plans = [
|
|||||||
"Decline document support",
|
"Decline document support",
|
||||||
"Email notifications",
|
"Email notifications",
|
||||||
"Recipient authentication using OTP",
|
"Recipient authentication using OTP",
|
||||||
|
"Bulk send (upto 5 docs)",
|
||||||
|
"Public profiles",
|
||||||
|
"And much more"
|
||||||
|
],
|
||||||
|
yearlyBenefits: [
|
||||||
|
"Unlimited envelopes",
|
||||||
|
"Sign documents yourself",
|
||||||
|
"Request signatures from others",
|
||||||
|
"14 field types",
|
||||||
|
"Automatic e-signatures",
|
||||||
|
"Completion certificates",
|
||||||
|
"Send in order",
|
||||||
|
"Document templates",
|
||||||
|
"Import from Dropbox",
|
||||||
|
"Contact book",
|
||||||
|
"Document expiry support",
|
||||||
|
"Decline document support",
|
||||||
|
"Email notifications",
|
||||||
|
"Recipient authentication using OTP",
|
||||||
|
"Bulk send (upto 5 docs)",
|
||||||
|
"Public profiles",
|
||||||
"And much more"
|
"And much more"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -34,7 +55,7 @@ const plans = [
|
|||||||
img: "professional.png",
|
img: "professional.png",
|
||||||
currency: "$",
|
currency: "$",
|
||||||
monthlyPrice: "29.99",
|
monthlyPrice: "29.99",
|
||||||
yearlyPrice: `10 <sup style="font-size: 17px;">/month/user</sup>`,
|
yearlyPrice: `9.99<sup style="font-size: 17px;">/month</sup>`,
|
||||||
subtitle: "Exclusive Access to advanced features.",
|
subtitle: "Exclusive Access to advanced features.",
|
||||||
btn: { text: "Subscribe", color: "op-btn-primary" },
|
btn: { text: "Subscribe", color: "op-btn-primary" },
|
||||||
url: isStaging
|
url: isStaging
|
||||||
@@ -53,9 +74,64 @@ const plans = [
|
|||||||
"Zapier integration",
|
"Zapier integration",
|
||||||
"API Access",
|
"API Access",
|
||||||
"100 API signatures included",
|
"100 API signatures included",
|
||||||
"DocumentId removal from signed docs",
|
|
||||||
"Custom email templates",
|
"Custom email templates",
|
||||||
"Auto reminders"
|
"Auto reminders",
|
||||||
|
"Bulk send (upto 20 docs)",
|
||||||
|
"Premium Public profile usernames",
|
||||||
|
"Embedding (coming soon)"
|
||||||
|
],
|
||||||
|
yearlyBenefits: [
|
||||||
|
"Everything in OpenSign™ free",
|
||||||
|
"Field validations",
|
||||||
|
"Regular expression validations",
|
||||||
|
"Organize docs in OpenSign™ Drive",
|
||||||
|
"Webhooks",
|
||||||
|
"Zapier integration",
|
||||||
|
"API Access",
|
||||||
|
"240 API signatures included",
|
||||||
|
"Custom email templates",
|
||||||
|
"Auto reminders",
|
||||||
|
"Bulk send (upto 20 docs)",
|
||||||
|
"Premium Public profile usernames",
|
||||||
|
"Embedding (coming soon)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
planName: "OPENSIGN™ TEAMS",
|
||||||
|
img: "teams.png",
|
||||||
|
currency: "$",
|
||||||
|
monthlyPrice: `39.99<sup style="font-size: 17px;">/user</sup>`,
|
||||||
|
yearlyPrice: `19.99<sup style="font-size: 17px;">/user/month</sup>`,
|
||||||
|
subtitle: "Exclusive Access to advanced features.",
|
||||||
|
btn: { text: "Subscribe", color: "op-btn-accent" },
|
||||||
|
url: isStaging
|
||||||
|
? "https://billing.zoho.in/subscribe/ed8097273a82b6bf39892c11a3bb3c381eb2705736014cfbdbde1ccf1c7a189d/team-weekly"
|
||||||
|
: "https://billing.opensignlabs.com/subscribe/ef798486e6a0a11ea65f2bae8f2af901237d0702bfaa959406306635d80f138c/teams-monthly",
|
||||||
|
yearlyUrl: isStaging
|
||||||
|
? "https://billing.zoho.in/subscribe/ed8097273a82b6bf39892c11a3bb3c381eb2705736014cfbdbde1ccf1c7a189d/team-weekly"
|
||||||
|
: "https://billing.opensignlabs.com/subscribe/ef798486e6a0a11ea65f2bae8f2af9011a864994bbeeec71fcf106188630199d/teams-yearly",
|
||||||
|
target: "_self",
|
||||||
|
benefits: [
|
||||||
|
"Everything in OpenSign™ professional",
|
||||||
|
"100 API signatures included",
|
||||||
|
"Teams and Organizations",
|
||||||
|
"Share Templates with teams",
|
||||||
|
"Share Templates with individuals",
|
||||||
|
"DocumentId removal from signed docs",
|
||||||
|
"Bulk send (upto 50 docs)",
|
||||||
|
"Request Payments (coming soon)",
|
||||||
|
"Mobile app (coming soon)"
|
||||||
|
],
|
||||||
|
yearlyBenefits: [
|
||||||
|
"Everything in OpenSign™ professional",
|
||||||
|
"500 API signatures included",
|
||||||
|
"Teams and Organizations",
|
||||||
|
"Share Templates with teams",
|
||||||
|
"Share Templates with individuals",
|
||||||
|
"DocumentId removal from signed docs",
|
||||||
|
"Bulk send (upto 50 docs)",
|
||||||
|
"Request Payments (coming soon)",
|
||||||
|
"Mobile app (coming soon)"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -75,36 +151,16 @@ const plans = [
|
|||||||
"Uptime SLA",
|
"Uptime SLA",
|
||||||
"SSO support",
|
"SSO support",
|
||||||
"Priority support"
|
"Priority support"
|
||||||
|
],
|
||||||
|
yearlyBenefits: [
|
||||||
|
"All features",
|
||||||
|
"Custom domain",
|
||||||
|
"Custom branding",
|
||||||
|
"Uptime SLA",
|
||||||
|
"SSO support",
|
||||||
|
"Priority support"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
export const stagingPlan = {
|
|
||||||
planName: "OPENSIGN™ TEAMS",
|
|
||||||
img: "teams.png",
|
|
||||||
currency: "$",
|
|
||||||
monthlyPrice: "40",
|
|
||||||
yearlyPrice: `20 <sup style="font-size: 17px;">/month/user</sup>`,
|
|
||||||
subtitle: "Exclusive Access to advanced features.",
|
|
||||||
btn: { text: "Subscribe", color: "op-btn-accent" },
|
|
||||||
url: isStaging
|
|
||||||
? "https://billing.zoho.in/subscribe/ed8097273a82b6bf39892c11a3bb3c381eb2705736014cfbdbde1ccf1c7a189d/team-weekly"
|
|
||||||
: "https://billing.opensignlabs.com/subscribe/ef798486e6a0a11ea65f2bae8f2af901d1a09dfa8085585cdd4ec4d7f32137f3/professional-monthly",
|
|
||||||
yearlyUrl: isStaging
|
|
||||||
? "https://billing.zoho.in/subscribe/ed8097273a82b6bf39892c11a3bb3c381eb2705736014cfbdbde1ccf1c7a189d/team-weekly"
|
|
||||||
: "https://billing.opensignlabs.com/subscribe/ef798486e6a0a11ea65f2bae8f2af901d8ad1135190dff951330360e47585a71/professional-yearly",
|
|
||||||
target: "_self",
|
|
||||||
benefits: [
|
|
||||||
"Everything in OpenSign™ free, professional",
|
|
||||||
"Field validations",
|
|
||||||
"Regular expression validations",
|
|
||||||
"Organize docs in OpenSign™ Drive",
|
|
||||||
"Webhooks",
|
|
||||||
"Zapier integration",
|
|
||||||
"API Access",
|
|
||||||
"100 API signatures included",
|
|
||||||
"DocumentId removal from signed docs",
|
|
||||||
"Custom email templates",
|
|
||||||
"Auto reminders"
|
|
||||||
]
|
|
||||||
};
|
|
||||||
export default plans;
|
export default plans;
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ const HomeLayout = () => {
|
|||||||
try {
|
try {
|
||||||
// Use the session token to validate the user
|
// Use the session token to validate the user
|
||||||
const userQuery = new Parse.Query(Parse.User);
|
const userQuery = new Parse.Query(Parse.User);
|
||||||
const user = await userQuery.get(Parse.User.current().id, {
|
const user = await userQuery.get(Parse?.User?.current()?.id, {
|
||||||
sessionToken: localStorage.getItem("accesstoken")
|
sessionToken: localStorage.getItem("accesstoken")
|
||||||
});
|
});
|
||||||
if (user) {
|
if (user) {
|
||||||
@@ -246,7 +246,7 @@ const HomeLayout = () => {
|
|||||||
|
|
||||||
const handleLoginBtn = () => {
|
const handleLoginBtn = () => {
|
||||||
try {
|
try {
|
||||||
Parse.User.logOut();
|
Parse?.User?.logOut();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log("err ", err);
|
console.log("err ", err);
|
||||||
} finally {
|
} finally {
|
||||||
|
|||||||
@@ -678,7 +678,7 @@ function PdfRequestFiles(props) {
|
|||||||
widgetKey,
|
widgetKey,
|
||||||
radioExist,
|
radioExist,
|
||||||
requiredCheckbox,
|
requiredCheckbox,
|
||||||
pageNumber; // `pageNumber` is used to check on which page user did not fill widget's data then change current pageNumber and show tour message on that page
|
TourPageNumber; // `pageNumber` is used to check on which page user did not fill widget's data then change current pageNumber and show tour message on that page
|
||||||
|
|
||||||
for (let i = 0; i < checkUser[0].placeHolder.length; i++) {
|
for (let i = 0; i < checkUser[0].placeHolder.length; i++) {
|
||||||
for (let j = 0; j < checkUser[0].placeHolder[i].pos.length; j++) {
|
for (let j = 0; j < checkUser[0].placeHolder[i].pos.length; j++) {
|
||||||
@@ -726,7 +726,7 @@ function PdfRequestFiles(props) {
|
|||||||
) {
|
) {
|
||||||
showAlert = true;
|
showAlert = true;
|
||||||
widgetKey = requiredCheckbox[i].key;
|
widgetKey = requiredCheckbox[i].key;
|
||||||
pageNumber = updatePage;
|
TourPageNumber = updatePage;
|
||||||
setminRequiredCount(parseMin);
|
setminRequiredCount(parseMin);
|
||||||
}
|
}
|
||||||
//else condition to validate minimum required checkbox
|
//else condition to validate minimum required checkbox
|
||||||
@@ -737,8 +737,7 @@ function PdfRequestFiles(props) {
|
|||||||
if (!showAlert) {
|
if (!showAlert) {
|
||||||
showAlert = true;
|
showAlert = true;
|
||||||
widgetKey = requiredCheckbox[i].key;
|
widgetKey = requiredCheckbox[i].key;
|
||||||
pageNumber = updatePage;
|
TourPageNumber = updatePage;
|
||||||
|
|
||||||
setminRequiredCount(parseMin);
|
setminRequiredCount(parseMin);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -764,7 +763,7 @@ function PdfRequestFiles(props) {
|
|||||||
if (!checkDefaultSigned && !showAlert) {
|
if (!checkDefaultSigned && !showAlert) {
|
||||||
showAlert = true;
|
showAlert = true;
|
||||||
widgetKey = requiredRadio[i].key;
|
widgetKey = requiredRadio[i].key;
|
||||||
pageNumber = updatePage;
|
TourPageNumber = updatePage;
|
||||||
setminRequiredCount(null);
|
setminRequiredCount(null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -792,7 +791,7 @@ function PdfRequestFiles(props) {
|
|||||||
if (!checkDefaultSigned && !showAlert) {
|
if (!checkDefaultSigned && !showAlert) {
|
||||||
showAlert = true;
|
showAlert = true;
|
||||||
widgetKey = requiredWidgets[i].key;
|
widgetKey = requiredWidgets[i].key;
|
||||||
pageNumber = updatePage;
|
TourPageNumber = updatePage;
|
||||||
setminRequiredCount(null);
|
setminRequiredCount(null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -808,15 +807,15 @@ function PdfRequestFiles(props) {
|
|||||||
}
|
}
|
||||||
if (checkboxExist && requiredCheckbox && showAlert) {
|
if (checkboxExist && requiredCheckbox && showAlert) {
|
||||||
setUnSignedWidgetId(widgetKey);
|
setUnSignedWidgetId(widgetKey);
|
||||||
setPageNumber(pageNumber);
|
setPageNumber(TourPageNumber);
|
||||||
setWidgetsTour(true);
|
setWidgetsTour(true);
|
||||||
} else if (radioExist && showAlert) {
|
} else if (radioExist && showAlert) {
|
||||||
setUnSignedWidgetId(widgetKey);
|
setUnSignedWidgetId(widgetKey);
|
||||||
setPageNumber(pageNumber);
|
setPageNumber(TourPageNumber);
|
||||||
setWidgetsTour(true);
|
setWidgetsTour(true);
|
||||||
} else if (showAlert) {
|
} else if (showAlert) {
|
||||||
setUnSignedWidgetId(widgetKey);
|
setUnSignedWidgetId(widgetKey);
|
||||||
setPageNumber(pageNumber);
|
setPageNumber(TourPageNumber);
|
||||||
setWidgetsTour(true);
|
setWidgetsTour(true);
|
||||||
} else {
|
} else {
|
||||||
setIsUiLoading(true);
|
setIsUiLoading(true);
|
||||||
@@ -862,7 +861,9 @@ function PdfRequestFiles(props) {
|
|||||||
pngUrl,
|
pngUrl,
|
||||||
pdfDoc,
|
pdfDoc,
|
||||||
isSignYourSelfFlow,
|
isSignYourSelfFlow,
|
||||||
scale
|
scale,
|
||||||
|
pdfOriginalWH,
|
||||||
|
containerWH
|
||||||
);
|
);
|
||||||
// console.log("pdfte", pdfBytes);
|
// console.log("pdfte", pdfBytes);
|
||||||
//get ExistUserPtr object id of user class to get tenantDetails
|
//get ExistUserPtr object id of user class to get tenantDetails
|
||||||
@@ -1590,6 +1591,17 @@ function PdfRequestFiles(props) {
|
|||||||
alert("Please Enter OTP!");
|
alert("Please Enter OTP!");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
const handleCloseOtp = () => {
|
||||||
|
setIsPublicContact(false);
|
||||||
|
setLoading(false);
|
||||||
|
setIsOtp(false);
|
||||||
|
setOtp();
|
||||||
|
setContact({
|
||||||
|
name: "",
|
||||||
|
email: "",
|
||||||
|
phone: ""
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<DndProvider backend={HTML5Backend}>
|
<DndProvider backend={HTML5Backend}>
|
||||||
@@ -1719,16 +1731,18 @@ function PdfRequestFiles(props) {
|
|||||||
|
|
||||||
<ModalUi
|
<ModalUi
|
||||||
isOpen={isPublicContact}
|
isOpen={isPublicContact}
|
||||||
title={"Contact Details"}
|
title={isOtp ? "Verify email" : "Contact Details"}
|
||||||
handleClose={() => {
|
handleClose={() => {
|
||||||
setIsPublicContact(false);
|
handleCloseOtp();
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<div className="h-full p-[20px]">
|
<div className="h-full p-[20px]">
|
||||||
{isOtp ? (
|
{isOtp ? (
|
||||||
<form onSubmit={VerifyOTP}>
|
<form onSubmit={VerifyOTP}>
|
||||||
<div className="flex flex-col gap-2">
|
<div className="flex flex-col gap-2">
|
||||||
<span>You will get a OTP via Email</span>
|
<span>
|
||||||
|
You will get a verification code via email
|
||||||
|
</span>
|
||||||
<label className="op-input op-input-bordered flex items-center gap-2 ">
|
<label className="op-input op-input-bordered flex items-center gap-2 ">
|
||||||
<input
|
<input
|
||||||
type="number"
|
type="number"
|
||||||
@@ -1747,16 +1761,7 @@ function PdfRequestFiles(props) {
|
|||||||
<button
|
<button
|
||||||
className="op-btn op-btn-ghost"
|
className="op-btn op-btn-ghost"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
// document.getElementById("my_modal").close();
|
handleCloseOtp();
|
||||||
setIsPublicContact(false);
|
|
||||||
setLoading(false);
|
|
||||||
setIsOtp(false);
|
|
||||||
setOtp();
|
|
||||||
setContact({
|
|
||||||
name: "",
|
|
||||||
email: "",
|
|
||||||
phone: ""
|
|
||||||
});
|
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
Cancel
|
Cancel
|
||||||
@@ -1840,8 +1845,7 @@ function PdfRequestFiles(props) {
|
|||||||
<button
|
<button
|
||||||
className="op-btn op-btn-ghost"
|
className="op-btn op-btn-ghost"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
// document.getElementById("my_modal").close();
|
handleCloseOtp();
|
||||||
setIsPublicContact(false);
|
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
Close
|
Close
|
||||||
|
|||||||
@@ -33,7 +33,8 @@ import {
|
|||||||
replaceMailVaribles,
|
replaceMailVaribles,
|
||||||
copytoData,
|
copytoData,
|
||||||
fetchSubscription,
|
fetchSubscription,
|
||||||
convertPdfArrayBuffer
|
convertPdfArrayBuffer,
|
||||||
|
getContainerScale
|
||||||
} from "../constant/Utils";
|
} from "../constant/Utils";
|
||||||
import RenderPdf from "../components/pdf/RenderPdf";
|
import RenderPdf from "../components/pdf/RenderPdf";
|
||||||
import { useNavigate } from "react-router-dom";
|
import { useNavigate } from "react-router-dom";
|
||||||
@@ -452,10 +453,11 @@ function PlaceHolderSign() {
|
|||||||
setZIndex(posZIndex);
|
setZIndex(posZIndex);
|
||||||
const signer = signersdata.find((x) => x.Id === uniqueId);
|
const signer = signersdata.find((x) => x.Id === uniqueId);
|
||||||
const key = randomId();
|
const key = randomId();
|
||||||
const getPdfPageWidth = pdfOriginalWH.find(
|
const containerScale = getContainerScale(
|
||||||
(data) => data.pageNumber === pageNumber
|
pdfOriginalWH,
|
||||||
|
pageNumber,
|
||||||
|
containerWH
|
||||||
);
|
);
|
||||||
const containerScale = containerWH?.width / getPdfPageWidth?.width || 1;
|
|
||||||
let dropData = [];
|
let dropData = [];
|
||||||
let placeHolder;
|
let placeHolder;
|
||||||
const dragTypeValue = item?.text ? item.text : monitor.type;
|
const dragTypeValue = item?.text ? item.text : monitor.type;
|
||||||
@@ -676,11 +678,11 @@ function PlaceHolderSign() {
|
|||||||
updateSignPos.splice(0, updateSignPos.length, ...dataNewPlace);
|
updateSignPos.splice(0, updateSignPos.length, ...dataNewPlace);
|
||||||
const signId = signerId ? signerId : uniqueId; //? signerId : signerObjId;
|
const signId = signerId ? signerId : uniqueId; //? signerId : signerObjId;
|
||||||
const keyValue = key ? key : dragKey;
|
const keyValue = key ? key : dragKey;
|
||||||
const getPdfPageWidth = pdfOriginalWH.find(
|
const containerScale = getContainerScale(
|
||||||
(data) => data.pageNumber === pageNumber
|
pdfOriginalWH,
|
||||||
|
pageNumber,
|
||||||
|
containerWH
|
||||||
);
|
);
|
||||||
const containerScale = containerWH.width / getPdfPageWidth?.width;
|
|
||||||
|
|
||||||
if (keyValue >= 0) {
|
if (keyValue >= 0) {
|
||||||
let filterSignerPos;
|
let filterSignerPos;
|
||||||
if (signId) {
|
if (signId) {
|
||||||
@@ -851,13 +853,14 @@ function PlaceHolderSign() {
|
|||||||
const pdfDoc = await PDFDocument.load(existingPdfBytes, {
|
const pdfDoc = await PDFDocument.load(existingPdfBytes, {
|
||||||
ignoreEncryption: true
|
ignoreEncryption: true
|
||||||
});
|
});
|
||||||
|
|
||||||
const isSignYourSelfFlow = false;
|
const isSignYourSelfFlow = false;
|
||||||
try {
|
try {
|
||||||
const pdfBytes = await multiSignEmbed(
|
const pdfBytes = await multiSignEmbed(
|
||||||
placeholder,
|
placeholder,
|
||||||
pdfDoc,
|
pdfDoc,
|
||||||
isSignYourSelfFlow,
|
isSignYourSelfFlow,
|
||||||
|
scale,
|
||||||
|
pdfOriginalWH,
|
||||||
containerWH
|
containerWH
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,11 @@
|
|||||||
import React, { useState, useEffect } from "react";
|
import React, { useState, useEffect } from "react";
|
||||||
import { useNavigate } from "react-router-dom";
|
import { useNavigate } from "react-router-dom";
|
||||||
import checkmark from "../assets/images/checkmark.png";
|
import checkmark from "../assets/images/checkmark.png";
|
||||||
import plansArr, { stagingPlan } from "../json/plansArr";
|
import plansArr from "../json/plansArr";
|
||||||
import Title from "../components/Title";
|
import Title from "../components/Title";
|
||||||
import Parse from "parse";
|
import Parse from "parse";
|
||||||
import { openInNewTab } from "../constant/Utils";
|
import { openInNewTab } from "../constant/Utils";
|
||||||
import Loader from "../primitives/Loader";
|
import Loader from "../primitives/Loader";
|
||||||
import { isStaging } from "../constant/const";
|
|
||||||
const listItemStyle = {
|
const listItemStyle = {
|
||||||
paddingLeft: "20px", // Add padding to create space for the image
|
paddingLeft: "20px", // Add padding to create space for the image
|
||||||
backgroundImage: `url(${checkmark})`, // Set your image as the list style image
|
backgroundImage: `url(${checkmark})`, // Set your image as the list style image
|
||||||
@@ -17,7 +16,6 @@ const listItemStyle = {
|
|||||||
|
|
||||||
const PlanSubscriptions = () => {
|
const PlanSubscriptions = () => {
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const isTeamPlan = plansArr.some((x) => x.planName === "OPENSIGN™ TEAMS");
|
|
||||||
const [yearlyVisible, setYearlyVisible] = useState(true);
|
const [yearlyVisible, setYearlyVisible] = useState(true);
|
||||||
const [isLoader, setIsLoader] = useState(true);
|
const [isLoader, setIsLoader] = useState(true);
|
||||||
const extUser =
|
const extUser =
|
||||||
@@ -61,9 +59,6 @@ const PlanSubscriptions = () => {
|
|||||||
phone;
|
phone;
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setIsLoader(false);
|
setIsLoader(false);
|
||||||
if (!isTeamPlan && isStaging) {
|
|
||||||
plansArr.splice(2, 0, stagingPlan);
|
|
||||||
}
|
|
||||||
// eslint-disable-next-line
|
// eslint-disable-next-line
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
@@ -123,7 +118,7 @@ const PlanSubscriptions = () => {
|
|||||||
role="tab"
|
role="tab"
|
||||||
className={`${yearlyVisible ? "op-tab-active" : ""} op-tab`}
|
className={`${yearlyVisible ? "op-tab-active" : ""} op-tab`}
|
||||||
>
|
>
|
||||||
Yearly (10% off)
|
Yearly (upto 66% off)
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<ul className="op-card flex flex-col md:flex-row h-full bg-base-100 justify-center shadow-lg">
|
<ul className="op-card flex flex-col md:flex-row h-full bg-base-100 justify-center shadow-lg">
|
||||||
@@ -209,11 +204,18 @@ const PlanSubscriptions = () => {
|
|||||||
</div>
|
</div>
|
||||||
<hr className="w-full bg-gray-300 h-[0.5px]" />
|
<hr className="w-full bg-gray-300 h-[0.5px]" />
|
||||||
<ul className="mx-1 p-3 text-left break-words text-sm list-none">
|
<ul className="mx-1 p-3 text-left break-words text-sm list-none">
|
||||||
{item.benefits.map((subitem, index) => (
|
{!yearlyVisible &&
|
||||||
<li style={listItemStyle} key={index} className="m-1">
|
item.benefits.map((subitem, index) => (
|
||||||
<span className="relative">{subitem}</span>
|
<li style={listItemStyle} key={index} className="m-1">
|
||||||
</li>
|
<span className="relative">{subitem}</span>
|
||||||
))}
|
</li>
|
||||||
|
))}
|
||||||
|
{yearlyVisible &&
|
||||||
|
item?.yearlyBenefits?.map((subitem, index) => (
|
||||||
|
<li style={listItemStyle} key={index} className="m-1">
|
||||||
|
<span className="relative">{subitem}</span>
|
||||||
|
</li>
|
||||||
|
))}
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
))}
|
))}
|
||||||
|
|||||||
@@ -32,7 +32,8 @@ import {
|
|||||||
textInputWidget,
|
textInputWidget,
|
||||||
fetchImageBase64,
|
fetchImageBase64,
|
||||||
changeImageWH,
|
changeImageWH,
|
||||||
handleSendOTP
|
handleSendOTP,
|
||||||
|
getContainerScale
|
||||||
} from "../constant/Utils";
|
} from "../constant/Utils";
|
||||||
import { useParams } from "react-router-dom";
|
import { useParams } from "react-router-dom";
|
||||||
import Tour from "reactour";
|
import Tour from "reactour";
|
||||||
@@ -442,6 +443,7 @@ function SignYourSelf() {
|
|||||||
};
|
};
|
||||||
//function for setting position after drop signature button over pdf
|
//function for setting position after drop signature button over pdf
|
||||||
const addPositionOfSignature = (item, monitor) => {
|
const addPositionOfSignature = (item, monitor) => {
|
||||||
|
setCurrWidgetsDetails({});
|
||||||
const key = randomId();
|
const key = randomId();
|
||||||
let dropData = [];
|
let dropData = [];
|
||||||
let dropObj = {};
|
let dropObj = {};
|
||||||
@@ -453,10 +455,11 @@ function SignYourSelf() {
|
|||||||
const widgetTypeExist = ["name", "company", "job title", "email"].includes(
|
const widgetTypeExist = ["name", "company", "job title", "email"].includes(
|
||||||
dragTypeValue
|
dragTypeValue
|
||||||
);
|
);
|
||||||
const getPdfPageWidth = pdfOriginalWH.find(
|
const containerScale = getContainerScale(
|
||||||
(data) => data.pageNumber === pageNumber
|
pdfOriginalWH,
|
||||||
|
pageNumber,
|
||||||
|
containerWH
|
||||||
);
|
);
|
||||||
const containerScale = containerWH?.width / getPdfPageWidth?.width || 1;
|
|
||||||
//adding and updating drop position in array when user drop signature button in div
|
//adding and updating drop position in array when user drop signature button in div
|
||||||
if (item === "onclick") {
|
if (item === "onclick") {
|
||||||
const getWidth = widgetTypeExist
|
const getWidth = widgetTypeExist
|
||||||
@@ -694,7 +697,9 @@ function SignYourSelf() {
|
|||||||
xyPostion,
|
xyPostion,
|
||||||
pdfDoc,
|
pdfDoc,
|
||||||
isSignYourSelfFlow,
|
isSignYourSelfFlow,
|
||||||
scale
|
scale,
|
||||||
|
pdfOriginalWH,
|
||||||
|
containerWH
|
||||||
);
|
);
|
||||||
// console.log("pdf", pdfBytes);
|
// console.log("pdf", pdfBytes);
|
||||||
//function for call to embed signature in pdf and get digital signature pdf
|
//function for call to embed signature in pdf and get digital signature pdf
|
||||||
@@ -812,10 +817,11 @@ function SignYourSelf() {
|
|||||||
setFontColor();
|
setFontColor();
|
||||||
if (isDragging && dragElement) {
|
if (isDragging && dragElement) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
const getPdfPageWidth = pdfOriginalWH.find(
|
const containerScale = getContainerScale(
|
||||||
(data) => data.pageNumber === pageNumber
|
pdfOriginalWH,
|
||||||
|
pageNumber,
|
||||||
|
containerWH
|
||||||
);
|
);
|
||||||
const containerScale = containerWH.width / getPdfPageWidth?.width || 1;
|
|
||||||
if (dragKey >= 0) {
|
if (dragKey >= 0) {
|
||||||
const filterDropPos = xyPostion.filter(
|
const filterDropPos = xyPostion.filter(
|
||||||
(data) => data.pageNumber === pageNumber
|
(data) => data.pageNumber === pageNumber
|
||||||
|
|||||||
@@ -163,7 +163,7 @@ const TeamList = () => {
|
|||||||
setTeamList(newArray);
|
setTeamList(newArray);
|
||||||
try {
|
try {
|
||||||
await Parse.Cloud.run("updateteam", {
|
await Parse.Cloud.run("updateteam", {
|
||||||
IsActive: !IsActive,
|
IsActive: !IsActive === false ? "false" : "true",
|
||||||
TeamId: team.objectId
|
TeamId: team.objectId
|
||||||
});
|
});
|
||||||
// console.log("teamRes ", teamRes);
|
// console.log("teamRes ", teamRes);
|
||||||
|
|||||||
@@ -24,7 +24,8 @@ import {
|
|||||||
addWidgetOptions,
|
addWidgetOptions,
|
||||||
textInputWidget,
|
textInputWidget,
|
||||||
radioButtonWidget,
|
radioButtonWidget,
|
||||||
fetchSubscription
|
fetchSubscription,
|
||||||
|
getContainerScale
|
||||||
} from "../constant/Utils";
|
} from "../constant/Utils";
|
||||||
import RenderPdf from "../components/pdf/RenderPdf";
|
import RenderPdf from "../components/pdf/RenderPdf";
|
||||||
import "../styles/AddUser.css";
|
import "../styles/AddUser.css";
|
||||||
@@ -364,10 +365,11 @@ const TemplatePlaceholder = () => {
|
|||||||
if (signer) {
|
if (signer) {
|
||||||
const posZIndex = zIndex + 1;
|
const posZIndex = zIndex + 1;
|
||||||
setZIndex(posZIndex);
|
setZIndex(posZIndex);
|
||||||
const getPdfPageWidth = pdfOriginalWH.find(
|
const containerScale = getContainerScale(
|
||||||
(data) => data.pageNumber === pageNumber
|
pdfOriginalWH,
|
||||||
|
pageNumber,
|
||||||
|
containerWH
|
||||||
);
|
);
|
||||||
const containerScale = containerWH.width / getPdfPageWidth?.width || 1;
|
|
||||||
const key = randomId();
|
const key = randomId();
|
||||||
let filterSignerPos = signerPos.filter((data) => data.Id === uniqueId);
|
let filterSignerPos = signerPos.filter((data) => data.Id === uniqueId);
|
||||||
const dragTypeValue = item?.text ? item.text : monitor.type;
|
const dragTypeValue = item?.text ? item.text : monitor.type;
|
||||||
@@ -561,10 +563,11 @@ const TemplatePlaceholder = () => {
|
|||||||
updateSignPos.splice(0, updateSignPos.length, ...dataNewPlace);
|
updateSignPos.splice(0, updateSignPos.length, ...dataNewPlace);
|
||||||
const signId = signerId; //? signerId : signerObjId;
|
const signId = signerId; //? signerId : signerObjId;
|
||||||
const keyValue = key ? key : dragKey;
|
const keyValue = key ? key : dragKey;
|
||||||
const getPdfPageWidth = pdfOriginalWH.find(
|
const containerScale = getContainerScale(
|
||||||
(data) => data.pageNumber === pageNumber
|
pdfOriginalWH,
|
||||||
|
pageNumber,
|
||||||
|
containerWH
|
||||||
);
|
);
|
||||||
const containerScale = containerWH.width / getPdfPageWidth?.width || 1;
|
|
||||||
if (keyValue >= 0) {
|
if (keyValue >= 0) {
|
||||||
const filterSignerPos = updateSignPos.filter(
|
const filterSignerPos = updateSignPos.filter(
|
||||||
(data) => data.Id === signId
|
(data) => data.Id === signId
|
||||||
|
|||||||
@@ -8,7 +8,11 @@ import sanitizeFileName from "../primitives/sanitizeFileName";
|
|||||||
import axios from "axios";
|
import axios from "axios";
|
||||||
import Tooltip from "../primitives/Tooltip";
|
import Tooltip from "../primitives/Tooltip";
|
||||||
import { isEnableSubscription } from "../constant/const";
|
import { isEnableSubscription } from "../constant/const";
|
||||||
import { checkIsSubscribed, handleSendOTP } from "../constant/Utils";
|
import {
|
||||||
|
checkIsSubscribed,
|
||||||
|
checkIsSubscribedTeam,
|
||||||
|
handleSendOTP
|
||||||
|
} from "../constant/Utils";
|
||||||
import Upgrade from "../primitives/Upgrade";
|
import Upgrade from "../primitives/Upgrade";
|
||||||
import ModalUi from "../primitives/ModalUi";
|
import ModalUi from "../primitives/ModalUi";
|
||||||
import Loader from "../primitives/Loader";
|
import Loader from "../primitives/Loader";
|
||||||
@@ -46,6 +50,7 @@ function UserProfile() {
|
|||||||
const [tagLine, setTagLine] = useState(
|
const [tagLine, setTagLine] = useState(
|
||||||
extendUser && extendUser?.[0]?.Tagline
|
extendUser && extendUser?.[0]?.Tagline
|
||||||
);
|
);
|
||||||
|
const [isTeam, setIsTeam] = useState(false);
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
getUserDetail();
|
getUserDetail();
|
||||||
}, []);
|
}, []);
|
||||||
@@ -57,7 +62,9 @@ function UserProfile() {
|
|||||||
const HeaderDocId = jsonSender[0]?.HeaderDocId;
|
const HeaderDocId = jsonSender[0]?.HeaderDocId;
|
||||||
if (isEnableSubscription) {
|
if (isEnableSubscription) {
|
||||||
const getIsSubscribe = await checkIsSubscribed();
|
const getIsSubscribe = await checkIsSubscribed();
|
||||||
|
const getIsTeam = await checkIsSubscribedTeam();
|
||||||
setIsSubscribe(getIsSubscribe);
|
setIsSubscribe(getIsSubscribe);
|
||||||
|
setIsTeam(getIsTeam);
|
||||||
}
|
}
|
||||||
if (HeaderDocId) {
|
if (HeaderDocId) {
|
||||||
setIsDisableDocId(HeaderDocId);
|
setIsDisableDocId(HeaderDocId);
|
||||||
@@ -511,9 +518,7 @@ function UserProfile() {
|
|||||||
<div className="flex justify-between items-center py-2">
|
<div className="flex justify-between items-center py-2">
|
||||||
<span
|
<span
|
||||||
className={
|
className={
|
||||||
isSubscribe
|
isTeam ? "font-semibold" : "font-semibold text-gray-300"
|
||||||
? "font-semibold"
|
|
||||||
: "font-semibold text-gray-300"
|
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
Disable DocumentId :{" "}
|
Disable DocumentId :{" "}
|
||||||
@@ -522,17 +527,17 @@ function UserProfile() {
|
|||||||
"https://docs.opensignlabs.com/docs/help/Settings/disabledocumentid"
|
"https://docs.opensignlabs.com/docs/help/Settings/disabledocumentid"
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
{!isSubscribe && isEnableSubscription && <Upgrade />}
|
{!isTeam && isEnableSubscription && <Upgrade />}
|
||||||
</span>
|
</span>
|
||||||
<label
|
<label
|
||||||
className={`${
|
className={`${
|
||||||
isSubscribe
|
isTeam
|
||||||
? `${editmode ? "cursor-pointer" : ""}`
|
? `${editmode ? "cursor-pointer" : ""}`
|
||||||
: "pointer-events-none opacity-50"
|
: "pointer-events-none opacity-50"
|
||||||
} relative block items-center mb-0`}
|
} relative block items-center mb-0`}
|
||||||
>
|
>
|
||||||
<input
|
<input
|
||||||
disabled={editmode ? false : true}
|
disabled={isTeam ? false : true}
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
className="op-toggle transition-all checked:[--tglbg:#3368ff] checked:bg-white"
|
className="op-toggle transition-all checked:[--tglbg:#3368ff] checked:bg-white"
|
||||||
checked={isDisableDocId}
|
checked={isDisableDocId}
|
||||||
|
|||||||
@@ -145,7 +145,7 @@ const ReportTable = (props) => {
|
|||||||
try {
|
try {
|
||||||
const extUser = JSON.parse(localStorage.getItem("Extand_Class"))?.[0];
|
const extUser = JSON.parse(localStorage.getItem("Extand_Class"))?.[0];
|
||||||
if (extUser?.OrganizationId?.objectId) {
|
if (extUser?.OrganizationId?.objectId) {
|
||||||
const teamtRes = await Parse.Cloud.run("getteams");
|
const teamtRes = await Parse.Cloud.run("getteams", { active: true });
|
||||||
if (teamtRes.length > 0) {
|
if (teamtRes.length > 0) {
|
||||||
const _teamRes = JSON.parse(JSON.stringify(teamtRes));
|
const _teamRes = JSON.parse(JSON.stringify(teamtRes));
|
||||||
const formatedList = _teamRes.map((x) => ({
|
const formatedList = _teamRes.map((x) => ({
|
||||||
|
|||||||
@@ -7,24 +7,26 @@ const ValidateRoute = () => {
|
|||||||
try {
|
try {
|
||||||
// Use the session token to validate the user
|
// Use the session token to validate the user
|
||||||
const userQuery = new Parse.Query(Parse.User);
|
const userQuery = new Parse.Query(Parse.User);
|
||||||
const user = await userQuery.get(Parse.User.current().id, {
|
const user = await userQuery.get(Parse?.User?.current()?.id, {
|
||||||
sessionToken: localStorage.getItem("accesstoken")
|
sessionToken: localStorage.getItem("accesstoken")
|
||||||
});
|
});
|
||||||
if (!user) {
|
if (!user) {
|
||||||
handlelogout();
|
handlelogout();
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
console.log("err in validate route", error);
|
||||||
handlelogout();
|
handlelogout();
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
}, []);
|
}, []);
|
||||||
const handlelogout = async () => {
|
const handlelogout = async () => {
|
||||||
try {
|
try {
|
||||||
Parse.User.logOut();
|
// if (Parse?.User?.current()) {
|
||||||
|
// Parse?.User?.logOut();
|
||||||
|
// }
|
||||||
localStorage.removeItem("accesstoken");
|
localStorage.removeItem("accesstoken");
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log("err ", err);
|
console.log("err ", err);
|
||||||
} finally {
|
|
||||||
localStorage.removeItem("accesstoken");
|
localStorage.removeItem("accesstoken");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# Use an official Node runtime as the base image
|
# Use an official Node runtime as the base image
|
||||||
FROM node:18
|
FROM node:20
|
||||||
|
|
||||||
# Set the working directory inside the container
|
# Set the working directory inside the container
|
||||||
WORKDIR /usr/src/app
|
WORKDIR /usr/src/app
|
||||||
|
|||||||
@@ -58,6 +58,8 @@ import updateOrganization from './parsefunction/updateOrganization.js';
|
|||||||
import getTeams from './parsefunction/getTeams.js';
|
import getTeams from './parsefunction/getTeams.js';
|
||||||
import addTeam from './parsefunction/addTeam.js';
|
import addTeam from './parsefunction/addTeam.js';
|
||||||
import updateTeam from './parsefunction/updateTeam.js';
|
import updateTeam from './parsefunction/updateTeam.js';
|
||||||
|
import getOrgAdmins from './parsefunction/getOrgAdmins.js';
|
||||||
|
import getAllUserTeamByOrg from './parsefunction/getAllUserTeamByOrg.js';
|
||||||
|
|
||||||
// This afterSave function triggers after an object is added or updated in the specified class, allowing for post-processing logic.
|
// This afterSave function triggers after an object is added or updated in the specified class, allowing for post-processing logic.
|
||||||
Parse.Cloud.afterSave('contracts_Document', DocumentAftersave);
|
Parse.Cloud.afterSave('contracts_Document', DocumentAftersave);
|
||||||
@@ -125,3 +127,5 @@ Parse.Cloud.define('updateorganization', updateOrganization);
|
|||||||
Parse.Cloud.define('getteams', getTeams);
|
Parse.Cloud.define('getteams', getTeams);
|
||||||
Parse.Cloud.define('addteam', addTeam);
|
Parse.Cloud.define('addteam', addTeam);
|
||||||
Parse.Cloud.define('updateteam', updateTeam);
|
Parse.Cloud.define('updateteam', updateTeam);
|
||||||
|
Parse.Cloud.define('getorgadmins', getOrgAdmins);
|
||||||
|
Parse.Cloud.define('getalluserteambyorg', getAllUserTeamByOrg);
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ async function DocumentAftersave(request) {
|
|||||||
console.log('new entry is insert in contracts_Document');
|
console.log('new entry is insert in contracts_Document');
|
||||||
const createdAt = request.object.get('createdAt');
|
const createdAt = request.object.get('createdAt');
|
||||||
const Folder = request.object.get('Type');
|
const Folder = request.object.get('Type');
|
||||||
const ip = request?.headers?.['x-real-ip'] || '';
|
const ip = request?.headers?.['x-real-ip'] || request.object?.get('OriginIp') || '';
|
||||||
if (createdAt && Folder === undefined) {
|
if (createdAt && Folder === undefined) {
|
||||||
// console.log("IN If condition")
|
// console.log("IN If condition")
|
||||||
const TimeToCompleteDays = request.object.get('TimeToCompleteDays') || 15;
|
const TimeToCompleteDays = request.object.get('TimeToCompleteDays') || 15;
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ async function GetPublicTemplate(request) {
|
|||||||
});
|
});
|
||||||
templatQuery.descending('updatedAt');
|
templatQuery.descending('updatedAt');
|
||||||
templatQuery.equalTo('IsPublic', true);
|
templatQuery.equalTo('IsPublic', true);
|
||||||
|
templatQuery.notEqualTo('IsArchive', true);
|
||||||
const getTemplate = await templatQuery.find({ useMasterKey: true });
|
const getTemplate = await templatQuery.find({ useMasterKey: true });
|
||||||
|
|
||||||
const extend_Res = await Parse.Cloud.run('getUserDetails', {
|
const extend_Res = await Parse.Cloud.run('getUserDetails', {
|
||||||
|
|||||||
@@ -54,13 +54,14 @@ const createDocumentFromTemplate = async (template, existContact, index) => {
|
|||||||
object.set('Name', template?.Name);
|
object.set('Name', template?.Name);
|
||||||
object.set('Description', template?.Description);
|
object.set('Description', template?.Description);
|
||||||
object.set('Note', template?.Note);
|
object.set('Note', template?.Note);
|
||||||
object.set('TimeToCompleteDays', template.TimeToCompleteDays || 15);
|
object.set('TimeToCompleteDays', template?.TimeToCompleteDays || 15);
|
||||||
object.set('SendinOrder', template?.SendinOrder);
|
object.set('SendinOrder', template?.SendinOrder);
|
||||||
object.set('AutomaticReminders', template.AutomaticReminders);
|
object.set('AutomaticReminders', template?.AutomaticReminders || false);
|
||||||
object.set('RemindOnceInEvery', template?.RemindOnceInEvery);
|
object.set('RemindOnceInEvery', template?.RemindOnceInEvery || 5);
|
||||||
object.set('URL', template?.URL);
|
object.set('URL', template?.URL);
|
||||||
object.set('CreatedBy', template?.CreatedBy);
|
object.set('CreatedBy', template?.CreatedBy);
|
||||||
object.set('ExtUserPtr', template?.ExtUserPtr);
|
object.set('ExtUserPtr', template?.ExtUserPtr);
|
||||||
|
object.set('OriginIp', template?.OriginIp || '');
|
||||||
let signers = template?.Signers || [];
|
let signers = template?.Signers || [];
|
||||||
const signerobj = {
|
const signerobj = {
|
||||||
__type: 'Pointer',
|
__type: 'Pointer',
|
||||||
@@ -212,11 +213,11 @@ const sendMailToAllSigners = async docId => {
|
|||||||
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'User not found.');
|
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'User not found.');
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log('err in create document from template', err);
|
console.log('error in get partners_Tenant class details', err);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log('err in create document from template', err);
|
console.log('error in sendMailToAllSigners function', err);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -5,13 +5,15 @@ export default async function TemplateAfterSave(request) {
|
|||||||
// update acl of New Document If There are signers present in array
|
// update acl of New Document If There are signers present in array
|
||||||
const signers = request.object.get('Signers');
|
const signers = request.object.get('Signers');
|
||||||
const AutoReminder = request?.object?.get('AutomaticReminders') || false;
|
const AutoReminder = request?.object?.get('AutomaticReminders') || false;
|
||||||
|
const ip = request?.headers?.['x-real-ip'] || '';
|
||||||
if (AutoReminder) {
|
if (AutoReminder) {
|
||||||
const RemindOnceInEvery = request?.object?.get('RemindOnceInEvery') || 5;
|
const RemindOnceInEvery = request?.object?.get('RemindOnceInEvery') || 5;
|
||||||
const ReminderDate = new Date(request?.object?.get('createdAt'));
|
const ReminderDate = new Date(request?.object?.get('createdAt'));
|
||||||
ReminderDate.setDate(ReminderDate.getDate() + RemindOnceInEvery);
|
ReminderDate.setDate(ReminderDate.getDate() + RemindOnceInEvery);
|
||||||
request.object.set('NextReminderDate', ReminderDate);
|
request.object.set('NextReminderDate', ReminderDate);
|
||||||
await request.object.save(null, { useMasterKey: true });
|
|
||||||
}
|
}
|
||||||
|
request.object.set('OriginIp', ip);
|
||||||
|
await request.object.save(null, { useMasterKey: true });
|
||||||
if (signers && signers.length > 0) {
|
if (signers && signers.length > 0) {
|
||||||
await updateAclDoc(request.object.id);
|
await updateAclDoc(request.object.id);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -48,6 +48,15 @@ export default async function addOrganization(request) {
|
|||||||
objectId: resExt.id,
|
objectId: resExt.id,
|
||||||
});
|
});
|
||||||
const newResOrg = await newOrg.save(null, { useMasterKey: true });
|
const newResOrg = await newOrg.save(null, { useMasterKey: true });
|
||||||
|
const teamCls = new Parse.Object('contracts_Teams');
|
||||||
|
teamCls.set('Name', 'All Users');
|
||||||
|
teamCls.set('OrganizationId', {
|
||||||
|
__type: 'Pointer',
|
||||||
|
className: 'contracts_Organizations',
|
||||||
|
objectId: newResOrg.id,
|
||||||
|
});
|
||||||
|
teamCls.set('IsActive', true);
|
||||||
|
await teamCls.save(null, { useMasterKey: true });
|
||||||
if (newResOrg) {
|
if (newResOrg) {
|
||||||
return newResOrg;
|
return newResOrg;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
export default async function getAllUserTeamByOrg(request) {
|
||||||
|
const OrgId = request.params.orgId;
|
||||||
|
if (!request?.user) {
|
||||||
|
throw new Parse.Error(Parse.Error.INVALID_SESSION_TOKEN, 'User is not authenticated.');
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
const teamCls = new Parse.Query('contracts_Teams');
|
||||||
|
teamCls.equalTo('OrganizationId', {
|
||||||
|
__type: 'Pointer',
|
||||||
|
className: 'contracts_Organizations',
|
||||||
|
objectId: OrgId,
|
||||||
|
});
|
||||||
|
teamCls.equalTo('IsActive', true);
|
||||||
|
const teamRes = await teamCls.first({ useMasterKey: true });
|
||||||
|
if (teamRes) {
|
||||||
|
return teamRes;
|
||||||
|
} else {
|
||||||
|
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Team not found.');
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.log('err in getOrganizations', err);
|
||||||
|
const code = err?.code || 400;
|
||||||
|
const msg = err?.message || 'Something went wrong.';
|
||||||
|
throw new Parse.Error(code, msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
export default async function getOrgAdmins(req) {
|
||||||
|
if (!req?.user) {
|
||||||
|
throw new Parse.Error(Parse.Error.INVALID_SESSION_TOKEN, 'User is not authenticated.');
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
const extUser = new Parse.Query('contracts_Users');
|
||||||
|
extUser.equalTo('UserRole', 'contracts_OrgAdmin');
|
||||||
|
extUser.equalTo('CreatedBy', req?.user);
|
||||||
|
extUser.notEqualTo('UserId', req?.user);
|
||||||
|
extUser.include('TeamIds,OrganizationId');
|
||||||
|
extUser.descending('createdAt');
|
||||||
|
const userRes = await extUser.find({ useMasterKey: true });
|
||||||
|
if (userRes.length > 0) {
|
||||||
|
const _userRes = JSON.parse(JSON.stringify(userRes));
|
||||||
|
return _userRes;
|
||||||
|
} else {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.log('err in getOrgAdmins', err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,6 +2,7 @@ export default async function getOrganizations(request) {
|
|||||||
const limit = request.params.limit || 200;
|
const limit = request.params.limit || 200;
|
||||||
const skip = request.params.skip || 0;
|
const skip = request.params.skip || 0;
|
||||||
const extUserId = request.params.extUserId;
|
const extUserId = request.params.extUserId;
|
||||||
|
const activeOrgs = request.params.active;
|
||||||
if (!request?.user) {
|
if (!request?.user) {
|
||||||
throw new Parse.Error(Parse.Error.INVALID_SESSION_TOKEN, 'User is not authenticated.');
|
throw new Parse.Error(Parse.Error.INVALID_SESSION_TOKEN, 'User is not authenticated.');
|
||||||
}
|
}
|
||||||
@@ -17,7 +18,9 @@ export default async function getOrganizations(request) {
|
|||||||
className: 'contracts_Users',
|
className: 'contracts_Users',
|
||||||
objectId: extUserId,
|
objectId: extUserId,
|
||||||
});
|
});
|
||||||
orgQuery.equalTo('IsActive', true);
|
if (activeOrgs) {
|
||||||
|
orgQuery.equalTo('IsActive', true);
|
||||||
|
}
|
||||||
orgQuery.exclude('ExtUserId');
|
orgQuery.exclude('ExtUserId');
|
||||||
orgQuery.limit(limit);
|
orgQuery.limit(limit);
|
||||||
orgQuery.skip(skip);
|
orgQuery.skip(skip);
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
export default async function getTeams(request) {
|
export default async function getTeams(request) {
|
||||||
|
const activeTeams = request.params.active;
|
||||||
if (!request?.user) {
|
if (!request?.user) {
|
||||||
throw new Parse.Error(Parse.Error.INVALID_SESSION_TOKEN, 'User is not authenticated.');
|
throw new Parse.Error(Parse.Error.INVALID_SESSION_TOKEN, 'User is not authenticated.');
|
||||||
}
|
}
|
||||||
@@ -18,7 +19,9 @@ export default async function getTeams(request) {
|
|||||||
className: 'contracts_Organizations',
|
className: 'contracts_Organizations',
|
||||||
objectId: extUser.OrganizationId.objectId,
|
objectId: extUser.OrganizationId.objectId,
|
||||||
});
|
});
|
||||||
teamCls.equalTo('IsActive', true);
|
if (activeTeams) {
|
||||||
|
teamCls.equalTo('IsActive', true);
|
||||||
|
}
|
||||||
teamCls.descending('createdAt');
|
teamCls.descending('createdAt');
|
||||||
const teamRes = await teamCls.find({ useMasterKey: true });
|
const teamRes = await teamCls.find({ useMasterKey: true });
|
||||||
if (teamRes && teamRes.length > 0) {
|
if (teamRes && teamRes.length > 0) {
|
||||||
|
|||||||
@@ -33,7 +33,8 @@ export default async function updateTeam(request) {
|
|||||||
updateteam.set('Name', Name);
|
updateteam.set('Name', Name);
|
||||||
}
|
}
|
||||||
if (IsActive) {
|
if (IsActive) {
|
||||||
updateteam.set('IsActive', IsActive);
|
const active = IsActive === 'false' ? false : true;
|
||||||
|
updateteam.set('IsActive', active);
|
||||||
}
|
}
|
||||||
const updateTeamRes = await updateteam.save(null, { useMasterKey: true });
|
const updateTeamRes = await updateteam.save(null, { useMasterKey: true });
|
||||||
return updateTeamRes;
|
return updateTeamRes;
|
||||||
|
|||||||
+32
@@ -0,0 +1,32 @@
|
|||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {Parse} Parse
|
||||||
|
*/
|
||||||
|
exports.up = async (Parse) => {
|
||||||
|
// TODO: set className here
|
||||||
|
const className = 'contracts_Template';
|
||||||
|
const schema = new Parse.Schema(className);
|
||||||
|
schema.addString('OriginIp');
|
||||||
|
|
||||||
|
// TODO: Set the schema here
|
||||||
|
// Example:
|
||||||
|
// schema.addString('name').addNumber('cash');
|
||||||
|
|
||||||
|
return schema.update();
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {Parse} Parse
|
||||||
|
*/
|
||||||
|
exports.down = async (Parse) => {
|
||||||
|
// TODO: set className here
|
||||||
|
const className = 'contracts_Template';
|
||||||
|
const schema = new Parse.Schema(className);
|
||||||
|
schema.deleteField('OriginIp');
|
||||||
|
// TODO: Set the schema here
|
||||||
|
// Example:
|
||||||
|
// schema.deleteField('name').deleteField('cash');
|
||||||
|
|
||||||
|
return schema.update();
|
||||||
|
};
|
||||||
@@ -5,7 +5,7 @@ FROM mongo:latest
|
|||||||
RUN mkdir -p /docker-entrypoint-initdb.d
|
RUN mkdir -p /docker-entrypoint-initdb.d
|
||||||
|
|
||||||
# Copy default data JSON files to the initialization directory
|
# Copy default data JSON files to the initialization directory
|
||||||
COPY ./default-data/*.json /docker-entrypoint-initdb.d/
|
# COPY ./default-data/*.json /docker-entrypoint-initdb.d/
|
||||||
|
|
||||||
# Execute the initialization script during container startup
|
# Execute the initialization script during container startup
|
||||||
CMD ["mongod"]
|
CMD ["mongod"]
|
||||||
@@ -1,70 +0,0 @@
|
|||||||
[{
|
|
||||||
"_id": "lpm8ijrwod",
|
|
||||||
"name": "contracts_Admin",
|
|
||||||
"_wperm": [
|
|
||||||
"*"
|
|
||||||
],
|
|
||||||
"_rperm": [
|
|
||||||
"*"
|
|
||||||
],
|
|
||||||
"_acl": {
|
|
||||||
"*": {
|
|
||||||
"r": true,
|
|
||||||
"w": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"_created_at": {
|
|
||||||
"$date": "2023-09-19T09:25:20.205Z"
|
|
||||||
},
|
|
||||||
"_updated_at": {
|
|
||||||
"$date": "2023-09-28T09:47:03.968Z"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"_id": "Bz90QJSYMw",
|
|
||||||
"name": "contracts_Guest",
|
|
||||||
"_wperm": [
|
|
||||||
"ZhOmhqvw7S"
|
|
||||||
],
|
|
||||||
"_rperm": [
|
|
||||||
"*",
|
|
||||||
"ZhOmhqvw7S"
|
|
||||||
],
|
|
||||||
"_acl": {
|
|
||||||
"ZhOmhqvw7S": {
|
|
||||||
"w": true,
|
|
||||||
"r": true
|
|
||||||
},
|
|
||||||
"*": {
|
|
||||||
"r": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"_created_at": {
|
|
||||||
"$date": "2023-10-20T07:56:10.094Z"
|
|
||||||
},
|
|
||||||
"_updated_at": {
|
|
||||||
"$date": "2023-10-20T10:50:36.229Z"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"_id": "Tb14x04JK2",
|
|
||||||
"name": "contracts_User",
|
|
||||||
"_wperm": [
|
|
||||||
"*"
|
|
||||||
],
|
|
||||||
"_rperm": [
|
|
||||||
"*"
|
|
||||||
],
|
|
||||||
"_acl": {
|
|
||||||
"*": {
|
|
||||||
"r": true,
|
|
||||||
"w": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"_created_at": {
|
|
||||||
"$date": "2023-09-19T09:25:20.205Z"
|
|
||||||
},
|
|
||||||
"_updated_at": {
|
|
||||||
"$date": "2023-10-20T06:54:09.836Z"
|
|
||||||
}
|
|
||||||
}]
|
|
||||||
@@ -1,657 +0,0 @@
|
|||||||
[{
|
|
||||||
"_id": "_Role",
|
|
||||||
"objectId": "string",
|
|
||||||
"updatedAt": "date",
|
|
||||||
"createdAt": "date",
|
|
||||||
"name": "string",
|
|
||||||
"users": "relation<_User>",
|
|
||||||
"roles": "relation<_Role>",
|
|
||||||
"_metadata": {
|
|
||||||
"indexes": {
|
|
||||||
"name_1": {
|
|
||||||
"name": 1
|
|
||||||
},
|
|
||||||
"_id_": {
|
|
||||||
"_id": 1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"class_permissions": {
|
|
||||||
"get": {
|
|
||||||
"*": true
|
|
||||||
},
|
|
||||||
"find": {
|
|
||||||
"*": true
|
|
||||||
},
|
|
||||||
"count": {
|
|
||||||
"*": true
|
|
||||||
},
|
|
||||||
"create": {
|
|
||||||
"*": true
|
|
||||||
},
|
|
||||||
"update": {
|
|
||||||
"*": true
|
|
||||||
},
|
|
||||||
"delete": {
|
|
||||||
"*": true
|
|
||||||
},
|
|
||||||
"addField": {},
|
|
||||||
"protectedFields": {
|
|
||||||
"*": []
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"_id": "_Session",
|
|
||||||
"objectId": "string",
|
|
||||||
"updatedAt": "date",
|
|
||||||
"createdAt": "date",
|
|
||||||
"user": "*_User",
|
|
||||||
"installationId": "string",
|
|
||||||
"sessionToken": "string",
|
|
||||||
"expiresAt": "date",
|
|
||||||
"createdWith": "object",
|
|
||||||
"_metadata": {
|
|
||||||
"indexes": {
|
|
||||||
"_id_": {
|
|
||||||
"_id": 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"_id": "_User",
|
|
||||||
"objectId": "string",
|
|
||||||
"updatedAt": "date",
|
|
||||||
"createdAt": "date",
|
|
||||||
"username": "string",
|
|
||||||
"email": "string",
|
|
||||||
"emailVerified": "boolean",
|
|
||||||
"authData": "object",
|
|
||||||
"_metadata": {
|
|
||||||
"indexes": {
|
|
||||||
"phone_1": {
|
|
||||||
"phone": 1
|
|
||||||
},
|
|
||||||
"username_1": {
|
|
||||||
"username": 1
|
|
||||||
},
|
|
||||||
"case_insensitive_username": {
|
|
||||||
"username": 1
|
|
||||||
},
|
|
||||||
"email_1": {
|
|
||||||
"email": 1
|
|
||||||
},
|
|
||||||
"case_insensitive_email": {
|
|
||||||
"email": 1
|
|
||||||
},
|
|
||||||
"_id_": {
|
|
||||||
"_id": 1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"class_permissions": {
|
|
||||||
"get": {
|
|
||||||
"*": true
|
|
||||||
},
|
|
||||||
"find": {
|
|
||||||
"*": true
|
|
||||||
},
|
|
||||||
"count": {
|
|
||||||
"*": true
|
|
||||||
},
|
|
||||||
"create": {
|
|
||||||
"*": true
|
|
||||||
},
|
|
||||||
"update": {
|
|
||||||
"*": true
|
|
||||||
},
|
|
||||||
"delete": {
|
|
||||||
"*": true
|
|
||||||
},
|
|
||||||
"addField": {},
|
|
||||||
"protectedFields": {
|
|
||||||
"*": [
|
|
||||||
"email"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"name": "string",
|
|
||||||
"phone": "string",
|
|
||||||
"ProfilePic": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"_id": "contracts_Contactbook",
|
|
||||||
"objectId": "string",
|
|
||||||
"updatedAt": "date",
|
|
||||||
"createdAt": "date",
|
|
||||||
"Phone": "string",
|
|
||||||
"Email": "string",
|
|
||||||
"Name": "string",
|
|
||||||
"UserRole": "string",
|
|
||||||
"UserId": "*_User",
|
|
||||||
"CreatedBy": "*_User",
|
|
||||||
"_metadata": {
|
|
||||||
"indexes": {
|
|
||||||
"_id_": {
|
|
||||||
"_id": 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"TenantId": "*partners_Tenant",
|
|
||||||
"TourStatus": "array"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"_id": "contracts_Document",
|
|
||||||
"objectId": "string",
|
|
||||||
"updatedAt": "date",
|
|
||||||
"createdAt": "date",
|
|
||||||
"_metadata": {
|
|
||||||
"fields_options": {
|
|
||||||
"EnablePhoneOTP": {
|
|
||||||
"required": "false"
|
|
||||||
},
|
|
||||||
"IsCompleted": {
|
|
||||||
"required": "false",
|
|
||||||
"defaultValue": false
|
|
||||||
},
|
|
||||||
"IsDeclined": {
|
|
||||||
"required": "false",
|
|
||||||
"defaultValue": false
|
|
||||||
},
|
|
||||||
"SendinOrder": {
|
|
||||||
"required": "false",
|
|
||||||
"defaultValue": false
|
|
||||||
},
|
|
||||||
"ExpiryDate": {
|
|
||||||
"required": "false"
|
|
||||||
},
|
|
||||||
"Signers": {
|
|
||||||
"required": "false"
|
|
||||||
},
|
|
||||||
"Name": {
|
|
||||||
"required": "false"
|
|
||||||
},
|
|
||||||
"AgreementValidUntil": {
|
|
||||||
"required": "false"
|
|
||||||
},
|
|
||||||
"URL": {
|
|
||||||
"required": "false"
|
|
||||||
},
|
|
||||||
"RemindOnceInEvery": {
|
|
||||||
"required": "false",
|
|
||||||
"defaultValue": 5
|
|
||||||
},
|
|
||||||
"EnableEmailOTP": {
|
|
||||||
"required": "false"
|
|
||||||
},
|
|
||||||
"AutomaticReminders": {
|
|
||||||
"required": "false",
|
|
||||||
"defaultValue": false
|
|
||||||
},
|
|
||||||
"SentToOthers": {
|
|
||||||
"required": "false",
|
|
||||||
"defaultValue": false
|
|
||||||
},
|
|
||||||
"TimeToCompleteDays": {
|
|
||||||
"required": "false",
|
|
||||||
"defaultValue": 15
|
|
||||||
},
|
|
||||||
"Recipients": {
|
|
||||||
"required": "false"
|
|
||||||
},
|
|
||||||
"Type": {
|
|
||||||
"required": "false"
|
|
||||||
},
|
|
||||||
"Description": {
|
|
||||||
"required": "false"
|
|
||||||
},
|
|
||||||
"ExtUserPtr": {
|
|
||||||
"required": "false"
|
|
||||||
},
|
|
||||||
"SignedUrl": {
|
|
||||||
"required": "false"
|
|
||||||
},
|
|
||||||
"AuditTrail": {
|
|
||||||
"required": "false"
|
|
||||||
},
|
|
||||||
"Placeholders": {
|
|
||||||
"required": "false"
|
|
||||||
},
|
|
||||||
"Folder": {
|
|
||||||
"required": "false"
|
|
||||||
},
|
|
||||||
"Note": {
|
|
||||||
"required": false
|
|
||||||
},
|
|
||||||
"Clauses": {
|
|
||||||
"required": false
|
|
||||||
},
|
|
||||||
"AgreementDelta": {
|
|
||||||
"required": false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"indexes": {
|
|
||||||
"_id_": {
|
|
||||||
"_id": 1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"class_permissions": {
|
|
||||||
"get": {
|
|
||||||
"*": true
|
|
||||||
},
|
|
||||||
"find": {
|
|
||||||
"*": true
|
|
||||||
},
|
|
||||||
"count": {
|
|
||||||
"*": true
|
|
||||||
},
|
|
||||||
"create": {
|
|
||||||
"*": true
|
|
||||||
},
|
|
||||||
"update": {
|
|
||||||
"*": true
|
|
||||||
},
|
|
||||||
"delete": {
|
|
||||||
"*": true
|
|
||||||
},
|
|
||||||
"addField": {},
|
|
||||||
"protectedFields": {
|
|
||||||
"*": []
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"EnablePhoneOTP": "boolean",
|
|
||||||
"IsCompleted": "boolean",
|
|
||||||
"IsDeclined": "boolean",
|
|
||||||
"SendinOrder": "boolean",
|
|
||||||
"ExpiryDate": "date",
|
|
||||||
"Signers": "array",
|
|
||||||
"Name": "string",
|
|
||||||
"AgreementValidUntil": "date",
|
|
||||||
"URL": "string",
|
|
||||||
"RemindOnceInEvery": "number",
|
|
||||||
"EnableEmailOTP": "boolean",
|
|
||||||
"AutomaticReminders": "boolean",
|
|
||||||
"SentToOthers": "boolean",
|
|
||||||
"TimeToCompleteDays": "number",
|
|
||||||
"Recipients": "array",
|
|
||||||
"Type": "string",
|
|
||||||
"Description": "string",
|
|
||||||
"ExtUserPtr": "*contracts_Users",
|
|
||||||
"SignedUrl": "string",
|
|
||||||
"AuditTrail": "array",
|
|
||||||
"Placeholders": "array",
|
|
||||||
"Folder": "*contracts_Document",
|
|
||||||
"Note": "string",
|
|
||||||
"CreatedBy": "*_User",
|
|
||||||
"Clauses": "array",
|
|
||||||
"AgreementDelta": "array"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"_id": "contracts_Signature",
|
|
||||||
"objectId": "string",
|
|
||||||
"updatedAt": "date",
|
|
||||||
"createdAt": "date",
|
|
||||||
"_metadata": {
|
|
||||||
"fields_options": {
|
|
||||||
"SignatureName": {
|
|
||||||
"required": "false"
|
|
||||||
},
|
|
||||||
"SignText": {
|
|
||||||
"required": "false"
|
|
||||||
},
|
|
||||||
"ImageURL": {
|
|
||||||
"required": "false"
|
|
||||||
},
|
|
||||||
"SignTextFont": {
|
|
||||||
"required": "false"
|
|
||||||
},
|
|
||||||
"InitialsText": {
|
|
||||||
"required": "false"
|
|
||||||
},
|
|
||||||
"InitialsFont": {
|
|
||||||
"required": "false"
|
|
||||||
},
|
|
||||||
"UserId": {
|
|
||||||
"required": false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"indexes": {
|
|
||||||
"_id_": {
|
|
||||||
"_id": 1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"class_permissions": {
|
|
||||||
"get": {
|
|
||||||
"*": true
|
|
||||||
},
|
|
||||||
"find": {
|
|
||||||
"*": true
|
|
||||||
},
|
|
||||||
"count": {
|
|
||||||
"*": true
|
|
||||||
},
|
|
||||||
"create": {
|
|
||||||
"*": true
|
|
||||||
},
|
|
||||||
"update": {
|
|
||||||
"*": true
|
|
||||||
},
|
|
||||||
"delete": {
|
|
||||||
"*": true
|
|
||||||
},
|
|
||||||
"addField": {},
|
|
||||||
"protectedFields": {
|
|
||||||
"*": []
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"SignatureName": "string",
|
|
||||||
"SignText": "string",
|
|
||||||
"ImageURL": "string",
|
|
||||||
"SignTextFont": "string",
|
|
||||||
"InitialsText": "string",
|
|
||||||
"InitialsFont": "string",
|
|
||||||
"Initials": "string",
|
|
||||||
"UserId": "*_User"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"_id": "contracts_Users",
|
|
||||||
"objectId": "string",
|
|
||||||
"updatedAt": "date",
|
|
||||||
"createdAt": "date",
|
|
||||||
"_metadata": {
|
|
||||||
"fields_options": {
|
|
||||||
"Name": {
|
|
||||||
"required": "false"
|
|
||||||
},
|
|
||||||
"Phone": {
|
|
||||||
"required": "false"
|
|
||||||
},
|
|
||||||
"JobTitle": {
|
|
||||||
"required": "false"
|
|
||||||
},
|
|
||||||
"Email": {
|
|
||||||
"required": "false"
|
|
||||||
},
|
|
||||||
"Company": {
|
|
||||||
"required": "false"
|
|
||||||
},
|
|
||||||
"UserId": {
|
|
||||||
"required": "false"
|
|
||||||
},
|
|
||||||
"TenantId": {
|
|
||||||
"required": "false"
|
|
||||||
},
|
|
||||||
"TourStatus": {
|
|
||||||
"required": false
|
|
||||||
},
|
|
||||||
"IsContactEntry": {
|
|
||||||
"required": false,
|
|
||||||
"defaultValue": false
|
|
||||||
},
|
|
||||||
"ShareWithTeam": {
|
|
||||||
"required": false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"indexes": {
|
|
||||||
"_id_": {
|
|
||||||
"_id": 1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"class_permissions": {
|
|
||||||
"get": {
|
|
||||||
"*": true
|
|
||||||
},
|
|
||||||
"find": {
|
|
||||||
"*": true
|
|
||||||
},
|
|
||||||
"count": {
|
|
||||||
"*": true
|
|
||||||
},
|
|
||||||
"create": {
|
|
||||||
"*": true
|
|
||||||
},
|
|
||||||
"update": {
|
|
||||||
"*": true
|
|
||||||
},
|
|
||||||
"delete": {
|
|
||||||
"*": true
|
|
||||||
},
|
|
||||||
"addField": {},
|
|
||||||
"protectedFields": {
|
|
||||||
"*": []
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Name": "string",
|
|
||||||
"Phone": "string",
|
|
||||||
"JobTitle": "string",
|
|
||||||
"Email": "string",
|
|
||||||
"Company": "string",
|
|
||||||
"UserId": "*_User",
|
|
||||||
"TenantId": "*partners_Tenant",
|
|
||||||
"TourStatus": "array",
|
|
||||||
"Plan": "object",
|
|
||||||
"UserRole": "string",
|
|
||||||
"Next_billing_date": "date",
|
|
||||||
"Customer_id": "string",
|
|
||||||
"Subscription_id": "string",
|
|
||||||
"CreatedBy": "*_User",
|
|
||||||
"IsContactEntry": "boolean",
|
|
||||||
"ShareWithTeam": "boolean"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"_id": "partners_DataFiles",
|
|
||||||
"objectId": "string",
|
|
||||||
"updatedAt": "date",
|
|
||||||
"createdAt": "date",
|
|
||||||
"FileSize": "number",
|
|
||||||
"FileUrl": "string",
|
|
||||||
"_metadata": {
|
|
||||||
"indexes": {
|
|
||||||
"_id_": {
|
|
||||||
"_id": 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"_id": "partners_Subscriptions",
|
|
||||||
"objectId": "string",
|
|
||||||
"updatedAt": "date",
|
|
||||||
"createdAt": "date"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"_id": "partners_Tenant",
|
|
||||||
"objectId": "string",
|
|
||||||
"updatedAt": "date",
|
|
||||||
"createdAt": "date",
|
|
||||||
"EmailAddress": "string",
|
|
||||||
"TenantName": "string",
|
|
||||||
"IsActive": "boolean",
|
|
||||||
"CreatedBy": "*_User",
|
|
||||||
"ContactNumber": "string",
|
|
||||||
"UserId": "*_User",
|
|
||||||
"_metadata": {
|
|
||||||
"indexes": {
|
|
||||||
"_id_": {
|
|
||||||
"_id": 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"_id": "partners_TenantCredits",
|
|
||||||
"objectId": "string",
|
|
||||||
"updatedAt": "date",
|
|
||||||
"createdAt": "date",
|
|
||||||
"usedStorage": "number",
|
|
||||||
"PartnersTenant": "*partners_Tenant",
|
|
||||||
"_metadata": {
|
|
||||||
"indexes": {
|
|
||||||
"_id_": {
|
|
||||||
"_id": 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"_id": "w_appinfo",
|
|
||||||
"objectId": "string",
|
|
||||||
"updatedAt": "date",
|
|
||||||
"createdAt": "date",
|
|
||||||
"orgId": "string",
|
|
||||||
"forgetpassFormId": "string",
|
|
||||||
"mainformObjId": "string",
|
|
||||||
"applogo": "string",
|
|
||||||
"fbAppId": "string",
|
|
||||||
"appname": "string",
|
|
||||||
"loginFormId": "string",
|
|
||||||
"baseurl": "string",
|
|
||||||
"org_name": "string",
|
|
||||||
"signUpFormId": "string",
|
|
||||||
"defaultmenuid": "string",
|
|
||||||
"version": "string",
|
|
||||||
"formTitle": "string",
|
|
||||||
"googleClietId": "string",
|
|
||||||
"_metadata": {
|
|
||||||
"indexes": {
|
|
||||||
"_id_": {
|
|
||||||
"_id": 1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"class_permissions": {
|
|
||||||
"get": {
|
|
||||||
"*": true
|
|
||||||
},
|
|
||||||
"find": {
|
|
||||||
"*": true
|
|
||||||
},
|
|
||||||
"count": {
|
|
||||||
"*": true
|
|
||||||
},
|
|
||||||
"create": {
|
|
||||||
"*": true
|
|
||||||
},
|
|
||||||
"update": {
|
|
||||||
"*": true
|
|
||||||
},
|
|
||||||
"delete": {
|
|
||||||
"*": true
|
|
||||||
},
|
|
||||||
"addField": {
|
|
||||||
"*": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"fields_options": {
|
|
||||||
"uploadUrl": {
|
|
||||||
"required": false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"class": "string",
|
|
||||||
"LandingPageId": "string",
|
|
||||||
"accessType": "string",
|
|
||||||
"settings": "array",
|
|
||||||
"appTitle": "string",
|
|
||||||
"metaDescription": "string",
|
|
||||||
"branding_image": "string",
|
|
||||||
"fev_Icon": "string",
|
|
||||||
"defaultRole": "string",
|
|
||||||
"results": "array",
|
|
||||||
"loginType": "string",
|
|
||||||
"createdBy": "*_User",
|
|
||||||
"domain": "string",
|
|
||||||
"enableWebNotification": "boolean",
|
|
||||||
"allowWhiteLabel": "boolean",
|
|
||||||
"uploadUrl": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"_id": "w_dashboard",
|
|
||||||
"objectId": "string",
|
|
||||||
"updatedAt": "date",
|
|
||||||
"createdAt": "date",
|
|
||||||
"dbDescription": "string",
|
|
||||||
"dbTitle": "string",
|
|
||||||
"bgColor": "string",
|
|
||||||
"rows": "array",
|
|
||||||
"_metadata": {
|
|
||||||
"indexes": {
|
|
||||||
"_id_": {
|
|
||||||
"_id": 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"appId": "*w_appinfo"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"_id": "w_formV3",
|
|
||||||
"objectId": "string",
|
|
||||||
"updatedAt": "date",
|
|
||||||
"createdAt": "date",
|
|
||||||
"description": "string",
|
|
||||||
"uiSchema": "object",
|
|
||||||
"jsonSchema": "object",
|
|
||||||
"_metadata": {
|
|
||||||
"indexes": {
|
|
||||||
"_id_": {
|
|
||||||
"_id": 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"class": "string",
|
|
||||||
"success_message": "string",
|
|
||||||
"restrict_form_entry": "object",
|
|
||||||
"send_email": "boolean",
|
|
||||||
"restrict_form_access": "object",
|
|
||||||
"email_template": "object",
|
|
||||||
"form_permission": "string",
|
|
||||||
"success_redirect": "string",
|
|
||||||
"form_buttons": "object",
|
|
||||||
"buttons": "object",
|
|
||||||
"appId": "*w_appinfo",
|
|
||||||
"rpTitle": "string",
|
|
||||||
"rpDescription": "string",
|
|
||||||
"rpType": "string",
|
|
||||||
"bgColor": "string",
|
|
||||||
"rows": "array",
|
|
||||||
"redirect_id": "string",
|
|
||||||
"formACL": "object",
|
|
||||||
"userSchema": "object",
|
|
||||||
"isRegisterForm": "boolean",
|
|
||||||
"liveValidate": "boolean",
|
|
||||||
"noValidate": "boolean",
|
|
||||||
"validFunction": "string",
|
|
||||||
"help": "object",
|
|
||||||
"name": "string",
|
|
||||||
"phone": "string",
|
|
||||||
"email": "string",
|
|
||||||
"password": "string",
|
|
||||||
"username": "string",
|
|
||||||
"role": "string",
|
|
||||||
"helpText": "object",
|
|
||||||
"helpTextForm": "object",
|
|
||||||
"hideActionsAfter": "number",
|
|
||||||
"rules": "array",
|
|
||||||
"extraActions": "object",
|
|
||||||
"persistentFields": "array"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"_id": "w_menu",
|
|
||||||
"objectId": "string",
|
|
||||||
"updatedAt": "date",
|
|
||||||
"createdAt": "date",
|
|
||||||
"menuTitle": "string",
|
|
||||||
"menuType": "string",
|
|
||||||
"menuItems": "array",
|
|
||||||
"_metadata": {
|
|
||||||
"indexes": {
|
|
||||||
"_id_": {
|
|
||||||
"_id": 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"appId": "*w_appinfo"
|
|
||||||
}]
|
|
||||||
File diff suppressed because one or more lines are too long
@@ -1,104 +0,0 @@
|
|||||||
[{
|
|
||||||
"_id": "35KBoSgoAK",
|
|
||||||
"rows": [
|
|
||||||
{
|
|
||||||
"columns": [
|
|
||||||
{
|
|
||||||
"colxs": "12",
|
|
||||||
"colmd": "6",
|
|
||||||
"collg": "6",
|
|
||||||
"widget": {
|
|
||||||
"type": "Card",
|
|
||||||
"icon": "fas fa-signature",
|
|
||||||
"bgColor": "#f0058e",
|
|
||||||
"label": "Need your Signature",
|
|
||||||
"description": null,
|
|
||||||
"data": {
|
|
||||||
"id": "e04ee9dc-932d-6b80-0202-703fd154eb74",
|
|
||||||
"queryType": "",
|
|
||||||
"class": "contracts_Document",
|
|
||||||
"query": "where={\"$and\":[{\"AuditTrail.UserPtr\":{\"$ne\":{\"__type\":\"Pointer\",\"className\": \"contracts_Users\",\"objectId\":\"#objectId#\"}}},{\"AuditTrail.Activity\":{\"$ne\":\"Signed\"}}],\"Signers\":{\"$in\":[{\"__type\":\"Pointer\",\"className\":\"contracts_Users\",\"objectId\":\"#objectId#\"}]},\"IsDeclined\":{\"$ne\":true},\"IsCompleted\":{\"$ne\":true},\"Type\":{\"$ne\":\"Folder\"},\"Placeholders\":{\"$ne\":null},\"ExpiryDate\":{\"#*gt\":{\"__type\":\"#Date#\",\"iso\":\"#today#\"}}}&count=1",
|
|
||||||
"key": "count",
|
|
||||||
"Redirect_type": "Report",
|
|
||||||
"Redirect_id": "4Hhwbp482K",
|
|
||||||
"tourSection": "tourcard1",
|
|
||||||
"tourMessage": "This card shows the aggregate count of documents that are awaiting your signature. Clicking on this card will seamlessly take you to the detailed list of such documents for your review and action."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"colxs": "12",
|
|
||||||
"colmd": "6",
|
|
||||||
"collg": "6",
|
|
||||||
"widget": {
|
|
||||||
"type": "Card",
|
|
||||||
"icon": "fas fa-sign-out-alt",
|
|
||||||
"bgColor": "#g0058e",
|
|
||||||
"label": "Out for signatures",
|
|
||||||
"description": null,
|
|
||||||
"data": {
|
|
||||||
"id": "c1935cc0-28d4-3d73-b72a-8c1e3d18a17f",
|
|
||||||
"queryType": "",
|
|
||||||
"class": "contracts_Document",
|
|
||||||
"query": "where={\"IsDeclined\":{\"$ne\":true},\"IsCompleted\":{\"$ne\":true},\"Type\":{\"$ne\":\"Folder\"},\"Placeholders\":{\"$ne\":null},\"ExpiryDate\":{\"#*gt\":{\"__type\":\"#Date#\",\"iso\":\"#today#\"}}}&include=Signers,AuditTrail.UserPtr",
|
|
||||||
"key": "count",
|
|
||||||
"Redirect_type": "Report",
|
|
||||||
"Redirect_id": "1MwEuxLEkF",
|
|
||||||
"tourSection": "tourcard2",
|
|
||||||
"tourMessage": "This card indicates the total number of documents you've sent out for signatures. A single click on this card will navigate you to a comprehensive list of these documents, allowing you to monitor their status."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"colxs": "12",
|
|
||||||
"colmd": "6",
|
|
||||||
"collg": "6",
|
|
||||||
"widget": {
|
|
||||||
"type": "report",
|
|
||||||
"reportId": "5Go51Q7T8r",
|
|
||||||
"data": {
|
|
||||||
"tourSection": "tourreport1",
|
|
||||||
"tourMessage": "Here lies a curated list of documents that are pending your signature. These are requests from other users that require your immediate attention for completion."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"colxs": "12",
|
|
||||||
"colmd": "6",
|
|
||||||
"collg": "6",
|
|
||||||
"widget": {
|
|
||||||
"type": "report",
|
|
||||||
"reportId": "d9k3UfYHBc",
|
|
||||||
"data": {
|
|
||||||
"tourSection": "tourreport2",
|
|
||||||
"tourMessage": "This area displays all the documents you've dispatched for signatures from other parties. It serves as a real-time tracker for documents pending external approval."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"colxs": "12",
|
|
||||||
"colmd": "12",
|
|
||||||
"collg": "12",
|
|
||||||
"widget": {
|
|
||||||
"type": "report",
|
|
||||||
"reportId": "kC5mfynCi4",
|
|
||||||
"data": {
|
|
||||||
"tourSection": "tourreport3",
|
|
||||||
"tourMessage": "In this section, you'll find your draft documents awaiting completion. These are the documents you've initiated but haven't yet finalized for sending."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"_p_appId": "w_appinfo$aIPmIvMzGM",
|
|
||||||
"dbTitle": "Dashboard",
|
|
||||||
"dbDescription": null,
|
|
||||||
"bgColor": "#ffffff",
|
|
||||||
"_created_at": {
|
|
||||||
"$date": "2023-09-04T13:17:26.707Z"
|
|
||||||
},
|
|
||||||
"_updated_at": {
|
|
||||||
"$date": "2023-09-27T04:53:20.395Z"
|
|
||||||
}
|
|
||||||
}]
|
|
||||||
@@ -1,290 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"_id": "H9vRfEYKhT",
|
|
||||||
"_created_at": {
|
|
||||||
"$date": "2023-09-04T14:04:00.669Z"
|
|
||||||
},
|
|
||||||
"_updated_at": {
|
|
||||||
"$date": "2023-10-20T06:27:02.314Z"
|
|
||||||
},
|
|
||||||
"_p_appId": "w_appinfo$aIPmIvMzGM",
|
|
||||||
"menuItems": [
|
|
||||||
{
|
|
||||||
"icon": "fas fa-tachometer-alt",
|
|
||||||
"title": "Dashboard",
|
|
||||||
"target": "",
|
|
||||||
"pageType": "dashboard",
|
|
||||||
"description": "",
|
|
||||||
"objectId": "35KBoSgoAK"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"icon": "far fa-newspaper",
|
|
||||||
"title": "New Document",
|
|
||||||
"target": "_self",
|
|
||||||
"pageType": null,
|
|
||||||
"description": null,
|
|
||||||
"objectId": null,
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"icon": "fas fa-pen-nib",
|
|
||||||
"title": "Sign yourself",
|
|
||||||
"target": "_self",
|
|
||||||
"pageType": "form",
|
|
||||||
"description": "",
|
|
||||||
"objectId": "sHAnZphf69"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"icon": "fas fa-file-signature",
|
|
||||||
"title": "Request signatures",
|
|
||||||
"target": "_self",
|
|
||||||
"pageType": "form",
|
|
||||||
"description": "",
|
|
||||||
"objectId": "8mZzFxbG1z"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"icon": "fas fa-folder",
|
|
||||||
"title": "OpenSignDrive™",
|
|
||||||
"target": "_self",
|
|
||||||
"pageType": "mf",
|
|
||||||
"description": "",
|
|
||||||
"objectId": "remoteUrl=aHR0cHM6Ly9xaWstYWktb3JnLmdpdGh1Yi5pby9TaWduLU1pY3JvYXBwVjIvcmVtb3RlRW50cnkuanM=&moduleToLoad=AppRoutes&remoteName=signmicroapp/legadrive"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"icon": "fas fa-address-card",
|
|
||||||
"title": "Reports",
|
|
||||||
"target": "_self",
|
|
||||||
"pageType": null,
|
|
||||||
"description": "",
|
|
||||||
"objectId": null,
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"icon": "fas fa-signature",
|
|
||||||
"title": "Need your sign",
|
|
||||||
"target": "_self",
|
|
||||||
"pageType": "report",
|
|
||||||
"description": "",
|
|
||||||
"objectId": "4Hhwbp482K"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"icon": "fas fa-tasks",
|
|
||||||
"title": "In Progress",
|
|
||||||
"target": "_self",
|
|
||||||
"pageType": "report",
|
|
||||||
"description": "",
|
|
||||||
"objectId": "1MwEuxLEkF"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"icon": "fas fa-check-circle",
|
|
||||||
"title": "Completed",
|
|
||||||
"target": "_self",
|
|
||||||
"pageType": "report",
|
|
||||||
"description": "",
|
|
||||||
"objectId": "kQUoW4hUXz"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"icon": "fas fa-edit",
|
|
||||||
"title": "Drafts",
|
|
||||||
"target": "_self",
|
|
||||||
"pageType": "report",
|
|
||||||
"description": "",
|
|
||||||
"objectId": "ByHuevtCFY"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"icon": "fas fa-times-circle",
|
|
||||||
"title": "Declined",
|
|
||||||
"target": "_self",
|
|
||||||
"pageType": "report",
|
|
||||||
"description": "",
|
|
||||||
"objectId": "UPr2Fm5WY3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"icon": "fas fa-hourglass-end",
|
|
||||||
"title": "Expired",
|
|
||||||
"target": "_self",
|
|
||||||
"pageType": "report",
|
|
||||||
"description": "",
|
|
||||||
"objectId": "zNqBHXHsYH"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"icon": "fa-solid fa-address-book",
|
|
||||||
"title": "Contactbook",
|
|
||||||
"target": "_self",
|
|
||||||
"pageType": "report",
|
|
||||||
"description": "",
|
|
||||||
"objectId": "5KhaPr482K"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"icon": "fas fa-cog",
|
|
||||||
"title": "Settings",
|
|
||||||
"target": "_self",
|
|
||||||
"pageType": null,
|
|
||||||
"description": "",
|
|
||||||
"objectId": null,
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"icon": "fas fa-pen-fancy",
|
|
||||||
"title": "My Signature",
|
|
||||||
"target": "_self",
|
|
||||||
"pageType": "mf",
|
|
||||||
"description": "",
|
|
||||||
"objectId": "remoteUrl=aHR0cHM6Ly9xaWstYWktb3JnLmdpdGh1Yi5pby9TaWduLU1pY3JvYXBwVjIvcmVtb3RlRW50cnkuanM=&moduleToLoad=AppRoutes&remoteName=signmicroapp/managesign"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"menuTitle": "Default Menu",
|
|
||||||
"menuType": "Side Menu"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"_id": "VPh91h0ZHk",
|
|
||||||
"_created_at": {
|
|
||||||
"$date": "2023-09-04T14:16:15.424Z"
|
|
||||||
},
|
|
||||||
"_updated_at": {
|
|
||||||
"$date": "2023-10-20T06:25:59.660Z"
|
|
||||||
},
|
|
||||||
"_p_appId": "w_appinfo$aIPmIvMzGM",
|
|
||||||
"menuItems": [
|
|
||||||
{
|
|
||||||
"icon": "fas fa-tachometer-alt",
|
|
||||||
"title": "Dashboard",
|
|
||||||
"target": "",
|
|
||||||
"pageType": "dashboard",
|
|
||||||
"description": "",
|
|
||||||
"objectId": "35KBoSgoAK"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"icon": "far fa-newspaper",
|
|
||||||
"title": "New Document",
|
|
||||||
"target": "_self",
|
|
||||||
"pageType": null,
|
|
||||||
"description": null,
|
|
||||||
"objectId": null,
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"icon": "fas fa-pen-nib",
|
|
||||||
"title": "Sign yourself",
|
|
||||||
"target": "_self",
|
|
||||||
"pageType": "form",
|
|
||||||
"description": "",
|
|
||||||
"objectId": "sHAnZphf69"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"icon": "fas fa-file-signature",
|
|
||||||
"title": "Request signatures",
|
|
||||||
"target": "_self",
|
|
||||||
"pageType": "form",
|
|
||||||
"description": "",
|
|
||||||
"objectId": "8mZzFxbG1z"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"icon": "fas fa-folder",
|
|
||||||
"title": "OpenSignDrive™",
|
|
||||||
"target": "_self",
|
|
||||||
"pageType": "mf",
|
|
||||||
"description": "",
|
|
||||||
"objectId": "remoteUrl=aHR0cHM6Ly9xaWstYWktb3JnLmdpdGh1Yi5pby9TaWduLU1pY3JvYXBwVjIvcmVtb3RlRW50cnkuanM=&moduleToLoad=AppRoutes&remoteName=signmicroapp/legadrive"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"icon": "fas fa-address-card",
|
|
||||||
"title": "Reports",
|
|
||||||
"target": "_self",
|
|
||||||
"pageType": null,
|
|
||||||
"description": "",
|
|
||||||
"objectId": null,
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"icon": "fas fa-signature",
|
|
||||||
"title": "Need your sign",
|
|
||||||
"target": "_self",
|
|
||||||
"pageType": "report",
|
|
||||||
"description": "",
|
|
||||||
"objectId": "4Hhwbp482K"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"icon": "fas fa-tasks",
|
|
||||||
"title": "In Progress",
|
|
||||||
"target": "_self",
|
|
||||||
"pageType": "report",
|
|
||||||
"description": "",
|
|
||||||
"objectId": "1MwEuxLEkF"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"icon": "fas fa-check-circle",
|
|
||||||
"title": "Completed",
|
|
||||||
"target": "_self",
|
|
||||||
"pageType": "report",
|
|
||||||
"description": "",
|
|
||||||
"objectId": "kQUoW4hUXz"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"icon": "fas fa-edit",
|
|
||||||
"title": "Drafts",
|
|
||||||
"target": "_self",
|
|
||||||
"pageType": "report",
|
|
||||||
"description": "",
|
|
||||||
"objectId": "ByHuevtCFY"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"icon": "fas fa-times-circle",
|
|
||||||
"title": "Declined",
|
|
||||||
"target": "_self",
|
|
||||||
"pageType": "report",
|
|
||||||
"description": "",
|
|
||||||
"objectId": "UPr2Fm5WY3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"icon": "fas fa-hourglass-end",
|
|
||||||
"title": "Expired",
|
|
||||||
"target": "_self",
|
|
||||||
"pageType": "report",
|
|
||||||
"description": "",
|
|
||||||
"objectId": "zNqBHXHsYH"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"icon": "fa-solid fa-address-book",
|
|
||||||
"title": "Contactbook",
|
|
||||||
"target": "_self",
|
|
||||||
"pageType": "report",
|
|
||||||
"description": "",
|
|
||||||
"objectId": "5KhaPr482K"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"icon": "fas fa-cog",
|
|
||||||
"title": "Settings",
|
|
||||||
"target": "_self",
|
|
||||||
"pageType": null,
|
|
||||||
"description": "",
|
|
||||||
"objectId": null,
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"icon": "fas fa-pen-fancy",
|
|
||||||
"title": "My Signature",
|
|
||||||
"target": "_self",
|
|
||||||
"pageType": "mf",
|
|
||||||
"description": "",
|
|
||||||
"objectId": "remoteUrl=aHR0cHM6Ly9xaWstYWktb3JnLmdpdGh1Yi5pby9TaWduLU1pY3JvYXBwVjIvcmVtb3RlRW50cnkuanM=&moduleToLoad=AppRoutes&remoteName=signmicroapp/managesign"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"icon": "far fa-user",
|
|
||||||
"title": "Add User",
|
|
||||||
"target": "_self",
|
|
||||||
"pageType": "form",
|
|
||||||
"description": "",
|
|
||||||
"objectId": "lM0xRnM3iE"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"menuTitle": "Admin Menu",
|
|
||||||
"menuType": "Side Menu"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
+1
-2
@@ -28,9 +28,8 @@ services:
|
|||||||
image: opensign-mongo
|
image: opensign-mongo
|
||||||
volumes:
|
volumes:
|
||||||
- data-volume:/data/db
|
- data-volume:/data/db
|
||||||
- ./apps/mongo/mongo-init.sh:/docker-entrypoint-initdb.d/mongo-init.sh:ro
|
|
||||||
ports:
|
ports:
|
||||||
- "27017:27017"
|
- "27018:27017"
|
||||||
networks:
|
networks:
|
||||||
- app-network
|
- app-network
|
||||||
client:
|
client:
|
||||||
|
|||||||
Reference in New Issue
Block a user