Sfoglia il codice sorgente

[ADD] formik and yum start config

amenpunk 3 anni fa
parent
commit
794dde3184

+ 166 - 1
psicoadmin/package-lock.json

@@ -18,13 +18,15 @@
18 18
         "@testing-library/user-event": "^12.1.10",
19 19
         "bootstrap": "^5.1.3",
20 20
         "date-fns": "^2.27.0",
21
+        "formik": "^2.2.9",
21 22
         "js-cookie": "^3.0.1",
22 23
         "react": "^17.0.2",
23 24
         "react-bootstrap": "^2.0.2",
24 25
         "react-dom": "^17.0.2",
25 26
         "react-router-dom": "^6.0.2",
26 27
         "react-scripts": "4.0.3",
27
-        "web-vitals": "^1.0.1"
28
+        "web-vitals": "^1.0.1",
29
+        "yup": "^0.32.11"
28 30
       }
29 31
     },
30 32
     "node_modules/@babel/code-frame": {
@@ -3285,6 +3287,11 @@
3285 3287
       "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=",
3286 3288
       "license": "MIT"
3287 3289
     },
3290
+    "node_modules/@types/lodash": {
3291
+      "version": "4.14.178",
3292
+      "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.178.tgz",
3293
+      "integrity": "sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw=="
3294
+    },
3288 3295
     "node_modules/@types/minimatch": {
3289 3296
       "version": "3.0.3",
3290 3297
       "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
@@ -9850,6 +9857,42 @@
9850 9857
         "node": ">= 0.12"
9851 9858
       }
9852 9859
     },
9860
+    "node_modules/formik": {
9861
+      "version": "2.2.9",
9862
+      "resolved": "https://registry.npmjs.org/formik/-/formik-2.2.9.tgz",
9863
+      "integrity": "sha512-LQLcISMmf1r5at4/gyJigGn0gOwFbeEAlji+N9InZF6LIMXnFNkO42sCI8Jt84YZggpD4cPWObAZaxpEFtSzNA==",
9864
+      "funding": [
9865
+        {
9866
+          "type": "individual",
9867
+          "url": "https://opencollective.com/formik"
9868
+        }
9869
+      ],
9870
+      "dependencies": {
9871
+        "deepmerge": "^2.1.1",
9872
+        "hoist-non-react-statics": "^3.3.0",
9873
+        "lodash": "^4.17.21",
9874
+        "lodash-es": "^4.17.21",
9875
+        "react-fast-compare": "^2.0.1",
9876
+        "tiny-warning": "^1.0.2",
9877
+        "tslib": "^1.10.0"
9878
+      },
9879
+      "peerDependencies": {
9880
+        "react": ">=16.8.0"
9881
+      }
9882
+    },
9883
+    "node_modules/formik/node_modules/deepmerge": {
9884
+      "version": "2.2.1",
9885
+      "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz",
9886
+      "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==",
9887
+      "engines": {
9888
+        "node": ">=0.10.0"
9889
+      }
9890
+    },
9891
+    "node_modules/formik/node_modules/tslib": {
9892
+      "version": "1.14.1",
9893
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
9894
+      "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
9895
+    },
9853 9896
     "node_modules/forwarded": {
9854 9897
       "version": "0.1.2",
9855 9898
       "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
@@ -12665,6 +12708,11 @@
12665 12708
       "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
12666 12709
       "license": "MIT"
12667 12710
     },
12711
+    "node_modules/lodash-es": {
12712
+      "version": "4.17.21",
12713
+      "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
12714
+      "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
12715
+    },
12668 12716
     "node_modules/lodash._reinterpolate": {
12669 12717
       "version": "3.0.0",
12670 12718
       "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
@@ -13244,6 +13292,11 @@
13244 13292
       "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
13245 13293
       "license": "MIT"
13246 13294
     },
13295
+    "node_modules/nanoclone": {
13296
+      "version": "0.2.1",
13297
+      "resolved": "https://registry.npmjs.org/nanoclone/-/nanoclone-0.2.1.tgz",
13298
+      "integrity": "sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA=="
13299
+    },
13247 13300
     "node_modules/nanoid": {
13248 13301
       "version": "3.1.20",
13249 13302
       "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz",
@@ -15732,6 +15785,11 @@
15732 15785
       "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
15733 15786
       "license": "MIT"
15734 15787
     },
15788
+    "node_modules/property-expr": {
15789
+      "version": "2.0.4",
15790
+      "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.4.tgz",
15791
+      "integrity": "sha512-sFPkHQjVKheDNnPvotjQmm3KD3uk1fWKUN7CrpdbwmUx3CrG3QiM8QpTSimvig5vTXmTvjz7+TDvXOI9+4rkcg=="
15792
+    },
15735 15793
     "node_modules/proxy-addr": {
15736 15794
       "version": "2.0.6",
15737 15795
       "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
@@ -16157,6 +16215,11 @@
16157 16215
       "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==",
16158 16216
       "license": "MIT"
16159 16217
     },
16218
+    "node_modules/react-fast-compare": {
16219
+      "version": "2.0.4",
16220
+      "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz",
16221
+      "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw=="
16222
+    },
16160 16223
     "node_modules/react-is": {
16161 16224
       "version": "17.0.2",
16162 16225
       "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
@@ -19246,6 +19309,11 @@
19246 19309
       "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=",
19247 19310
       "license": "MIT"
19248 19311
     },
19312
+    "node_modules/tiny-warning": {
19313
+      "version": "1.0.3",
19314
+      "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
19315
+      "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
19316
+    },
19249 19317
     "node_modules/tmpl": {
19250 19318
       "version": "1.0.4",
19251 19319
       "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
@@ -19354,6 +19422,11 @@
19354 19422
         "node": ">=0.6"
19355 19423
       }
19356 19424
     },
19425
+    "node_modules/toposort": {
19426
+      "version": "2.0.2",
19427
+      "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz",
19428
+      "integrity": "sha1-riF2gXXRVZ1IvvNUILL0li8JwzA="
19429
+    },
19357 19430
     "node_modules/tough-cookie": {
19358 19431
       "version": "2.5.0",
19359 19432
       "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
@@ -21238,6 +21311,23 @@
21238 21311
       "funding": {
21239 21312
         "url": "https://github.com/sponsors/sindresorhus"
21240 21313
       }
21314
+    },
21315
+    "node_modules/yup": {
21316
+      "version": "0.32.11",
21317
+      "resolved": "https://registry.npmjs.org/yup/-/yup-0.32.11.tgz",
21318
+      "integrity": "sha512-Z2Fe1bn+eLstG8DRR6FTavGD+MeAwyfmouhHsIUgaADz8jvFKbO/fXc2trJKZg+5EBjh4gGm3iU/t3onKlXHIg==",
21319
+      "dependencies": {
21320
+        "@babel/runtime": "^7.15.4",
21321
+        "@types/lodash": "^4.14.175",
21322
+        "lodash": "^4.17.21",
21323
+        "lodash-es": "^4.17.21",
21324
+        "nanoclone": "^0.2.1",
21325
+        "property-expr": "^2.0.4",
21326
+        "toposort": "^2.0.2"
21327
+      },
21328
+      "engines": {
21329
+        "node": ">=10"
21330
+      }
21241 21331
     }
21242 21332
   },
21243 21333
   "dependencies": {
@@ -23485,6 +23575,11 @@
23485 23575
       "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
23486 23576
       "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4="
23487 23577
     },
23578
+    "@types/lodash": {
23579
+      "version": "4.14.178",
23580
+      "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.178.tgz",
23581
+      "integrity": "sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw=="
23582
+    },
23488 23583
     "@types/minimatch": {
23489 23584
       "version": "3.0.3",
23490 23585
       "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
@@ -28278,6 +28373,32 @@
28278 28373
         "mime-types": "^2.1.12"
28279 28374
       }
28280 28375
     },
28376
+    "formik": {
28377
+      "version": "2.2.9",
28378
+      "resolved": "https://registry.npmjs.org/formik/-/formik-2.2.9.tgz",
28379
+      "integrity": "sha512-LQLcISMmf1r5at4/gyJigGn0gOwFbeEAlji+N9InZF6LIMXnFNkO42sCI8Jt84YZggpD4cPWObAZaxpEFtSzNA==",
28380
+      "requires": {
28381
+        "deepmerge": "^2.1.1",
28382
+        "hoist-non-react-statics": "^3.3.0",
28383
+        "lodash": "^4.17.21",
28384
+        "lodash-es": "^4.17.21",
28385
+        "react-fast-compare": "^2.0.1",
28386
+        "tiny-warning": "^1.0.2",
28387
+        "tslib": "^1.10.0"
28388
+      },
28389
+      "dependencies": {
28390
+        "deepmerge": {
28391
+          "version": "2.2.1",
28392
+          "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz",
28393
+          "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA=="
28394
+        },
28395
+        "tslib": {
28396
+          "version": "1.14.1",
28397
+          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
28398
+          "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
28399
+        }
28400
+      }
28401
+    },
28281 28402
     "forwarded": {
28282 28403
       "version": "0.1.2",
28283 28404
       "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
@@ -30264,6 +30385,11 @@
30264 30385
       "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
30265 30386
       "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
30266 30387
     },
30388
+    "lodash-es": {
30389
+      "version": "4.17.21",
30390
+      "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
30391
+      "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
30392
+    },
30267 30393
     "lodash._reinterpolate": {
30268 30394
       "version": "3.0.0",
30269 30395
       "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
@@ -30673,6 +30799,11 @@
30673 30799
       "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz",
30674 30800
       "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE="
30675 30801
     },
30802
+    "nanoclone": {
30803
+      "version": "0.2.1",
30804
+      "resolved": "https://registry.npmjs.org/nanoclone/-/nanoclone-0.2.1.tgz",
30805
+      "integrity": "sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA=="
30806
+    },
30676 30807
     "nanoid": {
30677 30808
       "version": "3.1.20",
30678 30809
       "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz",
@@ -32462,6 +32593,11 @@
32462 32593
         }
32463 32594
       }
32464 32595
     },
32596
+    "property-expr": {
32597
+      "version": "2.0.4",
32598
+      "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.4.tgz",
32599
+      "integrity": "sha512-sFPkHQjVKheDNnPvotjQmm3KD3uk1fWKUN7CrpdbwmUx3CrG3QiM8QpTSimvig5vTXmTvjz7+TDvXOI9+4rkcg=="
32600
+    },
32465 32601
     "proxy-addr": {
32466 32602
       "version": "2.0.6",
32467 32603
       "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
@@ -32773,6 +32909,11 @@
32773 32909
       "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz",
32774 32910
       "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew=="
32775 32911
     },
32912
+    "react-fast-compare": {
32913
+      "version": "2.0.4",
32914
+      "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz",
32915
+      "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw=="
32916
+    },
32776 32917
     "react-is": {
32777 32918
       "version": "17.0.2",
32778 32919
       "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
@@ -34998,6 +35139,11 @@
34998 35139
       "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz",
34999 35140
       "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q="
35000 35141
     },
35142
+    "tiny-warning": {
35143
+      "version": "1.0.3",
35144
+      "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
35145
+      "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
35146
+    },
35001 35147
     "tmpl": {
35002 35148
       "version": "1.0.4",
35003 35149
       "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
@@ -35074,6 +35220,11 @@
35074 35220
       "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
35075 35221
       "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
35076 35222
     },
35223
+    "toposort": {
35224
+      "version": "2.0.2",
35225
+      "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz",
35226
+      "integrity": "sha1-riF2gXXRVZ1IvvNUILL0li8JwzA="
35227
+    },
35077 35228
     "tough-cookie": {
35078 35229
       "version": "2.5.0",
35079 35230
       "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
@@ -36467,6 +36618,20 @@
36467 36618
       "version": "0.1.0",
36468 36619
       "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
36469 36620
       "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="
36621
+    },
36622
+    "yup": {
36623
+      "version": "0.32.11",
36624
+      "resolved": "https://registry.npmjs.org/yup/-/yup-0.32.11.tgz",
36625
+      "integrity": "sha512-Z2Fe1bn+eLstG8DRR6FTavGD+MeAwyfmouhHsIUgaADz8jvFKbO/fXc2trJKZg+5EBjh4gGm3iU/t3onKlXHIg==",
36626
+      "requires": {
36627
+        "@babel/runtime": "^7.15.4",
36628
+        "@types/lodash": "^4.14.175",
36629
+        "lodash": "^4.17.21",
36630
+        "lodash-es": "^4.17.21",
36631
+        "nanoclone": "^0.2.1",
36632
+        "property-expr": "^2.0.4",
36633
+        "toposort": "^2.0.2"
36634
+      }
36470 36635
     }
36471 36636
   }
36472 36637
 }

+ 3 - 1
psicoadmin/package.json

@@ -13,13 +13,15 @@
13 13
     "@testing-library/user-event": "^12.1.10",
14 14
     "bootstrap": "^5.1.3",
15 15
     "date-fns": "^2.27.0",
16
+    "formik": "^2.2.9",
16 17
     "js-cookie": "^3.0.1",
17 18
     "react": "^17.0.2",
18 19
     "react-bootstrap": "^2.0.2",
19 20
     "react-dom": "^17.0.2",
20 21
     "react-router-dom": "^6.0.2",
21 22
     "react-scripts": "4.0.3",
22
-    "web-vitals": "^1.0.1"
23
+    "web-vitals": "^1.0.1",
24
+    "yup": "^0.32.11"
23 25
   },
24 26
   "scripts": {
25 27
     "start": "react-scripts start",

+ 6 - 0
psicoadmin/src/App.css

@@ -117,3 +117,9 @@
117 117
 .css-12jypm1-MuiToolbar-root {
118 118
     padding-left : 20px !important;
119 119
 }
120
+.error_feedback{
121
+    color: #2ec5d3;
122
+    font-weight :bold;
123
+    padding : 15px;
124
+    margin: 0px;
125
+}

+ 2 - 2
psicoadmin/src/Components/Actividades.js

@@ -130,7 +130,7 @@ export default function Actividades() {
130 130
                                         value={value}
131 131
                                         onChange={handleChange}
132 132
                                         renderInput={(params) => 
133
-                                        <TextField variant="standard" label="Standard warning" {...params} />}
133
+                                        <TextField fullWidth={true} variant="standard" label="Standard warning" {...params} />}
134 134
                                     />
135 135
                                 </LocalizationProvider>
136 136
                             </Col>
@@ -142,7 +142,7 @@ export default function Actividades() {
142 142
                                         value={value}
143 143
                                         onChange={handleChange}
144 144
                                         renderInput={(params) => 
145
-                                        <TextField variant="standard" label="Standard warning" {...params} />}
145
+                                        <TextField fullWidth={true} variant="standard" label="Standard warning" {...params} />}
146 146
                                     />
147 147
                                 </LocalizationProvider>
148 148
                             </Col>

+ 138 - 0
psicoadmin/src/Components/FileInput.js

@@ -0,0 +1,138 @@
1
+import React, { Component } from "react";
2
+import {  Typography, Icon, Avatar, withStyles  } from '@mui/material/'
3
+import classnames from "classnames";
4
+
5
+
6
+class CustomImageInput extends Component {
7
+    constructor(props) {
8
+        super(props);
9
+        this.fileUpload = React.createRef();
10
+        this.showFileUpload = this.showFileUpload.bind(this);
11
+        this.handleImageChange = this.handleImageChange.bind(this);
12
+    }
13
+
14
+    state = {
15
+        file: undefined,
16
+        imagePreviewUrl: undefined
17
+    };
18
+
19
+    showFileUpload() {
20
+        if (this.fileUpload) {
21
+            this.fileUpload.current.click();
22
+        }
23
+    }
24
+
25
+    handleImageChange(e) {
26
+        e.preventDefault();
27
+        let reader = new FileReader();
28
+        let file = e.target.files[0];
29
+        if (file) {
30
+            reader.onloadend = () => {
31
+                this.setState({
32
+                    file: file,
33
+                    imagePreviewUrl: reader.result
34
+                });
35
+            };
36
+            reader.readAsDataURL(file);
37
+            this.props.setFieldValue(this.props.field.name, file);
38
+        }
39
+    }
40
+
41
+    showPreloadImage() {
42
+        const { errorMessage, classes } = this.props;
43
+        const { file, imagePreviewUrl } = this.state;
44
+
45
+        let comp = null;
46
+
47
+        if (errorMessage) {
48
+            comp = <Icon style={{ fontSize: 36 }}>error_outline</Icon>;
49
+        } else if (file) {
50
+            comp = (
51
+                <img className={classes.avatarThumb} src={imagePreviewUrl} alt="..." />
52
+            );
53
+        } else {
54
+            comp = <Icon style={{ fontSize: 36 }}>folder</Icon>;
55
+        }
56
+        return comp;
57
+    }
58
+
59
+    componentDidMount() {
60
+        console.log(this.fileUpload.current);
61
+    }
62
+
63
+    render() {
64
+        const { errorMessage, title, classes } = this.props;
65
+        const { name, onBlur } = this.props.field;
66
+
67
+        const avatarStyle = classnames(
68
+            classes.bigAvatar,
69
+            this.state.file ? [classes.whiteBack] : [classes.primaryBack],
70
+            { [classes.errorBack]: errorMessage }
71
+        );
72
+
73
+        return (
74
+            <div className={classes.container}>
75
+                <input
76
+                    className={classes.hidden}
77
+                    id={name}
78
+                    name={name}
79
+                    type="file"
80
+                    onChange={this.handleImageChange}
81
+                    ref={this.fileUpload}
82
+                    onBlur={onBlur}
83
+                    //className="form-control"
84
+                />
85
+                <Typography className={classes.title} variant="h5">
86
+                    {title}
87
+                </Typography>
88
+                <Avatar className={avatarStyle} onClick={this.showFileUpload}>
89
+                    {this.showPreloadImage()}
90
+                </Avatar>
91
+
92
+                {errorMessage ? (
93
+                    <Typography variant="caption" color="error">
94
+                        {errorMessage}
95
+                    </Typography>
96
+                ) : null}
97
+            </div>
98
+        );
99
+    }
100
+}
101
+
102
+const customImageInputStyle = theme => ({
103
+    hidden: { display: "none" },
104
+
105
+    container: {
106
+        margin: "auto"
107
+    },
108
+    title: {
109
+        margin: "auto",
110
+        display: "flex",
111
+        justifyContent: "center",
112
+        //fontFamily: 'Roboto Slab',
113
+        //fontWeight:'bold',
114
+        padding: theme.spacing.unit
115
+    },
116
+    bigAvatar: {
117
+        margin: "auto",
118
+        width: 80,
119
+        height: 80,
120
+        borderColor: theme.palette.primary.main,
121
+        borderStyle: "solid",
122
+        borderSize: "1px"
123
+    },
124
+    avatarThumb: {
125
+        maxWidth: 80,
126
+        maxHeight: 80
127
+    },
128
+    primaryBack: {
129
+        background: theme.palette.primary.main
130
+    },
131
+    whiteBack: {
132
+        background: "white"
133
+    },
134
+
135
+    errorBack: { background: theme.palette.error.main }
136
+});
137
+
138
+export default withStyles(customImageInputStyle)(CustomImageInput);

+ 2 - 2
psicoadmin/src/Css/all.css

@@ -215,7 +215,7 @@ a.article:hover {
215 215
 }
216 216
 .content-section {
217 217
     background-color : #f1f1f1;
218
-    padding: 70px 15px;
218
+    padding: 70px 50px;
219 219
 }
220 220
 .nav-item a i{
221 221
     color: #212529;
@@ -1853,7 +1853,7 @@ li.cabecera_li {
1853 1853
 }
1854 1854
 .filtros_history .col-md-4 input {
1855 1855
     width: 100%;
1856
-    border: 1px solid #eceff1;
1856
+    /*border: 1px solid #eceff1*/
1857 1857
     font-size: 14px;
1858 1858
     padding: 1px 10px;
1859 1859
 }

+ 92 - 51
psicoadmin/src/Pages/Puestos.js

@@ -1,7 +1,8 @@
1 1
 import React, {  } from 'react';
2 2
 import { Row, Col, Modal, Button, Table } from 'react-bootstrap'
3
-import { Box, Typography, Button as MuiButton, ListItem, withStyles } from '@mui/material';
4
-
3
+import { Box } from '@mui/material';
4
+import { Formik, Field, Form } from 'formik';
5
+import * as Yup from 'yup';
5 6
 
6 7
 import ToggleButton from '@mui/material/ToggleButton';
7 8
 import ToggleButtonGroup from '@mui/material/ToggleButtonGroup';
@@ -13,12 +14,13 @@ import RemoveRedEyeIcon from '@mui/icons-material/RemoveRedEye';
13 14
 import EditIcon from '@mui/icons-material/Edit';
14 15
 import HighlightOffIcon from '@mui/icons-material/HighlightOff';
15 16
 
16
-///import { makeStyles, useTheme } from "@material-ui/core/styles";
17
-import { makeStyles, useTheme } from "@mui/material/styles";
18
-import TextField from "@mui/material/TextField";
19
-import ButtonBase from "@mui/material/ButtonBase";
20
-
21 17
 import NotFound from '../Images/not_found.png';
18
+
19
+const NewPlazaSchema = Yup.object().shape({
20
+    nombre : Yup.string().required('El nombre es requerido').min(5).max(20),
21
+    description : Yup.string().required('La description es requerida').min(5).max(20),
22
+    salario : Yup.number().required('El salario es requerido')
23
+})
22 24
     
23 25
 let data = [{
24 26
     nombre : 'The standard Lorem Ipsum passage, used since the 1500s',
@@ -35,7 +37,7 @@ function* idMaker() {
35 37
 
36 38
 var ID = idMaker(); // "Generator { }"
37 39
 
38
-for ( var _ of new Array(23) ){
40
+for ( var _ of new Array(46) ){
39 41
     data.push({
40 42
         ...data[0],
41 43
         id : ID.next().value,
@@ -66,7 +68,7 @@ function ListMode() {
66 68
 
67 69
                         {
68 70
                             data.length ? 
69
-                                data.map( (plaza, i) => {
71
+                                data.slice(0,23).map( (plaza, i) => {
70 72
                                     return (
71 73
                                         <tr key={plaza.id}>
72 74
                                             <td className="text-center">{ plaza.nombre }</td>
@@ -118,7 +120,7 @@ function GridMode () {
118 120
         <React.Fragment> 
119 121
             {
120 122
                 data.length ? 
121
-                data.map( plaza => {
123
+                data.slice(23).map( plaza => {
122 124
                     return(
123 125
                         <Col key={plaza.id} lg="4" md="6" sm="6" xs="12" >
124 126
                             <div className="panel">
@@ -134,7 +136,7 @@ function GridMode () {
134 136
                                             <p>{ plaza.description }</p>
135 137
                                             <p>{ plaza.salario }</p>
136 138
                                         </div>
137
-                                        <div class="btn_interactivos">
139
+                                        <div className="btn_interactivos">
138 140
                                             { buttons }
139 141
                                         </div>
140 142
                                     </Col>
@@ -166,11 +168,12 @@ function Manual ( props ) {
166 168
     // to handle the user-selected file 
167 169
     const handleChange = event => {
168 170
         const fileUploaded = event.target.files[0];
169
-        console.log( "FILE >> ", fileUploaded )
171
+        // console.log( "FILE >> ", fileUploaded )
170 172
         setFilename( fileUploaded.name )
171 173
         //props.handleFile(fileUploaded);
172 174
     };
173 175
 
176
+    const validateEmail = (value) => value === "Edgar";
174 177
 
175 178
     return (
176 179
         <Modal size="lg" aria-labelledby="contained-modal-title-vcenter" centered  show={visible} onHide={onClose}>
@@ -179,47 +182,85 @@ function Manual ( props ) {
179 182
                 <h4 className="modal-title">Agregar plaza</h4>
180 183
             </Modal.Header>
181 184
             <Modal.Body className="modal-body">
182
-                <Row>
183
-                    <Col md="4">
184
-                        <div className="img-container">
185
-                            <img alt="agregar plaza manual" src={NotFound}/>
186
-                        </div>
187
-                    </Col>
188
-                    <Col md="8">
189
-
190
-                        <input 
191
-                            value={ filename ? filename : "" } 
192
-                            type="text" 
193
-                            class="file-upload-input" 
194
-                            disabled="" 
195
-                            placeholder="Ningún archivo seleccionado"/>
196
-
197
-                        <Button className="btn_add_producto_confirm" style={{ marginLeft : 15 }} onClick={handleClick}>
198
-                            SUBIR FOTO
199
-                        </Button>
200
-                        <input
201
-                            type="file"
202
-                            ref={hiddenFileInput}
203
-                            onChange={handleChange}
204
-                            style={{display: 'none'}}
205
-                        />
206 185
 
207
-                    </Col>
208
-                </Row>
209
-                <div className="data_product">
210
-                    <Row>
211
-                        <Col md="12">
212
-                            <input type="text" name="nombre" placeholder="Nombre de la plaza"/>
213
-                            <textarea placeholder="Descripción general de la plaza"></textarea>
214
-                            <input type="number" name="salario" placeholder="Salario"/>
215
-                        </Col>
216
-                        <div className="add_producto_confirm">
217
-                            <div className="btn_add_producto_confirm">
218
-                                <span type="submit">Agregar plaza</span>
186
+                <Formik
187
+                    initialValues={{
188
+                        nombre: '',
189
+                        description: '',
190
+                        salario: '',
191
+                    }}
192
+                    validationSchema={NewPlazaSchema}
193
+                    onSubmit={async (values) => {
194
+                        console.log('VALUES >> ',values)
195
+                    }} >
196
+
197
+
198
+                    { ({  errors, touched, validateField, validateForm }) => (
199
+                        <Form>
200
+                            <Row>
201
+
202
+                                <Col md="4">
203
+                                    <div className="img-container">
204
+                                        <img alt="agregar plaza manual" src={NotFound}/>
205
+                                    </div>
206
+                                </Col>
207
+
208
+                                <Col md="8">
209
+
210
+                                    <input 
211
+                                        value={ filename ? filename : "" } 
212
+                                        type="text" 
213
+                                        className="file-upload-input" 
214
+                                        disabled="" 
215
+                                        placeholder="Ningún archivo seleccionado"/>
216
+
217
+                                    <Button className="btn_add_producto_confirm" style={{ marginLeft : 15 }} onClick={handleClick}>
218
+                                        SUBIR FOTO
219
+                                    </Button>
220
+
221
+                                    <input
222
+                                        type="file"
223
+                                        ref={hiddenFileInput}
224
+                                        onChange={handleChange}
225
+                                        style={{display: 'none'}}
226
+                                    />
227
+
228
+                                </Col>
229
+
230
+                            </Row>
231
+                            <div className="data_product">
232
+                                <Row>
233
+                                    <Col md="12">
234
+
235
+                                        {errors.nombre && touched.nombre && <div className="error_feedback">{errors.nombre}</div>}
236
+                                        <Field name="nombre" placeholder="Nombre de la plaza" validate={validateEmail}/>
237
+
238
+                                        {errors.description && touched.description && <div className="error_feedback">{errors.description}</div>}
239
+                                        <Field name="description">
240
+                                            {({ field, form, meta }) => {
241
+                                                return(
242
+                                                    <textarea id="description" name="description" defaultValue="" value={field.value} onChange={field.onChange} placeholder="Descripción general de la plaza"></textarea>
243
+                                                )
244
+                                            }}
245
+                                        </Field>
246
+
247
+                                        {errors.salario && touched.salario && <div className="error_feedback">{errors.salario}</div>}
248
+                                        <Field name="salario" type="number" name="salario" placeholder="Salario"/>
249
+
250
+
251
+                                    </Col>
252
+                                    <div className="add_producto_confirm">
253
+                                        <button className="btn_add_producto_confirm" type="submit">Agregar plaza</button>
254
+                                    </div>
255
+                                </Row>
219 256
                             </div>
220
-                        </div>
221
-                    </Row>
222
-                </div>
257
+                        </Form>
258
+                    )}
259
+
260
+
261
+
262
+
263
+                </Formik>
223 264
             </Modal.Body>
224 265
         </Modal>
225 266
     )

+ 74 - 3
psicoadmin/yarn.lock

@@ -1131,7 +1131,7 @@
1131 1131
     "core-js-pure" "^3.0.0"
1132 1132
     "regenerator-runtime" "^0.13.4"
1133 1133
 
1134
-"@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.13.16", "@babel/runtime@^7.14.0", "@babel/runtime@^7.16.0", "@babel/runtime@^7.16.3", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2":
1134
+"@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.13.16", "@babel/runtime@^7.14.0", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.0", "@babel/runtime@^7.16.3", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2":
1135 1135
   "integrity" "sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ=="
1136 1136
   "resolved" "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.3.tgz"
1137 1137
   "version" "7.16.3"
@@ -2107,6 +2107,11 @@
2107 2107
   "resolved" "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz"
2108 2108
   "version" "0.0.29"
2109 2109
 
2110
+"@types/lodash@^4.14.175":
2111
+  "integrity" "sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw=="
2112
+  "resolved" "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.178.tgz"
2113
+  "version" "4.14.178"
2114
+
2110 2115
 "@types/minimatch@*":
2111 2116
   "integrity" "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA=="
2112 2117
   "resolved" "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz"
@@ -4453,6 +4458,11 @@
4453 4458
   "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz"
4454 4459
   "version" "0.1.3"
4455 4460
 
4461
+"deepmerge@^2.1.1":
4462
+  "integrity" "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA=="
4463
+  "resolved" "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz"
4464
+  "version" "2.2.1"
4465
+
4456 4466
 "deepmerge@^4.2.2":
4457 4467
   "integrity" "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg=="
4458 4468
   "resolved" "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz"
@@ -5615,6 +5625,19 @@
5615 5625
     "combined-stream" "^1.0.6"
5616 5626
     "mime-types" "^2.1.12"
5617 5627
 
5628
+"formik@^2.2.9":
5629
+  "integrity" "sha512-LQLcISMmf1r5at4/gyJigGn0gOwFbeEAlji+N9InZF6LIMXnFNkO42sCI8Jt84YZggpD4cPWObAZaxpEFtSzNA=="
5630
+  "resolved" "https://registry.npmjs.org/formik/-/formik-2.2.9.tgz"
5631
+  "version" "2.2.9"
5632
+  dependencies:
5633
+    "deepmerge" "^2.1.1"
5634
+    "hoist-non-react-statics" "^3.3.0"
5635
+    "lodash" "^4.17.21"
5636
+    "lodash-es" "^4.17.21"
5637
+    "react-fast-compare" "^2.0.1"
5638
+    "tiny-warning" "^1.0.2"
5639
+    "tslib" "^1.10.0"
5640
+
5618 5641
 "forwarded@~0.1.2":
5619 5642
   "integrity" "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
5620 5643
   "resolved" "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz"
@@ -5982,7 +6005,7 @@
5982 6005
     "minimalistic-assert" "^1.0.0"
5983 6006
     "minimalistic-crypto-utils" "^1.0.1"
5984 6007
 
5985
-"hoist-non-react-statics@^3.3.1", "hoist-non-react-statics@^3.3.2":
6008
+"hoist-non-react-statics@^3.3.0", "hoist-non-react-statics@^3.3.1", "hoist-non-react-statics@^3.3.2":
5986 6009
   "integrity" "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw=="
5987 6010
   "resolved" "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz"
5988 6011
   "version" "3.3.2"
@@ -7529,6 +7552,11 @@
7529 7552
   dependencies:
7530 7553
     "p-locate" "^4.1.0"
7531 7554
 
7555
+"lodash-es@^4.17.21":
7556
+  "integrity" "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
7557
+  "resolved" "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz"
7558
+  "version" "4.17.21"
7559
+
7532 7560
 "lodash._reinterpolate@^3.0.0":
7533 7561
   "integrity" "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0="
7534 7562
   "resolved" "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz"
@@ -7564,7 +7592,7 @@
7564 7592
   "resolved" "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz"
7565 7593
   "version" "4.5.0"
7566 7594
 
7567
-"lodash@^4.17.11", "lodash@^4.17.14", "lodash@^4.17.15", "lodash@^4.17.19", "lodash@^4.17.20", "lodash@^4.17.5", "lodash@>=3.5 <5":
7595
+"lodash@^4.17.11", "lodash@^4.17.14", "lodash@^4.17.15", "lodash@^4.17.19", "lodash@^4.17.20", "lodash@^4.17.21", "lodash@^4.17.5", "lodash@>=3.5 <5":
7568 7596
   "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
7569 7597
   "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"
7570 7598
   "version" "4.17.21"
@@ -7953,6 +7981,11 @@
7953 7981
     "dns-packet" "^1.3.1"
7954 7982
     "thunky" "^1.0.2"
7955 7983
 
7984
+"nanoclone@^0.2.1":
7985
+  "integrity" "sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA=="
7986
+  "resolved" "https://registry.npmjs.org/nanoclone/-/nanoclone-0.2.1.tgz"
7987
+  "version" "0.2.1"
7988
+
7956 7989
 "nanoid@^3.1.20":
7957 7990
   "integrity" "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw=="
7958 7991
   "resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz"
@@ -9467,6 +9500,11 @@
9467 9500
     "object-assign" "^4.1.1"
9468 9501
     "react-is" "^16.8.1"
9469 9502
 
9503
+"property-expr@^2.0.4":
9504
+  "integrity" "sha512-sFPkHQjVKheDNnPvotjQmm3KD3uk1fWKUN7CrpdbwmUx3CrG3QiM8QpTSimvig5vTXmTvjz7+TDvXOI9+4rkcg=="
9505
+  "resolved" "https://registry.npmjs.org/property-expr/-/property-expr-2.0.4.tgz"
9506
+  "version" "2.0.4"
9507
+
9470 9508
 "proxy-addr@~2.0.5":
9471 9509
   "integrity" "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw=="
9472 9510
   "resolved" "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz"
@@ -9701,6 +9739,11 @@
9701 9739
   "resolved" "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz"
9702 9740
   "version" "6.0.9"
9703 9741
 
9742
+"react-fast-compare@^2.0.1":
9743
+  "integrity" "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw=="
9744
+  "resolved" "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz"
9745
+  "version" "2.0.4"
9746
+
9704 9747
 "react-is@^16.3.2":
9705 9748
   "integrity" "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
9706 9749
   "resolved" "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz"
@@ -11321,6 +11364,11 @@
11321 11364
   "resolved" "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz"
11322 11365
   "version" "0.3.0"
11323 11366
 
11367
+"tiny-warning@^1.0.2":
11368
+  "integrity" "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
11369
+  "resolved" "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz"
11370
+  "version" "1.0.3"
11371
+
11324 11372
 "tmpl@1.0.x":
11325 11373
   "integrity" "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE="
11326 11374
   "resolved" "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz"
@@ -11373,6 +11421,11 @@
11373 11421
   "resolved" "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz"
11374 11422
   "version" "1.0.0"
11375 11423
 
11424
+"toposort@^2.0.2":
11425
+  "integrity" "sha1-riF2gXXRVZ1IvvNUILL0li8JwzA="
11426
+  "resolved" "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz"
11427
+  "version" "2.0.2"
11428
+
11376 11429
 "tough-cookie@^2.3.3", "tough-cookie@~2.5.0":
11377 11430
   "integrity" "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g=="
11378 11431
   "resolved" "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz"
@@ -11417,6 +11470,11 @@
11417 11470
     "minimist" "^1.2.0"
11418 11471
     "strip-bom" "^3.0.0"
11419 11472
 
11473
+"tslib@^1.10.0":
11474
+  "integrity" "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
11475
+  "resolved" "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz"
11476
+  "version" "1.14.1"
11477
+
11420 11478
 "tslib@^1.8.1":
11421 11479
   "integrity" "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
11422 11480
   "resolved" "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz"
@@ -12328,3 +12386,16 @@
12328 12386
   "integrity" "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="
12329 12387
   "resolved" "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz"
12330 12388
   "version" "0.1.0"
12389
+
12390
+"yup@^0.32.11":
12391
+  "integrity" "sha512-Z2Fe1bn+eLstG8DRR6FTavGD+MeAwyfmouhHsIUgaADz8jvFKbO/fXc2trJKZg+5EBjh4gGm3iU/t3onKlXHIg=="
12392
+  "resolved" "https://registry.npmjs.org/yup/-/yup-0.32.11.tgz"
12393
+  "version" "0.32.11"
12394
+  dependencies:
12395
+    "@babel/runtime" "^7.15.4"
12396
+    "@types/lodash" "^4.14.175"
12397
+    "lodash" "^4.17.21"
12398
+    "lodash-es" "^4.17.21"
12399
+    "nanoclone" "^0.2.1"
12400
+    "property-expr" "^2.0.4"
12401
+    "toposort" "^2.0.2"