Merged in feature/IO-1828-Front-End-Package-Updates (pull request #1144)

Feature/IO-1828 Front End Package Updates
This commit is contained in:
Dave Richer
2024-01-08 20:45:25 +00:00
27 changed files with 524 additions and 412 deletions

405
client/package-lock.json generated
View File

@@ -16,13 +16,13 @@
"@fingerprintjs/fingerprintjs": "^4.2.1",
"@jsreport/browser-client": "^3.1.0",
"@reduxjs/toolkit": "^2.0.1",
"@sentry/react": "^7.91.0",
"@sentry/tracing": "^7.91.0",
"@sentry/react": "^7.92.0",
"@sentry/tracing": "^7.92.0",
"@splitsoftware/splitio-react": "^1.10.2",
"@tanem/react-nprogress": "^5.0.51",
"antd": "^5.12.5",
"antd": "^5.12.8",
"apollo-link-logger": "^2.0.1",
"axios": "^1.6.3",
"axios": "^1.6.4",
"craco-less": "^3.0.1",
"dayjs": "^1.11.10",
"dayjs-business-days2": "^1.2.2",
@@ -33,7 +33,7 @@
"exifr": "^7.1.3",
"firebase": "^10.7.1",
"graphql": "^16.6.0",
"i18next": "^23.7.12",
"i18next": "^23.7.16",
"i18next-browser-languagedetector": "^7.0.2",
"jsoneditor": "^10.0.0",
"jsreport-browser-client-dist": "^1.3.0",
@@ -41,7 +41,7 @@
"logrocket": "^7.0.0",
"markerjs2": "^2.31.4",
"normalize-url": "^8.0.0",
"phone": "^3.1.41",
"phone": "^3.1.42",
"preval.macro": "^5.0.0",
"prop-types": "^15.8.1",
"query-string": "^8.1.0",
@@ -50,7 +50,7 @@
"react": "^18.2.0",
"react-big-calendar": "^1.8.5",
"react-color": "^2.19.3",
"react-cookie": "^6.1.1",
"react-cookie": "^7.0.0",
"react-dom": "^18.2.0",
"react-drag-listview": "^2.0.0",
"react-grid-gallery": "^1.0.0",
@@ -70,11 +70,11 @@
"recharts": "^2.4.3",
"redux": "^5.0.1",
"redux-persist": "^6.0.0",
"redux-saga": "^1.2.3",
"redux-saga": "^1.3.0",
"redux-state-sync": "^3.1.4",
"reselect": "^5.0.1",
"sass": "^1.58.3",
"socket.io-client": "^4.7.2",
"reselect": "^5.1.0",
"sass": "^1.69.7",
"socket.io-client": "^4.7.3",
"styled-components": "^6.1.6",
"subscriptions-transport-ws": "^0.11.0",
"terser-webpack-plugin": "^5.3.10",
@@ -136,11 +136,11 @@
}
},
"node_modules/@ant-design/colors": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-7.0.0.tgz",
"integrity": "sha512-iVm/9PfGCbC0dSMBrz7oiEXZaaGH7ceU40OJEfKmyuzR9R5CRimJYPlRiFtMQGQcbNMea/ePcoIebi4ASGYXtg==",
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-7.0.2.tgz",
"integrity": "sha512-7KJkhTiPiLHSu+LmMJnehfJ6242OCxSlR3xHVBecYxnMW8MS/878NXct1GqYARyL59fyeFdKRxXTfvR9SnDgJg==",
"dependencies": {
"@ctrl/tinycolor": "^3.4.0"
"@ctrl/tinycolor": "^3.6.1"
}
},
"node_modules/@ant-design/compatible": {
@@ -168,15 +168,15 @@
"integrity": "sha512-LrX0OGZtW+W6iLnTAqnTaoIsRelYeuLZWsrmBJFUXDALQphPsN8cE5DCsmoSlL0QYb94BQxINiuS70Ar/8BNgA=="
},
"node_modules/@ant-design/cssinjs": {
"version": "1.18.1",
"resolved": "https://registry.npmjs.org/@ant-design/cssinjs/-/cssinjs-1.18.1.tgz",
"integrity": "sha512-1JURAPrsjK1GwpqByTq3bJ7nF7lbMKDZpehqeR2n8/IR5O58/W1U4VcOeaw5ZyTHri3tEMcom7dyP2tvxpW54g==",
"version": "1.18.2",
"resolved": "https://registry.npmjs.org/@ant-design/cssinjs/-/cssinjs-1.18.2.tgz",
"integrity": "sha512-514V9rjLaFYb3v4s55/8bg2E6fb81b99s3crDZf4nSwtiDLLXs8axnIph+q2TVkY2hbJPZOn/cVsVcnLkzFy7w==",
"dependencies": {
"@babel/runtime": "^7.11.1",
"@emotion/hash": "^0.8.0",
"@emotion/unitless": "^0.7.5",
"classnames": "^2.3.1",
"csstype": "3.1.2",
"csstype": "^3.1.3",
"rc-util": "^5.35.0",
"stylis": "^4.0.13"
},
@@ -185,6 +185,11 @@
"react-dom": ">=16.0.0"
}
},
"node_modules/@ant-design/cssinjs/node_modules/csstype": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
},
"node_modules/@ant-design/icons": {
"version": "5.2.6",
"resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-5.2.6.tgz",
@@ -4203,14 +4208,14 @@
"integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="
},
"node_modules/@rc-component/color-picker": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/@rc-component/color-picker/-/color-picker-1.4.1.tgz",
"integrity": "sha512-vh5EWqnsayZa/JwUznqDaPJz39jznx/YDbyBuVJntv735tKXKwEUZZb2jYEldOg+NKWZwtALjGMrNeGBmqFoEw==",
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/@rc-component/color-picker/-/color-picker-1.5.1.tgz",
"integrity": "sha512-onyAFhWKXuG4P162xE+7IgaJkPkwM94XlOYnQuu69XdXWMfxpeFi6tpJBsieIMV7EnyLV5J3lDzdLiFeK0iEBA==",
"dependencies": {
"@babel/runtime": "^7.10.1",
"@ctrl/tinycolor": "^3.6.0",
"@babel/runtime": "^7.23.6",
"@ctrl/tinycolor": "^3.6.1",
"classnames": "^2.2.6",
"rc-util": "^5.30.0"
"rc-util": "^5.38.1"
},
"peerDependencies": {
"react": ">=16.9.0",
@@ -4315,9 +4320,9 @@
}
},
"node_modules/@redux-saga/core": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/@redux-saga/core/-/core-1.2.3.tgz",
"integrity": "sha512-U1JO6ncFBAklFTwoQ3mjAeQZ6QGutsJzwNBjgVLSWDpZTRhobUzuVDS1qH3SKGJD8fvqoaYOjp6XJ3gCmeZWgA==",
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/@redux-saga/core/-/core-1.3.0.tgz",
"integrity": "sha512-L+i+qIGuyWn7CIg7k1MteHGfttKPmxwZR5E7OsGikCL2LzYA0RERlaUY00Y3P3ZV2EYgrsYlBrGs6cJP5OKKqA==",
"dependencies": {
"@babel/runtime": "^7.6.3",
"@redux-saga/deferred": "^1.2.1",
@@ -4325,7 +4330,6 @@
"@redux-saga/is": "^1.1.3",
"@redux-saga/symbols": "^1.1.3",
"@redux-saga/types": "^1.2.1",
"redux": "^4.0.4",
"typescript-tuple": "^2.2.1"
},
"funding": {
@@ -4333,14 +4337,6 @@
"url": "https://opencollective.com/redux-saga"
}
},
"node_modules/@redux-saga/core/node_modules/redux": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz",
"integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==",
"dependencies": {
"@babel/runtime": "^7.9.2"
}
},
"node_modules/@redux-saga/deferred": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@redux-saga/deferred/-/deferred-1.2.1.tgz",
@@ -4512,44 +4508,44 @@
"integrity": "sha512-2/U3GXA6YiPYQDLGwtGlnNgKYBSwCFIHf8Y9LUY5VATHdtbLlU0Y1R3QoBnT0aB4qv/BEiVVsj7LJXoQCgJ2vA=="
},
"node_modules/@sentry-internal/feedback": {
"version": "7.91.0",
"resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-7.91.0.tgz",
"integrity": "sha512-SJKTSaz68F5YIwF79EttBm915M2LnacgZMYRnRumyTmMKnebGhYQLwWbZdpaDvOa1U18dgRajDX8Qed/8A3tXw==",
"version": "7.92.0",
"resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-7.92.0.tgz",
"integrity": "sha512-/jEALRtVqboxB9kcK2tag8QCO6XANTlGBb9RV3oeGXJe0DDNJXRq6wVZbfgztXJRrfgx4XVDcNt1pRVoGGG++g==",
"dependencies": {
"@sentry/core": "7.91.0",
"@sentry/types": "7.91.0",
"@sentry/utils": "7.91.0"
"@sentry/core": "7.92.0",
"@sentry/types": "7.92.0",
"@sentry/utils": "7.92.0"
},
"engines": {
"node": ">=12"
}
},
"node_modules/@sentry-internal/feedback/node_modules/@sentry/core": {
"version": "7.91.0",
"resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.91.0.tgz",
"integrity": "sha512-tu+gYq4JrTdrR+YSh5IVHF0fJi/Pi9y0HZ5H9HnYy+UMcXIotxf6hIEaC6ZKGeLWkGXffz2gKpQLe/g6vy/lPA==",
"version": "7.92.0",
"resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.92.0.tgz",
"integrity": "sha512-1Tly7YB2I1byI5xb0Cwrxs56Rhww+6mQ7m9P7rTmdC3/ijOzbEoohtYIUPwcooCEarpbEJe/tAayRx6BrH2UbQ==",
"dependencies": {
"@sentry/types": "7.91.0",
"@sentry/utils": "7.91.0"
"@sentry/types": "7.92.0",
"@sentry/utils": "7.92.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/@sentry-internal/feedback/node_modules/@sentry/types": {
"version": "7.91.0",
"resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.91.0.tgz",
"integrity": "sha512-bcQnb7J3P3equbCUc+sPuHog2Y47yGD2sCkzmnZBjvBT0Z1B4f36fI/5WjyZhTjLSiOdg3F2otwvikbMjmBDew==",
"version": "7.92.0",
"resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.92.0.tgz",
"integrity": "sha512-APmSOuZuoRGpbPpPeYIbMSplPjiWNLZRQa73QiXuTflW4Tu/ItDlU8hOa2+A6JKVkJCuD2EN6yUrxDGSMyNXeg==",
"engines": {
"node": ">=8"
}
},
"node_modules/@sentry-internal/feedback/node_modules/@sentry/utils": {
"version": "7.91.0",
"resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.91.0.tgz",
"integrity": "sha512-fvxjrEbk6T6Otu++Ax9ntlQ0sGRiwSC179w68aC3u26Wr30FAIRKqHTCCdc2jyWk7Gd9uWRT/cq+g8NG/8BfSg==",
"version": "7.92.0",
"resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.92.0.tgz",
"integrity": "sha512-3nEfrQ1z28b/2zgFGANPh5yMVtgwXmrasZxTvKbrAj+KWJpjrJHrIR84r9W277J44NMeZ5RhRW2uoDmuBslPnA==",
"dependencies": {
"@sentry/types": "7.91.0"
"@sentry/types": "7.92.0"
},
"engines": {
"node": ">=8"
@@ -4570,60 +4566,60 @@
}
},
"node_modules/@sentry/browser": {
"version": "7.91.0",
"resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.91.0.tgz",
"integrity": "sha512-lJv3x/xekzC/biiyAsVCioq2XnKNOZhI6jY3ZzLJZClYV8eKRi7D3KCsHRvMiCdGak1d/6sVp8F4NYY+YiWy1Q==",
"version": "7.92.0",
"resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.92.0.tgz",
"integrity": "sha512-loMr02/zQ38u8aQhYLtIBg0i5n3ps2e3GUXrt3CdsJQdkRYfa62gcrE7SzvoEpMVHTk7VOI4fWGht8cWw/1k3A==",
"dependencies": {
"@sentry-internal/feedback": "7.91.0",
"@sentry-internal/tracing": "7.91.0",
"@sentry/core": "7.91.0",
"@sentry/replay": "7.91.0",
"@sentry/types": "7.91.0",
"@sentry/utils": "7.91.0"
"@sentry-internal/feedback": "7.92.0",
"@sentry-internal/tracing": "7.92.0",
"@sentry/core": "7.92.0",
"@sentry/replay": "7.92.0",
"@sentry/types": "7.92.0",
"@sentry/utils": "7.92.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/@sentry/browser/node_modules/@sentry-internal/tracing": {
"version": "7.91.0",
"resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.91.0.tgz",
"integrity": "sha512-JH5y6gs6BS0its7WF2DhySu7nkhPDfZcdpAXldxzIlJpqFkuwQKLU5nkYJpiIyZz1NHYYtW5aum2bV2oCOdDRA==",
"version": "7.92.0",
"resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.92.0.tgz",
"integrity": "sha512-ur55vPcUUUWFUX4eVLNP71ohswK7ZZpleNZw9Y1GfLqyI+0ILQUwjtzqItJrdClvVsdRZJMRmDV40Hp9Lbb9mA==",
"dependencies": {
"@sentry/core": "7.91.0",
"@sentry/types": "7.91.0",
"@sentry/utils": "7.91.0"
"@sentry/core": "7.92.0",
"@sentry/types": "7.92.0",
"@sentry/utils": "7.92.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/@sentry/browser/node_modules/@sentry/core": {
"version": "7.91.0",
"resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.91.0.tgz",
"integrity": "sha512-tu+gYq4JrTdrR+YSh5IVHF0fJi/Pi9y0HZ5H9HnYy+UMcXIotxf6hIEaC6ZKGeLWkGXffz2gKpQLe/g6vy/lPA==",
"version": "7.92.0",
"resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.92.0.tgz",
"integrity": "sha512-1Tly7YB2I1byI5xb0Cwrxs56Rhww+6mQ7m9P7rTmdC3/ijOzbEoohtYIUPwcooCEarpbEJe/tAayRx6BrH2UbQ==",
"dependencies": {
"@sentry/types": "7.91.0",
"@sentry/utils": "7.91.0"
"@sentry/types": "7.92.0",
"@sentry/utils": "7.92.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/@sentry/browser/node_modules/@sentry/types": {
"version": "7.91.0",
"resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.91.0.tgz",
"integrity": "sha512-bcQnb7J3P3equbCUc+sPuHog2Y47yGD2sCkzmnZBjvBT0Z1B4f36fI/5WjyZhTjLSiOdg3F2otwvikbMjmBDew==",
"version": "7.92.0",
"resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.92.0.tgz",
"integrity": "sha512-APmSOuZuoRGpbPpPeYIbMSplPjiWNLZRQa73QiXuTflW4Tu/ItDlU8hOa2+A6JKVkJCuD2EN6yUrxDGSMyNXeg==",
"engines": {
"node": ">=8"
}
},
"node_modules/@sentry/browser/node_modules/@sentry/utils": {
"version": "7.91.0",
"resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.91.0.tgz",
"integrity": "sha512-fvxjrEbk6T6Otu++Ax9ntlQ0sGRiwSC179w68aC3u26Wr30FAIRKqHTCCdc2jyWk7Gd9uWRT/cq+g8NG/8BfSg==",
"version": "7.92.0",
"resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.92.0.tgz",
"integrity": "sha512-3nEfrQ1z28b/2zgFGANPh5yMVtgwXmrasZxTvKbrAj+KWJpjrJHrIR84r9W277J44NMeZ5RhRW2uoDmuBslPnA==",
"dependencies": {
"@sentry/types": "7.91.0"
"@sentry/types": "7.92.0"
},
"engines": {
"node": ">=8"
@@ -4821,13 +4817,13 @@
}
},
"node_modules/@sentry/react": {
"version": "7.91.0",
"resolved": "https://registry.npmjs.org/@sentry/react/-/react-7.91.0.tgz",
"integrity": "sha512-7JH2rWaX3WKHHvBcZQ4f/KnkYIXTf7hMojRFncUwPocdtDlhJw/JUvjAYNpEysixXIgsMes3B32lmtZjGjRhwQ==",
"version": "7.92.0",
"resolved": "https://registry.npmjs.org/@sentry/react/-/react-7.92.0.tgz",
"integrity": "sha512-lTvrLuvxtGEZbkW6NHru03K6eyixKyBliwiLwO+k37FK7Ha8Bwat2m77weyizWCdQ6DKlVazJNppkNeAlACIvQ==",
"dependencies": {
"@sentry/browser": "7.91.0",
"@sentry/types": "7.91.0",
"@sentry/utils": "7.91.0",
"@sentry/browser": "7.92.0",
"@sentry/types": "7.92.0",
"@sentry/utils": "7.92.0",
"hoist-non-react-statics": "^3.3.2"
},
"engines": {
@@ -4838,132 +4834,132 @@
}
},
"node_modules/@sentry/react/node_modules/@sentry/types": {
"version": "7.91.0",
"resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.91.0.tgz",
"integrity": "sha512-bcQnb7J3P3equbCUc+sPuHog2Y47yGD2sCkzmnZBjvBT0Z1B4f36fI/5WjyZhTjLSiOdg3F2otwvikbMjmBDew==",
"version": "7.92.0",
"resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.92.0.tgz",
"integrity": "sha512-APmSOuZuoRGpbPpPeYIbMSplPjiWNLZRQa73QiXuTflW4Tu/ItDlU8hOa2+A6JKVkJCuD2EN6yUrxDGSMyNXeg==",
"engines": {
"node": ">=8"
}
},
"node_modules/@sentry/react/node_modules/@sentry/utils": {
"version": "7.91.0",
"resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.91.0.tgz",
"integrity": "sha512-fvxjrEbk6T6Otu++Ax9ntlQ0sGRiwSC179w68aC3u26Wr30FAIRKqHTCCdc2jyWk7Gd9uWRT/cq+g8NG/8BfSg==",
"version": "7.92.0",
"resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.92.0.tgz",
"integrity": "sha512-3nEfrQ1z28b/2zgFGANPh5yMVtgwXmrasZxTvKbrAj+KWJpjrJHrIR84r9W277J44NMeZ5RhRW2uoDmuBslPnA==",
"dependencies": {
"@sentry/types": "7.91.0"
"@sentry/types": "7.92.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/@sentry/replay": {
"version": "7.91.0",
"resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.91.0.tgz",
"integrity": "sha512-XwbesnLLNtaVXKtDoyBB96GxJuhGi9zy3a662Ba/McmumCnkXrMQYpQPh08U7MgkTyDRgjDwm7PXDhiKpcb03g==",
"version": "7.92.0",
"resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.92.0.tgz",
"integrity": "sha512-G1t9Uvc9cR8VpNkElwvHIMGzykjIKikb10n0tfVd3e+rBPMCCjCPWOduwG6jZYxcvCjTpqmJh6NSLXxL/Mt4JA==",
"dependencies": {
"@sentry-internal/tracing": "7.91.0",
"@sentry/core": "7.91.0",
"@sentry/types": "7.91.0",
"@sentry/utils": "7.91.0"
"@sentry-internal/tracing": "7.92.0",
"@sentry/core": "7.92.0",
"@sentry/types": "7.92.0",
"@sentry/utils": "7.92.0"
},
"engines": {
"node": ">=12"
}
},
"node_modules/@sentry/replay/node_modules/@sentry-internal/tracing": {
"version": "7.91.0",
"resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.91.0.tgz",
"integrity": "sha512-JH5y6gs6BS0its7WF2DhySu7nkhPDfZcdpAXldxzIlJpqFkuwQKLU5nkYJpiIyZz1NHYYtW5aum2bV2oCOdDRA==",
"version": "7.92.0",
"resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.92.0.tgz",
"integrity": "sha512-ur55vPcUUUWFUX4eVLNP71ohswK7ZZpleNZw9Y1GfLqyI+0ILQUwjtzqItJrdClvVsdRZJMRmDV40Hp9Lbb9mA==",
"dependencies": {
"@sentry/core": "7.91.0",
"@sentry/types": "7.91.0",
"@sentry/utils": "7.91.0"
"@sentry/core": "7.92.0",
"@sentry/types": "7.92.0",
"@sentry/utils": "7.92.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/@sentry/replay/node_modules/@sentry/core": {
"version": "7.91.0",
"resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.91.0.tgz",
"integrity": "sha512-tu+gYq4JrTdrR+YSh5IVHF0fJi/Pi9y0HZ5H9HnYy+UMcXIotxf6hIEaC6ZKGeLWkGXffz2gKpQLe/g6vy/lPA==",
"version": "7.92.0",
"resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.92.0.tgz",
"integrity": "sha512-1Tly7YB2I1byI5xb0Cwrxs56Rhww+6mQ7m9P7rTmdC3/ijOzbEoohtYIUPwcooCEarpbEJe/tAayRx6BrH2UbQ==",
"dependencies": {
"@sentry/types": "7.91.0",
"@sentry/utils": "7.91.0"
"@sentry/types": "7.92.0",
"@sentry/utils": "7.92.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/@sentry/replay/node_modules/@sentry/types": {
"version": "7.91.0",
"resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.91.0.tgz",
"integrity": "sha512-bcQnb7J3P3equbCUc+sPuHog2Y47yGD2sCkzmnZBjvBT0Z1B4f36fI/5WjyZhTjLSiOdg3F2otwvikbMjmBDew==",
"version": "7.92.0",
"resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.92.0.tgz",
"integrity": "sha512-APmSOuZuoRGpbPpPeYIbMSplPjiWNLZRQa73QiXuTflW4Tu/ItDlU8hOa2+A6JKVkJCuD2EN6yUrxDGSMyNXeg==",
"engines": {
"node": ">=8"
}
},
"node_modules/@sentry/replay/node_modules/@sentry/utils": {
"version": "7.91.0",
"resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.91.0.tgz",
"integrity": "sha512-fvxjrEbk6T6Otu++Ax9ntlQ0sGRiwSC179w68aC3u26Wr30FAIRKqHTCCdc2jyWk7Gd9uWRT/cq+g8NG/8BfSg==",
"version": "7.92.0",
"resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.92.0.tgz",
"integrity": "sha512-3nEfrQ1z28b/2zgFGANPh5yMVtgwXmrasZxTvKbrAj+KWJpjrJHrIR84r9W277J44NMeZ5RhRW2uoDmuBslPnA==",
"dependencies": {
"@sentry/types": "7.91.0"
"@sentry/types": "7.92.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/@sentry/tracing": {
"version": "7.91.0",
"resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-7.91.0.tgz",
"integrity": "sha512-IlSAMvqfCL/2TwwN4Tmk6bGMgilGruv5oIJ1GMenVZk53bHwjpjzMbd0ms8+S5zJwAgTQXoCbRhaFFrNmptteQ==",
"version": "7.92.0",
"resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-7.92.0.tgz",
"integrity": "sha512-1+TFFPVEdax4dNi68gin6MENiyGe9mOuNXfjulrP5eCzUEByus5HAxeDI/LLQ1hArfn048AzwSwKUsS2fO5sbg==",
"dependencies": {
"@sentry-internal/tracing": "7.91.0"
"@sentry-internal/tracing": "7.92.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/@sentry/tracing/node_modules/@sentry-internal/tracing": {
"version": "7.91.0",
"resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.91.0.tgz",
"integrity": "sha512-JH5y6gs6BS0its7WF2DhySu7nkhPDfZcdpAXldxzIlJpqFkuwQKLU5nkYJpiIyZz1NHYYtW5aum2bV2oCOdDRA==",
"version": "7.92.0",
"resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.92.0.tgz",
"integrity": "sha512-ur55vPcUUUWFUX4eVLNP71ohswK7ZZpleNZw9Y1GfLqyI+0ILQUwjtzqItJrdClvVsdRZJMRmDV40Hp9Lbb9mA==",
"dependencies": {
"@sentry/core": "7.91.0",
"@sentry/types": "7.91.0",
"@sentry/utils": "7.91.0"
"@sentry/core": "7.92.0",
"@sentry/types": "7.92.0",
"@sentry/utils": "7.92.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/@sentry/tracing/node_modules/@sentry/core": {
"version": "7.91.0",
"resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.91.0.tgz",
"integrity": "sha512-tu+gYq4JrTdrR+YSh5IVHF0fJi/Pi9y0HZ5H9HnYy+UMcXIotxf6hIEaC6ZKGeLWkGXffz2gKpQLe/g6vy/lPA==",
"version": "7.92.0",
"resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.92.0.tgz",
"integrity": "sha512-1Tly7YB2I1byI5xb0Cwrxs56Rhww+6mQ7m9P7rTmdC3/ijOzbEoohtYIUPwcooCEarpbEJe/tAayRx6BrH2UbQ==",
"dependencies": {
"@sentry/types": "7.91.0",
"@sentry/utils": "7.91.0"
"@sentry/types": "7.92.0",
"@sentry/utils": "7.92.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/@sentry/tracing/node_modules/@sentry/types": {
"version": "7.91.0",
"resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.91.0.tgz",
"integrity": "sha512-bcQnb7J3P3equbCUc+sPuHog2Y47yGD2sCkzmnZBjvBT0Z1B4f36fI/5WjyZhTjLSiOdg3F2otwvikbMjmBDew==",
"version": "7.92.0",
"resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.92.0.tgz",
"integrity": "sha512-APmSOuZuoRGpbPpPeYIbMSplPjiWNLZRQa73QiXuTflW4Tu/ItDlU8hOa2+A6JKVkJCuD2EN6yUrxDGSMyNXeg==",
"engines": {
"node": ">=8"
}
},
"node_modules/@sentry/tracing/node_modules/@sentry/utils": {
"version": "7.91.0",
"resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.91.0.tgz",
"integrity": "sha512-fvxjrEbk6T6Otu++Ax9ntlQ0sGRiwSC179w68aC3u26Wr30FAIRKqHTCCdc2jyWk7Gd9uWRT/cq+g8NG/8BfSg==",
"version": "7.92.0",
"resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.92.0.tgz",
"integrity": "sha512-3nEfrQ1z28b/2zgFGANPh5yMVtgwXmrasZxTvKbrAj+KWJpjrJHrIR84r9W277J44NMeZ5RhRW2uoDmuBslPnA==",
"dependencies": {
"@sentry/types": "7.91.0"
"@sentry/types": "7.92.0"
},
"engines": {
"node": ">=8"
@@ -5478,9 +5474,9 @@
}
},
"node_modules/@types/cookie": {
"version": "0.5.4",
"resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.4.tgz",
"integrity": "sha512-7z/eR6O859gyWIAjuvBWFzNURmf2oPBmJlfVWkwehU5nzIyjwBsTh7WMmEEV4JFnHuQ3ex4oyTvfKzcyJVDBNA=="
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
"integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA=="
},
"node_modules/@types/d3-array": {
"version": "3.2.1",
@@ -6544,23 +6540,22 @@
}
},
"node_modules/antd": {
"version": "5.12.5",
"resolved": "https://registry.npmjs.org/antd/-/antd-5.12.5.tgz",
"integrity": "sha512-m9r9VhTmANS4kdBwHcxI4QWIGoZh3LspXNb2SxoezRSUZ9RUFpf+gO0AjPx8EPeO/nLKsHAoCSLza9r041bAgw==",
"version": "5.12.8",
"resolved": "https://registry.npmjs.org/antd/-/antd-5.12.8.tgz",
"integrity": "sha512-R2CRcB+aaVZurb3J0IKpBRWq5kW4CLcSqDF58/QBsqYdzK7XjSvM8+eF3rWVRUDbSJfGmyW7I80ywNRYpW1+vA==",
"dependencies": {
"@ant-design/colors": "^7.0.0",
"@ant-design/cssinjs": "^1.18.1",
"@ant-design/colors": "^7.0.2",
"@ant-design/cssinjs": "^1.18.2",
"@ant-design/icons": "^5.2.6",
"@ant-design/react-slick": "~1.0.2",
"@babel/runtime": "^7.23.4",
"@ctrl/tinycolor": "^3.6.1",
"@rc-component/color-picker": "~1.4.1",
"@rc-component/color-picker": "~1.5.1",
"@rc-component/mutate-observer": "^1.1.0",
"@rc-component/tour": "~1.11.1",
"@rc-component/trigger": "^1.18.2",
"classnames": "^2.3.2",
"classnames": "^2.5.1",
"copy-to-clipboard": "^3.3.3",
"dayjs": "^1.11.1",
"dayjs": "^1.11.10",
"qrcode.react": "^3.1.0",
"rc-cascader": "~3.20.0",
"rc-checkbox": "~3.1.0",
@@ -6576,7 +6571,7 @@
"rc-menu": "~9.12.4",
"rc-motion": "^2.9.0",
"rc-notification": "~5.3.0",
"rc-pagination": "~4.0.3",
"rc-pagination": "~4.0.4",
"rc-picker": "~3.14.6",
"rc-progress": "~3.5.1",
"rc-rate": "~2.12.0",
@@ -6592,7 +6587,7 @@
"rc-tooltip": "~6.1.3",
"rc-tree": "~5.8.2",
"rc-tree-select": "~5.15.0",
"rc-upload": "~4.3.5",
"rc-upload": "~4.5.2",
"rc-util": "^5.38.1",
"scroll-into-view-if-needed": "^3.1.0",
"throttle-debounce": "^5.0.0"
@@ -6966,11 +6961,11 @@
}
},
"node_modules/axios": {
"version": "1.6.3",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.6.3.tgz",
"integrity": "sha512-fWyNdeawGam70jXSVlKl+SUNVcL6j6W79CuSIPfi6HnDUmSCH6gyUys/HrqHeA/wU0Az41rRgean494d0Jb+ww==",
"version": "1.6.4",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.6.4.tgz",
"integrity": "sha512-heJnIs6N4aa1eSthhN9M5ioILu8Wi8vmQW9iHQ9NUvfkJb0lEEDUiIdQNAuBtfUt3FxReaKdpQA5DbmMOqzF/A==",
"dependencies": {
"follow-redirects": "^1.15.0",
"follow-redirects": "^1.15.4",
"form-data": "^4.0.0",
"proxy-from-env": "^1.1.0"
}
@@ -7814,9 +7809,9 @@
"integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ=="
},
"node_modules/classnames": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz",
"integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw=="
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz",
"integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow=="
},
"node_modules/clean-css": {
"version": "5.3.3",
@@ -11089,9 +11084,9 @@
"integrity": "sha512-GmrB+b6woz6CCdQe6w1GHs/1lt25l7SR5hmhF8jRdarpv/OgjLyuQygLu1makJapixeb1aQhP/Oa1iKi93o/aQ=="
},
"node_modules/follow-redirects": {
"version": "1.15.3",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz",
"integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==",
"version": "1.15.4",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz",
"integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==",
"funding": [
{
"type": "individual",
@@ -12009,9 +12004,9 @@
}
},
"node_modules/i18next": {
"version": "23.7.12",
"resolved": "https://registry.npmjs.org/i18next/-/i18next-23.7.12.tgz",
"integrity": "sha512-BZcAvh5M/s2CDrbxNFT8kscfzCYW607wnc4wnQ11HaHDJlS46P/0+P++nmgnc5CIjSQ1DfHAM9RE+hIyALvI7g==",
"version": "23.7.16",
"resolved": "https://registry.npmjs.org/i18next/-/i18next-23.7.16.tgz",
"integrity": "sha512-SrqFkMn9W6Wb43ZJ9qrO6U2U4S80RsFMA7VYFSqp7oc7RllQOYDCdRfsse6A7Cq/V8MnpxKvJCYgM8++27n4Fw==",
"funding": [
{
"type": "individual",
@@ -15655,9 +15650,9 @@
"integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="
},
"node_modules/phone": {
"version": "3.1.41",
"resolved": "https://registry.npmjs.org/phone/-/phone-3.1.41.tgz",
"integrity": "sha512-sjYk1DdjYqSbcfYyeHQ6FNXr2RH7gHtkQflyleSBQ0V83db3tO9sXHhsr5WyYdsXaOW2tBg4p+P8HVgwFRJp+Q==",
"version": "3.1.42",
"resolved": "https://registry.npmjs.org/phone/-/phone-3.1.42.tgz",
"integrity": "sha512-J+cbZtGcN/ph10TRxwCLYZx9/k4WOU1wImMiUiUjr/2sWnY7bR7CadehbsM8E9UyG+/shgmH++eKbhD0kR4EZA==",
"engines": {
"node": ">=12"
}
@@ -17652,9 +17647,9 @@
}
},
"node_modules/rc-pagination": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/rc-pagination/-/rc-pagination-4.0.3.tgz",
"integrity": "sha512-s1MNwyU83AgycikYckRdpmkN+4ZZuul0E0YdDp7dMgcjg/d2fak767ZIbLP4Q5YPPla7NDorfVFTvGQAPj6jXA==",
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/rc-pagination/-/rc-pagination-4.0.4.tgz",
"integrity": "sha512-GGrLT4NgG6wgJpT/hHIpL9nELv27A1XbSZzECIuQBQTVSf4xGKxWr6I/jhpRPauYEWEbWVw22ObG6tJQqwJqWQ==",
"dependencies": {
"@babel/runtime": "^7.10.1",
"classnames": "^2.3.2",
@@ -17977,9 +17972,9 @@
}
},
"node_modules/rc-upload": {
"version": "4.3.5",
"resolved": "https://registry.npmjs.org/rc-upload/-/rc-upload-4.3.5.tgz",
"integrity": "sha512-EHlKJbhkgFSQHliTj9v/2K5aEuFwfUQgZARzD7AmAPOneZEPiCNF3n6PEWIuqz9h7oq6FuXgdR67sC5BWFxJbA==",
"version": "4.5.2",
"resolved": "https://registry.npmjs.org/rc-upload/-/rc-upload-4.5.2.tgz",
"integrity": "sha512-QO3ne77DwnAPKFn0bA5qJM81QBjQi0e0NHdkvpFyY73Bea2NfITiotqJqVjHgeYPOJu5lLVR32TNGP084aSoXA==",
"dependencies": {
"@babel/runtime": "^7.18.3",
"classnames": "^2.2.5",
@@ -18173,13 +18168,13 @@
}
},
"node_modules/react-cookie": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/react-cookie/-/react-cookie-6.1.1.tgz",
"integrity": "sha512-fuFRpf8LH6SfmVMowDUIRywJF5jAUDUWrm0EI5VdXfTl5bPcJ7B0zWbuYpT0Tvikx7Gs18MlvAT+P+744dUz2g==",
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/react-cookie/-/react-cookie-7.0.0.tgz",
"integrity": "sha512-BDXJ9J0zo8xJtoTY3vu6Mn+67gdi1Q1JIJndFMemeHu3tEAN2G3EYqYfB0KNL3IXev3h+lfuOKJYvPYWMN4ijg==",
"dependencies": {
"@types/hoist-non-react-statics": "^3.3.1",
"@types/hoist-non-react-statics": "^3.3.5",
"hoist-non-react-statics": "^3.3.2",
"universal-cookie": "^6.0.0"
"universal-cookie": "^7.0.0"
},
"peerDependencies": {
"react": ">= 16.3.0"
@@ -18848,11 +18843,11 @@
}
},
"node_modules/redux-saga": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/redux-saga/-/redux-saga-1.2.3.tgz",
"integrity": "sha512-HDe0wTR5nhd8Xr5xjGzoyTbdAw6rjy1GDplFt3JKtKN8/MnkQSRqK/n6aQQhpw5NI4ekDVOaW+w4sdxPBaCoTQ==",
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/redux-saga/-/redux-saga-1.3.0.tgz",
"integrity": "sha512-J9RvCeAZXSTAibFY0kGw6Iy4EdyDNW7k6Q+liwX+bsck7QVsU78zz8vpBRweEfANxnnlG/xGGeOvf6r8UXzNJQ==",
"dependencies": {
"@redux-saga/core": "^1.2.3"
"@redux-saga/core": "^1.3.0"
}
},
"node_modules/redux-state-sync": {
@@ -19031,9 +19026,9 @@
"integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ=="
},
"node_modules/reselect": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/reselect/-/reselect-5.0.1.tgz",
"integrity": "sha512-D72j2ubjgHpvuCiORWkOUxndHJrxDaSolheiz5CO+roz8ka97/4msh2E8F5qay4GawR5vzBt5MkbDHT+Rdy/Wg=="
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.0.tgz",
"integrity": "sha512-aw7jcGLDpSgNDyWBQLv2cedml85qd95/iszJjN988zX1t7AVRJi19d9kto5+W7oCfQ94gyo40dVbT6g2k4/kXg=="
},
"node_modules/resize-observer-polyfill": {
"version": "1.5.1",
@@ -19390,9 +19385,9 @@
"integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA=="
},
"node_modules/sass": {
"version": "1.69.5",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz",
"integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==",
"version": "1.69.7",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.69.7.tgz",
"integrity": "sha512-rzj2soDeZ8wtE2egyLXgOOHQvaC2iosZrkF6v3EUG+tBwEvhqUCzm0VP3k9gHF9LXbSrRhT5SksoI56Iw8NPnQ==",
"dependencies": {
"chokidar": ">=3.0.0 <4.0.0",
"immutable": "^4.0.0",
@@ -19798,9 +19793,9 @@
}
},
"node_modules/socket.io-client": {
"version": "4.7.2",
"resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.2.tgz",
"integrity": "sha512-vtA0uD4ibrYD793SOIAwlo8cj6haOeMHrGvwPxJsxH7CeIksqJ+3Zc06RvWTIFgiSqx4A3sOnTXpfAEE2Zyz6w==",
"version": "4.7.3",
"resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.3.tgz",
"integrity": "sha512-nU+ywttCyBitXIl9Xe0RSEfek4LneYkJxCeNnKCuhwoH4jGXO1ipIUw/VA/+Vvv2G1MTym11fzFC0SxkrcfXDw==",
"dependencies": {
"@socket.io/component-emitter": "~3.1.0",
"debug": "~4.3.2",
@@ -21665,12 +21660,20 @@
}
},
"node_modules/universal-cookie": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/universal-cookie/-/universal-cookie-6.1.1.tgz",
"integrity": "sha512-33S9x3CpdUnnjwTNs2Fgc41WGve2tdLtvaK2kPSbZRc5pGpz2vQFbRWMxlATsxNNe/Cy8SzmnmbuBM85jpZPtA==",
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/universal-cookie/-/universal-cookie-7.0.0.tgz",
"integrity": "sha512-T3XwZ2cUbHRU+UNfPSaPd0zti50tVIvk6onLA90pa+qKwsP8ksn5pwYM7rWMODoX1OCA9qPAN8uK88Avq5YbtQ==",
"dependencies": {
"@types/cookie": "^0.5.1",
"cookie": "^0.5.0"
"@types/cookie": "^0.6.0",
"cookie": "^0.6.0"
}
},
"node_modules/universal-cookie/node_modules/cookie": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
"integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/universalify": {

View File

@@ -12,13 +12,13 @@
"@fingerprintjs/fingerprintjs": "^4.2.1",
"@jsreport/browser-client": "^3.1.0",
"@reduxjs/toolkit": "^2.0.1",
"@sentry/react": "^7.91.0",
"@sentry/tracing": "^7.91.0",
"@sentry/react": "^7.92.0",
"@sentry/tracing": "^7.92.0",
"@splitsoftware/splitio-react": "^1.10.2",
"@tanem/react-nprogress": "^5.0.51",
"antd": "^5.12.5",
"antd": "^5.12.8",
"apollo-link-logger": "^2.0.1",
"axios": "^1.6.3",
"axios": "^1.6.4",
"craco-less": "^3.0.1",
"dayjs": "^1.11.10",
"dayjs-business-days2": "^1.2.2",
@@ -29,7 +29,7 @@
"exifr": "^7.1.3",
"firebase": "^10.7.1",
"graphql": "^16.6.0",
"i18next": "^23.7.12",
"i18next": "^23.7.16",
"i18next-browser-languagedetector": "^7.0.2",
"jsoneditor": "^10.0.0",
"jsreport-browser-client-dist": "^1.3.0",
@@ -37,7 +37,7 @@
"logrocket": "^7.0.0",
"markerjs2": "^2.31.4",
"normalize-url": "^8.0.0",
"phone": "^3.1.41",
"phone": "^3.1.42",
"preval.macro": "^5.0.0",
"prop-types": "^15.8.1",
"query-string": "^8.1.0",
@@ -46,7 +46,7 @@
"react": "^18.2.0",
"react-big-calendar": "^1.8.5",
"react-color": "^2.19.3",
"react-cookie": "^6.1.1",
"react-cookie": "^7.0.0",
"react-dom": "^18.2.0",
"react-drag-listview": "^2.0.0",
"react-grid-gallery": "^1.0.0",
@@ -66,11 +66,11 @@
"recharts": "^2.4.3",
"redux": "^5.0.1",
"redux-persist": "^6.0.0",
"redux-saga": "^1.2.3",
"redux-saga": "^1.3.0",
"redux-state-sync": "^3.1.4",
"reselect": "^5.0.1",
"sass": "^1.58.3",
"socket.io-client": "^4.7.2",
"reselect": "^5.1.0",
"sass": "^1.69.7",
"socket.io-client": "^4.7.3",
"styled-components": "^6.1.6",
"subscriptions-transport-ws": "^0.11.0",
"terser-webpack-plugin": "^5.3.10",

View File

@@ -215,10 +215,7 @@ export default function CourtesyCarCreateFormComponent({ form, saveLoading }) {
>
<CourtesyCarStatus />
</Form.Item>
<Form.Item
label={t("courtesycars.fields.readiness")}
name="readiness"
>
<Form.Item label={t("courtesycars.fields.readiness")} name="readiness">
<CourtesyCarReadiness />
</Form.Item>
<div>
@@ -235,8 +232,9 @@ export default function CourtesyCarCreateFormComponent({ form, saveLoading }) {
>
{() => {
const nextservicekm = form.getFieldValue("nextservicekm");
const mileageOver =
nextservicekm && nextservicekm <= form.getFieldValue("mileage");
const mileageOver = nextservicekm
? nextservicekm <= form.getFieldValue("mileage")
: false;
if (mileageOver)
return (
<Space direction="vertical" style={{ color: "tomato" }}>

View File

@@ -73,10 +73,10 @@ export default function CourtesyCarsList({ loading, courtesycars, refetch }) {
render: (text, record) => {
const { nextservicedate, nextservicekm, mileage } = record;
const mileageOver = nextservicekm <= mileage;
const mileageOver = nextservicekm ? nextservicekm <= mileage : false;
const dueForService =
nextservicedate && dayjs(nextservicedate).isBefore(dayjs());
nextservicedate && dayjs(nextservicedate).end('day').isSameOrBefore(dayjs());
return (
<Space>

View File

@@ -28,7 +28,7 @@ export function DmsLogEvents({ socket, logs, bodyshop }) {
items={logs.map((log, idx) => ({
key: idx,
color: LogLevelHierarchy(log.level),
label: (
children: (
<Space wrap align="start" style={{}}>
<Tag color={LogLevelHierarchy(log.level)}>{log.level}</Tag>
<span>{dayjs(log.timestamp).format("MM/DD/YYYY HH:mm:ss")}</span>

View File

@@ -62,7 +62,8 @@ export function DocumentEditorComponent({ currentUser, bodyshop, document }) {
// attach an event handler to assign annotated image back to our image element
markerArea.current.addEventListener("close", (closeEvent) => {});
markerArea.current.addEventListener("render", (dataUrl) => {
markerArea.current.addEventListener("render", (event) => {
const dataUrl = event.dataUrl;
imgRef.current.src = dataUrl;
markerArea.current.close();
triggerUpload(dataUrl);

View File

@@ -1,100 +1,105 @@
import { DatePicker } from "antd";
import {DatePicker} from "antd";
import dayjs from "../../utils/day";
import React, { useRef } from "react";
import React, {useRef} from "react";
import {connect} from "react-redux";
import {createStructuredSelector} from "reselect";
import {selectBodyshop} from "../../redux/user/user.selectors";
import { connect } from "react-redux";
import { createStructuredSelector } from "reselect";
import { selectBodyshop } from "../../redux/user/user.selectors";
const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop,
bodyshop: selectBodyshop,
});
const mapDispatchToProps = (dispatch) => ({
//setUserLanguage: language => dispatch(setUserLanguage(language))
});
const mapDispatchToProps = (dispatch) => ({});
export default connect(mapStateToProps, mapDispatchToProps)(FormDatePicker);
const dateFormat = "MM/DD/YYYY";
// TODO, this is causing a dirty change when it should not (click the picker, click off the picker)
export function FormDatePicker({
bodyshop,
value,
onChange,
onBlur,
onlyFuture,
isDateOnly = true,
...restProps
bodyshop,
value,
onChange,
onBlur,
onlyFuture,
isDateOnly = true,
...restProps
}) {
const ref = useRef();
const ref = useRef();
const handleChange = (newDate) => {
if (value !== newDate && onChange) {
onChange(isDateOnly ? newDate && newDate.format("YYYY-MM-DD") : newDate);
}
};
const handleKeyDown = (e) => {
if (e.key.toLowerCase() === "t") {
if (onChange) {
onChange(isDateOnly ? dayjs().format("YYYY-MM-DD") : dayjs());
}
} else if (e.key.toLowerCase() === "enter") {
if (ref.current && ref.current.blur) ref.current.blur();
}
};
const handleBlur = (e) => {
const v = e.target.value;
if (!v) return;
const _a = dayjs(
v,
["MMDDYY", "MMDDYYYY", "MMDD", "MM/DD/YY"],
"en",
false
);
if (
_a.isValid()
&& value
&& value.isValid
&& value.isValid()
) {
_a.set({
hours: value.hours(),
minutes: value.minutes(),
seconds: value.seconds(),
milliseconds: value.milliseconds(),
});
}
if (_a.isValid() && onChange) {
if (onlyFuture) {
if (dayjs().subtract(1, "day").isBefore(_a)) {
onChange(isDateOnly ? _a.format("YYYY-MM-DD") : _a);
} else {
onChange(isDateOnly ? dayjs().format("YYYY-MM-DD") : dayjs());
const handleChange = (newDate) => {
if (value !== newDate && onChange) {
onChange(isDateOnly ? newDate && newDate.format("YYYY-MM-DD") : newDate);
}
} else {
onChange(isDateOnly ? _a.format("YYYY-MM-DD") : _a);
}
}
};
};
return (
<div onKeyDown={handleKeyDown}>
<DatePicker
ref={ref}
value={value ? dayjs(value) : null}
onChange={handleChange}
format={dateFormat}
onBlur={onBlur || handleBlur}
showToday={false}
disabledTime
{...(onlyFuture && {
disabledDate: (d) => dayjs().subtract(1, "day").isAfter(d),
})}
{...restProps}
/>
</div>
);
const handleKeyDown = (e) => {
if (e.key.toLowerCase() === "t") {
if (onChange) {
onChange(isDateOnly ? dayjs().format("YYYY-MM-DD") : dayjs());
}
} else if (e.key.toLowerCase() === "enter") {
if (ref.current && ref.current.blur) ref.current.blur();
}
};
const handleBlur = (e) => {
const v = e.target.value;
if (!v) return;
const formats = ["MMDDYY", "MMDDYYYY", "MMDD", "MM/DD/YY", "MM/DD/YYYY"];
let _a;
// Iterate through formats to find the correct one
for (let format of formats) {
_a = dayjs(v, format);
if (v === _a.format(format)) {
break;
}
}
if (
_a.isValid()
&& value
&& value.isValid
&& value.isValid()
) {
_a.set({
hours: value.hours(),
minutes: value.minutes(),
seconds: value.seconds(),
milliseconds: value.milliseconds(),
});
}
if (_a.isValid() && onChange) {
if (onlyFuture) {
if (dayjs().subtract(1, "day").isBefore(_a)) {
onChange(isDateOnly ? _a.format("YYYY-MM-DD") : _a);
} else {
onChange(isDateOnly ? dayjs().format("YYYY-MM-DD") : dayjs());
}
} else {
onChange(isDateOnly ? _a.format("YYYY-MM-DD") : _a);
}
}
};
return (
<div onKeyDown={handleKeyDown}>
<DatePicker
ref={ref}
value={value ? dayjs(value) : null}
onChange={handleChange}
format={dateFormat}
onBlur={onBlur || handleBlur}
showToday={false}
disabledTime
{...(onlyFuture && {
disabledDate: (d) => dayjs().subtract(1, "day").isAfter(d),
})}
{...restProps}
/>
</div>
);
}

View File

@@ -16,7 +16,7 @@ export default function JobDetailCardsDatesComponent({loading, data}) {
? [
{
key: "date_last_contacted",
label: (
children: (
<>
<label>{t("jobs.fields.date_last_contacted")}: </label>
<DateTimeFormatter>{data.date_last_contacted}</DateTimeFormatter>
@@ -29,7 +29,7 @@ export default function JobDetailCardsDatesComponent({loading, data}) {
? [
{
key: "date_open",
label: (
children: (
<>
<label>{t("jobs.fields.date_open")}: </label>
<DateTimeFormatter>{data.date_open}</DateTimeFormatter>
@@ -42,7 +42,7 @@ export default function JobDetailCardsDatesComponent({loading, data}) {
? [
{
key: "date_estimated",
label: (
children: (
<>
<label>{t("jobs.fields.date_estimated")}: </label>
<DateTimeFormatter>{data.date_estimated}</DateTimeFormatter>
@@ -55,7 +55,7 @@ export default function JobDetailCardsDatesComponent({loading, data}) {
? [
{
key: "date_scheduled",
label: (
children: (
<>
<label>{t("jobs.fields.date_scheduled")}: </label>
<DateTimeFormatter>{data.date_scheduled}</DateTimeFormatter>
@@ -68,7 +68,7 @@ export default function JobDetailCardsDatesComponent({loading, data}) {
? [
{
key: "scheduled_in",
label: (
children: (
<>
<label>{t("jobs.fields.scheduled_in")}: </label>
<DateTimeFormatter>{data.scheduled_in}</DateTimeFormatter>
@@ -81,7 +81,7 @@ export default function JobDetailCardsDatesComponent({loading, data}) {
? [
{
key: "actual_in",
label: (
children: (
<>
<label>{t("jobs.fields.actual_in")}: </label>
<DateTimeFormatter>{data.actual_in}</DateTimeFormatter>
@@ -94,7 +94,7 @@ export default function JobDetailCardsDatesComponent({loading, data}) {
? [
{
key: "date_repairstarted",
label: (
children: (
<>
<label>{t("jobs.fields.date_repairstarted")}: </label>
<DateTimeFormatter>{data.date_repairstarted}</DateTimeFormatter>
@@ -107,7 +107,7 @@ export default function JobDetailCardsDatesComponent({loading, data}) {
? [
{
key: "scheduled_completion",
label: (
children: (
<>
<label>{t("jobs.fields.scheduled_completion")}: </label>
<DateTimeFormatter>{data.scheduled_completion}</DateTimeFormatter>
@@ -120,7 +120,7 @@ export default function JobDetailCardsDatesComponent({loading, data}) {
? [
{
key: "actual_completion",
label: (
children: (
<>
<label>{t("jobs.fields.actual_completion")}: </label>
<DateTimeFormatter>{data.actual_completion}</DateTimeFormatter>
@@ -133,7 +133,7 @@ export default function JobDetailCardsDatesComponent({loading, data}) {
? [
{
key: "scheduled_delivery",
label: (
children: (
<>
<label>{t("jobs.fields.scheduled_delivery")}: </label>
<DateTimeFormatter>{data.scheduled_delivery}</DateTimeFormatter>
@@ -146,7 +146,7 @@ export default function JobDetailCardsDatesComponent({loading, data}) {
? [
{
key: "actual_delivery",
label: (
children: (
<>
<label>{t("jobs.fields.actual_delivery")}: </label>
<DateTimeFormatter>{data.actual_delivery}</DateTimeFormatter>
@@ -159,7 +159,7 @@ export default function JobDetailCardsDatesComponent({loading, data}) {
? [
{
key: "date_invoiced",
label: (
children: (
<>
<label>{t("jobs.fields.date_invoiced")}: </label>
<DateTimeFormatter>{data.date_invoiced}</DateTimeFormatter>
@@ -172,7 +172,7 @@ export default function JobDetailCardsDatesComponent({loading, data}) {
? [
{
key: "date_exported",
label: (
children: (
<>
<label>{t("jobs.fields.date_exported")}: </label>
<DateTimeFormatter>{data.date_exported}</DateTimeFormatter>

View File

@@ -32,7 +32,7 @@ export default function JobLinesExpander({jobline, jobid}) {
data.parts_order_lines.length > 0
? data.parts_order_lines.map((line) => ({
key: line.id,
label: (
children: (
<Space split={<Divider type="vertical"/>} wrap>
<Link
to={`/manage/jobs/${jobid}?partsorderid=${line.parts_order.id}`}
@@ -47,7 +47,7 @@ export default function JobLinesExpander({jobline, jobid}) {
: [
{
key: "no-orders",
label: t("parts_orders.labels.notyetordered"),
children: t("parts_orders.labels.notyetordered"),
},
]
}
@@ -59,7 +59,7 @@ export default function JobLinesExpander({jobline, jobid}) {
data.billlines.length > 0
? data.billlines.map((line) => ({
key: line.id,
label: (
children: (
<Row wrap>
<Col span={4}>
<Link
@@ -84,7 +84,7 @@ export default function JobLinesExpander({jobline, jobid}) {
: [
{
key: "no-orders",
label: t("parts_orders.labels.notyetordered"),
children: t("parts_orders.labels.notyetordered"),
},
]
}

View File

@@ -27,6 +27,7 @@ import {HasFeatureAccess} from "../feature-wrapper/feature-wrapper.component";
import {DateTimeFormatter} from "../../utils/DateFormatter";
import FormDateTimePickerComponent from "../form-date-time-picker/form-date-time-picker.component";
import dayjs from "../../utils/day";
import {useSplitTreatments} from "@splitsoftware/splitio-react";
const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop,
@@ -82,6 +83,14 @@ export function JobsDetailHeaderActions({
const [updateJob] = useMutation(UPDATE_JOB);
const [voidJob] = useMutation(VOID_JOB);
const [cancelAllAppointments] = useMutation(CANCEL_APPOINTMENTS_BY_JOB_ID);
const {treatments: {ImEXPay}} = useSplitTreatments({
attributes: {},
names: ["ImEXPay"],
splitKey: bodyshop && bodyshop.imexshopid,
});
const jobInProduction = useMemo(() => {
return bodyshop.md_ro_statuses.production_statuses.includes(job.status);
}, [job, bodyshop.md_ro_statuses.production_statuses]);
@@ -97,7 +106,7 @@ export function JobsDetailHeaderActions({
);
}, [job.status, bodyshop.md_ro_statuses.post_production_statuses]);
const handleDuplicate =() =>
const handleDuplicate = () =>
DuplicateJob(
client,
job.id,
@@ -694,33 +703,37 @@ export function JobsDetailHeaderActions({
context: {jobid: job.id},
});
}
},
{
key: 'entercardpayments',
disabled: !job.converted,
label: t("menus.header.entercardpayment"),
onClick: () => {
logImEXEvent("job_header_enter_card_payment");
}];
setCardPaymentContext({
actions: {},
context: {jobid: job.id},
});
}
},
{
key: 'cccontract',
disabled: jobRO || !job.converted,
label: <Link
to={{
pathname: "/manage/courtesycars/contracts/new",
state: {jobId: job.id},
}}
>
{t("menus.jobsactions.newcccontract")}
</Link>
}
];
if (ImEXPay.treatment === "on") {
menuItems.push({
key: 'entercardpayments',
disabled: !job.converted,
label: t("menus.header.entercardpayment"),
onClick: () => {
logImEXEvent("job_header_enter_card_payment");
setCardPaymentContext({
actions: {},
context: {jobid: job.id},
});
}
},
);
}
menuItems.push({
key: 'cccontract',
disabled: jobRO || !job.converted,
label: <Link
to={{
pathname: "/manage/courtesycars/contracts/new",
state: {jobId: job.id},
}}
>
{t("menus.jobsactions.newcccontract")}
</Link>
});
menuItems.push(
job.inproduction ?

View File

@@ -221,6 +221,11 @@ export function JobsDetailHeader({ job, bodyshop, disabled }) {
<VehicleVinDisplay>
{`${job.v_vin || t("general.labels.na")}`}
</VehicleVinDisplay>
{bodyshop.pbs_serialnumber || bodyshop.cdk_dealerid ? (
job.v_vin.length !== 17 ? (
<WarningFilled style={{ color: "tomato", marginLeft: ".3rem" }} />
) : null
) : null}
</DataLabel>
<DataLabel label={t("jobs.fields.regie_number")}>
{job.regie_number || t("general.labels.na")}

View File

@@ -24,6 +24,7 @@ export function ProductionColumnsComponent({
columnState,
technician,
bodyshop,
data,
tableState,
}) {
const [columns, setColumns] = columnState;
@@ -36,6 +37,7 @@ export function ProductionColumnsComponent({
bodyshop,
technician,
state: tableState,
data,
activeStatuses: bodyshop.md_ro_statuses.active_statuses,
}).filter((i) => i.key === e.key),
]);
@@ -44,6 +46,7 @@ export function ProductionColumnsComponent({
const columnKeys = columns.map((i) => i.key);
const cols = dataSource({
technician,
data,
state: tableState,
activeStatuses: bodyshop.md_ro_statuses.active_statuses,
});

View File

@@ -1,4 +1,4 @@
import { PauseCircleOutlined, BranchesOutlined } from "@ant-design/icons";
import { BranchesOutlined, PauseCircleOutlined } from "@ant-design/icons";
import { Space, Tooltip } from "antd";
import i18n from "i18next";
import dayjs from "../../utils/day";
@@ -6,6 +6,7 @@ import { Link } from "react-router-dom";
import CurrencyFormatter from "../../utils/CurrencyFormatter";
import { TimeFormatter } from "../../utils/DateFormatter";
import PhoneFormatter from "../../utils/PhoneFormatter";
import { onlyUnique } from "../../utils/arrayHelper";
import { alphaSort, dateSort, statusSort } from "../../utils/sorters";
import JobAltTransportChange from "../job-at-change/job-at-change.component";
import JobPartsQueueCount from "../job-parts-queue-count/job-parts-queue-count.component";
@@ -25,7 +26,7 @@ import ProductionListColumnCategory from "./production-list-columns.status.categ
import ProductionListColumnStatus from "./production-list-columns.status.component";
import ProductionlistColumnTouchTime from "./prodution-list-columns.touchtime.component";
const r = ({ technician, state, activeStatuses, bodyshop }) => {
const r = ({ technician, state, activeStatuses, data, bodyshop }) => {
return [
{
title: i18n.t("jobs.actions.viewdetail"),
@@ -536,6 +537,36 @@ const r = ({ technician, state, activeStatuses, bodyshop }) => {
<JobPartsQueueCount parts={record.joblines_status} record={record} />
),
},
{
title: i18n.t("jobs.labels.estimator"),
dataIndex: "estimator",
key: "estimator",
sorter: (a, b) =>
alphaSort(
`${a.est_ct_fn || ""} ${a.est_ct_ln || ""}`.trim(),
`${b.est_ct_fn || ""} ${b.est_ct_ln || ""}`.trim()
),
sortOrder:
state.sortedInfo.columnKey === "estimator" && state.sortedInfo.order,
filters:
(data &&
data
.map((j) => `${j.est_ct_fn || ""} ${j.est_ct_ln || ""}`.trim())
.filter(onlyUnique)
.map((s) => {
return {
text: s || "N/A",
value: [s],
};
})) ||
[],
onFilter: (value, record) =>
value.includes(
`${record.est_ct_fn || ""} ${record.est_ct_ln || ""}`.trim()
),
render: (text, record) =>
`${record.est_ct_fn || ""} ${record.est_ct_ln || ""}`.trim(),
},
//Added as a place holder for St Claude. Not implemented as it requires another join for a field used by only 1 client.
// {

View File

@@ -24,6 +24,7 @@ export function ProductionListTable({
technician,
currentUser,
state,
data,
setColumns,
setState,
}) {
@@ -41,6 +42,7 @@ export function ProductionListTable({
bodyshop,
technician,
state,
data: data,
activeStatuses: bodyshop.md_ro_statuses.active_statuses,
}).find((e) => e.key === k.key),
width: k.width,
@@ -95,6 +97,7 @@ export function ProductionListTable({
...ProductionListColumns({
technician,
state,
data: data,
activeStatuses: bodyshop.md_ro_statuses.active_statuses,
}).find((e) => e.key === k.key),
width: k.width,

View File

@@ -1,8 +1,8 @@
import {SyncOutlined} from "@ant-design/icons";
import {useSplitTreatments} from "@splitsoftware/splitio-react";
import {Button, Dropdown, Input, Space, Statistic, Table,} from "antd";
import {Button, Dropdown, Input, Space, Statistic, Table} from "antd";
import {PageHeader} from "@ant-design/pro-layout";
import React, {useMemo, useState} from "react";
import React, {useEffect, useMemo, useState} from "react";
import ReactDragListView from "react-drag-listview";
import {useTranslation} from "react-i18next";
import {connect} from "react-redux";
@@ -66,6 +66,7 @@ export function ProductionListTable({loading, data, refetch, bodyshop, technicia
bodyshop,
technician,
state,
data,
activeStatuses: bodyshop.md_ro_statuses.active_statuses,
}).find((e) => e.key === k.key),
width: k.width ?? 100,
@@ -74,6 +75,34 @@ export function ProductionListTable({loading, data, refetch, bodyshop, technicia
[]
);
useEffect(() => {
const newColumns =
(state &&
matchingColumnConfig &&
matchingColumnConfig.columns.columnKeys.map((k) => {
return {
...ProductionListColumns({
bodyshop,
technician,
state,
data: data,
activeStatuses: bodyshop.md_ro_statuses.active_statuses,
}).find((e) => e.key === k.key),
width: k.width ?? 100,
};
})) ||
[];
setColumns(newColumns);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [
//state,
matchingColumnConfig,
bodyshop,
technician,
data,
]); //State removed from dependency array as it causes race condition when removing columns from table view and is not needed.
const handleTableChange = (pagination, filters, sorter) => {
setState({
...state,
@@ -89,10 +118,11 @@ export function ProductionListTable({loading, data, refetch, bodyshop, technicia
setColumns(columnsCopy);
};
const removeColumn = (e) => {
const {key} = e;
setColumns(columns.filter((i) => i.key !== key));
};
const removeColumn = (e) => {
const { key } = e;
const newColumns = columns.filter((i) => i.key !== key);
setColumns(newColumns);
};
const handleResize =
(index) =>
@@ -221,6 +251,7 @@ export function ProductionListTable({loading, data, refetch, bodyshop, technicia
<ProductionListColumnsAdd
columnState={[columns, setColumns]}
tableState={state}
data={data}
/>
<ProductionListSaveConfigButton
columns={columns}
@@ -231,6 +262,7 @@ export function ProductionListTable({loading, data, refetch, bodyshop, technicia
state={state}
setState={setState}
setColumns={setColumns}
data={data}
/>
<Input

View File

@@ -27,7 +27,7 @@ export default function ScheduleExistingAppointmentsList({
? existingAppointments.data.appointments.map((item) => ({
key: item.id,
color: item.canceled ? "red" : item.arrived ? "green" : "blue",
label: (
children: (
<>
{item.canceled
? t("appointments.labels.cancelledappointment")

View File

@@ -364,6 +364,8 @@ export const QUERY_JOBS_IN_PRODUCTION = gql`
employee_refinish
employee_prep
employee_csr
est_ct_fn
est_ct_ln
suspended
date_repairstarted
joblines_status {

View File

@@ -261,17 +261,15 @@ export function JobsDetailPage({
items={[
{
key: "general",
label: (
<span><Icon component={FaShieldAlt} />{t("menus.jobsdetail.general")}</span>
),
icon: <Icon component={FaShieldAlt} />,
label: t("menus.jobsdetail.general"),
forceRender: true,
children: <JobsDetailGeneral job={job} form={form} />,
},
{
key: "repairdata",
label: (
<span><BarsOutlined />{t("menus.jobsdetail.repairdata")}</span>
),
icon: <BarsOutlined />,
label: t("menus.jobsdetail.repairdata"),
forceRender: true,
children: (
<JobsLinesContainer
@@ -284,46 +282,40 @@ export function JobsDetailPage({
},
{
key: "rates",
label: (
<span><DollarCircleOutlined />{t("menus.jobsdetail.rates")}</span>
),
icon: <DollarCircleOutlined />,
label: t("menus.jobsdetail.rates"),
forceRender: true,
children: <JobsDetailRates job={job} form={form} />,
},
{
key: "totals",
label: (
<span><DollarCircleOutlined />{t("menus.jobsdetail.totals")}</span>
),
icon: <DollarCircleOutlined />,
label: t("menus.jobsdetail.totals"),
children: <JobsDetailTotals job={job} refetch={refetch} />,
},
{
key: "partssublet",
label: (
<span><ToolFilled />{t("menus.jobsdetail.partssublet")}</span>
),
icon: <ToolFilled />,
label: t("menus.jobsdetail.partssublet"),
children: <JobsDetailPliContainer job={job} />,
},
{
key: "labor",
label: (
<span><Icon component={FaHardHat} />{t("menus.jobsdetail.labor")}</span>
),
icon: <Icon component={FaHardHat} />,
label: t("menus.jobsdetail.labor"),
children: <JobsDetailLaborContainer job={job} jobId={job.id} />,
},
{
key: "dates",
label: (
<span><CalendarFilled />{t("menus.jobsdetail.dates")}</span>
),
icon: <CalendarFilled />,
label: t("menus.jobsdetail.dates"),
forceRender: true,
children: <JobsDetailDatesComponent job={job} />,
},
{
key: "documents",
label: (
<span><FileImageFilled />{t("jobs.labels.documents")}</span>
),
icon: <FileImageFilled />,
label: t("jobs.labels.documents"),
children: bodyshop.uselocalmediaserver ? (
<JobsDocumentsLocalGallery job={job} />
) : (
@@ -332,15 +324,14 @@ export function JobsDetailPage({
},
{
key: "notes",
label: (
<span><Icon component={FaRegStickyNote} />{t("jobs.labels.notes")}</span>
),
icon: <Icon component={FaRegStickyNote} />,
label: t("jobs.labels.notes"),
children: <JobNotesContainer jobId={job.id} />,
},
{
key: "audit",
label: (<span><HistoryOutlined />{t("jobs.labels.audit")}</span>
),
icon: <HistoryOutlined />,
label: t("jobs.labels.audit"),
children: <JobAuditTrail jobId={job.id} />,
},
]}

View File

@@ -77,22 +77,22 @@ export function ScoreboardContainer({ setBreadcrumbs, setSelectedHeader }) {
items={[
{
key: "sb",
label: (<span><Icon component={FaShieldAlt} />{t("scoreboard.labels.jobs")}</span>
),
icon: <Icon component={FaShieldAlt} />,
label: t("scoreboard.labels.jobs"),
forceRender: true,
children: <ScoreboardDisplay />,
},
{
key: "tickets",
label: (<span><FieldTimeOutlined />{t("scoreboard.labels.timeticketsemployee")}</span>
),
icon: <FieldTimeOutlined />,
label: t("scoreboard.labels.timeticketsemployee"),
forceRender: true,
children: <ScoreboardTimeTickets />,
},
{
key: "ticketsstats",
label: (<span><FieldTimeOutlined />{t("scoreboard.labels.allemployeetimetickets")}</span>
),
icon: <FieldTimeOutlined />,
label: t("scoreboard.labels.allemployeetimetickets"),
forceRender: true,
children: <ScoreboardTimeTicketsStats />,
},

View File

@@ -2023,24 +2023,24 @@
- active:
_eq: true
columns:
- labor_rates
- percentage
- created_at
- updated_at
- employeeid
- id
- labor_rates
- percentage
- teamid
- updated_at
select_permissions:
- role: user
permission:
columns:
- labor_rates
- percentage
- created_at
- updated_at
- employeeid
- id
- labor_rates
- percentage
- teamid
- updated_at
filter:
employee_team:
bodyshop:
@@ -2055,13 +2055,13 @@
- role: user
permission:
columns:
- labor_rates
- percentage
- created_at
- updated_at
- employeeid
- id
- labor_rates
- percentage
- teamid
- updated_at
filter:
employee_team:
bodyshop:
@@ -2123,21 +2123,23 @@
_eq: true
columns:
- active
- name
- created_at
- updated_at
- bodyshopid
- created_at
- id
- max_load
- name
- updated_at
select_permissions:
- role: user
permission:
columns:
- active
- name
- created_at
- updated_at
- bodyshopid
- created_at
- id
- max_load
- name
- updated_at
filter:
bodyshop:
associations:
@@ -2153,6 +2155,7 @@
columns:
- active
- bodyshopid
- max_load
- name
- updated_at
filter:

View File

@@ -0,0 +1,4 @@
-- Could not auto-generate a down migration.
-- Please write an appropriate down migration for the SQL below:
-- alter table "public"."employee_team_members" add column "max_load" numeric
-- not null default '10000';

View File

@@ -0,0 +1,2 @@
alter table "public"."employee_team_members" add column "max_load" numeric
not null default '10000';

View File

@@ -0,0 +1,3 @@
alter table "public"."employee_team_members" alter column "max_load" set default '10000'::numeric;
alter table "public"."employee_team_members" alter column "max_load" drop not null;
alter table "public"."employee_team_members" add column "max_load" numeric;

View File

@@ -0,0 +1 @@
alter table "public"."employee_team_members" drop column "max_load" cascade;

View File

@@ -0,0 +1,4 @@
-- Could not auto-generate a down migration.
-- Please write an appropriate down migration for the SQL below:
-- alter table "public"."employee_teams" add column "max_load" numeric
-- not null default '10000';

View File

@@ -0,0 +1,2 @@
alter table "public"."employee_teams" add column "max_load" numeric
not null default '10000';

View File

@@ -132,6 +132,7 @@ exports.payment_refund = async (req, res) => {
exports.generate_payment_url = async (req, res) => {
logger.log("intellipay-payment-url", "DEBUG", req.user?.email, null, null);
const shopCredentials = await getShopCredentials(req.body.bodyshop);
try {
const options = {
method: "POST",
@@ -139,7 +140,12 @@ exports.generate_payment_url = async (req, res) => {
//TODO: Move these to environment variables/database.
data: qs.stringify({
...shopCredentials,
...req.body,
//...req.body,
amount: Dinero({ amount: Math.round(req.body.amount * 100) }).toFormat(
"0.00"
),
account: req.body.account,
invoice: req.body.invoice,
createshorturl: true,
//The postback URL is set at the CP teller global terminal settings page.
}),