Compare commits

..
23 Commits
Author SHA1 Message Date
AmolandGitHub a9ccb1a3e5 Update README.md 2025-02-09 00:59:35 +05:30
ZathielandGitHub f3d34b1d2c Merge pull request #1513 from OpenSignLabs/dependabot/npm_and_yarn/apps/OpenSign/npm_and_yarn-af93afb32e
build(deps): bump nanoid from 3.3.7 to 3.3.8 in /apps/OpenSign in the npm_and_yarn group
2024-12-14 02:29:22 +01:00
dependabot[bot]andGitHub 3f56aa0860 build(deps): bump nanoid in /apps/OpenSign in the npm_and_yarn group
Bumps the npm_and_yarn group in /apps/OpenSign with 1 update: [nanoid](https://github.com/ai/nanoid).


Updates `nanoid` from 3.3.7 to 3.3.8
- [Release notes](https://github.com/ai/nanoid/releases)
- [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ai/nanoid/compare/3.3.7...3.3.8)

---
updated-dependencies:
- dependency-name: nanoid
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-12 04:38:43 +00:00
prafull-opensignlabsandGitHub 4eeacbaaf1 Merge pull request #1502 from OpenSignLabs/dependabot/npm_and_yarn/apps/OpenSign/npm_and_yarn-86577ad91c
build(deps): bump the npm_and_yarn group in /apps/OpenSign with 2 updates
2024-12-12 10:07:09 +05:30
ZathielandGitHub 096a9e5736 Merge pull request #1505 from OpenSignLabs/dependabot/npm_and_yarn/apps/OpenSignServer/axios-1.7.9
build(deps): bump axios from 1.7.7 to 1.7.9 in /apps/OpenSignServer
2024-12-11 22:07:10 +01:00
ZathielandGitHub 4650660a26 Merge pull request #1507 from OpenSignLabs/dependabot/npm_and_yarn/apps/OpenSignServer/mongoose-8.8.4
build(deps): bump mongoose from 8.8.2 to 8.8.4 in /apps/OpenSignServer
2024-12-11 22:06:25 +01:00
dependabot[bot]andGitHub 9e6309644a build(deps): bump mongoose from 8.8.2 to 8.8.4 in /apps/OpenSignServer
Bumps [mongoose](https://github.com/Automattic/mongoose) from 8.8.2 to 8.8.4.
- [Release notes](https://github.com/Automattic/mongoose/releases)
- [Changelog](https://github.com/Automattic/mongoose/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Automattic/mongoose/compare/8.8.2...8.8.4)

---
updated-dependencies:
- dependency-name: mongoose
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-09 00:54:35 +00:00
dependabot[bot]andGitHub 14477a17ee build(deps): bump axios from 1.7.7 to 1.7.9 in /apps/OpenSignServer
Bumps [axios](https://github.com/axios/axios) from 1.7.7 to 1.7.9.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.7.7...v1.7.9)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-09 00:53:46 +00:00
dependabot[bot]andGitHub 7d3d618ff3 build(deps): bump the npm_and_yarn group
Bumps the npm_and_yarn group in /apps/OpenSign with 2 updates: [path-to-regexp](https://github.com/pillarjs/path-to-regexp) and [express](https://github.com/expressjs/express).


Updates `path-to-regexp` from 0.1.10 to 3.3.0
- [Release notes](https://github.com/pillarjs/path-to-regexp/releases)
- [Changelog](https://github.com/pillarjs/path-to-regexp/blob/master/History.md)
- [Commits](https://github.com/pillarjs/path-to-regexp/compare/v0.1.10...v3.3.0)

Updates `express` from 4.21.1 to 4.21.2
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/4.21.2/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.21.1...4.21.2)

---
updated-dependencies:
- dependency-name: path-to-regexp
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: express
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-05 22:50:29 +00:00
ZathielandGitHub 284cd277ea Merge pull request #1489 from OpenSignLabs/dependabot/npm_and_yarn/apps/OpenSignServer/aws-sdk/s3-request-presigner-3.700.0
build(deps): bump @aws-sdk/s3-request-presigner from 3.691.0 to 3.700.0 in /apps/OpenSignServer
2024-11-26 03:53:06 +01:00
ZathielandGitHub df61d752c8 Merge pull request #1486 from OpenSignLabs/dependabot/npm_and_yarn/apps/OpenSign/lottiefiles/dotlottie-react-0.10.0
build(deps): bump @lottiefiles/dotlottie-react from 0.9.3 to 0.10.0 in /apps/OpenSign
2024-11-26 03:52:16 +01:00
dependabot[bot]andGitHub 9def956929 build(deps): bump @aws-sdk/s3-request-presigner in /apps/OpenSignServer
Bumps [@aws-sdk/s3-request-presigner](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/packages/s3-request-presigner) from 3.691.0 to 3.700.0.
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/packages/s3-request-presigner/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.700.0/packages/s3-request-presigner)

---
updated-dependencies:
- dependency-name: "@aws-sdk/s3-request-presigner"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-26 02:50:17 +00:00
ZathielandGitHub 53aa5a26aa Merge pull request #1482 from OpenSignLabs/dependabot/npm_and_yarn/apps/OpenSignServer/mongoose-8.8.2
build(deps): bump mongoose from 8.8.1 to 8.8.2 in /apps/OpenSignServer
2024-11-26 03:50:10 +01:00
ZathielandGitHub 86cb5ccf78 Merge pull request #1483 from OpenSignLabs/dependabot/npm_and_yarn/apps/OpenSignServer/posthog-node-4.2.3
build(deps): bump posthog-node from 4.2.1 to 4.2.3 in /apps/OpenSignServer
2024-11-26 03:49:35 +01:00
ZathielandGitHub c8e91e5205 Merge pull request #1485 from OpenSignLabs/dependabot/npm_and_yarn/apps/OpenSignServer/aws-sdk/client-s3-3.699.0
build(deps): bump @aws-sdk/client-s3 from 3.691.0 to 3.699.0 in /apps/OpenSignServer
2024-11-26 03:48:45 +01:00
dependabot[bot]andGitHub 87cfb643f9 build(deps): bump @lottiefiles/dotlottie-react in /apps/OpenSign
Bumps [@lottiefiles/dotlottie-react](https://github.com/LottieFiles/dotlottie-web/tree/HEAD/packages/react) from 0.9.3 to 0.10.0.
- [Release notes](https://github.com/LottieFiles/dotlottie-web/releases)
- [Changelog](https://github.com/LottieFiles/dotlottie-web/blob/main/packages/react/CHANGELOG.md)
- [Commits](https://github.com/LottieFiles/dotlottie-web/commits/@lottiefiles/dotlottie-react@0.10.0/packages/react)

---
updated-dependencies:
- dependency-name: "@lottiefiles/dotlottie-react"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-26 02:47:29 +00:00
ZathielandGitHub 2f7bd75608 Merge pull request #1488 from OpenSignLabs/dependabot/npm_and_yarn/apps/OpenSign/react-pdf/renderer-4.1.4
build(deps): bump @react-pdf/renderer from 4.0.0 to 4.1.4 in /apps/OpenSign
2024-11-26 03:46:06 +01:00
ZathielandGitHub 930bac71a0 Merge pull request #1464 from OpenSignLabs/dependabot/npm_and_yarn/apps/OpenSign/tailwindcss-3.4.15
build(deps-dev): bump tailwindcss from 3.4.14 to 3.4.15 in /apps/OpenSign
2024-11-26 03:45:26 +01:00
dependabot[bot]andGitHub fcad7dc020 build(deps): bump @react-pdf/renderer in /apps/OpenSign
Bumps [@react-pdf/renderer](https://github.com/diegomura/react-pdf/tree/HEAD/packages/renderer) from 4.0.0 to 4.1.4.
- [Release notes](https://github.com/diegomura/react-pdf/releases)
- [Changelog](https://github.com/diegomura/react-pdf/blob/master/packages/renderer/CHANGELOG.md)
- [Commits](https://github.com/diegomura/react-pdf/commits/@react-pdf/renderer@4.1.4/packages/renderer)

---
updated-dependencies:
- dependency-name: "@react-pdf/renderer"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-25 01:04:36 +00:00
dependabot[bot]andGitHub bada731d16 build(deps): bump @aws-sdk/client-s3 in /apps/OpenSignServer
Bumps [@aws-sdk/client-s3](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-s3) from 3.691.0 to 3.699.0.
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-s3/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.699.0/clients/client-s3)

---
updated-dependencies:
- dependency-name: "@aws-sdk/client-s3"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-25 00:58:13 +00:00
dependabot[bot]andGitHub fd5e86edf2 build(deps): bump posthog-node in /apps/OpenSignServer
Bumps [posthog-node](https://github.com/PostHog/posthog-js-lite/tree/HEAD/posthog-node) from 4.2.1 to 4.2.3.
- [Release notes](https://github.com/PostHog/posthog-js-lite/releases)
- [Changelog](https://github.com/PostHog/posthog-js-lite/blob/main/posthog-node/CHANGELOG.md)
- [Commits](https://github.com/PostHog/posthog-js-lite/commits/posthog-node-v4.2.3/posthog-node)

---
updated-dependencies:
- dependency-name: posthog-node
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-25 00:57:28 +00:00
dependabot[bot]andGitHub 1a886261ef build(deps): bump mongoose from 8.8.1 to 8.8.2 in /apps/OpenSignServer
Bumps [mongoose](https://github.com/Automattic/mongoose) from 8.8.1 to 8.8.2.
- [Release notes](https://github.com/Automattic/mongoose/releases)
- [Changelog](https://github.com/Automattic/mongoose/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Automattic/mongoose/compare/8.8.1...8.8.2)

---
updated-dependencies:
- dependency-name: mongoose
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-25 00:57:21 +00:00
dependabot[bot]andGitHub 657ab13a04 build(deps-dev): bump tailwindcss in /apps/OpenSign
Bumps [tailwindcss](https://github.com/tailwindlabs/tailwindcss) from 3.4.14 to 3.4.15.
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/v3.4.15/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/compare/v3.4.14...v3.4.15)

---
updated-dependencies:
- dependency-name: tailwindcss
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-18 00:18:58 +00:00
21 changed files with 846 additions and 1105 deletions
+2
View File
@@ -158,3 +158,5 @@ We would like to thank all our contributors and users for their support and feed
<!-- ALL-CONTRIBUTORS-LIST:END --> <!-- ALL-CONTRIBUTORS-LIST:END -->
This project is tested with BrowserStack.
+73 -80
View File
@@ -9,10 +9,10 @@
"version": "0.1.0", "version": "0.1.0",
"dependencies": { "dependencies": {
"@formkit/auto-animate": "^0.8.2", "@formkit/auto-animate": "^0.8.2",
"@lottiefiles/dotlottie-react": "^0.9.3", "@lottiefiles/dotlottie-react": "^0.10.0",
"@pdf-lib/fontkit": "^1.1.1", "@pdf-lib/fontkit": "^1.1.1",
"@radix-ui/themes": "^3.1.6", "@radix-ui/themes": "^3.1.6",
"@react-pdf/renderer": "^4.0.0", "@react-pdf/renderer": "^4.1.4",
"@reduxjs/toolkit": "^2.3.0", "@reduxjs/toolkit": "^2.3.0",
"axios": "^1.7.7", "axios": "^1.7.7",
"file-saver": "^2.0.5", "file-saver": "^2.0.5",
@@ -84,7 +84,7 @@
"postcss": "^8.4.49", "postcss": "^8.4.49",
"prettier": "^3.3.3", "prettier": "^3.3.3",
"pretty-quick": "^4.0.0", "pretty-quick": "^4.0.0",
"tailwindcss": "^3.4.14", "tailwindcss": "^3.4.15",
"terser-webpack-plugin": "^5.3.10", "terser-webpack-plugin": "^5.3.10",
"webpack-cli": "^5.1.4" "webpack-cli": "^5.1.4"
}, },
@@ -3649,11 +3649,12 @@
"integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==" "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw=="
}, },
"node_modules/@lottiefiles/dotlottie-react": { "node_modules/@lottiefiles/dotlottie-react": {
"version": "0.9.3", "version": "0.10.0",
"resolved": "https://registry.npmjs.org/@lottiefiles/dotlottie-react/-/dotlottie-react-0.9.3.tgz", "resolved": "https://registry.npmjs.org/@lottiefiles/dotlottie-react/-/dotlottie-react-0.10.0.tgz",
"integrity": "sha512-x4xQlFFulAF/nG044VNMwaXWk8ehg/KEHXpMxGB+L5gv3qohjxv/I7/erHyfhWY9y6C/VMl+PiWZbT54W8+lUQ==", "integrity": "sha512-krPJUIqpt7VluWc0aRWk0lYScCDSlbCpWvImU5eyJZeyroZ87bZYb+YlgUbtLHZ77DWmIBl4kGMhupU8+ugPSw==",
"license": "MIT",
"dependencies": { "dependencies": {
"@lottiefiles/dotlottie-web": "0.36.1" "@lottiefiles/dotlottie-web": "0.37.0"
}, },
"peerDependencies": { "peerDependencies": {
"react": "^16.8.0 || ^17.0.0 || ^18.0.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
@@ -3661,9 +3662,10 @@
} }
}, },
"node_modules/@lottiefiles/dotlottie-web": { "node_modules/@lottiefiles/dotlottie-web": {
"version": "0.36.1", "version": "0.37.0",
"resolved": "https://registry.npmjs.org/@lottiefiles/dotlottie-web/-/dotlottie-web-0.36.1.tgz", "resolved": "https://registry.npmjs.org/@lottiefiles/dotlottie-web/-/dotlottie-web-0.37.0.tgz",
"integrity": "sha512-KvxOH5Msk0Ivqpgq4p1DGo1IG2XPX4kEVkhssTaOUEvoeCxDLru+DlbUzwG8b5JcJwEBmrAMzCNzCTmn+uMFxQ==" "integrity": "sha512-dCtQkYlq9GDswJNmcIlUaAskxrsJ56SRhY8woNsHuIPWy+tfP9tgf1fA9fZ1Oj72DVdyYkK0DxLk58HhBrmpBQ==",
"license": "MIT"
}, },
"node_modules/@mapbox/node-pre-gyp": { "node_modules/@mapbox/node-pre-gyp": {
"version": "1.0.11", "version": "1.0.11",
@@ -6079,42 +6081,39 @@
} }
}, },
"node_modules/@react-pdf/font": { "node_modules/@react-pdf/font": {
"version": "3.0.0", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/@react-pdf/font/-/font-3.0.0.tgz", "resolved": "https://registry.npmjs.org/@react-pdf/font/-/font-3.0.1.tgz",
"integrity": "sha512-/SYEud06maGQiAD0H6J5xnqigKm/FpLKqFYH6+2OjQ2tb32nnKqwqL3pS7glDTFYBJ11B6fVgSNex6tc1V8UDA==", "integrity": "sha512-s+0xrQabGoYDDZwVpz8PXp1ylwabqiMhzfyetvxBqjDuQ15PuoSkmUkKUOkfDzauuAqs0MLMvt+Pcv+NioLfzw==",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
"@react-pdf/types": "^2.7.0", "@react-pdf/types": "^2.7.0",
"cross-fetch": "^3.1.5",
"fontkit": "^2.0.2", "fontkit": "^2.0.2",
"is-url": "^1.2.4" "is-url": "^1.2.4"
} }
}, },
"node_modules/@react-pdf/image": { "node_modules/@react-pdf/image": {
"version": "3.0.0", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/@react-pdf/image/-/image-3.0.0.tgz", "resolved": "https://registry.npmjs.org/@react-pdf/image/-/image-3.0.1.tgz",
"integrity": "sha512-l4HV5NutPw52Wbuvxol0BiFc6TkKXK/kJNwVIElphw47nwfueLEjIfBxRTuOeHmpdibvEh3a5STwYmMTQjXSxg==", "integrity": "sha512-Hd5F1LzjuzG4bL/ytaOYxwN/5ip8oFBYDHdpccOfYY87J/Ca7AL31SsuneLk9DtnwNM1BSAKXtBo/WDFY3r57A==",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
"@react-pdf/png-js": "^3.0.0", "@react-pdf/png-js": "^3.0.0",
"cross-fetch": "^3.1.5",
"jay-peg": "^1.1.0" "jay-peg": "^1.1.0"
} }
}, },
"node_modules/@react-pdf/layout": { "node_modules/@react-pdf/layout": {
"version": "4.0.0", "version": "4.1.2",
"resolved": "https://registry.npmjs.org/@react-pdf/layout/-/layout-4.0.0.tgz", "resolved": "https://registry.npmjs.org/@react-pdf/layout/-/layout-4.1.2.tgz",
"integrity": "sha512-BNipDwULk9ehvf0V5HLrP2QIujkfj2LzHs8yfCQ/Z8TkAX6dEt1AgwDttBpBLfzcu8w8HFjgpLR1TNOTXiOsAQ==", "integrity": "sha512-BG2MR1R0loFk+CVBLse15NRrTSaEc+0aK1isK9DnER30H5rYgbMDhFqqqr8g+YEqP04dhYkeCjhTWP172VPyNg==",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
"@react-pdf/fns": "3.0.0", "@react-pdf/fns": "3.0.0",
"@react-pdf/image": "^3.0.0", "@react-pdf/image": "^3.0.1",
"@react-pdf/pdfkit": "^4.0.0", "@react-pdf/pdfkit": "^4.0.0",
"@react-pdf/primitives": "^4.0.0", "@react-pdf/primitives": "^4.0.0",
"@react-pdf/stylesheet": "^5.0.0", "@react-pdf/stylesheet": "^5.1.0",
"@react-pdf/textkit": "^5.0.0", "@react-pdf/textkit": "^5.0.0",
"@react-pdf/types": "^2.7.0", "@react-pdf/types": "^2.7.0",
"cross-fetch": "^3.1.5",
"emoji-regex": "^10.3.0", "emoji-regex": "^10.3.0",
"queue": "^6.0.1", "queue": "^6.0.1",
"yoga-layout": "^3.1.0" "yoga-layout": "^3.1.0"
@@ -6147,10 +6146,15 @@
"resolved": "https://registry.npmjs.org/@react-pdf/primitives/-/primitives-4.0.0.tgz", "resolved": "https://registry.npmjs.org/@react-pdf/primitives/-/primitives-4.0.0.tgz",
"integrity": "sha512-yp4E0rDL03NaUp/CnDBz3HQNfH2Mzdlgku57yhTMGNzetwB0NJusXcjYg5XsTGIXnR7Tv80JKI4O4ajj+oaLeQ==" "integrity": "sha512-yp4E0rDL03NaUp/CnDBz3HQNfH2Mzdlgku57yhTMGNzetwB0NJusXcjYg5XsTGIXnR7Tv80JKI4O4ajj+oaLeQ=="
}, },
"node_modules/@react-pdf/reconciler": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@react-pdf/reconciler/-/reconciler-1.1.2.tgz",
"integrity": "sha512-b4uGyT7pWtXe+F2m3cvySqNd4EAAaFknee/JKr00N/9QkNpL1s977oT5qtNPcnUmagsO0I0iH9zFAOcxHFyUNA=="
},
"node_modules/@react-pdf/render": { "node_modules/@react-pdf/render": {
"version": "4.0.0", "version": "4.0.1",
"resolved": "https://registry.npmjs.org/@react-pdf/render/-/render-4.0.0.tgz", "resolved": "https://registry.npmjs.org/@react-pdf/render/-/render-4.0.1.tgz",
"integrity": "sha512-gvrw4HM9RocuDLd+19cvP2xaSs3h4OgYn2N6VDXzj6LYQnoHBAazRV9qMpGi8FuNlQ3Va+s82R1ynXYMr0FXIg==", "integrity": "sha512-WkOjFh6e3lBxRJRiKobUzu9lmxoN5Ihn993cRj47Cy3SOTZmoumRGyjzZq9zMxekbLVvhhyGdanEI2LZoHvIaw==",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
"@react-pdf/fns": "3.0.0", "@react-pdf/fns": "3.0.0",
@@ -6165,31 +6169,31 @@
} }
}, },
"node_modules/@react-pdf/renderer": { "node_modules/@react-pdf/renderer": {
"version": "4.0.0", "version": "4.1.4",
"resolved": "https://registry.npmjs.org/@react-pdf/renderer/-/renderer-4.0.0.tgz", "resolved": "https://registry.npmjs.org/@react-pdf/renderer/-/renderer-4.1.4.tgz",
"integrity": "sha512-yDObqmnF08Mwc24W8axmT/y+JPxJkweVQ/EM3GOXh0qyZN5VP5JvKDiCqmftI6QEKfvTFNsquuEQm13GBjkbMg==", "integrity": "sha512-bJZ+dVWO+nZ028PCA8K7jKuSb03NKz+Kbj+Oc3iDAA3cdsROXgdIce659SIGjOsOD6rV51sqP0YA9PURCBbVbw==",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
"@react-pdf/font": "^3.0.0", "@react-pdf/font": "^3.0.1",
"@react-pdf/layout": "^4.0.0", "@react-pdf/layout": "^4.1.2",
"@react-pdf/pdfkit": "^4.0.0", "@react-pdf/pdfkit": "^4.0.0",
"@react-pdf/primitives": "^4.0.0", "@react-pdf/primitives": "^4.0.0",
"@react-pdf/render": "^4.0.0", "@react-pdf/reconciler": "^1.1.2",
"@react-pdf/render": "^4.0.1",
"@react-pdf/types": "^2.7.0", "@react-pdf/types": "^2.7.0",
"events": "^3.3.0", "events": "^3.3.0",
"object-assign": "^4.1.1", "object-assign": "^4.1.1",
"prop-types": "^15.6.2", "prop-types": "^15.6.2",
"queue": "^6.0.1", "queue": "^6.0.1"
"scheduler": "^0.17.0"
}, },
"peerDependencies": { "peerDependencies": {
"react": "^16.8.0 || ^17.0.0 || ^18.0.0" "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
} }
}, },
"node_modules/@react-pdf/stylesheet": { "node_modules/@react-pdf/stylesheet": {
"version": "5.0.0", "version": "5.1.0",
"resolved": "https://registry.npmjs.org/@react-pdf/stylesheet/-/stylesheet-5.0.0.tgz", "resolved": "https://registry.npmjs.org/@react-pdf/stylesheet/-/stylesheet-5.1.0.tgz",
"integrity": "sha512-FrJXUMsvSGee13gpL82HOhhk16y3IKxLmYvmJU1ZUo9Jm9pLydnHDPlSUDK+rKmxdSD2X+twUR7sv6FlrA5i+A==", "integrity": "sha512-QOPCGzlTz+irGLXbsQtKkEqkf78n9l3hRU0Omkvpk/gwLf/IchBBt358dV6FEtc+ujMFEpN+a+fWSS6v2tB0AQ==",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
"@react-pdf/fns": "3.0.0", "@react-pdf/fns": "3.0.0",
@@ -9873,14 +9877,6 @@
"typescript": ">=4" "typescript": ">=4"
} }
}, },
"node_modules/cross-fetch": {
"version": "3.1.8",
"resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz",
"integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==",
"dependencies": {
"node-fetch": "^2.6.12"
}
},
"node_modules/cross-spawn": { "node_modules/cross-spawn": {
"version": "7.0.5", "version": "7.0.5",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz",
@@ -11952,9 +11948,10 @@
} }
}, },
"node_modules/express": { "node_modules/express": {
"version": "4.21.1", "version": "4.21.2",
"resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz",
"integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==",
"license": "MIT",
"dependencies": { "dependencies": {
"accepts": "~1.3.8", "accepts": "~1.3.8",
"array-flatten": "1.1.1", "array-flatten": "1.1.1",
@@ -11975,7 +11972,7 @@
"methods": "~1.1.2", "methods": "~1.1.2",
"on-finished": "2.4.1", "on-finished": "2.4.1",
"parseurl": "~1.3.3", "parseurl": "~1.3.3",
"path-to-regexp": "0.1.10", "path-to-regexp": "0.1.12",
"proxy-addr": "~2.0.7", "proxy-addr": "~2.0.7",
"qs": "6.13.0", "qs": "6.13.0",
"range-parser": "~1.2.1", "range-parser": "~1.2.1",
@@ -11990,6 +11987,10 @@
}, },
"engines": { "engines": {
"node": ">= 0.10.0" "node": ">= 0.10.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
} }
}, },
"node_modules/express/node_modules/content-disposition": { "node_modules/express/node_modules/content-disposition": {
@@ -12017,9 +12018,10 @@
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
}, },
"node_modules/express/node_modules/path-to-regexp": { "node_modules/express/node_modules/path-to-regexp": {
"version": "0.1.10", "version": "0.1.12",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
"integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==",
"license": "MIT"
}, },
"node_modules/express/node_modules/range-parser": { "node_modules/express/node_modules/range-parser": {
"version": "1.2.1", "version": "1.2.1",
@@ -18193,9 +18195,9 @@
"optional": true "optional": true
}, },
"node_modules/nanoid": { "node_modules/nanoid": {
"version": "3.3.7", "version": "3.3.8",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
"integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==",
"funding": [ "funding": [
{ {
"type": "github", "type": "github",
@@ -23494,15 +23496,6 @@
"node": ">=10" "node": ">=10"
} }
}, },
"node_modules/scheduler": {
"version": "0.17.0",
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.17.0.tgz",
"integrity": "sha512-7rro8Io3tnCPuY4la/NuI5F2yfESpnfZyT6TtkXnSWVkcu0BCDJ+8gk5ozUaFaxpIyNuWAPXrH0yFcSi28fnDA==",
"dependencies": {
"loose-envify": "^1.1.0",
"object-assign": "^4.1.1"
}
},
"node_modules/schema-utils": { "node_modules/schema-utils": {
"version": "4.2.0", "version": "4.2.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz",
@@ -24861,32 +24854,32 @@
"integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==" "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew=="
}, },
"node_modules/tailwindcss": { "node_modules/tailwindcss": {
"version": "3.4.14", "version": "3.4.15",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.14.tgz", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.15.tgz",
"integrity": "sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==", "integrity": "sha512-r4MeXnfBmSOuKUWmXe6h2CcyfzJCEk4F0pptO5jlnYSIViUkVmsawj80N5h2lO3gwcmSb4n3PuN+e+GC1Guylw==",
"dependencies": { "dependencies": {
"@alloc/quick-lru": "^5.2.0", "@alloc/quick-lru": "^5.2.0",
"arg": "^5.0.2", "arg": "^5.0.2",
"chokidar": "^3.5.3", "chokidar": "^3.6.0",
"didyoumean": "^1.2.2", "didyoumean": "^1.2.2",
"dlv": "^1.1.3", "dlv": "^1.1.3",
"fast-glob": "^3.3.0", "fast-glob": "^3.3.2",
"glob-parent": "^6.0.2", "glob-parent": "^6.0.2",
"is-glob": "^4.0.3", "is-glob": "^4.0.3",
"jiti": "^1.21.0", "jiti": "^1.21.6",
"lilconfig": "^2.1.0", "lilconfig": "^2.1.0",
"micromatch": "^4.0.5", "micromatch": "^4.0.8",
"normalize-path": "^3.0.0", "normalize-path": "^3.0.0",
"object-hash": "^3.0.0", "object-hash": "^3.0.0",
"picocolors": "^1.0.0", "picocolors": "^1.1.1",
"postcss": "^8.4.23", "postcss": "^8.4.47",
"postcss-import": "^15.1.0", "postcss-import": "^15.1.0",
"postcss-js": "^4.0.1", "postcss-js": "^4.0.1",
"postcss-load-config": "^4.0.1", "postcss-load-config": "^4.0.2",
"postcss-nested": "^6.0.1", "postcss-nested": "^6.2.0",
"postcss-selector-parser": "^6.0.11", "postcss-selector-parser": "^6.1.2",
"resolve": "^1.22.2", "resolve": "^1.22.8",
"sucrase": "^3.32.0" "sucrase": "^3.35.0"
}, },
"bin": { "bin": {
"tailwind": "lib/cli.js", "tailwind": "lib/cli.js",
+3 -3
View File
@@ -4,10 +4,10 @@
"private": true, "private": true,
"dependencies": { "dependencies": {
"@formkit/auto-animate": "^0.8.2", "@formkit/auto-animate": "^0.8.2",
"@lottiefiles/dotlottie-react": "^0.9.3", "@lottiefiles/dotlottie-react": "^0.10.0",
"@pdf-lib/fontkit": "^1.1.1", "@pdf-lib/fontkit": "^1.1.1",
"@radix-ui/themes": "^3.1.6", "@radix-ui/themes": "^3.1.6",
"@react-pdf/renderer": "^4.0.0", "@react-pdf/renderer": "^4.1.4",
"@reduxjs/toolkit": "^2.3.0", "@reduxjs/toolkit": "^2.3.0",
"axios": "^1.7.7", "axios": "^1.7.7",
"file-saver": "^2.0.5", "file-saver": "^2.0.5",
@@ -116,7 +116,7 @@
"postcss": "^8.4.49", "postcss": "^8.4.49",
"prettier": "^3.3.3", "prettier": "^3.3.3",
"pretty-quick": "^4.0.0", "pretty-quick": "^4.0.0",
"tailwindcss": "^3.4.14", "tailwindcss": "^3.4.15",
"terser-webpack-plugin": "^5.3.10", "terser-webpack-plugin": "^5.3.10",
"webpack-cli": "^5.1.4" "webpack-cli": "^5.1.4"
}, },
@@ -709,9 +709,5 @@
}, },
"expiry-date": "Expiry Date", "expiry-date": "Expiry Date",
"expiry-date-updated": "The expiry date has been successfully extended to {{newexpirydate}}", "expiry-date-updated": "The expiry date has been successfully extended to {{newexpirydate}}",
"expiry-date-error": "Please provide a new expiry date that is later than the current one", "expiry-date-error": "Please provide a new expiry date that is later than the current one"
"delete-page":"Delete page",
"delete-alert":"Can not delete single page",
"delete-alert-2":"Are you sure want to delete this page ?",
"delete-note":"Note - once delete this page you can not undo"
} }
@@ -709,9 +709,5 @@
}, },
"expiry-date": "Date d'expiration", "expiry-date": "Date d'expiration",
"expiry-date-updated": "La fecha de vencimiento se ha extendido con éxito hasta el {{newexpirydate}}", "expiry-date-updated": "La fecha de vencimiento se ha extendido con éxito hasta el {{newexpirydate}}",
"expiry-date-error": "Proporcione una nueva fecha de vencimiento que sea posterior a la actual", "expiry-date-error": "Proporcione una nueva fecha de vencimiento que sea posterior a la actual"
"delete-page": "eliminar página",
"delete-alert": "No se puede eliminar una sola página",
"delete-alert-2": "¿Está seguro de que desea eliminar esta página?",
"delete-note": "Nota: una vez que elimines esta página, no podrás deshacerla"
} }
@@ -708,9 +708,5 @@
}, },
"expiry-date": "Fecha de caducidad", "expiry-date": "Fecha de caducidad",
"expiry-date-updated": "La fecha de vencimiento se ha extendido con éxito hasta el {{newexpirydate}}", "expiry-date-updated": "La fecha de vencimiento se ha extendido con éxito hasta el {{newexpirydate}}",
"expiry-date-error": "Veuillez fournir une nouvelle date d'expiration postérieure à la date actuelle", "expiry-date-error": "Veuillez fournir une nouvelle date d'expiration postérieure à la date actuelle"
"delete-page": "supprimer la page",
"delete-alert": "Impossible de supprimer une seule page",
"delete-alert-2": "Etes-vous sûr de vouloir supprimer cette page ?",
"delete-note": "Remarque : une fois cette page supprimée, vous ne pouvez plus l'annuler"
} }
+3 -5
View File
@@ -6,9 +6,9 @@ function RotateAlert(props) {
const { t } = useTranslation(); const { t } = useTranslation();
return ( return (
<ModalUi <ModalUi
isOpen={props.showRotateAlert} isOpen={props.isRotate}
title={t("Rotation-alert")} title={t("Rotation-alert")}
handleClose={() => props.setShowRotateAlert({ status: false, degree: 0 })} handleClose={() => props.setIsRotate({ status: false, degree: 0 })}
> >
{" "} {" "}
<div className="p-[20px] h-full"> <div className="p-[20px] h-full">
@@ -16,9 +16,7 @@ function RotateAlert(props) {
<div className="h-[1px] w-full my-[15px] bg-[#9f9f9f]"></div> <div className="h-[1px] w-full my-[15px] bg-[#9f9f9f]"></div>
<div className="flex gap-1"> <div className="flex gap-1">
<button <button
onClick={() => onClick={() => props.setIsRotate({ status: false, degree: 0 })}
props.setShowRotateAlert({ status: false, degree: 0 })
}
type="button" type="button"
className="op-btn op-btn-ghost shadow-md" className="op-btn op-btn-ghost shadow-md"
> >
+1 -59
View File
@@ -1,10 +1,8 @@
import React, { useState } from "react"; import React, { useState } from "react";
import PrevNext from "./PrevNext"; import PrevNext from "./PrevNext";
import { import {
deletePdfPage,
handleDownloadCertificate, handleDownloadCertificate,
handleDownloadPdf, handleDownloadPdf,
handleRemoveWidgets,
handleToPrint handleToPrint
} from "../../constant/Utils"; } from "../../constant/Utils";
import "../../styles/signature.css"; import "../../styles/signature.css";
@@ -43,13 +41,7 @@ function Header({
isDisableRotate, isDisableRotate,
templateId, templateId,
setIsDownloadModal, setIsDownloadModal,
disabledBackBtn, disabledBackBtn
setPdfArrayBuffer,
setPdfBase64Url,
pdfArrayBuffer,
setIsUploadPdf,
setSignerPos,
userId
}) { }) {
const { t } = useTranslation(); const { t } = useTranslation();
const filterPrefill = const filterPrefill =
@@ -57,7 +49,6 @@ function Header({
const isMobile = window.innerWidth < 767; const isMobile = window.innerWidth < 767;
const [isDownloading, setIsDownloading] = useState(""); const [isDownloading, setIsDownloading] = useState("");
const isGuestSigner = localStorage.getItem("isGuestSigner"); const isGuestSigner = localStorage.getItem("isGuestSigner");
const [isDeletePage, setIsDeletePage] = useState(false);
const enabledBackBtn = disabledBackBtn === true ? false : true; const enabledBackBtn = disabledBackBtn === true ? false : true;
//function for show decline alert //function for show decline alert
@@ -65,18 +56,6 @@ function Header({
const currentDecline = { currnt: "Sure", isDeclined: true }; const currentDecline = { currnt: "Sure", isDeclined: true };
setIsDecline(currentDecline); setIsDecline(currentDecline);
}; };
const handleDetelePage = async () => {
setIsUploadPdf(true);
const pdfupdatedData = await deletePdfPage(pdfArrayBuffer, pageNumber);
if (pdfupdatedData?.totalPages === 1) {
alert(t("delete-alert"));
} else {
setPdfBase64Url(pdfupdatedData.base64);
setPdfArrayBuffer(pdfupdatedData.arrayBuffer);
setIsDeletePage(false);
handleRemoveWidgets(setSignerPos, signerPos, pageNumber, userId);
}
};
return ( return (
<div className="flex py-[5px]"> <div className="flex py-[5px]">
{isMobile && isShowHeader ? ( {isMobile && isShowHeader ? (
@@ -276,17 +255,6 @@ function Header({
</span> </span>
</div> </div>
</DropdownMenu.Item> </DropdownMenu.Item>
<DropdownMenu.Item
className="DropdownMenuItem"
onClick={() => setIsDeletePage(true)}
>
<div className="flex flex-row">
<i className="fa-light fa-trash text-gray-500 2xl:text-[30px] mr-[3px]"></i>
<span className="font-[500]">
{t("delete-page")}
</span>
</div>
</DropdownMenu.Item>
</> </>
)} )}
@@ -585,32 +553,6 @@ function Header({
<p>{t("generate-certificate-alert")}</p> <p>{t("generate-certificate-alert")}</p>
</div> </div>
</ModalUi> </ModalUi>
<ModalUi
isOpen={isDeletePage}
title={t("validation-alert")}
handleClose={() => setIsDeletePage(false)}
>
<div className="h-[100%] p-[20px]">
<p>{t("delete-alert-2")}</p>
<p className="pt-3 font-medium">{t("delete-note")}</p>
{/* <p>{t("deletepage-alert")}</p> */}
<div className="h-[1px] bg-[#9f9f9f] w-full my-[15px]"></div>
<button
onClick={() => handleDetelePage()}
type="button"
className="op-btn op-btn-primary"
>
{t("yes")}
</button>
<button
onClick={() => setIsDeletePage(false)}
type="button"
className="op-btn op-btn-ghost"
>
{t("no")}
</button>
</div>
</ModalUi>
</div> </div>
); );
} }
+33 -101
View File
@@ -1,115 +1,47 @@
import React, { useState } from "react"; import React from "react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { deletePdfPage, handleRemoveWidgets } from "../../constant/Utils";
import ModalUi from "../../primitives/ModalUi";
function PdfZoom(props) { function PdfZoom(props) {
const { t } = useTranslation(); const { t } = useTranslation();
const [isDeletePage, setIsDeletePage] = useState(false);
const handleDetelePage = async () => {
props.setIsUploadPdf(true);
try {
const pdfupdatedData = await deletePdfPage(
props.pdfArrayBuffer,
props.pageNumber
);
if (pdfupdatedData?.totalPages === 1) {
alert(t("delete-alert"));
} else {
props.setPdfBase64Url(pdfupdatedData.base64);
props.setPdfArrayBuffer(pdfupdatedData.arrayBuffer);
setIsDeletePage(false);
handleRemoveWidgets(
props.setSignerPos,
props.signerPos,
props.pageNumber,
props.userId
);
}
} catch (e) {
console.log("error in delete pdf page", e);
}
};
return ( return (
<> <span className="hidden md:flex flex-col gap-1 text-center md:w-[5%] mt-[43px] 2xl:mt-[63px]">
<span className="hidden md:flex flex-col gap-1 text-center md:w-[5%] mt-[43px] 2xl:mt-[63px]"> <span
<span className="bg-gray-50 px-[4px] 2xl:px-[15px] 2xl:py-[10px] cursor-pointer"
className="bg-gray-50 px-[4px] 2xl:px-[15px] 2xl:py-[10px] cursor-pointer" onClick={() => props.clickOnZoomIn()}
onClick={() => props.clickOnZoomIn()} title={t("zoom-in")}
title={t("zoom-in")} >
> <i className="fa-light fa-magnifying-glass-plus text-gray-500 2xl:text-[30px]"></i>
<i className="fa-light fa-magnifying-glass-plus text-gray-500 2xl:text-[30px]"></i> </span>
</span> {!props?.isDisableRotate && (
{!props.isDisableDelete && ( <>
<span <span
className="bg-gray-50 px-[4px] 2xl:px-[15px] 2xl:py-[10px] cursor-pointer" className="bg-gray-50 px-[4px] 2xl:px-[15px] 2xl:py-[10px] cursor-pointer"
onClick={() => setIsDeletePage(true)} onClick={() => props.handleRotationFun(90)}
title={t("delete-page")} title={t("rotate-right")}
> >
<i className="fa-light fa-trash text-gray-500 2xl:text-[30px]"></i> <i className="fa-light fa-rotate-right text-gray-500 2xl:text-[30px]"></i>
</span> </span>
)} <span
className="bg-gray-50 px-[4px] 2xl:px-[15px] 2xl:py-[10px] cursor-pointer"
{!props?.isDisableRotate && ( title={t("rotate-left")}
<> onClick={() => props.handleRotationFun(-90)}
<span >
className="bg-gray-50 px-[4px] 2xl:px-[15px] 2xl:py-[10px] cursor-pointer" <i className="fa-light fa-rotate-left text-gray-500 2xl:text-[30px]"></i>
onClick={() => props.handleRotationFun(90)} </span>
title={t("rotate-right")} </>
> )}
<i className="fa-light fa-rotate-right text-gray-500 2xl:text-[30px]"></i> <span
</span> className="bg-gray-50 px-[4px] 2xl:px-[15px] 2xl:py-[10px]"
<span onClick={() => props.clickOnZoomOut()}
className="bg-gray-50 px-[4px] 2xl:px-[15px] 2xl:py-[10px] cursor-pointer" style={{
title={t("rotate-left")} cursor: props.zoomPercent > 0 ? "pointer" : "default"
onClick={() => props.handleRotationFun(-90)} }}
> title={t("zoom-out")}
<i className="fa-light fa-rotate-left text-gray-500 2xl:text-[30px]"></i>
</span>
</>
)}
<span
className="bg-gray-50 px-[4px] 2xl:px-[15px] 2xl:py-[10px]"
onClick={() => props.clickOnZoomOut()}
style={{
cursor: props.zoomPercent > 0 ? "pointer" : "default"
}}
title={t("zoom-out")}
>
<i className="fa-light fa-magnifying-glass-minus text-gray-500 2xl:text-[30px]"></i>
</span>
</span>
<ModalUi
isOpen={isDeletePage}
title={t("validation-alert")}
handleClose={() => setIsDeletePage(false)}
> >
<div className="h-[100%] p-[20px]"> <i className="fa-light fa-magnifying-glass-minus text-gray-500 2xl:text-[30px]"></i>
<p>Are you sure want to delete this page ?</p> </span>
<p className="pt-3 font-medium"> </span>
Note - once delete this page you can not undo
</p>
{/* <p>{t("deletepage-alert")}</p> */}
<div className="h-[1px] bg-[#9f9f9f] w-full my-[15px]"></div>
<button
onClick={() => handleDetelePage()}
type="button"
className="op-btn op-btn-primary"
>
{t("yes")}
</button>
<button
onClick={() => setIsDeletePage(false)}
type="button"
className="op-btn op-btn-ghost"
>
{t("no")}
</button>
</div>
</ModalUi>
</>
); );
} }
@@ -13,7 +13,7 @@ function RenderAllPdfPage({
signerPos, signerPos,
signerObjectId, signerObjectId,
containerWH, containerWH,
pdfBase64Url pdfRotateBase64
}) { }) {
const { t } = useTranslation(); const { t } = useTranslation();
const [signPageNumber, setSignPageNumber] = useState([]); const [signPageNumber, setSignPageNumber] = useState([]);
@@ -67,7 +67,7 @@ function RenderAllPdfPage({
) )
); );
}; };
const pdfDataBase64 = `data:application/pdf;base64,${pdfBase64Url}`; const pdfDataBase64 = `data:application/pdf;base64,${pdfRotateBase64}`;
return ( return (
<div ref={pageContainer} className="hidden w-[20%] bg-base-100 md:block"> <div ref={pageContainer} className="hidden w-[20%] bg-base-100 md:block">
<div className="mx-2 pr-2 pt-2 pb-1 text-[15px] text-base-content font-semibold border-b-[1px] border-base-300"> <div className="mx-2 pr-2 pt-2 pb-1 text-[15px] text-base-content font-semibold border-b-[1px] border-base-300">
@@ -80,7 +80,7 @@ function RenderAllPdfPage({
<Document <Document
loading={t("loading-doc")} loading={t("loading-doc")}
onLoadSuccess={onDocumentLoad} onLoadSuccess={onDocumentLoad}
file={(pdfBase64Url && pdfDataBase64) || signPdfUrl} file={(pdfRotateBase64 && pdfDataBase64) || signPdfUrl}
> >
{Array.from(new Array(allPages), (el, index) => ( {Array.from(new Array(allPages), (el, index) => (
<div <div
@@ -61,7 +61,7 @@ function RenderPdf({
setIsSelectId, setIsSelectId,
ispublicTemplate, ispublicTemplate,
handleUserDetails, handleUserDetails,
pdfBase64Url, pdfRotateBase64,
fontSize, fontSize,
setFontSize, setFontSize,
fontColor, fontColor,
@@ -256,7 +256,8 @@ function RenderPdf({
); );
} }
}; };
const pdfDataBase64 = `data:application/pdf;base64,${pdfBase64Url}`; const pdfDataBase64 = `data:application/pdf;base64,${pdfRotateBase64}`;
return ( return (
<> <>
{successEmail && ( {successEmail && (
@@ -376,11 +377,10 @@ function RenderPdf({
return ( return (
<React.Fragment key={ind}> <React.Fragment key={ind}>
{data.pageNumber === pageNumber && {data.pageNumber === pageNumber &&
data.pos.map((pos, id) => { data.pos.map((pos) => {
return ( return (
pos && ( pos && (
<Placeholder <Placeholder
key={id}
pos={pos} pos={pos}
setIsPageCopy={setIsPageCopy} setIsPageCopy={setIsPageCopy}
setSignKey={setSignKey} setSignKey={setSignKey}
@@ -443,7 +443,7 @@ function RenderPdf({
} }
}} }}
file={ file={
(pdfBase64Url && pdfDataBase64) || (pdfRotateBase64 && pdfDataBase64) ||
pdfDetails[0]?.SignedUrl || pdfDetails[0]?.SignedUrl ||
pdfDetails[0].URL pdfDetails[0].URL
} }
@@ -640,8 +640,9 @@ function RenderPdf({
setSelectWidgetId(""); setSelectWidgetId("");
} }
}} }}
// ref={pdfRef}
file={ file={
(pdfBase64Url && pdfDataBase64) || (pdfRotateBase64 && pdfDataBase64) ||
pdfDetails[0]?.SignedUrl || pdfDetails[0]?.SignedUrl ||
pdfDetails[0].URL pdfDetails[0].URL
} }
+29 -49
View File
@@ -2425,9 +2425,23 @@ export const getDefaultSignature = async (objectId) => {
}; };
//function to rotate pdf page //function to rotate pdf page
export async function rotatePdfPage(rotateDegree, pageNumber, pdfArrayBuffer) { export async function rotatePdfPage(
url,
rotateDegree,
pageNumber,
pdfRotateBase64
) {
let file;
//condition to handle pdf base64 in arrayBuffer format
if (pdfRotateBase64) {
file = base64ToArrayBuffer(pdfRotateBase64);
} else {
//condition to handle pdf url in arrayBuffer format
file = await convertPdfArrayBuffer(url);
}
// Load the existing PDF // Load the existing PDF
const pdfDoc = await PDFDocument.load(pdfArrayBuffer); const pdfDoc = await PDFDocument.load(file);
// Get the page according to page number // Get the page according to page number
const page = pdfDoc.getPage(pageNumber); const page = pdfDoc.getPage(pageNumber);
//get current page rotation angle //get current page rotation angle
@@ -2493,35 +2507,21 @@ export const handleRemoveWidgets = (
setSignerPos, setSignerPos,
signerPos, signerPos,
pageNumber, pageNumber,
userId,
setIsRotate setIsRotate
) => { ) => {
const isSigners = signerPos.some((data) => data.signerPtr); const updatedSignerPos = signerPos.map((placeholderObj) => {
if (isSigners) { return {
const updatedSignerPos = signerPos.map((placeholderObj) => { ...placeholderObj,
if (placeholderObj.Id === userId) { placeHolder: placeholderObj?.placeHolder?.filter(
return { (data) => data?.pageNumber !== pageNumber
...placeholderObj, )
placeHolder: placeholderObj?.placeHolder?.filter( };
(data) => data?.pageNumber !== pageNumber });
) setSignerPos(updatedSignerPos);
}; setIsRotate({
} else { status: false,
return placeholderObj; degree: 0
} });
});
setSignerPos(updatedSignerPos);
setIsRotate &&
setIsRotate({
status: false,
degree: 0
});
} else {
const updatedSignerPos = signerPos.filter(
(data) => data?.pageNumber !== pageNumber
);
setSignerPos(updatedSignerPos);
}
}; };
//function to show warning when user rotate page and there are some already widgets on that page //function to show warning when user rotate page and there are some already widgets on that page
export const handleRotateWarning = (signerPos, pageNumber) => { export const handleRotateWarning = (signerPos, pageNumber) => {
@@ -2610,23 +2610,3 @@ export const formatDate = (date) => {
const format = formattedDate.replaceAll(/ /g, "-"); const format = formattedDate.replaceAll(/ /g, "-");
return format; return format;
}; };
export const deletePdfPage = async (pdfArrayBuffer, pageNumber) => {
// Load the existing PDF
const pdfDoc = await PDFDocument.load(pdfArrayBuffer);
// Get the total number of pages
const totalPages = pdfDoc.getPageCount();
// Ensure the page index is valid
if (totalPages > 1) {
//Remove the specified page
pdfDoc.removePage(pageNumber - 1);
// Save the modified PDF
const modifiedPdfBytes = await pdfDoc.saveAsBase64({
useObjectStreams: false
});
const arrayBuffer = base64ToArrayBuffer(modifiedPdfBytes);
return { arrayBuffer: arrayBuffer, base64: modifiedPdfBytes };
} else {
return { totalPages: 1 };
}
};
+13 -12
View File
@@ -41,8 +41,7 @@ import {
fetchUrl, fetchUrl,
signatureTypes, signatureTypes,
handleSignatureType, handleSignatureType,
getTenantDetails, getTenantDetails
getBase64FromUrl
} from "../constant/Utils"; } from "../constant/Utils";
import Header from "../components/pdf/PdfHeader"; import Header from "../components/pdf/PdfHeader";
import RenderPdf from "../components/pdf/RenderPdf"; import RenderPdf from "../components/pdf/RenderPdf";
@@ -147,7 +146,6 @@ function PdfRequestFiles(props) {
const divRef = useRef(null); const divRef = useRef(null);
const [isDownloadModal, setIsDownloadModal] = useState(false); const [isDownloadModal, setIsDownloadModal] = useState(false);
const [signatureType, setSignatureType] = useState([]); const [signatureType, setSignatureType] = useState([]);
const [pdfBase64Url, setPdfBase64Url] = useState("");
const isMobile = window.innerWidth < 767; const isMobile = window.innerWidth < 767;
let isGuestSignFlow = false; let isGuestSignFlow = false;
@@ -325,9 +323,10 @@ function PdfRequestFiles(props) {
documentData[0] && documentData[0] &&
(documentData[0]?.SignedUrl || documentData[0]?.URL); (documentData[0]?.SignedUrl || documentData[0]?.URL);
if (url) { if (url) {
const base64Pdf = await getBase64FromUrl(url); //convert document url in array buffer format to use embed widgets in pdf using pdf-lib
if (base64Pdf) { const arrayBuffer = await convertPdfArrayBuffer(url);
setPdfBase64Url(base64Pdf); if (arrayBuffer === "Error") {
setHandleError(t("something-went-wrong-mssg"));
} }
} else { } else {
setHandleError(t("something-went-wrong-mssg")); setHandleError(t("something-went-wrong-mssg"));
@@ -444,9 +443,10 @@ function PdfRequestFiles(props) {
documentData[0] && documentData[0] &&
(documentData[0]?.SignedUrl || documentData[0]?.URL); (documentData[0]?.SignedUrl || documentData[0]?.URL);
if (url) { if (url) {
const base64Pdf = await getBase64FromUrl(url); //convert document url in array buffer format to use embed widgets in pdf using pdf-lib
if (base64Pdf) { const arrayBuffer = await convertPdfArrayBuffer(url);
setPdfBase64Url(base64Pdf); if (arrayBuffer === "Error") {
setHandleError(t("something-went-wrong-mssg"));
} }
} else { } else {
setHandleError(t("something-went-wrong-mssg")); setHandleError(t("something-went-wrong-mssg"));
@@ -2063,12 +2063,15 @@ function PdfRequestFiles(props) {
<RenderAllPdfPage <RenderAllPdfPage
signerPos={signerPos} signerPos={signerPos}
signerObjectId={signerObjectId} signerObjectId={signerObjectId}
signPdfUrl={
pdfDetails[0] &&
(pdfDetails[0]?.SignedUrl || pdfDetails[0]?.URL)
}
allPages={allPages} allPages={allPages}
setAllPages={setAllPages} setAllPages={setAllPages}
setPageNumber={setPageNumber} setPageNumber={setPageNumber}
pageNumber={pageNumber} pageNumber={pageNumber}
containerWH={containerWH} containerWH={containerWH}
pdfBase64Url={pdfBase64Url}
/> />
{/* pdf render view */} {/* pdf render view */}
<div className=" w-full md:w-[57%] flex mr-4"> <div className=" w-full md:w-[57%] flex mr-4">
@@ -2076,7 +2079,6 @@ function PdfRequestFiles(props) {
clickOnZoomIn={clickOnZoomIn} clickOnZoomIn={clickOnZoomIn}
clickOnZoomOut={clickOnZoomOut} clickOnZoomOut={clickOnZoomOut}
isDisableRotate={true} isDisableRotate={true}
isDisableDelete={true}
/> />
<div className=" w-full md:w-[95%] "> <div className=" w-full md:w-[95%] ">
{/* this modal is used show this document is already sign */} {/* this modal is used show this document is already sign */}
@@ -2270,7 +2272,6 @@ function PdfRequestFiles(props) {
uniqueId={uniqueId} uniqueId={uniqueId}
ispublicTemplate={isPublicTemplate} ispublicTemplate={isPublicTemplate}
handleUserDetails={handleUserDetails} handleUserDetails={handleUserDetails}
pdfBase64Url={pdfBase64Url}
/> />
)} )}
</div> </div>
+25 -53
View File
@@ -41,8 +41,7 @@ import {
handleRotateWarning, handleRotateWarning,
signatureTypes, signatureTypes,
handleSignatureType, handleSignatureType,
formatDate, formatDate
getBase64FromUrl
} 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";
@@ -141,7 +140,7 @@ function PlaceHolderSign() {
const [pdfArrayBuffer, setPdfArrayBuffer] = useState(""); const [pdfArrayBuffer, setPdfArrayBuffer] = useState("");
const isHeader = useSelector((state) => state.showHeader); const isHeader = useSelector((state) => state.showHeader);
const [activeMailAdapter, setActiveMailAdapter] = useState(""); const [activeMailAdapter, setActiveMailAdapter] = useState("");
const [showRotateAlert, setShowRotateAlert] = useState({ const [isRotate, setIsRotate] = useState({
status: false, status: false,
degree: 0 degree: 0
}); });
@@ -153,12 +152,11 @@ function PlaceHolderSign() {
const [isCustomize, setIsCustomize] = useState(false); const [isCustomize, setIsCustomize] = useState(false);
const [zoomPercent, setZoomPercent] = useState(0); const [zoomPercent, setZoomPercent] = useState(0);
const [scale, setScale] = useState(1); const [scale, setScale] = useState(1);
const [pdfBase64Url, setPdfBase64Url] = useState(""); const [pdfRotateBase64, setPdfRotatese64] = useState("");
const [planCode, setPlanCode] = useState(""); const [planCode, setPlanCode] = useState("");
const [unSignedWidgetId, setUnSignedWidgetId] = useState(""); const [unSignedWidgetId, setUnSignedWidgetId] = useState("");
const [signatureType, setSignatureType] = useState(signatureTypes); const [signatureType, setSignatureType] = useState(signatureTypes);
const [emailResetDate, setEmailResetDate] = useState(""); const [emailResetDate, setEmailResetDate] = useState("");
const [isUploadPdf, setIsUploadPdf] = useState(false);
const isMobile = window.innerWidth < 767; const isMobile = window.innerWidth < 767;
const [, drop] = useDrop({ const [, drop] = useDrop({
accept: "BOX", accept: "BOX",
@@ -268,11 +266,9 @@ function PlaceHolderSign() {
const url = documentData[0] && documentData[0]?.URL; const url = documentData[0] && documentData[0]?.URL;
//convert document url in array buffer format to use embed widgets in pdf using pdf-lib //convert document url in array buffer format to use embed widgets in pdf using pdf-lib
const arrayBuffer = await convertPdfArrayBuffer(url); const arrayBuffer = await convertPdfArrayBuffer(url);
const base64Pdf = await getBase64FromUrl(url);
if (arrayBuffer === "Error") { if (arrayBuffer === "Error") {
setHandleError(t("something-went-wrong-mssg")); setHandleError(t("something-went-wrong-mssg"));
} else { } else {
setPdfBase64Url(base64Pdf);
setPdfArrayBuffer(arrayBuffer); setPdfArrayBuffer(arrayBuffer);
} }
if (documentData[0]?.ExtUserPtr?.LastEmailCountReset?.iso) { if (documentData[0]?.ExtUserPtr?.LastEmailCountReset?.iso) {
@@ -863,12 +859,15 @@ function PlaceHolderSign() {
} catch (e) { } catch (e) {
console.log("error to convertBase64ToFile in placeholder flow", e); console.log("error to convertBase64ToFile in placeholder flow", e);
} }
} else if (pdfBase64Url) { } else if (pdfRotateBase64) {
try { try {
const pdfUrl = await convertBase64ToFile( const pdfUrl = await convertBase64ToFile(
pdfDetails[0].Name, pdfDetails[0].Name,
pdfBase64Url pdfRotateBase64
); );
const tenantId = localStorage.getItem("TenantId");
const buffer = atob(pdfRotateBase64);
SaveFileSize(buffer.length, pdfUrl, tenantId);
return pdfUrl; return pdfUrl;
} catch (e) { } catch (e) {
console.log("error to convertBase64ToFile in placeholder flow", e); console.log("error to convertBase64ToFile in placeholder flow", e);
@@ -941,6 +940,7 @@ function PlaceHolderSign() {
} }
} }
}; };
useEffect(() => { useEffect(() => {
const timer = setTimeout(() => { const timer = setTimeout(() => {
if (signerPos?.length > 0 && !pdfDetails?.[0]?.IsCompleted) { if (signerPos?.length > 0 && !pdfDetails?.[0]?.IsCompleted) {
@@ -949,7 +949,7 @@ function PlaceHolderSign() {
}, 2000); }, 2000);
return () => clearTimeout(timer); return () => clearTimeout(timer);
// eslint-disable-next-line react-hooks/exhaustive-deps // eslint-disable-next-line react-hooks/exhaustive-deps
}, [signerPos, signersdata, signatureType, pdfBase64Url]); }, [signerPos, signersdata, signatureType]);
// `autosavedetails` is used to save doc details after every 2 sec when changes are happern in placeholder like drag-drop widgets, remove signers // `autosavedetails` is used to save doc details after every 2 sec when changes are happern in placeholder like drag-drop widgets, remove signers
const autosavedetails = async () => { const autosavedetails = async () => {
@@ -963,20 +963,12 @@ function PlaceHolderSign() {
} }
return acc; return acc;
}, []); }, []);
let pdfUrl;
if (isUploadPdf) {
pdfUrl = await convertBase64ToFile(pdfDetails[0].Name, pdfBase64Url);
}
try { try {
const docCls = new Parse.Object("contracts_Document"); const docCls = new Parse.Object("contracts_Document");
docCls.id = documentId; docCls.id = documentId;
docCls.set("Placeholders", signerPos); docCls.set("Placeholders", signerPos);
docCls.set("Signers", signers); docCls.set("Signers", signers);
docCls.set("SignatureType", signatureType); docCls.set("SignatureType", signatureType);
if (pdfUrl) {
docCls.set("URL", pdfUrl);
}
await docCls.save(); await docCls.save();
} catch (e) { } catch (e) {
console.log("error", e); console.log("error", e);
@@ -1749,36 +1741,30 @@ function PlaceHolderSign() {
}; };
//`handleRotationFun` function is used to roatate pdf particular page //`handleRotationFun` function is used to roatate pdf particular page
const handleRotationFun = async (rotateDegree) => { const handleRotationFun = async (rotateDegree) => {
const rotatePlaceholderExist = handleRotateWarning(signerPos, pageNumber); const isRotate = handleRotateWarning(signerPos, pageNumber);
//show rotation alert if widgets already exist if (isRotate) {
if (rotatePlaceholderExist) { setIsRotate({ status: true, degree: rotateDegree });
setShowRotateAlert({ status: true, degree: rotateDegree });
} else { } else {
setIsUploadPdf(true);
const urlDetails = await rotatePdfPage( const urlDetails = await rotatePdfPage(
pdfDetails[0].URL,
rotateDegree, rotateDegree,
pageNumber - 1, pageNumber - 1,
pdfBase64Url pdfRotateBase64
); );
setPdfArrayBuffer && setPdfArrayBuffer(urlDetails.arrayBuffer); setPdfArrayBuffer && setPdfArrayBuffer(urlDetails.arrayBuffer);
setPdfBase64Url(urlDetails.base64); setPdfRotatese64(urlDetails.base64);
} }
}; };
const handleRemovePlaceholder = async () => { const handleRemovePlaceholder = async () => {
handleRemoveWidgets( handleRemoveWidgets(setSignerPos, signerPos, pageNumber, setIsRotate);
setSignerPos,
signerPos,
pageNumber,
uniqueId,
setShowRotateAlert
);
const urlDetails = await rotatePdfPage( const urlDetails = await rotatePdfPage(
showRotateAlert.degree, pdfDetails[0].URL,
isRotate.degree,
pageNumber - 1, pageNumber - 1,
pdfArrayBuffer pdfRotateBase64
); );
setPdfArrayBuffer && setPdfArrayBuffer(urlDetails.arrayBuffer); setPdfArrayBuffer && setPdfArrayBuffer(urlDetails.arrayBuffer);
setPdfBase64Url(urlDetails.base64); setPdfRotatese64(urlDetails.base64);
}; };
return ( return (
<> <>
@@ -1835,7 +1821,7 @@ function PlaceHolderSign() {
setPageNumber={setPageNumber} setPageNumber={setPageNumber}
setSignBtnPosition={setSignBtnPosition} setSignBtnPosition={setSignBtnPosition}
pageNumber={pageNumber} pageNumber={pageNumber}
pdfBase64Url={pdfBase64Url} pdfRotateBase64={pdfRotateBase64}
/> />
{/* pdf render view */} {/* pdf render view */}
<div className=" w-full md:w-[57%] flex mr-4"> <div className=" w-full md:w-[57%] flex mr-4">
@@ -1843,14 +1829,6 @@ function PlaceHolderSign() {
clickOnZoomIn={clickOnZoomIn} clickOnZoomIn={clickOnZoomIn}
clickOnZoomOut={clickOnZoomOut} clickOnZoomOut={clickOnZoomOut}
handleRotationFun={handleRotationFun} handleRotationFun={handleRotationFun}
pdfArrayBuffer={pdfArrayBuffer}
pageNumber={pageNumber}
setPdfBase64Url={setPdfBase64Url}
setPdfArrayBuffer={setPdfArrayBuffer}
setIsUploadPdf={setIsUploadPdf}
setSignerPos={setSignerPos}
signerPos={signerPos}
userId={uniqueId}
/> />
<div className=" w-full md:w-[95%] "> <div className=" w-full md:w-[95%] ">
{/* this modal is used show alert set placeholder for all signers before send mail */} {/* this modal is used show alert set placeholder for all signers before send mail */}
@@ -2115,12 +2093,6 @@ function PlaceHolderSign() {
handleRotationFun={handleRotationFun} handleRotationFun={handleRotationFun}
clickOnZoomIn={clickOnZoomIn} clickOnZoomIn={clickOnZoomIn}
clickOnZoomOut={clickOnZoomOut} clickOnZoomOut={clickOnZoomOut}
setIsUploadPdf={setIsUploadPdf}
pdfArrayBuffer={pdfArrayBuffer}
setPdfArrayBuffer={setPdfArrayBuffer}
setPdfBase64Url={setPdfBase64Url}
setSignerPos={setSignerPos}
userId={uniqueId}
/> />
<div <div
@@ -2169,7 +2141,7 @@ function PlaceHolderSign() {
setScale={setScale} setScale={setScale}
scale={scale} scale={scale}
setIsSelectId={setIsSelectId} setIsSelectId={setIsSelectId}
pdfBase64Url={pdfBase64Url} pdfRotateBase64={pdfRotateBase64}
fontSize={fontSize} fontSize={fontSize}
setFontSize={setFontSize} setFontSize={setFontSize}
fontColor={fontColor} fontColor={fontColor}
@@ -2314,8 +2286,8 @@ function PlaceHolderSign() {
setFontColor={setFontColor} setFontColor={setFontColor}
/> />
<RotateAlert <RotateAlert
showRotateAlert={showRotateAlert.status} isRotate={isRotate.status}
setShowRotateAlert={setShowRotateAlert} setIsRotate={setIsRotate}
handleRemoveWidgets={handleRemovePlaceholder} handleRemoveWidgets={handleRemovePlaceholder}
/> />
</DndProvider> </DndProvider>
+12 -40
View File
@@ -37,9 +37,7 @@ import {
onClickZoomIn, onClickZoomIn,
onClickZoomOut, onClickZoomOut,
rotatePdfPage, rotatePdfPage,
signatureTypes, signatureTypes
getBase64FromUrl,
convertBase64ToFile
} 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";
@@ -131,12 +129,11 @@ function SignYourSelf() {
const [zoomPercent, setZoomPercent] = useState(0); const [zoomPercent, setZoomPercent] = useState(0);
const isHeader = useSelector((state) => state.showHeader); const isHeader = useSelector((state) => state.showHeader);
const [scale, setScale] = useState(1); const [scale, setScale] = useState(1);
const [pdfBase64Url, setPdfBase64Url] = useState(""); const [pdfRotateBase64, setPdfRotatese64] = useState("");
const [isRotate, setIsRotate] = useState({ status: false, degree: 0 }); const [isRotate, setIsRotate] = useState({ status: false, degree: 0 });
const [isSubscribe, setIsSubscribe] = useState({ plan: "", isValid: true }); const [isSubscribe, setIsSubscribe] = useState({ plan: "", isValid: true });
const [isDownloadModal, setIsDownloadModal] = useState(false); const [isDownloadModal, setIsDownloadModal] = useState(false);
const [isResize, setIsResize] = useState(false); const [isResize, setIsResize] = useState(false);
const [isUploadPdf, setIsUploadPdf] = useState(false);
const divRef = useRef(null); const divRef = useRef(null);
const nodeRef = useRef(null); const nodeRef = useRef(null);
const [, drop] = useDrop({ const [, drop] = useDrop({
@@ -224,17 +221,13 @@ function SignYourSelf() {
? documentData[0]?.Placeholders ? documentData[0]?.Placeholders
: []; : [];
setXyPostion(placeholders); setXyPostion(placeholders);
const url = const url = documentData[0] && documentData[0]?.URL;
documentData[0] &&
(documentData[0]?.SignedUrl || documentData[0]?.URL);
if (url) { if (url) {
//convert document url in array buffer format to use embed widgets in pdf using pdf-lib //convert document url in array buffer format to use embed widgets in pdf using pdf-lib
const arrayBuffer = await convertPdfArrayBuffer(url); const arrayBuffer = await convertPdfArrayBuffer(url);
const base64Pdf = await getBase64FromUrl(url);
if (arrayBuffer === "Error") { if (arrayBuffer === "Error") {
setHandleError(t("something-went-wrong-mssg")); setHandleError(t("something-went-wrong-mssg"));
} else { } else {
setPdfBase64Url(base64Pdf);
setPdfArrayBuffer(arrayBuffer); setPdfArrayBuffer(arrayBuffer);
} }
} else { } else {
@@ -569,23 +562,15 @@ function SignYourSelf() {
}, 2000); }, 2000);
return () => clearTimeout(timer); return () => clearTimeout(timer);
// eslint-disable-next-line react-hooks/exhaustive-deps // eslint-disable-next-line react-hooks/exhaustive-deps
}, [xyPostion, pdfBase64Url]); }, [xyPostion]);
// `autosavedetails` is used to save doc details after every 2 sec when changes are happern in placeholder like drag-drop widgets, remove signers // `autosavedetails` is used to save doc details after every 2 sec when changes are happern in placeholder like drag-drop widgets, remove signers
const autosavedetails = async () => { const autosavedetails = async () => {
try { try {
const docCls = new Parse.Object("contracts_Document"); const docCls = new Parse.Object("contracts_Document");
docCls.id = documentId; docCls.id = documentId;
let pdfUrl;
if (isUploadPdf) {
pdfUrl = await convertBase64ToFile(pdfDetails[0].Name, pdfBase64Url);
}
console.log("isUploadPdf", isUploadPdf);
docCls.set("Placeholders", xyPostion); docCls.set("Placeholders", xyPostion);
docCls.set("IsSignyourself", true); docCls.set("IsSignyourself", true);
if (pdfUrl) {
docCls.set("URL", pdfUrl);
}
await docCls.save(); await docCls.save();
} catch (e) { } catch (e) {
console.log("error", e); console.log("error", e);
@@ -780,7 +765,7 @@ function SignYourSelf() {
const signedpdf = JSON.parse(JSON.stringify(resSignPdf)); const signedpdf = JSON.parse(JSON.stringify(resSignPdf));
setPdfUrl(signedpdf); setPdfUrl(signedpdf);
getDocumentDetails(false); getDocumentDetails(false);
setPdfBase64Url(""); setPdfRotatese64("");
} }
}; };
@@ -1142,14 +1127,14 @@ function SignYourSelf() {
if (isPlaceholder) { if (isPlaceholder) {
setIsRotate({ status: true, degree: rotateDegree }); setIsRotate({ status: true, degree: rotateDegree });
} else { } else {
setIsUploadPdf(true);
const urlDetails = await rotatePdfPage( const urlDetails = await rotatePdfPage(
pdfUrl || pdfDetails[0].URL,
rotateDegree, rotateDegree,
pageNumber - 1, pageNumber - 1,
pdfBase64Url pdfRotateBase64
); );
setPdfArrayBuffer && setPdfArrayBuffer(urlDetails.arrayBuffer); setPdfArrayBuffer && setPdfArrayBuffer(urlDetails.arrayBuffer);
setPdfBase64Url(urlDetails.base64); setPdfRotatese64(urlDetails.base64);
} }
}; };
@@ -1173,10 +1158,10 @@ function SignYourSelf() {
pdfUrl || pdfDetails[0].URL, pdfUrl || pdfDetails[0].URL,
isRotate.degree, isRotate.degree,
pageNumber - 1, pageNumber - 1,
pdfArrayBuffer pdfRotateBase64
); );
setPdfArrayBuffer && setPdfArrayBuffer(urlDetails.arrayBuffer); setPdfArrayBuffer && setPdfArrayBuffer(urlDetails.arrayBuffer);
setPdfBase64Url(urlDetails.base64); setPdfRotatese64(urlDetails.base64);
setXyPostion(updatePlaceholder); setXyPostion(updatePlaceholder);
setIsRotate({ status: false, degree: 0 }); setIsRotate({ status: false, degree: 0 });
}; };
@@ -1243,20 +1228,13 @@ function SignYourSelf() {
setSignBtnPosition={setSignBtnPosition} setSignBtnPosition={setSignBtnPosition}
pageNumber={pageNumber} pageNumber={pageNumber}
containerWH={containerWH} containerWH={containerWH}
pdfBase64Url={pdfBase64Url} pdfRotateBase64={pdfRotateBase64}
/> />
<div className=" w-full md:w-[57%] flex mr-4"> <div className=" w-full md:w-[57%] flex mr-4">
<PdfZoom <PdfZoom
clickOnZoomIn={clickOnZoomIn} clickOnZoomIn={clickOnZoomIn}
clickOnZoomOut={clickOnZoomOut} clickOnZoomOut={clickOnZoomOut}
handleRotationFun={handleRotationFun} handleRotationFun={handleRotationFun}
pdfArrayBuffer={pdfArrayBuffer}
pageNumber={pageNumber}
setPdfBase64Url={setPdfBase64Url}
setPdfArrayBuffer={setPdfArrayBuffer}
setIsUploadPdf={setIsUploadPdf}
setSignerPos={setXyPostion}
signerPos={xyPostion}
/> />
<div className="w-full md:w-[95%]"> <div className="w-full md:w-[95%]">
<ModalUi <ModalUi
@@ -1370,12 +1348,6 @@ function SignYourSelf() {
clickOnZoomOut={clickOnZoomOut} clickOnZoomOut={clickOnZoomOut}
widgetsDetails={xyPostion} widgetsDetails={xyPostion}
setIsDownloadModal={setIsDownloadModal} setIsDownloadModal={setIsDownloadModal}
setIsUploadPdf={setIsUploadPdf}
pdfArrayBuffer={pdfArrayBuffer}
setPdfArrayBuffer={setPdfArrayBuffer}
setPdfBase64Url={setPdfBase64Url}
setSignerPos={setXyPostion}
signerPos={xyPostion}
/> />
<div ref={divRef} data-tut="reactourSecond" className="h-full"> <div ref={divRef} data-tut="reactourSecond" className="h-full">
{containerWH?.width && containerWH?.height && ( {containerWH?.width && containerWH?.height && (
@@ -1416,7 +1388,7 @@ function SignYourSelf() {
handleTextSettingModal={handleTextSettingModal} handleTextSettingModal={handleTextSettingModal}
setScale={setScale} setScale={setScale}
scale={scale} scale={scale}
pdfBase64Url={pdfBase64Url} pdfRotateBase64={pdfRotateBase64}
fontSize={fontSize} fontSize={fontSize}
setFontSize={setFontSize} setFontSize={setFontSize}
fontColor={fontColor} fontColor={fontColor}
+15 -50
View File
@@ -33,9 +33,7 @@ import {
color, color,
signatureTypes, signatureTypes,
getTenantDetails, getTenantDetails,
handleSignatureType, handleSignatureType
getBase64FromUrl,
convertPdfArrayBuffer
} 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";
@@ -104,8 +102,7 @@ const TemplatePlaceholder = () => {
const [isNameModal, setIsNameModal] = useState(false); const [isNameModal, setIsNameModal] = useState(false);
const [isTextSetting, setIsTextSetting] = useState(false); const [isTextSetting, setIsTextSetting] = useState(false);
const [pdfLoad, setPdfLoad] = useState(false); const [pdfLoad, setPdfLoad] = useState(false);
const [pdfBase64Url, setPdfBase64Url] = useState(""); const [pdfRotateBase64, setPdfRotatese64] = useState("");
const [isUploadPdf, setIsUploadPdf] = useState(false);
const isMobile = window.innerWidth < 767; const isMobile = window.innerWidth < 767;
const [, drop] = useDrop({ const [, drop] = useDrop({
accept: "BOX", accept: "BOX",
@@ -142,7 +139,6 @@ const TemplatePlaceholder = () => {
const [zoomPercent, setZoomPercent] = useState(0); const [zoomPercent, setZoomPercent] = useState(0);
const [scale, setScale] = useState(1); const [scale, setScale] = useState(1);
const [signatureType, setSignatureType] = useState([]); const [signatureType, setSignatureType] = useState([]);
const [pdfArrayBuffer, setPdfArrayBuffer] = useState("");
useEffect(() => { useEffect(() => {
fetchTemplate(); fetchTemplate();
@@ -251,17 +247,6 @@ const TemplatePlaceholder = () => {
tenantSignTypes, tenantSignTypes,
docSignTypes docSignTypes
); );
const url = documentData[0] && documentData[0]?.URL;
if (url) {
const arrayBuffer = await convertPdfArrayBuffer(url);
const base64Pdf = await getBase64FromUrl(url);
if (arrayBuffer === "Error") {
setHandleError(t("something-went-wrong-mssg"));
} else {
setPdfBase64Url(base64Pdf);
setPdfArrayBuffer(arrayBuffer);
}
}
setSignatureType(updatedSignatureType); setSignatureType(updatedSignatureType);
const updatedPdfDetails = [...documentData]; const updatedPdfDetails = [...documentData];
updatedPdfDetails[0].SignatureType = updatedSignatureType; updatedPdfDetails[0].SignatureType = updatedSignatureType;
@@ -724,19 +709,12 @@ const TemplatePlaceholder = () => {
} }
}); });
} }
let pdfUrl;
if (isUploadPdf) {
pdfUrl = await convertBase64ToFile(pdfDetails[0].Name, pdfBase64Url);
}
try { try {
const templateCls = new Parse.Object("contracts_Template"); const templateCls = new Parse.Object("contracts_Template");
templateCls.id = templateId; templateCls.id = templateId;
templateCls.set("Placeholders", signerPos); templateCls.set("Placeholders", signerPos);
templateCls.set("Signers", signers); templateCls.set("Signers", signers);
templateCls.set("SignatureType", signatureType); templateCls.set("SignatureType", signatureType);
if (pdfUrl) {
templateCls.set("URL", pdfUrl);
}
await templateCls.save(); await templateCls.save();
} catch (err) { } catch (err) {
console.log("error in autosave template", err); console.log("error in autosave template", err);
@@ -761,9 +739,12 @@ const TemplatePlaceholder = () => {
}); });
} }
let pdfUrl = pdfDetails[0]?.URL; let pdfUrl = pdfDetails[0]?.URL;
if (pdfBase64Url) { if (pdfRotateBase64) {
try { try {
pdfUrl = await convertBase64ToFile(pdfDetails[0].Name, pdfBase64Url); pdfUrl = await convertBase64ToFile(
pdfDetails[0].Name,
pdfRotateBase64
);
} catch (e) { } catch (e) {
console.log("error to convertBase64ToFile in placeholder flow", e); console.log("error to convertBase64ToFile in placeholder flow", e);
} }
@@ -919,9 +900,9 @@ const TemplatePlaceholder = () => {
setIsCreateDocModal(false); setIsCreateDocModal(false);
setIsCreateDoc(true); setIsCreateDoc(true);
let pdfUrl = pdfDetails[0]?.URL; let pdfUrl = pdfDetails[0]?.URL;
if (pdfBase64Url) { if (pdfRotateBase64) {
try { try {
pdfUrl = await convertBase64ToFile(pdfDetails[0].Name, pdfBase64Url); pdfUrl = await convertBase64ToFile(pdfDetails[0].Name, pdfRotateBase64);
} catch (e) { } catch (e) {
console.log("error to convertBase64ToFile in placeholder flow", e); console.log("error to convertBase64ToFile in placeholder flow", e);
} }
@@ -1346,31 +1327,24 @@ const TemplatePlaceholder = () => {
if (isRotate) { if (isRotate) {
setIsRotate({ status: true, degree: rotateDegree }); setIsRotate({ status: true, degree: rotateDegree });
} else { } else {
setIsUploadPdf(false);
const urlDetails = await rotatePdfPage( const urlDetails = await rotatePdfPage(
pdfDetails[0].URL, pdfDetails[0].URL,
rotateDegree, rotateDegree,
pageNumber - 1, pageNumber - 1,
pdfArrayBuffer pdfRotateBase64
); );
setPdfBase64Url(urlDetails.base64); setPdfRotatese64(urlDetails.base64);
} }
}; };
const handleRemovePlaceholder = async () => { const handleRemovePlaceholder = async () => {
handleRemoveWidgets( handleRemoveWidgets(setSignerPos, signerPos, pageNumber, setIsRotate);
setSignerPos,
signerPos,
pageNumber,
uniqueId,
setIsRotate
);
const urlDetails = await rotatePdfPage( const urlDetails = await rotatePdfPage(
pdfDetails[0].URL, pdfDetails[0].URL,
isRotate.degree, isRotate.degree,
pageNumber - 1, pageNumber - 1,
pdfBase64Url pdfRotateBase64
); );
setPdfBase64Url(urlDetails.base64); setPdfRotatese64(urlDetails.base64);
}; };
return ( return (
@@ -1415,7 +1389,6 @@ const TemplatePlaceholder = () => {
setPageNumber={setPageNumber} setPageNumber={setPageNumber}
setSignBtnPosition={setSignBtnPosition} setSignBtnPosition={setSignBtnPosition}
pageNumber={pageNumber} pageNumber={pageNumber}
pdfBase64Url={pdfBase64Url}
/> />
{/* pdf render view */} {/* pdf render view */}
@@ -1424,13 +1397,6 @@ const TemplatePlaceholder = () => {
clickOnZoomIn={clickOnZoomIn} clickOnZoomIn={clickOnZoomIn}
clickOnZoomOut={clickOnZoomOut} clickOnZoomOut={clickOnZoomOut}
handleRotationFun={handleRotationFun} handleRotationFun={handleRotationFun}
pdfArrayBuffer={pdfArrayBuffer}
pageNumber={pageNumber}
setPdfBase64Url={setPdfBase64Url}
setPdfArrayBuffer={setPdfArrayBuffer}
setIsUploadPdf={setIsUploadPdf}
setSignerPos={setSignerPos}
signerPos={signerPos}
/> />
<div className="w-full md:w-[95%]"> <div className="w-full md:w-[95%]">
{/* this modal is used show alert set placeholder for all signers before send mail */} {/* this modal is used show alert set placeholder for all signers before send mail */}
@@ -1576,7 +1542,6 @@ const TemplatePlaceholder = () => {
handleRotationFun={handleRotationFun} handleRotationFun={handleRotationFun}
clickOnZoomIn={clickOnZoomIn} clickOnZoomIn={clickOnZoomIn}
clickOnZoomOut={clickOnZoomOut} clickOnZoomOut={clickOnZoomOut}
setSignerPos={setSignerPos}
/> />
<div <div
ref={divRef} ref={divRef}
@@ -1621,7 +1586,7 @@ const TemplatePlaceholder = () => {
setScale={setScale} setScale={setScale}
scale={scale} scale={scale}
setIsSelectId={setIsSelectId} setIsSelectId={setIsSelectId}
pdfBase64Url={pdfBase64Url} pdfRotateBase64={pdfRotateBase64}
fontSize={fontSize} fontSize={fontSize}
setFontSize={setFontSize} setFontSize={setFontSize}
fontColor={fontColor} fontColor={fontColor}
@@ -707,11 +707,7 @@
"p1": "The document creator will receive an email notification whenever a signer signs the document.", "p1": "The document creator will receive an email notification whenever a signer signs the document.",
"note": "Note: Notification email will not be sent for the last signer, as the document creator will receive a completion email instead." "note": "Note: Notification email will not be sent for the last signer, as the document creator will receive a completion email instead."
}, },
"expiry-date": "Expiry date", "expiry-date":"Expiry date",
"expiry-date-updated": "The expiry date has been successfully extended to {{newexpirydate}}", "expiry-date-updated": "The expiry date has been successfully extended to {{newexpirydate}}",
"expiry-date-error": "Please provide a new expiry date that is later than the current one", "expiry-date-error": "Please provide a new expiry date that is later than the current one"
"delete-page": "Delete page",
"delete-alert": "Can not delete single page",
"delete-alert-2": "Are you sure want to delete this page ?",
"delete-note": "Note - once delete this page you can not undo"
} }
@@ -709,9 +709,5 @@
}, },
"expiry-date": "Date d'expiration", "expiry-date": "Date d'expiration",
"expiry-date-updated": "La fecha de vencimiento se ha extendido con éxito hasta el {{newexpirydate}}", "expiry-date-updated": "La fecha de vencimiento se ha extendido con éxito hasta el {{newexpirydate}}",
"expiry-date-error": "Proporcione una nueva fecha de vencimiento que sea posterior a la actual", "expiry-date-error": "Proporcione una nueva fecha de vencimiento que sea posterior a la actual"
"delete-page": "eliminar página",
"delete-alert": "No se puede eliminar una sola página",
"delete-alert-2": "¿Está seguro de que desea eliminar esta página?",
"delete-note": "Nota: una vez que elimines esta página, no podrás deshacerla"
} }
@@ -708,9 +708,5 @@
}, },
"expiry-date": "Fecha de caducidad", "expiry-date": "Fecha de caducidad",
"expiry-date-updated": "La date d'expiration a été prolongée avec succès jusqu'au {{newexpirydate}}", "expiry-date-updated": "La date d'expiration a été prolongée avec succès jusqu'au {{newexpirydate}}",
"expiry-date-error": "Veuillez fournir une nouvelle date d'expiration postérieure à la date actuelle", "expiry-date-error": "Veuillez fournir une nouvelle date d'expiration postérieure à la date actuelle"
"delete-page": "supprimer la page",
"delete-alert": "Impossible de supprimer une seule page",
"delete-alert-2": "Etes-vous sûr de vouloir supprimer cette page ?",
"delete-note": "Remarque : une fois cette page supprimée, vous ne pouvez plus l'annuler"
} }
+615 -608
View File
File diff suppressed because it is too large Load Diff
+5 -5
View File
@@ -18,8 +18,8 @@
"watch": "nodemon index.js" "watch": "nodemon index.js"
}, },
"dependencies": { "dependencies": {
"@aws-sdk/client-s3": "^3.691.0", "@aws-sdk/client-s3": "^3.699.0",
"@aws-sdk/s3-request-presigner": "^3.691.0", "@aws-sdk/s3-request-presigner": "^3.700.0",
"@parse/fs-files-adapter": "^3.0.0", "@parse/fs-files-adapter": "^3.0.0",
"@parse/s3-files-adapter": "^3.0.0", "@parse/s3-files-adapter": "^3.0.0",
"@pdf-lib/fontkit": "^1.1.1", "@pdf-lib/fontkit": "^1.1.1",
@@ -27,7 +27,7 @@
"@signpdf/signer-p12": "^3.2.4", "@signpdf/signer-p12": "^3.2.4",
"@signpdf/signpdf": "^3.2.4", "@signpdf/signpdf": "^3.2.4",
"aws-sdk": "^2.1692.0", "aws-sdk": "^2.1692.0",
"axios": "^1.7.7", "axios": "^1.7.9",
"cors": "^2.8.5", "cors": "^2.8.5",
"dotenv": "^16.4.5", "dotenv": "^16.4.5",
"express": "^4.21.1", "express": "^4.21.1",
@@ -35,7 +35,7 @@
"generate-api-key": "^1.0.2", "generate-api-key": "^1.0.2",
"googleapis": "^144.0.0", "googleapis": "^144.0.0",
"mailgun.js": "^10.2.3", "mailgun.js": "^10.2.3",
"mongoose": "^8.8.1", "mongoose": "^8.8.4",
"multer": "^1.4.5-lts.1", "multer": "^1.4.5-lts.1",
"multer-s3": "^3.0.1", "multer-s3": "^3.0.1",
"node-forge": "^1.3.1", "node-forge": "^1.3.1",
@@ -45,7 +45,7 @@
"parse-server": "^7.3.0", "parse-server": "^7.3.0",
"parse-server-api-mail-adapter": "^4.1.0", "parse-server-api-mail-adapter": "^4.1.0",
"pdf-lib": "^1.17.1", "pdf-lib": "^1.17.1",
"posthog-node": "^4.2.1", "posthog-node": "^4.2.3",
"ws": "^8.18.0" "ws": "^8.18.0"
}, },
"type": "module", "type": "module",