diff --git a/.env.local b/.env.local new file mode 100644 index 0000000..39cfe68 --- /dev/null +++ b/.env.local @@ -0,0 +1,8 @@ +REACT_APP_FIREBASE_apiKey=AIzaSyAm7viCssewXhk4XDPL0RGDUmXjkgrLP3Y +REACT_APP_FIREBASE_authDomain=cepoint-e27bf.firebaseapp.com +REACT_APP_FIREBASE_projectId=cepoint-e27bf +REACT_APP_FIREBASE_storageBucket=cepoint-e27bf.appspot.com +REACT_APP_FIREBASE_messagingSenderId=872968881565 +REACT_APP_FIREBASE_appId=1:872968881565:web:498265f8437dec7fb95b74 + + \ No newline at end of file diff --git a/.firebaserc b/.firebaserc new file mode 100644 index 0000000..82f8cc0 --- /dev/null +++ b/.firebaserc @@ -0,0 +1,5 @@ +{ + "projects": { + "default": "cepoint-e27bf" + } +} diff --git a/eas.json b/eas.json new file mode 100644 index 0000000..63db299 --- /dev/null +++ b/eas.json @@ -0,0 +1,18 @@ +{ + "cli": { + "version": ">= 2.6.0" + }, + "build": { + "development": { + "developmentClient": true, + "distribution": "internal" + }, + "preview": { + "distribution": "internal" + }, + "production": {} + }, + "submit": { + "production": {} + } +} diff --git a/env.local b/env.local new file mode 100644 index 0000000..39cfe68 --- /dev/null +++ b/env.local @@ -0,0 +1,8 @@ +REACT_APP_FIREBASE_apiKey=AIzaSyAm7viCssewXhk4XDPL0RGDUmXjkgrLP3Y +REACT_APP_FIREBASE_authDomain=cepoint-e27bf.firebaseapp.com +REACT_APP_FIREBASE_projectId=cepoint-e27bf +REACT_APP_FIREBASE_storageBucket=cepoint-e27bf.appspot.com +REACT_APP_FIREBASE_messagingSenderId=872968881565 +REACT_APP_FIREBASE_appId=1:872968881565:web:498265f8437dec7fb95b74 + + \ No newline at end of file diff --git a/firebase.json b/firebase.json new file mode 100644 index 0000000..d4d918a --- /dev/null +++ b/firebase.json @@ -0,0 +1,6 @@ +{ + "firestore": { + "rules": "firestore.rules", + "indexes": "firestore.indexes.json" + } +} diff --git a/firestore.indexes.json b/firestore.indexes.json new file mode 100644 index 0000000..951c0e9 --- /dev/null +++ b/firestore.indexes.json @@ -0,0 +1,61 @@ +{ + "indexes": [ + { + "collectionGroup": "asignaciones", + "queryScope": "COLLECTION_GROUP", + "fields": [ + { + "fieldPath": "asistencias", + "arrayConfig": "CONTAINS" + }, + { + "fieldPath": "asistencias", + "order": "DESCENDING" + } + ] + }, + { + "collectionGroup": "asignaciones", + "queryScope": "COLLECTION", + "fields": [ + { + "fieldPath": "activa", + "order": "ASCENDING" + }, + { + "fieldPath": "asistencias", + "order": "DESCENDING" + } + ] + }, + { + "collectionGroup": "asignaciones", + "queryScope": "COLLECTION", + "fields": [ + { + "fieldPath": "residenteUid", + "order": "ASCENDING" + }, + { + "fieldPath": "residente", + "order": "DESCENDING" + } + ] + }, + { + "collectionGroup": "users", + "queryScope": "COLLECTION", + "fields": [ + { + "fieldPath": "activo", + "order": "DESCENDING" + }, + { + "fieldPath": "nombre", + "order": "DESCENDING" + } + ] + } + ], + "fieldOverrides": [] +} diff --git a/firestore.rules b/firestore.rules new file mode 100644 index 0000000..a9efcd2 --- /dev/null +++ b/firestore.rules @@ -0,0 +1,10 @@ +rules_version = '2'; +service cloud.firestore { + match /databases/{database}/documents { + match /{document=**} { + allow read, write: if request.auth != null; + allow read: if resource.data.lectoreAsistencia==true; + + } + } +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index ee8c80d..a997e3b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,32 +8,59 @@ "name": "cliente", "version": "0.1.0", "dependencies": { + "@emotion/react": "^11.10.5", + "@emotion/styled": "^11.10.5", + "@fortawesome/fontawesome-svg-core": "^6.2.1", + "@fortawesome/free-solid-svg-icons": "^6.2.1", + "@fortawesome/react-fontawesome": "^0.2.0", + "@mui/icons-material": "^5.11.0", + "@mui/material": "^5.11.7", + "@mui/x-date-pickers": "^5.0.17", + "@mui/x-date-pickers-pro": "^5.0.17", + "@react-google-maps/api": "^2.17.1", "@reduxjs/toolkit": "^1.8.3", "@testing-library/jest-dom": "^5.16.4", "@testing-library/react": "^13.3.0", "@testing-library/user-event": "^14.2.5", + "@trendyol-js/react-carousel": "^3.0.0", + "@types/geojson": "^7946.0.10", + "@types/react-dom": "^18.0.10", "axios": "^0.27.2", - "bootstrap": "^5.1.3", - "firebase": "^9.9.3", + "bootstrap-icons": "^1.10.3", + "crypto-js": "^4.1.1", + "date-fns": "^2.29.3", + "dayjs": "^1.11.7", + "firebase": "^9.17.1", "firebase-admin": "^11.0.1", "gson": "^0.1.5", + "history": "^5.3.0", + "html2canvas": "^1.4.1", "luxon": "^3.0.4", + "maplibre-gl": "^2.4.0", "moment": "^2.29.4", "npm-check-updates": "^15.3.4", + "qrcode": "^1.5.1", "react": "^18.2.0", - "react-bootstrap": "^2.4.0", + "react-bootstrap": "^2.7.0", + "react-date-range": "^1.4.0", "react-datepicker": "^4.8.0", "react-dom": "^18.2.0", "react-google-button": "^0.7.2", + "react-icons": "^4.7.1", + "react-qr-code": "^2.0.11", "react-redux": "^8.0.2", "react-router-dom": "^6.4.1", "react-scripts": "5.0.1", "react-select-search": "^4.1.5", "react-table": "^7.8.0", + "react-web-camera": "^0.0.1", + "react-webcam": "^7.0.1", "reactstrap": "^9.1.2", "redux": "^4.2.0", "redux-persist": "^6.0.0", - "web-vitals": "^2.1.4" + "uuid": "^9.0.0", + "web-vitals": "^2.1.4", + "xlsx": "^0.18.5" } }, "node_modules/@ampproject/remapping": { @@ -1898,11 +1925,11 @@ } }, "node_modules/@babel/runtime": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.6.tgz", - "integrity": "sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ==", + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz", + "integrity": "sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==", "dependencies": { - "regenerator-runtime": "^0.13.4" + "regenerator-runtime": "^0.13.11" }, "engines": { "node": ">=6.9.0" @@ -2205,6 +2232,228 @@ "postcss-selector-parser": "^6.0.10" } }, + "node_modules/@date-io/core": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/@date-io/core/-/core-2.16.0.tgz", + "integrity": "sha512-DYmSzkr+jToahwWrsiRA2/pzMEtz9Bq1euJwoOuYwuwIYXnZFtHajY2E6a1VNVDc9jP8YUXK1BvnZH9mmT19Zg==" + }, + "node_modules/@date-io/date-fns": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/@date-io/date-fns/-/date-fns-2.16.0.tgz", + "integrity": "sha512-bfm5FJjucqlrnQcXDVU5RD+nlGmL3iWgkHTq3uAZWVIuBu6dDmGa3m8a6zo2VQQpu8ambq9H22UyUpn7590joA==", + "dependencies": { + "@date-io/core": "^2.16.0" + }, + "peerDependencies": { + "date-fns": "^2.0.0" + }, + "peerDependenciesMeta": { + "date-fns": { + "optional": true + } + } + }, + "node_modules/@date-io/dayjs": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/@date-io/dayjs/-/dayjs-2.16.0.tgz", + "integrity": "sha512-y5qKyX2j/HG3zMvIxTobYZRGnd1FUW2olZLS0vTj7bEkBQkjd2RO7/FEwDY03Z1geVGlXKnzIATEVBVaGzV4Iw==", + "dependencies": { + "@date-io/core": "^2.16.0" + }, + "peerDependencies": { + "dayjs": "^1.8.17" + }, + "peerDependenciesMeta": { + "dayjs": { + "optional": true + } + } + }, + "node_modules/@date-io/luxon": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/@date-io/luxon/-/luxon-2.16.1.tgz", + "integrity": "sha512-aeYp5K9PSHV28946pC+9UKUi/xMMYoaGelrpDibZSgHu2VWHXrr7zWLEr+pMPThSs5vt8Ei365PO+84pCm37WQ==", + "dependencies": { + "@date-io/core": "^2.16.0" + }, + "peerDependencies": { + "luxon": "^1.21.3 || ^2.x || ^3.x" + }, + "peerDependenciesMeta": { + "luxon": { + "optional": true + } + } + }, + "node_modules/@date-io/moment": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/@date-io/moment/-/moment-2.16.1.tgz", + "integrity": "sha512-JkxldQxUqZBfZtsaCcCMkm/dmytdyq5pS1RxshCQ4fHhsvP5A7gSqPD22QbVXMcJydi3d3v1Y8BQdUKEuGACZQ==", + "dependencies": { + "@date-io/core": "^2.16.0" + }, + "peerDependencies": { + "moment": "^2.24.0" + }, + "peerDependenciesMeta": { + "moment": { + "optional": true + } + } + }, + "node_modules/@emotion/babel-plugin": { + "version": "11.10.5", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.5.tgz", + "integrity": "sha512-xE7/hyLHJac7D2Ve9dKroBBZqBT7WuPQmWcq7HSGb84sUuP4mlOWoB8dvVfD9yk5DHkU1m6RW7xSoDtnQHNQeA==", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/plugin-syntax-jsx": "^7.17.12", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.0", + "@emotion/memoize": "^0.8.0", + "@emotion/serialize": "^1.1.1", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.1.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@emotion/cache": { + "version": "11.10.5", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.5.tgz", + "integrity": "sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA==", + "dependencies": { + "@emotion/memoize": "^0.8.0", + "@emotion/sheet": "^1.2.1", + "@emotion/utils": "^1.2.0", + "@emotion/weak-memoize": "^0.3.0", + "stylis": "4.1.3" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.0.tgz", + "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz", + "integrity": "sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==", + "dependencies": { + "@emotion/memoize": "^0.8.0" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz", + "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==" + }, + "node_modules/@emotion/react": { + "version": "11.10.5", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.5.tgz", + "integrity": "sha512-TZs6235tCJ/7iF6/rvTaOH4oxQg2gMAcdHemjwLKIjKz4rRuYe1HJ2TQJKnAcRAfOUDdU8XoDadCe1rl72iv8A==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.10.5", + "@emotion/cache": "^11.10.5", + "@emotion/serialize": "^1.1.1", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@emotion/utils": "^1.2.0", + "@emotion/weak-memoize": "^0.3.0", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.1.tgz", + "integrity": "sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==", + "dependencies": { + "@emotion/hash": "^0.9.0", + "@emotion/memoize": "^0.8.0", + "@emotion/unitless": "^0.8.0", + "@emotion/utils": "^1.2.0", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.1.tgz", + "integrity": "sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==" + }, + "node_modules/@emotion/styled": { + "version": "11.10.5", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.5.tgz", + "integrity": "sha512-8EP6dD7dMkdku2foLoruPCNkRevzdcBaY6q0l0OsbyJK+x8D9HWjX27ARiSIKNF634hY9Zdoedh8bJCiva8yZw==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.10.5", + "@emotion/is-prop-valid": "^1.2.0", + "@emotion/serialize": "^1.1.1", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@emotion/utils": "^1.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", + "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz", + "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz", + "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz", + "integrity": "sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==" + }, "node_modules/@eslint/eslintrc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", @@ -2301,14 +2550,14 @@ } }, "node_modules/@firebase/analytics": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.8.0.tgz", - "integrity": "sha512-wkcwainNm8Cu2xkJpDSHfhBSdDJn86Q1TZNmLWc67VrhZUHXIKXxIqb65/tNUVE+I8+sFiDDNwA+9R3MqTQTaA==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.9.3.tgz", + "integrity": "sha512-XdYHBi6RvHYVAHGyLxXX0uRPwZmGeqw1JuWS1rMEeRF/jvbxnrL81kcFAHZVRkEvG9bXAJgL2fX9wmDo3e622w==", "dependencies": { - "@firebase/component": "0.5.17", - "@firebase/installations": "0.5.12", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.6.3", + "@firebase/component": "0.6.3", + "@firebase/installations": "0.6.3", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.2", "tslib": "^2.1.0" }, "peerDependencies": { @@ -2316,45 +2565,87 @@ } }, "node_modules/@firebase/analytics-compat": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.1.13.tgz", - "integrity": "sha512-QC1DH/Dwc8fBihn0H+jocBWyE17GF1fOCpCrpAiQ2u16F/NqsVDVG4LjIqdhq963DXaXneNY7oDwa25Up682AA==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.2.3.tgz", + "integrity": "sha512-HmvbB4GMgh8AUlIDIo/OuFENLCGRXxMvtOueK+m8+DcfqBvG+mkii0Mi9ovo0TnMM62cy3oBYG7PHdjIQNLSLA==", "dependencies": { - "@firebase/analytics": "0.8.0", - "@firebase/analytics-types": "0.7.0", - "@firebase/component": "0.5.17", - "@firebase/util": "1.6.3", + "@firebase/analytics": "0.9.3", + "@firebase/analytics-types": "0.8.0", + "@firebase/component": "0.6.3", + "@firebase/util": "1.9.2", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, + "node_modules/@firebase/analytics-compat/node_modules/@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "dependencies": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/analytics-compat/node_modules/@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/@firebase/analytics-types": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.7.0.tgz", - "integrity": "sha512-DNE2Waiwy5+zZnCfintkDtBfaW6MjIG883474v6Z0K1XZIvl76cLND4iv0YUb48leyF+PJK1KO2XrgHb/KpmhQ==" + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.8.0.tgz", + "integrity": "sha512-iRP+QKI2+oz3UAh4nPEq14CsEjrjD6a5+fuypjScisAh9kXKFvdJOZJDwk7kikLvWVLGEs9+kIUS4LPQV7VZVw==" + }, + "node_modules/@firebase/analytics/node_modules/@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "dependencies": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/analytics/node_modules/@firebase/logger": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.0.tgz", + "integrity": "sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/analytics/node_modules/@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "dependencies": { + "tslib": "^2.1.0" + } }, "node_modules/@firebase/app": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.7.31.tgz", - "integrity": "sha512-pqCkY2wC5pRBVH1oYliD9E0aSW6qisuMy7meaCtGzwaVcE8AFMhW9xhxHuBMpX1291+2iimUZWnCxSL9DaUUGA==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.9.3.tgz", + "integrity": "sha512-G79JUceVDaHRZ4WkA11GyVldVXhdyRJRwWVQFFvAAVfQJLvy2TA6lQjeUn28F6FmeUWxDGwPC30bxCRWq7Op8Q==", "dependencies": { - "@firebase/component": "0.5.17", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.6.3", + "@firebase/component": "0.6.3", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.2", "idb": "7.0.1", "tslib": "^2.1.0" } }, "node_modules/@firebase/app-check": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.5.12.tgz", - "integrity": "sha512-l+MmvupSGT/F+I5ei7XjhEfpoL4hLVJr0vUwcG5NEf2hAkQnySli9fnbl9fZu1BJaQ2kthrMmtg1gcbcM9BUCQ==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.6.3.tgz", + "integrity": "sha512-T9f9ceFLs7x4D2T6whu5a6j7B3qPuYHiZHZxW6DkMh/FoMmRA4/q/HVyu01i9+LyJJx2Xdo6eCcj6ofs9YZjqA==", "dependencies": { - "@firebase/component": "0.5.17", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.6.3", + "@firebase/component": "0.6.3", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.2", "tslib": "^2.1.0" }, "peerDependencies": { @@ -2362,40 +2653,115 @@ } }, "node_modules/@firebase/app-check-compat": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.2.12.tgz", - "integrity": "sha512-GFppNLlUyMN9Iq31ME/+GkjRVKlc+MeanzUKQ9UaR73ZsYH3oX3Ja+xjoYgixaVJDDG+ofBYR7ZXTkkQdSR/pw==", - "dependencies": { - "@firebase/app-check": "0.5.12", - "@firebase/app-check-types": "0.4.0", - "@firebase/component": "0.5.17", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.6.3", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.3.3.tgz", + "integrity": "sha512-25AQ4W7WUL8OWas40GsABuNU622Dm1ojbfeZ03uKtLj5Af7FerJ25u7zkgm+11pc6rpr5v8E5oxEG9vmNRndEA==", + "dependencies": { + "@firebase/app-check": "0.6.3", + "@firebase/app-check-types": "0.5.0", + "@firebase/component": "0.6.3", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.2", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, + "node_modules/@firebase/app-check-compat/node_modules/@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "dependencies": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/app-check-compat/node_modules/@firebase/logger": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.0.tgz", + "integrity": "sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/app-check-compat/node_modules/@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/@firebase/app-check-interop-types": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.1.0.tgz", - "integrity": "sha512-uZfn9s4uuRsaX5Lwx+gFP3B6YsyOKUE+Rqa6z9ojT4VSRAsZFko9FRn6OxQUA1z5t5d08fY4pf+/+Dkd5wbdbA==" + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.2.0.tgz", + "integrity": "sha512-+3PQIeX6/eiVK+x/yg8r6xTNR97fN7MahFDm+jiQmDjcyvSefoGuTTNQuuMScGyx3vYUBeZn+Cp9kC0yY/9uxQ==" }, "node_modules/@firebase/app-check-types": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/app-check-types/-/app-check-types-0.5.0.tgz", + "integrity": "sha512-uwSUj32Mlubybw7tedRzR24RP8M8JUVR3NPiMk3/Z4bCmgEKTlQBwMXrehDAZ2wF+TsBq0SN1c6ema71U/JPyQ==" + }, + "node_modules/@firebase/app-check/node_modules/@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "dependencies": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/app-check/node_modules/@firebase/logger": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@firebase/app-check-types/-/app-check-types-0.4.0.tgz", - "integrity": "sha512-SsWafqMABIOu7zLgWbmwvHGOeQQVQlwm42kwwubsmfLmL4Sf5uGpBfDhQ0CAkpi7bkJ/NwNFKafNDL9prRNP0Q==" + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.0.tgz", + "integrity": "sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/app-check/node_modules/@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "dependencies": { + "tslib": "^2.1.0" + } }, "node_modules/@firebase/app-compat": { - "version": "0.1.32", - "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.1.32.tgz", - "integrity": "sha512-dChnJsnHxih0MYQxCWBPAruqK2M4ba/t+DvKu8IcRpd4FkcUQ8FO19Z963nCdXyu2T6cxPcwCopKWaWlymBVVA==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.2.3.tgz", + "integrity": "sha512-sX6rD1KFX6K2CuCnQvc9jZLOgAFZ+sv2jKKahIl4SbTM561D682B8n4Jtx/SgDrvcTVTdb05g4NhZOws9hxYxA==", + "dependencies": { + "@firebase/app": "0.9.3", + "@firebase/component": "0.6.3", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/app-compat/node_modules/@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "dependencies": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/app-compat/node_modules/@firebase/logger": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.0.tgz", + "integrity": "sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/app-compat/node_modules/@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", "dependencies": { - "@firebase/app": "0.7.31", - "@firebase/component": "0.5.17", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.6.3", "tslib": "^2.1.0" } }, @@ -2404,16 +2770,40 @@ "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.7.0.tgz", "integrity": "sha512-6fbHQwDv2jp/v6bXhBw2eSRbNBpxHcd1NBF864UksSMVIqIyri9qpJB1Mn6sGZE+bnDsSQBC5j2TbMxYsJQkQg==" }, + "node_modules/@firebase/app/node_modules/@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "dependencies": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/app/node_modules/@firebase/logger": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.0.tgz", + "integrity": "sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/app/node_modules/@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/@firebase/auth": { - "version": "0.20.5", - "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.20.5.tgz", - "integrity": "sha512-SbKj7PCAuL0lXEToUOoprc1im2Lr/bzOePXyPC7WWqVgdVBt0qovbfejlzKYwJLHUAPg9UW1y3XYe3IlbXr77w==", + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.21.3.tgz", + "integrity": "sha512-HPbcwgArLBVTowFcn4qaQr6LCx7BidI9yrQ5MRbQNv4PsgK/3UGpzCYaNPPbvgr9fe+0jNdJO+uC0+dk4xIzCQ==", "dependencies": { - "@firebase/component": "0.5.17", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.6.3", + "@firebase/component": "0.6.3", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.2", "node-fetch": "2.6.7", - "selenium-webdriver": "4.1.2", "tslib": "^2.1.0" }, "peerDependencies": { @@ -2421,22 +2811,38 @@ } }, "node_modules/@firebase/auth-compat": { - "version": "0.2.18", - "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.2.18.tgz", - "integrity": "sha512-Fw2PJS0G/tGrfyEBcYJQ42sfy5+sANrK5xd7tuzgV7zLFW5rYkHUIZngXjuOBwLOcfO2ixa/FavfeJle3oJ38Q==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.3.3.tgz", + "integrity": "sha512-9asUuGtkzUVELH3LYXdiom1nVVV9bqEPqzHohanoofHL/oVTNcHZ4AQ5CXjNATfb6c1WH32U+nEuPiYg26UUIw==", "dependencies": { - "@firebase/auth": "0.20.5", - "@firebase/auth-types": "0.11.0", - "@firebase/component": "0.5.17", - "@firebase/util": "1.6.3", + "@firebase/auth": "0.21.3", + "@firebase/auth-types": "0.12.0", + "@firebase/component": "0.6.3", + "@firebase/util": "1.9.2", "node-fetch": "2.6.7", - "selenium-webdriver": "4.1.2", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, + "node_modules/@firebase/auth-compat/node_modules/@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "dependencies": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/auth-compat/node_modules/@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/@firebase/auth-interop-types": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.1.6.tgz", @@ -2447,14 +2853,39 @@ } }, "node_modules/@firebase/auth-types": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.11.0.tgz", - "integrity": "sha512-q7Bt6cx+ySj9elQHTsKulwk3+qDezhzRBFC9zlQ1BjgMueUOnGMcvqmU0zuKlQ4RhLSH7MNAdBV2znVaoN3Vxw==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.12.0.tgz", + "integrity": "sha512-pPwaZt+SPOshK8xNoiQlK5XIrS97kFYc3Rc7xmy373QsOJ9MmqXxLaYssP5Kcds4wd2qK//amx/c+A8O2fVeZA==", "peerDependencies": { "@firebase/app-types": "0.x", "@firebase/util": "1.x" } }, + "node_modules/@firebase/auth/node_modules/@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "dependencies": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/auth/node_modules/@firebase/logger": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.0.tgz", + "integrity": "sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/auth/node_modules/@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/@firebase/component": { "version": "0.5.17", "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.5.17.tgz", @@ -2500,15 +2931,15 @@ } }, "node_modules/@firebase/firestore": { - "version": "3.4.14", - "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-3.4.14.tgz", - "integrity": "sha512-F4Pqd5OUBtJaAWWC39C0vrMLIdZtx7jsO7sARFHSiOZY/8bikfH9YovIRkpxk7OSs3HT/SgVdK0B1vISGNSnJA==", - "dependencies": { - "@firebase/component": "0.5.17", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.6.3", - "@firebase/webchannel-wrapper": "0.6.2", - "@grpc/grpc-js": "^1.3.2", + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-3.8.3.tgz", + "integrity": "sha512-4xR3Mqj95bxHg3hZnz0O+LQrHkjq+siT2y+B9da6u68qJ8bzzT42JaFgd1vifhbBpVbBzpFaS2RuCq2E+kGv9g==", + "dependencies": { + "@firebase/component": "0.6.3", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.2", + "@firebase/webchannel-wrapper": "0.9.0", + "@grpc/grpc-js": "~1.7.0", "@grpc/proto-loader": "^0.6.13", "node-fetch": "2.6.7", "tslib": "^2.1.0" @@ -2521,39 +2952,81 @@ } }, "node_modules/@firebase/firestore-compat": { - "version": "0.1.23", - "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.1.23.tgz", - "integrity": "sha512-QfcuyMAavp//fQnjSfCEpnbWi7spIdKaXys1kOLu7395fLr+U6ykmto1HUMCSz8Yus9cEr/03Ujdi2SUl2GUAA==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.3.3.tgz", + "integrity": "sha512-fMTsSC0s2cF5w2+JoB0dWD/o4kXtLrUCPGnZPuz4S0bqTN2t0vHr3gdAsQLtnadgwB78ACtinYmf4Udwx7TzDg==", "dependencies": { - "@firebase/component": "0.5.17", - "@firebase/firestore": "3.4.14", - "@firebase/firestore-types": "2.5.0", - "@firebase/util": "1.6.3", + "@firebase/component": "0.6.3", + "@firebase/firestore": "3.8.3", + "@firebase/firestore-types": "2.5.1", + "@firebase/util": "1.9.2", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, + "node_modules/@firebase/firestore-compat/node_modules/@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "dependencies": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/firestore-compat/node_modules/@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/@firebase/firestore-types": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-2.5.0.tgz", - "integrity": "sha512-I6c2m1zUhZ5SH0cWPmINabDyH5w0PPFHk2UHsjBpKdZllzJZ2TwTkXbDtpHUZNmnc/zAa0WNMNMvcvbb/xJLKA==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-2.5.1.tgz", + "integrity": "sha512-xG0CA6EMfYo8YeUxC8FeDzf6W3FX1cLlcAGBYV6Cku12sZRI81oWcu61RSKM66K6kUENP+78Qm8mvroBcm1whw==", "peerDependencies": { "@firebase/app-types": "0.x", "@firebase/util": "1.x" } }, - "node_modules/@firebase/functions": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.8.4.tgz", - "integrity": "sha512-o1bB0xMyQKe+b246zGnjwHj4R6BH4mU2ZrSaa/3QvTpahUQ3hqYfkZPLOXCU7+vEFxHb3Hd4UUjkFhxoAcPqLA==", + "node_modules/@firebase/firestore/node_modules/@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", "dependencies": { - "@firebase/app-check-interop-types": "0.1.0", - "@firebase/auth-interop-types": "0.1.6", - "@firebase/component": "0.5.17", - "@firebase/messaging-interop-types": "0.1.0", - "@firebase/util": "1.6.3", + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/firestore/node_modules/@firebase/logger": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.0.tgz", + "integrity": "sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/firestore/node_modules/@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/functions": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.9.3.tgz", + "integrity": "sha512-tPJgYY2ROQSYuzvgxZRoHeDj+Ic07/bWHwaftgTriawtupmFOkt5iikuhJSJUhaOpFh9TB335OvCXJw1N+BIlQ==", + "dependencies": { + "@firebase/app-check-interop-types": "0.2.0", + "@firebase/auth-interop-types": "0.2.1", + "@firebase/component": "0.6.3", + "@firebase/messaging-interop-types": "0.2.0", + "@firebase/util": "1.9.2", "node-fetch": "2.6.7", "tslib": "^2.1.0" }, @@ -2562,32 +3035,71 @@ } }, "node_modules/@firebase/functions-compat": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.2.4.tgz", - "integrity": "sha512-Crfn6il1yXGuXkjSd8nKrqR4XxPvuP19g64bXpM6Ix67qOkQg676kyOuww0FF17xN0NSXHfG8Pyf+CUrx8wJ5g==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.3.3.tgz", + "integrity": "sha512-UIAJ2gzNq0p/61cXqkpi9DnlQt0hdlGqgmL5an7KuJth2Iv5uGpKg/+OapAZxPuiUNZgTEyZDB7kNBHvnxWq5w==", "dependencies": { - "@firebase/component": "0.5.17", - "@firebase/functions": "0.8.4", - "@firebase/functions-types": "0.5.0", - "@firebase/util": "1.6.3", + "@firebase/component": "0.6.3", + "@firebase/functions": "0.9.3", + "@firebase/functions-types": "0.6.0", + "@firebase/util": "1.9.2", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, + "node_modules/@firebase/functions-compat/node_modules/@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "dependencies": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/functions-compat/node_modules/@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/@firebase/functions-types": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.5.0.tgz", - "integrity": "sha512-qza0M5EwX+Ocrl1cYI14zoipUX4gI/Shwqv0C1nB864INAD42Dgv4v94BCyxGHBg2kzlWy8PNafdP7zPO8aJQA==" + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.6.0.tgz", + "integrity": "sha512-hfEw5VJtgWXIRf92ImLkgENqpL6IWpYaXVYiRkFY1jJ9+6tIhWM7IzzwbevwIIud/jaxKVdRzD7QBWfPmkwCYw==" + }, + "node_modules/@firebase/functions/node_modules/@firebase/auth-interop-types": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.2.1.tgz", + "integrity": "sha512-VOaGzKp65MY6P5FI84TfYKBXEPi6LmOCSMMzys6o2BN2LOsqy7pCuZCup7NYnfbk5OkkQKzvIfHOzTm0UDpkyg==" + }, + "node_modules/@firebase/functions/node_modules/@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "dependencies": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/functions/node_modules/@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "dependencies": { + "tslib": "^2.1.0" + } }, "node_modules/@firebase/installations": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.5.12.tgz", - "integrity": "sha512-Zq43fCE0PB5tGJ3ojzx5RNQzKdej1188qgAk22rwjuhP7npaG/PlJqDG1/V0ZjTLRePZ1xGrfXSPlA17c/vtNw==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.6.3.tgz", + "integrity": "sha512-20JFWm+tweNoRjRbz8/Y4I7O5pUJGZsFKCkLl1qNxfNYECSfrZUuozIDJDZC/MeVn5+kB9CwjThDlgQEPrfLdg==", "dependencies": { - "@firebase/component": "0.5.17", - "@firebase/util": "1.6.3", + "@firebase/component": "0.6.3", + "@firebase/util": "1.9.2", "idb": "7.0.1", "tslib": "^2.1.0" }, @@ -2596,28 +3108,62 @@ } }, "node_modules/@firebase/installations-compat": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/@firebase/installations-compat/-/installations-compat-0.1.12.tgz", - "integrity": "sha512-BIhFpWIn/GkuOa+jnXkp3SDJT2RLYJF6MWpinHIBKFJs7MfrgYZ3zQ1AlhobDEql+bkD1dK4dB5sNcET2T+EyA==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@firebase/installations-compat/-/installations-compat-0.2.3.tgz", + "integrity": "sha512-K9rKM/ym06lkpaKz7bMLxzHK/HEk65XfLJBV+dJkIuWeO0EqqC9VFGrpWAo0QmgC4BqbU58T6VBbzoJjb0gaFw==", "dependencies": { - "@firebase/component": "0.5.17", - "@firebase/installations": "0.5.12", - "@firebase/installations-types": "0.4.0", - "@firebase/util": "1.6.3", + "@firebase/component": "0.6.3", + "@firebase/installations": "0.6.3", + "@firebase/installations-types": "0.5.0", + "@firebase/util": "1.9.2", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, + "node_modules/@firebase/installations-compat/node_modules/@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "dependencies": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/installations-compat/node_modules/@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/@firebase/installations-types": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.4.0.tgz", - "integrity": "sha512-nXxWKQDvBGctuvsizbUEJKfxXU9WAaDhon+j0jpjIfOJkvkj3YHqlLB/HeYjpUn85Pb22BjplpTnDn4Gm9pc3A==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.5.0.tgz", + "integrity": "sha512-9DP+RGfzoI2jH7gY4SlzqvZ+hr7gYzPODrbzVD82Y12kScZ6ZpRg/i3j6rleto8vTFC8n6Len4560FnV1w2IRg==", "peerDependencies": { "@firebase/app-types": "0.x" } }, + "node_modules/@firebase/installations/node_modules/@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "dependencies": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/installations/node_modules/@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/@firebase/logger": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.3.3.tgz", @@ -2627,14 +3173,14 @@ } }, "node_modules/@firebase/messaging": { - "version": "0.9.16", - "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.9.16.tgz", - "integrity": "sha512-Yl9gGrAvJF6C1gg3+Cr2HxlL6APsDEkrorkFafmSP1l+rg1epZKoOAcKJbSF02Vtb50wfb9FqGGy8tzodgETxg==", - "dependencies": { - "@firebase/component": "0.5.17", - "@firebase/installations": "0.5.12", - "@firebase/messaging-interop-types": "0.1.0", - "@firebase/util": "1.6.3", + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.12.3.tgz", + "integrity": "sha512-a3ZKcGDiV2sKmQDB56PpgL1yjFxXCtff2+v1grnAZZ4GnfNQ74t2EHCbmgY7xRX7ThzMqug54oxhuk4ur0MIoA==", + "dependencies": { + "@firebase/component": "0.6.3", + "@firebase/installations": "0.6.3", + "@firebase/messaging-interop-types": "0.2.0", + "@firebase/util": "1.9.2", "idb": "7.0.1", "tslib": "^2.1.0" }, @@ -2643,33 +3189,67 @@ } }, "node_modules/@firebase/messaging-compat": { - "version": "0.1.16", - "resolved": "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.1.16.tgz", - "integrity": "sha512-uG7rWcXJzU8vvlEBFpwG1ndw/GURrrmKcwsHopEWbsPGjMRaVWa7XrdKbvIR7IZohqPzcC/V9L8EeqF4Q4lz8w==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.2.3.tgz", + "integrity": "sha512-MmuuohXV2YRzIoJmDngI5qqO/cF2q7SdAaw7k4r61W3ReJy7x4/rtqrIvwNVhM6X/X8NFGBbsYKsCfRHWjFdkg==", "dependencies": { - "@firebase/component": "0.5.17", - "@firebase/messaging": "0.9.16", - "@firebase/util": "1.6.3", + "@firebase/component": "0.6.3", + "@firebase/messaging": "0.12.3", + "@firebase/util": "1.9.2", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, + "node_modules/@firebase/messaging-compat/node_modules/@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "dependencies": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/messaging-compat/node_modules/@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/@firebase/messaging-interop-types": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@firebase/messaging-interop-types/-/messaging-interop-types-0.1.0.tgz", - "integrity": "sha512-DbvUl/rXAZpQeKBnwz0NYY5OCqr2nFA0Bj28Fmr3NXGqR4PAkfTOHuQlVtLO1Nudo3q0HxAYLa68ZDAcuv2uKQ==" + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@firebase/messaging-interop-types/-/messaging-interop-types-0.2.0.tgz", + "integrity": "sha512-ujA8dcRuVeBixGR9CtegfpU4YmZf3Lt7QYkcj693FFannwNuZgfAYaTmbJ40dtjB81SAu6tbFPL9YLNT15KmOQ==" + }, + "node_modules/@firebase/messaging/node_modules/@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "dependencies": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/messaging/node_modules/@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "dependencies": { + "tslib": "^2.1.0" + } }, "node_modules/@firebase/performance": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.5.12.tgz", - "integrity": "sha512-MPVTkOkGrm2SMQgI1FPNBm85y2pPqlPb6VDjIMCWkVpAr6G1IZzUT24yEMySRcIlK/Hh7/Qu1Nu5ASRzRuX6+Q==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.6.3.tgz", + "integrity": "sha512-NQmQN6Ete7i9jz1mzULJZEGvsOmwwdUy6vpqnhUxSFMYPnlBKjX+yypCUUJDDN5zff5+kfwSD1qCyUAaS0xWUA==", "dependencies": { - "@firebase/component": "0.5.17", - "@firebase/installations": "0.5.12", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.6.3", + "@firebase/component": "0.6.3", + "@firebase/installations": "0.6.3", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.2", "tslib": "^2.1.0" }, "peerDependencies": { @@ -2677,35 +3257,85 @@ } }, "node_modules/@firebase/performance-compat": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.1.12.tgz", - "integrity": "sha512-IBORzUeGY1MGdZnsix9Mu5z4+C3WHIwalu0usxvygL0EZKHztGG8bppYPGH/b5vvg8QyHs9U+Pn1Ot2jZhffQQ==", - "dependencies": { - "@firebase/component": "0.5.17", - "@firebase/logger": "0.3.3", - "@firebase/performance": "0.5.12", - "@firebase/performance-types": "0.1.0", - "@firebase/util": "1.6.3", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.2.3.tgz", + "integrity": "sha512-I3rqZsIhauXn4iApfj1ttKQdlti/r8OZBG4YK10vxKSdhAzTIDWDKEsdoCXvvKLwplcMv36sM3WPAPGQLqY5MQ==", + "dependencies": { + "@firebase/component": "0.6.3", + "@firebase/logger": "0.4.0", + "@firebase/performance": "0.6.3", + "@firebase/performance-types": "0.2.0", + "@firebase/util": "1.9.2", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, + "node_modules/@firebase/performance-compat/node_modules/@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "dependencies": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/performance-compat/node_modules/@firebase/logger": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.0.tgz", + "integrity": "sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/performance-compat/node_modules/@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/@firebase/performance-types": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.1.0.tgz", - "integrity": "sha512-6p1HxrH0mpx+622Ql6fcxFxfkYSBpE3LSuwM7iTtYU2nw91Hj6THC8Bc8z4nboIq7WvgsT/kOTYVVZzCSlXl8w==" + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.2.0.tgz", + "integrity": "sha512-kYrbr8e/CYr1KLrLYZZt2noNnf+pRwDq2KK9Au9jHrBMnb0/C9X9yWSXmZkFt4UIdsQknBq8uBB7fsybZdOBTA==" }, - "node_modules/@firebase/remote-config": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.3.11.tgz", - "integrity": "sha512-qA84dstrvVpO7rWT/sb2CLv1kjHVmz59SRFPKohJJYFBcPOGK4Pe4FWWhKAE9yg1Gnl0qYAGkahOwNawq3vE0g==", + "node_modules/@firebase/performance/node_modules/@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", "dependencies": { - "@firebase/component": "0.5.17", - "@firebase/installations": "0.5.12", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.6.3", + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/performance/node_modules/@firebase/logger": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.0.tgz", + "integrity": "sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/performance/node_modules/@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/remote-config": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.4.3.tgz", + "integrity": "sha512-Q6d4jBWZoNt6SYq87bjtDGUHFkKwAmGnNjWyRjl14AZqE1ilgd9NZHmutharlYJ3LvxMsid80HdK5SgGEpIPfg==", + "dependencies": { + "@firebase/component": "0.6.3", + "@firebase/installations": "0.6.3", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.2", "tslib": "^2.1.0" }, "peerDependencies": { @@ -2713,33 +3343,83 @@ } }, "node_modules/@firebase/remote-config-compat": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.1.12.tgz", - "integrity": "sha512-Yz7Gtb2rLa7ykXZX9DnSTId8CXd++jFFLW3foUImrYwJEtWgLJc7gwkRfd1M73IlKGNuQAY+DpUNF0n1dLbecA==", - "dependencies": { - "@firebase/component": "0.5.17", - "@firebase/logger": "0.3.3", - "@firebase/remote-config": "0.3.11", - "@firebase/remote-config-types": "0.2.0", - "@firebase/util": "1.6.3", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.2.3.tgz", + "integrity": "sha512-w/ZL03YgYaXq03xIRyJ5oPhXZi6iDsY/v0J9Y7I7SqxCYytEnHVrL9nvBqd9R94y5LRAVNPCLokJeeizaUz4VQ==", + "dependencies": { + "@firebase/component": "0.6.3", + "@firebase/logger": "0.4.0", + "@firebase/remote-config": "0.4.3", + "@firebase/remote-config-types": "0.3.0", + "@firebase/util": "1.9.2", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, + "node_modules/@firebase/remote-config-compat/node_modules/@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "dependencies": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/remote-config-compat/node_modules/@firebase/logger": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.0.tgz", + "integrity": "sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/remote-config-compat/node_modules/@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/@firebase/remote-config-types": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.2.0.tgz", - "integrity": "sha512-hqK5sCPeZvcHQ1D6VjJZdW6EexLTXNMJfPdTwbD8NrXUw6UjWC4KWhLK/TSlL0QPsQtcKRkaaoP+9QCgKfMFPw==" + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.3.0.tgz", + "integrity": "sha512-RtEH4vdcbXZuZWRZbIRmQVBNsE7VDQpet2qFvq6vwKLBIQRQR5Kh58M4ok3A3US8Sr3rubYnaGqZSurCwI8uMA==" + }, + "node_modules/@firebase/remote-config/node_modules/@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "dependencies": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/remote-config/node_modules/@firebase/logger": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.0.tgz", + "integrity": "sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/remote-config/node_modules/@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "dependencies": { + "tslib": "^2.1.0" + } }, "node_modules/@firebase/storage": { - "version": "0.9.9", - "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.9.9.tgz", - "integrity": "sha512-Zch7srLT2SIh9y2nCVv/4Kne0HULn7OPkmreY70BJTUJ+g5WLRjggBq6x9fV5ls9V38iqMWfn4prxzX8yIc08A==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.11.1.tgz", + "integrity": "sha512-Xv8EG2j52ugF2xayBz26U9J0VBXHXPMVxSN+ph3R3BSoHxvMLaPu+qUYKHavSt+zbcgPH2GyBhrCdJK6SaDFPA==", "dependencies": { - "@firebase/component": "0.5.17", - "@firebase/util": "1.6.3", + "@firebase/component": "0.6.3", + "@firebase/util": "1.9.2", "node-fetch": "2.6.7", "tslib": "^2.1.0" }, @@ -2748,29 +3428,63 @@ } }, "node_modules/@firebase/storage-compat": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.1.17.tgz", - "integrity": "sha512-nOYmnpI0gwoz5nROseMi9WbmHGf+xumfsOvdPyMZAjy0VqbDnpKIwmTUZQBdR+bLuB5oIkHQsvw9nbb1SH+PzQ==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.3.1.tgz", + "integrity": "sha512-6HaTvWsT5Yy3j4UpCZpMcFUYEkJ2XYWukdyTl02u6VjSBRLvkhOXPzEfMvgVWqhnF/rYVfPdjrZ904wk5OxtmQ==", "dependencies": { - "@firebase/component": "0.5.17", - "@firebase/storage": "0.9.9", - "@firebase/storage-types": "0.6.0", - "@firebase/util": "1.6.3", + "@firebase/component": "0.6.3", + "@firebase/storage": "0.11.1", + "@firebase/storage-types": "0.8.0", + "@firebase/util": "1.9.2", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, + "node_modules/@firebase/storage-compat/node_modules/@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "dependencies": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/storage-compat/node_modules/@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/@firebase/storage-types": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.6.0.tgz", - "integrity": "sha512-1LpWhcCb1ftpkP/akhzjzeFxgVefs6eMD2QeKiJJUGH1qOiows2w5o0sKCUSQrvrRQS1lz3SFGvNR1Ck/gqxeA==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.8.0.tgz", + "integrity": "sha512-isRHcGrTs9kITJC0AVehHfpraWFui39MPaU7Eo8QfWlqW7YPymBmRgjDrlOgFdURh6Cdeg07zmkLP5tzTKRSpg==", "peerDependencies": { "@firebase/app-types": "0.x", "@firebase/util": "1.x" } }, + "node_modules/@firebase/storage/node_modules/@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "dependencies": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/storage/node_modules/@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/@firebase/util": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.6.3.tgz", @@ -2780,9 +3494,54 @@ } }, "node_modules/@firebase/webchannel-wrapper": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.6.2.tgz", - "integrity": "sha512-zThUKcqIU6utWzM93uEvhlh8qj8A5LMPFJPvk/ODb+8GSSif19xM2Lw1M2ijyBy8+6skSkQBbavPzOU5Oh/8tQ==" + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.9.0.tgz", + "integrity": "sha512-BpiZLBWdLFw+qFel9p3Zs1jD6QmH7Ii4aTDu6+vx8ShdidChZUXqDhYJly4ZjSgQh54miXbBgBrk0S+jTIh/Qg==" + }, + "node_modules/@fortawesome/fontawesome-common-types": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.2.1.tgz", + "integrity": "sha512-Sz07mnQrTekFWLz5BMjOzHl/+NooTdW8F8kDQxjWwbpOJcnoSg4vUDng8d/WR1wOxM0O+CY9Zw0nR054riNYtQ==", + "hasInstallScript": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/fontawesome-svg-core": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.2.1.tgz", + "integrity": "sha512-HELwwbCz6C1XEcjzyT1Jugmz2NNklMrSPjZOWMlc+ZsHIVk+XOvOXLGGQtFBwSyqfJDNgRq4xBCwWOaZ/d9DEA==", + "hasInstallScript": true, + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.2.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-solid-svg-icons": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.2.1.tgz", + "integrity": "sha512-oKuqrP5jbfEPJWTij4sM+/RvgX+RMFwx3QZCZcK9PrBDgxC35zuc7AOFsyMjMd/PIFPeB2JxyqDr5zs/DZFPPw==", + "hasInstallScript": true, + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.2.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/react-fontawesome": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.0.tgz", + "integrity": "sha512-uHg75Rb/XORTtVt7OS9WoK8uM276Ufi7gCzshVWkUJbHhh3svsUUeqXerrM96Wm7fRiDzfKRwSoahhMIkGAYHw==", + "dependencies": { + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "@fortawesome/fontawesome-svg-core": "~1 || ~6", + "react": ">=16.3" + } }, "node_modules/@gar/promisify": { "version": "1.1.3", @@ -2876,10 +3635,36 @@ "node": ">=10.0.0" } }, + "node_modules/@google-cloud/storage/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "optional": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@googlemaps/js-api-loader": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@googlemaps/js-api-loader/-/js-api-loader-1.15.1.tgz", + "integrity": "sha512-AsnEgNsB7S/VdrHGEQUaUM2e5tmjFGKBAfzR/AqO8O7TPq/jQGvoRw5liPBw4EMF38RDsHmKDV89q/X+qiUREQ==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + } + }, + "node_modules/@googlemaps/markerclusterer": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@googlemaps/markerclusterer/-/markerclusterer-2.0.13.tgz", + "integrity": "sha512-302GjQ9gsHOK/ef6hif+rJDv+AB3THst02iDCbXH2PS9GFwb/5yuytaLpuzJiqGNG+k2zvTAWTsGY/fQN5DZ7w==", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "supercluster": "^7.1.3" + } + }, "node_modules/@grpc/grpc-js": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.7.1.tgz", - "integrity": "sha512-GVtMU4oh/TeKkWGzXUEsyZtyvSUIT1z49RtGH1UnEGeL+sLuxKl8QH3KZTlSB329R1sWJmesm5hQ5CxXdYH9dg==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.7.3.tgz", + "integrity": "sha512-H9l79u4kJ2PVSxUNA08HMYAnUBLj9v6KjYQ7SQ71hOZcEXhShE/y5iQCesP8+6/Ik/7i2O0a10bPquIcYfufog==", "dependencies": { "@grpc/proto-loader": "^0.7.0", "@types/node": ">=12.12.47" @@ -2889,9 +3674,9 @@ } }, "node_modules/@grpc/grpc-js/node_modules/@grpc/proto-loader": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.3.tgz", - "integrity": "sha512-5dAvoZwna2Py3Ef96Ux9jIkp3iZ62TUsV00p3wVBPNX5K178UbNi8Q7gQVqwXT1Yq9RejIGG9G2IPEo93T6RcA==", + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.4.tgz", + "integrity": "sha512-MnWjkGwqQ3W8fx94/c1CwqLsNmHHv2t0CFn+9++6+cDphC1lolpg9M2OU0iebIjK//pBNX9e94ho+gjx6vz39w==", "dependencies": { "@types/long": "^4.0.1", "lodash.camelcase": "^4.3.0", @@ -2907,9 +3692,9 @@ } }, "node_modules/@grpc/grpc-js/node_modules/protobufjs": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.1.2.tgz", - "integrity": "sha512-4ZPTPkXCdel3+L81yw3dG6+Kq3umdWKh7Dc7GW/CpNk4SX3hK58iPCWeCyhVTDrbkNeKrYNZ7EojM5WDaEWTLQ==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.1.tgz", + "integrity": "sha512-L3pCItypTnPK27+CS8nuhZMYtsY+i8dqdq2vZsYHlG17CnWp1DWPQ/sos0vOKrj1fHEAzo3GBqSHLaeZyKUCDA==", "hasInstallScript": true, "dependencies": { "@protobufjs/aspromise": "^1.1.2", @@ -2930,9 +3715,9 @@ } }, "node_modules/@grpc/grpc-js/node_modules/protobufjs/node_modules/long": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.0.tgz", - "integrity": "sha512-9RTUNjK60eJbx3uz+TEGF7fUr29ZDxR5QzXcyDpeSfeH28S9ycINflOgOlppit5U+4kNTe83KQnMEerw7GmE8w==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.1.tgz", + "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==" }, "node_modules/@grpc/proto-loader": { "version": "0.6.13", @@ -3512,6 +4297,437 @@ "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, + "node_modules/@mapbox/geojson-rewind": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz", + "integrity": "sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA==", + "dependencies": { + "get-stream": "^6.0.1", + "minimist": "^1.2.6" + }, + "bin": { + "geojson-rewind": "geojson-rewind" + } + }, + "node_modules/@mapbox/jsonlint-lines-primitives": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz", + "integrity": "sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@mapbox/mapbox-gl-supported": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-2.0.1.tgz", + "integrity": "sha512-HP6XvfNIzfoMVfyGjBckjiAOQK9WfX0ywdLubuPMPv+Vqf5fj0uCbgBQYpiqcWZT6cbyyRnTSXDheT1ugvF6UQ==" + }, + "node_modules/@mapbox/point-geometry": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", + "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==" + }, + "node_modules/@mapbox/tiny-sdf": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.0.5.tgz", + "integrity": "sha512-OhXt2lS//WpLdkqrzo/KwB7SRD8AiNTFFzuo9n14IBupzIMa67yGItcK7I2W9D8Ghpa4T04Sw9FWsKCJG50Bxw==" + }, + "node_modules/@mapbox/unitbezier": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz", + "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==" + }, + "node_modules/@mapbox/vector-tile": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", + "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", + "dependencies": { + "@mapbox/point-geometry": "~0.1.0" + } + }, + "node_modules/@mapbox/whoots-js": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz", + "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@mui/base": { + "version": "5.0.0-alpha.116", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.116.tgz", + "integrity": "sha512-VwhifWdrfHc4/ZdqRZ4Gf+7P39sovNN24By1YVZdvJ9fvp0Sr8sNftGUCjYXXz+xCXVBQDXvhfxMwZrj2MvJvA==", + "dependencies": { + "@babel/runtime": "^7.20.7", + "@emotion/is-prop-valid": "^1.2.0", + "@mui/types": "^7.2.3", + "@mui/utils": "^5.11.7", + "@popperjs/core": "^2.11.6", + "clsx": "^1.2.1", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/base/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/@mui/core-downloads-tracker": { + "version": "5.11.7", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.11.7.tgz", + "integrity": "sha512-lZgX7XQTk0zVcpwEa80r+T4y09dosnUxWvFPSikU/2Hh5wnyNOek8WfJwGCNsaRiXJHMi5eHY+z8oku4u5lgNw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + } + }, + "node_modules/@mui/icons-material": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.11.0.tgz", + "integrity": "sha512-I2LaOKqO8a0xcLGtIozC9xoXjZAto5G5gh0FYUMAlbsIHNHIjn4Xrw9rvjY20vZonyiGrZNMAlAXYkY6JvhF6A==", + "dependencies": { + "@babel/runtime": "^7.20.6" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@mui/material": "^5.0.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material": { + "version": "5.11.7", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.11.7.tgz", + "integrity": "sha512-wDv7Pc6kMe9jeWkmCLt4JChd1lPc2u23JQHpB35L2VwQowpNFoDfIwqi0sYCnZTMKlRc7lza8LqwSwHl2G52Rw==", + "dependencies": { + "@babel/runtime": "^7.20.7", + "@mui/base": "5.0.0-alpha.116", + "@mui/core-downloads-tracker": "^5.11.7", + "@mui/system": "^5.11.7", + "@mui/types": "^7.2.3", + "@mui/utils": "^5.11.7", + "@types/react-transition-group": "^4.4.5", + "clsx": "^1.2.1", + "csstype": "^3.1.1", + "prop-types": "^15.8.1", + "react-is": "^18.2.0", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/@mui/private-theming": { + "version": "5.11.7", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.11.7.tgz", + "integrity": "sha512-XzRTSZdc8bhuUdjablTNv3kFkZ/XIMlKkOqqJCU0G8W3tWGXpau2DXkafPd1ddjPhF9zF3qLKNGgKCChYItjgA==", + "dependencies": { + "@babel/runtime": "^7.20.7", + "@mui/utils": "^5.11.7", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/styled-engine": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.11.0.tgz", + "integrity": "sha512-AF06K60Zc58qf0f7X+Y/QjaHaZq16znliLnGc9iVrV/+s8Ln/FCoeNuFvhlCbZZQ5WQcJvcy59zp0nXrklGGPQ==", + "dependencies": { + "@babel/runtime": "^7.20.6", + "@emotion/cache": "^11.10.5", + "csstype": "^3.1.1", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/system": { + "version": "5.11.7", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.11.7.tgz", + "integrity": "sha512-uGB6hBxGlAdlmbLdTtUZYNPXkgQGGnKxHdkRATqsu7UlCxNsc/yS5NCEWy/3c4pnelD1LDLD39WrntP9mwhfkQ==", + "dependencies": { + "@babel/runtime": "^7.20.7", + "@mui/private-theming": "^5.11.7", + "@mui/styled-engine": "^5.11.0", + "@mui/types": "^7.2.3", + "@mui/utils": "^5.11.7", + "clsx": "^1.2.1", + "csstype": "^3.1.1", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/types": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.3.tgz", + "integrity": "sha512-tZ+CQggbe9Ol7e/Fs5RcKwg/woU+o8DCtOnccX6KmbBc7YrfqMYEYuaIcXHuhpT880QwNkZZ3wQwvtlDFA2yOw==", + "peerDependencies": { + "@types/react": "*" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils": { + "version": "5.11.7", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.11.7.tgz", + "integrity": "sha512-8uyNDeVHZA804Ego20Erv8TpxlbqTe/EbhTI2H1UYr4/RiIbBprat8W4Qqr2UQIsC/b3DLz+0RQ6R/E5BxEcLA==", + "dependencies": { + "@babel/runtime": "^7.20.7", + "@types/prop-types": "^15.7.5", + "@types/react-is": "^16.7.1 || ^17.0.0", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0" + } + }, + "node_modules/@mui/utils/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/@mui/x-date-pickers": { + "version": "5.0.17", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-5.0.17.tgz", + "integrity": "sha512-Rxm2OqSLGXijdwCpt8dzbuDIWNids7bUsuxB/ci66MB4ULfTswhFXZTcVvEm/SKZvtkUmDPQmMemdNg78440iA==", + "dependencies": { + "@babel/runtime": "^7.18.9", + "@date-io/core": "^2.15.0", + "@date-io/date-fns": "^2.15.0", + "@date-io/dayjs": "^2.15.0", + "@date-io/luxon": "^2.15.0", + "@date-io/moment": "^2.15.0", + "@mui/utils": "^5.10.3", + "@types/react-transition-group": "^4.4.5", + "clsx": "^1.2.1", + "prop-types": "^15.7.2", + "react-transition-group": "^4.4.5", + "rifm": "^0.12.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@emotion/react": "^11.9.0", + "@emotion/styled": "^11.8.1", + "@mui/material": "^5.4.1", + "@mui/system": "^5.4.1", + "date-fns": "^2.25.0", + "dayjs": "^1.10.7", + "luxon": "^1.28.0 || ^2.0.0 || ^3.0.0", + "moment": "^2.29.1", + "react": "^17.0.2 || ^18.0.0", + "react-dom": "^17.0.2 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "date-fns": { + "optional": true + }, + "dayjs": { + "optional": true + }, + "luxon": { + "optional": true + }, + "moment": { + "optional": true + } + } + }, + "node_modules/@mui/x-date-pickers-pro": { + "version": "5.0.17", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers-pro/-/x-date-pickers-pro-5.0.17.tgz", + "integrity": "sha512-x40IOeSxmpW43HtmJpf5WuiRvW2lnjbNuFJOf/Sco8yyd+lvx1bON9ke8h8u5jKVDTJPXDh44NNZ7nIHUXM49A==", + "dependencies": { + "@babel/runtime": "^7.18.9", + "@date-io/date-fns": "^2.15.0", + "@date-io/dayjs": "^2.15.0", + "@date-io/luxon": "^2.15.0", + "@date-io/moment": "^2.15.0", + "@mui/utils": "^5.10.3", + "@mui/x-date-pickers": "5.0.17", + "@mui/x-license-pro": "5.17.12", + "clsx": "^1.2.1", + "prop-types": "^15.7.2", + "react-transition-group": "^4.4.5", + "rifm": "^0.12.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@mui/material": "^5.4.1", + "@mui/system": "^5.4.1", + "date-fns": "^2.25.0", + "dayjs": "^1.10.7", + "luxon": "^1.28.0 || ^2.0.0 || ^3.0.0", + "moment": "^2.29.1", + "react": "^17.0.2 || ^18.0.0", + "react-dom": "^17.0.2 || ^18.0.0" + }, + "peerDependenciesMeta": { + "date-fns": { + "optional": true + }, + "dayjs": { + "optional": true + }, + "luxon": { + "optional": true + }, + "moment": { + "optional": true + } + } + }, + "node_modules/@mui/x-license-pro": { + "version": "5.17.12", + "resolved": "https://registry.npmjs.org/@mui/x-license-pro/-/x-license-pro-5.17.12.tgz", + "integrity": "sha512-UzFaE+9A30kfguCuME0D5zqsItqbHZ3xZwmyrJr8MvZOEoqiJWF4NT4Pvlg2nqaPYt/h81j7sjVFa3KiwT0vbg==", + "dependencies": { + "@babel/runtime": "^7.18.9", + "@mui/utils": "^5.10.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "react": "^17.0.2 || ^18.0.0" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -3725,9 +4941,9 @@ } }, "node_modules/@popperjs/core": { - "version": "2.11.5", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.5.tgz", - "integrity": "sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==", + "version": "2.11.6", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", + "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==", "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" @@ -3788,16 +5004,43 @@ "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, "node_modules/@react-aria/ssr": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.2.0.tgz", - "integrity": "sha512-wwJFdkl+Q8NU5yJ4NvdAOqx5LM3QtUVoSjuK7Ey8jZ4WS4bB0EqT3Kr3IInBs257HzZ5nXCiKXKE4NGXXuIRWA==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.4.1.tgz", + "integrity": "sha512-NmhoilMDyIfQiOSdQgxpVH2tC2u85Y0mVijtBNbI9kcDYLEiW/r6vKYVKtkyU+C4qobXhGMPfZ70PTc0lysSVA==", "dependencies": { - "@babel/runtime": "^7.6.2" + "@swc/helpers": "^0.4.14" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, + "node_modules/@react-google-maps/api": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/@react-google-maps/api/-/api-2.17.1.tgz", + "integrity": "sha512-XesubSCFfyMtilqljF2kU5zdPru4nks4I4O0HH6H2xOw51wQXs26btJKlRac2/jbJ/gIiGZ/l14q0xaL/6OaBg==", + "dependencies": { + "@googlemaps/js-api-loader": "1.15.1", + "@googlemaps/markerclusterer": "2.0.13", + "@react-google-maps/infobox": "2.16.0", + "@react-google-maps/marker-clusterer": "2.16.1", + "@types/google.maps": "3.50.5", + "invariant": "2.2.4" + }, + "peerDependencies": { + "react": "^16.8 || ^17 || ^18", + "react-dom": "^16.8 || ^17 || ^18" + } + }, + "node_modules/@react-google-maps/infobox": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/@react-google-maps/infobox/-/infobox-2.16.0.tgz", + "integrity": "sha512-ZojiMS25388RcUHQPycUAerSqdHDom+3dHczVcXHdT/i8fka3O8InkHxXwMhvBoM143ips7mv2BPaYOAJ5f4Nw==" + }, + "node_modules/@react-google-maps/marker-clusterer": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/@react-google-maps/marker-clusterer/-/marker-clusterer-2.16.1.tgz", + "integrity": "sha512-jOuyqzWLeXvQcoAu6TCVWHAuko+sDt0JjawNHBGqUNLywMtTCvYP0L0PiqJZOUCUeRYGdUy0AKxQ+30vAkvwag==" + }, "node_modules/@reduxjs/toolkit": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.8.3.tgz", @@ -3830,9 +5073,9 @@ } }, "node_modules/@restart/hooks": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.7.tgz", - "integrity": "sha512-ZbjlEHcG+FQtpDPHd7i4FzNNvJf2enAwZfJbpM8CW7BhmOAbsHpZe3tsHwfQUrBuyrxWqPYp2x5UMnilWcY22A==", + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.8.tgz", + "integrity": "sha512-Ivvp1FZ0Lja80iUTYAhbzy+stxwO7FbPHP95ypCtIh0wyOLiayQywXhVJ2ZYP5S1AjW2GmKHeRU4UglMwTG2sA==", "dependencies": { "dequal": "^2.0.2" }, @@ -3841,16 +5084,16 @@ } }, "node_modules/@restart/ui": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@restart/ui/-/ui-1.3.0.tgz", - "integrity": "sha512-VRb330/6tDaHAHRkqe0GOawuj+hcZM7Zp5piWk/3AVwW18+0sQxGqqFeiH1ZeEMdn7w+D8bZPaY3QoLTmDKcGg==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@restart/ui/-/ui-1.5.3.tgz", + "integrity": "sha512-8Zx3HUMxOeC+ZmN7MwChkolpDQaV55prSgpNoGOw5heKnn32HgzEQ6Y0Rz0YqMBUtEKS0NsvNpsskve+O8qXAQ==", "dependencies": { - "@babel/runtime": "^7.18.3", - "@popperjs/core": "^2.11.5", - "@react-aria/ssr": "^3.2.0", + "@babel/runtime": "^7.20.7", + "@popperjs/core": "^2.11.6", + "@react-aria/ssr": "^3.4.1", "@restart/hooks": "^0.4.7", "@types/warning": "^3.0.0", - "dequal": "^2.0.2", + "dequal": "^2.0.3", "dom-helpers": "^5.2.0", "uncontrollable": "^7.2.1", "warning": "^4.0.3" @@ -4189,6 +5432,14 @@ "url": "https://github.com/sponsors/gregberge" } }, + "node_modules/@swc/helpers": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz", + "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==", + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@szmarczak/http-timer": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", @@ -4291,6 +5542,30 @@ "node": ">= 10" } }, + "node_modules/@trendyol-js/react-carousel": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@trendyol-js/react-carousel/-/react-carousel-3.0.0.tgz", + "integrity": "sha512-3BzdDGBtMsAQgFcddjpD98xqOzfW4pZVhdTXmn7/FOIiGWg+ipomWLp1iN1hFe4fXSGTx7+xFg2pObkJlz3BPg==", + "dependencies": { + "react": "^16.13.1" + }, + "peerDependencies": { + "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@trendyol-js/react-carousel/node_modules/react": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", + "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", @@ -4430,6 +5705,16 @@ "@types/range-parser": "*" } }, + "node_modules/@types/geojson": { + "version": "7946.0.10", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz", + "integrity": "sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==" + }, + "node_modules/@types/google.maps": { + "version": "3.50.5", + "resolved": "https://registry.npmjs.org/@types/google.maps/-/google.maps-3.50.5.tgz", + "integrity": "sha512-RuZf1MJtctGlpW+Gd4a/eGtAufUDjMf+eyN1l+B3fbe2YLScJbg8KEljJfb+6vnSPFAeM1/48geVIEg3vqOkxw==" + }, "node_modules/@types/graceful-fs": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", @@ -4561,6 +5846,21 @@ "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" }, + "node_modules/@types/mapbox__point-geometry": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.2.tgz", + "integrity": "sha512-D0lgCq+3VWV85ey1MZVkE8ZveyuvW5VAfuahVTQRpXFQTxw03SuIf1/K4UQ87MMIXVKzpFjXFiFMZzLj2kU+iA==" + }, + "node_modules/@types/mapbox__vector-tile": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.0.tgz", + "integrity": "sha512-kDwVreQO5V4c8yAxzZVQLE5tyWF+IPToAanloQaSnwfXmIcJ7cyOrv8z4Ft4y7PsLYmhWXmON8MBV8RX0Rgr8g==", + "dependencies": { + "@types/geojson": "*", + "@types/mapbox__point-geometry": "*", + "@types/pbf": "*" + } + }, "node_modules/@types/mime": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", @@ -4576,6 +5876,11 @@ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, + "node_modules/@types/pbf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/pbf/-/pbf-3.0.2.tgz", + "integrity": "sha512-EDrLIPaPXOZqDjrkzxxbX7UlJSeQVgah3i0aA4pOSzmK9zq3BIh7/MZIQxED7slJByvKM4Gc6Hypyu2lJzh3SQ==" + }, "node_modules/@types/prettier": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz", @@ -4602,9 +5907,9 @@ "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, "node_modules/@types/react": { - "version": "18.0.15", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.15.tgz", - "integrity": "sha512-iz3BtLuIYH1uWdsv6wXYdhozhqj20oD4/Hk2DNXIn1kFsmp9x8d9QB6FnPhfkbhd2PgEONt9Q1x/ebkwjfFLow==", + "version": "18.0.26", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.26.tgz", + "integrity": "sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -4612,9 +5917,17 @@ } }, "node_modules/@types/react-dom": { - "version": "18.0.6", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.6.tgz", - "integrity": "sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==", + "version": "18.0.10", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.10.tgz", + "integrity": "sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-is": { + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-17.0.3.tgz", + "integrity": "sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw==", "dependencies": { "@types/react": "*" } @@ -5212,6 +6525,14 @@ "node": ">=8.9" } }, + "node_modules/adler-32": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz", + "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==", + "engines": { + "node": ">=0.8" + } + }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -5869,6 +7190,14 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "node_modules/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -6017,17 +7346,10 @@ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, - "node_modules/bootstrap": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.1.3.tgz", - "integrity": "sha512-fcQztozJ8jToQWXxVuEyXWW+dSo8AiXWKwiSSrKWsRB/Qt+Ewwza+JWoLKiTuQLaEPhdNAJ7+Dosc9DOIqNy7Q==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/bootstrap" - }, - "peerDependencies": { - "@popperjs/core": "^2.10.2" - } + "node_modules/bootstrap-icons": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.10.3.tgz", + "integrity": "sha512-7Qvj0j0idEm/DdX9Q0CpxAnJYqBCFCiUI6qzSPYfERMcokVuV9Mdm/AJiVZI8+Gawe4h/l6zFcOzvV7oXCZArw==" }, "node_modules/boxen": { "version": "7.0.0", @@ -6377,6 +7699,18 @@ "node": ">=4" } }, + "node_modules/cfb": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz", + "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==", + "dependencies": { + "adler-32": "~1.3.0", + "crc-32": "~1.2.0" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", @@ -6545,6 +7879,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "engines": { + "node": ">=6" + } + }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -6631,6 +7973,14 @@ "node": ">=4" } }, + "node_modules/codepage": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", + "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==", + "engines": { + "node": ">=0.8" + } + }, "node_modules/collect-v8-coverage": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", @@ -6936,6 +8286,17 @@ "node": ">= 6" } }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -6949,6 +8310,11 @@ "node": ">= 8" } }, + "node_modules/crypto-js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", + "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" + }, "node_modules/crypto-random-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", @@ -7029,6 +8395,14 @@ "postcss": "^8.4" } }, + "node_modules/css-line-break": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz", + "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==", + "dependencies": { + "utrie": "^1.0.2" + } + }, "node_modules/css-loader": { "version": "6.7.1", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz", @@ -7182,6 +8556,11 @@ "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==" }, + "node_modules/csscolorparser": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz", + "integrity": "sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==" + }, "node_modules/cssdb": { "version": "6.6.3", "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-6.6.3.tgz", @@ -7333,9 +8712,9 @@ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" }, "node_modules/csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" }, "node_modules/damerau-levenshtein": { "version": "1.0.8", @@ -7391,6 +8770,11 @@ "url": "https://opencollective.com/date-fns" } }, + "node_modules/dayjs": { + "version": "1.11.7", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz", + "integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==" + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -7407,6 +8791,14 @@ } } }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/decimal.js": { "version": "10.3.1", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", @@ -7627,6 +9019,11 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, + "node_modules/dijkstrajs": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.2.tgz", + "integrity": "sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg==" + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -7815,6 +9212,11 @@ "stream-shift": "^1.0.0" } }, + "node_modules/earcut": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", + "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==" + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -7876,6 +9278,11 @@ "node": ">= 4" } }, + "node_modules/encode-utf8": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", + "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==" + }, "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -9268,6 +10675,11 @@ "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -9284,36 +10696,36 @@ } }, "node_modules/firebase": { - "version": "9.9.3", - "resolved": "https://registry.npmjs.org/firebase/-/firebase-9.9.3.tgz", - "integrity": "sha512-lU1FstWqfVZQfz4+TWCZvqJYbwZMyoyP0X/xD/YIfrtXgquOMEDTpoasH4P79N9y3I8iV+6gQHuVmpK+AX2elg==", - "dependencies": { - "@firebase/analytics": "0.8.0", - "@firebase/analytics-compat": "0.1.13", - "@firebase/app": "0.7.31", - "@firebase/app-check": "0.5.12", - "@firebase/app-check-compat": "0.2.12", - "@firebase/app-compat": "0.1.32", - "@firebase/app-types": "0.7.0", - "@firebase/auth": "0.20.5", - "@firebase/auth-compat": "0.2.18", - "@firebase/database": "0.13.5", - "@firebase/database-compat": "0.2.5", - "@firebase/firestore": "3.4.14", - "@firebase/firestore-compat": "0.1.23", - "@firebase/functions": "0.8.4", - "@firebase/functions-compat": "0.2.4", - "@firebase/installations": "0.5.12", - "@firebase/installations-compat": "0.1.12", - "@firebase/messaging": "0.9.16", - "@firebase/messaging-compat": "0.1.16", - "@firebase/performance": "0.5.12", - "@firebase/performance-compat": "0.1.12", - "@firebase/remote-config": "0.3.11", - "@firebase/remote-config-compat": "0.1.12", - "@firebase/storage": "0.9.9", - "@firebase/storage-compat": "0.1.17", - "@firebase/util": "1.6.3" + "version": "9.17.1", + "resolved": "https://registry.npmjs.org/firebase/-/firebase-9.17.1.tgz", + "integrity": "sha512-MSZaTRaaRLgDFLqoEnoPYK8zkLwQNvYeLZ3YSKdcQxG8hDifNO22ywS1cSA1ZCGHlQeOsDtfDwBejKcANf/RQw==", + "dependencies": { + "@firebase/analytics": "0.9.3", + "@firebase/analytics-compat": "0.2.3", + "@firebase/app": "0.9.3", + "@firebase/app-check": "0.6.3", + "@firebase/app-check-compat": "0.3.3", + "@firebase/app-compat": "0.2.3", + "@firebase/app-types": "0.9.0", + "@firebase/auth": "0.21.3", + "@firebase/auth-compat": "0.3.3", + "@firebase/database": "0.14.3", + "@firebase/database-compat": "0.3.3", + "@firebase/firestore": "3.8.3", + "@firebase/firestore-compat": "0.3.3", + "@firebase/functions": "0.9.3", + "@firebase/functions-compat": "0.3.3", + "@firebase/installations": "0.6.3", + "@firebase/installations-compat": "0.2.3", + "@firebase/messaging": "0.12.3", + "@firebase/messaging-compat": "0.2.3", + "@firebase/performance": "0.6.3", + "@firebase/performance-compat": "0.2.3", + "@firebase/remote-config": "0.4.3", + "@firebase/remote-config-compat": "0.2.3", + "@firebase/storage": "0.11.1", + "@firebase/storage-compat": "0.3.1", + "@firebase/util": "1.9.2" } }, "node_modules/firebase-admin": { @@ -9338,6 +10750,84 @@ "@google-cloud/storage": "^6.1.0" } }, + "node_modules/firebase-admin/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/firebase/node_modules/@firebase/app-types": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.9.0.tgz", + "integrity": "sha512-AeweANOIo0Mb8GiYm3xhTEBVCmPwTYAu9Hcd2qSkLuga/6+j9b1Jskl5bpiSQWy9eJ/j5pavxj6eYogmnuzm+Q==" + }, + "node_modules/firebase/node_modules/@firebase/auth-interop-types": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.2.1.tgz", + "integrity": "sha512-VOaGzKp65MY6P5FI84TfYKBXEPi6LmOCSMMzys6o2BN2LOsqy7pCuZCup7NYnfbk5OkkQKzvIfHOzTm0UDpkyg==" + }, + "node_modules/firebase/node_modules/@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "dependencies": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "node_modules/firebase/node_modules/@firebase/database": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.14.3.tgz", + "integrity": "sha512-J76W6N7JiVkLaAtPyjaGRkrsIu9pi6iZikuGGtGjqvV19vkn7oiL4Hbo5uTYCMd4waTUWoL9iI08eX184W+5GQ==", + "dependencies": { + "@firebase/auth-interop-types": "0.2.1", + "@firebase/component": "0.6.3", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.2", + "faye-websocket": "0.11.4", + "tslib": "^2.1.0" + } + }, + "node_modules/firebase/node_modules/@firebase/database-compat": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-0.3.3.tgz", + "integrity": "sha512-r+L9jTbvsnb7sD+xz6UKU39DgBWqB2pyjzPNdBeriGC9Ssa2MAZe0bIqjCQg51RRXYc/aa/zK1Q2/4uesZeVgQ==", + "dependencies": { + "@firebase/component": "0.6.3", + "@firebase/database": "0.14.3", + "@firebase/database-types": "0.10.3", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "node_modules/firebase/node_modules/@firebase/database-types": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.10.3.tgz", + "integrity": "sha512-Hu34CDhHYZsd2eielr0jeaWrTJk8Hz0nd7WsnYDnXtQX4i49ppgPesUzPdXVBdIBLJmT0ZZRvT7qWHknkOT+zg==", + "dependencies": { + "@firebase/app-types": "0.9.0", + "@firebase/util": "1.9.2" + } + }, + "node_modules/firebase/node_modules/@firebase/logger": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.0.tgz", + "integrity": "sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/firebase/node_modules/@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -9590,6 +11080,14 @@ "node": ">=10" } }, + "node_modules/frac": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==", + "engines": { + "node": ">=0.8" + } + }, "node_modules/fraction.js": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", @@ -9746,6 +11244,11 @@ "node": ">=6.9.0" } }, + "node_modules/geojson-vt": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz", + "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==" + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -9817,6 +11320,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gl-matrix": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", + "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" + }, "node_modules/glob": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", @@ -10338,6 +11846,14 @@ "he": "bin/he" } }, + "node_modules/history": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/history/-/history-5.3.0.tgz", + "integrity": "sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==", + "dependencies": { + "@babel/runtime": "^7.7.6" + } + }, "node_modules/hoist-non-react-statics": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", @@ -10474,6 +11990,18 @@ "webpack": "^5.20.0" } }, + "node_modules/html2canvas": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz", + "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", + "dependencies": { + "css-line-break": "^2.1.0", + "text-segmentation": "^1.0.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/htmlparser2": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", @@ -10657,6 +12185,25 @@ "node": ">=4" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/ignore": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", @@ -10676,11 +12223,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" - }, "node_modules/immer": { "version": "9.0.15", "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.15.tgz", @@ -12973,39 +14515,6 @@ "node": ">=4.0" } }, - "node_modules/jszip": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.0.tgz", - "integrity": "sha512-LDfVtOLtOxb9RXkYOwPyNBTQDL4eUbqahtoY6x07GiDJHwSYvn8sHHIw8wINImV3MqbMNve2gSuM1DDqEKk09Q==", - "dependencies": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" - } - }, - "node_modules/jszip/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/jszip/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/jwa": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", @@ -13043,6 +14552,11 @@ "safe-buffer": "^5.0.1" } }, + "node_modules/kdbush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-3.0.0.tgz", + "integrity": "sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew==" + }, "node_modules/keyv": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.3.2.tgz", @@ -13123,14 +14637,6 @@ "node": ">= 0.8.0" } }, - "node_modules/lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "dependencies": { - "immediate": "~3.0.5" - } - }, "node_modules/lilconfig": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", @@ -13405,6 +14911,38 @@ "tmpl": "1.0.5" } }, + "node_modules/maplibre-gl": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-2.4.0.tgz", + "integrity": "sha512-csNFylzntPmHWidczfgCZpvbTSmhaWvLRj9e1ezUDBEPizGgshgm3ea1T5TCNEEBq0roauu7BPuRZjA3wO4KqA==", + "hasInstallScript": true, + "dependencies": { + "@mapbox/geojson-rewind": "^0.5.2", + "@mapbox/jsonlint-lines-primitives": "^2.0.2", + "@mapbox/mapbox-gl-supported": "^2.0.1", + "@mapbox/point-geometry": "^0.1.0", + "@mapbox/tiny-sdf": "^2.0.5", + "@mapbox/unitbezier": "^0.0.1", + "@mapbox/vector-tile": "^1.3.1", + "@mapbox/whoots-js": "^3.1.0", + "@types/geojson": "^7946.0.10", + "@types/mapbox__point-geometry": "^0.1.2", + "@types/mapbox__vector-tile": "^1.3.0", + "@types/pbf": "^3.0.2", + "csscolorparser": "~1.0.3", + "earcut": "^2.2.4", + "geojson-vt": "^3.2.1", + "gl-matrix": "^3.4.3", + "global-prefix": "^3.0.0", + "murmurhash-js": "^1.0.0", + "pbf": "^3.2.1", + "potpack": "^1.0.2", + "quickselect": "^2.0.0", + "supercluster": "^7.1.5", + "tinyqueue": "^2.0.3", + "vt-pbf": "^3.1.3" + } + }, "node_modules/mdn-data": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", @@ -13717,6 +15255,11 @@ "multicast-dns": "cli.js" } }, + "node_modules/murmurhash-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz", + "integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==" + }, "node_modules/nanoid": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", @@ -14418,11 +15961,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, "node_modules/param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", @@ -14535,6 +16073,18 @@ "node": ">=8" } }, + "node_modules/pbf": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", + "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", + "dependencies": { + "ieee754": "^1.1.12", + "resolve-protobuf-schema": "^2.1.0" + }, + "bin": { + "pbf": "bin/pbf" + } + }, "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -14698,6 +16248,14 @@ "node": ">=4" } }, + "node_modules/pngjs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", + "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/postcss": { "version": "8.4.14", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", @@ -15860,6 +17418,11 @@ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, + "node_modules/potpack": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.2.tgz", + "integrity": "sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==" + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -16061,6 +17624,11 @@ "pbts": "bin/pbts" } }, + "node_modules/protocol-buffers-schema": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", + "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==" + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -16131,6 +17699,145 @@ "teleport": ">=0.2.0" } }, + "node_modules/qr.js": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/qr.js/-/qr.js-0.0.0.tgz", + "integrity": "sha512-c4iYnWb+k2E+vYpRimHqSu575b1/wKl4XFeJGpFmrJQz5I88v9aY2czh7s0w36srfCM1sXgC/xpoJz5dJfq+OQ==" + }, + "node_modules/qrcode": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.1.tgz", + "integrity": "sha512-nS8NJ1Z3md8uTjKtP+SGGhfqmTCs5flU/xR623oI0JX+Wepz9R8UrRVCTBTJm3qGw3rH6jJ6MUHjkDx15cxSSg==", + "dependencies": { + "dijkstrajs": "^1.0.1", + "encode-utf8": "^1.0.3", + "pngjs": "^5.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "qrcode": "bin/qrcode" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/qrcode/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/qrcode/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/qrcode/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qrcode/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qrcode/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/qrcode/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qrcode/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qrcode/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "node_modules/qrcode/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qrcode/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/qs": { "version": "6.10.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", @@ -16175,6 +17882,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/quickselect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" + }, "node_modules/raf": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", @@ -16308,13 +18020,13 @@ "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" }, "node_modules/react-bootstrap": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.4.0.tgz", - "integrity": "sha512-dn599jNK1Fg5GGjJH+lQQDwELVzigh/MdusKpB/0el+sCjsO5MZDH5gRMmBjRhC+vb7VlCDr6OXffPIDSkNMLw==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.7.0.tgz", + "integrity": "sha512-Jcrn6aUuRVBeSB6dzKODKZU1TONOdhAxu0IDm4Sv74SJUm98dMdhSotF2SNvFEADANoR+stV+7TK6SNX1wWu5w==", "dependencies": { "@babel/runtime": "^7.17.2", "@restart/hooks": "^0.4.6", - "@restart/ui": "^1.2.0", + "@restart/ui": "^1.4.1", "@types/react-transition-group": "^4.4.4", "classnames": "^2.3.1", "dom-helpers": "^5.2.1", @@ -16336,6 +18048,21 @@ } } }, + "node_modules/react-date-range": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/react-date-range/-/react-date-range-1.4.0.tgz", + "integrity": "sha512-+9t0HyClbCqw1IhYbpWecjsiaftCeRN5cdhsi9v06YdimwyMR2yYHWcgVn3URwtN/txhqKpEZB6UX1fHpvK76w==", + "dependencies": { + "classnames": "^2.2.6", + "prop-types": "^15.7.2", + "react-list": "^0.8.13", + "shallow-equal": "^1.2.1" + }, + "peerDependencies": { + "date-fns": "2.0.0-alpha.7 || >=2.0.0", + "react": "^0.14 || ^15.0.0-rc || >=15.0" + } + }, "node_modules/react-datepicker": { "version": "4.8.0", "resolved": "https://registry.npmjs.org/react-datepicker/-/react-datepicker-4.8.0.tgz", @@ -16443,6 +18170,14 @@ "react": "*" } }, + "node_modules/react-icons": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.7.1.tgz", + "integrity": "sha512-yHd3oKGMgm7zxo3EA7H2n7vxSoiGmHk5t6Ou4bXsfcgWyhfDKMpyKfhHR6Bjnn63c+YXBLBPUql9H4wPJM6sXw==", + "peerDependencies": { + "react": "*" + } + }, "node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", @@ -16453,6 +18188,17 @@ "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" }, + "node_modules/react-list": { + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/react-list/-/react-list-0.8.17.tgz", + "integrity": "sha512-pgmzGi0G5uGrdHzMhgO7KR1wx5ZXVvI3SsJUmkblSAKtewIhMwbQiMuQiTE83ozo04BQJbe0r3WIWzSO0dR1xg==", + "dependencies": { + "prop-types": "15" + }, + "peerDependencies": { + "react": "0.14 || 15 - 18" + } + }, "node_modules/react-onclickoutside": { "version": "6.12.2", "resolved": "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-6.12.2.tgz", @@ -16480,6 +18226,24 @@ "react-dom": "^16.8.0 || ^17 || ^18" } }, + "node_modules/react-qr-code": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/react-qr-code/-/react-qr-code-2.0.11.tgz", + "integrity": "sha512-P7mvVM5vk9NjGdHMt4Z0KWeeJYwRAtonHTghZT2r+AASinLUUKQ9wfsGH2lPKsT++gps7hXmaiMGRvwTDEL9OA==", + "dependencies": { + "prop-types": "^15.8.1", + "qr.js": "0.0.0" + }, + "peerDependencies": { + "react": "^16.x || ^17.x || ^18.x", + "react-native-svg": "*" + }, + "peerDependenciesMeta": { + "react-native-svg": { + "optional": true + } + } + }, "node_modules/react-redux": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.2.tgz", @@ -16656,9 +18420,9 @@ } }, "node_modules/react-transition-group": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz", - "integrity": "sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==", + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", "dependencies": { "@babel/runtime": "^7.5.5", "dom-helpers": "^5.0.1", @@ -16670,6 +18434,20 @@ "react-dom": ">=16.6.0" } }, + "node_modules/react-web-camera": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/react-web-camera/-/react-web-camera-0.0.1.tgz", + "integrity": "sha512-wOhuk98uGeuL7kwJpJANPzhGrPJPhRizvXGi+E93IWgizbZVZxptygq4FnNMCk2hxLBnCsNxvMC+PU1tMZN0Iw==" + }, + "node_modules/react-webcam": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/react-webcam/-/react-webcam-7.0.1.tgz", + "integrity": "sha512-8E/Eb/7ksKwn5QdLn67tOR7+TdP9BZdu6E5/DSt20v8yfW/s0VGBigE6VA7R4278mBuBUowovAB3DkCfVmSPvA==", + "peerDependencies": { + "react": ">=16.2.0", + "react-dom": ">=16.2.0" + } + }, "node_modules/reactstrap": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/reactstrap/-/reactstrap-9.1.2.tgz", @@ -16829,9 +18607,9 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "node_modules/regenerator-transform": { "version": "0.15.0", @@ -16982,6 +18760,11 @@ "node": ">=0.10.0" } }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -17032,6 +18815,14 @@ "node": ">=8" } }, + "node_modules/resolve-protobuf-schema": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", + "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", + "dependencies": { + "protocol-buffers-schema": "^3.3.1" + } + }, "node_modules/resolve-url-loader": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", @@ -17134,6 +18925,14 @@ "node": ">=0.10.0" } }, + "node_modules/rifm": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/rifm/-/rifm-0.12.1.tgz", + "integrity": "sha512-OGA1Bitg/dSJtI/c4dh90svzaUPt228kzFsUkJbtA2c964IqEAwWXeL9ZJi86xWv3j5SMqRvGULl7bA6cK0Bvg==", + "peerDependencies": { + "react": ">=16.8" + } + }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -17384,19 +19183,6 @@ "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" }, - "node_modules/selenium-webdriver": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.1.2.tgz", - "integrity": "sha512-e4Ap8vQvhipgBB8Ry9zBiKGkU6kHKyNnWiavGGLKkrdW81Zv7NVMtFOL/j3yX0G8QScM7XIXijKssNd4EUxSOw==", - "dependencies": { - "jszip": "^3.6.0", - "tmp": "^0.2.1", - "ws": ">=7.4.6" - }, - "engines": { - "node": ">= 10.15.0" - } - }, "node_modules/selfsigned": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.1.tgz", @@ -17590,16 +19376,16 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, + "node_modules/shallow-equal": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz", + "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==" + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -17674,6 +19460,14 @@ "websocket-driver": "^0.7.4" } }, + "node_modules/sockjs/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/socks": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", @@ -17834,6 +19628,17 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, + "node_modules/ssf": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz", + "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", + "dependencies": { + "frac": "~1.1.2" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/ssri": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", @@ -18118,6 +19923,19 @@ "postcss": "^8.2.15" } }, + "node_modules/stylis": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", + "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==" + }, + "node_modules/supercluster": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-7.1.5.tgz", + "integrity": "sha512-EulshI3pGUM66o6ZdH3ReiFcvHpM3vAigyK+vcxdjpJyEbIIrtbmBdY23mGgnI24uXiGFvrGq9Gkum/8U7vJWg==", + "dependencies": { + "kdbush": "^3.0.0" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -18427,15 +20245,6 @@ "node": ">=12" } }, - "node_modules/teeny-request/node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "optional": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/temp-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", @@ -18618,6 +20427,14 @@ "resolved": "https://registry.npmjs.org/text-decoding/-/text-decoding-1.0.0.tgz", "integrity": "sha512-/0TJD42KDnVwKmDK6jj3xP7E2MG7SHAOG4tyTgyUCRPdHwvkquYNLEQltmdMa3owq3TkddCVcTsoctJI8VQNKA==" }, + "node_modules/text-segmentation": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz", + "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==", + "dependencies": { + "utrie": "^1.0.2" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -18633,16 +20450,10 @@ "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" }, - "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } + "node_modules/tinyqueue": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", + "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==" }, "node_modules/tmpl": { "version": "1.0.5", @@ -19064,10 +20875,18 @@ "node": ">= 0.4.0" } }, + "node_modules/utrie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz", + "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==", + "dependencies": { + "base64-arraybuffer": "^1.0.2" + } + }, "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", "bin": { "uuid": "dist/bin/uuid" } @@ -19126,6 +20945,16 @@ "node": ">= 0.8" } }, + "node_modules/vt-pbf": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz", + "integrity": "sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==", + "dependencies": { + "@mapbox/point-geometry": "0.1.0", + "@mapbox/vector-tile": "^1.3.1", + "pbf": "^3.2.1" + } + }, "node_modules/w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -19542,6 +21371,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" + }, "node_modules/wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", @@ -19605,6 +21439,22 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, + "node_modules/wmf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz", + "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/word": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz", + "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==", + "engines": { + "node": ">=0.8" + } + }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -20027,6 +21877,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/xlsx": { + "version": "0.18.5", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz", + "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==", + "dependencies": { + "adler-32": "~1.3.0", + "cfb": "~1.2.1", + "codepage": "~1.15.0", + "crc-32": "~1.2.1", + "ssf": "~0.11.2", + "wmf": "~1.0.1", + "word": "~0.3.0" + }, + "bin": { + "xlsx": "bin/xlsx.njs" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", @@ -21356,11 +23226,11 @@ } }, "@babel/runtime": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.6.tgz", - "integrity": "sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ==", + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz", + "integrity": "sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==", "requires": { - "regenerator-runtime": "^0.13.4" + "regenerator-runtime": "^0.13.11" } }, "@babel/runtime-corejs3": { @@ -21523,6 +23393,165 @@ "integrity": "sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==", "requires": {} }, + "@date-io/core": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/@date-io/core/-/core-2.16.0.tgz", + "integrity": "sha512-DYmSzkr+jToahwWrsiRA2/pzMEtz9Bq1euJwoOuYwuwIYXnZFtHajY2E6a1VNVDc9jP8YUXK1BvnZH9mmT19Zg==" + }, + "@date-io/date-fns": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/@date-io/date-fns/-/date-fns-2.16.0.tgz", + "integrity": "sha512-bfm5FJjucqlrnQcXDVU5RD+nlGmL3iWgkHTq3uAZWVIuBu6dDmGa3m8a6zo2VQQpu8ambq9H22UyUpn7590joA==", + "requires": { + "@date-io/core": "^2.16.0" + } + }, + "@date-io/dayjs": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/@date-io/dayjs/-/dayjs-2.16.0.tgz", + "integrity": "sha512-y5qKyX2j/HG3zMvIxTobYZRGnd1FUW2olZLS0vTj7bEkBQkjd2RO7/FEwDY03Z1geVGlXKnzIATEVBVaGzV4Iw==", + "requires": { + "@date-io/core": "^2.16.0" + } + }, + "@date-io/luxon": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/@date-io/luxon/-/luxon-2.16.1.tgz", + "integrity": "sha512-aeYp5K9PSHV28946pC+9UKUi/xMMYoaGelrpDibZSgHu2VWHXrr7zWLEr+pMPThSs5vt8Ei365PO+84pCm37WQ==", + "requires": { + "@date-io/core": "^2.16.0" + } + }, + "@date-io/moment": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/@date-io/moment/-/moment-2.16.1.tgz", + "integrity": "sha512-JkxldQxUqZBfZtsaCcCMkm/dmytdyq5pS1RxshCQ4fHhsvP5A7gSqPD22QbVXMcJydi3d3v1Y8BQdUKEuGACZQ==", + "requires": { + "@date-io/core": "^2.16.0" + } + }, + "@emotion/babel-plugin": { + "version": "11.10.5", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.5.tgz", + "integrity": "sha512-xE7/hyLHJac7D2Ve9dKroBBZqBT7WuPQmWcq7HSGb84sUuP4mlOWoB8dvVfD9yk5DHkU1m6RW7xSoDtnQHNQeA==", + "requires": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/plugin-syntax-jsx": "^7.17.12", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.0", + "@emotion/memoize": "^0.8.0", + "@emotion/serialize": "^1.1.1", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.1.3" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + } + } + }, + "@emotion/cache": { + "version": "11.10.5", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.5.tgz", + "integrity": "sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA==", + "requires": { + "@emotion/memoize": "^0.8.0", + "@emotion/sheet": "^1.2.1", + "@emotion/utils": "^1.2.0", + "@emotion/weak-memoize": "^0.3.0", + "stylis": "4.1.3" + } + }, + "@emotion/hash": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.0.tgz", + "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==" + }, + "@emotion/is-prop-valid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz", + "integrity": "sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==", + "requires": { + "@emotion/memoize": "^0.8.0" + } + }, + "@emotion/memoize": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz", + "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==" + }, + "@emotion/react": { + "version": "11.10.5", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.5.tgz", + "integrity": "sha512-TZs6235tCJ/7iF6/rvTaOH4oxQg2gMAcdHemjwLKIjKz4rRuYe1HJ2TQJKnAcRAfOUDdU8XoDadCe1rl72iv8A==", + "requires": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.10.5", + "@emotion/cache": "^11.10.5", + "@emotion/serialize": "^1.1.1", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@emotion/utils": "^1.2.0", + "@emotion/weak-memoize": "^0.3.0", + "hoist-non-react-statics": "^3.3.1" + } + }, + "@emotion/serialize": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.1.tgz", + "integrity": "sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==", + "requires": { + "@emotion/hash": "^0.9.0", + "@emotion/memoize": "^0.8.0", + "@emotion/unitless": "^0.8.0", + "@emotion/utils": "^1.2.0", + "csstype": "^3.0.2" + } + }, + "@emotion/sheet": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.1.tgz", + "integrity": "sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==" + }, + "@emotion/styled": { + "version": "11.10.5", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.5.tgz", + "integrity": "sha512-8EP6dD7dMkdku2foLoruPCNkRevzdcBaY6q0l0OsbyJK+x8D9HWjX27ARiSIKNF634hY9Zdoedh8bJCiva8yZw==", + "requires": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.10.5", + "@emotion/is-prop-valid": "^1.2.0", + "@emotion/serialize": "^1.1.1", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@emotion/utils": "^1.2.0" + } + }, + "@emotion/unitless": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", + "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" + }, + "@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz", + "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==", + "requires": {} + }, + "@emotion/utils": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz", + "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==" + }, + "@emotion/weak-memoize": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz", + "integrity": "sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==" + }, "@eslint/eslintrc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", @@ -21596,90 +23625,244 @@ } }, "@firebase/analytics": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.8.0.tgz", - "integrity": "sha512-wkcwainNm8Cu2xkJpDSHfhBSdDJn86Q1TZNmLWc67VrhZUHXIKXxIqb65/tNUVE+I8+sFiDDNwA+9R3MqTQTaA==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.9.3.tgz", + "integrity": "sha512-XdYHBi6RvHYVAHGyLxXX0uRPwZmGeqw1JuWS1rMEeRF/jvbxnrL81kcFAHZVRkEvG9bXAJgL2fX9wmDo3e622w==", "requires": { - "@firebase/component": "0.5.17", - "@firebase/installations": "0.5.12", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.6.3", + "@firebase/component": "0.6.3", + "@firebase/installations": "0.6.3", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.2", "tslib": "^2.1.0" + }, + "dependencies": { + "@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "requires": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "@firebase/logger": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.0.tgz", + "integrity": "sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==", + "requires": { + "tslib": "^2.1.0" + } + }, + "@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "requires": { + "tslib": "^2.1.0" + } + } } }, "@firebase/analytics-compat": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.1.13.tgz", - "integrity": "sha512-QC1DH/Dwc8fBihn0H+jocBWyE17GF1fOCpCrpAiQ2u16F/NqsVDVG4LjIqdhq963DXaXneNY7oDwa25Up682AA==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.2.3.tgz", + "integrity": "sha512-HmvbB4GMgh8AUlIDIo/OuFENLCGRXxMvtOueK+m8+DcfqBvG+mkii0Mi9ovo0TnMM62cy3oBYG7PHdjIQNLSLA==", "requires": { - "@firebase/analytics": "0.8.0", - "@firebase/analytics-types": "0.7.0", - "@firebase/component": "0.5.17", - "@firebase/util": "1.6.3", + "@firebase/analytics": "0.9.3", + "@firebase/analytics-types": "0.8.0", + "@firebase/component": "0.6.3", + "@firebase/util": "1.9.2", "tslib": "^2.1.0" + }, + "dependencies": { + "@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "requires": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "requires": { + "tslib": "^2.1.0" + } + } } }, "@firebase/analytics-types": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.7.0.tgz", - "integrity": "sha512-DNE2Waiwy5+zZnCfintkDtBfaW6MjIG883474v6Z0K1XZIvl76cLND4iv0YUb48leyF+PJK1KO2XrgHb/KpmhQ==" + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.8.0.tgz", + "integrity": "sha512-iRP+QKI2+oz3UAh4nPEq14CsEjrjD6a5+fuypjScisAh9kXKFvdJOZJDwk7kikLvWVLGEs9+kIUS4LPQV7VZVw==" }, "@firebase/app": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.7.31.tgz", - "integrity": "sha512-pqCkY2wC5pRBVH1oYliD9E0aSW6qisuMy7meaCtGzwaVcE8AFMhW9xhxHuBMpX1291+2iimUZWnCxSL9DaUUGA==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.9.3.tgz", + "integrity": "sha512-G79JUceVDaHRZ4WkA11GyVldVXhdyRJRwWVQFFvAAVfQJLvy2TA6lQjeUn28F6FmeUWxDGwPC30bxCRWq7Op8Q==", "requires": { - "@firebase/component": "0.5.17", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.6.3", + "@firebase/component": "0.6.3", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.2", "idb": "7.0.1", "tslib": "^2.1.0" + }, + "dependencies": { + "@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "requires": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "@firebase/logger": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.0.tgz", + "integrity": "sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==", + "requires": { + "tslib": "^2.1.0" + } + }, + "@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "requires": { + "tslib": "^2.1.0" + } + } } }, "@firebase/app-check": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.5.12.tgz", - "integrity": "sha512-l+MmvupSGT/F+I5ei7XjhEfpoL4hLVJr0vUwcG5NEf2hAkQnySli9fnbl9fZu1BJaQ2kthrMmtg1gcbcM9BUCQ==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.6.3.tgz", + "integrity": "sha512-T9f9ceFLs7x4D2T6whu5a6j7B3qPuYHiZHZxW6DkMh/FoMmRA4/q/HVyu01i9+LyJJx2Xdo6eCcj6ofs9YZjqA==", "requires": { - "@firebase/component": "0.5.17", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.6.3", + "@firebase/component": "0.6.3", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.2", "tslib": "^2.1.0" + }, + "dependencies": { + "@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "requires": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "@firebase/logger": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.0.tgz", + "integrity": "sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==", + "requires": { + "tslib": "^2.1.0" + } + }, + "@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "requires": { + "tslib": "^2.1.0" + } + } } }, "@firebase/app-check-compat": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.2.12.tgz", - "integrity": "sha512-GFppNLlUyMN9Iq31ME/+GkjRVKlc+MeanzUKQ9UaR73ZsYH3oX3Ja+xjoYgixaVJDDG+ofBYR7ZXTkkQdSR/pw==", - "requires": { - "@firebase/app-check": "0.5.12", - "@firebase/app-check-types": "0.4.0", - "@firebase/component": "0.5.17", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.6.3", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.3.3.tgz", + "integrity": "sha512-25AQ4W7WUL8OWas40GsABuNU622Dm1ojbfeZ03uKtLj5Af7FerJ25u7zkgm+11pc6rpr5v8E5oxEG9vmNRndEA==", + "requires": { + "@firebase/app-check": "0.6.3", + "@firebase/app-check-types": "0.5.0", + "@firebase/component": "0.6.3", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.2", "tslib": "^2.1.0" + }, + "dependencies": { + "@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "requires": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "@firebase/logger": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.0.tgz", + "integrity": "sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==", + "requires": { + "tslib": "^2.1.0" + } + }, + "@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "requires": { + "tslib": "^2.1.0" + } + } } }, "@firebase/app-check-interop-types": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.1.0.tgz", - "integrity": "sha512-uZfn9s4uuRsaX5Lwx+gFP3B6YsyOKUE+Rqa6z9ojT4VSRAsZFko9FRn6OxQUA1z5t5d08fY4pf+/+Dkd5wbdbA==" + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.2.0.tgz", + "integrity": "sha512-+3PQIeX6/eiVK+x/yg8r6xTNR97fN7MahFDm+jiQmDjcyvSefoGuTTNQuuMScGyx3vYUBeZn+Cp9kC0yY/9uxQ==" }, "@firebase/app-check-types": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@firebase/app-check-types/-/app-check-types-0.4.0.tgz", - "integrity": "sha512-SsWafqMABIOu7zLgWbmwvHGOeQQVQlwm42kwwubsmfLmL4Sf5uGpBfDhQ0CAkpi7bkJ/NwNFKafNDL9prRNP0Q==" + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/app-check-types/-/app-check-types-0.5.0.tgz", + "integrity": "sha512-uwSUj32Mlubybw7tedRzR24RP8M8JUVR3NPiMk3/Z4bCmgEKTlQBwMXrehDAZ2wF+TsBq0SN1c6ema71U/JPyQ==" }, "@firebase/app-compat": { - "version": "0.1.32", - "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.1.32.tgz", - "integrity": "sha512-dChnJsnHxih0MYQxCWBPAruqK2M4ba/t+DvKu8IcRpd4FkcUQ8FO19Z963nCdXyu2T6cxPcwCopKWaWlymBVVA==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.2.3.tgz", + "integrity": "sha512-sX6rD1KFX6K2CuCnQvc9jZLOgAFZ+sv2jKKahIl4SbTM561D682B8n4Jtx/SgDrvcTVTdb05g4NhZOws9hxYxA==", "requires": { - "@firebase/app": "0.7.31", - "@firebase/component": "0.5.17", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.6.3", + "@firebase/app": "0.9.3", + "@firebase/component": "0.6.3", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.2", "tslib": "^2.1.0" + }, + "dependencies": { + "@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "requires": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "@firebase/logger": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.0.tgz", + "integrity": "sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==", + "requires": { + "tslib": "^2.1.0" + } + }, + "@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "requires": { + "tslib": "^2.1.0" + } + } } }, "@firebase/app-types": { @@ -21688,30 +23871,74 @@ "integrity": "sha512-6fbHQwDv2jp/v6bXhBw2eSRbNBpxHcd1NBF864UksSMVIqIyri9qpJB1Mn6sGZE+bnDsSQBC5j2TbMxYsJQkQg==" }, "@firebase/auth": { - "version": "0.20.5", - "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.20.5.tgz", - "integrity": "sha512-SbKj7PCAuL0lXEToUOoprc1im2Lr/bzOePXyPC7WWqVgdVBt0qovbfejlzKYwJLHUAPg9UW1y3XYe3IlbXr77w==", + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.21.3.tgz", + "integrity": "sha512-HPbcwgArLBVTowFcn4qaQr6LCx7BidI9yrQ5MRbQNv4PsgK/3UGpzCYaNPPbvgr9fe+0jNdJO+uC0+dk4xIzCQ==", "requires": { - "@firebase/component": "0.5.17", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.6.3", + "@firebase/component": "0.6.3", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.2", "node-fetch": "2.6.7", - "selenium-webdriver": "4.1.2", "tslib": "^2.1.0" + }, + "dependencies": { + "@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "requires": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "@firebase/logger": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.0.tgz", + "integrity": "sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==", + "requires": { + "tslib": "^2.1.0" + } + }, + "@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "requires": { + "tslib": "^2.1.0" + } + } } }, "@firebase/auth-compat": { - "version": "0.2.18", - "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.2.18.tgz", - "integrity": "sha512-Fw2PJS0G/tGrfyEBcYJQ42sfy5+sANrK5xd7tuzgV7zLFW5rYkHUIZngXjuOBwLOcfO2ixa/FavfeJle3oJ38Q==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.3.3.tgz", + "integrity": "sha512-9asUuGtkzUVELH3LYXdiom1nVVV9bqEPqzHohanoofHL/oVTNcHZ4AQ5CXjNATfb6c1WH32U+nEuPiYg26UUIw==", "requires": { - "@firebase/auth": "0.20.5", - "@firebase/auth-types": "0.11.0", - "@firebase/component": "0.5.17", - "@firebase/util": "1.6.3", + "@firebase/auth": "0.21.3", + "@firebase/auth-types": "0.12.0", + "@firebase/component": "0.6.3", + "@firebase/util": "1.9.2", "node-fetch": "2.6.7", - "selenium-webdriver": "4.1.2", "tslib": "^2.1.0" + }, + "dependencies": { + "@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "requires": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "requires": { + "tslib": "^2.1.0" + } + } } }, "@firebase/auth-interop-types": { @@ -21721,9 +23948,9 @@ "requires": {} }, "@firebase/auth-types": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.11.0.tgz", - "integrity": "sha512-q7Bt6cx+ySj9elQHTsKulwk3+qDezhzRBFC9zlQ1BjgMueUOnGMcvqmU0zuKlQ4RhLSH7MNAdBV2znVaoN3Vxw==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.12.0.tgz", + "integrity": "sha512-pPwaZt+SPOshK8xNoiQlK5XIrS97kFYc3Rc7xmy373QsOJ9MmqXxLaYssP5Kcds4wd2qK//amx/c+A8O2fVeZA==", "requires": {} }, "@firebase/component": { @@ -21771,96 +23998,223 @@ } }, "@firebase/firestore": { - "version": "3.4.14", - "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-3.4.14.tgz", - "integrity": "sha512-F4Pqd5OUBtJaAWWC39C0vrMLIdZtx7jsO7sARFHSiOZY/8bikfH9YovIRkpxk7OSs3HT/SgVdK0B1vISGNSnJA==", - "requires": { - "@firebase/component": "0.5.17", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.6.3", - "@firebase/webchannel-wrapper": "0.6.2", - "@grpc/grpc-js": "^1.3.2", + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-3.8.3.tgz", + "integrity": "sha512-4xR3Mqj95bxHg3hZnz0O+LQrHkjq+siT2y+B9da6u68qJ8bzzT42JaFgd1vifhbBpVbBzpFaS2RuCq2E+kGv9g==", + "requires": { + "@firebase/component": "0.6.3", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.2", + "@firebase/webchannel-wrapper": "0.9.0", + "@grpc/grpc-js": "~1.7.0", "@grpc/proto-loader": "^0.6.13", "node-fetch": "2.6.7", "tslib": "^2.1.0" + }, + "dependencies": { + "@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "requires": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "@firebase/logger": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.0.tgz", + "integrity": "sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==", + "requires": { + "tslib": "^2.1.0" + } + }, + "@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "requires": { + "tslib": "^2.1.0" + } + } } }, "@firebase/firestore-compat": { - "version": "0.1.23", - "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.1.23.tgz", - "integrity": "sha512-QfcuyMAavp//fQnjSfCEpnbWi7spIdKaXys1kOLu7395fLr+U6ykmto1HUMCSz8Yus9cEr/03Ujdi2SUl2GUAA==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.3.3.tgz", + "integrity": "sha512-fMTsSC0s2cF5w2+JoB0dWD/o4kXtLrUCPGnZPuz4S0bqTN2t0vHr3gdAsQLtnadgwB78ACtinYmf4Udwx7TzDg==", "requires": { - "@firebase/component": "0.5.17", - "@firebase/firestore": "3.4.14", - "@firebase/firestore-types": "2.5.0", - "@firebase/util": "1.6.3", + "@firebase/component": "0.6.3", + "@firebase/firestore": "3.8.3", + "@firebase/firestore-types": "2.5.1", + "@firebase/util": "1.9.2", "tslib": "^2.1.0" + }, + "dependencies": { + "@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "requires": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "requires": { + "tslib": "^2.1.0" + } + } } }, "@firebase/firestore-types": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-2.5.0.tgz", - "integrity": "sha512-I6c2m1zUhZ5SH0cWPmINabDyH5w0PPFHk2UHsjBpKdZllzJZ2TwTkXbDtpHUZNmnc/zAa0WNMNMvcvbb/xJLKA==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-2.5.1.tgz", + "integrity": "sha512-xG0CA6EMfYo8YeUxC8FeDzf6W3FX1cLlcAGBYV6Cku12sZRI81oWcu61RSKM66K6kUENP+78Qm8mvroBcm1whw==", "requires": {} }, "@firebase/functions": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.8.4.tgz", - "integrity": "sha512-o1bB0xMyQKe+b246zGnjwHj4R6BH4mU2ZrSaa/3QvTpahUQ3hqYfkZPLOXCU7+vEFxHb3Hd4UUjkFhxoAcPqLA==", - "requires": { - "@firebase/app-check-interop-types": "0.1.0", - "@firebase/auth-interop-types": "0.1.6", - "@firebase/component": "0.5.17", - "@firebase/messaging-interop-types": "0.1.0", - "@firebase/util": "1.6.3", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.9.3.tgz", + "integrity": "sha512-tPJgYY2ROQSYuzvgxZRoHeDj+Ic07/bWHwaftgTriawtupmFOkt5iikuhJSJUhaOpFh9TB335OvCXJw1N+BIlQ==", + "requires": { + "@firebase/app-check-interop-types": "0.2.0", + "@firebase/auth-interop-types": "0.2.1", + "@firebase/component": "0.6.3", + "@firebase/messaging-interop-types": "0.2.0", + "@firebase/util": "1.9.2", "node-fetch": "2.6.7", "tslib": "^2.1.0" + }, + "dependencies": { + "@firebase/auth-interop-types": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.2.1.tgz", + "integrity": "sha512-VOaGzKp65MY6P5FI84TfYKBXEPi6LmOCSMMzys6o2BN2LOsqy7pCuZCup7NYnfbk5OkkQKzvIfHOzTm0UDpkyg==" + }, + "@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "requires": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "requires": { + "tslib": "^2.1.0" + } + } } }, "@firebase/functions-compat": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.2.4.tgz", - "integrity": "sha512-Crfn6il1yXGuXkjSd8nKrqR4XxPvuP19g64bXpM6Ix67qOkQg676kyOuww0FF17xN0NSXHfG8Pyf+CUrx8wJ5g==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.3.3.tgz", + "integrity": "sha512-UIAJ2gzNq0p/61cXqkpi9DnlQt0hdlGqgmL5an7KuJth2Iv5uGpKg/+OapAZxPuiUNZgTEyZDB7kNBHvnxWq5w==", "requires": { - "@firebase/component": "0.5.17", - "@firebase/functions": "0.8.4", - "@firebase/functions-types": "0.5.0", - "@firebase/util": "1.6.3", + "@firebase/component": "0.6.3", + "@firebase/functions": "0.9.3", + "@firebase/functions-types": "0.6.0", + "@firebase/util": "1.9.2", "tslib": "^2.1.0" + }, + "dependencies": { + "@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "requires": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "requires": { + "tslib": "^2.1.0" + } + } } }, "@firebase/functions-types": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.5.0.tgz", - "integrity": "sha512-qza0M5EwX+Ocrl1cYI14zoipUX4gI/Shwqv0C1nB864INAD42Dgv4v94BCyxGHBg2kzlWy8PNafdP7zPO8aJQA==" + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.6.0.tgz", + "integrity": "sha512-hfEw5VJtgWXIRf92ImLkgENqpL6IWpYaXVYiRkFY1jJ9+6tIhWM7IzzwbevwIIud/jaxKVdRzD7QBWfPmkwCYw==" }, "@firebase/installations": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.5.12.tgz", - "integrity": "sha512-Zq43fCE0PB5tGJ3ojzx5RNQzKdej1188qgAk22rwjuhP7npaG/PlJqDG1/V0ZjTLRePZ1xGrfXSPlA17c/vtNw==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.6.3.tgz", + "integrity": "sha512-20JFWm+tweNoRjRbz8/Y4I7O5pUJGZsFKCkLl1qNxfNYECSfrZUuozIDJDZC/MeVn5+kB9CwjThDlgQEPrfLdg==", "requires": { - "@firebase/component": "0.5.17", - "@firebase/util": "1.6.3", + "@firebase/component": "0.6.3", + "@firebase/util": "1.9.2", "idb": "7.0.1", "tslib": "^2.1.0" + }, + "dependencies": { + "@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "requires": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "requires": { + "tslib": "^2.1.0" + } + } } }, "@firebase/installations-compat": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/@firebase/installations-compat/-/installations-compat-0.1.12.tgz", - "integrity": "sha512-BIhFpWIn/GkuOa+jnXkp3SDJT2RLYJF6MWpinHIBKFJs7MfrgYZ3zQ1AlhobDEql+bkD1dK4dB5sNcET2T+EyA==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@firebase/installations-compat/-/installations-compat-0.2.3.tgz", + "integrity": "sha512-K9rKM/ym06lkpaKz7bMLxzHK/HEk65XfLJBV+dJkIuWeO0EqqC9VFGrpWAo0QmgC4BqbU58T6VBbzoJjb0gaFw==", "requires": { - "@firebase/component": "0.5.17", - "@firebase/installations": "0.5.12", - "@firebase/installations-types": "0.4.0", - "@firebase/util": "1.6.3", + "@firebase/component": "0.6.3", + "@firebase/installations": "0.6.3", + "@firebase/installations-types": "0.5.0", + "@firebase/util": "1.9.2", "tslib": "^2.1.0" + }, + "dependencies": { + "@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "requires": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "requires": { + "tslib": "^2.1.0" + } + } } }, "@firebase/installations-types": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.4.0.tgz", - "integrity": "sha512-nXxWKQDvBGctuvsizbUEJKfxXU9WAaDhon+j0jpjIfOJkvkj3YHqlLB/HeYjpUn85Pb22BjplpTnDn4Gm9pc3A==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.5.0.tgz", + "integrity": "sha512-9DP+RGfzoI2jH7gY4SlzqvZ+hr7gYzPODrbzVD82Y12kScZ6ZpRg/i3j6rleto8vTFC8n6Len4560FnV1w2IRg==", "requires": {} }, "@firebase/logger": { @@ -21872,121 +24226,305 @@ } }, "@firebase/messaging": { - "version": "0.9.16", - "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.9.16.tgz", - "integrity": "sha512-Yl9gGrAvJF6C1gg3+Cr2HxlL6APsDEkrorkFafmSP1l+rg1epZKoOAcKJbSF02Vtb50wfb9FqGGy8tzodgETxg==", - "requires": { - "@firebase/component": "0.5.17", - "@firebase/installations": "0.5.12", - "@firebase/messaging-interop-types": "0.1.0", - "@firebase/util": "1.6.3", + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.12.3.tgz", + "integrity": "sha512-a3ZKcGDiV2sKmQDB56PpgL1yjFxXCtff2+v1grnAZZ4GnfNQ74t2EHCbmgY7xRX7ThzMqug54oxhuk4ur0MIoA==", + "requires": { + "@firebase/component": "0.6.3", + "@firebase/installations": "0.6.3", + "@firebase/messaging-interop-types": "0.2.0", + "@firebase/util": "1.9.2", "idb": "7.0.1", "tslib": "^2.1.0" + }, + "dependencies": { + "@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "requires": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "requires": { + "tslib": "^2.1.0" + } + } } }, "@firebase/messaging-compat": { - "version": "0.1.16", - "resolved": "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.1.16.tgz", - "integrity": "sha512-uG7rWcXJzU8vvlEBFpwG1ndw/GURrrmKcwsHopEWbsPGjMRaVWa7XrdKbvIR7IZohqPzcC/V9L8EeqF4Q4lz8w==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.2.3.tgz", + "integrity": "sha512-MmuuohXV2YRzIoJmDngI5qqO/cF2q7SdAaw7k4r61W3ReJy7x4/rtqrIvwNVhM6X/X8NFGBbsYKsCfRHWjFdkg==", "requires": { - "@firebase/component": "0.5.17", - "@firebase/messaging": "0.9.16", - "@firebase/util": "1.6.3", + "@firebase/component": "0.6.3", + "@firebase/messaging": "0.12.3", + "@firebase/util": "1.9.2", "tslib": "^2.1.0" + }, + "dependencies": { + "@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "requires": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "requires": { + "tslib": "^2.1.0" + } + } } }, "@firebase/messaging-interop-types": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@firebase/messaging-interop-types/-/messaging-interop-types-0.1.0.tgz", - "integrity": "sha512-DbvUl/rXAZpQeKBnwz0NYY5OCqr2nFA0Bj28Fmr3NXGqR4PAkfTOHuQlVtLO1Nudo3q0HxAYLa68ZDAcuv2uKQ==" + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@firebase/messaging-interop-types/-/messaging-interop-types-0.2.0.tgz", + "integrity": "sha512-ujA8dcRuVeBixGR9CtegfpU4YmZf3Lt7QYkcj693FFannwNuZgfAYaTmbJ40dtjB81SAu6tbFPL9YLNT15KmOQ==" }, "@firebase/performance": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.5.12.tgz", - "integrity": "sha512-MPVTkOkGrm2SMQgI1FPNBm85y2pPqlPb6VDjIMCWkVpAr6G1IZzUT24yEMySRcIlK/Hh7/Qu1Nu5ASRzRuX6+Q==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.6.3.tgz", + "integrity": "sha512-NQmQN6Ete7i9jz1mzULJZEGvsOmwwdUy6vpqnhUxSFMYPnlBKjX+yypCUUJDDN5zff5+kfwSD1qCyUAaS0xWUA==", "requires": { - "@firebase/component": "0.5.17", - "@firebase/installations": "0.5.12", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.6.3", + "@firebase/component": "0.6.3", + "@firebase/installations": "0.6.3", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.2", "tslib": "^2.1.0" + }, + "dependencies": { + "@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "requires": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "@firebase/logger": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.0.tgz", + "integrity": "sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==", + "requires": { + "tslib": "^2.1.0" + } + }, + "@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "requires": { + "tslib": "^2.1.0" + } + } } }, "@firebase/performance-compat": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.1.12.tgz", - "integrity": "sha512-IBORzUeGY1MGdZnsix9Mu5z4+C3WHIwalu0usxvygL0EZKHztGG8bppYPGH/b5vvg8QyHs9U+Pn1Ot2jZhffQQ==", - "requires": { - "@firebase/component": "0.5.17", - "@firebase/logger": "0.3.3", - "@firebase/performance": "0.5.12", - "@firebase/performance-types": "0.1.0", - "@firebase/util": "1.6.3", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.2.3.tgz", + "integrity": "sha512-I3rqZsIhauXn4iApfj1ttKQdlti/r8OZBG4YK10vxKSdhAzTIDWDKEsdoCXvvKLwplcMv36sM3WPAPGQLqY5MQ==", + "requires": { + "@firebase/component": "0.6.3", + "@firebase/logger": "0.4.0", + "@firebase/performance": "0.6.3", + "@firebase/performance-types": "0.2.0", + "@firebase/util": "1.9.2", "tslib": "^2.1.0" + }, + "dependencies": { + "@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "requires": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "@firebase/logger": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.0.tgz", + "integrity": "sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==", + "requires": { + "tslib": "^2.1.0" + } + }, + "@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "requires": { + "tslib": "^2.1.0" + } + } } }, "@firebase/performance-types": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.1.0.tgz", - "integrity": "sha512-6p1HxrH0mpx+622Ql6fcxFxfkYSBpE3LSuwM7iTtYU2nw91Hj6THC8Bc8z4nboIq7WvgsT/kOTYVVZzCSlXl8w==" + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.2.0.tgz", + "integrity": "sha512-kYrbr8e/CYr1KLrLYZZt2noNnf+pRwDq2KK9Au9jHrBMnb0/C9X9yWSXmZkFt4UIdsQknBq8uBB7fsybZdOBTA==" }, "@firebase/remote-config": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.3.11.tgz", - "integrity": "sha512-qA84dstrvVpO7rWT/sb2CLv1kjHVmz59SRFPKohJJYFBcPOGK4Pe4FWWhKAE9yg1Gnl0qYAGkahOwNawq3vE0g==", - "requires": { - "@firebase/component": "0.5.17", - "@firebase/installations": "0.5.12", - "@firebase/logger": "0.3.3", - "@firebase/util": "1.6.3", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.4.3.tgz", + "integrity": "sha512-Q6d4jBWZoNt6SYq87bjtDGUHFkKwAmGnNjWyRjl14AZqE1ilgd9NZHmutharlYJ3LvxMsid80HdK5SgGEpIPfg==", + "requires": { + "@firebase/component": "0.6.3", + "@firebase/installations": "0.6.3", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.2", "tslib": "^2.1.0" + }, + "dependencies": { + "@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "requires": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "@firebase/logger": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.0.tgz", + "integrity": "sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==", + "requires": { + "tslib": "^2.1.0" + } + }, + "@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "requires": { + "tslib": "^2.1.0" + } + } } }, "@firebase/remote-config-compat": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.1.12.tgz", - "integrity": "sha512-Yz7Gtb2rLa7ykXZX9DnSTId8CXd++jFFLW3foUImrYwJEtWgLJc7gwkRfd1M73IlKGNuQAY+DpUNF0n1dLbecA==", - "requires": { - "@firebase/component": "0.5.17", - "@firebase/logger": "0.3.3", - "@firebase/remote-config": "0.3.11", - "@firebase/remote-config-types": "0.2.0", - "@firebase/util": "1.6.3", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.2.3.tgz", + "integrity": "sha512-w/ZL03YgYaXq03xIRyJ5oPhXZi6iDsY/v0J9Y7I7SqxCYytEnHVrL9nvBqd9R94y5LRAVNPCLokJeeizaUz4VQ==", + "requires": { + "@firebase/component": "0.6.3", + "@firebase/logger": "0.4.0", + "@firebase/remote-config": "0.4.3", + "@firebase/remote-config-types": "0.3.0", + "@firebase/util": "1.9.2", "tslib": "^2.1.0" + }, + "dependencies": { + "@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "requires": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "@firebase/logger": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.0.tgz", + "integrity": "sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==", + "requires": { + "tslib": "^2.1.0" + } + }, + "@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "requires": { + "tslib": "^2.1.0" + } + } } }, "@firebase/remote-config-types": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.2.0.tgz", - "integrity": "sha512-hqK5sCPeZvcHQ1D6VjJZdW6EexLTXNMJfPdTwbD8NrXUw6UjWC4KWhLK/TSlL0QPsQtcKRkaaoP+9QCgKfMFPw==" + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.3.0.tgz", + "integrity": "sha512-RtEH4vdcbXZuZWRZbIRmQVBNsE7VDQpet2qFvq6vwKLBIQRQR5Kh58M4ok3A3US8Sr3rubYnaGqZSurCwI8uMA==" }, "@firebase/storage": { - "version": "0.9.9", - "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.9.9.tgz", - "integrity": "sha512-Zch7srLT2SIh9y2nCVv/4Kne0HULn7OPkmreY70BJTUJ+g5WLRjggBq6x9fV5ls9V38iqMWfn4prxzX8yIc08A==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.11.1.tgz", + "integrity": "sha512-Xv8EG2j52ugF2xayBz26U9J0VBXHXPMVxSN+ph3R3BSoHxvMLaPu+qUYKHavSt+zbcgPH2GyBhrCdJK6SaDFPA==", "requires": { - "@firebase/component": "0.5.17", - "@firebase/util": "1.6.3", + "@firebase/component": "0.6.3", + "@firebase/util": "1.9.2", "node-fetch": "2.6.7", "tslib": "^2.1.0" + }, + "dependencies": { + "@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "requires": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "requires": { + "tslib": "^2.1.0" + } + } } }, "@firebase/storage-compat": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.1.17.tgz", - "integrity": "sha512-nOYmnpI0gwoz5nROseMi9WbmHGf+xumfsOvdPyMZAjy0VqbDnpKIwmTUZQBdR+bLuB5oIkHQsvw9nbb1SH+PzQ==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.3.1.tgz", + "integrity": "sha512-6HaTvWsT5Yy3j4UpCZpMcFUYEkJ2XYWukdyTl02u6VjSBRLvkhOXPzEfMvgVWqhnF/rYVfPdjrZ904wk5OxtmQ==", "requires": { - "@firebase/component": "0.5.17", - "@firebase/storage": "0.9.9", - "@firebase/storage-types": "0.6.0", - "@firebase/util": "1.6.3", + "@firebase/component": "0.6.3", + "@firebase/storage": "0.11.1", + "@firebase/storage-types": "0.8.0", + "@firebase/util": "1.9.2", "tslib": "^2.1.0" + }, + "dependencies": { + "@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "requires": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "requires": { + "tslib": "^2.1.0" + } + } } }, "@firebase/storage-types": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.6.0.tgz", - "integrity": "sha512-1LpWhcCb1ftpkP/akhzjzeFxgVefs6eMD2QeKiJJUGH1qOiows2w5o0sKCUSQrvrRQS1lz3SFGvNR1Ck/gqxeA==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.8.0.tgz", + "integrity": "sha512-isRHcGrTs9kITJC0AVehHfpraWFui39MPaU7Eo8QfWlqW7YPymBmRgjDrlOgFdURh6Cdeg07zmkLP5tzTKRSpg==", "requires": {} }, "@firebase/util": { @@ -21998,9 +24536,38 @@ } }, "@firebase/webchannel-wrapper": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.6.2.tgz", - "integrity": "sha512-zThUKcqIU6utWzM93uEvhlh8qj8A5LMPFJPvk/ODb+8GSSif19xM2Lw1M2ijyBy8+6skSkQBbavPzOU5Oh/8tQ==" + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.9.0.tgz", + "integrity": "sha512-BpiZLBWdLFw+qFel9p3Zs1jD6QmH7Ii4aTDu6+vx8ShdidChZUXqDhYJly4ZjSgQh54miXbBgBrk0S+jTIh/Qg==" + }, + "@fortawesome/fontawesome-common-types": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.2.1.tgz", + "integrity": "sha512-Sz07mnQrTekFWLz5BMjOzHl/+NooTdW8F8kDQxjWwbpOJcnoSg4vUDng8d/WR1wOxM0O+CY9Zw0nR054riNYtQ==" + }, + "@fortawesome/fontawesome-svg-core": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.2.1.tgz", + "integrity": "sha512-HELwwbCz6C1XEcjzyT1Jugmz2NNklMrSPjZOWMlc+ZsHIVk+XOvOXLGGQtFBwSyqfJDNgRq4xBCwWOaZ/d9DEA==", + "requires": { + "@fortawesome/fontawesome-common-types": "6.2.1" + } + }, + "@fortawesome/free-solid-svg-icons": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.2.1.tgz", + "integrity": "sha512-oKuqrP5jbfEPJWTij4sM+/RvgX+RMFwx3QZCZcK9PrBDgxC35zuc7AOFsyMjMd/PIFPeB2JxyqDr5zs/DZFPPw==", + "requires": { + "@fortawesome/fontawesome-common-types": "6.2.1" + } + }, + "@fortawesome/react-fontawesome": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.0.tgz", + "integrity": "sha512-uHg75Rb/XORTtVt7OS9WoK8uM276Ufi7gCzshVWkUJbHhh3svsUUeqXerrM96Wm7fRiDzfKRwSoahhMIkGAYHw==", + "requires": { + "prop-types": "^15.8.1" + } }, "@gar/promisify": { "version": "1.1.3", @@ -22072,22 +24639,45 @@ "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", "optional": true + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "optional": true } } }, + "@googlemaps/js-api-loader": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@googlemaps/js-api-loader/-/js-api-loader-1.15.1.tgz", + "integrity": "sha512-AsnEgNsB7S/VdrHGEQUaUM2e5tmjFGKBAfzR/AqO8O7TPq/jQGvoRw5liPBw4EMF38RDsHmKDV89q/X+qiUREQ==", + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "@googlemaps/markerclusterer": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@googlemaps/markerclusterer/-/markerclusterer-2.0.13.tgz", + "integrity": "sha512-302GjQ9gsHOK/ef6hif+rJDv+AB3THst02iDCbXH2PS9GFwb/5yuytaLpuzJiqGNG+k2zvTAWTsGY/fQN5DZ7w==", + "requires": { + "fast-deep-equal": "^3.1.3", + "supercluster": "^7.1.3" + } + }, "@grpc/grpc-js": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.7.1.tgz", - "integrity": "sha512-GVtMU4oh/TeKkWGzXUEsyZtyvSUIT1z49RtGH1UnEGeL+sLuxKl8QH3KZTlSB329R1sWJmesm5hQ5CxXdYH9dg==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.7.3.tgz", + "integrity": "sha512-H9l79u4kJ2PVSxUNA08HMYAnUBLj9v6KjYQ7SQ71hOZcEXhShE/y5iQCesP8+6/Ik/7i2O0a10bPquIcYfufog==", "requires": { "@grpc/proto-loader": "^0.7.0", "@types/node": ">=12.12.47" }, "dependencies": { "@grpc/proto-loader": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.3.tgz", - "integrity": "sha512-5dAvoZwna2Py3Ef96Ux9jIkp3iZ62TUsV00p3wVBPNX5K178UbNi8Q7gQVqwXT1Yq9RejIGG9G2IPEo93T6RcA==", + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.4.tgz", + "integrity": "sha512-MnWjkGwqQ3W8fx94/c1CwqLsNmHHv2t0CFn+9++6+cDphC1lolpg9M2OU0iebIjK//pBNX9e94ho+gjx6vz39w==", "requires": { "@types/long": "^4.0.1", "lodash.camelcase": "^4.3.0", @@ -22097,9 +24687,9 @@ } }, "protobufjs": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.1.2.tgz", - "integrity": "sha512-4ZPTPkXCdel3+L81yw3dG6+Kq3umdWKh7Dc7GW/CpNk4SX3hK58iPCWeCyhVTDrbkNeKrYNZ7EojM5WDaEWTLQ==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.1.tgz", + "integrity": "sha512-L3pCItypTnPK27+CS8nuhZMYtsY+i8dqdq2vZsYHlG17CnWp1DWPQ/sos0vOKrj1fHEAzo3GBqSHLaeZyKUCDA==", "requires": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -22116,9 +24706,9 @@ }, "dependencies": { "long": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.0.tgz", - "integrity": "sha512-9RTUNjK60eJbx3uz+TEGF7fUr29ZDxR5QzXcyDpeSfeH28S9ycINflOgOlppit5U+4kNTe83KQnMEerw7GmE8w==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.1.tgz", + "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==" } } } @@ -22576,6 +25166,222 @@ "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, + "@mapbox/geojson-rewind": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz", + "integrity": "sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA==", + "requires": { + "get-stream": "^6.0.1", + "minimist": "^1.2.6" + } + }, + "@mapbox/jsonlint-lines-primitives": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz", + "integrity": "sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==" + }, + "@mapbox/mapbox-gl-supported": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-2.0.1.tgz", + "integrity": "sha512-HP6XvfNIzfoMVfyGjBckjiAOQK9WfX0ywdLubuPMPv+Vqf5fj0uCbgBQYpiqcWZT6cbyyRnTSXDheT1ugvF6UQ==" + }, + "@mapbox/point-geometry": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", + "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==" + }, + "@mapbox/tiny-sdf": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.0.5.tgz", + "integrity": "sha512-OhXt2lS//WpLdkqrzo/KwB7SRD8AiNTFFzuo9n14IBupzIMa67yGItcK7I2W9D8Ghpa4T04Sw9FWsKCJG50Bxw==" + }, + "@mapbox/unitbezier": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz", + "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==" + }, + "@mapbox/vector-tile": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", + "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", + "requires": { + "@mapbox/point-geometry": "~0.1.0" + } + }, + "@mapbox/whoots-js": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz", + "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==" + }, + "@mui/base": { + "version": "5.0.0-alpha.116", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.116.tgz", + "integrity": "sha512-VwhifWdrfHc4/ZdqRZ4Gf+7P39sovNN24By1YVZdvJ9fvp0Sr8sNftGUCjYXXz+xCXVBQDXvhfxMwZrj2MvJvA==", + "requires": { + "@babel/runtime": "^7.20.7", + "@emotion/is-prop-valid": "^1.2.0", + "@mui/types": "^7.2.3", + "@mui/utils": "^5.11.7", + "@popperjs/core": "^2.11.6", + "clsx": "^1.2.1", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "dependencies": { + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + } + } + }, + "@mui/core-downloads-tracker": { + "version": "5.11.7", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.11.7.tgz", + "integrity": "sha512-lZgX7XQTk0zVcpwEa80r+T4y09dosnUxWvFPSikU/2Hh5wnyNOek8WfJwGCNsaRiXJHMi5eHY+z8oku4u5lgNw==" + }, + "@mui/icons-material": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.11.0.tgz", + "integrity": "sha512-I2LaOKqO8a0xcLGtIozC9xoXjZAto5G5gh0FYUMAlbsIHNHIjn4Xrw9rvjY20vZonyiGrZNMAlAXYkY6JvhF6A==", + "requires": { + "@babel/runtime": "^7.20.6" + } + }, + "@mui/material": { + "version": "5.11.7", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.11.7.tgz", + "integrity": "sha512-wDv7Pc6kMe9jeWkmCLt4JChd1lPc2u23JQHpB35L2VwQowpNFoDfIwqi0sYCnZTMKlRc7lza8LqwSwHl2G52Rw==", + "requires": { + "@babel/runtime": "^7.20.7", + "@mui/base": "5.0.0-alpha.116", + "@mui/core-downloads-tracker": "^5.11.7", + "@mui/system": "^5.11.7", + "@mui/types": "^7.2.3", + "@mui/utils": "^5.11.7", + "@types/react-transition-group": "^4.4.5", + "clsx": "^1.2.1", + "csstype": "^3.1.1", + "prop-types": "^15.8.1", + "react-is": "^18.2.0", + "react-transition-group": "^4.4.5" + }, + "dependencies": { + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + } + } + }, + "@mui/private-theming": { + "version": "5.11.7", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.11.7.tgz", + "integrity": "sha512-XzRTSZdc8bhuUdjablTNv3kFkZ/XIMlKkOqqJCU0G8W3tWGXpau2DXkafPd1ddjPhF9zF3qLKNGgKCChYItjgA==", + "requires": { + "@babel/runtime": "^7.20.7", + "@mui/utils": "^5.11.7", + "prop-types": "^15.8.1" + } + }, + "@mui/styled-engine": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.11.0.tgz", + "integrity": "sha512-AF06K60Zc58qf0f7X+Y/QjaHaZq16znliLnGc9iVrV/+s8Ln/FCoeNuFvhlCbZZQ5WQcJvcy59zp0nXrklGGPQ==", + "requires": { + "@babel/runtime": "^7.20.6", + "@emotion/cache": "^11.10.5", + "csstype": "^3.1.1", + "prop-types": "^15.8.1" + } + }, + "@mui/system": { + "version": "5.11.7", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.11.7.tgz", + "integrity": "sha512-uGB6hBxGlAdlmbLdTtUZYNPXkgQGGnKxHdkRATqsu7UlCxNsc/yS5NCEWy/3c4pnelD1LDLD39WrntP9mwhfkQ==", + "requires": { + "@babel/runtime": "^7.20.7", + "@mui/private-theming": "^5.11.7", + "@mui/styled-engine": "^5.11.0", + "@mui/types": "^7.2.3", + "@mui/utils": "^5.11.7", + "clsx": "^1.2.1", + "csstype": "^3.1.1", + "prop-types": "^15.8.1" + } + }, + "@mui/types": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.3.tgz", + "integrity": "sha512-tZ+CQggbe9Ol7e/Fs5RcKwg/woU+o8DCtOnccX6KmbBc7YrfqMYEYuaIcXHuhpT880QwNkZZ3wQwvtlDFA2yOw==", + "requires": {} + }, + "@mui/utils": { + "version": "5.11.7", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.11.7.tgz", + "integrity": "sha512-8uyNDeVHZA804Ego20Erv8TpxlbqTe/EbhTI2H1UYr4/RiIbBprat8W4Qqr2UQIsC/b3DLz+0RQ6R/E5BxEcLA==", + "requires": { + "@babel/runtime": "^7.20.7", + "@types/prop-types": "^15.7.5", + "@types/react-is": "^16.7.1 || ^17.0.0", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "dependencies": { + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + } + } + }, + "@mui/x-date-pickers": { + "version": "5.0.17", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-5.0.17.tgz", + "integrity": "sha512-Rxm2OqSLGXijdwCpt8dzbuDIWNids7bUsuxB/ci66MB4ULfTswhFXZTcVvEm/SKZvtkUmDPQmMemdNg78440iA==", + "requires": { + "@babel/runtime": "^7.18.9", + "@date-io/core": "^2.15.0", + "@date-io/date-fns": "^2.15.0", + "@date-io/dayjs": "^2.15.0", + "@date-io/luxon": "^2.15.0", + "@date-io/moment": "^2.15.0", + "@mui/utils": "^5.10.3", + "@types/react-transition-group": "^4.4.5", + "clsx": "^1.2.1", + "prop-types": "^15.7.2", + "react-transition-group": "^4.4.5", + "rifm": "^0.12.1" + } + }, + "@mui/x-date-pickers-pro": { + "version": "5.0.17", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers-pro/-/x-date-pickers-pro-5.0.17.tgz", + "integrity": "sha512-x40IOeSxmpW43HtmJpf5WuiRvW2lnjbNuFJOf/Sco8yyd+lvx1bON9ke8h8u5jKVDTJPXDh44NNZ7nIHUXM49A==", + "requires": { + "@babel/runtime": "^7.18.9", + "@date-io/date-fns": "^2.15.0", + "@date-io/dayjs": "^2.15.0", + "@date-io/luxon": "^2.15.0", + "@date-io/moment": "^2.15.0", + "@mui/utils": "^5.10.3", + "@mui/x-date-pickers": "5.0.17", + "@mui/x-license-pro": "5.17.12", + "clsx": "^1.2.1", + "prop-types": "^15.7.2", + "react-transition-group": "^4.4.5", + "rifm": "^0.12.1" + } + }, + "@mui/x-license-pro": { + "version": "5.17.12", + "resolved": "https://registry.npmjs.org/@mui/x-license-pro/-/x-license-pro-5.17.12.tgz", + "integrity": "sha512-UzFaE+9A30kfguCuME0D5zqsItqbHZ3xZwmyrJr8MvZOEoqiJWF4NT4Pvlg2nqaPYt/h81j7sjVFa3KiwT0vbg==", + "requires": { + "@babel/runtime": "^7.18.9", + "@mui/utils": "^5.10.3" + } + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -22713,9 +25519,9 @@ } }, "@popperjs/core": { - "version": "2.11.5", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.5.tgz", - "integrity": "sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==" + "version": "2.11.6", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", + "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==" }, "@protobufjs/aspromise": { "version": "1.1.2", @@ -22772,13 +25578,36 @@ "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, "@react-aria/ssr": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.2.0.tgz", - "integrity": "sha512-wwJFdkl+Q8NU5yJ4NvdAOqx5LM3QtUVoSjuK7Ey8jZ4WS4bB0EqT3Kr3IInBs257HzZ5nXCiKXKE4NGXXuIRWA==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.4.1.tgz", + "integrity": "sha512-NmhoilMDyIfQiOSdQgxpVH2tC2u85Y0mVijtBNbI9kcDYLEiW/r6vKYVKtkyU+C4qobXhGMPfZ70PTc0lysSVA==", + "requires": { + "@swc/helpers": "^0.4.14" + } + }, + "@react-google-maps/api": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/@react-google-maps/api/-/api-2.17.1.tgz", + "integrity": "sha512-XesubSCFfyMtilqljF2kU5zdPru4nks4I4O0HH6H2xOw51wQXs26btJKlRac2/jbJ/gIiGZ/l14q0xaL/6OaBg==", "requires": { - "@babel/runtime": "^7.6.2" + "@googlemaps/js-api-loader": "1.15.1", + "@googlemaps/markerclusterer": "2.0.13", + "@react-google-maps/infobox": "2.16.0", + "@react-google-maps/marker-clusterer": "2.16.1", + "@types/google.maps": "3.50.5", + "invariant": "2.2.4" } }, + "@react-google-maps/infobox": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/@react-google-maps/infobox/-/infobox-2.16.0.tgz", + "integrity": "sha512-ZojiMS25388RcUHQPycUAerSqdHDom+3dHczVcXHdT/i8fka3O8InkHxXwMhvBoM143ips7mv2BPaYOAJ5f4Nw==" + }, + "@react-google-maps/marker-clusterer": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/@react-google-maps/marker-clusterer/-/marker-clusterer-2.16.1.tgz", + "integrity": "sha512-jOuyqzWLeXvQcoAu6TCVWHAuko+sDt0JjawNHBGqUNLywMtTCvYP0L0PiqJZOUCUeRYGdUy0AKxQ+30vAkvwag==" + }, "@reduxjs/toolkit": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.8.3.tgz", @@ -22796,24 +25625,24 @@ "integrity": "sha512-eBV5rvW4dRFOU1eajN7FmYxjAIVz/mRHgUE9En9mBn6m3mulK3WTR5C3iQhL9MZ14rWAq+xOlEaCkDiW0/heOg==" }, "@restart/hooks": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.7.tgz", - "integrity": "sha512-ZbjlEHcG+FQtpDPHd7i4FzNNvJf2enAwZfJbpM8CW7BhmOAbsHpZe3tsHwfQUrBuyrxWqPYp2x5UMnilWcY22A==", + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.8.tgz", + "integrity": "sha512-Ivvp1FZ0Lja80iUTYAhbzy+stxwO7FbPHP95ypCtIh0wyOLiayQywXhVJ2ZYP5S1AjW2GmKHeRU4UglMwTG2sA==", "requires": { "dequal": "^2.0.2" } }, "@restart/ui": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@restart/ui/-/ui-1.3.0.tgz", - "integrity": "sha512-VRb330/6tDaHAHRkqe0GOawuj+hcZM7Zp5piWk/3AVwW18+0sQxGqqFeiH1ZeEMdn7w+D8bZPaY3QoLTmDKcGg==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@restart/ui/-/ui-1.5.3.tgz", + "integrity": "sha512-8Zx3HUMxOeC+ZmN7MwChkolpDQaV55prSgpNoGOw5heKnn32HgzEQ6Y0Rz0YqMBUtEKS0NsvNpsskve+O8qXAQ==", "requires": { - "@babel/runtime": "^7.18.3", - "@popperjs/core": "^2.11.5", - "@react-aria/ssr": "^3.2.0", + "@babel/runtime": "^7.20.7", + "@popperjs/core": "^2.11.6", + "@react-aria/ssr": "^3.4.1", "@restart/hooks": "^0.4.7", "@types/warning": "^3.0.0", - "dequal": "^2.0.2", + "dequal": "^2.0.3", "dom-helpers": "^5.2.0", "uncontrollable": "^7.2.1", "warning": "^4.0.3" @@ -23018,6 +25847,14 @@ "loader-utils": "^2.0.0" } }, + "@swc/helpers": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz", + "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==", + "requires": { + "tslib": "^2.4.0" + } + }, "@szmarczak/http-timer": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", @@ -23089,6 +25926,26 @@ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==" }, + "@trendyol-js/react-carousel": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@trendyol-js/react-carousel/-/react-carousel-3.0.0.tgz", + "integrity": "sha512-3BzdDGBtMsAQgFcddjpD98xqOzfW4pZVhdTXmn7/FOIiGWg+ipomWLp1iN1hFe4fXSGTx7+xFg2pObkJlz3BPg==", + "requires": { + "react": "^16.13.1" + }, + "dependencies": { + "react": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", + "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" + } + } + } + }, "@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", @@ -23225,6 +26082,16 @@ "@types/range-parser": "*" } }, + "@types/geojson": { + "version": "7946.0.10", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz", + "integrity": "sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==" + }, + "@types/google.maps": { + "version": "3.50.5", + "resolved": "https://registry.npmjs.org/@types/google.maps/-/google.maps-3.50.5.tgz", + "integrity": "sha512-RuZf1MJtctGlpW+Gd4a/eGtAufUDjMf+eyN1l+B3fbe2YLScJbg8KEljJfb+6vnSPFAeM1/48geVIEg3vqOkxw==" + }, "@types/graceful-fs": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", @@ -23349,6 +26216,21 @@ "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" }, + "@types/mapbox__point-geometry": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.2.tgz", + "integrity": "sha512-D0lgCq+3VWV85ey1MZVkE8ZveyuvW5VAfuahVTQRpXFQTxw03SuIf1/K4UQ87MMIXVKzpFjXFiFMZzLj2kU+iA==" + }, + "@types/mapbox__vector-tile": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.0.tgz", + "integrity": "sha512-kDwVreQO5V4c8yAxzZVQLE5tyWF+IPToAanloQaSnwfXmIcJ7cyOrv8z4Ft4y7PsLYmhWXmON8MBV8RX0Rgr8g==", + "requires": { + "@types/geojson": "*", + "@types/mapbox__point-geometry": "*", + "@types/pbf": "*" + } + }, "@types/mime": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", @@ -23364,6 +26246,11 @@ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, + "@types/pbf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/pbf/-/pbf-3.0.2.tgz", + "integrity": "sha512-EDrLIPaPXOZqDjrkzxxbX7UlJSeQVgah3i0aA4pOSzmK9zq3BIh7/MZIQxED7slJByvKM4Gc6Hypyu2lJzh3SQ==" + }, "@types/prettier": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz", @@ -23390,9 +26277,9 @@ "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, "@types/react": { - "version": "18.0.15", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.15.tgz", - "integrity": "sha512-iz3BtLuIYH1uWdsv6wXYdhozhqj20oD4/Hk2DNXIn1kFsmp9x8d9QB6FnPhfkbhd2PgEONt9Q1x/ebkwjfFLow==", + "version": "18.0.26", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.26.tgz", + "integrity": "sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==", "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -23400,9 +26287,17 @@ } }, "@types/react-dom": { - "version": "18.0.6", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.6.tgz", - "integrity": "sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==", + "version": "18.0.10", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.10.tgz", + "integrity": "sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg==", + "requires": { + "@types/react": "*" + } + }, + "@types/react-is": { + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-17.0.3.tgz", + "integrity": "sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw==", "requires": { "@types/react": "*" } @@ -23864,6 +26759,11 @@ "regex-parser": "^2.2.11" } }, + "adler-32": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz", + "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==" + }, "agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -24348,6 +27248,11 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==" + }, "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -24459,11 +27364,10 @@ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, - "bootstrap": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.1.3.tgz", - "integrity": "sha512-fcQztozJ8jToQWXxVuEyXWW+dSo8AiXWKwiSSrKWsRB/Qt+Ewwza+JWoLKiTuQLaEPhdNAJ7+Dosc9DOIqNy7Q==", - "requires": {} + "bootstrap-icons": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.10.3.tgz", + "integrity": "sha512-7Qvj0j0idEm/DdX9Q0CpxAnJYqBCFCiUI6qzSPYfERMcokVuV9Mdm/AJiVZI8+Gawe4h/l6zFcOzvV7oXCZArw==" }, "boxen": { "version": "7.0.0", @@ -24701,6 +27605,15 @@ "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==" }, + "cfb": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz", + "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==", + "requires": { + "adler-32": "~1.3.0", + "crc-32": "~1.2.0" + } + }, "chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", @@ -24824,6 +27737,11 @@ "mimic-response": "^1.0.0" } }, + "clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" + }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -24890,6 +27808,11 @@ } } }, + "codepage": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", + "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==" + }, "collect-v8-coverage": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", @@ -25126,6 +28049,11 @@ } } }, + "crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==" + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -25136,6 +28064,11 @@ "which": "^2.0.1" } }, + "crypto-js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", + "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" + }, "crypto-random-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", @@ -25183,6 +28116,14 @@ "postcss-selector-parser": "^6.0.9" } }, + "css-line-break": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz", + "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==", + "requires": { + "utrie": "^1.0.2" + } + }, "css-loader": { "version": "6.7.1", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz", @@ -25274,6 +28215,11 @@ "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==" }, + "csscolorparser": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz", + "integrity": "sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==" + }, "cssdb": { "version": "6.6.3", "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-6.6.3.tgz", @@ -25388,9 +28334,9 @@ } }, "csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" }, "damerau-levenshtein": { "version": "1.0.8", @@ -25432,6 +28378,11 @@ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz", "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==" }, + "dayjs": { + "version": "1.11.7", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz", + "integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==" + }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -25440,6 +28391,11 @@ "ms": "2.1.2" } }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" + }, "decimal.js": { "version": "10.3.1", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", @@ -25596,6 +28552,11 @@ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==" }, + "dijkstrajs": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.2.tgz", + "integrity": "sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg==" + }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -25744,6 +28705,11 @@ "stream-shift": "^1.0.0" } }, + "earcut": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", + "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==" + }, "eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -25790,6 +28756,11 @@ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" }, + "encode-utf8": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", + "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==" + }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -26836,6 +29807,11 @@ "pkg-dir": "^4.1.0" } }, + "find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -26846,36 +29822,108 @@ } }, "firebase": { - "version": "9.9.3", - "resolved": "https://registry.npmjs.org/firebase/-/firebase-9.9.3.tgz", - "integrity": "sha512-lU1FstWqfVZQfz4+TWCZvqJYbwZMyoyP0X/xD/YIfrtXgquOMEDTpoasH4P79N9y3I8iV+6gQHuVmpK+AX2elg==", - "requires": { - "@firebase/analytics": "0.8.0", - "@firebase/analytics-compat": "0.1.13", - "@firebase/app": "0.7.31", - "@firebase/app-check": "0.5.12", - "@firebase/app-check-compat": "0.2.12", - "@firebase/app-compat": "0.1.32", - "@firebase/app-types": "0.7.0", - "@firebase/auth": "0.20.5", - "@firebase/auth-compat": "0.2.18", - "@firebase/database": "0.13.5", - "@firebase/database-compat": "0.2.5", - "@firebase/firestore": "3.4.14", - "@firebase/firestore-compat": "0.1.23", - "@firebase/functions": "0.8.4", - "@firebase/functions-compat": "0.2.4", - "@firebase/installations": "0.5.12", - "@firebase/installations-compat": "0.1.12", - "@firebase/messaging": "0.9.16", - "@firebase/messaging-compat": "0.1.16", - "@firebase/performance": "0.5.12", - "@firebase/performance-compat": "0.1.12", - "@firebase/remote-config": "0.3.11", - "@firebase/remote-config-compat": "0.1.12", - "@firebase/storage": "0.9.9", - "@firebase/storage-compat": "0.1.17", - "@firebase/util": "1.6.3" + "version": "9.17.1", + "resolved": "https://registry.npmjs.org/firebase/-/firebase-9.17.1.tgz", + "integrity": "sha512-MSZaTRaaRLgDFLqoEnoPYK8zkLwQNvYeLZ3YSKdcQxG8hDifNO22ywS1cSA1ZCGHlQeOsDtfDwBejKcANf/RQw==", + "requires": { + "@firebase/analytics": "0.9.3", + "@firebase/analytics-compat": "0.2.3", + "@firebase/app": "0.9.3", + "@firebase/app-check": "0.6.3", + "@firebase/app-check-compat": "0.3.3", + "@firebase/app-compat": "0.2.3", + "@firebase/app-types": "0.9.0", + "@firebase/auth": "0.21.3", + "@firebase/auth-compat": "0.3.3", + "@firebase/database": "0.14.3", + "@firebase/database-compat": "0.3.3", + "@firebase/firestore": "3.8.3", + "@firebase/firestore-compat": "0.3.3", + "@firebase/functions": "0.9.3", + "@firebase/functions-compat": "0.3.3", + "@firebase/installations": "0.6.3", + "@firebase/installations-compat": "0.2.3", + "@firebase/messaging": "0.12.3", + "@firebase/messaging-compat": "0.2.3", + "@firebase/performance": "0.6.3", + "@firebase/performance-compat": "0.2.3", + "@firebase/remote-config": "0.4.3", + "@firebase/remote-config-compat": "0.2.3", + "@firebase/storage": "0.11.1", + "@firebase/storage-compat": "0.3.1", + "@firebase/util": "1.9.2" + }, + "dependencies": { + "@firebase/app-types": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.9.0.tgz", + "integrity": "sha512-AeweANOIo0Mb8GiYm3xhTEBVCmPwTYAu9Hcd2qSkLuga/6+j9b1Jskl5bpiSQWy9eJ/j5pavxj6eYogmnuzm+Q==" + }, + "@firebase/auth-interop-types": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.2.1.tgz", + "integrity": "sha512-VOaGzKp65MY6P5FI84TfYKBXEPi6LmOCSMMzys6o2BN2LOsqy7pCuZCup7NYnfbk5OkkQKzvIfHOzTm0UDpkyg==" + }, + "@firebase/component": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.3.tgz", + "integrity": "sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==", + "requires": { + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "@firebase/database": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.14.3.tgz", + "integrity": "sha512-J76W6N7JiVkLaAtPyjaGRkrsIu9pi6iZikuGGtGjqvV19vkn7oiL4Hbo5uTYCMd4waTUWoL9iI08eX184W+5GQ==", + "requires": { + "@firebase/auth-interop-types": "0.2.1", + "@firebase/component": "0.6.3", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.2", + "faye-websocket": "0.11.4", + "tslib": "^2.1.0" + } + }, + "@firebase/database-compat": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-0.3.3.tgz", + "integrity": "sha512-r+L9jTbvsnb7sD+xz6UKU39DgBWqB2pyjzPNdBeriGC9Ssa2MAZe0bIqjCQg51RRXYc/aa/zK1Q2/4uesZeVgQ==", + "requires": { + "@firebase/component": "0.6.3", + "@firebase/database": "0.14.3", + "@firebase/database-types": "0.10.3", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.2", + "tslib": "^2.1.0" + } + }, + "@firebase/database-types": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.10.3.tgz", + "integrity": "sha512-Hu34CDhHYZsd2eielr0jeaWrTJk8Hz0nd7WsnYDnXtQX4i49ppgPesUzPdXVBdIBLJmT0ZZRvT7qWHknkOT+zg==", + "requires": { + "@firebase/app-types": "0.9.0", + "@firebase/util": "1.9.2" + } + }, + "@firebase/logger": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.0.tgz", + "integrity": "sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==", + "requires": { + "tslib": "^2.1.0" + } + }, + "@firebase/util": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.2.tgz", + "integrity": "sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==", + "requires": { + "tslib": "^2.1.0" + } + } } }, "firebase-admin": { @@ -26893,6 +29941,13 @@ "jwks-rsa": "^2.0.2", "node-forge": "^1.3.1", "uuid": "^8.3.2" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + } } }, "flat-cache": { @@ -27065,6 +30120,11 @@ "resolved": "https://registry.npmjs.org/fp-and-or/-/fp-and-or-0.1.3.tgz", "integrity": "sha512-wJaE62fLaB3jCYvY2ZHjZvmKK2iiLiiehX38rz5QZxtdN8fVPJDeZUiVvJrHStdTc+23LHlyZuSEKgFc0pxi2g==" }, + "frac": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==" + }, "fraction.js": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", @@ -27177,6 +30237,11 @@ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" }, + "geojson-vt": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz", + "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==" + }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -27221,6 +30286,11 @@ "get-intrinsic": "^1.1.1" } }, + "gl-matrix": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", + "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" + }, "glob": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", @@ -27615,6 +30685,14 @@ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" }, + "history": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/history/-/history-5.3.0.tgz", + "integrity": "sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==", + "requires": { + "@babel/runtime": "^7.7.6" + } + }, "hoist-non-react-statics": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", @@ -27729,6 +30807,15 @@ "tapable": "^2.0.0" } }, + "html2canvas": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz", + "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", + "requires": { + "css-line-break": "^2.1.0", + "text-segmentation": "^1.0.3" + } + }, "htmlparser2": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", @@ -27864,6 +30951,11 @@ "harmony-reflect": "^1.4.6" } }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, "ignore": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", @@ -27877,11 +30969,6 @@ "minimatch": "^5.0.1" } }, - "immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" - }, "immer": { "version": "9.0.15", "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.15.tgz", @@ -29579,41 +32666,6 @@ "object.assign": "^4.1.2" } }, - "jszip": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.0.tgz", - "integrity": "sha512-LDfVtOLtOxb9RXkYOwPyNBTQDL4eUbqahtoY6x07GiDJHwSYvn8sHHIw8wINImV3MqbMNve2gSuM1DDqEKk09Q==", - "requires": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, "jwa": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", @@ -29648,6 +32700,11 @@ "safe-buffer": "^5.0.1" } }, + "kdbush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-3.0.0.tgz", + "integrity": "sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew==" + }, "keyv": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.3.2.tgz", @@ -29707,14 +32764,6 @@ "type-check": "~0.4.0" } }, - "lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "requires": { - "immediate": "~3.0.5" - } - }, "lilconfig": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", @@ -29948,6 +32997,37 @@ "tmpl": "1.0.5" } }, + "maplibre-gl": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-2.4.0.tgz", + "integrity": "sha512-csNFylzntPmHWidczfgCZpvbTSmhaWvLRj9e1ezUDBEPizGgshgm3ea1T5TCNEEBq0roauu7BPuRZjA3wO4KqA==", + "requires": { + "@mapbox/geojson-rewind": "^0.5.2", + "@mapbox/jsonlint-lines-primitives": "^2.0.2", + "@mapbox/mapbox-gl-supported": "^2.0.1", + "@mapbox/point-geometry": "^0.1.0", + "@mapbox/tiny-sdf": "^2.0.5", + "@mapbox/unitbezier": "^0.0.1", + "@mapbox/vector-tile": "^1.3.1", + "@mapbox/whoots-js": "^3.1.0", + "@types/geojson": "^7946.0.10", + "@types/mapbox__point-geometry": "^0.1.2", + "@types/mapbox__vector-tile": "^1.3.0", + "@types/pbf": "^3.0.2", + "csscolorparser": "~1.0.3", + "earcut": "^2.2.4", + "geojson-vt": "^3.2.1", + "gl-matrix": "^3.4.3", + "global-prefix": "^3.0.0", + "murmurhash-js": "^1.0.0", + "pbf": "^3.2.1", + "potpack": "^1.0.2", + "quickselect": "^2.0.0", + "supercluster": "^7.1.5", + "tinyqueue": "^2.0.3", + "vt-pbf": "^3.1.3" + } + }, "mdn-data": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", @@ -30168,6 +33248,11 @@ "thunky": "^1.0.2" } }, + "murmurhash-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz", + "integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==" + }, "nanoid": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", @@ -30671,11 +33756,6 @@ "tar": "^6.1.11" } }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, "param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", @@ -30758,6 +33838,15 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, + "pbf": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", + "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", + "requires": { + "ieee754": "^1.1.12", + "resolve-protobuf-schema": "^2.1.0" + } + }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -30874,6 +33963,11 @@ } } }, + "pngjs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", + "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==" + }, "postcss": { "version": "8.4.14", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", @@ -31527,6 +34621,11 @@ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, + "potpack": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.2.tgz", + "integrity": "sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==" + }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -31692,6 +34791,11 @@ "long": "^4.0.0" } }, + "protocol-buffers-schema": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", + "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==" + }, "proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -31745,6 +34849,114 @@ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" }, + "qr.js": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/qr.js/-/qr.js-0.0.0.tgz", + "integrity": "sha512-c4iYnWb+k2E+vYpRimHqSu575b1/wKl4XFeJGpFmrJQz5I88v9aY2czh7s0w36srfCM1sXgC/xpoJz5dJfq+OQ==" + }, + "qrcode": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.1.tgz", + "integrity": "sha512-nS8NJ1Z3md8uTjKtP+SGGhfqmTCs5flU/xR623oI0JX+Wepz9R8UrRVCTBTJm3qGw3rH6jJ6MUHjkDx15cxSSg==", + "requires": { + "dijkstrajs": "^1.0.1", + "encode-utf8": "^1.0.3", + "pngjs": "^5.0.0", + "yargs": "^15.3.1" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, "qs": { "version": "6.10.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", @@ -31763,6 +34975,11 @@ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" }, + "quickselect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" + }, "raf": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", @@ -31873,13 +35090,13 @@ } }, "react-bootstrap": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.4.0.tgz", - "integrity": "sha512-dn599jNK1Fg5GGjJH+lQQDwELVzigh/MdusKpB/0el+sCjsO5MZDH5gRMmBjRhC+vb7VlCDr6OXffPIDSkNMLw==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.7.0.tgz", + "integrity": "sha512-Jcrn6aUuRVBeSB6dzKODKZU1TONOdhAxu0IDm4Sv74SJUm98dMdhSotF2SNvFEADANoR+stV+7TK6SNX1wWu5w==", "requires": { "@babel/runtime": "^7.17.2", "@restart/hooks": "^0.4.6", - "@restart/ui": "^1.2.0", + "@restart/ui": "^1.4.1", "@types/react-transition-group": "^4.4.4", "classnames": "^2.3.1", "dom-helpers": "^5.2.1", @@ -31891,6 +35108,17 @@ "warning": "^4.0.3" } }, + "react-date-range": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/react-date-range/-/react-date-range-1.4.0.tgz", + "integrity": "sha512-+9t0HyClbCqw1IhYbpWecjsiaftCeRN5cdhsi9v06YdimwyMR2yYHWcgVn3URwtN/txhqKpEZB6UX1fHpvK76w==", + "requires": { + "classnames": "^2.2.6", + "prop-types": "^15.7.2", + "react-list": "^0.8.13", + "shallow-equal": "^1.2.1" + } + }, "react-datepicker": { "version": "4.8.0", "resolved": "https://registry.npmjs.org/react-datepicker/-/react-datepicker-4.8.0.tgz", @@ -31978,6 +35206,12 @@ "prop-types": "^15.7.2" } }, + "react-icons": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.7.1.tgz", + "integrity": "sha512-yHd3oKGMgm7zxo3EA7H2n7vxSoiGmHk5t6Ou4bXsfcgWyhfDKMpyKfhHR6Bjnn63c+YXBLBPUql9H4wPJM6sXw==", + "requires": {} + }, "react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", @@ -31988,6 +35222,14 @@ "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" }, + "react-list": { + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/react-list/-/react-list-0.8.17.tgz", + "integrity": "sha512-pgmzGi0G5uGrdHzMhgO7KR1wx5ZXVvI3SsJUmkblSAKtewIhMwbQiMuQiTE83ozo04BQJbe0r3WIWzSO0dR1xg==", + "requires": { + "prop-types": "15" + } + }, "react-onclickoutside": { "version": "6.12.2", "resolved": "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-6.12.2.tgz", @@ -32003,6 +35245,15 @@ "warning": "^4.0.2" } }, + "react-qr-code": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/react-qr-code/-/react-qr-code-2.0.11.tgz", + "integrity": "sha512-P7mvVM5vk9NjGdHMt4Z0KWeeJYwRAtonHTghZT2r+AASinLUUKQ9wfsGH2lPKsT++gps7hXmaiMGRvwTDEL9OA==", + "requires": { + "prop-types": "^15.8.1", + "qr.js": "0.0.0" + } + }, "react-redux": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.2.tgz", @@ -32113,9 +35364,9 @@ "requires": {} }, "react-transition-group": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz", - "integrity": "sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==", + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", "requires": { "@babel/runtime": "^7.5.5", "dom-helpers": "^5.0.1", @@ -32123,6 +35374,17 @@ "prop-types": "^15.6.2" } }, + "react-web-camera": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/react-web-camera/-/react-web-camera-0.0.1.tgz", + "integrity": "sha512-wOhuk98uGeuL7kwJpJANPzhGrPJPhRizvXGi+E93IWgizbZVZxptygq4FnNMCk2hxLBnCsNxvMC+PU1tMZN0Iw==" + }, + "react-webcam": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/react-webcam/-/react-webcam-7.0.1.tgz", + "integrity": "sha512-8E/Eb/7ksKwn5QdLn67tOR7+TdP9BZdu6E5/DSt20v8yfW/s0VGBigE6VA7R4278mBuBUowovAB3DkCfVmSPvA==", + "requires": {} + }, "reactstrap": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/reactstrap/-/reactstrap-9.1.2.tgz", @@ -32252,9 +35514,9 @@ } }, "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "regenerator-transform": { "version": "0.15.0", @@ -32365,6 +35627,11 @@ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -32403,6 +35670,14 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" }, + "resolve-protobuf-schema": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", + "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", + "requires": { + "protocol-buffers-schema": "^3.3.1" + } + }, "resolve-url-loader": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", @@ -32471,6 +35746,12 @@ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" }, + "rifm": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/rifm/-/rifm-0.12.1.tgz", + "integrity": "sha512-OGA1Bitg/dSJtI/c4dh90svzaUPt228kzFsUkJbtA2c964IqEAwWXeL9ZJi86xWv3j5SMqRvGULl7bA6cK0Bvg==", + "requires": {} + }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -32642,16 +35923,6 @@ "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" }, - "selenium-webdriver": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.1.2.tgz", - "integrity": "sha512-e4Ap8vQvhipgBB8Ry9zBiKGkU6kHKyNnWiavGGLKkrdW81Zv7NVMtFOL/j3yX0G8QScM7XIXijKssNd4EUxSOw==", - "requires": { - "jszip": "^3.6.0", - "tmp": "^0.2.1", - "ws": ">=7.4.6" - } - }, "selfsigned": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.1.tgz", @@ -32817,16 +36088,16 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, "setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, + "shallow-equal": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz", + "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==" + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -32883,6 +36154,13 @@ "faye-websocket": "^0.11.3", "uuid": "^8.3.2", "websocket-driver": "^0.7.4" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + } } }, "socks": { @@ -33015,6 +36293,14 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, + "ssf": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz", + "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", + "requires": { + "frac": "~1.1.2" + } + }, "ssri": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", @@ -33223,6 +36509,19 @@ "postcss-selector-parser": "^6.0.4" } }, + "stylis": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", + "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==" + }, + "supercluster": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-7.1.5.tgz", + "integrity": "sha512-EulshI3pGUM66o6ZdH3ReiFcvHpM3vAigyK+vcxdjpJyEbIIrtbmBdY23mGgnI24uXiGFvrGq9Gkum/8U7vJWg==", + "requires": { + "kdbush": "^3.0.0" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -33468,14 +36767,6 @@ "node-fetch": "^2.6.1", "stream-events": "^1.0.5", "uuid": "^9.0.0" - }, - "dependencies": { - "uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "optional": true - } } }, "temp-dir": { @@ -33600,6 +36891,14 @@ "resolved": "https://registry.npmjs.org/text-decoding/-/text-decoding-1.0.0.tgz", "integrity": "sha512-/0TJD42KDnVwKmDK6jj3xP7E2MG7SHAOG4tyTgyUCRPdHwvkquYNLEQltmdMa3owq3TkddCVcTsoctJI8VQNKA==" }, + "text-segmentation": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz", + "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==", + "requires": { + "utrie": "^1.0.2" + } + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -33615,13 +36914,10 @@ "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "requires": { - "rimraf": "^3.0.0" - } + "tinyqueue": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", + "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==" }, "tmpl": { "version": "1.0.5", @@ -33932,10 +37228,18 @@ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" }, + "utrie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz", + "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==", + "requires": { + "base64-arraybuffer": "^1.0.2" + } + }, "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" }, "v8-compile-cache": { "version": "2.3.0", @@ -33981,6 +37285,16 @@ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" }, + "vt-pbf": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz", + "integrity": "sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==", + "requires": { + "@mapbox/point-geometry": "0.1.0", + "@mapbox/vector-tile": "^1.3.1", + "pbf": "^3.2.1" + } + }, "w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -34287,6 +37601,11 @@ "is-symbol": "^1.0.3" } }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" + }, "wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", @@ -34328,6 +37647,16 @@ } } }, + "wmf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz", + "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==" + }, + "word": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz", + "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==" + }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -34683,6 +38012,20 @@ "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==" }, + "xlsx": { + "version": "0.18.5", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz", + "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==", + "requires": { + "adler-32": "~1.3.0", + "cfb": "~1.2.1", + "codepage": "~1.15.0", + "crc-32": "~1.2.1", + "ssf": "~0.11.2", + "wmf": "~1.0.1", + "word": "~0.3.0" + } + }, "xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", diff --git a/package.json b/package.json index 00ab44b..bdd1236 100644 --- a/package.json +++ b/package.json @@ -3,32 +3,59 @@ "version": "0.1.0", "private": true, "dependencies": { + "@emotion/react": "^11.10.5", + "@emotion/styled": "^11.10.5", + "@fortawesome/fontawesome-svg-core": "^6.2.1", + "@fortawesome/free-solid-svg-icons": "^6.2.1", + "@fortawesome/react-fontawesome": "^0.2.0", + "@mui/icons-material": "^5.11.0", + "@mui/material": "^5.11.7", + "@mui/x-date-pickers": "^5.0.17", + "@mui/x-date-pickers-pro": "^5.0.17", + "@react-google-maps/api": "^2.17.1", "@reduxjs/toolkit": "^1.8.3", "@testing-library/jest-dom": "^5.16.4", "@testing-library/react": "^13.3.0", "@testing-library/user-event": "^14.2.5", + "@trendyol-js/react-carousel": "^3.0.0", + "@types/geojson": "^7946.0.10", + "@types/react-dom": "^18.0.10", "axios": "^0.27.2", - "bootstrap": "^5.1.3", - "firebase": "^9.9.3", + "bootstrap-icons": "^1.10.3", + "crypto-js": "^4.1.1", + "date-fns": "^2.29.3", + "dayjs": "^1.11.7", + "firebase": "^9.17.1", "firebase-admin": "^11.0.1", "gson": "^0.1.5", + "history": "^5.3.0", + "html2canvas": "^1.4.1", "luxon": "^3.0.4", + "maplibre-gl": "^2.4.0", "moment": "^2.29.4", "npm-check-updates": "^15.3.4", + "qrcode": "^1.5.1", "react": "^18.2.0", - "react-bootstrap": "^2.4.0", + "react-bootstrap": "^2.7.0", + "react-date-range": "^1.4.0", "react-datepicker": "^4.8.0", "react-dom": "^18.2.0", "react-google-button": "^0.7.2", + "react-icons": "^4.7.1", + "react-qr-code": "^2.0.11", "react-redux": "^8.0.2", "react-router-dom": "^6.4.1", "react-scripts": "5.0.1", "react-select-search": "^4.1.5", "react-table": "^7.8.0", + "react-web-camera": "^0.0.1", + "react-webcam": "^7.0.1", "reactstrap": "^9.1.2", "redux": "^4.2.0", "redux-persist": "^6.0.0", - "web-vitals": "^2.1.4" + "uuid": "^9.0.0", + "web-vitals": "^2.1.4", + "xlsx": "^0.18.5" }, "scripts": { "start": "react-scripts start", diff --git a/public/1.jpg b/public/1.jpg new file mode 100644 index 0000000..7a062d8 Binary files /dev/null and b/public/1.jpg differ diff --git a/public/RH1.jpg b/public/RH1.jpg new file mode 100644 index 0000000..1de25d0 Binary files /dev/null and b/public/RH1.jpg differ diff --git a/public/RH2.jpg b/public/RH2.jpg new file mode 100644 index 0000000..03ef959 Binary files /dev/null and b/public/RH2.jpg differ diff --git a/public/amar.png b/public/amar.png new file mode 100644 index 0000000..d3baecc Binary files /dev/null and b/public/amar.png differ diff --git a/public/index.html b/public/index.html index ef1b9eb..ba068de 100644 --- a/public/index.html +++ b/public/index.html @@ -2,7 +2,7 @@ - + + + + + + + + @@ -52,22 +59,13 @@ work correctly both with client-side routing and a non-root public URL. Learn how to configure a non-root public URL by running `npm run build`. --> - React App + CEpoint - +
- + diff --git a/src/App.css b/src/App.css index 8b13789..52209ca 100644 --- a/src/App.css +++ b/src/App.css @@ -1 +1,4 @@ +.offcanvas-backdrop.show { + opacity: -0.5; +} \ No newline at end of file diff --git a/src/App.js b/src/App.js index 8d50612..7063a20 100644 --- a/src/App.js +++ b/src/App.js @@ -1,54 +1,178 @@ -import React, { useState } from 'react'; +//habil +import React, {useContext, useEffect} from 'react'; import './App.css'; -import { NavbarBrand } from 'reactstrap'; import Bienvenida from "./Pages/bienvenida/bienvenida" -import {BrowserRouter as Router, Route, Routes} from 'react-router-dom' -//import {Signup} from '../src/Pages/Access/Signup' -//import {Loginup} from '../src/Pages/Access/Loginup' -import Account from './Pages/perfil/testRenderforAdminnUser/Account'; +import {BrowserRouter as Router, Route, Routes, useParams, useLocation} from 'react-router-dom' + import Totalogin from '../src/Pages/Access/Totalogin' import Totalsignup from '../src/Pages/Access/Totalsignup' import { AuthContextProvider } from './context/AuthContext'; -import { UsuariosProvider } from './context/UsuariosContext'; -import ProtectedRoute from '../src/Pages/Access/ProtectedRoute'; -import RouterUser from './Pages/perfil/testRenderforAdminnUser/RouterUser' -//import ProtectedRouteRol from './Pages/perfil/ProtectedRouteRol'; -import {useSelector} from 'react-redux'; - import 'bootstrap/dist/css/bootstrap.min.css'; -function App() { +//new feature +import { AccountUser } from './Pages/perfil/AccountUser'; +import { WelcomeHome } from './componentes/WelcomeHome'; +import Usuarios from './componentes/usuarios/Usuarios'; +import { Horario } from './componentes/horario/Horario'; +import { Presupuesto } from './componentes/horario/AsistenciasParaReporteNomina/Presupuesto'; +import { Ubicacion } from './componentes/horario/Ubicacion'; +import { Obra } from './componentes/horario/Obra'; +import { Semana } from './componentes/horario/semana/Semana'; +import { Trabajador } from './componentes/horario/Trabajador'; +import Asignador from './componentes/asignador/Asignador'; + +import GeneradorReporte from './componentes/horario/AsistenciasParaReporteNomina/GeneradorReporte'; + + +import ProtectedRoute from './componentes/security/ProtectedRoute'; +import ProtectedRouteAuth from './componentes/security/ProtectedRouteAuth'; +//import 'bootstrap/dist/css/bootstrap.min.css'; +//usuarios +import Todos from './componentes/usuarios/todos/Todos' +import Inactivos from './componentes/usuarios/inactivos/Inactivos'; +import Ocupados from './componentes/usuarios/ocupados/Ocupados'; +import Desocupados from './componentes/usuarios/ocupados/Desocupados'; +//almacen +import {Almacen} from './componentes/almacen/Almacen' +import {Miscelaneos} from './componentes/almacen/miscelaneos/Miscelaneos' +import { Herramientas } from './componentes/almacen/herramientas/Herramientas'; +import { FormRegistroHerramienta } from './componentes/almacen/herramientas/FormRegistroHerramienta'; + +import {Maquinaria} from './componentes/almacen/maquinaria/Maquinaria' +import {Prestado} from './componentes/almacen/prestado/Prestado' +import { UiProvider } from './context/UiContext'; + + +import { CEpointProvider } from './context/CEpointContext'; +import { RecursosHumanos } from './componentes/RH/RecursosHumanos'; +import { Trabajadores } from './componentes/RH/Trabajadores'; +import BuscadorTrabajador from './componentes/RH/BuscadorTrabajador'; +import { FormularioDatosTrabajador } from './componentes/RH/Trabajadores/FormularioDatosTrabajador'; +import { CreadorTrabajador } from './componentes/RH/CrearTrabajador/CreadorTrabajador'; +import { ProyectosActivos } from './componentes/horario/semana/proyectosActivos/ProyectosActivos'; +import { ProyectosAdicionales } from './componentes/horario/semana/proyectosAdicionales/ProyectosAdicionales'; +import { ProyectosGarantias } from './componentes/horario/semana/proyectosGarantias/ProyectosGarantias'; +import { ProyectosDesactivados } from './componentes/horario/semana/proyectosDesactivados/ProyectosDesactivados'; +import { Table } from './componentes/horario/semana/Table'; + +//ASIGNACION +import { Proyecto } from './componentes/asignador/Proyecto/Proyecto'; +import { CreaProyecto } from './componentes/asignador/CreacionProyectos/CreaProyecto'; +import { CreaKey } from './componentes/asignador/CreacionKey/CreaKey'; + - + +function App() { + const location = useLocation(); + console.log(location) return ( -
- - + + + + + + <> + } /> } /> } /> - - - - - } /> + + + + + + + } > + + } /> + + + + + } > + }> + }/> + + }/> + }> + }/> + + + + + } > + }/> + }/> + }/> + }> + }> + }/> + + }> + }/> + + }> + }/> + + }/> + + + + + }/> + + + + } > + + } /> + } /> + } /> + + + } > + } /> + }> + } /> + + + } /> + } /> + + + + + + + + + - - + - + + + + + + + + -
); } -export default App; +export default React.memo(App) ; diff --git a/src/App.test.js b/src/App.test.js deleted file mode 100644 index 1f03afe..0000000 --- a/src/App.test.js +++ /dev/null @@ -1,8 +0,0 @@ -import { render, screen } from '@testing-library/react'; -import App from './App'; - -test('renders learn react link', () => { - render(); - const linkElement = screen.getByText(/learn react/i); - expect(linkElement).toBeInTheDocument(); -}); diff --git a/src/Pages/Access/Login.css b/src/Pages/Access/Login.css new file mode 100644 index 0000000..8962205 --- /dev/null +++ b/src/Pages/Access/Login.css @@ -0,0 +1,6 @@ +.background-image { + background-image: url('./patternpad_1.png'); + background-position: center; + background-repeat: no-repeat; + background-size: cover; + } \ No newline at end of file diff --git a/src/Pages/Access/Loginup.jsx b/src/Pages/Access/Loginup.jsx index 6747078..57730ea 100644 --- a/src/Pages/Access/Loginup.jsx +++ b/src/Pages/Access/Loginup.jsx @@ -1,83 +1,87 @@ -import React, { useState} from 'react' -import {Form, Button, Card, Alert} from 'react-bootstrap' -import GoogleButton from 'react-google-button' +import React, { useState, useRef } from 'react'; +import { Form, Button, Card, Alert } from 'react-bootstrap'; +import GoogleButton from 'react-google-button'; import { Link, useNavigate } from 'react-router-dom'; import { UserAuth } from '../../context/AuthContext'; +import './Login.css'; -export const Loginup=()=> { - const [email, setEmail] = useState(''); - const [password, setPassword] = useState(''); +export const Loginup = () => { + const emailRef = useRef(); + const passwordRef = useRef(); const [error, setError] = useState(''); + const [emailError, setEmailError] = useState(''); const navigate = useNavigate(); const { signIn } = UserAuth(); + + + + + const handleSubmit = async (e) => { e.preventDefault(); - setError('') + // Validación del formato del correo electrónico + const emailRegex = /^\w+([.-]?\w+)*@\w+([.-]?\w+)*(\.\w{2,3})+$/; + if (!emailRegex.test(emailRef.current.value)) { + setEmailError('El correo electrónico es inválido.'); + return; + } + setEmailError(''); try { - await signIn(email, password) - - navigate('/account') - } catch (e) { - setError(e.message) - console.log(e.message) + await signIn(emailRef.current.value, passwordRef.current.value).then((response)=>{ + navigate('/account') + sessionStorage.setItem('Auth Token', response._tokenResponse.refreshToken) + }); + } catch (e) { + if(e.code === 'auth/invalid-email'){ + setError('El correo electrónico es inválido') + }else if(e.code === 'auth/user-not-found'){ + setError('El usuario no existe') + }else if(e.code === 'auth/wrong-password'){ + setError('La contraseña es incorrecta') + }else{ + setError(e.message) + } } - }; +}; - - - /*const signInWithGoogle=()=>{ - const provider= new GoogleAuthProvider(); - signInWithPopup(authentication, provider) - .then((re=>{ - console.log(re); - }) - .catch((err)=>{ - console.log(err) - })) - }*/ - - - return ( - <> - - -

Inicia sesion

- {error&&{error}} -
- -Email - setEmail(e.target.value)} required> - - - -Password - setPassword(e.target.value)} required> - - - - - - -
- -
- -
-
-
-
- Need an account? Sign up -
- - - ) -} + + + + + + return ( + <> + + +

Inicia sesion

+ {error && {error}} +
+ + Email + + + + + Password + + + +
+
+ +
+ +
+
+
+
+ + ); +}; diff --git a/src/Pages/Access/patternpad_1.png b/src/Pages/Access/patternpad_1.png new file mode 100644 index 0000000..e17d902 Binary files /dev/null and b/src/Pages/Access/patternpad_1.png differ diff --git a/src/Pages/bienvenida/APP.png b/src/Pages/bienvenida/APP.png new file mode 100644 index 0000000..c3f344c Binary files /dev/null and b/src/Pages/bienvenida/APP.png differ diff --git a/src/Pages/bienvenida/bienvenida.css b/src/Pages/bienvenida/bienvenida.css index e54e584..1b50779 100644 --- a/src/Pages/bienvenida/bienvenida.css +++ b/src/Pages/bienvenida/bienvenida.css @@ -1,5 +1,6 @@ .Bienvenida { - + margin: 0%; + } .p-5 { padding: 2rem !important; @@ -10,6 +11,6 @@ } .carousel-item{ - height: 36rem; + height: 100vh; background:#777; } \ No newline at end of file diff --git a/src/Pages/bienvenida/bienvenida.jsx b/src/Pages/bienvenida/bienvenida.jsx index ddf5030..362000c 100644 --- a/src/Pages/bienvenida/bienvenida.jsx +++ b/src/Pages/bienvenida/bienvenida.jsx @@ -1,79 +1,139 @@ -import React, { useState } from 'react'; + import React, { useState, useEffect } from 'react'; import './bienvenida.css'; -import { NavbarBrand } from 'reactstrap'; -import { Button } from 'react-bootstrap'; -import {Modal} from 'react-bootstrap'; -import {Loginup} from '../Access/Loginup' - - +import { NavbarBrand, Button, Modal, Carousel, Container, Row, Col } from 'react-bootstrap'; +import {Loginup} from '../Access/Loginup' +import promocion from './promocion.png' +import arcore from './patternpad.png' +import APP from './APP.png' +import { + useNavigate +} from 'react-router-dom'; function Bienvenida() { const [show, setShow]=useState(false) - +const [authenticated, setAuthenticated] = useState(false); const handleShow=()=>setShow(true) const handleClose=()=>setShow(false) +const navigate = useNavigate() + + const [index, setIndex] = useState(0); + const handleSelect = (selectedIndex, e) => { + setIndex(selectedIndex); + }; + +useEffect(() => { + let authToken = sessionStorage.getItem('Auth Token'); + if (authToken) { + setAuthenticated(true); + } +}, []); + +useEffect(() => { + if (authenticated) { + navigate('/account'); + } else { + navigate('/'); + } +}, [authenticated]); return ( -
- + + + + + + + + + + + + + + First slide + +

First slide label

+

Nulla vitae elit libero, a pharetra augue mollis interdum.

+
+
+ + Second slide + + +

Second slide label

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

+
+
+ + Third slide + + +

Third slide label

+

+ Praesent commodo cursus magna, vel scelerisque nisl consectetur. +

+
+
+
+ + + + + + + + + -
-
- - - -
-
-
- PlaceholderFirst slide - -
-
- PlaceholderSecond slide - -
-
- PlaceholderThird slide + + + + -
-
- - -
- - - - - - - + + + + + + + -
+ ); } diff --git a/src/Pages/bienvenida/patternpad.png b/src/Pages/bienvenida/patternpad.png new file mode 100644 index 0000000..1fa1b12 Binary files /dev/null and b/src/Pages/bienvenida/patternpad.png differ diff --git a/src/Pages/bienvenida/promocion.png b/src/Pages/bienvenida/promocion.png new file mode 100644 index 0000000..d242707 Binary files /dev/null and b/src/Pages/bienvenida/promocion.png differ diff --git a/src/Pages/perfil/Account.css b/src/Pages/perfil/Account.css deleted file mode 100644 index a662972..0000000 --- a/src/Pages/perfil/Account.css +++ /dev/null @@ -1,56 +0,0 @@ -.a1{ - width: 17%; - height: 86%; - background-color: dimgrey; - margin-top: 0%; - margin-right: 50%; - margin-left: 0%; - position: absolute; - -} -.a21{ - height: 78%; - width: 77%; - margin-top: 2%; - margin-right: 60%; - margin-left: 20%; - position: absolute; -} - -button.btnx1.btn.btn-success{ - margin-left: 30px; - margin-top: 30px; - width: 70%; - -} - -button.btnx2.btn.btn-primary{ - margin-left: 30px; - margin-top: 30px; - width: 70%; - -} -button.btnx3.btn.btn-primary{ - margin-left: 30px; - margin-top: 30px; - width: 70%; - -} -button.btnx3.btn.btn-danger{ - margin-left: 30px; - margin-top: 30px; - width: 70%; - -} -button.btnx1.btn.btn-warning{ - margin-left: 30px; - margin-top: 30px; - width: 70%; - display: flex; - -} -.asignador{ - margin-left: 20px; - margin-top: 20px; - padding: 20px; -} \ No newline at end of file diff --git a/src/Pages/perfil/Account.jsx b/src/Pages/perfil/Account.jsx deleted file mode 100644 index ee9ce2d..0000000 --- a/src/Pages/perfil/Account.jsx +++ /dev/null @@ -1,128 +0,0 @@ -import './Account.css' - -import { - BrowserRouter as Router, - Switch, - Route, - Routes, - useNavigate -} from 'react-router-dom'; -import {Horario} from '../../componentes/horario/Horario' -import {Layout} from './Layout' -import {Asignador1} from '../../componentes/asignador/Asignador1'; -import { Bienvenida } from '../../componentes/Bienvenida'; -import {Ubicacion} from '../../componentes/horario/Ubicacion' -import {Obra} from '../../componentes/horario/Obra' -import {Semana} from '../../componentes/horario/Semana' -import {Trabajador} from '../../componentes/horario/Trabajador' -import { Asignadorendiseño } from '../../componentes/asignador/Asignadorendiseño'; -import { Presupuesto } from '../../componentes/horario/Presupuesto'; -import { getFirestore, doc, getDoc} from "firebase/firestore" -import { getAuth } from "firebase/auth"; -import { UserAuth } from '../../context/AuthContext'; -import { useState } from 'react'; -import { useEffect } from 'react'; -import UserContext from '../../context/AuthContext'; -import { useContext } from 'react'; -export default function Account() { -const [userRol, setUserRol] =useState() -const {user} = useContext(UserContext) - -const auth = getAuth(); -const dato= auth.currentUser; -if (dato !== null) { - dato.providerData.forEach((profile) => { - console.log("Sign-in provider: " + profile.locaId); - console.log(" Email: " + profile.email); - - }); -} - if (dato!==null){ - console.log( "uid", dato.uid ) -} -console.log("rol?", doc) - -console.log("user rol:", userRol); -console.log("test from account:",user.uid) - -useEffect(()=>{ - const querydb=getFirestore(); - const queryDoc = doc(querydb, "users", user.uid); - getDoc(queryDoc).then(res => console.log( res.data().rol) - - ) -},[]) - - - return ( - - - } > - } - /> - - } /> - - } - > - }/> - }/> - }/> - }/> - }/> - - - - - } /> - - - - - ) -} - - -//TODO: BOTONES RENDERIZABLES DE COMPONENTES - - - -//handleSubmit={handleSubmit} by Asignador1 - - -/* const r15 =db.collection('users').doc('${dato.uid}') -const docuCifrada= getDoc(r15) -const infoFinal =docuCifrada.data().rol; -console.log("r15:",infoFinal) */ - - - - - - /* async function getRol(uid){ - const docuRef= doc(db, `users/${uid}`); - const docuCifrada = await getDoc(docuRef); - const infoFinal= docuCifrada.data().rol; - return infoFinal; - } - function setUserWithFirebaseAndRol(user){ - getRol(user.uid).then((rol)=>{ - const userData={ - uid: user.uid, - email: user.email, - rol: rol, - - } - setUserRol(userData); - - }).then(setUserWithFirebaseAndRol(user)) - - } - - */ \ No newline at end of file diff --git a/src/Pages/perfil/AccountUser.jsx b/src/Pages/perfil/AccountUser.jsx new file mode 100644 index 0000000..142148e --- /dev/null +++ b/src/Pages/perfil/AccountUser.jsx @@ -0,0 +1,334 @@ +//habilItado +import { Row, Col} from 'react-bootstrap' +import { UserAuth } from '../../context/AuthContext'; +//import './Account.css' + +import React, { useEffect, useContext} from 'react' +import { + useNavigate, + Outlet +} from 'react-router-dom'; +import NavbarCepoint from './Navbar'; + +import { WhiteBoard } from './WhiteBoard'; +import Grid from '@mui/material/Grid' +import { styled, createTheme, ThemeProvider } from '@mui/material/styles'; +import CssBaseline from '@mui/material/CssBaseline'; +import MuiDrawer from '@mui/material/Drawer' +import Box from '@mui/material/Box'; +import MuiAppBar from '@mui/material/AppBar'; +import Toolbar from '@mui/material/Toolbar'; +import List from '@mui/material/List'; +import Typography from '@mui/material/Typography'; +import Divider from '@mui/material/Divider'; +import IconButton from '@mui/material/IconButton'; +import Badge from '@mui/material/Badge'; +import Container from '@mui/material/Container'; +import Button from '@mui/material/Button'; +import Paper from '@mui/material/Paper'; +import Link from '@mui/material/Link'; +import MenuIcon from '@mui/icons-material/Menu'; +import ChevronLeftIcon from '@mui/icons-material/ChevronLeft'; +import NotificationsIcon from '@mui/icons-material/Notifications'; +import FilterTiltShiftIcon from '@mui/icons-material/FilterTiltShift'; +import NearMeIcon from '@mui/icons-material/NearMe'; +import { MainListItems } from './listItems'; +import moment from 'moment'; +import CEpointContext from '../../context/CEpointContext'; +/* import Chart from './Chart'; +import Deposits from './Deposits'; +import Orders from './Orders'; */ + + + +const drawerWidth = 240; + +const AppBar = styled(MuiAppBar, { + shouldForwardProp: (prop) => prop !== 'open', +})(({ theme, open }) => ({ + zIndex: theme.zIndex.drawer + 1, + transition: theme.transitions.create(['width', 'margin'], { + easing: theme.transitions.easing.sharp, + duration: theme.transitions.duration.leavingScreen, + }), + ...(open && { + marginLeft: drawerWidth, + width: `calc(100% - ${drawerWidth}px)`, + transition: theme.transitions.create(['width', 'margin'], { + easing: theme.transitions.easing.sharp, + duration: theme.transitions.duration.enteringScreen, + }), + }), +})); + +const Drawer = styled(MuiDrawer, { shouldForwardProp: (prop) => prop !== 'open' })( + ({ theme, open }) => ({ + '& .MuiDrawer-paper': { + position: 'relative', + whiteSpace: 'nowrap', + width: drawerWidth, + transition: theme.transitions.create('width', { + easing: theme.transitions.easing.sharp, + duration: theme.transitions.duration.enteringScreen, + }), + boxSizing: 'border-box', + ...(!open && { + overflowX: 'hidden', + transition: theme.transitions.create('width', { + easing: theme.transitions.easing.sharp, + duration: theme.transitions.duration.leavingScreen, + }), + width: theme.spacing(7), + [theme.breakpoints.up('sm')]: { + width: theme.spacing(9), + }, + }), + }, + }), +); + +const mdTheme = createTheme(); +const navbar = createTheme( { + palette: { + primary: { + main: '#ffc107', + }, + }, +} ); + + +export const AccountUser= () => { + + const {state}= useContext(CEpointContext) + const [open, setOpen] = React.useState(true); + const toggleDrawer = () => { + setOpen(!open); + }; + + + const {logout}= UserAuth(); + const navigate = useNavigate(); + +console.log(state) + + useEffect(()=>{ + let authToken = sessionStorage.getItem('Auth Token') + if(authToken){ + navigate('/account') + } + if(!authToken){ + navigate('/') + } +}, + + +[]) +//LOGOUT +const handleLogout = async()=>{ + try{ + await logout().then( + navigate('/'), + sessionStorage.removeItem('Auth Token') + + ) + console.log('You are logged out') + } catch(e) { + console.log(e.message); + + } + }; + + + + + + //console.log('BIGSTATE', state) + + + + + return ( + + + + + + + + + + + + + CEpoint + + + + + + + + + + + +

{moment().format('LT ')}

+ + + + +
+ + + {} + + + +
+ + + + + theme.palette.mode === 'light' + ? theme.palette.grey[100] + : theme.palette.grey[900], + flexGrow: 1, + height: '100vh', + + overflow: 'auto', + }} + > + + + + + + + + + {/* Chart */} + {/* + + + + */} + {/* Recent Deposits */} + {/* + + + + */} + {/* Recent Orders */} + {/* + + + + */} + + + + + + + + + + + +
+ + + + + + + + + + + + + + +{/* + + +
+ + + + + + + + + + + + + + + + + */} + + + + + + + {/* //area de herramienta */} + + + + {/* //canvas lateral */} + + + + + + + + ) +} + diff --git a/src/Pages/perfil/Layout.jsx b/src/Pages/perfil/Layout.jsx deleted file mode 100644 index 3898aa1..0000000 --- a/src/Pages/perfil/Layout.jsx +++ /dev/null @@ -1,131 +0,0 @@ -import { Button, Card, NavbarBrand} from 'react-bootstrap' -import { UserAuth } from '../../context/AuthContext'; -import './Account.css' -import Asignador1 from '../../componentes/asignador/Asignador1'; -import {saveAsignacion} from '../../services/indi' -import React, {useState} from 'react' -import { - BrowserRouter as Router, - Switch, - Route, - Routes, - useNavigate, - Outlet -} from 'react-router-dom'; -import Horario from '../../componentes/horario/Horario' - - - - -export const Layout= () => { - - const {logout, user}= UserAuth(); - const navigate = useNavigate(); - - // const[pulsadoHorario, setPulsadoHorario] = useState(false); - // const[pulsadoAsignacion, setPulsadoAsignacion] = useState(false); - // const [welcome, setWelcome] = useState(true); - console.log(user) - - //NAVEGACION DE PAGINA - const handleSubmit= (data)=>{ - saveAsignacion(data) - console.log(data) - } - - const handleAsignador = () =>{ - navigate("asignador"); - } - const handleHorario = () =>{ - navigate("horario"); - } - - //LOGOUT - const handleLogout = async()=>{ - try{ - await logout(); - navigate('/'); - console.log('You are logged out') - } catch(e) { - console.log(e.message); - - } - }; - - return ( - - -
-
- {/* //navbar */} - - - -
- {/* aside */} -
- - - - - -
- - {/* //area de herramienta */} -
- - - - -
- - - {/* //canvas lateral */} -
- - -
-
Trabaja en las otras funciones
- -
-
- - - - -

- Falta crear: - - -CONTROL DE ALMACEN POR Qr (APP) - -INTERFAZ DE ASISTENCIA RECIBIDO EN "JSON (y)" - tecnologias analizado: Ajax y axios para actualizar y detectar cuando recibo datos. - - -CONVERTIDOR DE JSON A STRIN Y VICEVERSA - -INTEGRAR SOCKET.IO - -SE TENDRA QUE HACER UN SERVER BACK END POSIBLEMENTE - CONECTAR AXIOS (CEpoint) CON EXPRESS (server) - - .

-
- - - - -
-
- - - - - ) -} - diff --git a/src/Pages/perfil/Navbar.jsx b/src/Pages/perfil/Navbar.jsx new file mode 100644 index 0000000..d54ec30 --- /dev/null +++ b/src/Pages/perfil/Navbar.jsx @@ -0,0 +1,63 @@ +import React, {useContext, useEffect} from 'react' +import { NavbarBrand, Navbar, Nav, NavDropdown} from 'react-bootstrap' +import AppBar from '@mui/material/AppBar'; +import Box from '@mui/material/Box'; +import Toolbar from '@mui/material/Toolbar'; +import Typography from '@mui/material/Typography'; +import Button from '@mui/material/Button'; +import IconButton from '@mui/material/IconButton'; +import { createTheme, ThemeProvider, styled } from '@mui/material/styles'; +import Paper from '@mui/material/Paper'; +//import './Account.css' +const NavbarCepoint = ({handleLogout}) => { + + + + const theme = createTheme({ + palette: { + primary: { + main: '#ffc107', + }, + }, + }); + + const Item = styled(Paper)(({ theme }) => ({ + backgroundColor: theme.palette.mode === '#fff', + ...theme.typography.body2, + padding: theme.spacing(1), + textAlign: 'center', + color: theme.palette.text.secondary, + })); + + + + + return ( + + + + + + + + CEpoint + + + + + + + + + + + ) +} + +export default React.memo(NavbarCepoint) \ No newline at end of file diff --git a/src/Pages/perfil/WhiteBoard.jsx b/src/Pages/perfil/WhiteBoard.jsx new file mode 100644 index 0000000..fcf3330 --- /dev/null +++ b/src/Pages/perfil/WhiteBoard.jsx @@ -0,0 +1,17 @@ +import React from 'react' +import Grid from '@mui/material/Grid'; + +import { + + Outlet + } from 'react-router-dom'; +export const WhiteBoard = () => { + return ( + + + + + + + ) +} diff --git a/src/Pages/perfil/listItems.jsx b/src/Pages/perfil/listItems.jsx new file mode 100644 index 0000000..d510c17 --- /dev/null +++ b/src/Pages/perfil/listItems.jsx @@ -0,0 +1,71 @@ +import React, {useContext, useEffect} from 'react' +import ListItemButton from '@mui/material/ListItemButton'; +import ListItemIcon from '@mui/material/ListItemIcon'; +import ListItemText from '@mui/material/ListItemText'; +import ListSubheader from '@mui/material/ListSubheader'; +import ExtensionIcon from '@mui/icons-material/Extension'; +import ManageAccountsIcon from '@mui/icons-material/ManageAccounts'; +import CEpointContext from '../../context/CEpointContext'; +import UiContext from '../../context/UiContext'; +import WatchLaterIcon from '@mui/icons-material/WatchLater'; +import ConstructionIcon from '@mui/icons-material/Construction'; +import { + useNavigate + } from 'react-router-dom'; +export const MainListItems=()=>{ + + const {state, accessKey}=useContext(CEpointContext) + const {setToggleRH, setToggleALMACEN}=useContext(UiContext) + const navigate = useNavigate(); + + useEffect(()=>{ + if(!state.UsuariosSesion){accessKey()} + + }, [state.UsuariosSesion]) + + return( + <> + + + {navigate("recursosHumanos") + setToggleRH(false) + }}> + + + + + :null + + + navigate("horario")}> + + + + + :null + + + navigate("asignadorEndiseño")}> + + + + + :null + + {navigate("almacen") + setToggleALMACEN(false) + }}> + + + + + :null + + + + ) +} + + + + \ No newline at end of file diff --git a/src/Pages/perfil/testRenderforAdminnUser/Account.jsx b/src/Pages/perfil/testRenderforAdminnUser/Account.jsx deleted file mode 100644 index 4200e27..0000000 --- a/src/Pages/perfil/testRenderforAdminnUser/Account.jsx +++ /dev/null @@ -1,36 +0,0 @@ -import React from "react"; -import RouterAdmin from "./RouterAdmin"; -import RouterUser from "./RouterUser"; -import { getAuth } from "firebase/auth"; -import { getFirestore, doc, getDoc} from "firebase/firestore" -import { useEffect, useState, useContext, useMemo} from "react" -import UserContext from "../../../context/AuthContext"; -function Account() { - const [userRol, setUserRol] =useState() - const auth = getAuth(); - const {user} = useContext(UserContext) - const dato= auth.currentUser; - if (dato!==null){ - console.log( "uid", user.uid ) - } - - useEffect(()=>{ - const querydb=getFirestore(); - const queryDoc = doc(querydb, "users", user.uid); - getDoc(queryDoc).then(res => { - setUserRol(res.data().rol) - console.log( res.data().rol) - } ) - },[]) - -console.log(userRol); - -return ( -
- - {userRol === "admin" ? : } -
- ); -} - -export default Account; \ No newline at end of file diff --git a/src/Pages/perfil/testRenderforAdminnUser/AccountUser.jsx b/src/Pages/perfil/testRenderforAdminnUser/AccountUser.jsx deleted file mode 100644 index 6390b78..0000000 --- a/src/Pages/perfil/testRenderforAdminnUser/AccountUser.jsx +++ /dev/null @@ -1,155 +0,0 @@ -import { Button, Card, NavbarBrand} from 'react-bootstrap' -import { UserAuth } from '../../../context/AuthContext'; -import '../Account.css' -import Asignador1 from '../../../componentes/asignador/Asignador1'; -import {saveAsignacion} from '../../../services/indi' -import React, {useState, useEffect, useContext} from 'react' -import { - BrowserRouter as Router, - useNavigate, - Outlet -} from 'react-router-dom'; -import Horario from '../../../componentes/horario/Horario'; -import { getFirestore, collection, doc, getDoc } from 'firebase/firestore'; -import {getAuth} from "firebase/auth"; -import UserContext from '../../../context/AuthContext'; - -export const AccountUser= () => { - const {user} = useContext(UserContext) -const [asignador, setAsignador]= useState() -const [lectorAsistencia, setLectorAsistencia]= useState() -const [Usuario, setUsuario]= useState() -const auth= getAuth(); -const dato= auth.currentUser; - - -useEffect(()=>{ - const querydb=getFirestore(); - const queryDoc = doc(querydb, "users", user.uid); - getDoc(queryDoc).then(res => { - setAsignador(res.data().asignador) - console.log("Es asignador?:", res.data().asignador) - setLectorAsistencia(res.data().lectoreAsistencia) - console.log("Es lector?:", res.data().lectoreAsistencia) - setUsuario(res.data().usator) - - } ) -},[]) - -console.log(user.uid) -const {logout}= UserAuth(); -const navigate = useNavigate(); - - - //NAVEGACION DE PAGINA - const handleSubmit= (data)=>{ - saveAsignacion(data) - console.log(data) - } - - const handleAsignador = () =>{ - navigate("asignador"); - } - const handleHorario = () =>{ - navigate("horario"); - } - - //LOGOUT - const handleLogout = async()=>{ - try{ - await logout(); - navigate('/'); - console.log('You are logged out') - } catch(e) { - console.log(e.message); - - } - }; - - return ( - - -
-
- {/* //navbar */} - - - -
- {/* aside */} -
- {Usuario &&} - - {lectorAsistencia && } - {asignador &&} - - - - - -
- - {/* //area de herramienta */} -
- - - - -
- - - {/* //canvas lateral */} -
- - -
-
Trabaja en las otras funciones
- -
-
- - - - -

- Falta crear: - - -CONTROL DE ALMACEN POR Qr (APP) - -INTERFAZ DE ASISTENCIA RECIBIDO EN "JSON (y)" - tecnologias analizado: Ajax y axios para actualizar y detectar cuando recibo datos. - - -CONVERTIDOR DE JSON A STRIN Y VICEVERSA - -INTEGRAR SOCKET.IO - -SE TENDRA QUE HACER UN SERVER BACK END POSIBLEMENTE - CONECTAR AXIOS (CEpoint) CON EXPRESS (server) - - .

-
- - - - -
-
- - - - - ) -} - diff --git a/src/Pages/perfil/testRenderforAdminnUser/Test.jsx b/src/Pages/perfil/testRenderforAdminnUser/Test.jsx deleted file mode 100644 index 826b221..0000000 --- a/src/Pages/perfil/testRenderforAdminnUser/Test.jsx +++ /dev/null @@ -1,7 +0,0 @@ -import React from 'react' - -export const Test = () => { - return ( -
Test
- ) -} diff --git a/src/Pages/perfil/testRenderforAdminnUser/AccountAdmin.jsx b/src/basura/AccountAdmin.jsx similarity index 95% rename from src/Pages/perfil/testRenderforAdminnUser/AccountAdmin.jsx rename to src/basura/AccountAdmin.jsx index 517b649..c6244ba 100644 --- a/src/Pages/perfil/testRenderforAdminnUser/AccountAdmin.jsx +++ b/src/basura/AccountAdmin.jsx @@ -1,4 +1,4 @@ -import { Button, Card, NavbarBrand} from 'react-bootstrap' +/* import { Button, Card, NavbarBrand} from 'react-bootstrap' import { UserAuth } from '../../../context/AuthContext'; import '../Account.css' import Asignador1 from '../../../componentes/asignador/Asignador1'; @@ -57,7 +57,7 @@ export const AccountAdmin= () => {
- {/* //navbar */} +
- {/* aside */} +
@@ -79,8 +79,7 @@ export const AccountAdmin= () => {
- - {/* //area de herramienta */} +
@@ -88,8 +87,7 @@ export const AccountAdmin= () => {
- - {/* //canvas lateral */} +
@@ -129,3 +127,4 @@ export const AccountAdmin= () => { ) } + */ \ No newline at end of file diff --git a/src/basura/ProtectedRoute.js b/src/basura/ProtectedRoute.js new file mode 100644 index 0000000..2ec5633 --- /dev/null +++ b/src/basura/ProtectedRoute.js @@ -0,0 +1,15 @@ +/* import React, {useContext} from 'react'; +import { Navigate } from 'react-router-dom'; +import { getAuth } from 'firebase/auth'; +import { UserAuth } from '../context/AuthContext'; +import UserContext from '../context/AuthContext'; +const ProtectedRoute = ({ children }) => { + // const { user } = useContext(UserContext); +const user =getAuth() + if (!user) { + return ; + } + return children; +}; + +export default ProtectedRoute; */ \ No newline at end of file diff --git a/src/Pages/perfil/testRenderforAdminnUser/RouterAdmin.jsx b/src/basura/RouterAdmin.jsx similarity index 96% rename from src/Pages/perfil/testRenderforAdminnUser/RouterAdmin.jsx rename to src/basura/RouterAdmin.jsx index 38f2144..beba8f4 100644 --- a/src/Pages/perfil/testRenderforAdminnUser/RouterAdmin.jsx +++ b/src/basura/RouterAdmin.jsx @@ -10,7 +10,7 @@ import { import {Horario} from '../../../componentes/horario/Horario' import {AccountAdmin} from './AccountAdmin' import {Asignador1} from '../../../componentes/asignador/Asignador1'; -import { Bienvenida } from '../../../componentes/Bienvenida'; +import { Bienvenida } from '../../../componentes/WelcomeHome'; import {Ubicacion} from '../../../componentes/horario/Ubicacion' import {Obra} from '../../../componentes/horario/Obra' import {Semana} from '../../../componentes/horario/Semana' diff --git a/src/Pages/perfil/RouterAdmin.jsx b/src/basura/RouterAdmin0.jsx similarity index 71% rename from src/Pages/perfil/RouterAdmin.jsx rename to src/basura/RouterAdmin0.jsx index 003c1cf..f7670dd 100644 --- a/src/Pages/perfil/RouterAdmin.jsx +++ b/src/basura/RouterAdmin0.jsx @@ -1,7 +1,8 @@ -import React from 'react' +/* import React from 'react' export const RouterAdmin = () => { return (
RouterAdmin
) } + */ \ No newline at end of file diff --git a/src/Pages/perfil/testRenderforAdminnUser/RouterUser.jsx b/src/basura/RouterUser.jsx similarity index 57% rename from src/Pages/perfil/testRenderforAdminnUser/RouterUser.jsx rename to src/basura/RouterUser.jsx index 19588dc..1834476 100644 --- a/src/Pages/perfil/testRenderforAdminnUser/RouterUser.jsx +++ b/src/basura/RouterUser.jsx @@ -1,25 +1,24 @@ -import '../Account.css' +/* import '../Account.css' import { - BrowserRouter as Router, - Switch, + BrowserRouter as Router, Route, Routes, useNavigate } from 'react-router-dom'; -import {Horario} from '../../../componentes/horario/Horario' +import {Horario} from '../componentes/horario/Horario' //import {AccountAdmin} from './AccountAdmin' -import {AccountUser}from './AccountUser' -import {Asignador1} from '../../../componentes/asignador/Asignador1'; -import { Bienvenida } from '../../../componentes/Bienvenida'; -import {Ubicacion} from '../../../componentes/horario/Ubicacion' -import {Obra} from '../../../componentes/horario/Obra' -import {Semana} from '../../../componentes/horario/Semana' -import {Trabajador} from '../../../componentes/horario/Trabajador' -import { Asignadorendiseño} from '../../../componentes/asignador/Asignadorendiseño'; -import { Presupuesto } from '../../../componentes/horario/Presupuesto'; -import ProtectedRouteAsignador from '../ProtectedRouteAsignador' -import {CreadorUsuarios} from '../../../componentes/usuarios/CreadorUsuarios' +import {AccountUser}from '../Pages/perfil/AccountUser' +import {Asignador1} from '../componentes/asignador/Asignador1'; +import { WelcomeHome} from '../componentes/WelcomeHome'; +import {Ubicacion} from '../../../../componentes/WelcomeHomecion' +import {Obra} from '../componentes/horario/Obra' +import {Semana} from '../componentes/horario/Semana' +import {Trabajador} from '../componentes/horario/Trabajador' +import { Asignadorendiseño} from '../componentes/asignador/Asignadorendiseño'; +import { Presupuesto } from '../componentes/horario/Presupuesto'; +import ProtectedRouteAsignador from '../Pages/perfil/ProtectedRouteAsignador' +import {CreadorUsuarios} from '../componentes/usuarios/CreadorUsuarios' export default function RouterAdmin() { return ( @@ -28,17 +27,9 @@ export default function RouterAdmin() { } > } + element={} /> - - {/* - - - }/> - */} + } /> { return (
RouterUser
) } + */ \ No newline at end of file diff --git a/src/componentes/RH/BuscadorTrabajador.jsx b/src/componentes/RH/BuscadorTrabajador.jsx new file mode 100644 index 0000000..ddd28cf --- /dev/null +++ b/src/componentes/RH/BuscadorTrabajador.jsx @@ -0,0 +1,100 @@ +import React, { useState, useEffect, useContext } from 'react'; +import {BsArrowLeftCircle} from 'react-icons/bs' +import { query, collection, onSnapshot, doc, getDoc, where, setDoc, updateDoc, limit } from 'firebase/firestore'; +import { db } from '../../firebase/firebase' +import List from '@mui/material/List'; +import ListItemButton from '@mui/material/ListItemButton'; +import ListItemText from '@mui/material/ListItemText'; +import Divider from '@mui/material/Divider'; +import { Button, Form, InputGroup } from 'react-bootstrap' +import { + useNavigate +} from 'react-router-dom'; +import UiContext from '../../context/UiContext'; + + + + +const style = { + width: '100%', + maxWidth: 360, + bgcolor: 'background.paper', +}; + + +const BuscadorTrabajador = () => { + + const [searchTerm, setSearchTerm] = useState(''); + const [results, setResults] = useState([]); + const {ToggleRH, setToggleRH, setInFormulario + }=useContext(UiContext) + const navigate = useNavigate(); + useEffect(() => { + const collectionRef = query(collection(db,'users'), where('nombre', '>=', searchTerm) + ,where('nombre', '<=', searchTerm + '\uf8ff') + ,limit(10)); + + + + onSnapshot(collectionRef, snapshot => { + const updatedResults = snapshot.docs.map(doc => ({ + id: doc.id, + ...doc.data() + })); + setResults(updatedResults); + }); + }, [searchTerm]); + + return ( +
+ + + + Buscar + setSearchTerm(e.target.value).toUpperCase()} + onKeyUp={e => e.target.value = e.target.value.toUpperCase()} + /> + + + + + + {results.map(result => { + +return( +
+ + { + navigate(`../trabajadores/formulariodatostrabajador/${result.id}`, {replace:true}) + setInFormulario(true) + }}/> + + +
+ +) + + + + + + + +})} + +
+
+ ); +}; + +export default BuscadorTrabajador; \ No newline at end of file diff --git a/src/componentes/RH/CrearTrabajador/CreadorTrabajador.jsx b/src/componentes/RH/CrearTrabajador/CreadorTrabajador.jsx new file mode 100644 index 0000000..d4056ec --- /dev/null +++ b/src/componentes/RH/CrearTrabajador/CreadorTrabajador.jsx @@ -0,0 +1,14 @@ +import React from 'react' +import { FormCreadorUser } from './FormCreadorUsuarios' +import Grid from '@mui/material/Grid' +export const CreadorTrabajador = () => { + + + + + return ( + + + + ) +} diff --git a/src/componentes/RH/CrearTrabajador/FormCreadorUsuarios.jsx b/src/componentes/RH/CrearTrabajador/FormCreadorUsuarios.jsx new file mode 100644 index 0000000..1044d1d --- /dev/null +++ b/src/componentes/RH/CrearTrabajador/FormCreadorUsuarios.jsx @@ -0,0 +1,538 @@ +import React, {useState, useRef, useContext, useEffect} from 'react' +import { Form, Row, Col} from 'react-bootstrap' +import "react-datepicker/dist/react-datepicker.css"; +import { v4 as uuidv4 } from 'uuid'; +import {BsArrowLeftCircle} from 'react-icons/bs' +import { + useNavigate, Outlet + } from 'react-router-dom'; +import { ref, uploadBytes } from "firebase/storage"; + import GppGoodIcon from '@mui/icons-material/GppGood'; + import DatePicker from "react-datepicker"; +import "react-datepicker/dist/react-datepicker.css"; +import es from 'date-fns/locale/es'; +import { db } from '../../../firebase/firebase'; +import SelectSearch from "react-select-search"; +import 'react-select-search/style.css' +import UiContext from '../../../context/UiContext'; +import CEpointContext from '../../../context/CEpointContext'; +import {setDoc, doc } from 'firebase/firestore' +import { storage } from '../../../firebase/firebase'; +import Snackbar from '@mui/material/Snackbar'; +import MuiAlert from '@mui/material/Alert'; +import Chip from '@mui/material/Chip'; +import CircularProgress from '@mui/material/CircularProgress'; +import {options, searchArea, optionsEmpresas} from './options' +import TextField from '@mui/material/TextField'; +import Button from '@mui/material/Button'; +import IconButton from '@mui/material/IconButton'; +import PhotoCamera from '@mui/icons-material/PhotoCamera'; +import Stack from '@mui/material/Stack'; +import CardMedia from '@mui/material/CardMedia'; +import Backdrop from '@mui/material/Backdrop'; +import Box from '@mui/material/Box'; +import Modal from '@mui/material/Modal'; +import Fade from '@mui/material/Fade'; + +import Typography from '@mui/material/Typography'; +import usuarioImg from './user.jpg' +import Webcam from "react-webcam"; + + +const style = { + position: 'absolute', + top: '50%', + left: '50%', + transform: 'translate(-50%, -50%)', + width: 400, + bgcolor: 'background.paper', + border: '2px solid #000', + boxShadow: 24, + p: 4, + }; + + + const Alert = React.forwardRef(function Alert(props, ref) { + return ; + }); + + +export const FormCreadorUser = () => { + + + + const { setToggleRH, setInFormulario, inFormulario }=useContext(UiContext) + const {state} = useContext(CEpointContext) + + const navigate = useNavigate(); + + console.log('InFormulario', inFormulario) + const [error, setError] = useState(''); + + + + + + const [IdUsario, setIdUsuario]=useState() + + + + + + + + + + + + + + console.log('uid:', IdUsario) + + + + + + +function searchDato(dato) { + return dato; +} + + + + + + const nombreRef= useRef(null) + const NssRef = useRef(null) + //Fecha de nacimiento + const addFeNacRef=useRef(null) + + const emailRef = useRef(null) + const telefonoUnoRef = useRef(null) + const telefonoDosRef = useRef(null) + + const domicilioRef = useRef(null) + const fechaIngresoRef= useRef(null) + +const [Perfil, setPerfil] = useState('') +const [Empresa, setEmpresa]= useState('Elige empresa') +const [startDate, setStartDate] = useState(new Date()); +const [Image, setImage] = useState(null) +const [openCamera, setOpenCamera] = useState(false) +const [backdropOpen, setBackdropOpen] = useState(false); +const [snackbarOpen, setSnackbarOpen] = useState(false); + +const handleBackdropClose = () => { + setBackdropOpen(false); + }; + + const handleSnackbarClose = (event, reason) => { + if (reason === 'clickaway') { + return; + } + setSnackbarOpen(false); + }; + + +const handleOpen = () => {setOpenCamera(true) + console.log(openCamera)}; +const handleClose = () => setOpenCamera(false); + + const cameraRef = useRef(null); + + const capture = React.useCallback( + () => { + const imageSrc = cameraRef.current.getScreenshot(); + setImage(imageSrc); + setOpenCamera(false) + + }, + [cameraRef] + ); + useEffect(()=> { + const test= ()=> { + if(!Image){ + console.log() + } + } + test() +},[Image]) + +const handleChange = (event) => { + setImage(URL.createObjectURL(event.target.files[0])); + }; + + +useEffect(()=>{ + setIdUsuario(uuidv4()) +},[]) + + + + +const handleregisterUser = async (e)=> { + e.preventDefault(); + try{ + setError('') + setBackdropOpen(true); + const docuRef =doc(db, `users/${IdUsario}`); + setDoc(docuRef, { + nombre: nombreRef.current , + nss:NssRef.current, + perfil: searchDato(Perfil), + empresa:searchDato(Empresa), + area: searchArea(Perfil), + fechaIngreso:fechaIngresoRef.current, + domicilio: domicilioRef.current, + email:emailRef.current, + telefonoTrabajador: telefonoUnoRef.current, + telefonoEmergencia:telefonoDosRef.current, + + activo: true, + ocupado: false, + UID:IdUsario, + fechaDeCreacion: Date(), + alergias:[], + hitoriaClinica:[], + licencia: false, + herramientas:[], + Miscelaneos:[], + Maquinaria:[] + + } + ).then( + uploadFile(Image) + + + ).then( + ()=>{ + navigate(`../../recursosHumanos/trabajadores/formulariodatostrabajador/${IdUsario}`, {replace:true}) + setInFormulario(true) + setPerfil(""); + setEmpresa(""); + setImage(null) + nombreRef.current = ""; + NssRef.current = ""; + addFeNacRef.current = ""; + emailRef.current = ""; + telefonoUnoRef.current = ""; + telefonoDosRef.current = ""; + domicilioRef.current = ""; + fechaIngresoRef.current = ""; + } + ) + + setTimeout(() => { + setBackdropOpen(false); + setSnackbarOpen(true); + setIdUsuario(uuidv4()); + + + + }, 2000); + + + } catch(e) { + setError(e.message) + console.log(e.message) + + } + }; + + + async function uploadFile(file) { + const blob = await new Promise((resolve, reject)=>{ + const xhr = new XMLHttpRequest() + xhr.onload= function (){ + resolve(xhr.response); + }; + xhr.responseType ="blob"; + xhr.open("GET", file, true); + xhr.send(null) + }) + + const storageRef = ref(storage, `cepoint/${nombreRef.current}`) + uploadBytes(storageRef, blob).then((snapshot)=>{ + console.log('Uploaded a data_url string!') + }) + + } + + + + + + + + + + + + + + + + + return ( + <>{ + + inFormulario?Outlet:<> + + + + + + This is a success message! + + + + + + + + + + + + + +
+} color="success" /> + + + + + +
+ + + + + Nombre del trabajador +
+ + { + + nombreRef.current = e.target.value.toUpperCase(); + }} + /> + + + +
+ + NSS +
+ { + + NssRef.current = e.target.value.toUpperCase(); + }} + /> + + +
+ + + + +
+ + + + Perfil +
+ + +
+ + +Elige su empresa + + + + +
+ + + + + Fecha de ingreso +
+
+ { + setStartDate(date); + fechaIngresoRef.current = date;}} locale={es} /> +
+ + Email +
+ { + + emailRef.current = e.target.value; + }} + /> + +
+ +
+ + + + Telefono +
+ { + + telefonoUnoRef.current = e.target.value; + }} + /> + +
+ + Telefono de emergencia +
+ { + + telefonoDosRef.current = e.target.value; + }} + /> + +
+ +
+ + + + + Domicilio +
+ { + + domicilioRef.current = e.target.value; + }} + /> + + +
+ + + Fecha de nacimiento +
+
+ { + setStartDate(date); + addFeNacRef.current = date;}} locale={es} /> +
+
+ + + + + + + Agrega foto de trabajador + + + + + + + + + + + + + Tomar foto + + + + + + + + + + + + +
+ + +
+
+ + } + + + ) +} \ No newline at end of file diff --git a/src/componentes/RH/CrearTrabajador/options.js b/src/componentes/RH/CrearTrabajador/options.js new file mode 100644 index 0000000..0b48786 --- /dev/null +++ b/src/componentes/RH/CrearTrabajador/options.js @@ -0,0 +1,226 @@ +export const options = [ + + { + type: "group", + name: "CIVILES", + items: [ + + { name: "Residente de obra", value: "Residente de obra" }, + { name: "Arquitecto proyectista", value: "Arquitecto proyectista" }, + { name: "Administrador de obra", value: "Administrador de obra"}, + { name: "Cabo albañil", value: "Cabo albañil" }, + { name: "Oficial albañil", value: "Oficial albañil" }, + { name: "Oficial medio albañil", value: "Oficial medio albañil" }, + { name: "Ayudante albañil", value: "Ayudante albañil" }, + { name: "Ayudante general", value: "Ayudante general" }, + { name: "Operador", value: "Operador" } + + ] + }, + { + type: "group", + name: "SEGURIDAD E HIGIENE", + items: [ + { name: "Coordinador de SHE", value: "Coordinador de SHE" }, + { name: "Supervision de SHE", value: "Supervision de SHE" } + + ] + }, + { + type: "group", + name: "ELECTRICOS", + items: [ + { name: "Residente electrico", value: "Residente electrico" }, + { name: "Oficial electrico", value: "Oficial electrico" }, + { name: "Ayudante electrico", value: "Ayudante electrico" } + ] + }, + { + type: "group", + name: "HERRERIA", + items: [ + { name: " Cabo soldador", value: "Cabo soldador" }, + { name: "Soldador", value: "Soldador" }, + { name: "Herrero", value: "Herrero" }, + { name: "Ayudante de soldador", value: "Ayudante de soldador" }, + { name: "Maestro aluminiero", value: "Maestro aluminiero" }, + ] + }, + { + type: "group", + name: "DIRECCION", + items: [ + { name: "Director MacBrick", value: "Director MacBrick" }, + { name: "Director inmobiliaria", value: "Director inmobiliaria" }, + { name: "Director SIARSA", value: "Director SIARSA" }, + { name: "Director SECMA", value: "Director SECMA" }, + { name: "Director CE2000", value: "Director CE2000" }, + { name: "Director SOLCOM", value: "Director SOLCOM" } + ] + }, + { + type: "group", + name: "SIARSA", + items: [ + { name: "Gerente de operaciones", value: "Gerente de operaciones" }, + { name: "Tecnico especialista", value: "Tecnico especialista" } + ] + }, + { + type: "group", + name: "SECMA", + items: [ + { name: "Proyectos CCTV", value: "Proyectos CCTV" }, + { name: "Operacion CCTV", value: "Operacion CCTV" }, + { name: "Tecnico CCTV", value: "Tecnico CCTV" } + ] + }, + { + type: "group", + name: "SOLCOM", + items: [ + { name: "Asistente Direccion", value: "Asistente Direccion" } + + ] + }, + { + type: "group", + name: "ALMACEN", + items: [ + { name: "Chofer", value: "Chofer" } + + ] + }, + { + type: "group", + name: "CORPORATIVO", + items: [ + { name: "Portero", value: "Portero" } + + ] + } + + ]; + + export function searchArea(dato) { + let area; + switch (dato) { + case "CHECADOR": + area = "CUENTAKEYCHECADOR"; + break; + case "Residente de obra": + area = "CIVIL"; + break; + case "Arquitecto proyectista": + area = "CIVIL"; + break; + case "Cabo albañil": + area = "CIVIL"; + break; + case "Administrador de obra": + area = "CIVIL"; + break; + + case "Oficial albañil": + area = "CIVIL"; + break; + case "Ayudante albañil": + area = "CIVIL"; + break; + case "Ayudante general": + area = "CIVIL"; + break; + case "Oficial medio albañil": + area = "CIVIL"; + break; + case "Operador": + area = "CIVIL"; + break; + case "Director MacBrick": + area = "CIVIL"; + break; + case "Director inmobiliaria": + area = "CIVIL"; + break; + case "Director CE2000": + area = "CIVIL"; + break; + case "Coordinador de SHE": + area = "SHE"; + break; + case "Supervision de SHE": + area = "SHE"; + break; + case "Residente electrico": + area = "ELECTRICOS"; + break; + case "Oficial electrico": + area = "ELECTRICOS"; + break; + case "Ayudante electrico": + area = "ELECTRICOS"; + break; + case "Cabo soldador": + area = "HERREROS"; + break; + case "Soldador": + area = "HERREROS"; + break; + case "Herrero": + area = "HERREROS"; + break; + case "Ayudante de soldador": + area = "HERREROS"; + break; + case "Maestro aluminiero": + area = "HERREROS"; + break; + case "Director SIARSA": + area = "SIARSA"; + break; + case "Gerente de operaciones": + area = "SIARSA"; + break; + case "Tecnico especialista": + area = "SIARSA"; + break; + case "Director SECMA": + area = "SECMA"; + break; + case "Proyectos CCTV": + area = "SECMA"; + break; + case "Operacion CCTV": + area = "SECMA"; + break; + case "Tecnico CCTV": + area = "SECMA"; + break; + case "Director SOLCOM": + area = "SOLCOM"; + break; + case "Asistente Direccion": + area = "SOLCOM"; + break; + case "Chofer": + area = "CORPORATIVO"; + break; + case "Portero": + area = "CORPORATIVO"; + break; + + + + } + console.log('funcion:', area) + //setArea(area) + return area; + } + export const optionsEmpresas=[ + {name: 'CE2000', value: 'CE2000'}, + {name: 'SECMA', value: 'SECMA'}, + {name: 'SIARSA', value: 'SIARSA'}, + {name: 'MCBRICK', value: 'MCBRICK'}, + {name: 'SOLCOM', value: 'SOLCOM'}, + {name: 'INMOBILIARIA', value: 'INMOBILIARIA'} + ] \ No newline at end of file diff --git a/src/componentes/RH/CrearTrabajador/shakira-cambios-look-pelo-kzqD-U190238490989BCD-1248x1248@MujerHoy.jpg b/src/componentes/RH/CrearTrabajador/shakira-cambios-look-pelo-kzqD-U190238490989BCD-1248x1248@MujerHoy.jpg new file mode 100644 index 0000000..26dd312 Binary files /dev/null and b/src/componentes/RH/CrearTrabajador/shakira-cambios-look-pelo-kzqD-U190238490989BCD-1248x1248@MujerHoy.jpg differ diff --git a/src/componentes/RH/CrearTrabajador/user.jpg b/src/componentes/RH/CrearTrabajador/user.jpg new file mode 100644 index 0000000..d40116d Binary files /dev/null and b/src/componentes/RH/CrearTrabajador/user.jpg differ diff --git a/src/componentes/RH/DrawerComp.jsx b/src/componentes/RH/DrawerComp.jsx new file mode 100644 index 0000000..7fad55e --- /dev/null +++ b/src/componentes/RH/DrawerComp.jsx @@ -0,0 +1,256 @@ +import * as React from 'react'; +import Box from '@mui/material/Box'; +import SwipeableDrawer from '@mui/material/SwipeableDrawer'; +import Button from '@mui/material/Button'; +import Popper from '@mui/material/Popper'; +import List from '@mui/material/List'; +import Divider from '@mui/material/Divider'; +import ListItem from '@mui/material/ListItem'; +import ListItemButton from '@mui/material/ListItemButton'; +import ListItemIcon from '@mui/material/ListItemIcon'; +import ListItemText from '@mui/material/ListItemText'; +import InboxIcon from '@mui/icons-material/MoveToInbox'; +import MailIcon from '@mui/icons-material/Mail'; +import IconButton from '@mui/material/IconButton'; +import FolderIcon from '@mui/icons-material/Folder'; +import DeleteIcon from '@mui/icons-material/Delete'; +import { options } from './CrearTrabajador/options'; +import Accordion from '@mui/material/Accordion'; +import AccordionDetails from '@mui/material/AccordionDetails'; +import AccordionSummary from '@mui/material/AccordionSummary'; +import Typography from '@mui/material/Typography'; +import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; +import ListItemAvatar from '@mui/material/ListItemAvatar'; +import Avatar from '@mui/material/Avatar'; +import Input from '@mui/material/Input'; +import DoneOutlineOutlinedIcon from '@mui/icons-material/DoneOutlineOutlined'; +import Chip from '@mui/material/Chip'; +import EngineeringIcon from '@mui/icons-material/Engineering'; +import AddIcon from '@mui/icons-material/Add'; +import Grid from '@mui/material/Grid' +import TextField from '@mui/material/TextField'; +import Dialog from '@mui/material/Dialog'; +import DialogActions from '@mui/material/DialogActions'; +import DialogContent from '@mui/material/DialogContent'; +import DialogContentText from '@mui/material/DialogContentText'; +import DialogTitle from '@mui/material/DialogTitle'; +import { styled } from '@mui/material/styles'; +import InputLabel from '@mui/material/InputLabel'; +import MenuItem from '@mui/material/MenuItem'; +import FormControl from '@mui/material/FormControl'; +import NativeSelect from '@mui/material/NativeSelect'; +import InputBase from '@mui/material/InputBase'; + +const BootstrapInput = styled(InputBase)(({ theme }) => ({ + 'label + &': { + marginTop: theme.spacing(3), + }, + '& .MuiInputBase-input': { + borderRadius: 4, + position: 'relative', + backgroundColor: theme.palette.background.paper, + border: '1px solid #ced4da', + fontSize: 16, + padding: '10px 26px 10px 12px', + transition: theme.transitions.create(['border-color', 'box-shadow']), + // Use the system font instead of the default Roboto font. + fontFamily: [ + '-apple-system', + 'BlinkMacSystemFont', + '"Segoe UI"', + 'Roboto', + '"Helvetica Neue"', + 'Arial', + 'sans-serif', + '"Apple Color Emoji"', + '"Segoe UI Emoji"', + '"Segoe UI Symbol"', + ].join(','), + '&:focus': { + borderRadius: 4, + borderColor: '#80bdff', + boxShadow: '0 0 0 0.2rem rgba(0,123,255,.25)', + }, + }, +})); + + +export default function DrawerComp({state, toggleDrawer}) { + + + const [expanded, setExpanded] = React.useState(false); + + const handleChange = (panel) => (event, isExpanded) => { + setExpanded(isExpanded ? panel : false); + }; + +console.log(JSON.stringify(options)) + +const [open, setOpen] = React.useState(false); + +const handleClickOpen = () => { + setOpen(true); +}; + +const handleClose = () => { + setOpen(false); +}; + + + const list = () => ( + +
+
+
+
+
+
+ + + + } label={

Puestos, Cargos

} />
+ + } onClick={handleClickOpen} > + + + + + + Agrega un puesto + + + + AREA + } + > + +{options.map((e)=>{ + return +})} + + + + + + + + + + + + + + +
+ + + + + +
+{ +options.map((element) => { + + + return + } + aria-controls="panel1bh-content" + id="panel1bh-header" + > + + {element.name} + + + + + { + element.items.map( + (item)=>{ +return + + + + + + + } + > + + + + + + + + + + + + } + ) + } + + + + + +})} + + + + +
+ + + + + + + + {/* */} +
+ ); + + return ( +
+ + + + + {list()} + + + +
+ ); +} \ No newline at end of file diff --git a/src/componentes/RH/RH1.jpg b/src/componentes/RH/RH1.jpg new file mode 100644 index 0000000..1de25d0 Binary files /dev/null and b/src/componentes/RH/RH1.jpg differ diff --git a/src/componentes/RH/RH2.jpg b/src/componentes/RH/RH2.jpg new file mode 100644 index 0000000..03ef959 Binary files /dev/null and b/src/componentes/RH/RH2.jpg differ diff --git a/src/componentes/RH/RecursosHumanos.jsx b/src/componentes/RH/RecursosHumanos.jsx new file mode 100644 index 0000000..449092f --- /dev/null +++ b/src/componentes/RH/RecursosHumanos.jsx @@ -0,0 +1,363 @@ +import React, {useContext, useState} from 'react' +import { Container, Row, Col, } from 'react-bootstrap' +import { useNavigate, Outlet } from 'react-router-dom' +//import './recursoshumanos.css' +import UiContext from '../../context/UiContext' +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { faHospitalUser } from "@fortawesome/free-solid-svg-icons"; +import SwipeableDrawer from '@mui/material/SwipeableDrawer'; +import Grid from '@mui/material/Grid' +import Paper from '@mui/material/Paper'; +import Button from '@mui/material/Button'; +import ButtonBase from '@mui/material/ButtonBase'; +import Box from '@mui/material/Box'; +import Drawer from '@mui/material/Drawer'; +import List from '@mui/material/List'; +import Divider from '@mui/material/Divider'; +import ListItem from '@mui/material/ListItem'; +import ListItemButton from '@mui/material/ListItemButton'; +import ListItemIcon from '@mui/material/ListItemIcon'; +import ListItemText from '@mui/material/ListItemText'; +import DrawerComp from './DrawerComp'; +import { addDays } from 'date-fns'; +import { createTheme, ThemeProvider, styled } from '@mui/material/styles'; +import RH1 from './RH1.jpg' +import RH2 from './RH2.jpg' +import Typography from '@mui/material/Typography'; + +const theme = createTheme({ + + capaRH1: { + + alignItems: 'center', + justifyContent: 'center', + cursor: 'pointer', + backgroundColor: '#1C1C1E', + color: '#EAE2E0', +/* '& h1': { + fontSize: '2em', + [theme.breakpoints.down('sm')]: { + fontSize: '1.5em', + }, + }, */ +/* '& p': { + fontSize: '1.5em', + [breakpoints.down('sm')]: { + fontSize: '1.2em', + }, + }, */ + }, + capaMiscelaneos: { + + alignItems: 'center', + justifyContent: 'center', + cursor: 'pointer', + backgroundColor: '#1C1C1E', + color: '#EAE2E0', + /* '& h2': { + fontSize: '2em', + [theme.breakpoints.down('sm')]: { + fontSize: '1.5em', + }, + }, */ + /* '& p': { + fontSize: '1.5em', + [theme.breakpoints.down('sm')]: { + fontSize: '1.2em', + }, + }, */ + }, +/* button: { + [theme.breakpoints.down('sm')]: { + width: '100%', + }, + }, */ +}) + +const Img = styled('img')({ + margin: 'auto', + display: 'block', + maxWidth: '100%', + maxHeight: '70%', +}); + + + +const ImageButton = styled(ButtonBase)(({ theme }) => ({ + position: 'relative', + height: 500, + [theme.breakpoints.down('sm')]: { + width: '100% !important', // Overrides inline-style + height: 500, + }, + '&:hover, &.Mui-focusVisible': { + zIndex: 1, + '& .MuiImageBackdrop-root': { + opacity: 0.15, + }, + '& .MuiImageMarked-root': { + opacity: 0, + }, + '& .MuiTypography-root': { + border: '4px solid currentColor', + }, + }, +})); + +const ImageSrc = styled('span')({ + position: 'absolute', + left: 0, + right: 0, + top: 0, + bottom: 0, + backgroundSize: 'cover', + backgroundPosition: 'center 50%', +}); + +const Image = styled('span')(({ theme }) => ({ + position: 'absolute', + left: 0, + right: 0, + top: 0, + bottom: 0, + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + color: theme.palette.common.white, +})); + +const ImageBackdrop = styled('span')(({ theme }) => ({ + position: 'absolute', + left: 0, + right: 0, + top: 0, + bottom: 0, + backgroundColor: theme.palette.common.black, + opacity: 0.4, + transition: theme.transitions.create('opacity'), +})); + +const ImageMarked = styled('span')(({ theme }) => ({ + height: 3, + width: 18, + backgroundColor: theme.palette.common.white, + position: 'absolute', + bottom: -2, + left: 'calc(50% - 9px)', + transition: theme.transitions.create('opacity'), +})); + + + + +/* const Img = styled('img')({ + margin: 'auto', + display: 'block', + maxWidth: '100%', + maxHeight: '70%', +}); */ + + + +const ImageButtonBT = styled(ButtonBase)(({ theme }) => ({ + position: 'relative', + height: 500, + [theme.breakpoints.down('sm')]: { + width: '100% !important', // Overrides inline-style + height: 500, + }, + '&:hover, &.Mui-focusVisible': { + zIndex: 1, + '& .MuiImageBackdrop-root': { + opacity: 0.15, + }, + '& .MuiImageMarked-root': { + opacity: 0, + }, + '& .MuiTypography-root': { + border: '4px solid currentColor', + }, + }, +})); + + + +export const RecursosHumanos = () => { + + const {ToggleRH, setToggleRH, setInFormulario}=useContext(UiContext) + + const navigate = useNavigate(); + + console.log('ToggleRH',ToggleRH) + + + +const [x, setX]=useState(false) +const [state, setState] = React.useState(false); +const toggleDrawer = () => () => { + /* if ( + event && + event.type === 'keydown' && + (event.key === 'Tab' || event.key === 'Shift') + ) { + return; + } + */ + setState(!state); + }; + + +return ( + + ToggleRH + ? + : + + + + + + {/* Chart */} + { + setToggleRH(true); + navigate('trabajadores'); + setInFormulario(false); + + }}> + + + + + + + `calc(${theme.spacing(1)} + 6px)`, + }} + > +

Trabajadores

+

Gestion de personal

+ +
+ + +
+ + + + + + +
+
+ + + + + + + { + setToggleRH(true); + navigate('buscadorTrabajador'); + }} > + + + + + `calc(${theme.spacing(1)} + 6px)`, + }} + > +

Busca a trabajador

+

Informacion de trabajador

+ +
+ + +
+ +
+ + + + + + + + +
+ + {/* + + */} + + + + + { + setToggleRH(true); + navigate('buscadorTrabajador'); + }}> + + + + + + + + +
+ + + ) +} diff --git a/src/componentes/RH/Trabajadores.jsx b/src/componentes/RH/Trabajadores.jsx new file mode 100644 index 0000000..76f9b48 --- /dev/null +++ b/src/componentes/RH/Trabajadores.jsx @@ -0,0 +1,37 @@ +import React, {useContext, useState} from 'react' +import {BsArrowLeftCircle} from 'react-icons/bs' +import { + useNavigate, Outlet +} from 'react-router-dom'; +import UiContext from '../../context/UiContext'; +import { Container, Button, Form, InputGroup, Nav } from 'react-bootstrap' +import TrabajadoresCards from './Trabajadores/TrabajadoresCards'; +import CEpointContext from '../../context/CEpointContext'; +export const Trabajadores = () => { + const navigate = useNavigate(); + const {ToggleRH, setToggleRH, inFormulario + }=useContext(UiContext) + + console.log('INFORMULARIO TRABAJADORES:', inFormulario) + + return ( + + + + + + +
+ +
+ + {inFormulario?: } + +
+ ) +} diff --git a/src/componentes/RH/Trabajadores/DatosTrabajador/ChildDatosTrabajadorAdd.jsx b/src/componentes/RH/Trabajadores/DatosTrabajador/ChildDatosTrabajadorAdd.jsx new file mode 100644 index 0000000..ec4bea7 --- /dev/null +++ b/src/componentes/RH/Trabajadores/DatosTrabajador/ChildDatosTrabajadorAdd.jsx @@ -0,0 +1,511 @@ +import React, {useState, useRef, useContext} from 'react' +import { Button, Form, Col, Row, InputGroup, ToggleButton, Overlay, Popover } from 'react-bootstrap' +import DatePicker, { registerLocale, setDefaultLocale } from "react-datepicker"; +import "react-datepicker/dist/react-datepicker.css"; +import es from 'date-fns/locale/es'; +import CEpointContext from '../../../../context/CEpointContext'; +import SelectSearch from "react-select-search"; +import 'react-select-search/style.css' +import { options, searchArea, optionsEmpresas } from '../../CrearTrabajador/options'; +export const ChildDatosTrabajadorAdd = ({dato, referencia, ID}) => { + + const { + fetchOnlyUser, + addNombre, + addNss, + addFeNacimiento, + addPerfil, + addEmpresa, + addTelefono, + addDomicilio, + addEmail }=useContext(CEpointContext) + + const [startDate, setStartDate] = useState(new Date()); + const [Perfil, setPerfil] = useState('') +const [Empresa, setEmpresa]= useState('') + + //Nombre + const addNombreRef=useRef(null) + //nss + const addNssRef=useRef(null) + //perfil + const addPerfilRef=useRef(null) + //empresa + const addEmpresaRef=useRef(null) + //Telefono + const addTelefonoRef=useRef(null) + //Fecha de nacimiento + const addFeNacRef=useRef(null) + //Domicilio + const addDomicilioRef=useRef(null) + //email + const addEmailRef=useRef(null) + + + const handleSubmit = (event) => { + event.preventDefault() + console.log(addDomicilioRef.current.value); + }; + + console.log(startDate) + + const [checked, setChecked] = useState(false); + const [show, setShow] = useState(false); + const [target, setTarget] = useState(null); + const ref = useRef(null); + + const handleClick = (event) => { + setShow(!show); + setTarget(event.target); + }; + +switch(referencia){ + + + case 'Nombre': + return( + + + + + + setChecked(e.currentTarget.checked)} + onClick={handleClick} + > + Ingresa {referencia} + + + + + Agrega {referencia} + + + + + + + + + + + ) + break; + + case 'nss': + return( + + + +
+ setChecked(e.currentTarget.checked)} + onClick={handleClick} + > + Ingresa {referencia} + + + + + Agrega {referencia} + + + + + + + + + + + + ) + break; + + + case 'Fecha Nacimiento': + return( + + + + +
+ setChecked(e.currentTarget.checked)} + onClick={handleClick} + > + Agrega {referencia} + + + + + Ingresa {referencia} + + + { + setStartDate(date); + addFeNacRef.current = date;}} locale={es} /> + + + + + + + + + + + + ) + break; + + case 'Perfil': + return( + + + + +
+ + + + + + + + + + + + + ) +break; + +case 'Telefono': + return( + + + + +
+ setChecked(e.currentTarget.checked)} + onClick={handleClick} +> + Ingresa {referencia} + + + + + Agrega {referencia} + + + + + + + + + + + ) +break; +case 'Empresa': +return( + + + +
+ + + + + + + + + + + +) +break; +case 'Domicilio': + return( + + + + +
+ setChecked(e.currentTarget.checked)} + onClick={handleClick} + > + Ingresa {referencia} + + + + + Agrega {referencia} + + + Example textarea + +
+ +
+
+ +
+
+ + + + + + ) + break; + +case 'Email': +return( + + + + +
+ setChecked(e.currentTarget.checked)} + onClick={handleClick} +> + Ingresa {referencia} + + + + + Agrega {referencia} + + + + + + + + + + +) +break; + + + + + + +} + + + + + +} diff --git a/src/componentes/RH/Trabajadores/DatosTrabajador/ChildDatosTrabajadorUpdate.jsx b/src/componentes/RH/Trabajadores/DatosTrabajador/ChildDatosTrabajadorUpdate.jsx new file mode 100644 index 0000000..ed35138 --- /dev/null +++ b/src/componentes/RH/Trabajadores/DatosTrabajador/ChildDatosTrabajadorUpdate.jsx @@ -0,0 +1,572 @@ +import React, {useState, useRef, useContext} from 'react' +import { Button, Form, Col, Row, InputGroup, ToggleButton, Overlay, Popover } from 'react-bootstrap' +import DatePicker, { registerLocale, setDefaultLocale } from "react-datepicker"; +import "react-datepicker/dist/react-datepicker.css"; +import es from 'date-fns/locale/es'; +import CEpointContext from '../../../../context/CEpointContext'; +import SelectSearch from "react-select-search"; +import 'react-select-search/style.css' +import { options, searchArea, optionsEmpresas } from '../../CrearTrabajador/options'; +export const ChildDatosTrabajadorUpdate = ({dato, referencia, ID}) => { + + const { + fetchOnlyUser, + acNombre, + acNss, + acFeNacimiento, + acPerfil, + acEmpresa, + acTelefono, + acDomicilio, + acEmail}=useContext(CEpointContext) + + +//Nombre +const acNombreRef=useRef(null) +//nss +const acNssRef=useRef(null) +//perfil +const acPerfilRef=useRef(null) +//empresa +const acEmpresaRef=useRef(null) +//Telefono +const acTelefonoRef=useRef(null) +//Fecha de nacimiento +const acFeNacRef=useRef(null) +//Domicilio +const acDomicilioRef=useRef(null) +//email +const acEmailRef=useRef(null) + + + +const [Perfil, setPerfil] = useState('') +const [Empresa, setEmpresa]= useState('') + +const [startDate, setStartDate] = useState(new Date()); + + +const handleSubmit = (event) => { + event.preventDefault(); + console.log(acEmailRef.current.value); + + + + + +}; + + + + const [show, setShow] = useState(false); + const [target, setTarget] = useState(null); + const ref = useRef(null); + + const handleClick = (event) => { + setShow(!show); + setTarget(event.target); + }; + + + + + + + +console.log(acPerfilRef) + + + + + switch(referencia){ + + + + + case 'Nombre': + return( + + + + + +
+ + + + + + + + + + + Actualiza {referencia} + + + + + + + + + + + + + + + ) + break; + + case 'nss': + return( + + + + +
+ + + + + + + + + + + Actualiza {referencia} + + + + + + + + + + + + + + + ) + break; + + + case 'Fecha Nacimiento': + return( + + + + + + + + + + + + + + + + Actualiza {referencia} + + + { + setStartDate(date); + acFeNacRef.current = date;}} locale={es} /> + + + + + + + + + + + + + ) + break; + + case 'Perfil': + return( + + + + +
+ + + + + + + + + + + + + + + + + ) + break; + + case 'Telefono': + return( + + + + +
+ + + + + + + + + + + Actualiza {referencia} + + + + + + + + + + + + + + + ) + break; + case 'Empresa': + return( + + + +
+ + + + + + + + + + + + + + + + ) + break; + case 'Domicilio': + return( + + + + + br + + + + + + + + Actualiza {referencia} + + + Example textarea + + + + + + + + + + + + + ) + break; + + + case 'Email': + return( + + + + + +
+ + + + + + + + + + + Actualiza {referencia} + + + + + + + + + + + + + ) +break; + + + } + + + + + + + + + + + + + + + + + + + + + + +} diff --git a/src/componentes/RH/Trabajadores/DatosTrabajador/DatosTrabajador.jsx b/src/componentes/RH/Trabajadores/DatosTrabajador/DatosTrabajador.jsx new file mode 100644 index 0000000..4992145 --- /dev/null +++ b/src/componentes/RH/Trabajadores/DatosTrabajador/DatosTrabajador.jsx @@ -0,0 +1,96 @@ +import React, {useState, useRef} from 'react' +import { Button, Form, Col, Row, InputGroup, ToggleButton, Overlay, Popover } from 'react-bootstrap' + +import { ChildDatosTrabajadorAdd } from './ChildDatosTrabajadorAdd'; +import { ChildDatosTrabajadorUpdate } from './ChildDatosTrabajadorUpdate'; +function DatosTrabajador({prop}) { + + + + + + return ( +<> + + + + {prop.nombre==undefined? : } + + + + + + + {prop.nss==undefined? : } + + + + + + + + +
+{prop.fechaNacimiento==undefined? : } + + + + + {prop.perfil==undefined? : } + + +
+ + + + + + + + {prop.telefono==undefined? : } + + + + + {prop.empresa==undefined? : } + + + + + + + + + {prop.domicilio==undefined? : } + + + + + {prop.email==undefined? : } + + + + + + Agrega licencia + + {/* + {errors.file} + */} + + + + + + + + ) +} + +export default DatosTrabajador \ No newline at end of file diff --git a/src/componentes/RH/Trabajadores/FormularioDatosTrabajador.jsx b/src/componentes/RH/Trabajadores/FormularioDatosTrabajador.jsx new file mode 100644 index 0000000..1b35bef --- /dev/null +++ b/src/componentes/RH/Trabajadores/FormularioDatosTrabajador.jsx @@ -0,0 +1,278 @@ +import React, {useContext, useState, useRef} from 'react' +import { Container, Button, Card, Form, Col, Accordion, Row, Modal, Tab, Tabs, InputGroup, Badge, ToggleButton, Overlay, Popover } from 'react-bootstrap' +import {BsArrowLeftCircle, BsPersonPlusFill, BsHandThumbsDownFill} from 'react-icons/bs' +import UiContext from '../../../context/UiContext' +import CEpointContext from '../../../context/CEpointContext' +import { TYPES } from '../../../redux/Types' +import DatosTrabajador from './DatosTrabajador/DatosTrabajador' +import { + useParams +} from 'react-router-dom'; +import { useEffect } from 'react' +import Chip from '@mui/material/Chip'; +import { toDataURL } from 'qrcode'; +export const FormularioDatosTrabajador = () => { + + const{ inFormulario, + setInFormulario }= useContext(UiContext) + const [key, setKey] = useState('almacen'); + const{ state, dispatch, fetchOnlyTrabajador }= useContext(CEpointContext) + const [show, setShow] = useState(false); + const [QRurl, setQRurl]= useState() + const handleClose = () => setShow(false); + const handleShow = () => setShow(true); + + const {Id} =useParams() +/* +algoritmo: +*/ + +useEffect(()=>{ + + fetchOnlyTrabajador(Id) + +},[]) + + +useEffect(()=>{ + toDataURL(`${Id}`, function (err, url) { + console.log(url) + setQRurl(url) +})} ,[]) + + return ( + + + + + + +

{state.OnlyTrabajador.nombre}

+ + + + {state.OnlyTrabajador.area} + +
+

{state.OnlyTrabajador.perfil}

+ + + + + +

Antiguedad

+ + {' '} + + + + Se dara de baja a: + + +

{state.OnlyTrabajador.nombre}

+
+ + + + +
+ + +
+ +
+ + + + + + + +
+ + + + + + + + + + +
+ + + + + +
+ + + + + + Informacion de Trabajador + +

Datos del trabajador

+ + +
+
+ + Informacion medica de trabajador + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Alergias + -Example + + + + + Enfermedades + -Example + + + + + Historia clinica + -Example + + + + + + + + + Expediente + + +//Documentos escaneados + + + + Estado del trabajador + + setKey(k)} + className="mb-3" + > + + //Herramientas + //Miscelaneos + //Maquinaria + + + //Nomina + + + + + + +
+ + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + +
+ + ) +} + diff --git a/src/componentes/RH/Trabajadores/QrGen.jsx b/src/componentes/RH/Trabajadores/QrGen.jsx new file mode 100644 index 0000000..1437a7a --- /dev/null +++ b/src/componentes/RH/Trabajadores/QrGen.jsx @@ -0,0 +1,32 @@ +import React,{useContext, useState} from 'react' +import { Button, Modal } from 'react-bootstrap'; + + + + + + +export const QrGen = ({ show ,onHide, trabajador, QRurl}) => { + return ( + + + + {trabajador} + + + +

Descargar codigo QR

+ +
+ + + +
+ ); + } \ No newline at end of file diff --git a/src/componentes/RH/Trabajadores/TrabajadorCard.jsx b/src/componentes/RH/Trabajadores/TrabajadorCard.jsx new file mode 100644 index 0000000..4d4ef80 --- /dev/null +++ b/src/componentes/RH/Trabajadores/TrabajadorCard.jsx @@ -0,0 +1,123 @@ +import React,{useContext, useState} from 'react' +import { Card, Row, Col, Button } from 'react-bootstrap' + +import CEpointContext from '../../../context/CEpointContext'; +import { QrGen } from './QrGen'; +//import './Trabajadores.css' +import { + useNavigate, +} from 'react-router-dom'; +import UiContext from '../../../context/UiContext' +import { toDataURL } from 'qrcode'; + + + const TrabajadorCard = ({prop}) => { + + const { + desactivaUser, + fetchOnlyUser + }=useContext(CEpointContext) + const navigate = useNavigate(); + + + const{ inFormulario, + setInFormulario }=useContext(UiContext) + + + const [QRurl, setQRurl]= useState() + + const [modalShow, setModalShow] =useState(false); + + console.log(inFormulario) + return ( + + + + + {prop.perfil} + {prop.nombre} + {prop.email} + {prop.password} + {prop.Uid} + + + , + + + +
+
+ + + + + + + + + + + + setModalShow(false)} trabajador={prop.nombre} QRurl={QRurl} + /> + + + + + + + + + + + + +
+ + + +
+ + + + + ) +} +export default TrabajadorCard + + + + diff --git a/src/componentes/RH/Trabajadores/TrabajadoresCards.jsx b/src/componentes/RH/Trabajadores/TrabajadoresCards.jsx new file mode 100644 index 0000000..f0b9230 --- /dev/null +++ b/src/componentes/RH/Trabajadores/TrabajadoresCards.jsx @@ -0,0 +1,152 @@ +import React, {useContext, useState, useEffect, useRef, memo, useMemo} from 'react' +import { Card, Container } from 'react-bootstrap' +import CEpointContext from '../../../context/CEpointContext'; +import TrabajadorCard from './TrabajadorCard'; + + +//import './Trabajadores.css' + + + + + const TrabajadoresCards = () => { + const {state, + getUsuarios}=useContext(CEpointContext) + + const [Civiles, setCiviles] = useState([]) + + + useEffect(()=>{ + async function fetchData() { + await getUsuarios(); + } + fetchData(); + + }, []) + + + + +console.log('STATE IN todos:', state) + + + + + + +//console.log('habilitados?:', Userun) + + + + + +const civilesWay = useMemo(() => { + return state.UsuariosActivosDetail&&state.UsuariosActivosDetail.reduce((past, current) => { + const foundItem = past.find(it => it.area === current.area) + if (foundItem) { + foundItem.data = foundItem.data + ? [...foundItem.data, { + 'nombre': current.nombre, + 'perfil': current.perfil, + 'email': current.email, + 'password': current.password, + 'Uid': current.UID, + 'empresa': current.empresa, + 'asignador': current.asignador, + 'checador': current.checador, + 'ocupado': current.ocupado, + 'lectoreAsistencia': current.lectoreAsistencia + }] + : [{ + 'nombre': current.nombre, + 'perfil': current.perfil, + 'email': current.email, + 'password': current.password, + 'Uid': current.UID, + 'empresa': current.empresa, + 'asignador': current.asignador, + 'checador': current.checador, + 'ocupado': current.ocupado, + 'lectoreAsistencia': current.lectoreAsistencia + }] + } else { + past.push({ + 'area': current.area, + 'data': [ + { + 'nombre': current.nombre, + 'perfil': current.perfil, + 'email': current.email, + 'password': current.password, + 'Uid': current.UID, + 'empresa': current.empresa, + 'asignador': current.asignador, + 'checador': current.checador, + 'ocupado': current.ocupado, + 'lectoreAsistencia': current.lectoreAsistencia + } + ] + }) + } + return past; + }, []) + }, [state.UsuariosActivosDetail]) + + useEffect(() => { + setCiviles(civilesWay) + }, [civilesWay]) + + +//console.log(Civiles) + + + + + const empresaRef =useRef("") + //console.log(nombreRef.current.value) + + const ref = useRef(null); + + + /* const handleClick = */ + + + + + + + return ( + + + + { + +Civiles&&Civiles.map((e) => { + + return +

{e.area}

+ + + + {e.data.map((s)=>)} + + + +
+ + + + } + + +) + +} + +
+
+ +) +} + +export default TrabajadoresCards diff --git a/src/componentes/RH/Trabajadores/objectTrabajador.txt b/src/componentes/RH/Trabajadores/objectTrabajador.txt new file mode 100644 index 0000000..3695962 --- /dev/null +++ b/src/componentes/RH/Trabajadores/objectTrabajador.txt @@ -0,0 +1,89 @@ +{ + UID, + activo, + area, +email, +empresa, +fechaDeCreacion, +nombre, +perfil, +ocupado,, +nss, +fechaNacimiento, +telefono, +domicilio, +tipoSangre, +alergias:[], +enfermedad:[], +hitoriaClinica:[], +licencia:boolean, +herramientas:[], +Miscelaneos:[], +Maquinaria:[] + +} + + +quitar{ + password +lectoreAsistencia +asignador, +checador, +rol (en trabajadores), +usator + + +tambien en el form de crear usuario reestructurar + +} + + +Lista de ids a respetar +sin eliminar auth User + +[ +usuario@cepoint.com +123456 +22ZibKz3QMaFWArXIiM9dPBgX333, + +playstoretest@cepoint.com +holaplaystore +2GzUq9c1OGcIJG7JYWzOYjcfdjG2, + + + + +PC-22-211@cepoint.com +PC22211 +O5M9wITTaXfelaUCiiErfEJEQGy1, + + + +pc-22-541@cepoint.com +PC22541 +qqQBXylIU0gFRRNE67V4ddbWKpc2, + + + + + +pc-22-364@cepoint.com +PC22364 +Cx0ln9VNuKcR6EMS4VmOOC07OdF3, + + + + +PC-22-275@cepoint.com +PC22275 +XSyXmiJXRUWU2U90UcPdjmUEeQ72, + + + +505@cepoint.com +123456 +ZlEyZ0VHFiRbS1w27qJ3IaI24RQ2, + + + +] \ No newline at end of file diff --git a/src/componentes/Bienvenida.jsx b/src/componentes/WelcomeHome.jsx similarity index 66% rename from src/componentes/Bienvenida.jsx rename to src/componentes/WelcomeHome.jsx index 28f72a6..460b300 100644 --- a/src/componentes/Bienvenida.jsx +++ b/src/componentes/WelcomeHome.jsx @@ -1,6 +1,6 @@ import React from 'react' -export const Bienvenida = () => { +export const WelcomeHome = () => { return (
Bienvenida
) diff --git a/src/componentes/almacen/Almacen.jsx b/src/componentes/almacen/Almacen.jsx new file mode 100644 index 0000000..09e58df --- /dev/null +++ b/src/componentes/almacen/Almacen.jsx @@ -0,0 +1,72 @@ +import React, { useState, useContext } from 'react' +import { Container, Row, Col, Button } from 'react-bootstrap' +//import './almacen.css' +import { useNavigate, Outlet } from 'react-router-dom' +import UiContext from '../../context/UiContext' +export const Almacen = () => { + const navigate = useNavigate(); + + const {ToggleALMACEN, setToggleALMACEN}=useContext(UiContext) + + + return ( + + + + + ToggleALMACEN +? +:
{ + setToggleALMACEN(true) + navigate("prestado") + }}> +
+

Actividad

+

Agrega prestado

+ +
+
+ +
+
{ +setToggleALMACEN(true) +navigate("miscelaneos") +}} > + +
+

Miscelaneos

+

Agrega miscelaneos

+
+
+
{ +setToggleALMACEN(true) +navigate("maquinaria") +}}> +
+

Maquinaria

+

Agrega maquinaria

+ +
+
+
{ +setToggleALMACEN(true) +navigate("herramienta") +}}> +
+

Herramientas

+

Agrega herramientas

+
+
+
+ +
+ + + + + + ) +} + + + diff --git a/src/componentes/almacen/herramientas.jpg b/src/componentes/almacen/herramientas.jpg new file mode 100644 index 0000000..3782883 Binary files /dev/null and b/src/componentes/almacen/herramientas.jpg differ diff --git a/src/componentes/almacen/herramientas/FormRegistroHerramienta.jsx b/src/componentes/almacen/herramientas/FormRegistroHerramienta.jsx new file mode 100644 index 0000000..d205d97 --- /dev/null +++ b/src/componentes/almacen/herramientas/FormRegistroHerramienta.jsx @@ -0,0 +1,153 @@ +import React, {useEffect, useState, useContext } from 'react' +import { Container, Row, Col, Form, Button, Card, InputGroup} from 'react-bootstrap' +import { v4 as uuidv4 } from 'uuid'; +import {BsArrowLeftCircle} from 'react-icons/bs' +import { + useNavigate + } from 'react-router-dom'; +import UiContext from '../../../context/UiContext'; +import { QR } from './QR'; +import { SHA256 } from 'crypto-js'; + +export const FormRegistroHerramienta = () => { + const {ToggleALMACEN, setToggleALMACEN}= useContext(UiContext) + const navigate = useNavigate(); + const [IdHerramienta, setIdHerramienta] =useState() + + + const data = 'niceNoise'; + const hash = SHA256(data).toString(); + + console.log(hash); + + const data2 = 'niceNoise'; + const hash2 = SHA256(data2).toString(); + + console.log(hash2); + + + useEffect(()=>{ + + async function fetchData() { + await setIdHerramienta(uuidv4()) + } + fetchData(); + + } + + + + ,[]) +console.log(IdHerramienta) + + //dowload qr + + + + return ( + + + + + +

Descripcion

+ + +

Empresa a la que pertenece

+ + + +
+ + +

+ Fecha de ingreso +

+ + + + + +

+ Modelo +

+ + + +
+ + +

+ Numero de serie +

+
+ + + +

Precio

+ + + $ + + .00 + + + + + $ + + .00 + + + + +
+ + + +

Quien recibio

+ + + + +

Empresa donde se compro y entrego

+ + + + +
+
+ + + + + + + {IdHerramienta&&} + + + + + +
+
+ +
+ + + + +
+
+ + + +
+ ) +} diff --git a/src/componentes/almacen/herramientas/Herramientas.jsx b/src/componentes/almacen/herramientas/Herramientas.jsx new file mode 100644 index 0000000..0a12c44 --- /dev/null +++ b/src/componentes/almacen/herramientas/Herramientas.jsx @@ -0,0 +1,73 @@ +import React from 'react' +import { useContext } from 'react'; +import { Container, Button, Form, InputGroup, Nav } from 'react-bootstrap' +import {BsArrowLeftCircle} from 'react-icons/bs' +import { + useNavigate, Outlet +} from 'react-router-dom'; + +import UiContext from '../../../context/UiContext'; +//import {Almacen} from '../Almacen' +export const Herramientas = () => { + const navigate = useNavigate(); + const {ToggleALMACEN, setToggleALMACEN}= useContext(UiContext) + + + return ( + + +
Herramientas
+ + + + + +
+
+ + Buscar + + + + { +ToggleALMACEN? : + } + +
+ + ) +} \ No newline at end of file diff --git a/src/componentes/almacen/herramientas/QR.css b/src/componentes/almacen/herramientas/QR.css new file mode 100644 index 0000000..4ff2e93 --- /dev/null +++ b/src/componentes/almacen/herramientas/QR.css @@ -0,0 +1,7 @@ +@media print { + #qr-code-print { + display: block !important; + width: 100% !important; + } + } + \ No newline at end of file diff --git a/src/componentes/almacen/herramientas/QR.jsx b/src/componentes/almacen/herramientas/QR.jsx new file mode 100644 index 0000000..6fc38fc --- /dev/null +++ b/src/componentes/almacen/herramientas/QR.jsx @@ -0,0 +1,65 @@ +import React, {useRef} from 'react' +import { Button} from 'react-bootstrap' +import QRCode from 'react-qr-code'; +import html2canvas from 'html2canvas'; +import './QR.css' +export const QR = ({dato}) => { + const qrRef = useRef(null); + + const handleDownload = () => { + html2canvas(qrRef.current).then((canvas) => { + const link = document.createElement('a'); + link.download = 'QRCode.png'; + link.href = canvas.toDataURL(); + link.click(); + }); + }; + + + + + const handlePrint = () => { + const printWindow = window.open("", "", "height=400,width=600"); + printWindow.document.write(` + + + QR Code + + + +
+ ${qrRef.current.innerHTML} +
+ + + `); + + printWindow.print(); + /* printWindow.close(); */ + }; + + return ( + + +<> +
+ +
+ + + + + ) +} diff --git a/src/componentes/almacen/maquinaria.jpg b/src/componentes/almacen/maquinaria.jpg new file mode 100644 index 0000000..17e1646 Binary files /dev/null and b/src/componentes/almacen/maquinaria.jpg differ diff --git a/src/componentes/almacen/maquinaria/Maquinaria.jsx b/src/componentes/almacen/maquinaria/Maquinaria.jsx new file mode 100644 index 0000000..30ababb --- /dev/null +++ b/src/componentes/almacen/maquinaria/Maquinaria.jsx @@ -0,0 +1,32 @@ +import React from 'react' +import { useContext } from 'react'; +import { Container, Button, Form, InputGroup, Nav } from 'react-bootstrap' +import {BsArrowLeftCircle} from 'react-icons/bs' +import { + useNavigate +} from 'react-router-dom'; +import UiContext from '../../../context/UiContext' +export const Maquinaria = () => { + const navigate = useNavigate(); + + const { setToggleALMACEN}= useContext(UiContext) + + return ( + +
Maquinaria
+ + +
+ +
+ + +
+ + ) +} diff --git a/src/componentes/almacen/miscelaneos.jpg b/src/componentes/almacen/miscelaneos.jpg new file mode 100644 index 0000000..3ab064f Binary files /dev/null and b/src/componentes/almacen/miscelaneos.jpg differ diff --git a/src/componentes/almacen/miscelaneos/Miscelaneos.jsx b/src/componentes/almacen/miscelaneos/Miscelaneos.jsx new file mode 100644 index 0000000..81ada9f --- /dev/null +++ b/src/componentes/almacen/miscelaneos/Miscelaneos.jsx @@ -0,0 +1,65 @@ +import React from 'react' +import { useContext } from 'react'; +import { Container, Button, Form, InputGroup, Nav } from 'react-bootstrap' +import {BsArrowLeftCircle} from 'react-icons/bs' +import { + useNavigate +} from 'react-router-dom'; +import UiContext from '../../../context/UiContext' +//import {Almacen} from '../Almacen' +export const Miscelaneos = () => { + const navigate = useNavigate(); + +const { setToggleALMACEN}= useContext(UiContext) + + return ( + +
Miscelaneos
+ + + + +
+
+ + Buscar + + + + +
+ + ) +} diff --git a/src/componentes/almacen/prestado.jpg b/src/componentes/almacen/prestado.jpg new file mode 100644 index 0000000..0892822 Binary files /dev/null and b/src/componentes/almacen/prestado.jpg differ diff --git a/src/componentes/almacen/prestado/Prestado.jsx b/src/componentes/almacen/prestado/Prestado.jsx new file mode 100644 index 0000000..1081483 --- /dev/null +++ b/src/componentes/almacen/prestado/Prestado.jsx @@ -0,0 +1,25 @@ +import React from 'react' +import { useContext } from 'react'; +import { Container, Button, Form, InputGroup, Nav } from 'react-bootstrap' +import {BsArrowLeftCircle} from 'react-icons/bs' +import { + useNavigate +} from 'react-router-dom'; +import UiContext from '../../../context/UiContext' +//import {Almacen} from '../Almacen' +export const Prestado = () => { + const navigate = useNavigate(); + + const {setToggleALMACEN}= useContext(UiContext) + + return ( + +
ACTIVIDAD
+ +
+ + ) +} \ No newline at end of file diff --git a/src/componentes/asignador/1.jpg b/src/componentes/asignador/1.jpg new file mode 100644 index 0000000..1e8e128 Binary files /dev/null and b/src/componentes/asignador/1.jpg differ diff --git a/src/componentes/asignador/Asignaciones.jsx b/src/componentes/asignador/Asignaciones.jsx deleted file mode 100644 index e7f84b4..0000000 --- a/src/componentes/asignador/Asignaciones.jsx +++ /dev/null @@ -1,12 +0,0 @@ -import React from 'react' - -export default function Asignaciones({items}) { - return ( -
{items.map(p => ( - - ) -} diff --git a/src/componentes/asignador/Asignador.css b/src/componentes/asignador/Asignador.css index 110157a..69d8062 100644 --- a/src/componentes/asignador/Asignador.css +++ b/src/componentes/asignador/Asignador.css @@ -1,32 +1,41 @@ -button#dropdown-button-dark-example1.dropdown-toggle.btn.btn-secondary{ - margin-top: 4%; - margin-bottom:4%; -} -button#dropdown-button-dark-example2.dropdown-toggle.btn.btn-secondary{ - margin-top: 4%; - margin-bottom:4%; -} -select.form-select{ - width: 100%; - margin-top: 3%; -} -/*div.fila.col{ - width: 60%; -*/ -div.asignaciones.card{ - background-color: lightslategray; - margin-left: 4em; - overflow: hidden; - overflow-y: scroll; - -} -div.formAsignacion.card{ +.wrapper{ + background: #456173; + display: flex; + justify-content: center; + width: 100vh; + } + .cards { + background-image:url('./1.jpg'); + background-size: cover; + background-position: center; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + padding: 1em; + display: grid; + grid-gap: 1rem; + grid-auto-flow: column; + grid-auto-columns: calc(30% - 2rem); + min-height: 10vh; + } + .cards-content { + background-image: url('./neo4.jpg'); + background-size: cover; + background-position: center; + border-radius: 1rem; + color: rgb(237, 237, 237); + display: flex; + font-weight: 70; + justify-content: center; + font-size: 3vh; + padding: 3vh; + text-transform: uppercase; + font-family: 'Merriweather Sans', sans-serif; - margin-right: 10px; - margin-top: 3px; - margin-left: -48px; -} - -div#a1{ - background-color: #ed3e12; -} + + } + .cards-content:first-child { + margin-left: 2rem; + } + .cards-content:last-child { + margin-right: 2rem; + } \ No newline at end of file diff --git a/src/componentes/asignador/Asignador.jsx b/src/componentes/asignador/Asignador.jsx new file mode 100644 index 0000000..3eaf0f1 --- /dev/null +++ b/src/componentes/asignador/Asignador.jsx @@ -0,0 +1,93 @@ +import React, {useState, useContext} from 'react' + +import './Asignador.css' +import { useEffect } from 'react'; +import UiContext from '../../context/UiContext'; +import Box from '@mui/material/Box'; +import Card from '@mui/material/Card'; +import CardActions from '@mui/material/CardActions'; +import CardContent from '@mui/material/CardContent'; +import Button from '@mui/material/Button'; +import Typography from '@mui/material/Typography'; +import Grid from '@mui/material/Grid'; +import Chip from '@mui/material/Chip'; +import CEpointContext from '../../context/CEpointContext'; +import { Outlet, useNavigate } from 'react-router-dom'; + + + + const Asignador = () => { + +const { + getTotalProyectos, + + state + }=useContext(CEpointContext) + + const navigate= useNavigate() + const [modalShow, setModalShow] = useState(false); + + + const { toggleShowFCP, toggleShowFCU}=useContext(UiContext) + + + + + + + +useEffect(()=>{ + getTotalProyectos() + +}, []) + + + + console.log("datossss", state?state:null) + + return ( + <> + + + + + + + +

Actualiza o agrega proyectos

+ + + +
+
+{state.asignacionesTotal && + state.asignacionesTotal.map((da, index) => ( + +
navigate(`proyecto/${da}`)}> + + +
+ + ))} +
+
+ + + + + + + +
+ + + + ) +} + + +export default React.memo(Asignador); diff --git a/src/componentes/asignador/Asignador1.jsx b/src/componentes/asignador/Asignador1.jsx deleted file mode 100644 index f4a72b1..0000000 --- a/src/componentes/asignador/Asignador1.jsx +++ /dev/null @@ -1,320 +0,0 @@ -import React,{useState} from 'react' -import {Row, Form, Col, Button, Spinner, Table, Card, Container} from 'react-bootstrap' - - - -export const Asignador1 = ({handleSubmit})=>{ - - -const [formValues, setFormValues] = useState([]) - -const handleChange = (event) => { -const {name, value} = event.target - setFormValues({ - ...formValues, [name]: value }) -} - -const _handleSubmit = (e) => { - e.preventDefault() -handleSubmit({...formValues}) - - - - console.log(formValues) - - - -} - /*const handleData = async () => { - - const data = [{ - residente1:{ - Residente: selectedRes1, - Proyecto: selectedProy1 - }}, - {residente2:{ - Residente: selectedRes2, - Proyecto: selectedProy2 - }}, - {residente3:{ - Residente:selectedRes3, - proyecto: selectedProy3 - }}, - {residente4:{ - Residente:selectedRes4, - proyecto: selectedProy4 - }} - ] - setIsLoading(true); - await axios.post('http://localhost:8800/api/asignador/planAsignacion/${currentUser._id}', - { data }).then(res=>{ - console.log(res); - console.log(res.data); - }) - -} - - - - - - - async function submit(){ - - - let url = ''; - const data = [{ - residente1:{ - Residente: selectedRes1, - Proyecto: selectedProy1 - }}, - {residente2:{ - Residente: selectedRes2, - Proyecto: selectedProy2 - }}, - {residente3:{ - Residente:selectedRes3, - proyecto: selectedProy3 - }}, - {residente4:{ - Residente:selectedRes4, - proyecto: selectedProy4 - }} - ] - - let response= - setIsLoading(true); - await fetch(url, { - - method: 'POST', // or 'PUT' - body: JSON.stringify(data), // data can be `string` or {object}! - headers:{ - 'Content-Type': 'application/json' - } - }).then(res => res.json(data)) - .catch(error => console.error('Error:', error)) - .then(response => console.log('Success:', response), - ); - -}*/ -const [isLoanding, setIsLoading] = useState(false); - const optionsResidentes= [ - {value:'', text: '--elige Residente--'}, - {value:'Andres Perez Dimas', text:'Andres Perez Dimas'}, - {value:'Carlos Ruiz', text:'Carlos Ruiz'}, - {value:'Julio cesar Borjas', text:'Julio cesar Borjas'}, - {value:'Daniel Rodriguez', text:'Daniel Rodriguez'} -]; - -const optionsProyectos= [ - {value:'', text: '--elige Proyecto--'}, - {value:'proyecto 1', text: 'proyecto 1'}, - {value:'proyecto 2', text: 'proyecto 2'}, - {value:'proyecto 3', text: 'proyecto 3'}, - {value:'proyecto 4', text: 'proyecto 4'} -] - - -//RESIDENTES -const [selectedRes1, setSelectRes1] = useState(optionsResidentes[0].label) -const [selectedRes2, setSelectRes2] = useState(optionsResidentes[0].value) -const [selectedRes3, setSelectRes3] = useState(optionsResidentes[0].value) -const [selectedRes4, setSelectRes4] = useState(optionsResidentes[0].value) - - - -const handleChangeRes1 = event => { -setSelectRes1(event.target.value ); -console.log(event.target.value); - - -} - -const handleChangeRes2 = event => { -setSelectRes2(event.target.value); -} - -const handleChangeRes3 = event => { -setSelectRes3(event.target.value); -} -const handleChangeRes4 = event => { - setSelectRes4(event.target.value); - } - -//Proyectos -const [selectedProy1, setSelectProy1] = useState(optionsProyectos[0].value) -const [selectedProy2, setSelectProy2] = useState(optionsProyectos[0].value) -const [selectedProy3, setSelectProy3] = useState(optionsProyectos[0].value) -const [selectedProy4, setSelectProy4] = useState(optionsProyectos[0].value) - -const handleChangeProy1 = event => { -setSelectProy1(event.target.value); -console.log(optionsProyectos.text); -} - -const handleChangeProy2 = event => { -setSelectProy2(event.target.value); -} - -const handleChangeProy3 = event => { -setSelectProy3(event.target.value); -} -const handleChangeProy4 = event => { - setSelectProy4(event.target.value); - } - -//relacion residente y proyecto EXPERIMENTACION - - - - - - return( - - - - - Asignador - controles para asignar a residentes proyectos - - -
- -
- -
Elige el residente
-
Elige el proyecto
-
- -
-
- - - -
Residente
- - {optionsResidentes.map(option=>( - - ))} - - - - -
Proyecto
- - {optionsProyectos.map(option=>( - - ))} - -
-
- - -
- - - -
Residente
- - {optionsResidentes.map(option=>( - - ))} - - - - -
Proyecto
- - {optionsProyectos.map(option=>( - - ))} - -
-
- -
- - - -
Residente
- - {optionsResidentes.map(option=>( - - ))} - - - - -
Proyecto
- - {optionsProyectos.map(option=>( - - ))} - -
-
-
- - - -
Residente
- - {optionsResidentes.map(option=>( - - ))} - - - - -
Proyecto
- - {optionsProyectos.map(option=>( - - ))} - -
- -
- -
-
- -
- -
-
- - - - ) - -} - - - - -//TODO: CREATE BUTTON FUNCTION THAT CREATES -//FORM TO ASIGNES RESIDENT WHO GONNA CHECK LIST -//BUTTON OBTAIN A FORM AND YOU SHOULD TO SAVE IT -//AS REGISTER AND TO STACK ALL REGISTERS - - - - diff --git "a/src/componentes/asignador/Asignadorendise\303\261o.jsx" "b/src/componentes/asignador/Asignadorendise\303\261o.jsx" deleted file mode 100644 index 69a13a6..0000000 --- "a/src/componentes/asignador/Asignadorendise\303\261o.jsx" +++ /dev/null @@ -1,163 +0,0 @@ -import React, {useState} from 'react' -import { Card, Container, Toast, Button, } from 'react-bootstrap' -import './Asignador.css' -import {getFirestore, updateDoc, arrayUnion, doc, onSnapshot, addDoc ,setDoc, collection, getDoc, query, where} from 'firebase/firestore' -import { getAuth } from 'firebase/auth'; -import { db } from '../../firebase/firebase'; -import { useEffect } from 'react'; -import { FormAsignador } from './FormAsignador' -import {DateTime} from 'luxon'; - - export const Asignadorendiseño = () => { - const [showA, setShowA] = useState(true); - const toggleShowA = () => setShowA(!showA); - const date = DateTime.now().weekNumber - const auth = getAuth() - const dato =auth.currentUser; - const [asig, setAsign]= useState([]); - - -//TODO: HACER FUNCION DE ELIMINACION DE DATOS EN CAMPOS Y LOANDING PARA CUANDO ENVIAS LOS DATOS - - -const getLinks =async()=>{ - const q = query(collection(db, "asignaciones")) - await onSnapshot(q, (query)=>{ - const data=[] - query.forEach((doc)=>{ - data.push(doc.data()) - }) - console.log("datossss", data) - setAsign(data) - }) - -} - - - - -/* -const getLinks = async () => { await - onSnapshot(doc(db, "users", dato.uid),(e)=>{ - - const docs= []; - console.log("curren data:", e.data().checador.asignaciones) - var x=e.data().checador.asignaciones; - x.forEach(element => { - docs.push({...element}) - console.log("foreach:", element) - }); - setAsign(docs); - console.log("docs:", docs) - }); - - } - */ -useEffect(()=>{ - getLinks() -},[]) - -//TODO: AGREGAR A COLECCION "asignaciones", una asignacion -//con id automatico -//it's ready -const addOrEdit = async (addOrEdit) => { - const databaseRef=await addDoc(collection(db, "asignaciones"), addOrEdit); -} - -console.log("asignaciones", asig) - -//esta constante publica en la base de datos, anexa un elemento nuevo a un array -//atento aqui porque asi mas o menos sera una asistencia en native -/*const addOrEdit = async (addOrEdit) => { - const databaseRef= doc(db, "users", dato.uid) - await - updateDoc(databaseRef, { - "checador.asignaciones": arrayUnion(addOrEdit) - }); - - -}*/ - - //consulta en todos los docs - /* const unsub = onSnapshot(doc(db, "users", dato.uid), (doc)=>{ - - console.log("Current data: ", doc.data().checador); - -} ) */ - - return ( - - - - Asignador - controles para asignar a residentes proyectos - - -
- - - - - - - - - Asignador - #{date} semana - - - - - - - - - -
- - {asig.map((da)=>( - -
- - -
Presupuesto:{da.presupuesto}
-
-
Obra: - - {da.obra} - -
-
-
- Residente: - {da.residente} - -
- -
- -
-
- -
- - ) - )} - -
- -
-
- -
-
- - - ) -} - - - -//TODO: HACER OBJETO QUE CONTENGA EL \ No newline at end of file diff --git a/src/componentes/asignador/CreacionKey/CreaKey.jsx b/src/componentes/asignador/CreacionKey/CreaKey.jsx new file mode 100644 index 0000000..6c2243b --- /dev/null +++ b/src/componentes/asignador/CreacionKey/CreaKey.jsx @@ -0,0 +1,102 @@ +import React, {useRef, useState} from 'react' +import { Grid } from '@mui/material'; +import { Card, Container, Toast, Button, Form, Badge, Row, Col } from 'react-bootstrap' +import { UserAuth } from '../../../context/AuthContext'; +import { db } from '../../../firebase/firebase'; +import {setDoc, doc} from 'firebase/firestore' +import { useNavigate } from 'react-router-dom'; +export const CreaKey = () => { + const [error, setError] = useState(''); + const [UidUser, setUidUser]=useState('') + const {createUsuario} = UserAuth(); + +const emailRef=useRef(null) +const passwordRef=useRef(null) +const keyRef=useRef(null) + +const navigate=useNavigate() + + + + + const handleregisterUser = async (e)=> { + e.preventDefault(); + try{ + setError('') + const infouser = await createUsuario(emailRef.current.value, passwordRef.current.value); + console.log(infouser.user.uid) + setUidUser(infouser.user.uid) + const docuRef =doc(db, `cuentas/${infouser.user.uid}`); + setDoc(docuRef, { + UID:infouser.user.uid, + activo: true , + almacen: null, + area: 'CUENTAKEYCHECADOR', + perfil:'CHECADOR', + asignador: false, + checador:false , + email: emailRef.current.value, + + lectoreAsistencia : false, + nombre: keyRef.current.value, + password: passwordRef.current.value, + + rh: false, + rol: 'usuario', + usator: false, + fechaDeCreacion: Date(), + } + ).then(()=>navigate('../creaproyecto')) + + } catch(e) { + setError(e.message) + console.log(e.message) + } + }; + + + + return ( + + + +

Creando llave para ingresar a checador app movil

+
+
+
+ + + Email + + + + Password + + + + + + Nombre de la llave + + + + + + + + + + + + + + + + + + + +
+
+ ) +} diff --git a/src/componentes/asignador/CreacionProyectos/CreaProyecto.jsx b/src/componentes/asignador/CreacionProyectos/CreaProyecto.jsx new file mode 100644 index 0000000..b24c0da --- /dev/null +++ b/src/componentes/asignador/CreacionProyectos/CreaProyecto.jsx @@ -0,0 +1,306 @@ +import React, {useState, useRef} from 'react' +import { Button, Form, Row, Col, Alert, Toast} from 'react-bootstrap' +import DatePicker from "react-datepicker"; +import "react-datepicker/dist/react-datepicker.css"; +import { getAuth } from 'firebase/auth'; +import { useContext } from 'react'; +import MenuItem from '@mui/material/MenuItem'; +//import UiContext from '../../context/UiContext'; +import { useEffect } from 'react'; +import SelectSearch from "react-select-search"; +import { SelectorChecador } from '../SelectorChecador'; +import {DateTime} from 'luxon'; +import CEpointContext from '../../../context/CEpointContext'; +import Grid from '@mui/material/Grid'; +import TextField from '@mui/material/TextField'; +import Link from '@mui/material/Link'; +import { useNavigate } from 'react-router-dom'; +const currencies = [ + { + value: 'Activo', + label: 'Activo', + }, + { + value: 'Adicional', + label: 'Adicional', + }, + { + value: 'Garantia', + label: 'Garantia', + }, + { + value: 'Inactivo', + label: 'Inactivo', + }, +]; + +export const CreaProyecto = () => { + + // const [startDate, setStartDate] = useState(new Date()); + // const {showFCP, setShowFCP, toggleShowFCP}=useContext(UiContext) + + const [values, setValues] = useState('') + const navigate=useNavigate() + const {state, agregaProyecto, getUsuariosChecador,fetchOnlyUser, fetchChecadorAsignadoUser, ableChecador}=useContext(CEpointContext) + const auth = getAuth() + const dato =auth.currentUser; + + const initValues= { + obra: '', + presupuesto: '', + residenteUid: '', + ubicacion: '' + } + + + + + + + + + + +//TODO: ONCHANGE + + + + + + + + + useEffect(()=>{ + + async function fetchData() { + await getUsuariosChecador(); + } + fetchData(); + + },[]) + + + + + + const residenteRef =useRef(null) + const estadoRef =useRef(null) + const ubicacionRef =useRef(null) + const nopresupuestoRef =useRef(null) + const obraRef =useRef(null) + const turnoRef =useRef(null) + +const handleEstadoChange = (event) => { + estadoRef.current = event.target.value; + +}; +const [Residente, setResidente ] = useState('') +const handleResidenteChange = (event) => { + residenteRef.current = event.target.value; + setResidente(residenteRef.current) + +}; + +const handleTurnoChange = (event) => { + turnoRef.current = event.target.value; + + +}; +/* +const test = (e) => { + e.preventDefault() + console.log( formAsig ) +} + */ + +const statusChecador =(parametro)=>{ + if(parametro==false ){ + ableChecador(residenteRef.current) + + }else{ + + console.log('mistake') + } } + + + const handleSubmit = async(e) => { + try { + e.preventDefault(); + //console.log( 'VALUES:',values); + await agregaProyecto(nopresupuestoRef.current.value, { + activa: true, + horario:turnoRef.current , + Estado:estadoRef.current, + obra:obraRef.current.value!=null?obraRef.current.value:null, + + idProyecto: nopresupuestoRef.current.value!=null?nopresupuestoRef.current.value:null, + presupuesto: nopresupuestoRef.current.value!=null?nopresupuestoRef.current.value:null, + asistencias:[], + residenteUid:residenteRef.current, + ubicacion: ubicacionRef.current.value!=null?ubicacionRef.current.value:null, + + }) + .then( fetchOnlyUser(residenteRef.current)) + .then( statusChecador(state.OnlyUser.checador), + console.log("DONE :) " , residenteRef.current)) + .then(fetchChecadorAsignadoUser(residenteRef.current)) + .then( navigate(`../proyecto/${nopresupuestoRef.current.value}`)) + + + + } catch (error) { + + console.log(error) + } + + + } + + + + + + + + + //TODO: HANDLE + + + // console.log('cheador: ', checador) + + + + + return ( + + + + +

Creando proyecto

+
+
+ + + +
+ + + +Residente +{state.UsuariosDisponiblesChecador&& + + +{ +state.UsuariosDisponiblesChecador.map((e)=>( + + + ) + +) +} + } + +navigate('../creakey')} variant="body2"> + Necesitas crear una cuenta? + + + + + {currencies.map((option) => ( + + {option.label} + + ))} + + + + + + + + +Obra + + + + + + + + + +Numero de presupuesto + + + + + + + + +Ubicacion + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + +) + +} diff --git a/src/componentes/asignador/FormActualizador.jsx b/src/componentes/asignador/FormActualizador.jsx new file mode 100644 index 0000000..3a33e3b --- /dev/null +++ b/src/componentes/asignador/FormActualizador.jsx @@ -0,0 +1,163 @@ +import React, {useContext, useEffect, useRef, useState} from 'react' + +import { Button, Form, Row, Col, Offcanvas, Badge } from 'react-bootstrap' + +import CEpointContext from '../../context/CEpointContext' +import UiContext from '../../context/UiContext' + +export const FormActualizador = () => { + + + + + + const{state, getUsuariosChecador, finderChecador, acUsChec }= useContext(CEpointContext) + const{ show4, setShow4, handleClose4, handleShow4 }= useContext(UiContext) + + //console.log('proyecto a Actualizar: ', candidatoActualizar) +//console.log('proyecto a Actualizar: ', candidatoActualizar.ubicacion) + + //const residenteRef= useRef() + /* const ubicacionRef= useRef(candidatoActualizar.ubicacion) + const presupuestoRef= useRef(candidatoActualizar.presupuesto) + const obraRef =useRef(candidatoActualizar.obra) */ + + + + + // hooks que reducire proyecto + + + + /* useEffect( + ()=>{ + + finderChecador( state.UsuariosDisponiblesChecador) + } + ,[ state.UsuariosDisponiblesChecador]) */ + + + + + const [values, setValues] = useState('') + const [Residente, setResidente] = useState('') + + //TODO: HANDLE + + const handleInputChange = (e) =>{ + const {name, value} = e.target; + setValues({...values, [name]: value}) + + + } + +//you have residente:, ubicacion:, presupuesto, obra + +/* console.log('RESIDENTE UID', values.residenteUid) + console.log('PROYECTO', idProyecto) + console.log('OnlyUser.UID: ',OnlyUser.UID) */ + + + return ( + + + + + + + Informacion de proyecto:{' '} {state.Proyecto?state.Proyecto.obra:null} + + + + Este Proyecto tiene asignado el checador en la sesion de: {' '} +
+

+ + + {state.ChecadorAsignadouser?state.ChecadorAsignadouser.nombre:null} + + +

+ + + + + + + + + + +
+
+ + + +) +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/componentes/asignador/FormAsignador.jsx b/src/componentes/asignador/FormAsignador.jsx deleted file mode 100644 index 5f5ffe9..0000000 --- a/src/componentes/asignador/FormAsignador.jsx +++ /dev/null @@ -1,155 +0,0 @@ -import React, {useState} from 'react' -import { Button, Form, Row, Col} from 'react-bootstrap' -import DatePicker from "react-datepicker"; -import "react-datepicker/dist/react-datepicker.css"; -import { getAuth } from 'firebase/auth'; -import { useContext } from 'react'; -import UsuariosContext from '../../context/UsuariosContext'; -import { useEffect } from 'react'; -import SelectSearch from "react-select-search"; -import { SelectorChecador } from './SelectorChecador'; - -export const FormAsignador = (props) => { - const [startDate, setStartDate] = useState(new Date()); - - const [Residente, setResidente] = useState('') - const {Usuarios, getUsuarios, finderChecador, ableChecador, setActivadorChec, UserChecador, ActivadorChec}=useContext(UsuariosContext) - const auth = getAuth() - const dato =auth.currentUser; -const formAsig= { - activa: true, - horario:'', - obra: '', - idAsignador: dato.uid, - presupuesto: '', - asistencias:[], - residenteUid: '', - ubicacion: '', - -} - - -/* searchUser(formAsig.residente, Usuarios) - -const searchUser= (props) =>{ -return props.reduce((past, current)=>{ - const foundIndex =past.find(it=>it.UID===current.UID) -}) -} */ - -console.log('residente', Residente) - -const [values, setValues] = useState(formAsig) - //TODO: HANDLE - - const handleInputChange = (e) =>{ - const {name, value} = e.target; - setValues({...values, [name]: value}); - - - } - - - //TODO: ONCHANGE - -const handleSubmit = (e) => { - e.preventDefault(); - console.log( 'VALUES:',values); - props.addOrEdit(values); - setActivadorChec(values.residenteUid) - setValues({...formAsig}) -} - - - - - useEffect( - ()=>{ - - getUsuarios() - - finderChecador(Usuarios) -} - ,[]) - - //console.log('Usuarios desde asignador:',Usuarios) - //console.log('userchecador',UserChecador) - console.log( 'VALUES:', values); - console.log( 'RESIDENTE:', values.residenteUid); - console.log( 'Sera activado:', ActivadorChec); - - return ( - - -
- -Residente -{UserChecador&& - - -{ - UserChecador.map((e)=>( - e.map((s)=>( - - )) - -)) -} - } - - - - - - - -Ubicacion - - - - - -Numero de presupuesto - - - - - -Obra - - - - - - - - - - - - - - - - - - -
- ) -} - - - - - - diff --git a/src/componentes/asignador/FormCreadorProyecto.jsx b/src/componentes/asignador/FormCreadorProyecto.jsx new file mode 100644 index 0000000..7f87dd6 --- /dev/null +++ b/src/componentes/asignador/FormCreadorProyecto.jsx @@ -0,0 +1,259 @@ +import React, {useState} from 'react' +import { Button, Form, Row, Col, Alert, Toast} from 'react-bootstrap' +import DatePicker from "react-datepicker"; +import "react-datepicker/dist/react-datepicker.css"; +import { getAuth } from 'firebase/auth'; +import { useContext } from 'react'; + +import UiContext from '../../context/UiContext'; +import { useEffect } from 'react'; +import SelectSearch from "react-select-search"; +import { SelectorChecador } from './SelectorChecador'; +import {DateTime} from 'luxon'; + +import CEpointContext from '../../context/CEpointContext'; + +export const FormCreadorProyecto = () => { + + // const [startDate, setStartDate] = useState(new Date()); + const {showFCP, setShowFCP, toggleShowFCP}=useContext(UiContext) + + const [values, setValues] = useState('') + + const {state, agregaProyecto, getUsuariosChecador,fetchOnlyUser, finderChecador, ableChecador}=useContext(CEpointContext) + const auth = getAuth() + const dato =auth.currentUser; + + const initValues= { + obra: '', + presupuesto: '', + residenteUid: '', + ubicacion: '' + } + + + + + + const formAsig= { + activa: true, + horario:'matutino', + obra: values?values.obra:null, + idAsignador: dato.uid, + idProyecto: values?values.presupuesto:null, + presupuesto: values?values.presupuesto:null, + asistencias:[], + residenteUid:values?values.residenteUid:null, + ubicacion: values?values.ubicacion:null, + +} + + +const date = DateTime.now().weekNumber + + + + + + //TODO: HANDLE + + const handleInputChange = (e) =>{ + const {name, value} = e.target; + setValues({...values, [name]: value}); + + + } + + +// console.log('cheador: ', checador) + const statusChecador =(parametro)=>{ +if(parametro==false ){ +ableChecador(values.residenteUid) +}else{ + +console.log('mistake') +} } + + + + + + + //TODO: ONCHANGE + + +const handleSubmit = async(e) => { + e.preventDefault(); + //console.log( 'VALUES:',values); + await agregaProyecto(values.presupuesto, formAsig) + // props.addOrEdit(values); + + fetchOnlyUser(values.residenteUid) + ableChecador(values.residenteUid) + statusChecador(state.OnlyUser.checador) + setValues(initValues) +} + + + +/* const addOrEdit = async (addOrEdit) => { + const databaseRef=await addDoc(collection(db, "asignaciones"), addOrEdit); +} */ + + + +/* useEffect(()=>{ + getUsuariosChecador() +},[]) + +useEffect( + ()=>{ + + finderChecador( state.UsuariosDisponiblesChecador ) + } + ,[state.UsuariosDisponiblesChecador]) + */ + + + + useEffect(()=>{ + + async function fetchData() { + await getUsuariosChecador(); + } + fetchData(); + + },[]) + + + console.log(values.residenteUid) + + + + + + return ( + + + + + Asignador + #{date} semana + + + +
+ +Residente +{state.UsuariosDisponiblesChecador&& + + +{ + state.UsuariosDisponiblesChecador.map((e)=>( + + + ) + +) +} + } + + + + + + + +Ubicacion + + + + + +Numero de presupuesto + + + + + +Obra + + + + + + + + + + + + + + + + + + +
+ + + + + + + + {/* + */}
+
+ + + + + + ) +} + + + + + + +/* searchUser(formAsig.residente, Usuarios) + +const searchUser= (props) =>{ +return props.reduce((past, current)=>{ + const foundIndex =past.find(it=>it.UID===current.UID) +}) +} */ + + + + //console.log('Usuarios desde asignador:',Usuarios) + //console.log('userchecador',UserChecador) + // console.log( 'VALUES:', values); + //console.log( 'RESIDENTE:', values.residenteUid); + + + + /* return( + setShow(false)} dismissible> + Este usuario tiene tiene activo el checador! +

+ TODO: VER DERTALLES DE DONDE AGREGAR BOTON PARA DESACTIVAR DE AHI DONDE ESTA +

+ + +
+ +) */ \ No newline at end of file diff --git a/src/componentes/asignador/FormCreadorUser.jsx b/src/componentes/asignador/FormCreadorUser.jsx new file mode 100644 index 0000000..efccbc1 --- /dev/null +++ b/src/componentes/asignador/FormCreadorUser.jsx @@ -0,0 +1,381 @@ +import React, {useState, useRef, useContext, useEffect} from 'react' + +import "react-datepicker/dist/react-datepicker.css"; + +import ButtonGroup from 'react-bootstrap/ButtonGroup'; +import ToggleButton from 'react-bootstrap/ToggleButton'; +import { Card, Container, Toast, Button, Form, Badge, Row, Col } from 'react-bootstrap' +import { UserAuth } from '../../context/AuthContext'; +import { db } from '../../firebase/firebase'; +import SelectSearch from "react-select-search"; +import 'react-select-search/style.css' + +import CEpointContext from '../../context/CEpointContext'; +import UiContext from '../../context/UiContext'; +import {setDoc, doc} from 'firebase/firestore' + +import {options, searchArea, optionsEmpresas} from './options' +export const FormCreadorUser = () => { + //necesario para registrar en dos modalidades, manual y por google unicamente + const {state, getUsuarios} = useContext(CEpointContext) + const {showFCU, setShowFCU, toggleShowFCU}=useContext(UiContext) + + + + const [error, setError] = useState(''); + const [UidUser, setUidUser]=useState('') + const {createUsuario} = UserAuth(); + const [Perfil, setPerfil] = useState('') + const [Empresa, setEmpresa]= useState('Elige empresa') + + const radiosAsis = [ + { name: 'Deshabilitado', value: '1' }, + { name: 'Habilitar', value: '2' } + ]; + const [radioValueAsis, setRadioValueAsis] = useState('1'); + + const radiosAsig = [ + { name: 'Deshabilitado', value: '3' }, + { name: 'Habilitar', value: '4' } + ]; + const [radioValueAsig, setRadioValueAsig] = useState('3'); + const radiosChec = [ + { name: 'Deshabilitado', value: '5' }, + { name: 'Habilitar', value: '6' } + ]; + const [radioValueChec, setRadioValueChec] = useState('5'); + + + + + + const formCreatorUser= { + email: '', + password: '', + nombre: '' + + +} + + + +//radioValueAsis==='1'?false:true + + +const [values, setValues] = useState('') +const [Email, setEmail]= useState('') +const [Password, setPassword]= useState('') +const [Nombre, setNombre] = useState('') +//TODO: HANDLE + + +const handleInputChange = async (e) =>{ +const {name, value} = e.target; +await setValues({...values, [name]: value}); +setEmail(values.email) +setPassword(values.password) +setNombre(values.nombre) +setPassword(values.password) + +} + + + +const handleregisterUser = async (e)=> { +e.preventDefault(); +try{ +setError('') +const infouser = await createUsuario(values.email, values.password); +console.log(infouser.user.uid) + setUidUser(infouser.user.uid) +const docuRef =doc(db, `cuentas/${infouser.user.uid}`); +setDoc(docuRef, { + UID:infouser.user.uid, + activo: false , + almacen: null, + area: searchArea(Perfil), + asignador: checkIf(radioValueAsig), + checador:checkIf(radioValueChec) , + email: values.email, + empresa:searchDato(Empresa), + lectoreAsistencia : checkIf(radioValueAsis), + nombre: values.nombre, + password: values.password, + + rh: false, + rol: 'usuario', + usator: false, + fechaDeCreacion: Date(), +} +) +setValues({...formCreatorUser}) +setRadioValueChec('5') +setRadioValueAsig('3') +setRadioValueAsis('1') +setPerfil('') +setEmpresa('') +} catch(e) { +setError(e.message) +console.log(e.message) +} +}; + + + + + + + + +function searchDato(dato) { +return dato; +} + +function checkIf(dato) { +if(dato==='1'){ +return false +} else if(dato==='5'){ +return false +} else if (dato ==='3'){ +return false +} else{ +return true +} + +} + + + + + + +return ( + + + + + + +Creando usuario + # semana + + + + +
+ + + Email + + + + Password + + + + + + Nombre del trabajador + + + + +Elige su empresa + + + + + + + + + + +Perfil + + + + + + + + + + + + + + + +
Asistencias
+ + {radiosAsis.map((radio, idxAs) => ( + setRadioValueAsis(e.currentTarget.value)} + > + {radio.name} + + ))} + + + +
+ + + +
Asignador
+ + {radiosAsig.map((radio, idxA) => ( + setRadioValueAsig(e.currentTarget.value)} + > + {radio.name} + + ))} + +
+ + + +
Habilitar Checador
+ + {radiosChec.map((radio, idxC) => ( + setRadioValueChec(e.currentTarget.value)} + > + {radio.name} + + ))} + + +
+ +
+ + + +
+
+ + +) +} + + + + + + + + + + + + + + +/* +const handleregisterUser = async (e)=> { + e.preventDefault(); + getAuth(app) + .createUser({ + email: values.email, + phoneNumber: values.password + }) + .then((userRecord) => { + // See the UserRecord reference doc for the contents of userRecord. + console.log('Successfully created new user:', userRecord.uid); + }) + .catch((error) => { + console.log('Error creating new user:', error); + }); +} */ +/* + const handleregisterUser = async (e)=> { + e.preventDefault(); + try{ + setError('') +getAuth.createUser({ + email: values.email, + password: values.password +}).then( + (userRecord)=>{ + console.log(userRecord.uid) + setUidUser(userRecord.uid) +const docuRef =doc(db, `users/${userRecord.uid}`); +setDoc(docuRef, { + activo: false , + asignador: checkIf(radioValueAsig), + checador:checkIf(radioValueChec) , + email: values.email, + password: values.password, + empresa:searchDato(Empresa), + lectoreAsistencia : checkIf(radioValueAsis), + nombre: values.nombre, + ocupado: false, + perfil: searchDato(Perfil), + area: searchArea(Perfil), + rol: 'usuario', + usator: false, + fechaDeCreacion: Date(), + UID:userRecord.uid +} +) + setValues({...formCreatorUser}) +setRadioValueChec('5') +setRadioValueAsig('3') +setRadioValueAsis('1') +setPerfil('') +setEmpresa('') + } +) + + + } catch(e) { + setError(e.message) + console.log(e.message) + } + }; */ + + + + + /* useEffect( + handleInputChange() + ,[]) */ +//console.log("values:", values) +//console.log(formCreatorUser) +//console.log(Perfil) +//console.log('Perfil search', searchDato(Perfil) ) +//console.log('Area:', searchArea(Perfil)) +//console.log(Empresa) +//console.log('empresa search', searchDato(Empresa) ) + +//console.log(Email) +//console.log(Password) +//console.log( 'nombre:', Nombre) \ No newline at end of file diff --git a/src/componentes/asignador/Proyecto/Proyecto.jsx b/src/componentes/asignador/Proyecto/Proyecto.jsx new file mode 100644 index 0000000..281643d --- /dev/null +++ b/src/componentes/asignador/Proyecto/Proyecto.jsx @@ -0,0 +1,589 @@ +import React, {useEffect, useContext, useRef, useState} from 'react' +import { useParams } from 'react-router-dom' +import CEpointContext from '../../../context/CEpointContext' +import Box from '@mui/material/Box'; +import Card from '@mui/material/Card'; +import CardActions from '@mui/material/CardActions'; +import CardContent from '@mui/material/CardContent'; + +import Button from '@mui/material/Button'; +import Paper from '@mui/material/Paper'; +import Accordion from '@mui/material/Accordion'; +import AccordionSummary from '@mui/material/AccordionSummary'; +import AccordionDetails from '@mui/material/AccordionDetails'; +import Typography from '@mui/material/Typography'; +import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; +import { Grid } from '@mui/material'; +import { styled } from '@mui/material/styles'; + +import List from '@mui/material/List'; +import ListItem from '@mui/material/ListItem'; +import ListItemText from '@mui/material/ListItemText'; +import ListItemAvatar from '@mui/material/ListItemAvatar'; +import Avatar from '@mui/material/Avatar'; + +import WorkIcon from '@mui/icons-material/Work'; + +import InputLabel from '@mui/material/InputLabel'; +import MenuItem from '@mui/material/MenuItem'; +import FormControl from '@mui/material/FormControl'; +import Select from '@mui/material/Select'; + +import Divider from '@mui/material/Divider'; +import TextField from '@mui/material/TextField'; + +import ContentPasteGoIcon from '@mui/icons-material/ContentPasteGo'; +import MyLocationIcon from '@mui/icons-material/MyLocation'; +import PersonIcon from '@mui/icons-material/Person'; + +const Item = styled(Paper)(({ theme }) => ({ + backgroundColor: theme.palette.mode === 'dark' ? '#1A2027' : '#fff', + ...theme.typography.body2, + padding: theme.spacing(1), + textAlign: 'center', + color: theme.palette.text.secondary, +})); + + + + +const currencies = [ + { + value: 'Activo', + label: 'Activo', + }, + { + value: 'Adicional', + label: 'Adicional', + }, + { + value: 'Garantia', + label: 'Garantia', + }, + { + value: 'Inactivo', + label: 'Inactivo', + }, +]; + + +const empresas = [ + { + value: 'CE2000', + label: 'CE2000', + }, + { + value: 'MCBRICK', + label: 'MCBRICK', + }, + { + value: 'SIARSA', + label: 'SIARSA', + }, + { + value: 'SECMA', + label: 'SECMA', + }, + { + value: 'SOLCOM', + label: 'SOLCOM', + }, +]; + + + +export const Proyecto = () => { + + const {electo } = useParams() + + + const {state, getSelectProyect, editaEstado, fetchChecadorAsignadoUser, getUsuariosChecador, editaEmpresa, editaPresupuesto, editaObra, editaUbicacion, editaResidenteUid }=useContext(CEpointContext) + + + + const estadoRef = useRef(null) + const nombreRef = useRef(null) + const empresaRef= useRef(null) + const presupuestoRef= useRef(null) + const obraRef= useRef(null) + const ubicacionRef= useRef(null) + + + +const handleEstadoChange = (event) => { + estadoRef.current = event.target.value; + console.log( + estadoRef.current, empresaRef.current, presupuestoRef.current, obraRef.current + ) +}; +const [name, setName]=useState() +const handleNameChange = (event) => { + nombreRef.current = event.target.value; + setName( event.target.value) + console.log(nombreRef.current) +}; + +const handleEmpresaChange = (event) => { + empresaRef.current = event.target.value; + console.log( + estadoRef.current, empresaRef.current, presupuestoRef.current, obraRef.current + ) +}; + + +/* useEffect(()=>{ + + async function fetchData() { + await getUsuariosChecador(); + } + fetchData(); + + },[]) */ + +useEffect( ()=>{ + + getSelectProyect(electo) + + console.log(state.selectProyecto.residenteUid) + + +} ,[electo]) + + + useEffect(()=>{ + try { + fetchChecadorAsignadoUser(state.selectProyecto.residenteUid) + } catch (error) { + console.log(error) + } + +},[state.selectProyecto.presupuesto]) + +useEffect(()=>{ + try { + fetchChecadorAsignadoUser(state.selectProyecto.residenteUid) + console.log('LOS TIENES!', state.ChecadorAsignadouser.email) + } catch (error) { + console.log(error) + } + +},[state.selectProyecto.residenteUid]) + + + + + + +const [open, setOpen] = useState(false) + + + +useEffect(()=>{ + const fetchAccounts = ()=>{ + if(open){ + getUsuariosChecador() + console.log('fetched :)') + } + } + fetchAccounts() + +} ,[open]) + +const clickEstado=()=>{ + editaEstado(state.selectProyecto.idProyecto, estadoRef.current ) + +} + +const clickEmpresa=()=>{ + editaEmpresa(state.selectProyecto.idProyecto, empresaRef.current ) + +} + +const clickPresupuesto=()=>{ + editaPresupuesto(state.selectProyecto.idProyecto, presupuestoRef.current ) + +} + +const clickObra=()=>{ + editaObra(state.selectProyecto.idProyecto, obraRef.current ) + +} +const clickUbicacion=()=>{ + editaUbicacion(state.selectProyecto.idProyecto, ubicacionRef.current ) + +} + +const clickName=()=>{ + editaResidenteUid(state.selectProyecto.idProyecto, nombreRef.current ) + +} + +//console.log(state.selectProyecto) + +//console.log(state.selectProyecto.residenteUid?state.selectProyecto.residenteUid:null) + + +console.log(open) + + + + + return ( +
+ + + + + + + {electo} + + + + + + } + aria-controls="panel1a-content" + id="panel1a-header" + onClick={()=>setOpen(!open)} + > + + Editar proyecto + + + + + + + + + {currencies.map((option) => ( + + {option.label} + + ))} + + + + + + + + + + + + +{state.UsuariosDisponiblesChecador&& + + + + Cuenta + + + + + + + + + + + + + + + +} + + + + +
+ + + + + + + + + {empresas.map((option) => ( + + {option.label} + + ))} + + + + + + + + + + + { + + presupuestoRef.current = e.target.value; + }} +label="No. Presupuesto" variant="outlined" /> + + + + + + + + + + + + { + + obraRef.current = e.target.value; + }} +label="Obra" variant="outlined" /> + + + + + + + + + + + { + + ubicacionRef.current = e.target.value; + }} +label="Ubicacion" variant="outlined" /> + + + + + + + + + +
+ + + + +
+
+
+ + + + + + {state.selectProyecto.presupuesto&&state.selectProyecto.presupuesto} + + + {state.selectProyecto.horario&&state.selectProyecto.horario} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + +
+ ) +} + + + +/* + +
+ +Actualiza el responsable de checar en proyecto + {state.UsuariosDisponiblesChecador&& + + +{ + state.UsuariosDisponiblesChecador.map((e)=>( + + + ) + +) +} + } + + +
+
+ +
+
+ +Ubicacion + + + + + +Numero de presupuesto + + + + +Obra + + + + + + +
+ + + + + + + + + + +*/ + + +{/* + */} + + + + /* value={values.obra} onChange={handleInputChange} placeholder={candidatoActualizar.obra}*/ + + + + {/* */} \ No newline at end of file diff --git a/src/componentes/asignador/ProyectosDesactivados.jsx b/src/componentes/asignador/ProyectosDesactivados.jsx new file mode 100644 index 0000000..b6fc099 --- /dev/null +++ b/src/componentes/asignador/ProyectosDesactivados.jsx @@ -0,0 +1,43 @@ +import React, { useEffect, useContext } from 'react' +import { Button, Col, Container, Modal, Row } from 'react-bootstrap' + + +import CEpointContext from '../../context/CEpointContext'; + const ProyectosDesactivados = (props) => { + + const {state, getProyectosDesactivados}=useContext(CEpointContext) + + + + + useEffect( + ()=>{ + + getProyectosDesactivados() + + },[]) + + + + + + return ( + + + + Proyectos desactivados + + + + + + + + + + + + ) +} + +export default React.memo(ProyectosDesactivados) \ No newline at end of file diff --git a/src/componentes/asignador/SelectorChecador.jsx b/src/componentes/asignador/SelectorChecador.jsx index 1366e25..7d9d79b 100644 --- a/src/componentes/asignador/SelectorChecador.jsx +++ b/src/componentes/asignador/SelectorChecador.jsx @@ -1,15 +1,15 @@ import React, { useContext } from 'react' import {Form} from 'react-bootstrap' -import UsuariosContext from '../../context/UsuariosContext'; +import CEpointContext from '../../context/CEpointContext' export const SelectorChecador = (prop) => { - const { UserChecador}=useContext(UsuariosContext) - console.log('desde selector:',UserChecador) + const { state}=useContext(CEpointContext) + return ( { - UserChecador.map((e)=>( + state.UserChecador.map((e)=>( e.map((s)=>( diff --git a/src/componentes/asignador/asignadorRepair.js b/src/componentes/asignador/asignadorRepair.js deleted file mode 100644 index e534d79..0000000 --- a/src/componentes/asignador/asignadorRepair.js +++ /dev/null @@ -1,418 +0,0 @@ - -export default function Asignador1(handleSubmit) { - - const [formValues, setFormValues] = useState( - [] - ) - - - const handleChange = (event) => { - - const {name, value} = event.target - setFormValues({ - ...formValues, [name]: value }) - } - - - const _handleSubmit = (e) => { - e.preventDefault() - handleSubmit({...formValues}) - - - - console.log(formValues) - - - - } - - - - - - - - - - - - - - /*const handleData = async () => { - - const data = [{ - residente1:{ - Residente: selectedRes1, - Proyecto: selectedProy1 - }}, - {residente2:{ - Residente: selectedRes2, - Proyecto: selectedProy2 - }}, - {residente3:{ - Residente:selectedRes3, - proyecto: selectedProy3 - }}, - {residente4:{ - Residente:selectedRes4, - proyecto: selectedProy4 - }} - ] - setIsLoading(true); - await axios.post('http://localhost:8800/api/asignador/planAsignacion/${currentUser._id}', - { data }).then(res=>{ - console.log(res); - console.log(res.data); - }) - - } - - - - - - - async function submit(){ - - - let url = ''; - const data = [{ - residente1:{ - Residente: selectedRes1, - Proyecto: selectedProy1 - }}, - {residente2:{ - Residente: selectedRes2, - Proyecto: selectedProy2 - }}, - {residente3:{ - Residente:selectedRes3, - proyecto: selectedProy3 - }}, - {residente4:{ - Residente:selectedRes4, - proyecto: selectedProy4 - }} - ] - - let response= - setIsLoading(true); - await fetch(url, { - - method: 'POST', // or 'PUT' - body: JSON.stringify(data), // data can be `string` or {object}! - headers:{ - 'Content-Type': 'application/json' - } - }).then(res => res.json(data)) - .catch(error => console.error('Error:', error)) - .then(response => console.log('Success:', response), - ); - - }*/ - - - - - const [isLoanding, setIsLoading] = useState(false); - - - - - - - const optionsResidentes= [ - {value:'', text: '--elige Residente--'}, - {value:'Andres Perez Dimas', text:'Andres Perez Dimas'}, - {value:'Carlos Ruiz', text:'Carlos Ruiz'}, - {value:'Julio cesar Borjas', text:'Julio cesar Borjas'}, - {value:'Daniel Rodriguez', text:'Daniel Rodriguez'} - ]; - - const optionsProyectos= [ - {value:'', text: '--elige Proyecto--'}, - {value:'proyecto 1', text: 'proyecto 1'}, - {value:'proyecto 2', text: 'proyecto 2'}, - {value:'proyecto 3', text: 'proyecto 3'}, - {value:'proyecto 4', text: 'proyecto 4'} - ] - - - //RESIDENTES - const [selectedRes1, setSelectRes1] = useState(optionsResidentes[0].label) - const [selectedRes2, setSelectRes2] = useState(optionsResidentes[0].value) - const [selectedRes3, setSelectRes3] = useState(optionsResidentes[0].value) - const [selectedRes4, setSelectRes4] = useState(optionsResidentes[0].value) - - - - const handleChangeRes1 = event => { - setSelectRes1(event.target.value ); - console.log(event.target.value); - - - } - - const handleChangeRes2 = event => { - setSelectRes2(event.target.value); - } - - const handleChangeRes3 = event => { - setSelectRes3(event.target.value); - } - const handleChangeRes4 = event => { - setSelectRes4(event.target.value); - } - - //Proyectos - const [selectedProy1, setSelectProy1] = useState(optionsProyectos[0].value) - const [selectedProy2, setSelectProy2] = useState(optionsProyectos[0].value) - const [selectedProy3, setSelectProy3] = useState(optionsProyectos[0].value) - const [selectedProy4, setSelectProy4] = useState(optionsProyectos[0].value) - - const handleChangeProy1 = event => { - setSelectProy1(event.target.value); - console.log(optionsProyectos.text); - } - - const handleChangeProy2 = event => { - setSelectProy2(event.target.value); - } - - const handleChangeProy3 = event => { - setSelectProy3(event.target.value); - } - const handleChangeProy4 = event => { - setSelectProy4(event.target.value); - } - - //relacion residente y proyecto EXPERIMENTACION - - - - - function FormAsignador() { - return( -
- -
Elige el residente
-
Elige el proyecto
-
- -
-
- - - -
Residente
- - {optionsResidentes.map(option=>( - - ))} - - - - -
Proyecto
- - {optionsProyectos.map(option=>( - - ))} - -
-
- - -
- - - -
Residente
- - {optionsResidentes.map(option=>( - - ))} - - - - -
Proyecto
- - {optionsProyectos.map(option=>( - - ))} - -
-
- -
- - - -
Residente
- - {optionsResidentes.map(option=>( - - ))} - - - - -
Proyecto
- - {optionsProyectos.map(option=>( - - ))} - -
-
-
- - - -
Residente
- - {optionsResidentes.map(option=>( - - ))} - - - - -
Proyecto
- - {optionsProyectos.map(option=>( - - ))} - -
- -
- -
- - - -
- - ) - - } - - function Formulario(){ - return(
{isLoanding?:}
) - - } - - function Asignacion() { - return( - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#ResidenteProyecto
1{selectedRes1}{selectedProy1}
2{selectedRes2}{selectedProy2}
3{selectedRes3}{selectedProy3}
3{selectedRes4}{selectedProy4}
- - /*
- - - -
Residente
- {} - - -
Proyecto
- {} - -
-
, - - -
- - - -
Residente
- {selectedRes2} - - - -
Proyecto
- {selectedProy2} - -
-
, - -
- - - -
Residente
- {selectedRes3} - - - -
Proyecto
- {selectedProy3} - - -
- - -
- - */ - ) - } - return ( -
- {isLoanding? :} -
- ) - \ No newline at end of file diff --git a/src/componentes/asignador/neo4.jpg b/src/componentes/asignador/neo4.jpg new file mode 100644 index 0000000..58cd65b Binary files /dev/null and b/src/componentes/asignador/neo4.jpg differ diff --git a/src/componentes/asignador/options.js b/src/componentes/asignador/options.js new file mode 100644 index 0000000..6b3c95f --- /dev/null +++ b/src/componentes/asignador/options.js @@ -0,0 +1,233 @@ +export const options = [ + { + type: "group", + name: "CUENTAKEYCHECADOR", + items: [ + { name: "CHECADOR", value: "CHECADOR" } + + ] + }, + { + type: "group", + name: "CIVILES", + items: [ + + { name: "Residente de obra", value: "Residente de obra" }, + { name: "Arquitecto proyectista", value: "Arquitecto proyectista" }, + { name: "Administrador de obra", value: "Administrador de obra"}, + { name: "Cabo albañil", value: "Cabo albañil" }, + { name: "Oficial albañil", value: "Oficial albañil" }, + { name: "Oficial medio albañil", value: "Oficial medio albañil" }, + { name: "Ayudante albañil", value: "Ayudante albañil" }, + { name: "Ayudante general", value: "Ayudante general" }, + { name: "Operador", value: "Operador" } + + ] + }, + { + type: "group", + name: "SEGURIDAD E HIGIENE", + items: [ + { name: "Coordinador de SHE", value: "Coordinador de SHE" }, + { name: "Supervision de SHE", value: "Supervision de SHE" } + + ] + }, + { + type: "group", + name: "ELECTRICOS", + items: [ + { name: "Residente electrico", value: "Residente electrico" }, + { name: "Oficial electrico", value: "Oficial electrico" }, + { name: "Ayudante electrico", value: "Ayudante electrico" } + ] + }, + { + type: "group", + name: "HERRERIA", + items: [ + { name: " Cabo soldador", value: "Cabo soldador" }, + { name: "Soldador", value: "Soldador" }, + { name: "Herrero", value: "Herrero" }, + { name: "Ayudante de soldador", value: "Ayudante de soldador" }, + { name: "Maestro aluminiero", value: "Maestro aluminiero" }, + ] + }, + { + type: "group", + name: "DIRECCION", + items: [ + { name: "Director MacBrick", value: "Director MacBrick" }, + { name: "Director inmobiliaria", value: "Director inmobiliaria" }, + { name: "Director SIARSA", value: "Director SIARSA" }, + { name: "Director SECMA", value: "Director SECMA" }, + { name: "Director CE2000", value: "Director CE2000" }, + { name: "Director SOLCOM", value: "Director SOLCOM" } + ] + }, + { + type: "group", + name: "SIARSA", + items: [ + { name: "Gerente de operaciones", value: "Gerente de operaciones" }, + { name: "Tecnico especialista", value: "Tecnico especialista" } + ] + }, + { + type: "group", + name: "SECMA", + items: [ + { name: "Proyectos CCTV", value: "Proyectos CCTV" }, + { name: "Operacion CCTV", value: "Operacion CCTV" }, + { name: "Tecnico CCTV", value: "Tecnico CCTV" } + ] + }, + { + type: "group", + name: "SOLCOM", + items: [ + { name: "Asistente Direccion", value: "Asistente Direccion" } + + ] + }, + { + type: "group", + name: "ALMACEN", + items: [ + { name: "Chofer", value: "Chofer" } + + ] + }, + { + type: "group", + name: "CORPORATIVO", + items: [ + { name: "Portero", value: "Portero" } + + ] + } + + ]; + + export function searchArea(dato) { + let area; + switch (dato) { + case "CHECADOR": + area = "CUENTAKEYCHECADOR"; + break; + case "Residente de obra": + area = "CIVIL"; + break; + case "Arquitecto proyectista": + area = "CIVIL"; + break; + case "Cabo albañil": + area = "CIVIL"; + break; + case "Administrador de obra": + area = "CIVIL"; + break; + + case "Oficial albañil": + area = "CIVIL"; + break; + case "Ayudante albañil": + area = "CIVIL"; + break; + case "Ayudante general": + area = "CIVIL"; + break; + case "Oficial medio albañil": + area = "CIVIL"; + break; + case "Operador": + area = "CIVIL"; + break; + case "Director MacBrick": + area = "CIVIL"; + break; + case "Director inmobiliaria": + area = "CIVIL"; + break; + case "Director CE2000": + area = "CIVIL"; + break; + case "Coordinador de SHE": + area = "SHE"; + break; + case "Supervision de SHE": + area = "SHE"; + break; + case "Residente electrico": + area = "ELECTRICOS"; + break; + case "Oficial electrico": + area = "ELECTRICOS"; + break; + case "Ayudante electrico": + area = "ELECTRICOS"; + break; + case "Cabo soldador": + area = "HERREROS"; + break; + case "Soldador": + area = "HERREROS"; + break; + case "Herrero": + area = "HERREROS"; + break; + case "Ayudante de soldador": + area = "HERREROS"; + break; + case "Maestro aluminiero": + area = "HERREROS"; + break; + case "Director SIARSA": + area = "SIARSA"; + break; + case "Gerente de operaciones": + area = "SIARSA"; + break; + case "Tecnico especialista": + area = "SIARSA"; + break; + case "Director SECMA": + area = "SECMA"; + break; + case "Proyectos CCTV": + area = "SECMA"; + break; + case "Operacion CCTV": + area = "SECMA"; + break; + case "Tecnico CCTV": + area = "SECMA"; + break; + case "Director SOLCOM": + area = "SOLCOM"; + break; + case "Asistente Direccion": + area = "SOLCOM"; + break; + case "Chofer": + area = "CORPORATIVO"; + break; + case "Portero": + area = "CORPORATIVO"; + break; + + + + } + console.log('funcion:', area) + //setArea(area) + return area; + } + export const optionsEmpresas=[ + {name: 'CE2000', value: 'CE2000'}, + {name: 'SECMA', value: 'SECMA'}, + {name: 'SIARSA', value: 'SIARSA'}, + {name: 'MCBRICK', value: 'MCBRICK'}, + {name: 'SOLCOM', value: 'SOLCOM'}, + {name: 'INMOBILIARIA', value: 'INMOBILIARIA'} + ] \ No newline at end of file diff --git a/src/componentes/horario/AsistenciasParaReporteNomina/GeneradorReporte.jsx b/src/componentes/horario/AsistenciasParaReporteNomina/GeneradorReporte.jsx new file mode 100644 index 0000000..7664986 --- /dev/null +++ b/src/componentes/horario/AsistenciasParaReporteNomina/GeneradorReporte.jsx @@ -0,0 +1,358 @@ + +import React, {useState, useContext, useEffect} from 'react' +import Grid from '@mui/material/Grid'; +import List from '@mui/material/List'; +import Card from '@mui/material/Card'; +import Stack from '@mui/material/Stack'; +import Skeleton from '@mui/material/Skeleton'; +import CardHeader from '@mui/material/CardHeader'; +import ListItem from '@mui/material/ListItem'; +import ListItemText from '@mui/material/ListItemText'; +import ListItemIcon from '@mui/material/ListItemIcon'; +import Checkbox from '@mui/material/Checkbox'; +import Button from '@mui/material/Button'; +import Divider from '@mui/material/Divider'; +import CEpointContext from "../../../context/CEpointContext"; + +import Container from "@mui/system/Container"; +import TextField from '@mui/material/TextField'; +import { addDays } from 'date-fns'; +import { createTheme, ThemeProvider, styled } from '@mui/material/styles'; +import moment from 'moment'; +import dayjs from "dayjs"; + +import { DateRangePicker } from 'react-date-range'; +import 'react-date-range/dist/styles.css'; +import 'react-date-range/dist/theme/default.css'; +import * as XLSX from 'xlsx/xlsx.mjs'; + + + +const theme = createTheme({ + Container: { + height: '500px', + overflow: 'scroll', + }, +}); + + + +//seleccionador +function not(a, b) { + return a.filter((value) => b.indexOf(value) === -1); +} + +function intersection(a, b) { + return a.filter((value) => b.indexOf(value) !== -1); +} + +function union(a, b) { + return [...a, ...not(b, a)]; +} + +export default function GeneradorReporte() { + + const locale = 'es'; // change this to the desired language code + dayjs.locale(locale); + + +const {state, getConsultaConstruida, getNamesProyectos} = useContext(CEpointContext) + +useEffect(()=>{ + if(!state.proyectonames) + getNamesProyectos() +},[state.proyectonames]) + + + + + + + +const [State, setState] = useState([ + { + startDate: new Date(), + endDate: addDays(new Date(), 7), + key: 'selection' + } +]); + + + + + + const [checked, setChecked] = React.useState([]); + const [left, setLeft] = React.useState([...state.proyectonames]); + const [right, setRight] = React.useState([]); + + const leftChecked = intersection(checked, left); + const rightChecked = intersection(checked, right); + + const handleToggle = (value) => () => { + const currentIndex = checked.indexOf(value); + const newChecked = [...checked]; + + if (currentIndex === -1) { + newChecked.push(value); + } else { + newChecked.splice(currentIndex, 1); + } + + setChecked(newChecked); + } ; + + const numberOfChecked = (items) => intersection(checked, items).length; + + const handleToggleAll = (items) => () => { + if (numberOfChecked(items) === items.length) { + setChecked(not(checked, items)); + } else { + setChecked(union(checked, items)); + } + }; + + const handleCheckedRight = () => { + setRight(right.concat(leftChecked)); + setLeft(not(left, leftChecked)); + setChecked(not(checked, leftChecked)); + }; + + const handleCheckedLeft = () => { + setLeft(left.concat(rightChecked)); + setRight(not(right, rightChecked)); + setChecked(not(checked, rightChecked)); + }; + + +console.log(state.proyectonames&&state.proyectonames, 'right:', right, "Fecha?", State[0].startDate, moment(State[0].endDate).format('LL') ) + + + + + + + + + + + + + + + + + const customList = (title, items) => ( + + + } + title={title} + subheader={`${numberOfChecked(items)}/${items.length} selected`} + /> + + + {items.map((value) => { + const labelId = `transfer-list-all-item-${value}-label`; + + return ( + + + + + + + ); + })} + + + ); + + + + + + + + /* trabajador: worker.trabajador, */ + + function groupByWorker(data) { + const result = []; + const workerMap = new Map(); + + for (const item of data) { + for (const worker of item.asistencias) { + if (!workerMap.has(worker.trabajador)) { + workerMap.set(worker.trabajador, { + + asistencias: [] + }); + } + workerMap.get(worker.trabajador).asistencias.push({ + trabajador:worker.trabajador, + tipoAsistencia: worker.tipoAsistencia, + semana: worker.semana, + presupuesto: worker.presupuesto, + fecha : moment(worker.date).format('LL'), + hora: moment(worker.date).format('LT') + + + }); + } + } + + for (const worker of workerMap.values()) { + result.push(worker); + } + + return result; + } + + + + + + function reductora(arr) { + return arr.reduce((acumulador, objeto) => acumulador.concat(objeto.asistencias), []); + } + + console.log( + reductora(groupByWorker(state.test&&state.test)) + ) + + + function filterByDateRange(data, fechaInicial, fechaFinal) { + const asistencias = reductora(groupByWorker(data)); + return asistencias.filter((asistencia) => { + const fecha = moment(asistencia.fecha); + const fecha1= moment(fechaInicial).format('LL') + const fecha2= moment(fechaFinal).format('LL') + return fecha.isBetween(fecha1, fecha2, null, '[]'); + }); + } + + useEffect(()=>{ + console.log(filterByDateRange(state.test&&state.test, State[0].startDate, State[0].endDate)) + },[State[0].endDate]) + + +function convertArrayToExcel(array, fileName) { + const ws = XLSX.utils.json_to_sheet(array); + const wb = XLSX.utils.book_new(); + XLSX.utils.book_append_sheet(wb, ws, 'Sheet1'); + XLSX.writeFile(wb, `${fileName}.xlsx`); +} + + + + + + + + + +useEffect(()=>{ + getConsultaConstruida(right) +},[right]) + + + + return ( + + + + + {left? customList('Selecciona presupuestos', left) + :} + + + + + + + {customList('Presupuestos elegidos', right)} + + + + + setState([item.selection])} + showSelectionPreview={true} + moveRangeOnFirstSelection={false} + months={2} + ranges={State} + direction="horizontal" +/> + + + + + + + ); +} + diff --git a/src/componentes/horario/AsistenciasParaReporteNomina/Presupuesto.jsx b/src/componentes/horario/AsistenciasParaReporteNomina/Presupuesto.jsx new file mode 100644 index 0000000..fc6d378 --- /dev/null +++ b/src/componentes/horario/AsistenciasParaReporteNomina/Presupuesto.jsx @@ -0,0 +1,404 @@ +import React, {useState, useEffect, useContext} from 'react' + +import { Card, Button, Table} from 'react-bootstrap' +import CEpointContext from '../../../context/CEpointContext'; + +import * as XLSX from "xlsx" + +//import '../Horario.css' + + + +export const Presupuesto = () => { + +const {state} =useContext(CEpointContext) +const [test, setTest]=useState(state.TotalProyectos?state.TotalProyectos:null) +/* + const [Presupuestos, setPresupuesto] = useState([]); + const [Asistencias, setAsistencias] = useState([]); + const [itinerante, setItinerante] = useState() + */ + + +//console.log('GET proyectos', state.TotalProyectos?state.TotalProyectos:null) + +//console.log(test) + + const ProyectosFiltrados = test.filter(obj => (obj.asistencias || []).length !== 0); + + + console.log('FILTRO', ProyectosFiltrados&&ProyectosFiltrados ) + + + + + return ( + +
+ {ProyectosFiltrados&& + ProyectosFiltrados.map((presupuesto)=>( + )) + } +
+ + + + +
+ ) + } + + + + + + + + + + + /* +
+ + + + + + + + + + + + + + + + + + + + + + {try1&&try1.map((r)=>{ + + + return + {r.data.map((s)=>{ + + return + + + + + + + + + + })} + + + + })} + + + + +
TrabajadorAsistencia
{r.trabajador}
Semana: {s.semana}, Registro: {s.tipoAsistencia}{s.date}
+ + + + + + + + + + +
+
*/ + + + + + + + + + + + +/* console.log("Itinerante: ", itinerante); + + const AsistenciasPresupuesto = (props) => { + + return props.reduce((acc, current)=>{ + const foundItem = acc.find(it => it.semana === current.semana) + // console.log('past:', acc); + + setItinerante(acc) + //console.log('r:', r); + if (foundItem ){ + foundItem.data=foundItem.data + ?[...foundItem.data, {'trabajador': current.trabajador,'tipoAsistencia':current.tipoAsistencia, 'date': current.date}] + :[{ 'trabajador': current.trabajador,'tipoAsistencia':current.tipoAsistencia, 'date': current.date }] +}else{ acc.push( { + 'semana': current.semana, + 'data': [{ + 'trabajador': current.trabajador,'tipoAsistencia':current.tipoAsistencia, 'date': current.date + }] +} ) } + +return acc + + }, [])} */ + + + + + + +/* const AsistenciasPresupuestodos = (props) =>{ +let nuevoArray = [] + let arrayTemporal = [] +for(var i=0; iresp["semana"]==props[i]["semana"]) + if(arrayTemporal.length>0){ + nuevoArray[nuevoArray.indexOf(arrayTemporal[0])]["Data"].push(props[i]["trabajador"]) + }else{ + nuevoArray.push({"semana": props[i]["semana"], "data": [props[i]["trabajador"]]}) + } +} +console.log('nuevo array test: ',nuevoArray) +} */ + +/* +console.log('muestra', Asistencias) +let resultado = {} +Asistencias.forEach(asistencias=>{ + const nombreGrupo =asistencias.semana; + if(!resultado[nombreGrupo]) resultado[nombreGrupo]=[] +resultado[nombreGrupo].push(asistencias) + + +}) + +console.log('RESS',resultado) + */ + + + + +/* resultado.forEach(dato=> + console.log('335',dato)) */ + + //const [or, setOr]= useState() + + /* const orden =(props)=>{ + return props.reduce((acc, current)=>{ + const foundIte = acc.find(it => it.nombre === current.nombre) + console.log('ACC: ', acc) + const o=[] + o.push(acc) + setOr(o) + if(foundIte){ + foundIte.data=foundIte.data + ?[...foundIte.data, {'tipoAsistencia':current.tipoAsistencia, 'date': current.date}] + :[ {'tipoAsistencia':current.tipoAsistencia, 'date': current.date} ] + }else{ + acc.push({ + 'trabajador': current.trabajador, + 'data' :[{'tipoAsistencia':current.tipoAsistencia, 'date': current.date}] + }) + } + return acc; + }, [] + )} */ + + // orden(itinerante) + // console.log('orden: ', or); +/* + const Monday = (dato)=>{ + let exReg = /Mon/ +if(exReg.test(dato)){ + return dato +}else{return null} + } + + const Martes = (dato)=>{ + let exReg = /Tue/ +if(exReg.test(dato)){ + return dato +}else{return null} + } + + const Miercoles = (dato)=>{ + let exReg = /Wed/ +if(exReg.test(dato)){ + return dato +}else{return null} + } + + const Jueves = (dato)=>{ + let exReg = /Thu/ +if(exReg.test(dato)){ + return dato +}else{return null} + } + const Viernes = (dato)=>{ + let exReg = /Fri/ +if(exReg.test(dato)){ + return dato +}else{return null} + } + + const Sabado = (dato)=>{ + let exReg = /Sat/ +if(exReg.test(dato)){ + return dato +}else{return null} + } */ + + + + +//nuevoObjeto.reduce((acc,current)) +/* const [excel, setExcel] = useState() +function ExportData() { + //var XLSX = require("xlsx") + var data = [{ + "name": "John", + "city": "Seattle" + }, + { + "name": "Mike", + "city": "Los Angeles" + }, + { + "name": "Zach", + "city": "New York" + } +]; */ + + /* 创建worksheet */ + // var ws = XLSX.utils.json_to_sheet(Asistencias); + + /* 新建空workbook,然后加入worksheet */ + /* var wb = XLSX.utils.book_new(); + XLSX.utils.book_append_sheet(wb, ws, "People"); + */ + /* 生成xlsx文件 */ + // XLSX.writeFile(wb, `${NombreProyecto}.xlsx`); +//} + +{/* +ZONA DE GUERRA + */} + // console.log('itinerante', itinerante) + //console.log('itinerante', itinerante['datos']) +/* +const [try1, setTry1]=useState() +let nuevoObjeto = {} +let nuevoArray = [] + +console.log('nuevo objeto: ', nuevoObjeto) +console.log('nuevo Array: ', nuevoArray) + + */ +/* useEffect(()=>{ + +},[]) */ + +/* const darkness = (props) => { + + return props.reduce((acc, current)=>{ + const foundItem1 = acc.find(it => it.trabajador === current.trabajador) + console.log('desde darkness:', acc); + + setTry1(acc) + //console.log('r:', r); + if (foundItem1 ){ + foundItem1.data=foundItem1.data + ?[...foundItem1.data, {'semana':current.semana,'tipoAsistencia':current.tipoAsistencia, 'date': current.date}] + :[{'semana':current.semana, 'tipoAsistencia':current.tipoAsistencia, 'date': current.date }] + }else{ acc.push( { + 'trabajador': current.trabajador, + 'data': [{ + 'semana':current.semana, 'tipoAsistencia':current.tipoAsistencia, 'date': current.date + }] + } ) } + +return acc + + }, [])} + */ + +/* const [NombreProyecto, setNombreProyecto] = useState() +console.log('NOMBRE PROYECTO', NombreProyecto) + */ + + + + + + +{/* + + + + + + + { + e.data.map((s)=>{ + const nombreTrabajador= s.trabajador; + if(!nuevoObjeto[nombreTrabajador])nuevoObjeto[nombreTrabajador]=[]; + nuevoObjeto[ nombreTrabajador].push(s) + //console.log('nuevo objeto: ', nuevoObjeto) + + +//try a new reduce + + + + return + + {s.tipoAsistencia} + {s.trabajador} + {Monday(s.date)} + {Martes(s.date)} + {Miercoles(s.date)} + {Jueves(s.date)} + {Viernes(s.date)} + {Sabado(s.date)} + + + + + + + + + }) + } + +*/} diff --git a/src/componentes/horario/hoja.xlsx b/src/componentes/horario/AsistenciasParaReporteNomina/hoja.xlsx similarity index 100% rename from src/componentes/horario/hoja.xlsx rename to src/componentes/horario/AsistenciasParaReporteNomina/hoja.xlsx diff --git a/src/componentes/horario/Horario.css b/src/componentes/horario/Horario.css deleted file mode 100644 index e2d4df4..0000000 --- a/src/componentes/horario/Horario.css +++ /dev/null @@ -1,49 +0,0 @@ -button.total.btn.btn-success{ - - background-color: 3B86E; - height: 60px; - width: 150px; -} - -button.ubicacion.btn.btn-warning{ - - background-color: 3B86E; - height: 60px; - width: 150px; -} - -button.obra.btn.btn-warning{ - - background-color: 3B86E; - height: 60px; - width: 150px; -} - -button.semana.btn.btn-warning{ - - background-color: 3B86E; - height: 60px; - width: 150px; -} - -button.fecha.btn.btn-warning{ - - background-color: 3B86E; - height: 60px; - width: 150px; -} - -button.trabajador.btn.btn-warning{ - - background-color: 3B86E; - height: 60px; - width: 150px; -} - -div.presupuestos{ - height: 100px; - background-color: dimgrey; - overflow: hidden; - overflow-x: scroll; -} - diff --git a/src/componentes/horario/Horario.jsx b/src/componentes/horario/Horario.jsx index 9cd4691..d7f1587 100644 --- a/src/componentes/horario/Horario.jsx +++ b/src/componentes/horario/Horario.jsx @@ -1,32 +1,52 @@ -import React from 'react' -import './Horario.css' -import {Row, Form, Col, Button, Spinner, Table, Card, Container } from 'react-bootstrap' +import React, {useEffect, useContext} from 'react' +//import './Horario.css' +import {Row, Form, Col, Button, Spinner, Table, Card } from 'react-bootstrap' import { Outlet, useNavigate } from 'react-router-dom' +import CEpointContext from '../../context/CEpointContext'; +import Container from "@mui/system/Container"; + + + export const Horario = () => { +const {state,getNamesProyectos}= useContext(CEpointContext) +const navigate = useNavigate(); + +useEffect(()=>{ + if(!state.proyectonames) + getNamesProyectos() +},[state.proyectonames]) + + + + -const navigate = useNavigate(); return ( - + Registros de asistencia Consulta las asistencias segun el criterio de busqueda -
+ - + - + +
-
+
diff --git a/src/componentes/horario/MyMap.jsx b/src/componentes/horario/MyMap.jsx new file mode 100644 index 0000000..5c1db37 --- /dev/null +++ b/src/componentes/horario/MyMap.jsx @@ -0,0 +1,69 @@ + +import React from 'react' +import { GoogleMap, useJsApiLoader, Marker } from '@react-google-maps/api'; + +import { Card } from 'react-bootstrap'; +const containerStyle = { + width: '50em', + height: '50em' +}; + + + + + + +const MyMap=({latitud, longitud})=> { + const { isLoaded } = useJsApiLoader({ + id: 'google-map-script', + googleMapsApiKey: "AIzaSyCEmh6F9d4KnDeKK6eVrKqyKOZaZYvFY7s" + }) + + const [map, setMap] = React.useState(null) + +console.log('MAPA', latitud, longitud) + const position = { + lat:parseFloat(latitud?latitud:null), + lng:parseFloat(longitud?longitud:null) + } + + + +//console.log('isLoaded', isLoaded ) + const onLoad = React.useCallback(function callback(map) { + // This is just an example of getting and using the map instance!!! don't just blindly copy! + const bounds = new window.google.maps.LatLngBounds(position); + map.fitBounds(bounds); + + setMap(map) + }, []) + + const onUnmount = React.useCallback(function callback(map) { + setMap(null) + }, []) + + return isLoaded ? ( + + + , + + + <> + + + + ) : <> +} + +export default React.memo(MyMap) + + + + diff --git a/src/componentes/horario/Presupuesto.jsx b/src/componentes/horario/Presupuesto.jsx deleted file mode 100644 index bcd5594..0000000 --- a/src/componentes/horario/Presupuesto.jsx +++ /dev/null @@ -1,303 +0,0 @@ -import React, {useState, useEffect} from 'react' -import { onSnapshot, where, collection, query} from 'firebase/firestore' -import { Card, Button, Accordion, Table} from 'react-bootstrap' -import { getAuth } from 'firebase/auth'; -import { db } from '../../firebase/firebase'; -import './Horario.css' - -export const Presupuesto = () => { - const auth = getAuth() - const dato =auth.currentUser; - const [Presupuestos, setPresupuesto] = useState([]); - const [Asistencias, setAsistencias] = useState([]); - const [itinerante, setItinerante] = useState([]) - const getPresupuestos =async () => { - - const q = query(collection(db, "asignaciones"),where("asistencias", "!=", [] )) - await onSnapshot(q, (query)=>{ - const data=[] - query.forEach((doc)=>{ - data.push(doc.data()) - }) - - setPresupuesto(data) - }) } - - useEffect(()=>{ - getPresupuestos() - - },[]) - - console.log("hook: ", Asistencias); - - const AsistenciasPresupuesto = (props) => { - - return props.reduce((past, current)=>{ - const foundItem = past.find(it => it.semana === current.semana) - console.log('past:', past); - const r= [] - r.push(past); - setItinerante(r) - console.log('r:', r); - if (foundItem ){ - foundItem.data=foundItem.data - ?[...foundItem.data, {'trabajador': current.trabajador,'tipoAsistencia':current.tipoAsistencia, 'date': current.date}] - :[{ 'trabajador': current.trabajador,'tipoAsistencia':current.tipoAsistencia, 'date': current.date }] - }else{ past.push( { - 'semana': current.semana, - 'data': [{ - 'trabajador': current.trabajador,'tipoAsistencia':current.tipoAsistencia, 'date': current.date - }] - } ) } - - return past; - - }, [])} - - - - - console.log('itinerante:', itinerante); - - return ( - -
- { - Presupuestos.map((presupuesto)=>( - )) - } -
- - - - - -
- - - { - itinerante.map((e=> ( - - e.map((r)=>( - console.log('desde mapa:', r.data), - - - {r.semana} - - - - - - - - - - - - { - r.data.map((s)=>( - console.log('mapa s:', s), - - - - - - - - - - - - )) - } - - -
TrabajadorAsistenciaTiempo
{s.trabajador}{s.tipoAsistencia}{s.date}
- - - - -
-
-
- - )) - - ))) - - } - -
-
-
- ) - } - - - - - - - - - - - - - - -{/* - -
- {{ { - Presupuestos.map((presupuesto)=>( - )) - } -
- -segmentoo - -itinerante.map((e=> ( - - e.map((r)=>( -console.log('desde mapa:', r.data) - - - {r.semana} - - - - - - - - - - - - - { - r.data.map((s)=>( - console.log('mapa s:', s) - - - - - - - - - - - - - )) -} - - -
TrabajadorAsistenciaTiempo
{s.trabajador}{s.tipoAsistencia}{s.date}
- - - - -
-
-
- -)) - -))) - - } - - -
- - - - - - - - - -{ - itinerante.map((e=> ( - - e.map((r)=>( - console.log('desde mapa:', r.data) - - - {r.semana} - - - - - - - - - - - - - { - r.data.map((s)=>( - console.log('mapa s:', s) - - - - - - - )) - } - -
TrabajadorAsistenciaTiempo
{s.trabajador}{s.tipoAsistencia}{s.date}
- -
- -
- - -
- - - - - - - - } - - - - - -*/} - - \ No newline at end of file diff --git a/src/componentes/horario/Presupuesto1.jsx b/src/componentes/horario/Presupuesto1.jsx deleted file mode 100644 index 5361003..0000000 --- a/src/componentes/horario/Presupuesto1.jsx +++ /dev/null @@ -1,198 +0,0 @@ -import React, {useState, useEffect, useMemo} from 'react' -import { updateDoc, arrayUnion, doc, onSnapshot, setDoc, where, collection, query, getDocs, get} from 'firebase/firestore' -import { Card, Container, Toast, Button, Accordion, Table } from 'react-bootstrap' -import { useTable } from 'react-table'; -import { getAuth } from 'firebase/auth'; -import { db } from '../../firebase/firebase'; -import './Horario.css' -import { async } from '@firebase/util'; -import { RenderHoras } from './RenderHoras'; -export const Presupuesto1 = () => { - const auth = getAuth() - const dato =auth.currentUser; - const [Presupuestos, setPresupuesto] = useState([]); - const [Asistencias, setAsistencias] = useState([]); - const [value, setValue] = useState(); - - const getPresupuestos =async () => { - - const q = query(collection(db, "asignaciones"),where("asistencias", "!=", [] )) - await onSnapshot(q, (query)=>{ - const data=[] - query.forEach((doc)=>{ - data.push(doc.data()) - }) - - setPresupuesto(data) - }) } - - useEffect(()=>{ - getPresupuestos() - - - },[]) - - -const data = React.useMemo(Asistencias) -const columns = React.useMemo( - () => [ - - { - Header: 'Nombre', - accessor: 'nombre' - }, - { - Header: 'Entrada', - accessor: 'entrada' - - }, - { - Header: 'Salida', - accessor: 'entrada' - - } - ] -) - -const tableInstance = useTable({ columns, data }) - -const { - getTableProps, - getTableBodyProps, - headerGroups, - rows, - prepareRow, - } = tableInstance - - - return ( - - -
- { - Presupuestos.map((presupuesto)=>( - )) - } -
-
- -{Asistencias.map((e)=>( - console.log("desde mapeo asistencias", e), - - - - Semana # {e.semana} - - // apply the table props - - - {// Loop over the header rows - headerGroups.map(headerGroup => ( - // Apply the header row props - - {// Loop over the headers in each row - headerGroup.headers.map(column => ( - // Apply the header cell props - - ))} - - ))} - - {/* Apply the table body props */} - - {// Loop over the table rows - rows.map(row => { - // Prepare the row for display - prepareRow(row) - return ( - // Apply the row props - - {// Loop over the rows cells - row.cells.map(cell => { - // Apply the cell props - return ( - - ) - })} - - ) - })} - -
- {// Render the header - column.render('Header')} -
- {// Render the cell contents - cell.render('Cell')} -
-
-
-
- - - - - // - ))} - -
- -
- -
- ) - } - - - - // apply the table props - - - {// Loop over the header rows - headerGroups.map(headerGroup => ( - // Apply the header row props - - {// Loop over the headers in each row - headerGroup.headers.map(column => ( - // Apply the header cell props - - ))} - - ))} - - {/* Apply the table body props */} - - {// Loop over the table rows - rows.map(row => { - // Prepare the row for display - prepareRow(row) - return ( - // Apply the row props - - {// Loop over the rows cells - row.cells.map(cell => { - // Apply the cell props - return ( - - ) - })} - - ) - })} - -
- {// Render the header - column.render('Header')} -
- {// Render the cell contents - cell.render('Cell')} -
\ No newline at end of file diff --git a/src/componentes/horario/RenderHoras.jsx b/src/componentes/horario/RenderHoras.jsx deleted file mode 100644 index c0b7c6e..0000000 --- a/src/componentes/horario/RenderHoras.jsx +++ /dev/null @@ -1,12 +0,0 @@ - -import React, {useState } from 'react' - -export const RenderHoras = (dato) => { - console.log(dato) - -/* dato.forEach(element => { - return (

{element.trabajador}

) -}); - */ - -} diff --git a/src/componentes/horario/Semana.jsx b/src/componentes/horario/Semana.jsx deleted file mode 100644 index 9200634..0000000 --- a/src/componentes/horario/Semana.jsx +++ /dev/null @@ -1,7 +0,0 @@ -import React from 'react' - -export const Semana = () => { - return ( -
Semana
- ) -} diff --git a/src/componentes/horario/Trabajador.jsx b/src/componentes/horario/Trabajador.jsx index 405f0de..1a8ad26 100644 --- a/src/componentes/horario/Trabajador.jsx +++ b/src/componentes/horario/Trabajador.jsx @@ -1,11 +1,54 @@ -import React from 'react' - +import React, { useState, useEffect } from 'react'; +import { query, collection, onSnapshot, doc, getDoc, where, setDoc, updateDoc, limit } from 'firebase/firestore'; +import { db } from '../../firebase/firebase' +import { InputGroup, Form } from 'react-bootstrap'; +import {List, ListItem, ListItemText, Divider} from '@mui/material' export const Trabajador = () => { + const [searchTerm, setSearchTerm] = useState(''); + const [results, setResults] = useState([]); + + useEffect(() => { + const collectionRef = query(collection(db,'users'), where('nombre', '>=', searchTerm) + ,where('nombre', '<=', searchTerm + '\uf8ff') + ,limit(10)); + + + + onSnapshot(collectionRef, snapshot => { + const updatedResults = snapshot.docs.map(doc => ({ + id: doc.id, + ...doc.data() + })); + setResults(updatedResults); + }); + }, [searchTerm]); + return ( -
Trabajador +
+ + + + Buscar + setSearchTerm(e.target.value)} + /> + - Agregar un buscardor de nombre +
    + {results.map(result => ( + + +
  • {result.nombre}
  • + + + ))} +
- ) -} + ); +}; + diff --git a/src/componentes/horario/Ubicacion.jsx b/src/componentes/horario/Ubicacion.jsx index a816d20..db83dbf 100644 --- a/src/componentes/horario/Ubicacion.jsx +++ b/src/componentes/horario/Ubicacion.jsx @@ -1,7 +1,12 @@ import React from 'react' +import { useEffect } from 'react'; +import MyMap from './MyMap'; export const Ubicacion = () => { + const[semana, setSemana] =React.useState() + + return ( -
Ubicacion
+ ) } diff --git a/src/componentes/horario/notasReduce.txt b/src/componentes/horario/notasReduce.txt index 037e243..a058956 100644 --- a/src/componentes/horario/notasReduce.txt +++ b/src/componentes/horario/notasReduce.txt @@ -172,4 +172,38 @@ console.log(groupById(originalArray)); -ARRAY QUE ESPERO PARA RENDERIZAR TODOS LOS NOMBRES DE LOS USUARIOS PARA ASIGNAR: \ No newline at end of file +ARRAY QUE ESPERO PARA DE LAS ASISTENCIAS: + +Array que espero + +[ + {semana: 41 + + {"trabajador": "mengano ", + "asistencias" : [ + {"date": date, "asistencia": tipoAsistencia}, + {"date": date, "asistencia": tipoAsistencia} ] }, + + {"trabajador": "fulano", + "asistencias" : [ + {"date": date, "asistencia": tipoAsistencia}, + {"date": date, "asistencia": tipoAsistencia} ] } + + }, + + {semana: 42 + + {"trabajador": "tales", + "asistencias" : [ + {"date": date, "asistencia": tipoAsistencia}, + {"date": date, "asistencia": tipoAsistencia} ] }, + + {"trabajador": "mileto", + "asistencias" : [ + {"date": date, "asistencia": tipoAsistencia}, + {"date": date, "asistencia": tipoAsistencia} ] } + + } +] + + diff --git a/src/componentes/horario/presupuesto/AsistenciasPresupuesto.jsx b/src/componentes/horario/presupuesto/AsistenciasPresupuesto.jsx deleted file mode 100644 index 60b6c4c..0000000 --- a/src/componentes/horario/presupuesto/AsistenciasPresupuesto.jsx +++ /dev/null @@ -1,40 +0,0 @@ -import React from 'react' -import { useState } from 'react'; -import { Button } from 'react-bootstrap'; - -export const AsistenciasPresupuesto = (props) => { - - const [itinerante, setItinerante] = useState([]) - - return props.dato.reduce((past, current)=>{ - const foundItem = past.find(it => it.semana === current.semana) - console.log('past:', past); - if (foundItem ){ - foundItem.data=foundItem.data - ?[...foundItem.data, {'trabajador': current.trabajador,'entrada':current.entrada, 'salida': current.salida}] - :[{ 'trabajador': current.trabajador,'entrada':current.entrada, 'salida': current.salida }] -}else{ past.push( { - 'semana': current.semana, - 'data': [{ - 'trabajador': current.trabajador,'entrada':current.entrada, 'salida': current.salida - }] -} ) } - - -return past; - - }, []) - - - - return ( - -
- -

test

- -
- - - ) -} diff --git a/src/componentes/horario/semana/CardAsistencia.jsx b/src/componentes/horario/semana/CardAsistencia.jsx new file mode 100644 index 0000000..33032e0 --- /dev/null +++ b/src/componentes/horario/semana/CardAsistencia.jsx @@ -0,0 +1,156 @@ +import React, {useState} from 'react' +import moment from 'moment' +import { Card, Button, Col, Row, Container, Overlay,Popover } from 'react-bootstrap' +import { MdNavigation } from "react-icons/md"; +import MyMap from '../MyMap' + +import { Foto } from './Foto'; +import { useRef } from 'react'; +moment.locale('es'); + + +export const CardAsistencia = ({dato}) => { + + + const [contador, setContador] = useState(0) + const date = moment(dato.date) + const day = date.date() + const month = date.month() + const year = date.year() + + const [showPhoto, setShowPhoto] = useState(false); + const handleShowPhoto = () => setShowPhoto(!showPhoto); + const targetRef = useRef(null) + + const [showUbicacion, setShowUbicacion] = useState(false); + const handleShowUbicacion = () => setShowUbicacion(!showUbicacion); + const targetRefUbicacion = useRef(null) + + + + +/* + const date =moment(dato.date) + const day= date.date() */ + /* + dato.clave + dato.date + date.identidadChecador + date.latitud + date.longitud + dato.presupuesto + dato.semana + dato.tipoAsistencia + dato.trabajador + + */ + + + + /* if (dato.tipoAsistencia === 'Entrada' || dato.tipoAsistencia === 'Salida') { + const trabajador = dato.trabajador + const asistencias = dato.filter(item => item.trabajador === trabajador && item.tipoAsistencia !== dato.tipoAsistencia && moment(item.date).date() === day && moment(item.date).month() === month && moment(item.date).year() === year) + if (asistencias.length > 0) { + setContador(contador + 1) + } + } + + + + + +console.log(dato.trabajador, ':', contador) */ + + + + +return ( + + + {dato.tipoAsistencia} + + + + {dato.trabajador} + +{dato.latitud} + + + +
+ Hora: {date.format('HH:mm')} +
+ Fecha: {date.format('DD/MMMM/YYYY')} + + + +
+ + + +
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Aqui va ir el mapa + + + + + + + + + + +
+
+ + ) +} diff --git a/src/componentes/horario/semana/CarouselProyectos.jsx b/src/componentes/horario/semana/CarouselProyectos.jsx new file mode 100644 index 0000000..37499d2 --- /dev/null +++ b/src/componentes/horario/semana/CarouselProyectos.jsx @@ -0,0 +1,41 @@ +import React, { useEffect, useState } from 'react' +import CEpointContext from '../../../context/CEpointContext'; +import Button from '@mui/material/Button'; +import Stack from '@mui/material/Stack'; +import { styled } from '@mui/material/styles'; +import { purple } from '@mui/material/colors'; +import { useNavigate } from 'react-router-dom'; + + const ColorButton = styled(Button)(({ theme }) => ({ + color: theme.palette.getContrastText(purple[500]), + backgroundColor: '#b71c1c', + '&:hover': { + backgroundColor:'#ffc400', + }, + })); + + + +export const CarouselProyectos = ({state}) => { + //const [test, setTest]=useState(state?state:null) + const navigate = useNavigate(); + //const ProyectosFiltrados = state.filter(obj => (obj.asistencias || []).length !== 0); + + + + + + return ( +
+ + {state&&state.map((presupuesto)=>( + { + + navigate(`./table/${presupuesto}`, {replace:true}) + }} > {presupuesto} + ))} + +
+ ) +} diff --git a/src/componentes/horario/semana/Foto.jsx b/src/componentes/horario/semana/Foto.jsx new file mode 100644 index 0000000..e2eea42 --- /dev/null +++ b/src/componentes/horario/semana/Foto.jsx @@ -0,0 +1,27 @@ +import React, {useEffect, useState} from 'react' +import { ref, getDownloadURL, getStorage } from "firebase/storage" +export const Foto = ({dato}) => { + const storage = getStorage() + const [Photo, setPhoto] = useState('') + + + useEffect( + + ()=>{ + + + getDownloadURL (ref(storage, `Asistencias/${dato.presupuesto}/${dato.trabajador}/${dato.clave}` )).then((url)=>{ + //const img= document.getElementById(data.clave) + console.log('URL',url) + setPhoto(url) + }) + + + }, [dato] + ) + + + return ( + + ) +} diff --git a/src/componentes/horario/semana/Semana.jsx b/src/componentes/horario/semana/Semana.jsx new file mode 100644 index 0000000..2f44103 --- /dev/null +++ b/src/componentes/horario/semana/Semana.jsx @@ -0,0 +1,79 @@ +import React, {useState, useContext, useEffect} from 'react' +import { format, getWeek } from 'date-fns'; +import moment from 'moment'; +import { Card, Button, Accordion, Container, Badge } from 'react-bootstrap' +import Box from '@mui/material/Box'; +//import '../Horario.css' + + +import CEpointContext from '../../../context/CEpointContext'; +import ToggleButton from '@mui/material/ToggleButton'; +import ToggleButtonGroup from '@mui/material/ToggleButtonGroup'; +import { + useNavigate, Outlet +} from 'react-router-dom'; + + + +export const Semana = () => { + + const navigate = useNavigate(); + + const weekDays = ['Lunes','Martes','Miercoles','Jueves','Viernes','Sabado','Domingo']; + + + const [DATA, setData]=useState('') + const [alignment, setAlignment] = React.useState(); + +const { } = useContext(CEpointContext) + + + const handleChange = (event, newAlignment) => { + setAlignment(newAlignment); +}; + + + + + + + + + + + + + + + + + + return ( + +
+ + + navigate("proyectosactivos")} value="Activos">Activos + {navigate("proyectosadicionales")}} value="Adicionales">Adicionales + {navigate("proyectosgarantias")}} value="Garantias">Garantias + {navigate("proyectosdesactivados")}} value="Desactivados">Desactivados + + +
+
+ + + +
+ ) + } + + + + diff --git a/src/componentes/horario/semana/Table.jsx b/src/componentes/horario/semana/Table.jsx new file mode 100644 index 0000000..ff27def --- /dev/null +++ b/src/componentes/horario/semana/Table.jsx @@ -0,0 +1,195 @@ +import React, {useContext, useState, useEffect} from 'react' +import { CardAsistencia } from './CardAsistencia'; +import { Card, Button, Accordion, Container, Badge } from 'react-bootstrap' +import { useParams, useOutletContext } from 'react-router-dom'; +import moment from 'moment'; +import CEpointContext from '../../../context/CEpointContext'; +export const Table = () => { + const {state, getProyecto} =useContext(CEpointContext) + + const {presupuesto} =useParams() + const [flag]=useOutletContext() +console.log(flag) + + useEffect(()=>{ + getProyecto(presupuesto) + + },[presupuesto]) + + /* console.log('PRESUPUESTO',presupuesto) + + console.log('SELECTION', seleccion) + + console.log('STATE PROYECTO', state.Proyecto ) */ + + const [expandedSections, setExpandedSections] = useState({}); + const toggleExpand = (sectionName) => { + setExpandedSections((prevExpandedSections) => { + return { + ...prevExpandedSections, + [sectionName]: !prevExpandedSections[sectionName] + }; + }); + } + + + + + + + + let groupedData = {}; + if (state.Proyecto.length > 0) { + const filteredData = state.Proyecto.filter((item) => item.flag === `${flag}`); + groupedData = filteredData.reduce((acc, current) => { + const date = moment(current.date); + const year = date.year(); + const week = date.isoWeek(); + const trabajador = current.trabajador + + if (!acc[year]) { + acc[year] = {}; + } + if(!acc[year][week]){ + acc[year][week] = {} + } + if(!acc[year][week][trabajador]){ + acc[year][week][trabajador] = [] + } + acc[year][week][trabajador].push(current); + return acc; + }, {}); + + + } + + console.log(groupedData); + + + + + + + + + + const Monday = (dato)=>{ + let exReg = /Mon/ + if(exReg.test(dato.date)){ + return + }else{return null} + } + + const Martes = (dato)=>{ + let exReg = /Tue/ + if(exReg.test(dato.date)){ + return + }else{return null} + } + + const Miercoles = (dato)=>{ + let exReg = /Wed/ + if(exReg.test(dato.date)){ + return + }else{return null} + } + + const Jueves = (dato)=>{ + let exReg = /Thu/ + if(exReg.test(dato.date)){ + return + }else{return null} + } + const Viernes = (dato)=>{ + let exReg = /Fri/ + if(exReg.test(dato.date)){ + return + }else{return null} + } + + const Sabado = (dato)=>{ + let exReg = /Sat/ + if(exReg.test(dato.date)){ + return + }else{return null} + } + + const Domingo = (dato)=>{ + let exReg = /Sun/ + if(exReg.test(dato.date)){ + return + }else{return null} + } + + + + return ( +
+ {Object.keys(groupedData).map((year) => ( +
+ + + + {expandedSections[year] && ( +
+ {Object.keys(groupedData[year]).map((week) => ( +
+ + + + + {expandedSections[week] && ( +
+ {Object.keys(groupedData[year][week]).map((worker) => ( +
+

{worker}

{groupedData[year][week][worker].length}

+ + + + + + + + + + + + + + + + +{groupedData[year][week][worker].map((attendance) => ( + + + + + + + + + + +))} + + +
PresupuestoLunesMartesMiércolesJuevesViernesSábadoDomingo
+ +{attendance.presupuesto} + + +{Monday(attendance)}{Martes(attendance)}{Miercoles(attendance)}{Jueves(attendance)}{Viernes(attendance)}{Sabado(attendance)}{Domingo(attendance)}
+
+))} +
+)} +
+))} +
+)} +
+))} + +
+ ) +} diff --git a/src/componentes/horario/semana/proyectosActivos/ProyectosActivos.jsx b/src/componentes/horario/semana/proyectosActivos/ProyectosActivos.jsx new file mode 100644 index 0000000..9c6117f --- /dev/null +++ b/src/componentes/horario/semana/proyectosActivos/ProyectosActivos.jsx @@ -0,0 +1,39 @@ +import React, { useContext, useEffect, useState } from 'react' +import { CarouselProyectos } from '../CarouselProyectos'; + +import CEpointContext from '../../../../context/CEpointContext'; + +import { Outlet } from 'react-router-dom'; +export const ProyectosActivos = () => { + const [flag, setFlag] =useState('Activo') + const {state, getProyectosActivos} =useContext(CEpointContext) + + + + + +useEffect(()=>{ + + getProyectosActivos() + +},[]) + + + +console.log("STATE:", state) + + + return ( + + +
Presupuestos Activos + + + + + + + +
+ ) +} diff --git a/src/componentes/horario/semana/proyectosAdicionales/ProyectosAdicionales.jsx b/src/componentes/horario/semana/proyectosAdicionales/ProyectosAdicionales.jsx new file mode 100644 index 0000000..4b286b4 --- /dev/null +++ b/src/componentes/horario/semana/proyectosAdicionales/ProyectosAdicionales.jsx @@ -0,0 +1,32 @@ +import React, { useContext, useEffect, useState } from 'react' +import { CarouselProyectos } from '../CarouselProyectos'; + +import CEpointContext from '../../../../context/CEpointContext'; + +import { Outlet } from 'react-router-dom'; +export const ProyectosAdicionales = () => { + const [flag, setFlag] =useState('Adicional') + const {state, getProyectosAdicionales} =useContext(CEpointContext) + + + + + +useEffect(()=>{ + + getProyectosAdicionales() + +},[]) + + + + return ( + + +
Presupuestos Activos + + + +
+ ) +} diff --git a/src/componentes/horario/semana/proyectosDesactivados/ProyectosDesactivados.jsx b/src/componentes/horario/semana/proyectosDesactivados/ProyectosDesactivados.jsx new file mode 100644 index 0000000..677dfcf --- /dev/null +++ b/src/componentes/horario/semana/proyectosDesactivados/ProyectosDesactivados.jsx @@ -0,0 +1,89 @@ +import React, { useContext, useState } from 'react' +import { CarouselProyectos } from '../CarouselProyectos'; +import { Table } from '../Table'; +import moment from 'moment'; +import CEpointContext from '../../../../context/CEpointContext'; +import { useEffect } from 'react'; +export const ProyectosDesactivados = () => { + + const {state, getProyectosDesactivados} =useContext(CEpointContext) + const [seleccion, setSeleccion]= useState('') + + + + +useEffect(()=>{ + + getProyectosDesactivados() + +},[]) + + + +console.log("STATE:", state) + + const [expandedSections, setExpandedSections] = useState({}); + const toggleExpand = (sectionName) => { + setExpandedSections((prevExpandedSections) => { + return { + ...prevExpandedSections, + [sectionName]: !prevExpandedSections[sectionName] + }; + }); + } + + + + + + let groupedData = {}; + + if (seleccion.length > 0) { + groupedData = seleccion.reduce((acc, current) => { + const date = moment(current.date); + const year = date.year(); + const week = date.isoWeek(); + const trabajador = current.trabajador + console.log(current.asistencias) + if (!acc[year]) { + acc[year] = {}; + } + if(!acc[year][week]){ + acc[year][week] = {} + } + if(!acc[year][week][trabajador]){ + acc[year][week][trabajador] = [] + } + acc[year][week][trabajador].push(current); + return acc; + }, {}); + + + } + + + + console.log('DATA', groupedData); + + console.log(JSON.stringify(groupedData)); + + + + + return ( + + +
+ + , + Assitencias que se tomaron en estado activo +
+ Assitencias que se tomaron en estado Adicional +
+ + Asistencias que se tomaron en estado Garantia +{/* + */} + + ) +} diff --git a/src/componentes/horario/semana/proyectosGarantias/ProyectosGarantias.jsx b/src/componentes/horario/semana/proyectosGarantias/ProyectosGarantias.jsx new file mode 100644 index 0000000..5e20e32 --- /dev/null +++ b/src/componentes/horario/semana/proyectosGarantias/ProyectosGarantias.jsx @@ -0,0 +1,35 @@ +import React, { useContext, useState } from 'react' +import { CarouselProyectos } from '../CarouselProyectos'; +import { Table } from '../Table'; +import moment from 'moment'; +import CEpointContext from '../../../../context/CEpointContext'; +import { useEffect } from 'react'; +import { Outlet } from 'react-router-dom'; +export const ProyectosGarantias = () => { + + const {state, getProyectosGarantia} =useContext(CEpointContext) + const [flag, setFlag] =useState('Garantia') + const [seleccion, setSeleccion]= useState('') + + + + +useEffect(()=>{ + + getProyectosGarantia() + +},[]) + + + + + return ( + + +
Presupuestos Activos + + + +
+ ) +} diff --git a/src/componentes/horario/semana/semanaPruebas.jsx b/src/componentes/horario/semana/semanaPruebas.jsx new file mode 100644 index 0000000..276095b --- /dev/null +++ b/src/componentes/horario/semana/semanaPruebas.jsx @@ -0,0 +1,230 @@ +import React, {useState, useContext} from 'react' +import { format, getWeek } from 'date-fns'; +import moment from 'moment'; +import { Card, Button, Accordion, Container } from 'react-bootstrap' + +//import '../Horario.css' + + +import CEpointContext from '../../../context/CEpointContext'; + +export const Semana = () => { + // const storage = getStorage() + const {state} = useContext(CEpointContext) +const weekDays = ['Lunes','Martes','Miercoles','Jueves','Viernes','Sabado','Domingo']; + const [test, setTest]=useState(state.TotalProyectos?state.TotalProyectos:null) + const [seleccion, setSeleccion]= useState('') + + + + const ProyectosFiltrados = test && test.filter(obj => (obj.asistencias || []).length !== 0); + + + + console.log('FILTRO', ProyectosFiltrados&&ProyectosFiltrados ) + + console.log('seleccion', seleccion&&seleccion ) + + + let groupedData = {}; + + if (seleccion.length > 0) { + groupedData = seleccion.reduce((acc, current) => { + const date = moment(current.date); + const year = date.year(); + const week = date.isoWeek(); + const trabajador = current.trabajador + if (!acc[year]) { + acc[year] = {}; + } + if(!acc[year][week]){ + acc[year][week] = {} + } + if(!acc[year][week][trabajador]){ + acc[year][week][trabajador] = [] + } + acc[year][week][trabajador].push(current); + return acc; + }, {}); + + } + + console.log('DATA', groupedData); + + console.log(JSON.stringify(groupedData)); + + const [expandedSections, setExpandedSections] = useState({}); + + const toggleExpand = (sectionName) => { + setExpandedSections((prevExpandedSections) => { + return { + ...prevExpandedSections, + [sectionName]: !prevExpandedSections[sectionName] + }; + }); + } + + + + +/* + const Monday = (dato)=>{ + let exReg = /Mon/ +if(exReg.test(dato)){ +return dato +}else{return null} + } + + const Martes = (dato)=>{ + let exReg = /Tue/ +if(exReg.test(dato)){ +return dato +}else{return null} + } + + const Miercoles = (dato)=>{ + let exReg = /Wed/ +if(exReg.test(dato)){ +return dato +}else{return null} + } + + const Jueves = (dato)=>{ + let exReg = /Thu/ +if(exReg.test(dato)){ +return dato +}else{return null} + } + const Viernes = (dato)=>{ + let exReg = /Fri/ +if(exReg.test(dato)){ +return dato +}else{return null} + } + + const Sabado = (dato)=>{ + let exReg = /Sat/ +if(exReg.test(dato)){ +return dato +}else{return null} + } + + const Domingo = (dato)=>{ + let exReg = /Sun/ +if(exReg.test(dato)){ +return dato +}else{return null} + } */ + + + /* const filtrarDia = (dato, dia) => { + let exReg = new RegExp(dia); + if(exReg.test(dato)) { + return dato; + } else { + return null; + } + } + */ + +/* const lunes = filtrarDia(dato, 'Mon'); + const martes = filtrarDia(dato, 'Tue'); + const miercoles = filtrarDia(dato, 'Wed'); + + const jueves = filtrarDia(dato, 'Thu'); + +const viernes = filtrarDia(dato, 'Fri'); +const sabado = filtrarDia(dato, 'Sat'); +const domingo = filtrarDia(dato, 'Sun'); + + */ +const filtrarDia = (dato, exp) => { + if(exp.test(dato)){ + return dato + }else{return null} + } + + const funcionesDias = { + "Lunes": /Mon/, + "Martes": /Tue/, + "Miercoles": /Wed/, + "Jueves": /Thu/, + "Viernes": /Fri/, + "Sabado": /Sat/, + "Domingo": /Sun/ + } + + + + + + + + + + + + return ( + +
+ {ProyectosFiltrados.map((presupuesto)=>( + + ))} +
+
+ {Object.keys(groupedData).map((year) => ( +
+

{year}

+ {Object.keys(groupedData[year]).map((week) => ( +
+

Semana {week}

+ {Object.keys(groupedData[year][week]).map((trabajador) => ( +
+

{trabajador}

+
+ + + {weekDays.map((day) => ( + + ))} + + + + + {weekDays.map((day) => { + const dia = groupedData[year][week][trabajador].filter(a => filtrarDia(a.date, funcionesDias[day])) + return ( + +)})} + + +
{day}
+ + + toggleExpand(day)}> + {day} + + + + {dia.map((proyecto) => ( +
+

{proyecto.horas} horas

+

{proyecto.extra} horas extras

+

{proyecto.obra}

+
+ ))} +
+
+
+
+
+))} +
+))} +
+ + ) + } + + diff --git a/src/Pages/Access/ProtectedRoute.js b/src/componentes/security/ProtectedRoute.jsx similarity index 68% rename from src/Pages/Access/ProtectedRoute.js rename to src/componentes/security/ProtectedRoute.jsx index a40ac35..cdc4291 100644 --- a/src/Pages/Access/ProtectedRoute.js +++ b/src/componentes/security/ProtectedRoute.jsx @@ -1,12 +1,12 @@ import React, {useContext} from 'react'; import { Navigate } from 'react-router-dom'; -import { UserAuth } from '../../context/AuthContext'; import UserContext from '../../context/AuthContext'; +import { useLocation} from 'react-router-dom' const ProtectedRoute = ({ children }) => { const { user } = useContext(UserContext); - + const location = useLocation(); if (!user) { - return ; + return ; } return children; }; diff --git a/src/componentes/security/ProtectedRouteAuth.jsx b/src/componentes/security/ProtectedRouteAuth.jsx new file mode 100644 index 0000000..303da0a --- /dev/null +++ b/src/componentes/security/ProtectedRouteAuth.jsx @@ -0,0 +1,23 @@ +import React, {useContext, useEffect} from 'react'; +import { Navigate } from 'react-router-dom'; + + +const ProtectedRouteAuth = ({ children }) => { + + const navigate= Navigate() + + +useEffect(()=>{ + let authToken = sessionStorage.getItem('Auth Token') + if(authToken){ + navigate('/account') + } + if(!authToken){ + navigate('/') + } +},[]) + + return children; +}; + +export default ProtectedRouteAuth; \ No newline at end of file diff --git a/src/componentes/usuarios/CreadorUsuarios.jsx b/src/componentes/usuarios/CreadorUsuarios.jsx deleted file mode 100644 index 677422f..0000000 --- a/src/componentes/usuarios/CreadorUsuarios.jsx +++ /dev/null @@ -1,317 +0,0 @@ -import React, {useState, useContext, useRef} from 'react' -import { Card, Container, Toast, Button, Modal } from 'react-bootstrap' -import {getFirestore, updateDoc, arrayUnion, doc, onSnapshot, addDoc ,setDoc, collection, getDoc, query, where} from 'firebase/firestore' - -import './Usuarios.css' - -import { useEffect } from 'react'; -import { FormCreadorUser } from './FormCreadorUser'; -import UsuariosContext from '../../context/UsuariosContext'; - - -export const CreadorUsuarios = () => { - const {Usuarios, getUsuarios, getUsersUnable, Userun, setActualizador, activateUser}=useContext(UsuariosContext) - const [showA, setShowA] = useState(false); - const toggleShowA = () => setShowA(!showA); - const [Civiles, setCiviles] = useState([]) - const [Id, setId] = useState('') - console.log('id:', Id) - //overlay - const [show, setShow] = useState(false); - - const handleClose = () => setShow(false); - const handleShow = () => setShow(true); - - - -console.log('habilitados?:', Userun) - -const CivilesWay = (props) => { - -return props.reduce((past, current)=>{ - const foundItem = past.find(it=>it.area===current.area) - console.log('past', past); -const r=[] -r.push(past); -setCiviles(r) -console.log('perfiles', r); -if(foundItem){ - foundItem.data=foundItem.data - ?[...foundItem.data, { - 'nombre': current.nombre, - 'perfil':current.perfil, - 'email': current.email, - 'password': current.password, - 'Uid':current.UID, - 'asignador':current.asignador, - 'checador': current.checador, - 'ocupado': current.ocupado, - 'lectoreAsistencia': current.lectoreAsistencia}] - :[{ 'nombre': current.nombre, - 'perfil':current.perfil, - 'email': current.email, - 'password': current.password, - 'Uid':current.UID, - 'asignador':current.asignador, - 'checador': current.checador, - 'ocupado': current.ocupado, - 'lectoreAsistencia': current.lectoreAsistencia}] - }else{ past.push( - { - 'area': current.area, - 'data': - [{ - 'nombre': current.nombre, - 'perfil':current.perfil, - 'email': current.email, - 'password': current.password, - 'Uid':current.UID, - 'asignador':current.asignador, - 'checador': current.checador, - 'ocupado': current.ocupado, - 'lectoreAsistencia': current.lectoreAsistencia - - }] - - -})} -return past; - -}, [])} - - - - - - - - - -useEffect(()=>{ - getUsersUnable() - getUsuarios() - CivilesWay(Usuarios) - //electricosWay(Usuarios) -},[]) - - - - -console.log('Usuarios desde creado de usuarios:',Usuarios) - - - - return ( - - - - Gestion de usuarios - controles para controlar usuarios test - - -
- - - - - - - - -
- - - - Creando usuario - # semana - - - - - - - - - - -{ - Civiles.map((e)=>( - e.map((r)=>( - - {r.area} -
- -{r.data.map((s)=>( - - - -{s.perfil} -{s.nombre} -{s.email} -{s.password} -{s.Uid} - - - - - - {Id.toString()} - - - - - - - - - - {/* - - Actualiza usuario - - - - {s.nombre} - {s.perfil} - {s.email} - {s.password} - {s.Uid} - - - - - - */} - - - - -))} - - - - - - -
-
- )) - )) -} - -{/* - -Electricos -
-
-
- -Seguridad e higiene -
-
- -Herreria -
-
- -Corporativo -
-
- -Siarsa -
-
- -Secma -
-
- -Solcom -
-
- */}
- - - -
-
- - - - { - Userun.map((e)=> - ( -
- - -
Trabajador:{e.nombre}
-
-
Empresa: - - {e.empresa} - -
-
-
Email: - - {e.UID} - -
-
- -
- Perfil: - {e.perfil} - -
- -
- -
-
- -
) - ) -} - - - -
-
- -
-
- - ) -} - - - -// \ No newline at end of file diff --git a/src/componentes/usuarios/FormCreadorUser.jsx b/src/componentes/usuarios/FormCreadorUser.jsx index f6a844e..69a4859 100644 --- a/src/componentes/usuarios/FormCreadorUser.jsx +++ b/src/componentes/usuarios/FormCreadorUser.jsx @@ -1,134 +1,35 @@ import React, {useState, useRef, useContext, useEffect} from 'react' import { Button, Form, Row, Col} from 'react-bootstrap' import "react-datepicker/dist/react-datepicker.css"; -//import { getAuth } from 'firebase/auth'; +import { v4 as uuidv4 } from 'uuid'; import ButtonGroup from 'react-bootstrap/ButtonGroup'; import ToggleButton from 'react-bootstrap/ToggleButton'; import { UserAuth } from '../../context/AuthContext'; import { db } from '../../firebase/firebase'; import SelectSearch from "react-select-search"; import 'react-select-search/style.css' -import UsuariosContext from '../../context/UsuariosContext'; -import {getFirestore, setDoc, updateDoc, arrayUnion, doc, onSnapshot, addDoc ,getDoc, collection, query, where,} from 'firebase/firestore' -import { async } from '@firebase/util'; +import CEpointContext from '../../context/CEpointContext'; +import {setDoc, doc } from 'firebase/firestore' + +import {options, searchArea, optionsEmpresas} from './options' export const FormCreadorUser = () => { //necesario para registrar en dos modalidades, manual y por google unicamente - const {Usuarios, getUsuarios} = useContext(UsuariosContext) + const {state} = useContext(CEpointContext) const [error, setError] = useState(''); const [UidUser, setUidUser]=useState('') - const {createUser} = UserAuth(); + const {createUsuario} = UserAuth(); const [Perfil, setPerfil] = useState('') const [Empresa, setEmpresa]= useState('Elige empresa') - const [Area, setArea] = useState('') - + + const [IdUsario, setIdUsuario]=useState() + - - const options = [ - { - type: "group", - name: "CIVILES", - items: [ - - { name: "Residente de obra", value: "Residente de obra" }, - { name: "Arquitecto proyectista", value: "Arquitecto proyectista" }, - { name: "Cabo albañil", value: "Cabo albañil" }, - { name: "Oficial albañil", value: "Oficial albañil" }, - { name: "Oficial medio albañil", value: "Oficial medio albañil" }, - { name: "Ayudante albañil", value: "Ayudante albañil" }, - { name: "Ayudante general", value: "Ayudante general" }, - { name: "Operador", value: "Operador" } - - ] - }, - { - type: "group", - name: "SEGURIDAD E HIGIENE", - items: [ - { name: "Coordinador de SHE", value: "Coordinador de SHE" }, - { name: "Supervision de SHE", value: "Supervision de SHE" } - - ] - }, - { - type: "group", - name: "ELECTRICOS", - items: [ - { name: "Residente electrico", value: "Residente electrico" }, - { name: "Oficial electrico", value: "Oficial electrico" }, - { name: "Ayudante electrico", value: "Ayudante electrico" } - ] - }, - { - type: "group", - name: "HERRERIA", - items: [ - { name: " Cabo soldador", value: "Cabo soldador" }, - { name: "Soldador", value: "Soldador" }, - { name: "Herrero", value: "Herrero" }, - { name: "Ayudante de soldador", value: "Ayudante de soldador" }, - { name: "Maestro aluminiero", value: "Maestro aluminiero" }, - ] - }, - { - type: "group", - name: "DIRECCION", - items: [ - { name: "Director MacBrick", value: "Director MacBrick" }, - { name: "Director inmobiliaria", value: "Director inmobiliaria" }, - { name: "Director SIARSA", value: "Director SIARSA" }, - { name: "Director SECMA", value: "Director SECMA" }, - { name: "Director CE2000", value: "Director CE2000" }, - { name: "Director SOLCOM", value: "Director SOLCOM" } - ] - }, - { - type: "group", - name: "SIARSA", - items: [ - { name: "Gerente de operaciones", value: "Gerente de operaciones" }, - { name: "Tecnico especialista", value: "Tecnico especialista" } - ] - }, - { - type: "group", - name: "SECMA", - items: [ - { name: "Proyectos CCTV", value: "Proyectos CCTV" }, - { name: "Operacion CCTV", value: "Operacion CCTV" }, - { name: "Tecnico CCTV", value: "Tecnico CCTV" } - ] - }, - { - type: "group", - name: "SOLCOM", - items: [ - { name: "Asistente Direccion", value: "Asistente Direccion" } - - ] - }, - { - type: "group", - name: "ALMACEN", - items: [ - { name: "Chofer", value: "Chofer" } - - ] - }, - { - type: "group", - name: "CORPORATIVO", - items: [ - { name: "Portero", value: "Portero" } - - ] - } - - ]; + @@ -150,14 +51,6 @@ export const FormCreadorUser = () => { ]; const [radioValueChec, setRadioValueChec] = useState('5'); - const optionsEmpresas=[ - {name: 'CE2000', value: 'CE2000'}, - {name: 'SECMA', value: 'SECMA'}, - {name: 'SIARSA', value: 'SIARSA'}, - {name: 'MCBRICK', value: 'MCBRICK'}, - {name: 'SOLCOM', value: 'SOLCOM'}, - {name: 'INMOBILIARIA', value: 'INMOBILIARIA'} - ] @@ -190,167 +83,57 @@ const [Nombre, setNombre] = useState('') } -/* useEffect( - handleInputChange() - ,[]) */ -console.log("values:", values) -//console.log(formCreatorUser) -console.log(Perfil) -console.log('Perfil search', searchDato(Perfil) ) -console.log('Area:', searchArea(Perfil)) -console.log(Empresa) -console.log('empresa search', searchDato(Empresa) ) - -console.log(Email) -console.log(Password) -console.log( 'nombre:', Nombre) - - const handleregisterUser = async (e)=> { + +const handleregisterUser = async (e)=> { e.preventDefault(); try{ - setError('') - const infouser = await createUser(values.email, values.password); - console.log(infouser.user.uid) - setUidUser(infouser.user.uid) -const docuRef =doc(db, `users/${infouser.user.uid}`); -setDoc(docuRef, { - activo: false , - asignador: checkIf(radioValueAsig), - checador:checkIf(radioValueChec) , - email: values.email, - password: values.password, - empresa:searchDato(Empresa), - lectoreAsistencia : checkIf(radioValueAsis), - nombre: values.nombre, - ocupado: false, - perfil: searchDato(Perfil), - area: searchArea(Perfil), - rol: 'usuario', - usator: false, - fechaDeCreacion: Date(), - UID:infouser.user.uid - } - ) - setValues({...formCreatorUser}) - setRadioValueChec('5') - setRadioValueAsig('3') - setRadioValueAsis('1') - setPerfil('') - setEmpresa('') - } catch(e) { - setError(e.message) - console.log(e.message) + setError('') + + const docuRef =doc(db, `users/${IdUsario}`); + setDoc(docuRef, { + activo: true, + ocupado: false, + UID:IdUsario, + nombre: values.nombre, + + + perfil: searchDato(Perfil), + empresa:searchDato(Empresa), + + + + area: searchArea(Perfil), + fechaDeCreacion: Date(), + + + alergias:[], + alergias:[], + hitoriaClinica:[], + licencia: false, + herramientas:[], + Miscelaneos:[], + Maquinaria:[] + + } -}; - - -function searchArea(dato) { -let area; - switch (dato) { -case "Residente de obra": - area = "CIVIL"; - break; -case "Arquitecto proyectista": - area = "CIVIL"; - break; -case "Cabo albañil": - area = "CIVIL"; - break; - case "Oficial albañil": - area = "CIVIL"; - break; -case "Ayudante albañil": - area = "Civil"; - break; -case "Ayudante general": - area = "CIVIL"; - break; -case "Oficial medio albañil": - area = "CIVIL"; - break; -case "Operador": - area = "CIVIL"; - break; - case "Director MacBrick": - area = "CIVIL"; - break; - case "Director inmobiliaria": - area = "CIVIL"; - break; - case "Director CE2000": - area = "CIVIL"; - break; -case "Coordinador de SHE": - area = "SHE"; - break; -case "Supervision de SHE": - area = "SHE"; - break; -case "Residente electrico": - area = "ELECTRICOS"; - break; -case "Oficial electrico": - area = "ELECTRICOS"; - break; - case "Ayudante electrico": - area = "ELECTRICOS"; - break; -case "Cabo soldador": - area = "HERREROS"; - break; -case "Soldador": - area = "HERREROS"; - break; -case "Herrero": - area = "HERREROS"; - break; -case "Ayudante de soldador": - area = "HERREROS"; - break; -case "Maestro aluminiero": - area = "HERREROS"; - break; -case "Director SIARSA": - area = "SIARSA"; - break; -case "Gerente de operaciones": - area = "SIARSA"; - break; -case "Tecnico especialista": - area = "SIARSA"; - break; -case "Director SECMA": - area = "SECMA"; - break; -case "Proyectos CCTV": - area = "SECMA"; - break; -case "Operacion CCTV": - area = "SECMA"; - break; -case "Tecnico CCTV": - area = "SECMA"; - break; -case "Director SOLCOM": - area = "SOLCOM"; - break; -case "Asistente Direccion": - area = "SOLCOM"; - break; -case "Chofer": - area = "CORPORATIVO"; - break; -case "Portero": - area = "CORPORATIVO"; - break; - + ) + setValues({...formCreatorUser}) + setRadioValueChec('5') + setRadioValueAsig('3') + setRadioValueAsis('1') + setPerfil('') + setEmpresa('') + } catch(e) { + setError(e.message) + console.log(e.message) - } - console.log('funcion:', area) - //setArea(area) -return area; -} + }; + console.log('uid:', IdUsario) + + + + function searchDato(dato) { @@ -373,22 +156,15 @@ function checkIf(dato) { - +useEffect(()=>{ + setIdUsuario(uuidv4()) +},[]) return (
- - - Email - - - - Password - - - +

{IdUsario}

Nombre del trabajador @@ -493,5 +269,4 @@ function checkIf(dato) { ) -} - +} \ No newline at end of file diff --git a/src/componentes/usuarios/Usuarios.css b/src/componentes/usuarios/Usuarios.css deleted file mode 100644 index db38c77..0000000 --- a/src/componentes/usuarios/Usuarios.css +++ /dev/null @@ -1,98 +0,0 @@ -button#dropdown-button-dark-example1.dropdown-toggle.btn.btn-secondary{ - margin-top: 4%; - margin-bottom:4%; -} -button#dropdown-button-dark-example2.dropdown-toggle.btn.btn-secondary{ - margin-top: 4%; - margin-bottom:4%; -} -select.form-select{ - width: 100%; - margin-top: 3%; -} -/*div.fila.col{ - width: 60%; -*/ - div.usuarios.card{ - background-color: lightslategray; - margin-left: 4em; - overflow: hidden; - overflow-y: scroll; - -} -div.formUsuarios.card{ - - margin-right: 10px; - margin-top: 3px; - margin-left: -48px; -} - -div#a1{ - background-color: #ed3e12; -} - -button.crearUser.btn.btn-success.btn-lg{ - - margin-left: 100px; - margin-top: 35px; - -} -div#cuentaInactiva{ - background-color: #ecc71f; -} -div.inactivos.card{ - background-color: lightslategray; - margin-left: 1em; - overflow: hidden; - overflow-y: scroll; -} - -div.civiles{ -background-color: rgb(207, 207, 188); -overflow-y: scroll; -display: grid; - grid-template-columns: auto auto auto auto; - column-gap: 50px; - row-gap: 10px; - padding: 30px; - -} -div.electricos{ - background-color: rgb(207, 207, 188); - -} -div.she{ - background-color: rgb(207, 207, 188); -} -div.herreria{ - background-color: rgb(207, 207, 188); -} -div.corporativo{ - background-color: rgb(207, 207, 188); -} -div.siarsa{ - background-color: rgb(207, 207, 188); -} -div.secma{ - background-color: rgb(207, 207, 188); -} -div.solcom{ - background-color: rgb(207, 207, 188); -} - div.content-users.card{ - - margin-left: -1em; - overflow-y: scroll; -} -div.trabajadores{ - background-color: rgb(184, 35, 15); - color: antiquewhite; - text-align: center; - -} -button.actualizarUser.btn.btn-success{ - width: 20em; - height: 4em; - margin-top: 15%; - -} \ No newline at end of file diff --git a/src/componentes/usuarios/Usuarios.jsx b/src/componentes/usuarios/Usuarios.jsx new file mode 100644 index 0000000..ad9bce1 --- /dev/null +++ b/src/componentes/usuarios/Usuarios.jsx @@ -0,0 +1,140 @@ +import React, {useState, useContext, useEffect} from 'react' +import { Card, Container, Toast, Nav } from 'react-bootstrap' +import { FormCreadorUser } from './FormCreadorUser'; +//import './Usuarios.css' +import {useNavigate, Outlet} from 'react-router-dom' +import CEpointContext from '../../context/CEpointContext'; + + + const Usuarios = () => { + const { + getUsuarios}=useContext(CEpointContext) + + const navigate = useNavigate(); + + useEffect(() => { + getUsuarios() + }, []) + + const [showA, setShowA] = useState(false); + const toggleShowA = () => setShowA(!showA); + + + + + + + return ( + + + + + + + Gestion de usuarios + controles para controlar usuarios + + + + + + + + + + + + + + + + + + + + Creando usuario + # semana + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} + +export default React.memo(Usuarios) + + + + + + +{/* {''} + {''} + {''} + {''} + + */} \ No newline at end of file diff --git a/src/componentes/usuarios/inactivos/Inactivos.jsx b/src/componentes/usuarios/inactivos/Inactivos.jsx new file mode 100644 index 0000000..6d3d5df --- /dev/null +++ b/src/componentes/usuarios/inactivos/Inactivos.jsx @@ -0,0 +1,104 @@ +import React, {useContext, useEffect, memo} from 'react' +import CEpointContext from '../../../context/CEpointContext'; +import { Card, Button} from 'react-bootstrap' +//import '../Usuarios.css' + const Inactivos = () => { + + const {state, getUsersUnable, activateUser} = useContext(CEpointContext) + + + + useEffect(()=>{ + getUsersUnable() + },[]) + + + + return ( + + + + +
+ + + {state.UsuariosInactivosDetail? state.UsuariosInactivosDetail.map((s)=>( + + + + +
Cuenta inactiva
+ {s.perfil} + {s.nombre} + {s.email} + {s.password} + {s.Uid} + + +
+
+ + + + +
+ + + +
+ + + + )):null} + + + + +
+
+ + + + +
+ + + +
+
+ + + ) +} + + +export default memo(Inactivos) + + + + + + + + + + + + + + + + + diff --git a/src/componentes/usuarios/neo2.jpg b/src/componentes/usuarios/neo2.jpg new file mode 100644 index 0000000..b25dca5 Binary files /dev/null and b/src/componentes/usuarios/neo2.jpg differ diff --git a/src/componentes/usuarios/neo3.jpg b/src/componentes/usuarios/neo3.jpg new file mode 100644 index 0000000..b395319 Binary files /dev/null and b/src/componentes/usuarios/neo3.jpg differ diff --git a/src/componentes/usuarios/ocupados/Desocupados.jsx b/src/componentes/usuarios/ocupados/Desocupados.jsx new file mode 100644 index 0000000..435e2b5 --- /dev/null +++ b/src/componentes/usuarios/ocupados/Desocupados.jsx @@ -0,0 +1,75 @@ +import React, {memo, useContext, useEffect} from 'react' +//import '../Usuarios.css' +import { Card } from 'react-bootstrap' + +import CEpointContext from '../../../context/CEpointContext'; + const Desocupados = () => { + const { + state, + getUsersNoBussy + }=useContext(CEpointContext) + + useEffect(()=>{ + + getUsersNoBussy() + },[]) + + + return ( + +

Usuarios desocupados

+ + + +
+ + + {state.UsuariosDesocupados.map((s)=>( + + + + +
Usuario desocupado
+ {s.perfil} + {s.nombre} + {s.email} + {s.password} + {s.Uid} +
+
+ + + + + + +
+ + + +
+ + + + ))} + + + + +
+
+ + + + +
+ + + +
+
+ + ) +} + +export default memo(Desocupados) \ No newline at end of file diff --git a/src/componentes/usuarios/ocupados/Ocupados.jsx b/src/componentes/usuarios/ocupados/Ocupados.jsx new file mode 100644 index 0000000..b3d3005 --- /dev/null +++ b/src/componentes/usuarios/ocupados/Ocupados.jsx @@ -0,0 +1,83 @@ +import React, {memo, useContext, useEffect} from 'react' +//import '../Usuarios.css' +import { Card, Button } from 'react-bootstrap' + +import CEpointContext from '../../../context/CEpointContext'; + +const Ocupados = () => { + const { state, enableOcupado, getUsersBussy }=useContext(CEpointContext) + + + + + useEffect(()=>{ + getUsersBussy() + + },[]) + + + return ( + +

Usuarios ocupados

+ + + +
+ + + {state.UsuariosOcupados.map((s)=>( + + + + +
Usuario Ocupado
+ {s.perfil} + {s.nombre} + {s.email} + {s.password} + {s.UID} +
+
+ + + + + + +
+ + + +
+ + + + ))} + + + + +
+
+ + + + +
+ + + +
+
+ + ) +} + +export default memo(Ocupados) \ No newline at end of file diff --git a/src/componentes/usuarios/options.js b/src/componentes/usuarios/options.js new file mode 100644 index 0000000..6b3c95f --- /dev/null +++ b/src/componentes/usuarios/options.js @@ -0,0 +1,233 @@ +export const options = [ + { + type: "group", + name: "CUENTAKEYCHECADOR", + items: [ + { name: "CHECADOR", value: "CHECADOR" } + + ] + }, + { + type: "group", + name: "CIVILES", + items: [ + + { name: "Residente de obra", value: "Residente de obra" }, + { name: "Arquitecto proyectista", value: "Arquitecto proyectista" }, + { name: "Administrador de obra", value: "Administrador de obra"}, + { name: "Cabo albañil", value: "Cabo albañil" }, + { name: "Oficial albañil", value: "Oficial albañil" }, + { name: "Oficial medio albañil", value: "Oficial medio albañil" }, + { name: "Ayudante albañil", value: "Ayudante albañil" }, + { name: "Ayudante general", value: "Ayudante general" }, + { name: "Operador", value: "Operador" } + + ] + }, + { + type: "group", + name: "SEGURIDAD E HIGIENE", + items: [ + { name: "Coordinador de SHE", value: "Coordinador de SHE" }, + { name: "Supervision de SHE", value: "Supervision de SHE" } + + ] + }, + { + type: "group", + name: "ELECTRICOS", + items: [ + { name: "Residente electrico", value: "Residente electrico" }, + { name: "Oficial electrico", value: "Oficial electrico" }, + { name: "Ayudante electrico", value: "Ayudante electrico" } + ] + }, + { + type: "group", + name: "HERRERIA", + items: [ + { name: " Cabo soldador", value: "Cabo soldador" }, + { name: "Soldador", value: "Soldador" }, + { name: "Herrero", value: "Herrero" }, + { name: "Ayudante de soldador", value: "Ayudante de soldador" }, + { name: "Maestro aluminiero", value: "Maestro aluminiero" }, + ] + }, + { + type: "group", + name: "DIRECCION", + items: [ + { name: "Director MacBrick", value: "Director MacBrick" }, + { name: "Director inmobiliaria", value: "Director inmobiliaria" }, + { name: "Director SIARSA", value: "Director SIARSA" }, + { name: "Director SECMA", value: "Director SECMA" }, + { name: "Director CE2000", value: "Director CE2000" }, + { name: "Director SOLCOM", value: "Director SOLCOM" } + ] + }, + { + type: "group", + name: "SIARSA", + items: [ + { name: "Gerente de operaciones", value: "Gerente de operaciones" }, + { name: "Tecnico especialista", value: "Tecnico especialista" } + ] + }, + { + type: "group", + name: "SECMA", + items: [ + { name: "Proyectos CCTV", value: "Proyectos CCTV" }, + { name: "Operacion CCTV", value: "Operacion CCTV" }, + { name: "Tecnico CCTV", value: "Tecnico CCTV" } + ] + }, + { + type: "group", + name: "SOLCOM", + items: [ + { name: "Asistente Direccion", value: "Asistente Direccion" } + + ] + }, + { + type: "group", + name: "ALMACEN", + items: [ + { name: "Chofer", value: "Chofer" } + + ] + }, + { + type: "group", + name: "CORPORATIVO", + items: [ + { name: "Portero", value: "Portero" } + + ] + } + + ]; + + export function searchArea(dato) { + let area; + switch (dato) { + case "CHECADOR": + area = "CUENTAKEYCHECADOR"; + break; + case "Residente de obra": + area = "CIVIL"; + break; + case "Arquitecto proyectista": + area = "CIVIL"; + break; + case "Cabo albañil": + area = "CIVIL"; + break; + case "Administrador de obra": + area = "CIVIL"; + break; + + case "Oficial albañil": + area = "CIVIL"; + break; + case "Ayudante albañil": + area = "CIVIL"; + break; + case "Ayudante general": + area = "CIVIL"; + break; + case "Oficial medio albañil": + area = "CIVIL"; + break; + case "Operador": + area = "CIVIL"; + break; + case "Director MacBrick": + area = "CIVIL"; + break; + case "Director inmobiliaria": + area = "CIVIL"; + break; + case "Director CE2000": + area = "CIVIL"; + break; + case "Coordinador de SHE": + area = "SHE"; + break; + case "Supervision de SHE": + area = "SHE"; + break; + case "Residente electrico": + area = "ELECTRICOS"; + break; + case "Oficial electrico": + area = "ELECTRICOS"; + break; + case "Ayudante electrico": + area = "ELECTRICOS"; + break; + case "Cabo soldador": + area = "HERREROS"; + break; + case "Soldador": + area = "HERREROS"; + break; + case "Herrero": + area = "HERREROS"; + break; + case "Ayudante de soldador": + area = "HERREROS"; + break; + case "Maestro aluminiero": + area = "HERREROS"; + break; + case "Director SIARSA": + area = "SIARSA"; + break; + case "Gerente de operaciones": + area = "SIARSA"; + break; + case "Tecnico especialista": + area = "SIARSA"; + break; + case "Director SECMA": + area = "SECMA"; + break; + case "Proyectos CCTV": + area = "SECMA"; + break; + case "Operacion CCTV": + area = "SECMA"; + break; + case "Tecnico CCTV": + area = "SECMA"; + break; + case "Director SOLCOM": + area = "SOLCOM"; + break; + case "Asistente Direccion": + area = "SOLCOM"; + break; + case "Chofer": + area = "CORPORATIVO"; + break; + case "Portero": + area = "CORPORATIVO"; + break; + + + + } + console.log('funcion:', area) + //setArea(area) + return area; + } + export const optionsEmpresas=[ + {name: 'CE2000', value: 'CE2000'}, + {name: 'SECMA', value: 'SECMA'}, + {name: 'SIARSA', value: 'SIARSA'}, + {name: 'MCBRICK', value: 'MCBRICK'}, + {name: 'SOLCOM', value: 'SOLCOM'}, + {name: 'INMOBILIARIA', value: 'INMOBILIARIA'} + ] \ No newline at end of file diff --git a/src/componentes/usuarios/todos/ActualizaInfoUser.jsx b/src/componentes/usuarios/todos/ActualizaInfoUser.jsx new file mode 100644 index 0000000..f3a6ac8 --- /dev/null +++ b/src/componentes/usuarios/todos/ActualizaInfoUser.jsx @@ -0,0 +1,153 @@ +import React, {useContext, useState, useRef} from 'react' + +import CEpointContext from '../../../context/CEpointContext'; +import UiContext from '../../../context/UiContext'; +import { Button, Offcanvas, Form } from 'react-bootstrap' +import SelectSearch from "react-select-search"; +import {options, optionsEmpresas} from '../options' + + const ActualizaInfoUser = ({prop}) => { + + const {state, + fetchOnlyUser, + acNombre, + acPerfil, + acEmpresa, + enableChecador, + ableChecador, + ableOcupado, + enableOcupado, + ableAsignador, + enableAsignador, + ableAsistencias, enableAsistencias + }= useContext(CEpointContext) + + const{show3, handleClose3 }=useContext(UiContext) + const [Empresa, setEmpresa]=useState('') + const [Perfil, setPerfil] = useState('') + + + const nombreRef =useRef("") + return ( + + + + + + + {state.OnlyUser?state.OnlyUser.nombre:null} + + +
+ + Actualiza nombre + + + + + + + Actualiza perfil + + + + + + + Actualiza empresa + + + + + + { + state.OnlyUser.ocupado?enableOcupado(state.OnlyUser.UID):ableOcupado(state.OnlyUser.UID); + fetchOnlyUser(state.OnlyUser.UID) + } + } + /> +
+ { + state.OnlyUser.checador?enableChecador(state.OnlyUser.UID):ableChecador(state.OnlyUser.UID); + fetchOnlyUser(state.OnlyUser.UID) + } + } + isValid={true} + label="¿Tiene habilitado el checador?" + /> +
+ { + state.OnlyUser.asignador?enableAsignador(state.OnlyUser.UID):ableAsignador(state.OnlyUser.UID); + fetchOnlyUser(state.OnlyUser.UID) + } + } + /> +
+ { + state.OnlyUser.lectoreAsistencia?enableAsistencias(state.OnlyUser.UID):ableAsistencias(state.OnlyUser.UID); + fetchOnlyUser(state.OnlyUser.UID) + } + } + /> + +
+
+ + + + ) +} + +export default React.memo(ActualizaInfoUser) \ No newline at end of file diff --git a/src/componentes/usuarios/todos/CardUser.jsx b/src/componentes/usuarios/todos/CardUser.jsx new file mode 100644 index 0000000..901a46a --- /dev/null +++ b/src/componentes/usuarios/todos/CardUser.jsx @@ -0,0 +1,218 @@ +import React from 'react' +import { Card, Button, Offcanvas, Form, Row, Col, Overlay, Popover } from 'react-bootstrap' + +export const CardUser = ({prop}) => { + return ( + + + + + {prop.perfil} + {prop.nombre} + {prop.email} + {prop.password} + {prop.Uid} + + {/* */} +
+
+ + + {/* */} + + + {/* */} + + + {/* */} + + + {/* + + {UserQr?UserQr.nombre:null} + + + + + + + + + */} + + + + + + + + +
+ + + {/* + + + + {OnlyUser?OnlyUser.nombre:null} + + +
+ + Actualiza nombre + + + + + + + Actualiza perfil + + + + + + + Actualiza empresa + + + + + + { + OnlyUser.ocupado?enableOcupado(OnlyUser.UID):ableOcupado(OnlyUser.UID); + fetchOnlyUser(OnlyUser.UID) + } + } + /> +
+ { + OnlyUser.checador?enableChecador(OnlyUser.UID):ableChecador(OnlyUser.UID); + fetchOnlyUser(OnlyUser.UID) + } + } + isValid={true} + label="¿Tiene habilitado el checador?" + /> +
+ { + OnlyUser.asignador?enableAsignador(OnlyUser.UID):ableAsignador(OnlyUser.UID); + fetchOnlyUser(OnlyUser.UID) + } + } + /> +
+ { + OnlyUser.lectoreAsistencia?enableAsistencias(OnlyUser.UID):ableAsistencias(OnlyUser.UID); + fetchOnlyUser(OnlyUser.UID) + } + } + /> + +
+
*/} + +
+ + ) +} diff --git a/src/componentes/usuarios/todos/CardUsuario.jsx b/src/componentes/usuarios/todos/CardUsuario.jsx new file mode 100644 index 0000000..179c78f --- /dev/null +++ b/src/componentes/usuarios/todos/CardUsuario.jsx @@ -0,0 +1,116 @@ +import React,{useContext, useState} from 'react' +import { Card, Row, Col, Button } from 'react-bootstrap' + +import CEpointContext from '../../../context/CEpointContext'; +import { QrGen } from './QrGen'; +//import '../Usuarios.css' +import ActualizaInfoUser from './ActualizaInfoUser' +import UiContext from '../../../context/UiContext' +import { toDataURL } from 'qrcode'; + + + const CardUsuario = ({prop}) => { + const { + desactivaUser, + fetchOnlyUser + }=useContext(CEpointContext) + + + + const{show3, handleClose3, handleShow3, show1, setShow1 }=useContext(UiContext) + + + const [QRurl, setQRurl]= useState() + + const [modalShow, setModalShow] =useState(false); + + + return ( + + + + + {prop.perfil} + {prop.nombre} + {prop.email} + {prop.password} + {prop.Uid} + + + , + + + + + +
+
+ + + + + + + + + + + + setModalShow(false)} trabajador={prop.nombre} QRurl={QRurl} + /> + + + + + + + + + + + + +
+ + + +
+ + + + + ) +} +export default React.memo(CardUsuario) \ No newline at end of file diff --git a/src/componentes/usuarios/todos/QrGen.jsx b/src/componentes/usuarios/todos/QrGen.jsx new file mode 100644 index 0000000..9bea5f2 --- /dev/null +++ b/src/componentes/usuarios/todos/QrGen.jsx @@ -0,0 +1,32 @@ +import React,{useContext, useState} from 'react' +import { Button, Modal } from 'react-bootstrap'; + +import UiContext from '../../../context/UiContext'; + + + + +export const QrGen = ({ show ,onHide, trabajador, QRurl}) => { + return ( + + + + {trabajador} + + + +

Descargar codigo QR

+ +
+ + + +
+ ); + } \ No newline at end of file diff --git a/src/componentes/usuarios/todos/Todos.jsx b/src/componentes/usuarios/todos/Todos.jsx new file mode 100644 index 0000000..78a1ad0 --- /dev/null +++ b/src/componentes/usuarios/todos/Todos.jsx @@ -0,0 +1,174 @@ +import React, {useContext, useState, useEffect, useRef, memo, useMemo} from 'react' +import { Card, Container } from 'react-bootstrap' +import CEpointContext from '../../../context/CEpointContext'; + + + +//import '../Usuarios.css' +import * as XLSX from "xlsx" +import CardUsuario from './CardUsuario'; + + + const Todos = () => { + const {state, + getUsuarios}=useContext(CEpointContext) + + const [Civiles, setCiviles] = useState([]) + + + + +console.log('STATE IN todos:', state) + + + + + + +//console.log('habilitados?:', Userun) + + +const [excel, setExcel] = useState() +function ExportData() { + //var XLSX = require("xlsx") + + /* 创建worksheet */ + var ws = XLSX.utils.json_to_sheet(state.UsuariosActivosDetail); + + /* 新建空workbook,然后加入worksheet */ + var wb = XLSX.utils.book_new(); + XLSX.utils.book_append_sheet(wb, ws, "People"); + + /* 生成xlsx文件 */ + XLSX.writeFile(wb, `usuarios.xlsx`); +} + + + +const civilesWay = useMemo(() => { + return state.UsuariosActivosDetail.reduce((past, current) => { + const foundItem = past.find(it => it.area === current.area) + if (foundItem) { + foundItem.data = foundItem.data + ? [...foundItem.data, { + 'nombre': current.nombre, + 'perfil': current.perfil, + 'email': current.email, + 'password': current.password, + 'Uid': current.UID, + 'empresa': current.empresa, + 'asignador': current.asignador, + 'checador': current.checador, + 'ocupado': current.ocupado, + 'lectoreAsistencia': current.lectoreAsistencia + }] + : [{ + 'nombre': current.nombre, + 'perfil': current.perfil, + 'email': current.email, + 'password': current.password, + 'Uid': current.UID, + 'empresa': current.empresa, + 'asignador': current.asignador, + 'checador': current.checador, + 'ocupado': current.ocupado, + 'lectoreAsistencia': current.lectoreAsistencia + }] + } else { + past.push({ + 'area': current.area, + 'data': [ + { + 'nombre': current.nombre, + 'perfil': current.perfil, + 'email': current.email, + 'password': current.password, + 'Uid': current.UID, + 'empresa': current.empresa, + 'asignador': current.asignador, + 'checador': current.checador, + 'ocupado': current.ocupado, + 'lectoreAsistencia': current.lectoreAsistencia + } + ] + }) + } + return past; + }, []) + }, [state.UsuariosActivosDetail]) + + useEffect(() => { + setCiviles(civilesWay) + }, [civilesWay]) + + +//console.log(Civiles) + + + + + const empresaRef =useRef("") + //console.log(nombreRef.current.value) + + const ref = useRef(null); + + + /* const handleClick = */ + + + + + + + return ( + + + { + +Civiles.map((e) => { + + return +

{e.area}

+ + + + {e.data.map((s)=>)} + + + +
+ + + + } + + +) + +} + +
+
+ +) +} + +export default memo(Todos) + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/context/AsistenciasContext.js b/src/context/AsistenciasContext.js deleted file mode 100644 index e69de29..0000000 diff --git a/src/context/AuthContext.js b/src/context/AuthContext.js index 06ca7bc..3f8f3ab 100644 --- a/src/context/AuthContext.js +++ b/src/context/AuthContext.js @@ -4,7 +4,9 @@ import { signInWithEmailAndPassword, signOut, onAuthStateChanged, + } from 'firebase/auth'; + import app from '../firebase/firebase'; import { auth } from '../firebase/firebase'; import axios from 'axios' @@ -18,17 +20,19 @@ export const UserAuth = () => { return useContext(UserContext); }; + + export const AuthContextProvider = ({ children }) => { - const [user, setUser] = useState({}); - // const dispatch=useDispatch(); + const [user, setUser] = useState(); + // const dispatch=useDispatch() ; const firestore= getFirestore(app) //version normal - const createUser = (email, password) => { - return createUserWithEmailAndPassword(auth, email, password) + const createUsuario = (email, password) => { + return createUserWithEmailAndPassword(auth, email, password) - }; + }; const signIn = (email, password) => { @@ -44,17 +48,17 @@ export const AuthContextProvider = ({ children }) => { useEffect(() => { const unsubscribe = onAuthStateChanged(auth, (currentUser) => { - console.log(currentUser); + console.log({currentUser}); + //setUser(currentUser); setUser(currentUser); - //console.log(user) + console.log('currentversion is running') }); - return () => { - unsubscribe(); - }; - }, []); - + return () => unsubscribe(); + + },[]); +console.log(JSON.stringify(user)) return ( - + {children} ); diff --git a/src/context/CEpointContext.js b/src/context/CEpointContext.js new file mode 100644 index 0000000..8a04289 --- /dev/null +++ b/src/context/CEpointContext.js @@ -0,0 +1,866 @@ +import React, {useState, createContext, useReducer, useContext, useEffect} from 'react' +import { db } from '../firebase/firebase'; +import { query, collection, onSnapshot, doc, getDoc, where, setDoc, updateDoc, getDocs } from 'firebase/firestore'; +import { GlobalState } from '../redux/GlobalState'; +import { TYPES } from '../redux/Types'; +import UserContext from './AuthContext'; +import {searchArea} from '../componentes/usuarios/options' + +const CEpointContext = createContext() +export default CEpointContext; + +export const CEpointProvider = ({children}) => { + const {user} = useContext(UserContext) + const key=user?user.uid:null + +const initialstate=JSON.parse(localStorage.getItem(`state-${key}`))|| { + AP:'', + ChecadorAsignadouser:'', + DP: '', + OnlyUser:'', + OnlyTrabajador:'', + PresupuestosSelecionados:'', + Proyecto:'', + ProyectosAdicionales:'', + ProyectosGarantia:'', + TotalProyectos:'', + UserChecador:'', + UsuarioSesion:'', + UsuariosActivosDetail:'', + UsuariosDesocupados:'', + UsuariosDisponiblesChecador:'', + UsuariosInactivosDetail:'', + UsuariosOcupados:'', + asignacionesActivasDetails: '', + asignacionesDD: '', + asignacionesTotal:'', + proyectonames:'', + selectProyecto:'', + + test:'' + +} + + const [state, dispatch] = useReducer(GlobalState, initialstate); + + //USUARIO ABOUT + useEffect(() => { + localStorage.setItem(`state-${key}`, JSON.stringify(state)); +}, [state]); + + console.log(user?user.uid:null) + + + const accessKey = async ()=>{ + + const queryDoc = doc(db, "cuentas", user.uid); + await getDoc(queryDoc).then( (res) => { + dispatch({type:TYPES.USUARIO_DATA, payload:res.data()}) + + + } ) +} + + +//PROYECTOS, PRESUPUESTOS +//MUTATION +//ASIGNACION ABOUT +const agregaProyecto = async (dato, datos) => { +await setDoc(doc(db, "asignaciones", dato),datos); +} + + + + +//Voy a crear una sola funcion que sustityua "getLinks", "getProyectosDesactivados" +//UNA SOLA CONSULTA DE ASIGNACIONES Y FILTRAR CON JAVASCRIPT + +/* const getProyectos =async()=>{ + const q = query(collection(db, "asignaciones")) + await onSnapshot(q, (query)=>{ + const data=[] + query.forEach((doc)=>{ + data.push(doc.data()) + + }) + dispatch({ + type:TYPES.GET_PROYECTOS, payload:data + }) + })} + */ + +const getProyecto = async(dato)=>{ + const ref=collection(db, "asignaciones") + const q = query(ref, where("presupuesto","==", dato) ) + await onSnapshot(q, + (query)=>{ + query.forEach((doc)=>{ + dispatch({type:TYPES.PROYECTO, payload:doc.data().asistencias }) + }) + + + } + ) + } + //const data=[] + + //data.push(doc.data().asistencias) + + const getSelectProyect = async(dato)=>{ + const ref=collection(db, "asignaciones") + const q = query(ref, where("presupuesto","==", dato) ) + await onSnapshot(q, + (query)=>{ + query.forEach((doc)=>{ + dispatch({type:TYPES.SELECT_PROYECTO, payload:doc.data() }) + }) + + + } + ) + } + + + + + + /* const editaEstado = async(id, valor)=>{ + const userRef= doc(db, 'users',id) + await setDoc(userRef, {domicilio: valor}, {merge:true} ) + } */ + const editaEmpresa = async(id, valor)=>{ + const AP = doc(db, "asignaciones", `${id}`) + + await updateDoc(AP, { + Empresa: valor, + + + }) + } + + + const editaEstado = async(dato, dato1)=>{ + + const AP = doc(db, "asignaciones", `${dato}`) + + await updateDoc(AP, { + Estado: dato1, + + + }) + } + + + + const editaPresupuesto = async(dato, dato1)=>{ + + const AP = doc(db, "asignaciones", `${dato}`) + + await updateDoc(AP, { + presupuesto: dato1, + + + }) + } + + const editaObra = async(dato, dato1)=>{ + + const AP = doc(db, "asignaciones", `${dato}`) + + await updateDoc(AP, { + obra: dato1, + + + }) + } + + const editaUbicacion = async(dato, dato1)=>{ + + const AP = doc(db, "asignaciones", `${dato}`) + + await updateDoc(AP, { + ubicacion: dato1, + + + }) + } + + const editaResidenteUid = async(dato, dato1)=>{ + + const AP = doc(db, "asignaciones", `${dato}`) + + await updateDoc(AP, { + residenteUid: dato1, + + + }) + } + + + //get total proyectos + + const getTotalProyectos =async()=>{ + + const q = query(collection(db, "asignaciones") ) + await onSnapshot(q, (query)=>{ + const data=[] + query.forEach((doc)=>{ + data.push(doc.data().presupuesto ) + + }) + + dispatch({type:TYPES.CALL_TOTAL, payload: data }) + })} + + + //GET PROYECTO Estado Activo + const getProyectosActivos =async()=>{ + const ref=collection(db, "asignaciones") + const q = query(ref, where("Estado","==", "Activo"), where('asistencias', '!=' ,[]) ) + await onSnapshot(q, (query)=>{ + const data=[] + query.forEach((doc)=>{ + data.push(doc.data().presupuesto) + + }) + + dispatch({type:TYPES.CALL_PROYECTOS_ACTIVOS_NAME, payload: data }) + })} + //GET PROYECTO Estado Desactivado + + + const getProyectosDesactivados = async()=>{ + const ref=collection(db, "asignaciones") + const q = query(ref, where("Estado","==", "Desactivado"), where('asistencias', '!=' ,[]) ) + await onSnapshot(q, (query)=>{ + const data=[] + query.forEach((doc)=>{ + data.push(doc.data().presupuesto) + + }) + dispatch({type:TYPES.CALL_PROYECTOS_DESACTIVADOS_NAME, payload: data }) + })} + + //GET PROYECTO Estado Adicional + + const getProyectosAdicionales =async()=>{ + const ref=collection(db, "asignaciones") + const q = query(ref, where("Estado","==", "Adicional"), where('asistencias', '!=' ,[]) ) + await onSnapshot(q, (query)=>{ + const data=[] + query.forEach((doc)=>{ + data.push(doc.data().presupuesto) + + }) + dispatch({type:TYPES.CALL_PROYECTOS_ADICIONALES_NAME, payload: data }) + })} + //GET PROYECTO Estado Garantia + + + const getProyectosGarantia =async()=>{ + const ref=collection(db, "asignaciones") + const q = query(ref, where("Estado","==", "Garantia"), where('asistencias', '!=' ,[]) ) + await onSnapshot(q, (query)=>{ + const data=[] + query.forEach((doc)=>{ + data.push(doc.data().presupuesto) + + }) + dispatch({type:TYPES.CALL_PROYECTOS_GARANTIA_NAME, payload: data }) + })} + + + + const getNamesProyectos =async()=>{ + const q = query(collection(db, "asignaciones"), where('asistencias', '!=' ,[])) + await onSnapshot(q, (query)=>{ + const data=[] + query.forEach((doc)=>{ + data.push(doc.data().presupuesto) + + }) + dispatch({ + type:TYPES.GET_NAME_PROYECTOS, payload:data + }) + })} + + + + + +const fetchChecadorAsignadoUser = async(params)=>{ +const q = doc(db, "cuentas", params ) +await getDoc(q).then(res=>{ + +dispatch({type:TYPES.ASIGNADO_CHECADOR, payload: res.data()}) +})} + + + + + + + + + + + + //USUARIOS ABOUT + + + + + + const [UserChecador, setUserChecador] = useState('') + +//obten todos los usuarios hacer un reducer para +//OK +const getUsuarios =async()=>{ + const q = query(collection(db, "users"),where("activo","==", true)) + await onSnapshot(q, (query)=>{ + const data=[] + query.forEach((doc)=>{ + data.push(doc.data()) + }) + dispatch({type:TYPES.USUARIOS_ACTIVOS, payload:data}) + + }) + } + + const getUsuariosChecador =async()=>{ + const q = query(collection(db, "cuentas"),where("area","in", ['CUENTAKEYCHECADOR'])) + await onSnapshot(q, (query)=>{ + const data=[] + query.forEach((doc)=>{ + data.push(doc.data()) + }) + dispatch({ + type: TYPES.USUARIOS_DISPONIBLES_CHECADOR, payload:data + }) + + }) + } + + //atencion aqui ya que me bugeo en las fichas de actualizar usuario, se quedo pegado el usuario electo + + + +const fetchName = async(params)=>{ +const q = doc(db, "users", params ) +await getDoc(q).then(res=>{ +return res.data().nombre +}) +} + + +//Usuarios ocupados +const getUsersBussy = async()=>{ +const UB = query(collection(db, "users"),where("ocupado","==", true)) +await onSnapshot(UB, (Q)=>{ +const dato=[] + +Q.forEach((element) => { + + dato.push(element.data()) + +}); +dispatch({type:TYPES.USUARIOS_OCUPADOS, payload:dato }) + +}) +} + +const getUsersNoBussy = async()=>{ +const UNB = query(collection(db, "users"),where("ocupado","==", false)) +await onSnapshot(UNB, (Q)=>{ +const dato=[] + +Q.forEach((element) => { + + dato.push(element.data()) + +}); +dispatch({type:TYPES.USUARIOS_DESOCUPADOS, payload:dato }) + +}) +} + + +//obtengo usuarios que no estan activados +//OK +const getUsersUnable = async()=>{ + const UU = query(collection(db, "users"),where("activo","==", false)) + await onSnapshot(UU, (Q)=>{ + const dato=[] + + Q.forEach((element) => { + + dato.push(element.data()) + + }); + dispatch({type:TYPES.USUARIOS_INACTIVOS, payload:dato}) + + }) + } +//Esta funcion activa los usuarios + + + + +//esta funcion actualiza el res +const acUsChec = async(id, Residente)=>{ +const AUC =doc(db, "asignaciones", id) +await updateDoc(AUC, { +residenteUid: Residente +}) + +console.log('done :)') +} + + +//checa si es un usuario con checador true +const ableChecador = async(dato)=>{ +const AC = doc(db, "cuentas", dato) +await updateDoc(AC, { checador: true } )} + +//checa si es un usuario con checador false + +const enableChecador = async(dato)=>{ +const DC = doc(db, "cuentas", dato) +await updateDoc(DC, {checador: false} )} + + +//lector asistencias + +const ableAsistencias = async(dato)=>{ + const AC = doc(db, "users", dato) + await updateDoc(AC, { lectoreAsistencia: true } )} + + //checa si es un usuario con checador false + + const enableAsistencias = async(dato)=>{ + const DC = doc(db, "users", dato) + await updateDoc(DC, {lectoreAsistencia: false} )} + +// este es un reduce que tiene como objetivo buscar checador en teoria +//pero actualmente devuelve un array que da nombre, uid, y perfil, +//TODO: Agregar un dato para filtrar usuarios a elegir + +const finderChecador = (props) => { +return props.reduce((past, current)=>{ + const foundIndex = past.find(it=>it.nombre===current.nombre) +// console.log('ver reduce resultados:', past) + const r=[] + r.push(past) + dispatch({type:TYPES.REDUCER_USER_CHECADOR , payload:r}) + + if(foundIndex){ + foundIndex.data=foundIndex.data + ?[...foundIndex.data, { + 'perfil': current.perfil + + }] + :[{ 'perfil': current.perfil + }] + }else{ past.push( + { + + 'nombre': current.nombre, + 'uid':current.UID, + 'checador':current.checador, + 'data': [{ + 'perfil': current.perfil, + + }] + } )} + return past; +}, [])} + + +const ableOcupado = async(dato)=>{ + const AC = doc(db, "users", dato) + await updateDoc(AC, { ocupado: true } )} + + //checa si es un usuario con checador false + + const enableOcupado = async(dato)=>{ + const DC = doc(db, "users", dato) + await updateDoc(DC, {ocupado: false} )} + + + const ableAsignador = async(dato)=>{ + const AC = doc(db, "users", dato) + await updateDoc(AC, { asignador: true } )} + + //checa si es un usuario con checador false + + const enableAsignador = async(dato)=>{ + const DC = doc(db, "users", dato) + await updateDoc(DC, {asignador: false} )} +/* recolectar consultas */ + + + + + +//ACTIVA PROYECTO +const activateProyecto = async(params)=>{ + const AU = doc(db, "asignaciones", params) + await updateDoc(AU, + + { + activa: true + }) + } +//DESACTIVA PROYECTO +const desactivarProyecto = async(params)=>{ + const AU = doc(db, "asignaciones", params) + await updateDoc(AU, + + { + activa: false + }) + } + //ASISTENCIAS ABOUT + +/* const getPresupuestos =async () => { + const q = query(collection(db, "asignaciones"),where("asistencias", "!=", [] )) + await onSnapshot(q, (query)=>{ + const data=[] + query.forEach((doc)=>{ + data.push(doc.data()) + console.log("FIRESTORE SAYS: ", doc.data().asistencias) + }) + setPresupuesto(data) + }) } */ + + + + + +//ALMACEN ABOUT + //REGISTRO DE HERRAMIENTA + + + + + + + + + + + + + + + + + +//RH ABOUT + + //INFORMACION DEL TRABAJADOR + +const fetchOnlyUser = async(params)=>{ + const q = doc(db, "cuentas", params ) + await getDoc(q).then(res=>{ + dispatch({type: TYPES.FETCH_ONLYUSER, payload:res.data() }) + + }) + } + + + const fetchOnlyTrabajador = async(params)=>{ + const q = doc(db, "users", params ) + await getDoc(q).then(res=>{ + dispatch({type: TYPES.FETCH_TRABAJADOR, payload:res.data() }) + + }) + } + + //NOMBRE + //AGREGA + const addNombre = async(id, valor)=>{ + const userRef= doc(db, 'users',id) + await setDoc(userRef, {nombre: valor}, {merge:true} ) + } + + //ACTUALIZA + const acNombre = async(id, dato)=>{ + const AN = doc(db, "users", id) + await updateDoc(AN, { + nombre: dato + }) + } +//NSS + //AGREGA + const addNss = async(id, valor)=>{ + const userRef= doc(db, 'users',id) + await setDoc(userRef, {nss: valor}, {merge:true} ) + } + //ACTUALIZA + + const acNss = async(id, valor)=>{ + const AP = doc(db, "users", id) + await updateDoc(AP, { + nss: valor, + + + }) + } + + + +//FECHANACIMIENTO + //AGREGA + const addFeNacimiento = async(id, valor)=>{ + const userRef= doc(db, 'users',id) + await setDoc(userRef, {fechaNacimiento: valor}, {merge:true} ) + } + //ACTUALIZA + const acFeNacimiento = async(id, valor)=>{ + const AP = doc(db, "users", id) + await updateDoc(AP, { + fechaNacimiento: valor, + + + }) + } + + + //PERFIL + //AGREGA + const addPerfil = async(id, valor)=>{ + const userRef= doc(db, 'users',id) + await setDoc(userRef, {perfil: valor}, {merge:true} ) + } + //ACTUALIZA + const acPerfil = async(id, perfilDato)=>{ + const AP = doc(db, "users", id) + await updateDoc(AP, { + perfil: perfilDato, + area: searchArea(perfilDato) + + }) + } + + //TELEFONO + //AGREGA + const addTelefono = async(id, valor)=>{ + const userRef= doc(db, 'users',id) + await setDoc(userRef, {telefono: valor}, {merge:true} ) + } + //ACTUALIZA + const acTelefono = async(id, valor)=>{ + const AP = doc(db, "users", id) + await updateDoc(AP, { + telefono: valor, + + + }) + } + + //EMPRESA + //AGREGA + const addEmpresa = async(id, valor)=>{ + const userRef= doc(db, 'users',id) + await setDoc(userRef, {empresa: valor}, {merge:true} ) + } + //ACTUALIZA + const acEmpresa = async(id, Empresa)=>{ + const AE =doc(db, "users", id) + await updateDoc(AE, { + empresa: Empresa + }) + } + + + //DOMICILIO + //AGREGA + const addDomicilio = async(id, valor)=>{ + const userRef= doc(db, 'users',id) + await setDoc(userRef, {domicilio: valor}, {merge:true} ) + } + //ACTUALIZA + const acDomicilio = async(id, valor)=>{ + const AP = doc(db, "users", id) + await updateDoc(AP, { + domicilio: valor, + + + }) + } + + //EMAIL + //AGREGA + const addEmail = async(id, valor)=>{ + const userRef= doc(db, 'users',id) + await setDoc(userRef, {email: valor}, {merge:true} ) + } + //ACTUALIZA + const acEmail = async(id, valor)=>{ + const AP = doc(db, "users", id) + await updateDoc(AP, { + email: valor, + + + }) + } + + + + + + + //otros + + const activateUser = async(params)=>{ + const AU = doc(db, "users", params) + await updateDoc(AU, + + { + activo: true + }) + } + + const desactivaUser = async(params)=>{ + const AU = doc(db, "users", params) + await updateDoc(AU, + + { + activo: false + }) + } + + + //GENERADORES DE REPORTE +const generadorReportes = async(...n)=>{ + + const q = query(collection(db, n)); + +const querySnapshot = await getDocs(q) + +querySnapshot.forEach((doc) => { + // doc.data() is never undefined for query doc snapshots + console.log(doc.id, " => ", doc.data()); +}); + + +} + + + + +/* +const getTest =async()=>{ + const q = query(collection(db, "asignaciones"), where('presupuesto', '==' ,"PC-22-541")) + await onSnapshot(q, (query)=>{ + const data=[] + query.forEach((doc)=>{ + data.push(doc.data()) + + }) + dispatch({ + type:TYPES.TEST_TEST, payload:data + }) + })} */ + + + const getConsultaConstruida =async(n)=>{ + const q = query(collection(db, "asignaciones"),where('presupuesto','in', n)) + await onSnapshot(q, (query)=>{ + const data=[] + query.forEach((doc)=>{ + data.push(doc.data()) + + }) + dispatch({ + type:TYPES.TEST_TEST, payload:data + }) + })} + + + + + + + + + + + return ( + + + {children} + + + + ) + } + + + + + + diff --git a/src/context/UiContext.js b/src/context/UiContext.js new file mode 100644 index 0000000..2be7e18 --- /dev/null +++ b/src/context/UiContext.js @@ -0,0 +1,78 @@ +import React, {useState, createContext} from 'react' +//import { db } from '../firebase/firebase'; +import { query, collection, onSnapshot, doc, getDoc, } from 'firebase/firestore'; + +const UiContext = createContext() +export default UiContext; + +export const UiProvider = ({children}) => { + + const [show1, setShow1] = useState(false); + + + const [show3, setShow3] = useState(false); + const handleClose3 = () => setShow3(false); + const handleShow3 = () => setShow3(true); + + + const [show4, setShow4] = useState(false); + const handleClose4 = () => setShow4(false); + const handleShow4 = () => setShow4(true); + + + const [showFCP, setShowFCP] = useState(false); + const toggleShowFCP = () => { + setShowFCP(!showFCP) + setShowFCU(false) + }; + + + const [showFCU, setShowFCU] = useState(false); + const toggleShowFCU = () => { + setShowFCU(!showFCU) + setShowFCP(false) + }; + + + + const [ToggleRH, setToggleRH]=useState(false) + + + const [inFormulario, setInFormulario] =useState(false) + + + const [ToggleALMACEN, setToggleALMACEN]= useState(false) + + + return ( + + +{children} + + + + ) +} \ No newline at end of file diff --git a/src/context/UsuariosContext.js b/src/context/UsuariosContext.js deleted file mode 100644 index 83ce78f..0000000 --- a/src/context/UsuariosContext.js +++ /dev/null @@ -1,104 +0,0 @@ -import React, {createContext, useState, useContext, useEffect} from 'react' -import { getFirestore, update, FieldValue, get, query, where, collection, getDoc, onSnapshot, doc, updateDoc, arrayUnion} from "firebase/firestore" -import { db } from '../firebase/firebase'; -const UsuariosContext = createContext( ) -export default UsuariosContext; - -export const UsuariosProvider = ({children}) => { - - const [Usuarios, setUsuarios] = useState([]) - const [Userun, setUserun]=useState([]) - const [Actualizador, setActualizador] = useState('') - const [ActivadorChec, setActivadorChec] = useState('') - const [UserChecador, setUserChecador] = useState('') - //obten todos los usuarios hacer un reducer para - const getUsuarios =async()=>{ - const q = query(collection(db, "users"),where("activo","==", true)) - await onSnapshot(q, (query)=>{ - const data=[] - query.forEach((doc)=>{ - data.push(doc.data()) - }) - console.log("Habilitados", data) - setUsuarios(data) - }) - } - - //obtengo usuarios que no estan activados - const getUsersUnable = async()=>{ - const UU = query(collection(db, "users"),where("activo","==", false)) - await onSnapshot(UU, (Q)=>{ - const dato=[] - - Q.forEach((element) => { - - dato.push(element.data()) - - }); - - setUserun(dato) - }) - } - //ver la forma de activar - - const activateUser = async()=>{ - const AU = doc(db, "users", Actualizador) - await updateDoc(AU, - - { - activo: true - }) - } - - const ableChecador = async()=>{ - const AC = doc(db, "users", ActivadorChec) - await updateDoc(AC, { checador: true } )} - - - const enableChecador = async()=>{ - const DC = doc(db, "users", ActivadorChec) - await updateDoc(DC, {checador: false} )} - - - const finderChecador = (props) => { - return props.reduce((past, current)=>{ - const foundIndex = past.find(it=>it.nombre===current.nombre) - console.log('ver reduce resultados:', past) - const r=[] - r.push(past) - setUserChecador(r) - if(foundIndex){ - foundIndex.data=foundIndex.data - ?[...foundIndex.data, { - 'perfil': current.perfil - - }] - :[{ 'perfil': current.perfil - }] - }else{ past.push( - { - - 'nombre': current.nombre, - 'uid':current.UID, - 'data': [{ - 'perfil': current.perfil, - - }] - } )} - return past; - }, [])} - - - - - - - return ( - - {children} - - ) - } - - - diff --git a/src/firebase/firebase.js b/src/firebase/firebase.js new file mode 100644 index 0000000..7451b8b --- /dev/null +++ b/src/firebase/firebase.js @@ -0,0 +1,33 @@ + +// Import the functions you need from the SDKs you need +import { initializeApp } from "firebase/app"; +//import firebase from 'firebase/app'; +import {getAuth, GoogleAuthProvider} from "firebase/auth" +import { doc, getDoc, getFirestore } from "firebase/firestore"; +import { getStorage } from "firebase/storage"; +//wtf?REACT_APP_FIREBASE_DATABASE_URL= +import { getPerformance } from "firebase/performance"; +const firebaseConfig = { + apiKey: process.env.REACT_APP_FIREBASE_apiKey, + authDomain: process.env.REACT_APP_FIREBASE_authDomain, + projectId: process.env.REACT_APP_FIREBASE_projectId, + storageBucket: process.env.REACT_APP_FIREBASE_storageBucket, +messagingSenderId: process.env.REACT_APP_FIREBASE_messagingSenderId, + appId: process.env.REACT_APP_FIREBASE_appId + +}; + +// Initialize Firebase +const app = initializeApp(firebaseConfig) +export const auth= getAuth(app) +export const provider = new GoogleAuthProvider(); +export const db = getFirestore() +//export const db = firebase.firestore(); +const perf = getPerformance(app) +export const storage = getStorage(app); + +export default app; + + + + diff --git a/src/index.css b/src/index.css index ec2585e..1abd00f 100644 --- a/src/index.css +++ b/src/index.css @@ -11,3 +11,7 @@ code { font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', monospace; } + +div.fade.offcanvas-backdrop.show{ + opacity: -0.5; +} \ No newline at end of file diff --git a/src/index.js b/src/index.js index d763692..91cdad6 100644 --- a/src/index.js +++ b/src/index.js @@ -2,18 +2,16 @@ import React from 'react'; import ReactDOM from 'react-dom/client'; import './index.css'; import App from './App'; -import "bootstrap/dist/css/bootstrap.min.css" -import {persistor, store} from './redux/store' -import { Provider } from "react-redux"; -import { PersistGate } from 'redux-persist/integration/react'; +import {BrowserRouter as Router, Route, Routes, useParams, useLocation} from 'react-router-dom' +//import "bootstrap/dist/css/bootstrap.min.css" const root = ReactDOM.createRoot(document.getElementById('root')); root.render( - + - + ); diff --git a/src/redux/AsignacionSlice.js b/src/redux/AsignacionSlice.js deleted file mode 100644 index c45f0fa..0000000 --- a/src/redux/AsignacionSlice.js +++ /dev/null @@ -1,46 +0,0 @@ -import { createSlice } from "@reduxjs/toolkit"; - -const initialState = { - currentAsignacion: null, - datos: false, - error: false, - }; - - - - export const asignacionSlice = createSlice({ - name: "asignacion", - initialState, - reducers: { - indicadorDatos: (state) => { - state.datos = true; - }, - fetchSuccess: (state, action) => { - state.currentAsignacion = action.payload; - }, - fetchFailure: (state) => { - state.datos = false; - state.error = true; - }, - - }, - }); - - export const { indicadorDatos, fetchSuccess, fetchFailure } = - asignacionSlice.actions; - - export default asignacionSlice.reducer; - - - - - - - - - - - - - - diff --git a/src/redux/GlobalState.js b/src/redux/GlobalState.js new file mode 100644 index 0000000..aadbe36 --- /dev/null +++ b/src/redux/GlobalState.js @@ -0,0 +1,158 @@ +import { TYPES } from "./Types" +export const GlobalState=(state, action)=>{ +switch(action.type){ + + case TYPES.GET_PROYECTOS: + return { + ...state, + TotalProyectos : action.payload + } + case TYPES.GET_NAME_PROYECTOS: + return { + ...state, + proyectonames : action.payload + } + + case TYPES.PROYECTO: + return { + ...state, + Proyecto: action.payload + } + + case TYPES.SELECT_PROYECTO: + return { + ...state, + selectProyecto: action.payload + } + + case TYPES.CALL_PROYECTOS_ACTIVOS_NAME: + return { + ...state, + asignacionesActivasDetails: action.payload + } + + case TYPES.CALL_TOTAL: + return { + ...state, + asignacionesTotal: action.payload + } + + case TYPES.CALL_PROYECTOS_DESACTIVADOS_NAME: + return{ + ...state, + asignacionesDD: action.payload + } + + case TYPES.CALL_PROYECTOS_ADICIONALES_NAME: + return{ + ...state, + ProyectosAdicionales: action.payload + } + + case TYPES.CALL_PROYECTOS_GARANTIA_NAME: + return{ + ...state, + ProyectosGarantia: action.payload + } + + + + + case TYPES.ACTIVA_PROYECTO: + return{ + ...state, + AP: action.payload + } + + case TYPES.DESACTIVA_PROYECTO: + return{ + ...state, + DP: action.payload + } + + + case TYPES.USUARIO_DATA: + return { + ...state, + UsuarioSesion : action.payload + } + + case TYPES.USUARIOS_ACTIVOS: + return { + ...state, + UsuariosActivosDetail : action.payload + } + + case TYPES.USUARIOS_INACTIVOS: + return { + ...state, + UsuariosInactivosDetail : action.payload + } + case TYPES.USUARIOS_OCUPADOS: + return { + ...state, + UsuariosOcupados : action.payload + } + + case TYPES.USUARIOS_DESOCUPADOS: + return { + ...state, + UsuariosDesocupados : action.payload + } + case TYPES.USUARIOS_DISPONIBLES_CHECADOR: + return { + ...state, + UsuariosDisponiblesChecador : action.payload + } + case TYPES.REDUCER_USER_CHECADOR: + return { + ...state, + UserChecador : action.payload + } + case TYPES.FETCH_ONLYUSER: + return { + ...state, + OnlyUser : action.payload + } + + case TYPES.FETCH_TRABAJADOR: + return { + ...state, + OnlyTrabajador : action.payload + } + + case TYPES.ASIGNADO_CHECADOR: + return { + ...state, + ChecadorAsignadouser: action.payload + } + + + + case TYPES.TEST_TEST: + return{ + ...state, + test:action.payload + } + + default: + return state; + + } + + } + + + + +//ELIMINADOS +/* + +case TYPES.ID_PROYECTO: + + return{ + ...state, + IdProyectoDetail: action.payload + } + +*/ diff --git a/src/redux/Types.js b/src/redux/Types.js new file mode 100644 index 0000000..23780da --- /dev/null +++ b/src/redux/Types.js @@ -0,0 +1,36 @@ +export const TYPES ={ + GET_PROYECTOS:'GET_PROYECTOS',//ok + GET_NAME_PROYECTOS: 'GET_NAME_PROYECTOS', + PROYECTO:'PROYECTO', //ok + SELECT_PROYECTO: 'SELECT_PROYECTO', + CALL_PROYECTOS_ACTIVOS_NAME: 'CALL_PROYECTOS_ACTIVOS_NAME', //ok + CALL_PROYECTOS_DESACTIVADOS_NAME:'CALL_PROYECTOS_DESACTIVADOS_NAME', //ok + CALL_PROYECTOS_ADICIONALES_NAME: 'CALL_PROYECTOS_ADICIONALES_NAME', + CALL_PROYECTOS_GARANTIA_NAME: 'CALL_PROYECTOS_GARANTIA_NAME', + CALL_TOTAL: 'CALL_TOTAL', + ACTIVA_PROYECTO:'ACTIVA_PROYECTO', + DESACTIVA_PROYECTO:'DESACTIVA_PROYECTO', + + ASIGNADO_CHECADOR: 'ASIGNADO_CHECADOR', + + + + USUARIO_DATA:'USUARIO_DATA', + + + + USUARIOS_ACTIVOS:'USUARIOS_ACTIVOS', + USUARIOS_INACTIVOS:'USUARIOS_INACTIVOS', + USUARIOS_DESOCUPADOS: 'USUARIOS_DESOCUPADOS', + USUARIOS_OCUPADOS:'USUARIOS_OCUPADOS', + USUARIOS_DISPONIBLES_CHECADOR:'USUARIOS_DISPONIBLES_CHECADOR', + REDUCER_USER_CHECADOR:'REDUCER_USER_CHECADOR', + FETCH_ONLYUSER:'FETCH_ONLYUSER', + FETCH_TRABAJADOR:' FETCH_TRABAJADOR', + + TEST_TEST:'TEST_TEST' + + + + +} \ No newline at end of file diff --git a/src/redux/UserSlice.js b/src/redux/UserSlice.js deleted file mode 100644 index 95f9c14..0000000 --- a/src/redux/UserSlice.js +++ /dev/null @@ -1,39 +0,0 @@ -import { createSlice } from "@reduxjs/toolkit"; - -const initialState = { - currentUser: null, - loading: false, - error: false, -}; - -export const userSlice = createSlice({ - name: "user", - initialState, - reducers: { - loginStart: (state) => { - state.loading = true; - }, - loginSuccess: (state, action) => { - state.loading = false; - state.currentUser = action.payload; - }, - loginFailure: (state) => { - state.loading = false; - state.error = true; - }, - - logout: (state) => { - state.currentUser = null; - state.loading = false; - state.error = false; - }, - - }, - }); - - export const { loginStart, loginSuccess, loginFailure, logout } = - userSlice.actions; - - - export default userSlice.reducer; - \ No newline at end of file diff --git a/src/redux/store.js b/src/redux/store.js deleted file mode 100644 index 8420c5a..0000000 --- a/src/redux/store.js +++ /dev/null @@ -1,37 +0,0 @@ -import { configureStore, combineReducers } from "@reduxjs/toolkit"; -import userReducer from '../redux/UserSlice' -import asignacionReducer from '../redux/AsignacionSlice' -import { - persistStore, - persistReducer, - FLUSH, - REHYDRATE, - PAUSE, - PERSIST, - PURGE, - REGISTER, -} from "redux-persist"; -import storage from "redux-persist/lib/storage"; -import { PersistGate } from "redux-persist/integration/react"; - -const persistConfig = { - key: "root", - version: 1, - storage, -}; - -const rootReducer = combineReducers({ user: userReducer, asignacion: asignacionReducer}); - -const persistedReducer = persistReducer(persistConfig, rootReducer); - -export const store = configureStore({ - reducer: persistedReducer, - middleware: (getDefaultMiddleware) => - getDefaultMiddleware({ - serializableCheck: { - ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER], - }, - }), -}); - -export const persistor = persistStore(store) \ No newline at end of file diff --git a/src/services/indi.js b/src/services/indi.js deleted file mode 100644 index 6041498..0000000 --- a/src/services/indi.js +++ /dev/null @@ -1,114 +0,0 @@ -import React, {useSelector} from 'react' -import axios from 'axios' -//import qs from 'qs' -//FormData() crea un nuevo objeto -/*const {currentAsignacion}= useSelector((state)=> -state.asignacion) -const {currentUser} = useSelector((state)=> -state.user) - - */ - - -//FETCH POST ASIGNACION - -export async function saveAsignacion(asignacionData ){ - - try{ - - console.log(asignacionData) - - const formData = [ - { residente: asignacionData.Residente1, - proyecto: asignacionData.Proyecto_de_res_1 }, - { residente: asignacionData.Residente2, - proyecto: asignacionData.Proyecto_de_res_2,}, - { residente: asignacionData.Residente3, - proyecto: asignacionData.Proyecto_de_res_3}, - { residente: asignacionData.Residente4, - proyecto: asignacionData.Proyecto_de_res_4} - - - - ] - /* - const formData = new FormData() - -formData.append('Residente 1', asignacionData.Residente1) -formData.append('Bandeja Proyecto 1', asignacionData.Proyecto_de_res_1) -formData.append('Residente 2', asignacionData.Residente2) -formData.append('Bandeja de Proyectos 2', asignacionData.Proyecto_de_res_2 ) -formData.append('Residente 3', asignacionData.Residente3) -formData.append('Bandeja de Proyectos 3', asignacionData.Proyecto_de_res_3) -formData.append('Residente 4', asignacionData.Residente4) -formData.append('Bandeja de Proyectos 4', asignacionData.Proyecto_de_res_4) -*/ - - - console.log(formData) - - - const response= await axios({ - - url: `http://localhost:8800/planAsignacion`, - method: 'POST', - data: formData - - }) - - //TODO Agregar id de usuario que guarda asignacion, checar useSelector de redux - //https://cepointbackend.herokuapp.com - return response - }catch(e){ - console.log(e) - } - - -} - - - - - - - - - - - - - - - - - - - - -/* - async function sendGetRequest(){ - - - const up = await axios.post( - "http://localhost:8800/planAsignacion/", { - - params: { - userId:currentUser - } - } - - ) - - - - console.log(up.data); - - - } - - - - -*/ - -