{"version":3,"sources":["hooks/usePosition.js","hooks/useWindowDimensions.js","components/Modals/SignView/Signature.js"],"names":["defaultSettings","enableHighAccuracy","timeout","Infinity","maximumAge","getWindowDimensions","window","width","innerWidth","height","innerHeight","Sign","forwardRef","props","ref","current","fromData","JSON","parse","coords","backgroundColor","canvasProps","Signature","useSign","modal","contractId","signatureConfirmations","requestLocation","profile","jwt","contract","dispatch","t","useTranslation","watch","settings","useState","position","setPosition","error","setError","onChange","timestamp","latitude","longitude","accuracy","speed","onError","message","getLocation","navigator","geolocation","watchPosition","getCurrentPosition","usePosition","windowDimensions","setWindowDimensions","useEffect","handleResize","addEventListener","removeEventListener","useWindowDimensions","queryClient","useQueryClient","sigCanvas","useRef","sigPad","signatureMutation","useMutation","payload","fetcher","clientContractAction","onSuccess","status","importedPdf","config","hideSignUpModal","signViewOptions","isTratoUser","type","CONTROL_MODAL","open","SIGNUP_MODAL","bootbox","alert","text","title","CHANGE_PREVIEW","previewUrl","handleClose","invalidateQueries","onSettled","CONTROL_WAITER","mutate","close","SIGN_MODAL","handleAskGeoLocation","a","changeZoom","viewport","document","querySelector","content","measuredRef","useCallback","node","signaturePad","canvas","getCanvas","getSignaturePad","parentElement","clientWidth","clear","includes","Modal","isOpen","centered","onOpened","ModalHeader","toggle","className","ModalBody","Button","color","onClick","signatureCoords","isPluginClient","signature","WIDTH","HEIGHT","console","log","result","data","i","length","newData","map","d","x","y","push","resizeSignature","originalSignatureCoords","ModalFooter","ButtonGroup","size","isEmpty","toData","flat","stringify","Object","keys","s"],"mappings":"uWAEMA,EAAkB,CACtBC,oBAAoB,EACpBC,QAASC,IACTC,WAAY,GCHd,SAASC,IAAuB,IAAD,EACwBC,OACnD,MAAO,CACHC,MAHuB,EACnBC,WAGJC,OAJuB,EACAC,a,WCazBC,EAAOC,sBAAW,SAACC,EAAOC,GAAS,IAAD,EAEpC,OADA,UAAAA,EAAIC,eAAJ,SAAaC,SAASC,KAAKC,MAAML,EAAMM,QAAU,OAE7C,cAAC,IAAD,CACIL,IAAKA,EACLM,gBAAiB,QACjBC,YAAa,CACTd,MAXF,IAYEE,OAXD,UAiBA,SAASa,IAAa,IAAD,EAC2EC,cAD3E,0BACvBC,EADuB,EACvBA,MAAOC,EADgB,EAChBA,WAAYC,EADI,EACJA,uBAAwBC,EADpB,EACoBA,gBAAiBC,EADrC,EACqCA,QAASC,EAD9C,EAC8CA,IAAKC,EADnD,EACmDA,SAAYC,EAD/D,KAExBC,EAAMC,cAAND,EAFwB,EFtBT,WAAgD,IAA/CE,EAA8C,wDAA/BC,EAA+B,uDAApBnC,EAAoB,EACxCoC,mBAAS,IAD+B,mBACjEC,EADiE,KACvDC,EADuD,OAE9CF,mBAAS,MAFqC,mBAEjEG,EAFiE,KAE1DC,EAF0D,KAIlEC,EAAW,SAAC,GAA2B,IAAzBtB,EAAwB,EAAxBA,OAAQuB,EAAgB,EAAhBA,UAC1BJ,EAAY,CACVK,SAAUxB,EAAOwB,SACjBC,UAAWzB,EAAOyB,UAClBC,SAAU1B,EAAO0B,SACjBC,MAAO3B,EAAO2B,MACdJ,cAEFF,EAAS,OAGLO,EAAU,SAACR,GACfC,EAASD,EAAMS,UAKjB,SAASC,IACP,OAAKC,WAAcA,UAAUC,aAKzBjB,EAEAgB,UAAUC,YAAYC,cAAcX,EAAUM,EAASZ,GAEzDe,UAAUC,YAAYE,mBAAmBZ,EAAUM,EAASZ,IAEvD,IAVLK,EAAS,iCACF,GAuBX,OAAO,2BAAKH,GAAZ,IAAsBE,QAAOU,gBEtBkBK,GAArCX,EAHwB,EAGxBA,SAAUC,EAHc,EAGdA,UAAWK,EAHG,EAGHA,YACvB5C,EDxBK,WAAgC,IAAD,EACM+B,mBAAS/B,KADf,mBACnCkD,EADmC,KACjBC,EADiB,KAY1C,OATAC,qBAAU,WACN,SAASC,IACLF,EAAoBnD,KAIxB,OADAC,OAAOqD,iBAAiB,SAAUD,GAC3B,kBAAMpD,OAAOsD,oBAAoB,SAAUF,MACnD,IAEIH,ECYqBM,GACtBC,EAAcC,cACdC,EAAYC,iBAAO,IACnBC,EAASD,iBAAO,IAENE,EAAsBC,aAAY,SAACC,GAAD,OAAaC,YAAQC,YAAqB9C,EAAY,OAAQ4C,GAAUxC,KAAM,CAC5H2C,UAAW,YAA8B,IAAD,IAA1BC,EAA0B,EAA1BA,OAAQC,EAAkB,EAAlBA,aACd,UAAC9C,EAAQ+C,cAAT,aAAC,EAAgBC,mBAAmB,UAAC9C,EAAS+C,uBAAV,aAAC,EAA0BC,cAC/D/C,EAAS,CAAEgD,KAAMC,IAAeC,KAAMC,MAE3B,iBAAXT,GACAU,IAAQC,MAAM,CACVC,KAAK,GAAD,OAAKrD,EAAE,4BAAP,YAAsCA,EAAE,6BAC5CsD,MAAOtD,EAAE,kCAIb0C,GAAa3C,EAAS,CAAEgD,KAAMQ,IAAgBC,WAAYd,IAC9De,IACA3B,EAAY4B,kBAAkB,oBAElCC,UAAW,WACP5D,EAAS,CAAEgD,KAAMa,IAAgBX,MAAM,OAjBvCY,OAuDFJ,EAAc,WAChB1D,EAAS,CAAEgD,KAAMC,IAAec,MAAOC,OASrCC,EAAoB,uCAAG,sBAAAC,EAAA,sEACnBd,IAAQC,MAAM,CAChBC,KAAMrD,EAAE,+BACRsD,MAAOtD,EAAE,wCAHY,OAKzBiB,IALyB,2CAAH,qDAQpBiD,EAAa,WACf,IAAIC,EAAWC,SAASC,cAAc,yBAClCF,IACAA,EAASG,QAAU,kBACnBH,EAASG,QAAU,uBAIrBC,EAAcC,uBAChB,SAACC,GACG,IAAsBC,EAAcC,EAMvB,OAATF,IACAzC,EAAUjD,QAAU0F,EAAKG,YACzB1C,EAAOnD,QAAU0F,EAAKI,kBARJH,EASLD,EAAKI,mBATcF,EASKF,EAAKG,aARnCrG,MAAQoG,EAAOG,cAAcC,YACpCJ,EAAOlG,OAASkG,EAAOG,cAAcC,YA9GlC,EA+GHL,EAAaM,WASrB,CAAC3G,IAUL,OAPAoD,qBAAU,WACNyC,IACI1E,EAAMyF,SAASlB,MACfG,MAEL,CAAC1E,IAGA,eAAC0F,EAAA,EAAD,CAAOC,OAAQ3F,EAAMyF,SAASlB,KAAaqB,UAAQ,EAACC,SAAUnB,EAA9D,UACI,eAACoB,EAAA,EAAD,CAAaC,OAAQ9B,EAArB,UACI,+BAAOzD,EAAE,iCADb,IACoD,uBAAOwF,UAAU,aAAjB,SAA+BxF,EAAE,yCAErF,cAACyF,EAAA,EAAD,CAAWD,UAAU,iCAArB,SACI,sBAAKA,UAAU,gBAAf,UACI,cAAC7G,EAAD,CAAMG,IAAKyF,IACX,cAACmB,EAAA,EAAD,CAAQC,MAAM,UAAUH,UAAU,OAAOI,QAhF5B,WACzB1D,EAAOnD,QAAQiG,SA+EH,SACKhF,EAAE,iCAENJ,EAAQiG,kBAAoBjG,EAAQkG,gBACjC,cAACJ,EAAA,EAAD,CAAQC,MAAM,UAAUH,UAAU,kBAAkBI,QA1D7C,WAAO,IAAD,GAC7B,OAAI1D,QAAJ,IAAIA,GAAJ,UAAIA,EAAQnD,eAAZ,aAAI,EAAiBC,WACjBkD,EAAOnD,QAAQC,SAxBC,SAAC+G,GACrB,IAAMC,EAAQhE,EAAUjD,QAAQR,MAC1B0H,EAASjE,EAAUjD,QAAQN,OACjCyH,QAAQC,IAAIH,GACZE,QAAQC,IAAIF,GAGZ,IAFA,IAAMG,EAAS,GACTC,EAAOpH,KAAKC,MAAM6G,EAAU5G,QACzBmH,EAAI,EAAGA,EAAID,EAAKE,OAAQD,IAAK,CAClC,IAAME,EAAUH,EAAKC,GAAGG,KAAI,SAACC,GAAD,mBAAC,eACtBA,GADqB,IAExBC,EAAID,EAAEC,EAAIZ,EAAUxH,MAASyH,EAC7BY,EAAIF,EAAEE,EAAIb,EAAUtH,OAAUwH,OAElCG,EAAOS,KAAKL,GAEhB,OAAOJ,EASqBU,EAAuB,OAAPlH,QAAO,IAAPA,OAAA,EAAAA,EAASmH,0BAA2B,QAwDhE,SACK/G,EAAE,mCAKnB,cAACgH,EAAA,EAAD,UACI,cAACC,EAAA,EAAD,CAAazB,UAAU,qBAAvB,SACK7F,IAAoBgB,EACjB,cAAC+E,EAAA,EAAD,CAAQwB,KAAK,KAAKvB,MAAM,UAAUH,UAAU,YAAYI,QAAS5B,EAAjE,SACKhE,EAAE,yCAIP,cAAC0F,EAAA,EAAD,CAAQwB,KAAK,KAAKvB,MAAM,UAAUH,UAAU,YAAYI,QA9GzD,WACf,GAAI1D,EAAOnD,QAAQoI,UAAW,OAAOhE,IAAQC,MAAMpD,EAAE,4BACrD,IAAMb,EAAS+C,EAAOnD,QAAQqI,SAC9B,GAAIjI,EAAOkI,OAAOd,OAAS,GAAI,OAAOpD,IAAQC,MAAMpD,EAAE,kCACtDD,EAAS,CAAEgD,KAAMa,IAAgBX,MAAM,IACvCd,EAAkB,CACd0D,gBAAiB,CAAE1G,OAAQF,KAAKqI,UAAUnI,GAASZ,MAAOyD,EAAUjD,QAAQR,MAAOE,OAAQuD,EAAUjD,QAAQN,QAC7GiB,uBAAwB6H,OAAOC,KAAK9H,GAAwB+G,KAAI,SAACgB,GAAD,OAAO/H,EAAuB+H,MAC9FtG,YAAaxB,EAAkB,CAAEgB,WAAUC,aAAc,MAsG7C,SACKZ,EAAE","file":"static/js/21.42667bc3.chunk.js","sourcesContent":["import { useState, useEffect, useCallback } from 'react';\r\n\r\nconst defaultSettings = {\r\n enableHighAccuracy: true,\r\n timeout: Infinity,\r\n maximumAge: 0,\r\n};\r\n\r\nexport const usePosition = (watch = false, settings = defaultSettings) => {\r\n const [position, setPosition] = useState({});\r\n const [error, setError] = useState(null);\r\n\r\n const onChange = ({ coords, timestamp }) => {\r\n setPosition({\r\n latitude: coords.latitude,\r\n longitude: coords.longitude,\r\n accuracy: coords.accuracy,\r\n speed: coords.speed,\r\n timestamp,\r\n });\r\n setError(null);\r\n };\r\n\r\n const onError = (error) => {\r\n setError(error.message);\r\n };\r\n\r\n let watcher = null;\r\n\r\n function getLocation() {\r\n if (!navigator || !navigator.geolocation) {\r\n setError('Geolocation is not supported');\r\n return false;\r\n }\r\n\r\n if (watch) {\r\n watcher =\r\n navigator.geolocation.watchPosition(onChange, onError, settings);\r\n } else {\r\n navigator.geolocation.getCurrentPosition(onChange, onError, settings);\r\n }\r\n return true;\r\n }\r\n\r\n // useEffect(() => {\r\n // getLocation()\r\n // return () => {\r\n // return watcher && navigator.geolocation.clearWatch(watcher);\r\n // }\r\n // }, [\r\n // settings.enableHighAccuracy,\r\n // settings.timeout,\r\n // settings.maximumAge,\r\n // ]);\r\n\r\n return { ...position, error, getLocation };\r\n};","import { useState, useEffect } from 'react';\r\n\r\nfunction getWindowDimensions() {\r\n const { innerWidth: width, innerHeight: height } = window;\r\n return {\r\n width,\r\n height\r\n };\r\n}\r\n\r\nexport default function useWindowDimensions() {\r\n const [windowDimensions, setWindowDimensions] = useState(getWindowDimensions());\r\n\r\n useEffect(() => {\r\n function handleResize() {\r\n setWindowDimensions(getWindowDimensions());\r\n }\r\n\r\n window.addEventListener('resize', handleResize);\r\n return () => window.removeEventListener('resize', handleResize);\r\n }, []);\r\n\r\n return windowDimensions;\r\n}","import React, { useRef, useEffect, useCallback, forwardRef } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useMutation, useQueryClient } from \"react-query\";\r\nimport SignatureCanvas from \"react-signature-canvas\";\r\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter, ButtonGroup } from \"reactstrap\";\r\nimport { fetcher } from \"api/client\";\r\nimport { clientContractAction } from \"api/actions/contracts\";\r\nimport bootbox from \"components/Modals/Bootbox\";\r\nimport { useSign, SIGN_MODAL, PHONE_MODAL, CONTROL_WAITER, CONTROL_MODAL, CHANGE_PREVIEW, SIGNUP_MODAL } from \"context/signview\";\r\nimport { usePosition } from \"hooks/usePosition\";\r\nimport useWindowDimensions from \"hooks/useWindowDimensions\";\r\n\r\nconst width = 450;\r\nconst height = 200;\r\nconst widthRatio = 2;\r\n\r\nconst Sign = forwardRef((props, ref) => {\r\n ref.current?.fromData(JSON.parse(props.coords || \"[]\"));\r\n return (\r\n \r\n );\r\n});\r\n\r\nexport default function Signature() {\r\n const [{ modal, contractId, signatureConfirmations, requestLocation, profile, jwt, contract }, dispatch] = useSign();\r\n const { t } = useTranslation();\r\n const { latitude, longitude, getLocation } = usePosition();\r\n const getWindowDimensions = useWindowDimensions();\r\n const queryClient = useQueryClient();\r\n const sigCanvas = useRef({});\r\n const sigPad = useRef({});\r\n\r\n const { mutate: signatureMutation } = useMutation((payload) => fetcher(clientContractAction(contractId, \"sign\", payload), jwt), {\r\n onSuccess: ({ status, importedPdf }) => {\r\n if (!profile.config?.hideSignUpModal && !contract.signViewOptions?.isTratoUser) {\r\n dispatch({ type: CONTROL_MODAL, open: SIGNUP_MODAL })\r\n }\r\n if (status === \"SENT_TO_SIGN\") {\r\n bootbox.alert({\r\n text: `${t(\"sign.WaitToSign.body_one\")} ${t(\"sign.WaitToSign.body_two\")}`,\r\n title: t(\"sign.WaitToSign.title_signed\"),\r\n });\r\n }\r\n\r\n if (importedPdf) dispatch({ type: CHANGE_PREVIEW, previewUrl: importedPdf });\r\n handleClose();\r\n queryClient.invalidateQueries(\"client-contract\");\r\n },\r\n onSettled: () => {\r\n dispatch({ type: CONTROL_WAITER, open: false });\r\n },\r\n });\r\n\r\n const handleSign = () => {\r\n if (sigPad.current.isEmpty()) return bootbox.alert(t(\"errors.SignatureIsEmpty\"));\r\n const coords = sigPad.current.toData();\r\n if (coords.flat().length < 10) return bootbox.alert(t(\"sign.sign.autograph_not_valid\"));\r\n dispatch({ type: CONTROL_WAITER, open: true });\r\n signatureMutation({\r\n signatureCoords: { coords: JSON.stringify(coords), width: sigCanvas.current.width, height: sigCanvas.current.height },\r\n signatureConfirmations: Object.keys(signatureConfirmations).map((s) => signatureConfirmations[s]),\r\n geolocation: requestLocation ? { latitude, longitude } : {},\r\n });\r\n };\r\n\r\n const handleClearSignature = () => {\r\n sigPad.current.clear();\r\n };\r\n\r\n const resizeSignature = (signature) => {\r\n const WIDTH = sigCanvas.current.width;\r\n const HEIGHT = sigCanvas.current.height;\r\n console.log(WIDTH)\r\n console.log(HEIGHT)\r\n const result = [];\r\n const data = JSON.parse(signature.coords);\r\n for (let i = 0; i < data.length; i++) {\r\n const newData = data[i].map((d) => ({\r\n ...d,\r\n x: (d.x / signature.width) * WIDTH,\r\n y: (d.y / signature.height) * HEIGHT,\r\n }));\r\n result.push(newData);\r\n }\r\n return result;\r\n };\r\n\r\n const handleClose = () => {\r\n dispatch({ type: CONTROL_MODAL, close: SIGN_MODAL });\r\n };\r\n\r\n const handleUseSignature = () => {\r\n if (sigPad?.current?.fromData) {\r\n sigPad.current.fromData(resizeSignature(profile?.originalSignatureCoords || \"[]\"));\r\n }\r\n };\r\n\r\n const handleAskGeoLocation = async () => {\r\n await bootbox.alert({\r\n text: t(\"sign.errors.ask_geolocation\"),\r\n title: t(\"editor.config.geolocation_required\"),\r\n });\r\n getLocation();\r\n };\r\n\r\n const changeZoom = () => {\r\n let viewport = document.querySelector('meta[name=\"viewport\"]');\r\n if (viewport) {\r\n viewport.content = \"initial-scale=1\";\r\n viewport.content = \"width=device-width\";\r\n }\r\n };\r\n\r\n const measuredRef = useCallback(\r\n (node) => {\r\n const resizeCanvas = (signaturePad, canvas) => {\r\n canvas.width = canvas.parentElement.clientWidth;\r\n canvas.height = canvas.parentElement.clientWidth / widthRatio;\r\n signaturePad.clear();\r\n };\r\n\r\n if (node !== null) {\r\n sigCanvas.current = node.getCanvas();\r\n sigPad.current = node.getSignaturePad();\r\n resizeCanvas(node.getSignaturePad(), node.getCanvas());\r\n }\r\n },\r\n [getWindowDimensions]\r\n );\r\n\r\n useEffect(() => {\r\n changeZoom();\r\n if (modal.includes(SIGN_MODAL)) {\r\n changeZoom();\r\n }\r\n }, [modal]);\r\n\r\n return (\r\n \r\n \r\n {t(\"sign.sign_modal.modal_title\")} {t(\"profile.signature.modal_subtitle\")}\r\n \r\n \r\n \r\n \r\n \r\n {t(\"sign.sign_modal.modal_clear\")}\r\n \r\n {profile.signatureCoords && !profile.isPluginClient && (\r\n \r\n {t(\"sign.sign.autograph_mine\")}\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {requestLocation && !latitude ? (\r\n \r\n {t(\"sign.errors.geolocalizationRequired\")}\r\n {/* {t('sign.sign_modal.sign')} */}\r\n \r\n ) : (\r\n \r\n {t(\"sign.sign_modal.sign\")}\r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n}\r\n"],"sourceRoot":""}