From 86fa54d64a860153e3c9d02ab415640f75452fe9 Mon Sep 17 00:00:00 2001 From: Daniel Valdivia <18384552+dvaldivia@users.noreply.github.com> Date: Thu, 24 Feb 2022 13:42:11 -0800 Subject: [PATCH] Release v0.14.8 (#1623) Signed-off-by: Daniel Valdivia <18384552+dvaldivia@users.noreply.github.com> --- .../base/console-deployment.yaml | 2 +- .../standalone/console-deployment.yaml | 2 +- models/principal.go | 2 +- portal-ui/build/asset-manifest.json | 516 +++++++++--------- portal-ui/build/index.html | 2 +- ...4f59.chunk.css => 2024.8e16189d.chunk.css} | 2 +- ...nk.css.map => 2024.8e16189d.chunk.css.map} | 2 +- ...4f59.chunk.css => 3816.8e16189d.chunk.css} | 2 +- ...nk.css.map => 3816.8e16189d.chunk.css.map} | 2 +- ...4f59.chunk.css => 4084.8e16189d.chunk.css} | 2 +- ...nk.css.map => 4084.8e16189d.chunk.css.map} | 2 +- ...4f59.chunk.css => 5822.8e16189d.chunk.css} | 2 +- ...nk.css.map => 5822.8e16189d.chunk.css.map} | 2 +- .../build/static/css/8724.16d04f59.chunk.css | 2 - .../static/css/8724.16d04f59.chunk.css.map | 1 - .../build/static/css/8724.8e16189d.chunk.css | 2 + .../static/css/8724.8e16189d.chunk.css.map | 1 + .../build/static/css/9645.16d04f59.chunk.css | 2 - .../static/css/9645.16d04f59.chunk.css.map | 1 - .../build/static/css/9645.8e16189d.chunk.css | 2 + .../static/css/9645.8e16189d.chunk.css.map | 1 + .../build/static/css/9807.16d04f59.chunk.css | 2 - .../static/css/9807.16d04f59.chunk.css.map | 1 - .../build/static/css/9807.8e16189d.chunk.css | 2 + .../static/css/9807.8e16189d.chunk.css.map | 1 + .../build/static/js/1056.369ba3ab.chunk.js | 2 + .../static/js/1056.369ba3ab.chunk.js.map | 1 + .../build/static/js/1056.40bdeca6.chunk.js | 2 - .../static/js/1056.40bdeca6.chunk.js.map | 1 - .../build/static/js/1069.57853a28.chunk.js | 2 - .../static/js/1069.57853a28.chunk.js.map | 1 - .../build/static/js/1069.771a8a37.chunk.js | 2 + .../static/js/1069.771a8a37.chunk.js.map | 1 + ...370d17.chunk.js => 1140.35a12cb4.chunk.js} | 4 +- .../static/js/1140.35a12cb4.chunk.js.map | 1 + .../static/js/1140.5e370d17.chunk.js.map | 1 - ...fe4b14.chunk.js => 1237.dbb13c2b.chunk.js} | 4 +- ...hunk.js.map => 1237.dbb13c2b.chunk.js.map} | 2 +- .../build/static/js/1409.a1f80372.chunk.js | 2 - .../static/js/1409.a1f80372.chunk.js.map | 1 - .../build/static/js/1420.517f0e88.chunk.js | 2 - .../static/js/1420.517f0e88.chunk.js.map | 1 - .../build/static/js/1666.29b376af.chunk.js | 2 + .../static/js/1666.29b376af.chunk.js.map | 1 + .../build/static/js/1666.d4e2b942.chunk.js | 2 - .../static/js/1666.d4e2b942.chunk.js.map | 1 - .../build/static/js/1711.669b8be7.chunk.js | 2 - .../static/js/1711.669b8be7.chunk.js.map | 1 - .../build/static/js/1711.755e1931.chunk.js | 2 + .../static/js/1711.755e1931.chunk.js.map | 1 + .../build/static/js/1719.06e59cd5.chunk.js | 2 - .../static/js/1719.06e59cd5.chunk.js.map | 1 - .../build/static/js/1719.c433d41f.chunk.js | 2 + .../static/js/1719.c433d41f.chunk.js.map | 1 + .../build/static/js/189.108e9feb.chunk.js | 2 + .../build/static/js/189.108e9feb.chunk.js.map | 1 + ...62cf1b.chunk.js => 1971.899558fa.chunk.js} | 4 +- ...hunk.js.map => 1971.899558fa.chunk.js.map} | 2 +- .../build/static/js/1973.652e15ff.chunk.js | 2 - .../build/static/js/1973.e9142631.chunk.js | 2 + ...hunk.js.map => 1973.e9142631.chunk.js.map} | 2 +- .../build/static/js/2024.6baed5c5.chunk.js | 2 + ...hunk.js.map => 2024.6baed5c5.chunk.js.map} | 2 +- .../build/static/js/2024.6d844dd2.chunk.js | 2 - ...30bed4.chunk.js => 2178.70c131e4.chunk.js} | 4 +- ...hunk.js.map => 2178.70c131e4.chunk.js.map} | 2 +- .../build/static/js/2182.2e7a9981.chunk.js | 2 - .../static/js/2182.2e7a9981.chunk.js.map | 1 - .../build/static/js/2182.e3b6cc76.chunk.js | 2 + .../static/js/2182.e3b6cc76.chunk.js.map | 1 + .../build/static/js/2202.516dc033.chunk.js | 2 - .../static/js/2202.516dc033.chunk.js.map | 1 - .../build/static/js/2401.0638b608.chunk.js | 2 + ...hunk.js.map => 2401.0638b608.chunk.js.map} | 2 +- .../build/static/js/2401.74634660.chunk.js | 2 - .../build/static/js/2417.105afd14.chunk.js | 2 + .../static/js/2417.105afd14.chunk.js.map | 1 + .../build/static/js/2464.0db9c672.chunk.js | 2 - .../static/js/2464.0db9c672.chunk.js.map | 1 - .../build/static/js/2464.f44ab309.chunk.js | 2 + .../static/js/2464.f44ab309.chunk.js.map | 1 + .../build/static/js/2491.70293bae.chunk.js | 2 + .../static/js/2491.70293bae.chunk.js.map | 1 + .../build/static/js/2491.8a968cd0.chunk.js | 2 - .../static/js/2491.8a968cd0.chunk.js.map | 1 - .../build/static/js/2594.77f64a1f.chunk.js | 2 - .../static/js/2594.77f64a1f.chunk.js.map | 1 - ...1fe660.chunk.js => 2699.6f1c9c05.chunk.js} | 4 +- ...hunk.js.map => 2699.6f1c9c05.chunk.js.map} | 2 +- .../build/static/js/2805.621131c8.chunk.js | 2 + .../static/js/2805.621131c8.chunk.js.map | 1 + .../build/static/js/2805.fa3b80ee.chunk.js | 2 - .../static/js/2805.fa3b80ee.chunk.js.map | 1 - .../build/static/js/2818.d6147732.chunk.js | 2 + .../static/js/2818.d6147732.chunk.js.map | 1 + .../build/static/js/2841.3d33d6cd.chunk.js | 2 - .../static/js/2841.3d33d6cd.chunk.js.map | 1 - .../build/static/js/2841.a58d2a5d.chunk.js | 2 + .../static/js/2841.a58d2a5d.chunk.js.map | 1 + .../build/static/js/2873.ae77af6d.chunk.js | 2 - .../static/js/2873.ae77af6d.chunk.js.map | 1 - .../build/static/js/2886.64395b76.chunk.js | 2 + .../static/js/2886.64395b76.chunk.js.map | 1 + .../build/static/js/2886.e13fac7c.chunk.js | 2 - .../static/js/2886.e13fac7c.chunk.js.map | 1 - .../build/static/js/2892.612b963a.chunk.js | 2 - .../static/js/2892.612b963a.chunk.js.map | 1 - .../build/static/js/2892.dedb4d14.chunk.js | 2 + .../static/js/2892.dedb4d14.chunk.js.map | 1 + .../build/static/js/2966.9c46726c.chunk.js | 2 + .../static/js/2966.9c46726c.chunk.js.map | 1 + .../build/static/js/2966.fed828cf.chunk.js | 2 - .../static/js/2966.fed828cf.chunk.js.map | 1 - .../build/static/js/3201.781acfe1.chunk.js | 2 - .../static/js/3201.781acfe1.chunk.js.map | 1 - .../build/static/js/3276.cbbfa439.chunk.js | 2 + .../static/js/3276.cbbfa439.chunk.js.map | 1 + .../build/static/js/3300.9b8f6257.chunk.js | 2 + .../static/js/3300.9b8f6257.chunk.js.map | 1 + .../build/static/js/3320.3fb492c4.chunk.js | 2 + .../static/js/3320.3fb492c4.chunk.js.map | 1 + .../build/static/js/3320.73d7b61f.chunk.js | 2 - .../static/js/3320.73d7b61f.chunk.js.map | 1 - .../build/static/js/3421.1c5efe0e.chunk.js | 2 + .../static/js/3421.1c5efe0e.chunk.js.map | 1 + .../build/static/js/3421.a52d7b4f.chunk.js | 2 - .../static/js/3421.a52d7b4f.chunk.js.map | 1 - .../build/static/js/3453.75ca1d21.chunk.js | 2 + .../static/js/3453.75ca1d21.chunk.js.map | 1 + .../build/static/js/3453.cadd9dca.chunk.js | 2 - .../static/js/3453.cadd9dca.chunk.js.map | 1 - .../build/static/js/3589.12c4bc4a.chunk.js | 2 - .../static/js/3589.12c4bc4a.chunk.js.map | 1 - .../build/static/js/3617.bf15040b.chunk.js | 2 - .../static/js/3617.bf15040b.chunk.js.map | 1 - .../build/static/js/3617.ef0bffae.chunk.js | 2 + .../static/js/3617.ef0bffae.chunk.js.map | 1 + .../build/static/js/3698.1144caf6.chunk.js | 2 - .../static/js/3698.1144caf6.chunk.js.map | 1 - .../build/static/js/3698.928db215.chunk.js | 2 + .../static/js/3698.928db215.chunk.js.map | 1 + .../build/static/js/3806.021fe081.chunk.js | 2 - .../static/js/3806.021fe081.chunk.js.map | 1 - .../build/static/js/3806.9b491d19.chunk.js | 2 + .../static/js/3806.9b491d19.chunk.js.map | 1 + ...c2c7d2.chunk.js => 3816.b73504ec.chunk.js} | 4 +- ...hunk.js.map => 3816.b73504ec.chunk.js.map} | 2 +- .../build/static/js/3830.bdda307f.chunk.js | 2 + .../static/js/3830.bdda307f.chunk.js.map | 1 + .../build/static/js/3967.6db0cf38.chunk.js | 2 - .../static/js/3967.6db0cf38.chunk.js.map | 1 - .../build/static/js/3967.e89c4131.chunk.js | 2 + .../static/js/3967.e89c4131.chunk.js.map | 1 + .../build/static/js/4084.3d9d8cab.chunk.js | 2 + .../static/js/4084.3d9d8cab.chunk.js.map | 1 + .../build/static/js/4084.44ec9dce.chunk.js | 2 - .../static/js/4084.44ec9dce.chunk.js.map | 1 - ...36aad4.chunk.js => 4121.dc9cd38b.chunk.js} | 4 +- ...hunk.js.map => 4121.dc9cd38b.chunk.js.map} | 2 +- .../build/static/js/4177.fd895511.chunk.js | 2 + .../static/js/4177.fd895511.chunk.js.map | 1 + .../build/static/js/4177.ff48eff7.chunk.js | 2 - .../static/js/4177.ff48eff7.chunk.js.map | 1 - .../build/static/js/4220.4e3b3b58.chunk.js | 2 - .../static/js/4220.4e3b3b58.chunk.js.map | 1 - .../build/static/js/4220.9aea78f1.chunk.js | 2 + .../static/js/4220.9aea78f1.chunk.js.map | 1 + .../build/static/js/4247.cc0f88b2.chunk.js | 2 - .../static/js/4247.cc0f88b2.chunk.js.map | 1 - .../build/static/js/428.4625197b.chunk.js | 2 - .../build/static/js/428.4625197b.chunk.js.map | 1 - .../build/static/js/428.f1f3ca19.chunk.js | 2 + .../build/static/js/428.f1f3ca19.chunk.js.map | 1 + .../build/static/js/4322.ddc888e0.chunk.js | 2 + .../static/js/4322.ddc888e0.chunk.js.map | 1 + .../build/static/js/4487.8d3f76aa.chunk.js | 2 - .../static/js/4487.8d3f76aa.chunk.js.map | 1 - .../build/static/js/4487.c59869da.chunk.js | 2 + .../static/js/4487.c59869da.chunk.js.map | 1 + .../build/static/js/4515.56df16f6.chunk.js | 2 - .../static/js/4515.56df16f6.chunk.js.map | 1 - .../build/static/js/4515.a137eba4.chunk.js | 2 + .../static/js/4515.a137eba4.chunk.js.map | 1 + .../build/static/js/4533.0533f737.chunk.js | 2 + ...hunk.js.map => 4533.0533f737.chunk.js.map} | 2 +- .../build/static/js/4533.d9c6db0b.chunk.js | 2 - .../build/static/js/4577.d0f37cfd.chunk.js | 2 - .../static/js/4577.d0f37cfd.chunk.js.map | 1 - .../build/static/js/4577.d5eda9f7.chunk.js | 2 + .../static/js/4577.d5eda9f7.chunk.js.map | 1 + .../build/static/js/4745.50faf863.chunk.js | 2 - .../static/js/4745.50faf863.chunk.js.map | 1 - .../build/static/js/4745.d3b72d46.chunk.js | 2 + .../static/js/4745.d3b72d46.chunk.js.map | 1 + .../build/static/js/4818.1f7ff2b7.chunk.js | 2 + .../static/js/4818.1f7ff2b7.chunk.js.map | 1 + .../build/static/js/4818.7391a4e4.chunk.js | 2 - .../static/js/4818.7391a4e4.chunk.js.map | 1 - .../build/static/js/4839.cd845b47.chunk.js | 2 + .../static/js/4839.cd845b47.chunk.js.map | 1 + .../build/static/js/4839.ed81765f.chunk.js | 2 - .../static/js/4839.ed81765f.chunk.js.map | 1 - .../build/static/js/4869.58db9f45.chunk.js | 2 + .../static/js/4869.58db9f45.chunk.js.map | 1 + .../build/static/js/4869.a9280d8a.chunk.js | 2 - .../static/js/4869.a9280d8a.chunk.js.map | 1 - .../build/static/js/4960.4944962a.chunk.js | 2 + .../static/js/4960.4944962a.chunk.js.map | 1 + .../build/static/js/5125.58c2feff.chunk.js | 2 + ...hunk.js.map => 5125.58c2feff.chunk.js.map} | 2 +- .../build/static/js/5125.df89f86d.chunk.js | 2 - .../build/static/js/5144.392cff58.chunk.js | 2 + ...hunk.js.map => 5144.392cff58.chunk.js.map} | 2 +- .../build/static/js/5144.4d802107.chunk.js | 2 - ...cf178e.chunk.js => 5284.e06719cf.chunk.js} | 4 +- ...hunk.js.map => 5284.e06719cf.chunk.js.map} | 2 +- .../build/static/js/5339.77ff74c9.chunk.js | 2 + .../static/js/5339.77ff74c9.chunk.js.map | 1 + .../build/static/js/5482.565ebb65.chunk.js | 2 + ...hunk.js.map => 5482.565ebb65.chunk.js.map} | 2 +- .../build/static/js/5482.dcaee6b1.chunk.js | 2 - .../build/static/js/5591.992e2bda.chunk.js | 2 + .../static/js/5591.992e2bda.chunk.js.map | 1 + .../build/static/js/5673.7958d7f7.chunk.js | 2 - .../static/js/5673.7958d7f7.chunk.js.map | 1 - .../build/static/js/5781.206192b7.chunk.js | 2 + .../static/js/5781.206192b7.chunk.js.map | 1 + .../build/static/js/5795.d1ea50ec.chunk.js | 2 + .../static/js/5795.d1ea50ec.chunk.js.map | 1 + ...b11c6c.chunk.js => 5808.a4148012.chunk.js} | 4 +- ...hunk.js.map => 5808.a4148012.chunk.js.map} | 2 +- .../build/static/js/5822.55acdd2b.chunk.js | 2 + .../static/js/5822.55acdd2b.chunk.js.map | 1 + .../build/static/js/5947.59012b92.chunk.js | 2 - .../static/js/5947.59012b92.chunk.js.map | 1 - .../build/static/js/5947.dda226b6.chunk.js | 2 + .../static/js/5947.dda226b6.chunk.js.map | 1 + ...455f54.chunk.js => 5961.975bb084.chunk.js} | 4 +- ...hunk.js.map => 5961.975bb084.chunk.js.map} | 2 +- ...11f7c3a.chunk.js => 609.01a74891.chunk.js} | 4 +- ...chunk.js.map => 609.01a74891.chunk.js.map} | 2 +- ...c6589e.chunk.js => 6145.0f094527.chunk.js} | 4 +- ...hunk.js.map => 6145.0f094527.chunk.js.map} | 2 +- .../build/static/js/6147.64405f65.chunk.js | 2 - .../build/static/js/6147.c07c0ae2.chunk.js | 2 + ...hunk.js.map => 6147.c07c0ae2.chunk.js.map} | 2 +- ...7bf70b.chunk.js => 6167.fed9e5cf.chunk.js} | 4 +- ...hunk.js.map => 6167.fed9e5cf.chunk.js.map} | 2 +- .../build/static/js/6173.7ae4f8dd.chunk.js | 2 - .../build/static/js/6173.afdc41b4.chunk.js | 2 + ...hunk.js.map => 6173.afdc41b4.chunk.js.map} | 2 +- .../build/static/js/635.2854d4f5.chunk.js | 2 + .../build/static/js/635.2854d4f5.chunk.js.map | 1 + .../build/static/js/6430.7d5ec903.chunk.js | 2 + .../static/js/6430.7d5ec903.chunk.js.map | 1 + .../build/static/js/6436.7b0189de.chunk.js | 2 + .../static/js/6436.7b0189de.chunk.js.map | 1 + .../build/static/js/6436.94fc01ae.chunk.js | 2 - .../static/js/6436.94fc01ae.chunk.js.map | 1 - .../build/static/js/6597.fc1eafc4.chunk.js | 2 + .../static/js/6597.fc1eafc4.chunk.js.map | 1 + .../build/static/js/6645.c41c6009.chunk.js | 2 + .../static/js/6645.c41c6009.chunk.js.map | 1 + .../build/static/js/6645.eeff9b42.chunk.js | 2 - .../static/js/6645.eeff9b42.chunk.js.map | 1 - .../build/static/js/6866.170616fc.chunk.js | 2 - .../static/js/6866.170616fc.chunk.js.map | 1 - .../build/static/js/6866.d7d9be68.chunk.js | 2 + .../static/js/6866.d7d9be68.chunk.js.map | 1 + .../build/static/js/6873.1b3165f5.chunk.js | 2 + .../static/js/6873.1b3165f5.chunk.js.map | 1 + .../build/static/js/6873.b692329a.chunk.js | 2 - .../static/js/6873.b692329a.chunk.js.map | 1 - ...078c5c.chunk.js => 7007.aaee4953.chunk.js} | 4 +- ...hunk.js.map => 7007.aaee4953.chunk.js.map} | 2 +- .../build/static/js/7042.b193939a.chunk.js | 2 - .../static/js/7042.b193939a.chunk.js.map | 1 - .../build/static/js/7187.911fa39a.chunk.js | 2 - .../build/static/js/7187.968efbad.chunk.js | 2 + ...hunk.js.map => 7187.968efbad.chunk.js.map} | 2 +- .../build/static/js/7261.a4f25607.chunk.js | 2 - .../static/js/7261.a4f25607.chunk.js.map | 1 - .../build/static/js/7261.ee9cc151.chunk.js | 2 + .../static/js/7261.ee9cc151.chunk.js.map | 1 + .../build/static/js/7274.04d18d5b.chunk.js | 2 - .../static/js/7274.04d18d5b.chunk.js.map | 1 - .../build/static/js/7274.a51a45fc.chunk.js | 2 + .../static/js/7274.a51a45fc.chunk.js.map | 1 + .../build/static/js/7314.1f372dfa.chunk.js | 2 - .../static/js/7314.1f372dfa.chunk.js.map | 1 - .../build/static/js/7314.da174e5e.chunk.js | 2 + .../static/js/7314.da174e5e.chunk.js.map | 1 + ...0bf7ca.chunk.js => 7346.efd507dc.chunk.js} | 4 +- ...hunk.js.map => 7346.efd507dc.chunk.js.map} | 2 +- .../build/static/js/7348.7a72b31f.chunk.js | 2 + ...hunk.js.map => 7348.7a72b31f.chunk.js.map} | 2 +- .../build/static/js/7348.b037b952.chunk.js | 2 - .../build/static/js/7436.c5785c09.chunk.js | 2 + .../static/js/7436.c5785c09.chunk.js.map | 1 + .../build/static/js/7436.ffc144e9.chunk.js | 2 - .../static/js/7436.ffc144e9.chunk.js.map | 1 - ...88e214.chunk.js => 7456.743391a4.chunk.js} | 4 +- ...hunk.js.map => 7456.743391a4.chunk.js.map} | 2 +- ...73ad94.chunk.js => 7498.c395ccf1.chunk.js} | 4 +- ...hunk.js.map => 7498.c395ccf1.chunk.js.map} | 2 +- .../build/static/js/7551.0bf2079d.chunk.js | 2 + .../static/js/7551.0bf2079d.chunk.js.map | 1 + .../build/static/js/7551.8d7574b9.chunk.js | 2 - .../static/js/7551.8d7574b9.chunk.js.map | 1 - .../build/static/js/7664.62484a7b.chunk.js | 2 - .../static/js/7664.62484a7b.chunk.js.map | 1 - ...9ba85e.chunk.js => 7664.bb12744a.chunk.js} | 4 +- ...hunk.js.map => 7664.bb12744a.chunk.js.map} | 2 +- .../build/static/js/7777.2be735aa.chunk.js | 2 - .../static/js/7777.2be735aa.chunk.js.map | 1 - .../build/static/js/7842.3103d8de.chunk.js | 2 + .../static/js/7842.3103d8de.chunk.js.map | 1 + .../build/static/js/7842.ec2ac847.chunk.js | 2 - .../static/js/7842.ec2ac847.chunk.js.map | 1 - ...96a6b4.chunk.js => 7926.2532900d.chunk.js} | 4 +- ...hunk.js.map => 7926.2532900d.chunk.js.map} | 2 +- .../build/static/js/7939.46ff2d0f.chunk.js | 3 + ...txt => 7939.46ff2d0f.chunk.js.LICENSE.txt} | 0 .../static/js/7939.46ff2d0f.chunk.js.map | 1 + .../build/static/js/7950.4044ce3a.chunk.js | 2 - .../static/js/7950.4044ce3a.chunk.js.map | 1 - .../build/static/js/7950.4cb62868.chunk.js | 2 + .../static/js/7950.4cb62868.chunk.js.map | 1 + .../build/static/js/8016.0758210e.chunk.js | 2 + ...hunk.js.map => 8016.0758210e.chunk.js.map} | 2 +- .../build/static/js/8016.b0ab3b67.chunk.js | 2 - .../build/static/js/8174.b2493b0b.chunk.js | 2 + .../static/js/8174.b2493b0b.chunk.js.map | 1 + .../build/static/js/8190.02056f3f.chunk.js | 2 + .../static/js/8190.02056f3f.chunk.js.map | 1 + .../build/static/js/825.1102a1fc.chunk.js | 2 - .../build/static/js/825.1102a1fc.chunk.js.map | 1 - .../build/static/js/825.3a314578.chunk.js | 2 + .../build/static/js/825.3a314578.chunk.js.map | 1 + .../build/static/js/8259.162d3a40.chunk.js | 2 + .../static/js/8259.162d3a40.chunk.js.map | 1 + .../build/static/js/8259.d84a0972.chunk.js | 2 - .../static/js/8259.d84a0972.chunk.js.map | 1 - .../build/static/js/8343.246b38fd.chunk.js | 2 - .../static/js/8343.246b38fd.chunk.js.map | 1 - .../build/static/js/8343.c2929511.chunk.js | 2 + .../static/js/8343.c2929511.chunk.js.map | 1 + .../build/static/js/8394.aab97516.chunk.js | 2 + .../static/js/8394.aab97516.chunk.js.map | 1 + .../build/static/js/8394.c3b5a87f.chunk.js | 2 - .../static/js/8394.c3b5a87f.chunk.js.map | 1 - .../build/static/js/8420.cf009fd2.chunk.js | 3 - .../static/js/8420.cf009fd2.chunk.js.map | 1 - .../build/static/js/8420.dc98b56b.chunk.js | 3 + ...txt => 8420.dc98b56b.chunk.js.LICENSE.txt} | 0 .../static/js/8420.dc98b56b.chunk.js.map | 1 + .../build/static/js/8503.e5a8b0ef.chunk.js | 2 - .../static/js/8503.e5a8b0ef.chunk.js.map | 1 - .../build/static/js/8562.158d427c.chunk.js | 2 - .../static/js/8562.158d427c.chunk.js.map | 1 - ...2da2d5.chunk.js => 8564.b0794921.chunk.js} | 4 +- ...hunk.js.map => 8564.b0794921.chunk.js.map} | 2 +- .../build/static/js/8661.d0eec194.chunk.js | 2 + .../static/js/8661.d0eec194.chunk.js.map | 1 + .../build/static/js/8671.2728f1f2.chunk.js | 3 - .../static/js/8671.2728f1f2.chunk.js.map | 1 - .../build/static/js/8724.0c41b255.chunk.js | 2 + ...hunk.js.map => 8724.0c41b255.chunk.js.map} | 2 +- .../build/static/js/8724.f7dbb7e5.chunk.js | 2 - .../build/static/js/8853.f3495da5.chunk.js | 2 - .../static/js/8853.f3495da5.chunk.js.map | 1 - .../build/static/js/8961.1587a077.chunk.js | 2 - .../static/js/8961.1587a077.chunk.js.map | 1 - .../build/static/js/8961.2e01f3c6.chunk.js | 2 + .../static/js/8961.2e01f3c6.chunk.js.map | 1 + .../build/static/js/8967.9832e222.chunk.js | 2 - .../static/js/8967.9832e222.chunk.js.map | 1 - ....e9a15c48.chunk.js => 9.e2862ce4.chunk.js} | 4 +- ...8.chunk.js.map => 9.e2862ce4.chunk.js.map} | 2 +- .../build/static/js/9080.9f8440be.chunk.js | 2 - .../static/js/9080.9f8440be.chunk.js.map | 1 - .../build/static/js/9080.f007894a.chunk.js | 2 + .../static/js/9080.f007894a.chunk.js.map | 1 + .../build/static/js/9125.a86e3119.chunk.js | 2 + .../static/js/9125.a86e3119.chunk.js.map | 1 + ...0c0a00.chunk.js => 9193.47341a7f.chunk.js} | 4 +- ...hunk.js.map => 9193.47341a7f.chunk.js.map} | 2 +- .../build/static/js/9275.69a60a7c.chunk.js | 2 + .../static/js/9275.69a60a7c.chunk.js.map | 1 + .../build/static/js/9275.78534658.chunk.js | 2 - .../static/js/9275.78534658.chunk.js.map | 1 - .../build/static/js/9330.33984e73.chunk.js | 2 + .../static/js/9330.33984e73.chunk.js.map | 1 + .../build/static/js/9330.c4a20f8b.chunk.js | 2 - .../static/js/9330.c4a20f8b.chunk.js.map | 1 - ...205cad.chunk.js => 9421.5cc40d43.chunk.js} | 4 +- ...hunk.js.map => 9421.5cc40d43.chunk.js.map} | 2 +- .../build/static/js/953.46121656.chunk.js | 2 + .../build/static/js/953.46121656.chunk.js.map | 1 + .../build/static/js/953.8e47f0fa.chunk.js | 2 - .../build/static/js/953.8e47f0fa.chunk.js.map | 1 - .../build/static/js/9560.1c7c393b.chunk.js | 2 + .../static/js/9560.1c7c393b.chunk.js.map | 1 + .../build/static/js/9560.9c2106d1.chunk.js | 2 - .../static/js/9560.9c2106d1.chunk.js.map | 1 - .../build/static/js/9586.c44d8f2b.chunk.js | 2 - .../static/js/9586.c44d8f2b.chunk.js.map | 1 - .../build/static/js/9586.f3d3466d.chunk.js | 2 + .../static/js/9586.f3d3466d.chunk.js.map | 1 + .../build/static/js/9645.52a31d53.chunk.js | 2 + .../static/js/9645.52a31d53.chunk.js.map | 1 + .../build/static/js/9645.7e223ba8.chunk.js | 2 - .../static/js/9645.7e223ba8.chunk.js.map | 1 - .../build/static/js/9661.68a3c872.chunk.js | 2 + .../static/js/9661.68a3c872.chunk.js.map | 1 + ...81d633.chunk.js => 9679.b9a553b7.chunk.js} | 4 +- ...hunk.js.map => 9679.b9a553b7.chunk.js.map} | 2 +- .../build/static/js/9779.23164a07.chunk.js | 2 + .../static/js/9779.23164a07.chunk.js.map | 1 + .../build/static/js/9779.dba4659a.chunk.js | 2 - .../static/js/9779.dba4659a.chunk.js.map | 1 - .../build/static/js/9807.6f337230.chunk.js | 2 - .../static/js/9807.6f337230.chunk.js.map | 1 - .../build/static/js/9807.b3b1c965.chunk.js | 2 + .../static/js/9807.b3b1c965.chunk.js.map | 1 + .../build/static/js/9923.25fa1a75.chunk.js | 2 - .../static/js/9923.25fa1a75.chunk.js.map | 1 - .../build/static/js/9923.67fe770d.chunk.js | 2 + .../static/js/9923.67fe770d.chunk.js.map | 1 + .../build/static/js/9924.0c2cdee6.chunk.js | 2 - .../static/js/9924.0c2cdee6.chunk.js.map | 1 - .../build/static/js/9924.ba0c0a4a.chunk.js | 2 + .../static/js/9924.ba0c0a4a.chunk.js.map | 1 + portal-ui/build/static/js/main.26dfcd6f.js | 3 + ...CENSE.txt => main.26dfcd6f.js.LICENSE.txt} | 0 .../build/static/js/main.26dfcd6f.js.map | 1 + portal-ui/build/static/js/main.6530999d.js | 3 - .../build/static/js/main.6530999d.js.map | 1 - restapi/embedded_spec.go | 2 - 439 files changed, 647 insertions(+), 624 deletions(-) rename portal-ui/build/static/css/{2024.16d04f59.chunk.css => 2024.8e16189d.chunk.css} (96%) rename portal-ui/build/static/css/{4084.16d04f59.chunk.css.map => 2024.8e16189d.chunk.css.map} (97%) rename portal-ui/build/static/css/{4084.16d04f59.chunk.css => 3816.8e16189d.chunk.css} (96%) rename portal-ui/build/static/css/{2024.16d04f59.chunk.css.map => 3816.8e16189d.chunk.css.map} (97%) rename portal-ui/build/static/css/{3816.16d04f59.chunk.css => 4084.8e16189d.chunk.css} (96%) rename portal-ui/build/static/css/{5673.16d04f59.chunk.css.map => 4084.8e16189d.chunk.css.map} (97%) rename portal-ui/build/static/css/{5673.16d04f59.chunk.css => 5822.8e16189d.chunk.css} (96%) rename portal-ui/build/static/css/{3816.16d04f59.chunk.css.map => 5822.8e16189d.chunk.css.map} (97%) delete mode 100644 portal-ui/build/static/css/8724.16d04f59.chunk.css delete mode 100644 portal-ui/build/static/css/8724.16d04f59.chunk.css.map create mode 100644 portal-ui/build/static/css/8724.8e16189d.chunk.css create mode 100644 portal-ui/build/static/css/8724.8e16189d.chunk.css.map delete mode 100644 portal-ui/build/static/css/9645.16d04f59.chunk.css delete mode 100644 portal-ui/build/static/css/9645.16d04f59.chunk.css.map create mode 100644 portal-ui/build/static/css/9645.8e16189d.chunk.css create mode 100644 portal-ui/build/static/css/9645.8e16189d.chunk.css.map delete mode 100644 portal-ui/build/static/css/9807.16d04f59.chunk.css delete mode 100644 portal-ui/build/static/css/9807.16d04f59.chunk.css.map create mode 100644 portal-ui/build/static/css/9807.8e16189d.chunk.css create mode 100644 portal-ui/build/static/css/9807.8e16189d.chunk.css.map create mode 100644 portal-ui/build/static/js/1056.369ba3ab.chunk.js create mode 100644 portal-ui/build/static/js/1056.369ba3ab.chunk.js.map delete mode 100644 portal-ui/build/static/js/1056.40bdeca6.chunk.js delete mode 100644 portal-ui/build/static/js/1056.40bdeca6.chunk.js.map delete mode 100644 portal-ui/build/static/js/1069.57853a28.chunk.js delete mode 100644 portal-ui/build/static/js/1069.57853a28.chunk.js.map create mode 100644 portal-ui/build/static/js/1069.771a8a37.chunk.js create mode 100644 portal-ui/build/static/js/1069.771a8a37.chunk.js.map rename portal-ui/build/static/js/{1140.5e370d17.chunk.js => 1140.35a12cb4.chunk.js} (66%) create mode 100644 portal-ui/build/static/js/1140.35a12cb4.chunk.js.map delete mode 100644 portal-ui/build/static/js/1140.5e370d17.chunk.js.map rename portal-ui/build/static/js/{1237.5cfe4b14.chunk.js => 1237.dbb13c2b.chunk.js} (95%) rename portal-ui/build/static/js/{1237.5cfe4b14.chunk.js.map => 1237.dbb13c2b.chunk.js.map} (99%) delete mode 100644 portal-ui/build/static/js/1409.a1f80372.chunk.js delete mode 100644 portal-ui/build/static/js/1409.a1f80372.chunk.js.map delete mode 100644 portal-ui/build/static/js/1420.517f0e88.chunk.js delete mode 100644 portal-ui/build/static/js/1420.517f0e88.chunk.js.map create mode 100644 portal-ui/build/static/js/1666.29b376af.chunk.js create mode 100644 portal-ui/build/static/js/1666.29b376af.chunk.js.map delete mode 100644 portal-ui/build/static/js/1666.d4e2b942.chunk.js delete mode 100644 portal-ui/build/static/js/1666.d4e2b942.chunk.js.map delete mode 100644 portal-ui/build/static/js/1711.669b8be7.chunk.js delete mode 100644 portal-ui/build/static/js/1711.669b8be7.chunk.js.map create mode 100644 portal-ui/build/static/js/1711.755e1931.chunk.js create mode 100644 portal-ui/build/static/js/1711.755e1931.chunk.js.map delete mode 100644 portal-ui/build/static/js/1719.06e59cd5.chunk.js delete mode 100644 portal-ui/build/static/js/1719.06e59cd5.chunk.js.map create mode 100644 portal-ui/build/static/js/1719.c433d41f.chunk.js create mode 100644 portal-ui/build/static/js/1719.c433d41f.chunk.js.map create mode 100644 portal-ui/build/static/js/189.108e9feb.chunk.js create mode 100644 portal-ui/build/static/js/189.108e9feb.chunk.js.map rename portal-ui/build/static/js/{1971.6d62cf1b.chunk.js => 1971.899558fa.chunk.js} (50%) rename portal-ui/build/static/js/{1971.6d62cf1b.chunk.js.map => 1971.899558fa.chunk.js.map} (60%) delete mode 100644 portal-ui/build/static/js/1973.652e15ff.chunk.js create mode 100644 portal-ui/build/static/js/1973.e9142631.chunk.js rename portal-ui/build/static/js/{1973.652e15ff.chunk.js.map => 1973.e9142631.chunk.js.map} (99%) create mode 100644 portal-ui/build/static/js/2024.6baed5c5.chunk.js rename portal-ui/build/static/js/{2024.6d844dd2.chunk.js.map => 2024.6baed5c5.chunk.js.map} (99%) delete mode 100644 portal-ui/build/static/js/2024.6d844dd2.chunk.js rename portal-ui/build/static/js/{2178.7830bed4.chunk.js => 2178.70c131e4.chunk.js} (98%) rename portal-ui/build/static/js/{2178.7830bed4.chunk.js.map => 2178.70c131e4.chunk.js.map} (99%) delete mode 100644 portal-ui/build/static/js/2182.2e7a9981.chunk.js delete mode 100644 portal-ui/build/static/js/2182.2e7a9981.chunk.js.map create mode 100644 portal-ui/build/static/js/2182.e3b6cc76.chunk.js create mode 100644 portal-ui/build/static/js/2182.e3b6cc76.chunk.js.map delete mode 100644 portal-ui/build/static/js/2202.516dc033.chunk.js delete mode 100644 portal-ui/build/static/js/2202.516dc033.chunk.js.map create mode 100644 portal-ui/build/static/js/2401.0638b608.chunk.js rename portal-ui/build/static/js/{2401.74634660.chunk.js.map => 2401.0638b608.chunk.js.map} (52%) delete mode 100644 portal-ui/build/static/js/2401.74634660.chunk.js create mode 100644 portal-ui/build/static/js/2417.105afd14.chunk.js create mode 100644 portal-ui/build/static/js/2417.105afd14.chunk.js.map delete mode 100644 portal-ui/build/static/js/2464.0db9c672.chunk.js delete mode 100644 portal-ui/build/static/js/2464.0db9c672.chunk.js.map create mode 100644 portal-ui/build/static/js/2464.f44ab309.chunk.js create mode 100644 portal-ui/build/static/js/2464.f44ab309.chunk.js.map create mode 100644 portal-ui/build/static/js/2491.70293bae.chunk.js create mode 100644 portal-ui/build/static/js/2491.70293bae.chunk.js.map delete mode 100644 portal-ui/build/static/js/2491.8a968cd0.chunk.js delete mode 100644 portal-ui/build/static/js/2491.8a968cd0.chunk.js.map delete mode 100644 portal-ui/build/static/js/2594.77f64a1f.chunk.js delete mode 100644 portal-ui/build/static/js/2594.77f64a1f.chunk.js.map rename portal-ui/build/static/js/{2699.9e1fe660.chunk.js => 2699.6f1c9c05.chunk.js} (97%) rename portal-ui/build/static/js/{2699.9e1fe660.chunk.js.map => 2699.6f1c9c05.chunk.js.map} (99%) create mode 100644 portal-ui/build/static/js/2805.621131c8.chunk.js create mode 100644 portal-ui/build/static/js/2805.621131c8.chunk.js.map delete mode 100644 portal-ui/build/static/js/2805.fa3b80ee.chunk.js delete mode 100644 portal-ui/build/static/js/2805.fa3b80ee.chunk.js.map create mode 100644 portal-ui/build/static/js/2818.d6147732.chunk.js create mode 100644 portal-ui/build/static/js/2818.d6147732.chunk.js.map delete mode 100644 portal-ui/build/static/js/2841.3d33d6cd.chunk.js delete mode 100644 portal-ui/build/static/js/2841.3d33d6cd.chunk.js.map create mode 100644 portal-ui/build/static/js/2841.a58d2a5d.chunk.js create mode 100644 portal-ui/build/static/js/2841.a58d2a5d.chunk.js.map delete mode 100644 portal-ui/build/static/js/2873.ae77af6d.chunk.js delete mode 100644 portal-ui/build/static/js/2873.ae77af6d.chunk.js.map create mode 100644 portal-ui/build/static/js/2886.64395b76.chunk.js create mode 100644 portal-ui/build/static/js/2886.64395b76.chunk.js.map delete mode 100644 portal-ui/build/static/js/2886.e13fac7c.chunk.js delete mode 100644 portal-ui/build/static/js/2886.e13fac7c.chunk.js.map delete mode 100644 portal-ui/build/static/js/2892.612b963a.chunk.js delete mode 100644 portal-ui/build/static/js/2892.612b963a.chunk.js.map create mode 100644 portal-ui/build/static/js/2892.dedb4d14.chunk.js create mode 100644 portal-ui/build/static/js/2892.dedb4d14.chunk.js.map create mode 100644 portal-ui/build/static/js/2966.9c46726c.chunk.js create mode 100644 portal-ui/build/static/js/2966.9c46726c.chunk.js.map delete mode 100644 portal-ui/build/static/js/2966.fed828cf.chunk.js delete mode 100644 portal-ui/build/static/js/2966.fed828cf.chunk.js.map delete mode 100644 portal-ui/build/static/js/3201.781acfe1.chunk.js delete mode 100644 portal-ui/build/static/js/3201.781acfe1.chunk.js.map create mode 100644 portal-ui/build/static/js/3276.cbbfa439.chunk.js create mode 100644 portal-ui/build/static/js/3276.cbbfa439.chunk.js.map create mode 100644 portal-ui/build/static/js/3300.9b8f6257.chunk.js create mode 100644 portal-ui/build/static/js/3300.9b8f6257.chunk.js.map create mode 100644 portal-ui/build/static/js/3320.3fb492c4.chunk.js create mode 100644 portal-ui/build/static/js/3320.3fb492c4.chunk.js.map delete mode 100644 portal-ui/build/static/js/3320.73d7b61f.chunk.js delete mode 100644 portal-ui/build/static/js/3320.73d7b61f.chunk.js.map create mode 100644 portal-ui/build/static/js/3421.1c5efe0e.chunk.js create mode 100644 portal-ui/build/static/js/3421.1c5efe0e.chunk.js.map delete mode 100644 portal-ui/build/static/js/3421.a52d7b4f.chunk.js delete mode 100644 portal-ui/build/static/js/3421.a52d7b4f.chunk.js.map create mode 100644 portal-ui/build/static/js/3453.75ca1d21.chunk.js create mode 100644 portal-ui/build/static/js/3453.75ca1d21.chunk.js.map delete mode 100644 portal-ui/build/static/js/3453.cadd9dca.chunk.js delete mode 100644 portal-ui/build/static/js/3453.cadd9dca.chunk.js.map delete mode 100644 portal-ui/build/static/js/3589.12c4bc4a.chunk.js delete mode 100644 portal-ui/build/static/js/3589.12c4bc4a.chunk.js.map delete mode 100644 portal-ui/build/static/js/3617.bf15040b.chunk.js delete mode 100644 portal-ui/build/static/js/3617.bf15040b.chunk.js.map create mode 100644 portal-ui/build/static/js/3617.ef0bffae.chunk.js create mode 100644 portal-ui/build/static/js/3617.ef0bffae.chunk.js.map delete mode 100644 portal-ui/build/static/js/3698.1144caf6.chunk.js delete mode 100644 portal-ui/build/static/js/3698.1144caf6.chunk.js.map create mode 100644 portal-ui/build/static/js/3698.928db215.chunk.js create mode 100644 portal-ui/build/static/js/3698.928db215.chunk.js.map delete mode 100644 portal-ui/build/static/js/3806.021fe081.chunk.js delete mode 100644 portal-ui/build/static/js/3806.021fe081.chunk.js.map create mode 100644 portal-ui/build/static/js/3806.9b491d19.chunk.js create mode 100644 portal-ui/build/static/js/3806.9b491d19.chunk.js.map rename portal-ui/build/static/js/{3816.7dc2c7d2.chunk.js => 3816.b73504ec.chunk.js} (64%) rename portal-ui/build/static/js/{3816.7dc2c7d2.chunk.js.map => 3816.b73504ec.chunk.js.map} (70%) create mode 100644 portal-ui/build/static/js/3830.bdda307f.chunk.js create mode 100644 portal-ui/build/static/js/3830.bdda307f.chunk.js.map delete mode 100644 portal-ui/build/static/js/3967.6db0cf38.chunk.js delete mode 100644 portal-ui/build/static/js/3967.6db0cf38.chunk.js.map create mode 100644 portal-ui/build/static/js/3967.e89c4131.chunk.js create mode 100644 portal-ui/build/static/js/3967.e89c4131.chunk.js.map create mode 100644 portal-ui/build/static/js/4084.3d9d8cab.chunk.js create mode 100644 portal-ui/build/static/js/4084.3d9d8cab.chunk.js.map delete mode 100644 portal-ui/build/static/js/4084.44ec9dce.chunk.js delete mode 100644 portal-ui/build/static/js/4084.44ec9dce.chunk.js.map rename portal-ui/build/static/js/{4121.0a36aad4.chunk.js => 4121.dc9cd38b.chunk.js} (98%) rename portal-ui/build/static/js/{4121.0a36aad4.chunk.js.map => 4121.dc9cd38b.chunk.js.map} (99%) create mode 100644 portal-ui/build/static/js/4177.fd895511.chunk.js create mode 100644 portal-ui/build/static/js/4177.fd895511.chunk.js.map delete mode 100644 portal-ui/build/static/js/4177.ff48eff7.chunk.js delete mode 100644 portal-ui/build/static/js/4177.ff48eff7.chunk.js.map delete mode 100644 portal-ui/build/static/js/4220.4e3b3b58.chunk.js delete mode 100644 portal-ui/build/static/js/4220.4e3b3b58.chunk.js.map create mode 100644 portal-ui/build/static/js/4220.9aea78f1.chunk.js create mode 100644 portal-ui/build/static/js/4220.9aea78f1.chunk.js.map delete mode 100644 portal-ui/build/static/js/4247.cc0f88b2.chunk.js delete mode 100644 portal-ui/build/static/js/4247.cc0f88b2.chunk.js.map delete mode 100644 portal-ui/build/static/js/428.4625197b.chunk.js delete mode 100644 portal-ui/build/static/js/428.4625197b.chunk.js.map create mode 100644 portal-ui/build/static/js/428.f1f3ca19.chunk.js create mode 100644 portal-ui/build/static/js/428.f1f3ca19.chunk.js.map create mode 100644 portal-ui/build/static/js/4322.ddc888e0.chunk.js create mode 100644 portal-ui/build/static/js/4322.ddc888e0.chunk.js.map delete mode 100644 portal-ui/build/static/js/4487.8d3f76aa.chunk.js delete mode 100644 portal-ui/build/static/js/4487.8d3f76aa.chunk.js.map create mode 100644 portal-ui/build/static/js/4487.c59869da.chunk.js create mode 100644 portal-ui/build/static/js/4487.c59869da.chunk.js.map delete mode 100644 portal-ui/build/static/js/4515.56df16f6.chunk.js delete mode 100644 portal-ui/build/static/js/4515.56df16f6.chunk.js.map create mode 100644 portal-ui/build/static/js/4515.a137eba4.chunk.js create mode 100644 portal-ui/build/static/js/4515.a137eba4.chunk.js.map create mode 100644 portal-ui/build/static/js/4533.0533f737.chunk.js rename portal-ui/build/static/js/{4533.d9c6db0b.chunk.js.map => 4533.0533f737.chunk.js.map} (99%) delete mode 100644 portal-ui/build/static/js/4533.d9c6db0b.chunk.js delete mode 100644 portal-ui/build/static/js/4577.d0f37cfd.chunk.js delete mode 100644 portal-ui/build/static/js/4577.d0f37cfd.chunk.js.map create mode 100644 portal-ui/build/static/js/4577.d5eda9f7.chunk.js create mode 100644 portal-ui/build/static/js/4577.d5eda9f7.chunk.js.map delete mode 100644 portal-ui/build/static/js/4745.50faf863.chunk.js delete mode 100644 portal-ui/build/static/js/4745.50faf863.chunk.js.map create mode 100644 portal-ui/build/static/js/4745.d3b72d46.chunk.js create mode 100644 portal-ui/build/static/js/4745.d3b72d46.chunk.js.map create mode 100644 portal-ui/build/static/js/4818.1f7ff2b7.chunk.js create mode 100644 portal-ui/build/static/js/4818.1f7ff2b7.chunk.js.map delete mode 100644 portal-ui/build/static/js/4818.7391a4e4.chunk.js delete mode 100644 portal-ui/build/static/js/4818.7391a4e4.chunk.js.map create mode 100644 portal-ui/build/static/js/4839.cd845b47.chunk.js create mode 100644 portal-ui/build/static/js/4839.cd845b47.chunk.js.map delete mode 100644 portal-ui/build/static/js/4839.ed81765f.chunk.js delete mode 100644 portal-ui/build/static/js/4839.ed81765f.chunk.js.map create mode 100644 portal-ui/build/static/js/4869.58db9f45.chunk.js create mode 100644 portal-ui/build/static/js/4869.58db9f45.chunk.js.map delete mode 100644 portal-ui/build/static/js/4869.a9280d8a.chunk.js delete mode 100644 portal-ui/build/static/js/4869.a9280d8a.chunk.js.map create mode 100644 portal-ui/build/static/js/4960.4944962a.chunk.js create mode 100644 portal-ui/build/static/js/4960.4944962a.chunk.js.map create mode 100644 portal-ui/build/static/js/5125.58c2feff.chunk.js rename portal-ui/build/static/js/{5125.df89f86d.chunk.js.map => 5125.58c2feff.chunk.js.map} (99%) delete mode 100644 portal-ui/build/static/js/5125.df89f86d.chunk.js create mode 100644 portal-ui/build/static/js/5144.392cff58.chunk.js rename portal-ui/build/static/js/{5144.4d802107.chunk.js.map => 5144.392cff58.chunk.js.map} (99%) delete mode 100644 portal-ui/build/static/js/5144.4d802107.chunk.js rename portal-ui/build/static/js/{5284.5dcf178e.chunk.js => 5284.e06719cf.chunk.js} (98%) rename portal-ui/build/static/js/{5284.5dcf178e.chunk.js.map => 5284.e06719cf.chunk.js.map} (99%) create mode 100644 portal-ui/build/static/js/5339.77ff74c9.chunk.js create mode 100644 portal-ui/build/static/js/5339.77ff74c9.chunk.js.map create mode 100644 portal-ui/build/static/js/5482.565ebb65.chunk.js rename portal-ui/build/static/js/{5482.dcaee6b1.chunk.js.map => 5482.565ebb65.chunk.js.map} (99%) delete mode 100644 portal-ui/build/static/js/5482.dcaee6b1.chunk.js create mode 100644 portal-ui/build/static/js/5591.992e2bda.chunk.js create mode 100644 portal-ui/build/static/js/5591.992e2bda.chunk.js.map delete mode 100644 portal-ui/build/static/js/5673.7958d7f7.chunk.js delete mode 100644 portal-ui/build/static/js/5673.7958d7f7.chunk.js.map create mode 100644 portal-ui/build/static/js/5781.206192b7.chunk.js create mode 100644 portal-ui/build/static/js/5781.206192b7.chunk.js.map create mode 100644 portal-ui/build/static/js/5795.d1ea50ec.chunk.js create mode 100644 portal-ui/build/static/js/5795.d1ea50ec.chunk.js.map rename portal-ui/build/static/js/{5808.a1b11c6c.chunk.js => 5808.a4148012.chunk.js} (97%) rename portal-ui/build/static/js/{5808.a1b11c6c.chunk.js.map => 5808.a4148012.chunk.js.map} (99%) create mode 100644 portal-ui/build/static/js/5822.55acdd2b.chunk.js create mode 100644 portal-ui/build/static/js/5822.55acdd2b.chunk.js.map delete mode 100644 portal-ui/build/static/js/5947.59012b92.chunk.js delete mode 100644 portal-ui/build/static/js/5947.59012b92.chunk.js.map create mode 100644 portal-ui/build/static/js/5947.dda226b6.chunk.js create mode 100644 portal-ui/build/static/js/5947.dda226b6.chunk.js.map rename portal-ui/build/static/js/{5961.95455f54.chunk.js => 5961.975bb084.chunk.js} (96%) rename portal-ui/build/static/js/{5961.95455f54.chunk.js.map => 5961.975bb084.chunk.js.map} (99%) rename portal-ui/build/static/js/{609.911f7c3a.chunk.js => 609.01a74891.chunk.js} (98%) rename portal-ui/build/static/js/{609.911f7c3a.chunk.js.map => 609.01a74891.chunk.js.map} (99%) rename portal-ui/build/static/js/{6145.5fc6589e.chunk.js => 6145.0f094527.chunk.js} (52%) rename portal-ui/build/static/js/{6145.5fc6589e.chunk.js.map => 6145.0f094527.chunk.js.map} (63%) delete mode 100644 portal-ui/build/static/js/6147.64405f65.chunk.js create mode 100644 portal-ui/build/static/js/6147.c07c0ae2.chunk.js rename portal-ui/build/static/js/{6147.64405f65.chunk.js.map => 6147.c07c0ae2.chunk.js.map} (99%) rename portal-ui/build/static/js/{6167.657bf70b.chunk.js => 6167.fed9e5cf.chunk.js} (98%) rename portal-ui/build/static/js/{6167.657bf70b.chunk.js.map => 6167.fed9e5cf.chunk.js.map} (99%) delete mode 100644 portal-ui/build/static/js/6173.7ae4f8dd.chunk.js create mode 100644 portal-ui/build/static/js/6173.afdc41b4.chunk.js rename portal-ui/build/static/js/{6173.7ae4f8dd.chunk.js.map => 6173.afdc41b4.chunk.js.map} (99%) create mode 100644 portal-ui/build/static/js/635.2854d4f5.chunk.js create mode 100644 portal-ui/build/static/js/635.2854d4f5.chunk.js.map create mode 100644 portal-ui/build/static/js/6430.7d5ec903.chunk.js create mode 100644 portal-ui/build/static/js/6430.7d5ec903.chunk.js.map create mode 100644 portal-ui/build/static/js/6436.7b0189de.chunk.js create mode 100644 portal-ui/build/static/js/6436.7b0189de.chunk.js.map delete mode 100644 portal-ui/build/static/js/6436.94fc01ae.chunk.js delete mode 100644 portal-ui/build/static/js/6436.94fc01ae.chunk.js.map create mode 100644 portal-ui/build/static/js/6597.fc1eafc4.chunk.js create mode 100644 portal-ui/build/static/js/6597.fc1eafc4.chunk.js.map create mode 100644 portal-ui/build/static/js/6645.c41c6009.chunk.js create mode 100644 portal-ui/build/static/js/6645.c41c6009.chunk.js.map delete mode 100644 portal-ui/build/static/js/6645.eeff9b42.chunk.js delete mode 100644 portal-ui/build/static/js/6645.eeff9b42.chunk.js.map delete mode 100644 portal-ui/build/static/js/6866.170616fc.chunk.js delete mode 100644 portal-ui/build/static/js/6866.170616fc.chunk.js.map create mode 100644 portal-ui/build/static/js/6866.d7d9be68.chunk.js create mode 100644 portal-ui/build/static/js/6866.d7d9be68.chunk.js.map create mode 100644 portal-ui/build/static/js/6873.1b3165f5.chunk.js create mode 100644 portal-ui/build/static/js/6873.1b3165f5.chunk.js.map delete mode 100644 portal-ui/build/static/js/6873.b692329a.chunk.js delete mode 100644 portal-ui/build/static/js/6873.b692329a.chunk.js.map rename portal-ui/build/static/js/{7007.8a078c5c.chunk.js => 7007.aaee4953.chunk.js} (98%) rename portal-ui/build/static/js/{7007.8a078c5c.chunk.js.map => 7007.aaee4953.chunk.js.map} (99%) delete mode 100644 portal-ui/build/static/js/7042.b193939a.chunk.js delete mode 100644 portal-ui/build/static/js/7042.b193939a.chunk.js.map delete mode 100644 portal-ui/build/static/js/7187.911fa39a.chunk.js create mode 100644 portal-ui/build/static/js/7187.968efbad.chunk.js rename portal-ui/build/static/js/{7187.911fa39a.chunk.js.map => 7187.968efbad.chunk.js.map} (99%) delete mode 100644 portal-ui/build/static/js/7261.a4f25607.chunk.js delete mode 100644 portal-ui/build/static/js/7261.a4f25607.chunk.js.map create mode 100644 portal-ui/build/static/js/7261.ee9cc151.chunk.js create mode 100644 portal-ui/build/static/js/7261.ee9cc151.chunk.js.map delete mode 100644 portal-ui/build/static/js/7274.04d18d5b.chunk.js delete mode 100644 portal-ui/build/static/js/7274.04d18d5b.chunk.js.map create mode 100644 portal-ui/build/static/js/7274.a51a45fc.chunk.js create mode 100644 portal-ui/build/static/js/7274.a51a45fc.chunk.js.map delete mode 100644 portal-ui/build/static/js/7314.1f372dfa.chunk.js delete mode 100644 portal-ui/build/static/js/7314.1f372dfa.chunk.js.map create mode 100644 portal-ui/build/static/js/7314.da174e5e.chunk.js create mode 100644 portal-ui/build/static/js/7314.da174e5e.chunk.js.map rename portal-ui/build/static/js/{7346.f40bf7ca.chunk.js => 7346.efd507dc.chunk.js} (98%) rename portal-ui/build/static/js/{7346.f40bf7ca.chunk.js.map => 7346.efd507dc.chunk.js.map} (99%) create mode 100644 portal-ui/build/static/js/7348.7a72b31f.chunk.js rename portal-ui/build/static/js/{7348.b037b952.chunk.js.map => 7348.7a72b31f.chunk.js.map} (99%) delete mode 100644 portal-ui/build/static/js/7348.b037b952.chunk.js create mode 100644 portal-ui/build/static/js/7436.c5785c09.chunk.js create mode 100644 portal-ui/build/static/js/7436.c5785c09.chunk.js.map delete mode 100644 portal-ui/build/static/js/7436.ffc144e9.chunk.js delete mode 100644 portal-ui/build/static/js/7436.ffc144e9.chunk.js.map rename portal-ui/build/static/js/{7456.b088e214.chunk.js => 7456.743391a4.chunk.js} (99%) rename portal-ui/build/static/js/{7456.b088e214.chunk.js.map => 7456.743391a4.chunk.js.map} (99%) rename portal-ui/build/static/js/{7498.ca73ad94.chunk.js => 7498.c395ccf1.chunk.js} (88%) rename portal-ui/build/static/js/{7498.ca73ad94.chunk.js.map => 7498.c395ccf1.chunk.js.map} (98%) create mode 100644 portal-ui/build/static/js/7551.0bf2079d.chunk.js create mode 100644 portal-ui/build/static/js/7551.0bf2079d.chunk.js.map delete mode 100644 portal-ui/build/static/js/7551.8d7574b9.chunk.js delete mode 100644 portal-ui/build/static/js/7551.8d7574b9.chunk.js.map delete mode 100644 portal-ui/build/static/js/7664.62484a7b.chunk.js delete mode 100644 portal-ui/build/static/js/7664.62484a7b.chunk.js.map rename portal-ui/build/static/js/{4109.379ba85e.chunk.js => 7664.bb12744a.chunk.js} (83%) rename portal-ui/build/static/js/{4109.379ba85e.chunk.js.map => 7664.bb12744a.chunk.js.map} (98%) delete mode 100644 portal-ui/build/static/js/7777.2be735aa.chunk.js delete mode 100644 portal-ui/build/static/js/7777.2be735aa.chunk.js.map create mode 100644 portal-ui/build/static/js/7842.3103d8de.chunk.js create mode 100644 portal-ui/build/static/js/7842.3103d8de.chunk.js.map delete mode 100644 portal-ui/build/static/js/7842.ec2ac847.chunk.js delete mode 100644 portal-ui/build/static/js/7842.ec2ac847.chunk.js.map rename portal-ui/build/static/js/{7926.2a96a6b4.chunk.js => 7926.2532900d.chunk.js} (98%) rename portal-ui/build/static/js/{7926.2a96a6b4.chunk.js.map => 7926.2532900d.chunk.js.map} (99%) create mode 100644 portal-ui/build/static/js/7939.46ff2d0f.chunk.js rename portal-ui/build/static/js/{8671.2728f1f2.chunk.js.LICENSE.txt => 7939.46ff2d0f.chunk.js.LICENSE.txt} (100%) create mode 100644 portal-ui/build/static/js/7939.46ff2d0f.chunk.js.map delete mode 100644 portal-ui/build/static/js/7950.4044ce3a.chunk.js delete mode 100644 portal-ui/build/static/js/7950.4044ce3a.chunk.js.map create mode 100644 portal-ui/build/static/js/7950.4cb62868.chunk.js create mode 100644 portal-ui/build/static/js/7950.4cb62868.chunk.js.map create mode 100644 portal-ui/build/static/js/8016.0758210e.chunk.js rename portal-ui/build/static/js/{8016.b0ab3b67.chunk.js.map => 8016.0758210e.chunk.js.map} (99%) delete mode 100644 portal-ui/build/static/js/8016.b0ab3b67.chunk.js create mode 100644 portal-ui/build/static/js/8174.b2493b0b.chunk.js create mode 100644 portal-ui/build/static/js/8174.b2493b0b.chunk.js.map create mode 100644 portal-ui/build/static/js/8190.02056f3f.chunk.js create mode 100644 portal-ui/build/static/js/8190.02056f3f.chunk.js.map delete mode 100644 portal-ui/build/static/js/825.1102a1fc.chunk.js delete mode 100644 portal-ui/build/static/js/825.1102a1fc.chunk.js.map create mode 100644 portal-ui/build/static/js/825.3a314578.chunk.js create mode 100644 portal-ui/build/static/js/825.3a314578.chunk.js.map create mode 100644 portal-ui/build/static/js/8259.162d3a40.chunk.js create mode 100644 portal-ui/build/static/js/8259.162d3a40.chunk.js.map delete mode 100644 portal-ui/build/static/js/8259.d84a0972.chunk.js delete mode 100644 portal-ui/build/static/js/8259.d84a0972.chunk.js.map delete mode 100644 portal-ui/build/static/js/8343.246b38fd.chunk.js delete mode 100644 portal-ui/build/static/js/8343.246b38fd.chunk.js.map create mode 100644 portal-ui/build/static/js/8343.c2929511.chunk.js create mode 100644 portal-ui/build/static/js/8343.c2929511.chunk.js.map create mode 100644 portal-ui/build/static/js/8394.aab97516.chunk.js create mode 100644 portal-ui/build/static/js/8394.aab97516.chunk.js.map delete mode 100644 portal-ui/build/static/js/8394.c3b5a87f.chunk.js delete mode 100644 portal-ui/build/static/js/8394.c3b5a87f.chunk.js.map delete mode 100644 portal-ui/build/static/js/8420.cf009fd2.chunk.js delete mode 100644 portal-ui/build/static/js/8420.cf009fd2.chunk.js.map create mode 100644 portal-ui/build/static/js/8420.dc98b56b.chunk.js rename portal-ui/build/static/js/{8420.cf009fd2.chunk.js.LICENSE.txt => 8420.dc98b56b.chunk.js.LICENSE.txt} (100%) create mode 100644 portal-ui/build/static/js/8420.dc98b56b.chunk.js.map delete mode 100644 portal-ui/build/static/js/8503.e5a8b0ef.chunk.js delete mode 100644 portal-ui/build/static/js/8503.e5a8b0ef.chunk.js.map delete mode 100644 portal-ui/build/static/js/8562.158d427c.chunk.js delete mode 100644 portal-ui/build/static/js/8562.158d427c.chunk.js.map rename portal-ui/build/static/js/{8564.da2da2d5.chunk.js => 8564.b0794921.chunk.js} (98%) rename portal-ui/build/static/js/{8564.da2da2d5.chunk.js.map => 8564.b0794921.chunk.js.map} (99%) create mode 100644 portal-ui/build/static/js/8661.d0eec194.chunk.js create mode 100644 portal-ui/build/static/js/8661.d0eec194.chunk.js.map delete mode 100644 portal-ui/build/static/js/8671.2728f1f2.chunk.js delete mode 100644 portal-ui/build/static/js/8671.2728f1f2.chunk.js.map create mode 100644 portal-ui/build/static/js/8724.0c41b255.chunk.js rename portal-ui/build/static/js/{8724.f7dbb7e5.chunk.js.map => 8724.0c41b255.chunk.js.map} (56%) delete mode 100644 portal-ui/build/static/js/8724.f7dbb7e5.chunk.js delete mode 100644 portal-ui/build/static/js/8853.f3495da5.chunk.js delete mode 100644 portal-ui/build/static/js/8853.f3495da5.chunk.js.map delete mode 100644 portal-ui/build/static/js/8961.1587a077.chunk.js delete mode 100644 portal-ui/build/static/js/8961.1587a077.chunk.js.map create mode 100644 portal-ui/build/static/js/8961.2e01f3c6.chunk.js create mode 100644 portal-ui/build/static/js/8961.2e01f3c6.chunk.js.map delete mode 100644 portal-ui/build/static/js/8967.9832e222.chunk.js delete mode 100644 portal-ui/build/static/js/8967.9832e222.chunk.js.map rename portal-ui/build/static/js/{9.e9a15c48.chunk.js => 9.e2862ce4.chunk.js} (98%) rename portal-ui/build/static/js/{9.e9a15c48.chunk.js.map => 9.e2862ce4.chunk.js.map} (99%) delete mode 100644 portal-ui/build/static/js/9080.9f8440be.chunk.js delete mode 100644 portal-ui/build/static/js/9080.9f8440be.chunk.js.map create mode 100644 portal-ui/build/static/js/9080.f007894a.chunk.js create mode 100644 portal-ui/build/static/js/9080.f007894a.chunk.js.map create mode 100644 portal-ui/build/static/js/9125.a86e3119.chunk.js create mode 100644 portal-ui/build/static/js/9125.a86e3119.chunk.js.map rename portal-ui/build/static/js/{9193.840c0a00.chunk.js => 9193.47341a7f.chunk.js} (91%) rename portal-ui/build/static/js/{9193.840c0a00.chunk.js.map => 9193.47341a7f.chunk.js.map} (98%) create mode 100644 portal-ui/build/static/js/9275.69a60a7c.chunk.js create mode 100644 portal-ui/build/static/js/9275.69a60a7c.chunk.js.map delete mode 100644 portal-ui/build/static/js/9275.78534658.chunk.js delete mode 100644 portal-ui/build/static/js/9275.78534658.chunk.js.map create mode 100644 portal-ui/build/static/js/9330.33984e73.chunk.js create mode 100644 portal-ui/build/static/js/9330.33984e73.chunk.js.map delete mode 100644 portal-ui/build/static/js/9330.c4a20f8b.chunk.js delete mode 100644 portal-ui/build/static/js/9330.c4a20f8b.chunk.js.map rename portal-ui/build/static/js/{9421.96205cad.chunk.js => 9421.5cc40d43.chunk.js} (94%) rename portal-ui/build/static/js/{9421.96205cad.chunk.js.map => 9421.5cc40d43.chunk.js.map} (99%) create mode 100644 portal-ui/build/static/js/953.46121656.chunk.js create mode 100644 portal-ui/build/static/js/953.46121656.chunk.js.map delete mode 100644 portal-ui/build/static/js/953.8e47f0fa.chunk.js delete mode 100644 portal-ui/build/static/js/953.8e47f0fa.chunk.js.map create mode 100644 portal-ui/build/static/js/9560.1c7c393b.chunk.js create mode 100644 portal-ui/build/static/js/9560.1c7c393b.chunk.js.map delete mode 100644 portal-ui/build/static/js/9560.9c2106d1.chunk.js delete mode 100644 portal-ui/build/static/js/9560.9c2106d1.chunk.js.map delete mode 100644 portal-ui/build/static/js/9586.c44d8f2b.chunk.js delete mode 100644 portal-ui/build/static/js/9586.c44d8f2b.chunk.js.map create mode 100644 portal-ui/build/static/js/9586.f3d3466d.chunk.js create mode 100644 portal-ui/build/static/js/9586.f3d3466d.chunk.js.map create mode 100644 portal-ui/build/static/js/9645.52a31d53.chunk.js create mode 100644 portal-ui/build/static/js/9645.52a31d53.chunk.js.map delete mode 100644 portal-ui/build/static/js/9645.7e223ba8.chunk.js delete mode 100644 portal-ui/build/static/js/9645.7e223ba8.chunk.js.map create mode 100644 portal-ui/build/static/js/9661.68a3c872.chunk.js create mode 100644 portal-ui/build/static/js/9661.68a3c872.chunk.js.map rename portal-ui/build/static/js/{9679.eb81d633.chunk.js => 9679.b9a553b7.chunk.js} (98%) rename portal-ui/build/static/js/{9679.eb81d633.chunk.js.map => 9679.b9a553b7.chunk.js.map} (99%) create mode 100644 portal-ui/build/static/js/9779.23164a07.chunk.js create mode 100644 portal-ui/build/static/js/9779.23164a07.chunk.js.map delete mode 100644 portal-ui/build/static/js/9779.dba4659a.chunk.js delete mode 100644 portal-ui/build/static/js/9779.dba4659a.chunk.js.map delete mode 100644 portal-ui/build/static/js/9807.6f337230.chunk.js delete mode 100644 portal-ui/build/static/js/9807.6f337230.chunk.js.map create mode 100644 portal-ui/build/static/js/9807.b3b1c965.chunk.js create mode 100644 portal-ui/build/static/js/9807.b3b1c965.chunk.js.map delete mode 100644 portal-ui/build/static/js/9923.25fa1a75.chunk.js delete mode 100644 portal-ui/build/static/js/9923.25fa1a75.chunk.js.map create mode 100644 portal-ui/build/static/js/9923.67fe770d.chunk.js create mode 100644 portal-ui/build/static/js/9923.67fe770d.chunk.js.map delete mode 100644 portal-ui/build/static/js/9924.0c2cdee6.chunk.js delete mode 100644 portal-ui/build/static/js/9924.0c2cdee6.chunk.js.map create mode 100644 portal-ui/build/static/js/9924.ba0c0a4a.chunk.js create mode 100644 portal-ui/build/static/js/9924.ba0c0a4a.chunk.js.map create mode 100644 portal-ui/build/static/js/main.26dfcd6f.js rename portal-ui/build/static/js/{main.6530999d.js.LICENSE.txt => main.26dfcd6f.js.LICENSE.txt} (100%) create mode 100644 portal-ui/build/static/js/main.26dfcd6f.js.map delete mode 100644 portal-ui/build/static/js/main.6530999d.js delete mode 100644 portal-ui/build/static/js/main.6530999d.js.map diff --git a/k8s/operator-console/base/console-deployment.yaml b/k8s/operator-console/base/console-deployment.yaml index 708b4dfd9..9cee42556 100644 --- a/k8s/operator-console/base/console-deployment.yaml +++ b/k8s/operator-console/base/console-deployment.yaml @@ -15,7 +15,7 @@ spec: serviceAccountName: console-sa containers: - name: console - image: 'minio/console:v0.14.7' + image: 'minio/console:v0.14.8' imagePullPolicy: "IfNotPresent" env: - name: CONSOLE_OPERATOR_MODE diff --git a/k8s/operator-console/standalone/console-deployment.yaml b/k8s/operator-console/standalone/console-deployment.yaml index 3cb6e11e3..4161e1baf 100644 --- a/k8s/operator-console/standalone/console-deployment.yaml +++ b/k8s/operator-console/standalone/console-deployment.yaml @@ -32,7 +32,7 @@ spec: spec: containers: - name: console - image: 'minio/console:v0.14.7' + image: 'minio/console:v0.14.8' imagePullPolicy: "IfNotPresent" env: - name: CONSOLE_MINIO_SERVER diff --git a/models/principal.go b/models/principal.go index 231e24d23..4c25df62d 100644 --- a/models/principal.go +++ b/models/principal.go @@ -46,7 +46,7 @@ type Principal struct { // account access key AccountAccessKey string `json:"accountAccessKey,omitempty"` - // Hide Console Menu + // hm Hm bool `json:"hm,omitempty"` } diff --git a/portal-ui/build/asset-manifest.json b/portal-ui/build/asset-manifest.json index 09192d980..c824bf1aa 100644 --- a/portal-ui/build/asset-manifest.json +++ b/portal-ui/build/asset-manifest.json @@ -1,117 +1,120 @@ { "files": { "main.css": "./static/css/main.c4c1effe.css", - "main.js": "./static/js/main.6530999d.js", - "static/js/2178.7830bed4.chunk.js": "./static/js/2178.7830bed4.chunk.js", + "main.js": "./static/js/main.26dfcd6f.js", + "static/js/2178.70c131e4.chunk.js": "./static/js/2178.70c131e4.chunk.js", "static/js/5282.e51b8c66.chunk.js": "./static/js/5282.e51b8c66.chunk.js", - "static/js/1409.a1f80372.chunk.js": "./static/js/1409.a1f80372.chunk.js", - "static/js/9560.9c2106d1.chunk.js": "./static/js/9560.9c2106d1.chunk.js", - "static/js/4247.cc0f88b2.chunk.js": "./static/js/4247.cc0f88b2.chunk.js", - "static/js/9330.c4a20f8b.chunk.js": "./static/js/9330.c4a20f8b.chunk.js", - "static/js/4869.a9280d8a.chunk.js": "./static/js/4869.a9280d8a.chunk.js", - "static/js/2202.516dc033.chunk.js": "./static/js/2202.516dc033.chunk.js", - "static/js/7436.ffc144e9.chunk.js": "./static/js/7436.ffc144e9.chunk.js", - "static/js/1056.40bdeca6.chunk.js": "./static/js/1056.40bdeca6.chunk.js", - "static/js/9779.dba4659a.chunk.js": "./static/js/9779.dba4659a.chunk.js", - "static/js/3617.bf15040b.chunk.js": "./static/js/3617.bf15040b.chunk.js", - "static/js/7274.04d18d5b.chunk.js": "./static/js/7274.04d18d5b.chunk.js", - "static/js/7842.ec2ac847.chunk.js": "./static/js/7842.ec2ac847.chunk.js", - "static/js/4745.50faf863.chunk.js": "./static/js/4745.50faf863.chunk.js", - "static/js/4515.56df16f6.chunk.js": "./static/js/4515.56df16f6.chunk.js", - "static/js/8259.d84a0972.chunk.js": "./static/js/8259.d84a0972.chunk.js", - "static/js/4839.ed81765f.chunk.js": "./static/js/4839.ed81765f.chunk.js", - "static/js/8853.f3495da5.chunk.js": "./static/js/8853.f3495da5.chunk.js", - "static/js/9275.78534658.chunk.js": "./static/js/9275.78534658.chunk.js", - "static/js/3589.12c4bc4a.chunk.js": "./static/js/3589.12c4bc4a.chunk.js", - "static/js/7314.1f372dfa.chunk.js": "./static/js/7314.1f372dfa.chunk.js", - "static/js/7456.b088e214.chunk.js": "./static/js/7456.b088e214.chunk.js", - "static/css/5673.16d04f59.chunk.css": "./static/css/5673.16d04f59.chunk.css", - "static/js/5673.7958d7f7.chunk.js": "./static/js/5673.7958d7f7.chunk.js", - "static/js/2699.9e1fe660.chunk.js": "./static/js/2699.9e1fe660.chunk.js", - "static/js/5808.a1b11c6c.chunk.js": "./static/js/5808.a1b11c6c.chunk.js", - "static/js/1237.5cfe4b14.chunk.js": "./static/js/1237.5cfe4b14.chunk.js", - "static/js/8503.e5a8b0ef.chunk.js": "./static/js/8503.e5a8b0ef.chunk.js", - "static/css/2024.16d04f59.chunk.css": "./static/css/2024.16d04f59.chunk.css", - "static/js/2024.6d844dd2.chunk.js": "./static/js/2024.6d844dd2.chunk.js", - "static/css/9807.16d04f59.chunk.css": "./static/css/9807.16d04f59.chunk.css", - "static/js/9807.6f337230.chunk.js": "./static/js/9807.6f337230.chunk.js", - "static/js/3806.021fe081.chunk.js": "./static/js/3806.021fe081.chunk.js", - "static/js/8562.158d427c.chunk.js": "./static/js/8562.158d427c.chunk.js", - "static/js/2886.e13fac7c.chunk.js": "./static/js/2886.e13fac7c.chunk.js", - "static/js/4577.d0f37cfd.chunk.js": "./static/js/4577.d0f37cfd.chunk.js", - "static/js/5947.59012b92.chunk.js": "./static/js/5947.59012b92.chunk.js", - "static/js/4533.d9c6db0b.chunk.js": "./static/js/4533.d9c6db0b.chunk.js", - "static/js/6147.64405f65.chunk.js": "./static/js/6147.64405f65.chunk.js", - "static/js/2805.fa3b80ee.chunk.js": "./static/js/2805.fa3b80ee.chunk.js", + "static/js/2818.d6147732.chunk.js": "./static/js/2818.d6147732.chunk.js", + "static/js/9560.1c7c393b.chunk.js": "./static/js/9560.1c7c393b.chunk.js", + "static/js/9661.68a3c872.chunk.js": "./static/js/9661.68a3c872.chunk.js", + "static/js/9330.33984e73.chunk.js": "./static/js/9330.33984e73.chunk.js", + "static/js/4869.58db9f45.chunk.js": "./static/js/4869.58db9f45.chunk.js", + "static/js/7436.c5785c09.chunk.js": "./static/js/7436.c5785c09.chunk.js", + "static/js/1056.369ba3ab.chunk.js": "./static/js/1056.369ba3ab.chunk.js", + "static/js/9779.23164a07.chunk.js": "./static/js/9779.23164a07.chunk.js", + "static/js/3617.ef0bffae.chunk.js": "./static/js/3617.ef0bffae.chunk.js", + "static/js/7274.a51a45fc.chunk.js": "./static/js/7274.a51a45fc.chunk.js", + "static/js/7842.3103d8de.chunk.js": "./static/js/7842.3103d8de.chunk.js", + "static/js/4745.d3b72d46.chunk.js": "./static/js/4745.d3b72d46.chunk.js", + "static/js/4515.a137eba4.chunk.js": "./static/js/4515.a137eba4.chunk.js", + "static/js/8259.162d3a40.chunk.js": "./static/js/8259.162d3a40.chunk.js", + "static/js/4839.cd845b47.chunk.js": "./static/js/4839.cd845b47.chunk.js", + "static/js/3830.bdda307f.chunk.js": "./static/js/3830.bdda307f.chunk.js", + "static/js/9275.69a60a7c.chunk.js": "./static/js/9275.69a60a7c.chunk.js", + "static/js/8190.02056f3f.chunk.js": "./static/js/8190.02056f3f.chunk.js", + "static/js/7314.da174e5e.chunk.js": "./static/js/7314.da174e5e.chunk.js", + "static/js/7456.743391a4.chunk.js": "./static/js/7456.743391a4.chunk.js", + "static/css/5822.8e16189d.chunk.css": "./static/css/5822.8e16189d.chunk.css", + "static/js/5822.55acdd2b.chunk.js": "./static/js/5822.55acdd2b.chunk.js", + "static/js/2699.6f1c9c05.chunk.js": "./static/js/2699.6f1c9c05.chunk.js", + "static/js/5808.a4148012.chunk.js": "./static/js/5808.a4148012.chunk.js", + "static/js/1237.dbb13c2b.chunk.js": "./static/js/1237.dbb13c2b.chunk.js", + "static/js/189.108e9feb.chunk.js": "./static/js/189.108e9feb.chunk.js", + "static/css/2024.8e16189d.chunk.css": "./static/css/2024.8e16189d.chunk.css", + "static/js/2024.6baed5c5.chunk.js": "./static/js/2024.6baed5c5.chunk.js", + "static/css/9807.8e16189d.chunk.css": "./static/css/9807.8e16189d.chunk.css", + "static/js/9807.b3b1c965.chunk.js": "./static/js/9807.b3b1c965.chunk.js", + "static/js/3806.9b491d19.chunk.js": "./static/js/3806.9b491d19.chunk.js", + "static/js/8661.d0eec194.chunk.js": "./static/js/8661.d0eec194.chunk.js", + "static/js/2886.64395b76.chunk.js": "./static/js/2886.64395b76.chunk.js", + "static/js/4577.d5eda9f7.chunk.js": "./static/js/4577.d5eda9f7.chunk.js", + "static/js/5947.dda226b6.chunk.js": "./static/js/5947.dda226b6.chunk.js", + "static/js/4533.0533f737.chunk.js": "./static/js/4533.0533f737.chunk.js", + "static/js/6147.c07c0ae2.chunk.js": "./static/js/6147.c07c0ae2.chunk.js", + "static/js/2805.621131c8.chunk.js": "./static/js/2805.621131c8.chunk.js", "static/js/3143.e6a9621d.chunk.js": "./static/js/3143.e6a9621d.chunk.js", - "static/js/428.4625197b.chunk.js": "./static/js/428.4625197b.chunk.js", - "static/js/1069.57853a28.chunk.js": "./static/js/1069.57853a28.chunk.js", - "static/js/9080.9f8440be.chunk.js": "./static/js/9080.9f8440be.chunk.js", - "static/js/7551.8d7574b9.chunk.js": "./static/js/7551.8d7574b9.chunk.js", - "static/js/7950.4044ce3a.chunk.js": "./static/js/7950.4044ce3a.chunk.js", - "static/js/8967.9832e222.chunk.js": "./static/js/8967.9832e222.chunk.js", - "static/js/8961.1587a077.chunk.js": "./static/js/8961.1587a077.chunk.js", - "static/js/3967.6db0cf38.chunk.js": "./static/js/3967.6db0cf38.chunk.js", - "static/css/4084.16d04f59.chunk.css": "./static/css/4084.16d04f59.chunk.css", - "static/js/4084.44ec9dce.chunk.js": "./static/js/4084.44ec9dce.chunk.js", - "static/js/8394.c3b5a87f.chunk.js": "./static/js/8394.c3b5a87f.chunk.js", - "static/js/4109.379ba85e.chunk.js": "./static/js/4109.379ba85e.chunk.js", - "static/js/1140.5e370d17.chunk.js": "./static/js/1140.5e370d17.chunk.js", - "static/js/5961.95455f54.chunk.js": "./static/js/5961.95455f54.chunk.js", + "static/js/428.f1f3ca19.chunk.js": "./static/js/428.f1f3ca19.chunk.js", + "static/js/1069.771a8a37.chunk.js": "./static/js/1069.771a8a37.chunk.js", + "static/js/9080.f007894a.chunk.js": "./static/js/9080.f007894a.chunk.js", + "static/js/3276.cbbfa439.chunk.js": "./static/js/3276.cbbfa439.chunk.js", + "static/js/5591.992e2bda.chunk.js": "./static/js/5591.992e2bda.chunk.js", + "static/js/7551.0bf2079d.chunk.js": "./static/js/7551.0bf2079d.chunk.js", + "static/js/7950.4cb62868.chunk.js": "./static/js/7950.4cb62868.chunk.js", + "static/js/6597.fc1eafc4.chunk.js": "./static/js/6597.fc1eafc4.chunk.js", + "static/js/8961.2e01f3c6.chunk.js": "./static/js/8961.2e01f3c6.chunk.js", + "static/js/3967.e89c4131.chunk.js": "./static/js/3967.e89c4131.chunk.js", + "static/css/4084.8e16189d.chunk.css": "./static/css/4084.8e16189d.chunk.css", + "static/js/4084.3d9d8cab.chunk.js": "./static/js/4084.3d9d8cab.chunk.js", + "static/js/8394.aab97516.chunk.js": "./static/js/8394.aab97516.chunk.js", + "static/js/7664.bb12744a.chunk.js": "./static/js/7664.bb12744a.chunk.js", + "static/js/1140.35a12cb4.chunk.js": "./static/js/1140.35a12cb4.chunk.js", + "static/js/5961.975bb084.chunk.js": "./static/js/5961.975bb084.chunk.js", "static/js/6549.e0686e32.chunk.js": "./static/js/6549.e0686e32.chunk.js", - "static/js/7498.ca73ad94.chunk.js": "./static/js/7498.ca73ad94.chunk.js", - "static/js/9421.96205cad.chunk.js": "./static/js/9421.96205cad.chunk.js", - "static/js/5284.5dcf178e.chunk.js": "./static/js/5284.5dcf178e.chunk.js", - "static/js/4818.7391a4e4.chunk.js": "./static/js/4818.7391a4e4.chunk.js", - "static/js/2401.74634660.chunk.js": "./static/js/2401.74634660.chunk.js", - "static/css/8724.16d04f59.chunk.css": "./static/css/8724.16d04f59.chunk.css", - "static/js/8724.f7dbb7e5.chunk.js": "./static/js/8724.f7dbb7e5.chunk.js", - "static/js/2182.2e7a9981.chunk.js": "./static/js/2182.2e7a9981.chunk.js", + "static/js/7498.c395ccf1.chunk.js": "./static/js/7498.c395ccf1.chunk.js", + "static/js/9421.5cc40d43.chunk.js": "./static/js/9421.5cc40d43.chunk.js", + "static/js/5284.e06719cf.chunk.js": "./static/js/5284.e06719cf.chunk.js", + "static/js/4818.1f7ff2b7.chunk.js": "./static/js/4818.1f7ff2b7.chunk.js", + "static/js/2401.0638b608.chunk.js": "./static/js/2401.0638b608.chunk.js", + "static/css/8724.8e16189d.chunk.css": "./static/css/8724.8e16189d.chunk.css", + "static/js/8724.0c41b255.chunk.js": "./static/js/8724.0c41b255.chunk.js", + "static/js/2182.e3b6cc76.chunk.js": "./static/js/2182.e3b6cc76.chunk.js", "static/js/7764.3b798da3.chunk.js": "./static/js/7764.3b798da3.chunk.js", - "static/js/4220.4e3b3b58.chunk.js": "./static/js/4220.4e3b3b58.chunk.js", - "static/js/1719.06e59cd5.chunk.js": "./static/js/1719.06e59cd5.chunk.js", - "static/js/3320.73d7b61f.chunk.js": "./static/js/3320.73d7b61f.chunk.js", - "static/js/6645.eeff9b42.chunk.js": "./static/js/6645.eeff9b42.chunk.js", - "static/js/9923.25fa1a75.chunk.js": "./static/js/9923.25fa1a75.chunk.js", - "static/js/9586.c44d8f2b.chunk.js": "./static/js/9586.c44d8f2b.chunk.js", - "static/js/7261.a4f25607.chunk.js": "./static/js/7261.a4f25607.chunk.js", - "static/js/6436.94fc01ae.chunk.js": "./static/js/6436.94fc01ae.chunk.js", - "static/js/8343.246b38fd.chunk.js": "./static/js/8343.246b38fd.chunk.js", - "static/js/2841.3d33d6cd.chunk.js": "./static/js/2841.3d33d6cd.chunk.js", - "static/js/6167.657bf70b.chunk.js": "./static/js/6167.657bf70b.chunk.js", - "static/js/3698.1144caf6.chunk.js": "./static/js/3698.1144caf6.chunk.js", - "static/js/1971.6d62cf1b.chunk.js": "./static/js/1971.6d62cf1b.chunk.js", - "static/js/7346.f40bf7ca.chunk.js": "./static/js/7346.f40bf7ca.chunk.js", - "static/js/5144.4d802107.chunk.js": "./static/js/5144.4d802107.chunk.js", - "static/js/5125.df89f86d.chunk.js": "./static/js/5125.df89f86d.chunk.js", - "static/js/1973.652e15ff.chunk.js": "./static/js/1973.652e15ff.chunk.js", - "static/js/7187.911fa39a.chunk.js": "./static/js/7187.911fa39a.chunk.js", - "static/js/6173.7ae4f8dd.chunk.js": "./static/js/6173.7ae4f8dd.chunk.js", - "static/js/953.8e47f0fa.chunk.js": "./static/js/953.8e47f0fa.chunk.js", - "static/js/9924.0c2cdee6.chunk.js": "./static/js/9924.0c2cdee6.chunk.js", - "static/js/9193.840c0a00.chunk.js": "./static/js/9193.840c0a00.chunk.js", + "static/js/4220.9aea78f1.chunk.js": "./static/js/4220.9aea78f1.chunk.js", + "static/js/1719.c433d41f.chunk.js": "./static/js/1719.c433d41f.chunk.js", + "static/js/3320.3fb492c4.chunk.js": "./static/js/3320.3fb492c4.chunk.js", + "static/js/6645.c41c6009.chunk.js": "./static/js/6645.c41c6009.chunk.js", + "static/js/9923.67fe770d.chunk.js": "./static/js/9923.67fe770d.chunk.js", + "static/js/9586.f3d3466d.chunk.js": "./static/js/9586.f3d3466d.chunk.js", + "static/js/9125.a86e3119.chunk.js": "./static/js/9125.a86e3119.chunk.js", + "static/js/5781.206192b7.chunk.js": "./static/js/5781.206192b7.chunk.js", + "static/js/7261.ee9cc151.chunk.js": "./static/js/7261.ee9cc151.chunk.js", + "static/js/6436.7b0189de.chunk.js": "./static/js/6436.7b0189de.chunk.js", + "static/js/8343.c2929511.chunk.js": "./static/js/8343.c2929511.chunk.js", + "static/js/2841.a58d2a5d.chunk.js": "./static/js/2841.a58d2a5d.chunk.js", + "static/js/6167.fed9e5cf.chunk.js": "./static/js/6167.fed9e5cf.chunk.js", + "static/js/3698.928db215.chunk.js": "./static/js/3698.928db215.chunk.js", + "static/js/1971.899558fa.chunk.js": "./static/js/1971.899558fa.chunk.js", + "static/js/7346.efd507dc.chunk.js": "./static/js/7346.efd507dc.chunk.js", + "static/js/5144.392cff58.chunk.js": "./static/js/5144.392cff58.chunk.js", + "static/js/5125.58c2feff.chunk.js": "./static/js/5125.58c2feff.chunk.js", + "static/js/1973.e9142631.chunk.js": "./static/js/1973.e9142631.chunk.js", + "static/js/7187.968efbad.chunk.js": "./static/js/7187.968efbad.chunk.js", + "static/js/6173.afdc41b4.chunk.js": "./static/js/6173.afdc41b4.chunk.js", + "static/js/953.46121656.chunk.js": "./static/js/953.46121656.chunk.js", + "static/js/9193.47341a7f.chunk.js": "./static/js/9193.47341a7f.chunk.js", "static/js/7451.3135dd72.chunk.js": "./static/js/7451.3135dd72.chunk.js", - "static/css/9645.16d04f59.chunk.css": "./static/css/9645.16d04f59.chunk.css", - "static/js/9645.7e223ba8.chunk.js": "./static/js/9645.7e223ba8.chunk.js", - "static/js/4121.0a36aad4.chunk.js": "./static/js/4121.0a36aad4.chunk.js", - "static/js/609.911f7c3a.chunk.js": "./static/js/609.911f7c3a.chunk.js", - "static/js/3421.a52d7b4f.chunk.js": "./static/js/3421.a52d7b4f.chunk.js", - "static/js/2892.612b963a.chunk.js": "./static/js/2892.612b963a.chunk.js", - "static/js/7926.2a96a6b4.chunk.js": "./static/js/7926.2a96a6b4.chunk.js", - "static/js/6145.5fc6589e.chunk.js": "./static/js/6145.5fc6589e.chunk.js", - "static/css/3816.16d04f59.chunk.css": "./static/css/3816.16d04f59.chunk.css", - "static/js/3816.7dc2c7d2.chunk.js": "./static/js/3816.7dc2c7d2.chunk.js", - "static/js/2966.fed828cf.chunk.js": "./static/js/2966.fed828cf.chunk.js", - "static/js/4177.ff48eff7.chunk.js": "./static/js/4177.ff48eff7.chunk.js", - "static/js/9679.eb81d633.chunk.js": "./static/js/9679.eb81d633.chunk.js", + "static/js/9924.ba0c0a4a.chunk.js": "./static/js/9924.ba0c0a4a.chunk.js", + "static/css/9645.8e16189d.chunk.css": "./static/css/9645.8e16189d.chunk.css", + "static/js/9645.52a31d53.chunk.js": "./static/js/9645.52a31d53.chunk.js", + "static/js/4121.dc9cd38b.chunk.js": "./static/js/4121.dc9cd38b.chunk.js", + "static/js/609.01a74891.chunk.js": "./static/js/609.01a74891.chunk.js", + "static/js/3421.1c5efe0e.chunk.js": "./static/js/3421.1c5efe0e.chunk.js", + "static/js/2892.dedb4d14.chunk.js": "./static/js/2892.dedb4d14.chunk.js", + "static/js/7926.2532900d.chunk.js": "./static/js/7926.2532900d.chunk.js", + "static/js/6145.0f094527.chunk.js": "./static/js/6145.0f094527.chunk.js", + "static/css/3816.8e16189d.chunk.css": "./static/css/3816.8e16189d.chunk.css", + "static/js/3816.b73504ec.chunk.js": "./static/js/3816.b73504ec.chunk.js", + "static/js/2966.9c46726c.chunk.js": "./static/js/2966.9c46726c.chunk.js", + "static/js/4177.fd895511.chunk.js": "./static/js/4177.fd895511.chunk.js", + "static/js/9679.b9a553b7.chunk.js": "./static/js/9679.b9a553b7.chunk.js", "static/js/8333.97c188eb.chunk.js": "./static/js/8333.97c188eb.chunk.js", - "static/js/1711.669b8be7.chunk.js": "./static/js/1711.669b8be7.chunk.js", - "static/js/9.e9a15c48.chunk.js": "./static/js/9.e9a15c48.chunk.js", - "static/js/4487.8d3f76aa.chunk.js": "./static/js/4487.8d3f76aa.chunk.js", - "static/js/6866.170616fc.chunk.js": "./static/js/6866.170616fc.chunk.js", - "static/js/8564.da2da2d5.chunk.js": "./static/js/8564.da2da2d5.chunk.js", - "static/js/1666.d4e2b942.chunk.js": "./static/js/1666.d4e2b942.chunk.js", - "static/js/7007.8a078c5c.chunk.js": "./static/js/7007.8a078c5c.chunk.js", + "static/js/1711.755e1931.chunk.js": "./static/js/1711.755e1931.chunk.js", + "static/js/9.e2862ce4.chunk.js": "./static/js/9.e2862ce4.chunk.js", + "static/js/4487.c59869da.chunk.js": "./static/js/4487.c59869da.chunk.js", + "static/js/6866.d7d9be68.chunk.js": "./static/js/6866.d7d9be68.chunk.js", + "static/js/8564.b0794921.chunk.js": "./static/js/8564.b0794921.chunk.js", + "static/js/1666.29b376af.chunk.js": "./static/js/1666.29b376af.chunk.js", + "static/js/7007.aaee4953.chunk.js": "./static/js/7007.aaee4953.chunk.js", "static/js/14.25ecb28d.chunk.js": "./static/js/14.25ecb28d.chunk.js", "static/js/3152.d03e4df4.chunk.js": "./static/js/3152.d03e4df4.chunk.js", "static/js/5444.e8727da9.chunk.js": "./static/js/5444.e8727da9.chunk.js", @@ -122,155 +125,160 @@ "static/js/9998.1a613ce5.chunk.js": "./static/js/9998.1a613ce5.chunk.js", "static/js/9769.a2bfb4d7.chunk.js": "./static/js/9769.a2bfb4d7.chunk.js", "static/js/8954.00599ff1.chunk.js": "./static/js/8954.00599ff1.chunk.js", - "static/js/4837.98af4cfe.chunk.js": "./static/js/4837.98af4cfe.chunk.js", - "static/js/3020.3b2e782c.chunk.js": "./static/js/3020.3b2e782c.chunk.js", - "static/js/7248.1e0c4e19.chunk.js": "./static/js/7248.1e0c4e19.chunk.js", "static/js/2309.49be65c5.chunk.js": "./static/js/2309.49be65c5.chunk.js", + "static/js/7248.1e0c4e19.chunk.js": "./static/js/7248.1e0c4e19.chunk.js", "static/js/9056.41f0e489.chunk.js": "./static/js/9056.41f0e489.chunk.js", "static/js/3360.453f0701.chunk.js": "./static/js/3360.453f0701.chunk.js", - "static/js/8420.cf009fd2.chunk.js": "./static/js/8420.cf009fd2.chunk.js", - "static/js/1420.517f0e88.chunk.js": "./static/js/1420.517f0e88.chunk.js", + "static/js/4837.98af4cfe.chunk.js": "./static/js/4837.98af4cfe.chunk.js", + "static/js/3020.3b2e782c.chunk.js": "./static/js/3020.3b2e782c.chunk.js", + "static/js/3300.9b8f6257.chunk.js": "./static/js/3300.9b8f6257.chunk.js", + "static/js/4322.ddc888e0.chunk.js": "./static/js/4322.ddc888e0.chunk.js", "static/js/4817.2c511e72.chunk.js": "./static/js/4817.2c511e72.chunk.js", - "static/js/1233.9903fc82.chunk.js": "./static/js/1233.9903fc82.chunk.js", + "static/js/8420.dc98b56b.chunk.js": "./static/js/8420.dc98b56b.chunk.js", "static/js/3356.05b42758.chunk.js": "./static/js/3356.05b42758.chunk.js", - "static/js/8016.b0ab3b67.chunk.js": "./static/js/8016.b0ab3b67.chunk.js", - "static/js/5482.dcaee6b1.chunk.js": "./static/js/5482.dcaee6b1.chunk.js", - "static/js/8671.2728f1f2.chunk.js": "./static/js/8671.2728f1f2.chunk.js", + "static/js/8016.0758210e.chunk.js": "./static/js/8016.0758210e.chunk.js", + "static/js/5482.565ebb65.chunk.js": "./static/js/5482.565ebb65.chunk.js", + "static/js/1233.9903fc82.chunk.js": "./static/js/1233.9903fc82.chunk.js", + "static/js/7939.46ff2d0f.chunk.js": "./static/js/7939.46ff2d0f.chunk.js", "static/js/3538.60e98cef.chunk.js": "./static/js/3538.60e98cef.chunk.js", "static/js/4996.2e18711b.chunk.js": "./static/js/4996.2e18711b.chunk.js", - "static/js/7348.b037b952.chunk.js": "./static/js/7348.b037b952.chunk.js", - "static/js/2873.ae77af6d.chunk.js": "./static/js/2873.ae77af6d.chunk.js", + "static/js/7348.7a72b31f.chunk.js": "./static/js/7348.7a72b31f.chunk.js", "static/js/8708.70b62dd5.chunk.js": "./static/js/8708.70b62dd5.chunk.js", "static/js/7932.8974111a.chunk.js": "./static/js/7932.8974111a.chunk.js", "static/js/3383.ab285f5a.chunk.js": "./static/js/3383.ab285f5a.chunk.js", - "static/js/2594.77f64a1f.chunk.js": "./static/js/2594.77f64a1f.chunk.js", + "static/js/5795.d1ea50ec.chunk.js": "./static/js/5795.d1ea50ec.chunk.js", "static/js/3045.0dea1c04.chunk.js": "./static/js/3045.0dea1c04.chunk.js", "static/js/8750.02521688.chunk.js": "./static/js/8750.02521688.chunk.js", + "static/js/635.2854d4f5.chunk.js": "./static/js/635.2854d4f5.chunk.js", + "static/js/2417.105afd14.chunk.js": "./static/js/2417.105afd14.chunk.js", "static/js/938.8f6a5aa1.chunk.js": "./static/js/938.8f6a5aa1.chunk.js", "static/js/4105.4a4541e7.chunk.js": "./static/js/4105.4a4541e7.chunk.js", + "static/js/6430.7d5ec903.chunk.js": "./static/js/6430.7d5ec903.chunk.js", "static/js/9876.939f9165.chunk.js": "./static/js/9876.939f9165.chunk.js", - "static/js/7777.2be735aa.chunk.js": "./static/js/7777.2be735aa.chunk.js", - "static/js/2491.8a968cd0.chunk.js": "./static/js/2491.8a968cd0.chunk.js", - "static/js/7042.b193939a.chunk.js": "./static/js/7042.b193939a.chunk.js", - "static/js/3201.781acfe1.chunk.js": "./static/js/3201.781acfe1.chunk.js", - "static/js/7664.62484a7b.chunk.js": "./static/js/7664.62484a7b.chunk.js", - "static/js/825.1102a1fc.chunk.js": "./static/js/825.1102a1fc.chunk.js", - "static/js/6873.b692329a.chunk.js": "./static/js/6873.b692329a.chunk.js", - "static/js/3453.cadd9dca.chunk.js": "./static/js/3453.cadd9dca.chunk.js", - "static/js/2464.0db9c672.chunk.js": "./static/js/2464.0db9c672.chunk.js", + "static/js/8174.b2493b0b.chunk.js": "./static/js/8174.b2493b0b.chunk.js", + "static/js/2491.70293bae.chunk.js": "./static/js/2491.70293bae.chunk.js", + "static/js/5339.77ff74c9.chunk.js": "./static/js/5339.77ff74c9.chunk.js", + "static/js/825.3a314578.chunk.js": "./static/js/825.3a314578.chunk.js", + "static/js/4960.4944962a.chunk.js": "./static/js/4960.4944962a.chunk.js", + "static/js/6873.1b3165f5.chunk.js": "./static/js/6873.1b3165f5.chunk.js", + "static/js/3453.75ca1d21.chunk.js": "./static/js/3453.75ca1d21.chunk.js", + "static/js/2464.f44ab309.chunk.js": "./static/js/2464.f44ab309.chunk.js", "index.html": "./index.html", "main.c4c1effe.css.map": "./static/css/main.c4c1effe.css.map", - "main.6530999d.js.map": "./static/js/main.6530999d.js.map", - "2178.7830bed4.chunk.js.map": "./static/js/2178.7830bed4.chunk.js.map", + "main.26dfcd6f.js.map": "./static/js/main.26dfcd6f.js.map", + "2178.70c131e4.chunk.js.map": "./static/js/2178.70c131e4.chunk.js.map", "5282.e51b8c66.chunk.js.map": "./static/js/5282.e51b8c66.chunk.js.map", - "1409.a1f80372.chunk.js.map": "./static/js/1409.a1f80372.chunk.js.map", - "9560.9c2106d1.chunk.js.map": "./static/js/9560.9c2106d1.chunk.js.map", - "4247.cc0f88b2.chunk.js.map": "./static/js/4247.cc0f88b2.chunk.js.map", - "9330.c4a20f8b.chunk.js.map": "./static/js/9330.c4a20f8b.chunk.js.map", - "4869.a9280d8a.chunk.js.map": "./static/js/4869.a9280d8a.chunk.js.map", - "2202.516dc033.chunk.js.map": "./static/js/2202.516dc033.chunk.js.map", - "7436.ffc144e9.chunk.js.map": "./static/js/7436.ffc144e9.chunk.js.map", - "1056.40bdeca6.chunk.js.map": "./static/js/1056.40bdeca6.chunk.js.map", - "9779.dba4659a.chunk.js.map": "./static/js/9779.dba4659a.chunk.js.map", - "3617.bf15040b.chunk.js.map": "./static/js/3617.bf15040b.chunk.js.map", - "7274.04d18d5b.chunk.js.map": "./static/js/7274.04d18d5b.chunk.js.map", - "7842.ec2ac847.chunk.js.map": "./static/js/7842.ec2ac847.chunk.js.map", - "4745.50faf863.chunk.js.map": "./static/js/4745.50faf863.chunk.js.map", - "4515.56df16f6.chunk.js.map": "./static/js/4515.56df16f6.chunk.js.map", - "8259.d84a0972.chunk.js.map": "./static/js/8259.d84a0972.chunk.js.map", - "4839.ed81765f.chunk.js.map": "./static/js/4839.ed81765f.chunk.js.map", - "8853.f3495da5.chunk.js.map": "./static/js/8853.f3495da5.chunk.js.map", - "9275.78534658.chunk.js.map": "./static/js/9275.78534658.chunk.js.map", - "3589.12c4bc4a.chunk.js.map": "./static/js/3589.12c4bc4a.chunk.js.map", - "7314.1f372dfa.chunk.js.map": "./static/js/7314.1f372dfa.chunk.js.map", - "7456.b088e214.chunk.js.map": "./static/js/7456.b088e214.chunk.js.map", - "5673.16d04f59.chunk.css.map": "./static/css/5673.16d04f59.chunk.css.map", - "5673.7958d7f7.chunk.js.map": "./static/js/5673.7958d7f7.chunk.js.map", - "2699.9e1fe660.chunk.js.map": "./static/js/2699.9e1fe660.chunk.js.map", - "5808.a1b11c6c.chunk.js.map": "./static/js/5808.a1b11c6c.chunk.js.map", - "1237.5cfe4b14.chunk.js.map": "./static/js/1237.5cfe4b14.chunk.js.map", - "8503.e5a8b0ef.chunk.js.map": "./static/js/8503.e5a8b0ef.chunk.js.map", - "2024.16d04f59.chunk.css.map": "./static/css/2024.16d04f59.chunk.css.map", - "2024.6d844dd2.chunk.js.map": "./static/js/2024.6d844dd2.chunk.js.map", - "9807.16d04f59.chunk.css.map": "./static/css/9807.16d04f59.chunk.css.map", - "9807.6f337230.chunk.js.map": "./static/js/9807.6f337230.chunk.js.map", - "3806.021fe081.chunk.js.map": "./static/js/3806.021fe081.chunk.js.map", - "8562.158d427c.chunk.js.map": "./static/js/8562.158d427c.chunk.js.map", - "2886.e13fac7c.chunk.js.map": "./static/js/2886.e13fac7c.chunk.js.map", - "4577.d0f37cfd.chunk.js.map": "./static/js/4577.d0f37cfd.chunk.js.map", - "5947.59012b92.chunk.js.map": "./static/js/5947.59012b92.chunk.js.map", - "4533.d9c6db0b.chunk.js.map": "./static/js/4533.d9c6db0b.chunk.js.map", - "6147.64405f65.chunk.js.map": "./static/js/6147.64405f65.chunk.js.map", - "2805.fa3b80ee.chunk.js.map": "./static/js/2805.fa3b80ee.chunk.js.map", + "2818.d6147732.chunk.js.map": "./static/js/2818.d6147732.chunk.js.map", + "9560.1c7c393b.chunk.js.map": "./static/js/9560.1c7c393b.chunk.js.map", + "9661.68a3c872.chunk.js.map": "./static/js/9661.68a3c872.chunk.js.map", + "9330.33984e73.chunk.js.map": "./static/js/9330.33984e73.chunk.js.map", + "4869.58db9f45.chunk.js.map": "./static/js/4869.58db9f45.chunk.js.map", + "7436.c5785c09.chunk.js.map": "./static/js/7436.c5785c09.chunk.js.map", + "1056.369ba3ab.chunk.js.map": "./static/js/1056.369ba3ab.chunk.js.map", + "9779.23164a07.chunk.js.map": "./static/js/9779.23164a07.chunk.js.map", + "3617.ef0bffae.chunk.js.map": "./static/js/3617.ef0bffae.chunk.js.map", + "7274.a51a45fc.chunk.js.map": "./static/js/7274.a51a45fc.chunk.js.map", + "7842.3103d8de.chunk.js.map": "./static/js/7842.3103d8de.chunk.js.map", + "4745.d3b72d46.chunk.js.map": "./static/js/4745.d3b72d46.chunk.js.map", + "4515.a137eba4.chunk.js.map": "./static/js/4515.a137eba4.chunk.js.map", + "8259.162d3a40.chunk.js.map": "./static/js/8259.162d3a40.chunk.js.map", + "4839.cd845b47.chunk.js.map": "./static/js/4839.cd845b47.chunk.js.map", + "3830.bdda307f.chunk.js.map": "./static/js/3830.bdda307f.chunk.js.map", + "9275.69a60a7c.chunk.js.map": "./static/js/9275.69a60a7c.chunk.js.map", + "8190.02056f3f.chunk.js.map": "./static/js/8190.02056f3f.chunk.js.map", + "7314.da174e5e.chunk.js.map": "./static/js/7314.da174e5e.chunk.js.map", + "7456.743391a4.chunk.js.map": "./static/js/7456.743391a4.chunk.js.map", + "5822.8e16189d.chunk.css.map": "./static/css/5822.8e16189d.chunk.css.map", + "5822.55acdd2b.chunk.js.map": "./static/js/5822.55acdd2b.chunk.js.map", + "2699.6f1c9c05.chunk.js.map": "./static/js/2699.6f1c9c05.chunk.js.map", + "5808.a4148012.chunk.js.map": "./static/js/5808.a4148012.chunk.js.map", + "1237.dbb13c2b.chunk.js.map": "./static/js/1237.dbb13c2b.chunk.js.map", + "189.108e9feb.chunk.js.map": "./static/js/189.108e9feb.chunk.js.map", + "2024.8e16189d.chunk.css.map": "./static/css/2024.8e16189d.chunk.css.map", + "2024.6baed5c5.chunk.js.map": "./static/js/2024.6baed5c5.chunk.js.map", + "9807.8e16189d.chunk.css.map": "./static/css/9807.8e16189d.chunk.css.map", + "9807.b3b1c965.chunk.js.map": "./static/js/9807.b3b1c965.chunk.js.map", + "3806.9b491d19.chunk.js.map": "./static/js/3806.9b491d19.chunk.js.map", + "8661.d0eec194.chunk.js.map": "./static/js/8661.d0eec194.chunk.js.map", + "2886.64395b76.chunk.js.map": "./static/js/2886.64395b76.chunk.js.map", + "4577.d5eda9f7.chunk.js.map": "./static/js/4577.d5eda9f7.chunk.js.map", + "5947.dda226b6.chunk.js.map": "./static/js/5947.dda226b6.chunk.js.map", + "4533.0533f737.chunk.js.map": "./static/js/4533.0533f737.chunk.js.map", + "6147.c07c0ae2.chunk.js.map": "./static/js/6147.c07c0ae2.chunk.js.map", + "2805.621131c8.chunk.js.map": "./static/js/2805.621131c8.chunk.js.map", "3143.e6a9621d.chunk.js.map": "./static/js/3143.e6a9621d.chunk.js.map", - "428.4625197b.chunk.js.map": "./static/js/428.4625197b.chunk.js.map", - "1069.57853a28.chunk.js.map": "./static/js/1069.57853a28.chunk.js.map", - "9080.9f8440be.chunk.js.map": "./static/js/9080.9f8440be.chunk.js.map", - "7551.8d7574b9.chunk.js.map": "./static/js/7551.8d7574b9.chunk.js.map", - "7950.4044ce3a.chunk.js.map": "./static/js/7950.4044ce3a.chunk.js.map", - "8967.9832e222.chunk.js.map": "./static/js/8967.9832e222.chunk.js.map", - "8961.1587a077.chunk.js.map": "./static/js/8961.1587a077.chunk.js.map", - "3967.6db0cf38.chunk.js.map": "./static/js/3967.6db0cf38.chunk.js.map", - "4084.16d04f59.chunk.css.map": "./static/css/4084.16d04f59.chunk.css.map", - "4084.44ec9dce.chunk.js.map": "./static/js/4084.44ec9dce.chunk.js.map", - "8394.c3b5a87f.chunk.js.map": "./static/js/8394.c3b5a87f.chunk.js.map", - "4109.379ba85e.chunk.js.map": "./static/js/4109.379ba85e.chunk.js.map", - "1140.5e370d17.chunk.js.map": "./static/js/1140.5e370d17.chunk.js.map", - "5961.95455f54.chunk.js.map": "./static/js/5961.95455f54.chunk.js.map", + "428.f1f3ca19.chunk.js.map": "./static/js/428.f1f3ca19.chunk.js.map", + "1069.771a8a37.chunk.js.map": "./static/js/1069.771a8a37.chunk.js.map", + "9080.f007894a.chunk.js.map": "./static/js/9080.f007894a.chunk.js.map", + "3276.cbbfa439.chunk.js.map": "./static/js/3276.cbbfa439.chunk.js.map", + "5591.992e2bda.chunk.js.map": "./static/js/5591.992e2bda.chunk.js.map", + "7551.0bf2079d.chunk.js.map": "./static/js/7551.0bf2079d.chunk.js.map", + "7950.4cb62868.chunk.js.map": "./static/js/7950.4cb62868.chunk.js.map", + "6597.fc1eafc4.chunk.js.map": "./static/js/6597.fc1eafc4.chunk.js.map", + "8961.2e01f3c6.chunk.js.map": "./static/js/8961.2e01f3c6.chunk.js.map", + "3967.e89c4131.chunk.js.map": "./static/js/3967.e89c4131.chunk.js.map", + "4084.8e16189d.chunk.css.map": "./static/css/4084.8e16189d.chunk.css.map", + "4084.3d9d8cab.chunk.js.map": "./static/js/4084.3d9d8cab.chunk.js.map", + "8394.aab97516.chunk.js.map": "./static/js/8394.aab97516.chunk.js.map", + "7664.bb12744a.chunk.js.map": "./static/js/7664.bb12744a.chunk.js.map", + "1140.35a12cb4.chunk.js.map": "./static/js/1140.35a12cb4.chunk.js.map", + "5961.975bb084.chunk.js.map": "./static/js/5961.975bb084.chunk.js.map", "6549.e0686e32.chunk.js.map": "./static/js/6549.e0686e32.chunk.js.map", - "7498.ca73ad94.chunk.js.map": "./static/js/7498.ca73ad94.chunk.js.map", - "9421.96205cad.chunk.js.map": "./static/js/9421.96205cad.chunk.js.map", - "5284.5dcf178e.chunk.js.map": "./static/js/5284.5dcf178e.chunk.js.map", - "4818.7391a4e4.chunk.js.map": "./static/js/4818.7391a4e4.chunk.js.map", - "2401.74634660.chunk.js.map": "./static/js/2401.74634660.chunk.js.map", - "8724.16d04f59.chunk.css.map": "./static/css/8724.16d04f59.chunk.css.map", - "8724.f7dbb7e5.chunk.js.map": "./static/js/8724.f7dbb7e5.chunk.js.map", - "2182.2e7a9981.chunk.js.map": "./static/js/2182.2e7a9981.chunk.js.map", + "7498.c395ccf1.chunk.js.map": "./static/js/7498.c395ccf1.chunk.js.map", + "9421.5cc40d43.chunk.js.map": "./static/js/9421.5cc40d43.chunk.js.map", + "5284.e06719cf.chunk.js.map": "./static/js/5284.e06719cf.chunk.js.map", + "4818.1f7ff2b7.chunk.js.map": "./static/js/4818.1f7ff2b7.chunk.js.map", + "2401.0638b608.chunk.js.map": "./static/js/2401.0638b608.chunk.js.map", + "8724.8e16189d.chunk.css.map": "./static/css/8724.8e16189d.chunk.css.map", + "8724.0c41b255.chunk.js.map": "./static/js/8724.0c41b255.chunk.js.map", + "2182.e3b6cc76.chunk.js.map": "./static/js/2182.e3b6cc76.chunk.js.map", "7764.3b798da3.chunk.js.map": "./static/js/7764.3b798da3.chunk.js.map", - "4220.4e3b3b58.chunk.js.map": "./static/js/4220.4e3b3b58.chunk.js.map", - "1719.06e59cd5.chunk.js.map": "./static/js/1719.06e59cd5.chunk.js.map", - "3320.73d7b61f.chunk.js.map": "./static/js/3320.73d7b61f.chunk.js.map", - "6645.eeff9b42.chunk.js.map": "./static/js/6645.eeff9b42.chunk.js.map", - "9923.25fa1a75.chunk.js.map": "./static/js/9923.25fa1a75.chunk.js.map", - "9586.c44d8f2b.chunk.js.map": "./static/js/9586.c44d8f2b.chunk.js.map", - "7261.a4f25607.chunk.js.map": "./static/js/7261.a4f25607.chunk.js.map", - "6436.94fc01ae.chunk.js.map": "./static/js/6436.94fc01ae.chunk.js.map", - "8343.246b38fd.chunk.js.map": "./static/js/8343.246b38fd.chunk.js.map", - "2841.3d33d6cd.chunk.js.map": "./static/js/2841.3d33d6cd.chunk.js.map", - "6167.657bf70b.chunk.js.map": "./static/js/6167.657bf70b.chunk.js.map", - "3698.1144caf6.chunk.js.map": "./static/js/3698.1144caf6.chunk.js.map", - "1971.6d62cf1b.chunk.js.map": "./static/js/1971.6d62cf1b.chunk.js.map", - "7346.f40bf7ca.chunk.js.map": "./static/js/7346.f40bf7ca.chunk.js.map", - "5144.4d802107.chunk.js.map": "./static/js/5144.4d802107.chunk.js.map", - "5125.df89f86d.chunk.js.map": "./static/js/5125.df89f86d.chunk.js.map", - "1973.652e15ff.chunk.js.map": "./static/js/1973.652e15ff.chunk.js.map", - "7187.911fa39a.chunk.js.map": "./static/js/7187.911fa39a.chunk.js.map", - "6173.7ae4f8dd.chunk.js.map": "./static/js/6173.7ae4f8dd.chunk.js.map", - "953.8e47f0fa.chunk.js.map": "./static/js/953.8e47f0fa.chunk.js.map", - "9924.0c2cdee6.chunk.js.map": "./static/js/9924.0c2cdee6.chunk.js.map", - "9193.840c0a00.chunk.js.map": "./static/js/9193.840c0a00.chunk.js.map", + "4220.9aea78f1.chunk.js.map": "./static/js/4220.9aea78f1.chunk.js.map", + "1719.c433d41f.chunk.js.map": "./static/js/1719.c433d41f.chunk.js.map", + "3320.3fb492c4.chunk.js.map": "./static/js/3320.3fb492c4.chunk.js.map", + "6645.c41c6009.chunk.js.map": "./static/js/6645.c41c6009.chunk.js.map", + "9923.67fe770d.chunk.js.map": "./static/js/9923.67fe770d.chunk.js.map", + "9586.f3d3466d.chunk.js.map": "./static/js/9586.f3d3466d.chunk.js.map", + "9125.a86e3119.chunk.js.map": "./static/js/9125.a86e3119.chunk.js.map", + "5781.206192b7.chunk.js.map": "./static/js/5781.206192b7.chunk.js.map", + "7261.ee9cc151.chunk.js.map": "./static/js/7261.ee9cc151.chunk.js.map", + "6436.7b0189de.chunk.js.map": "./static/js/6436.7b0189de.chunk.js.map", + "8343.c2929511.chunk.js.map": "./static/js/8343.c2929511.chunk.js.map", + "2841.a58d2a5d.chunk.js.map": "./static/js/2841.a58d2a5d.chunk.js.map", + "6167.fed9e5cf.chunk.js.map": "./static/js/6167.fed9e5cf.chunk.js.map", + "3698.928db215.chunk.js.map": "./static/js/3698.928db215.chunk.js.map", + "1971.899558fa.chunk.js.map": "./static/js/1971.899558fa.chunk.js.map", + "7346.efd507dc.chunk.js.map": "./static/js/7346.efd507dc.chunk.js.map", + "5144.392cff58.chunk.js.map": "./static/js/5144.392cff58.chunk.js.map", + "5125.58c2feff.chunk.js.map": "./static/js/5125.58c2feff.chunk.js.map", + "1973.e9142631.chunk.js.map": "./static/js/1973.e9142631.chunk.js.map", + "7187.968efbad.chunk.js.map": "./static/js/7187.968efbad.chunk.js.map", + "6173.afdc41b4.chunk.js.map": "./static/js/6173.afdc41b4.chunk.js.map", + "953.46121656.chunk.js.map": "./static/js/953.46121656.chunk.js.map", + "9193.47341a7f.chunk.js.map": "./static/js/9193.47341a7f.chunk.js.map", "7451.3135dd72.chunk.js.map": "./static/js/7451.3135dd72.chunk.js.map", - "9645.16d04f59.chunk.css.map": "./static/css/9645.16d04f59.chunk.css.map", - "9645.7e223ba8.chunk.js.map": "./static/js/9645.7e223ba8.chunk.js.map", - "4121.0a36aad4.chunk.js.map": "./static/js/4121.0a36aad4.chunk.js.map", - "609.911f7c3a.chunk.js.map": "./static/js/609.911f7c3a.chunk.js.map", - "3421.a52d7b4f.chunk.js.map": "./static/js/3421.a52d7b4f.chunk.js.map", - "2892.612b963a.chunk.js.map": "./static/js/2892.612b963a.chunk.js.map", - "7926.2a96a6b4.chunk.js.map": "./static/js/7926.2a96a6b4.chunk.js.map", - "6145.5fc6589e.chunk.js.map": "./static/js/6145.5fc6589e.chunk.js.map", - "3816.16d04f59.chunk.css.map": "./static/css/3816.16d04f59.chunk.css.map", - "3816.7dc2c7d2.chunk.js.map": "./static/js/3816.7dc2c7d2.chunk.js.map", - "2966.fed828cf.chunk.js.map": "./static/js/2966.fed828cf.chunk.js.map", - "4177.ff48eff7.chunk.js.map": "./static/js/4177.ff48eff7.chunk.js.map", - "9679.eb81d633.chunk.js.map": "./static/js/9679.eb81d633.chunk.js.map", + "9924.ba0c0a4a.chunk.js.map": "./static/js/9924.ba0c0a4a.chunk.js.map", + "9645.8e16189d.chunk.css.map": "./static/css/9645.8e16189d.chunk.css.map", + "9645.52a31d53.chunk.js.map": "./static/js/9645.52a31d53.chunk.js.map", + "4121.dc9cd38b.chunk.js.map": "./static/js/4121.dc9cd38b.chunk.js.map", + "609.01a74891.chunk.js.map": "./static/js/609.01a74891.chunk.js.map", + "3421.1c5efe0e.chunk.js.map": "./static/js/3421.1c5efe0e.chunk.js.map", + "2892.dedb4d14.chunk.js.map": "./static/js/2892.dedb4d14.chunk.js.map", + "7926.2532900d.chunk.js.map": "./static/js/7926.2532900d.chunk.js.map", + "6145.0f094527.chunk.js.map": "./static/js/6145.0f094527.chunk.js.map", + "3816.8e16189d.chunk.css.map": "./static/css/3816.8e16189d.chunk.css.map", + "3816.b73504ec.chunk.js.map": "./static/js/3816.b73504ec.chunk.js.map", + "2966.9c46726c.chunk.js.map": "./static/js/2966.9c46726c.chunk.js.map", + "4177.fd895511.chunk.js.map": "./static/js/4177.fd895511.chunk.js.map", + "9679.b9a553b7.chunk.js.map": "./static/js/9679.b9a553b7.chunk.js.map", "8333.97c188eb.chunk.js.map": "./static/js/8333.97c188eb.chunk.js.map", - "1711.669b8be7.chunk.js.map": "./static/js/1711.669b8be7.chunk.js.map", - "9.e9a15c48.chunk.js.map": "./static/js/9.e9a15c48.chunk.js.map", - "4487.8d3f76aa.chunk.js.map": "./static/js/4487.8d3f76aa.chunk.js.map", - "6866.170616fc.chunk.js.map": "./static/js/6866.170616fc.chunk.js.map", - "8564.da2da2d5.chunk.js.map": "./static/js/8564.da2da2d5.chunk.js.map", - "1666.d4e2b942.chunk.js.map": "./static/js/1666.d4e2b942.chunk.js.map", - "7007.8a078c5c.chunk.js.map": "./static/js/7007.8a078c5c.chunk.js.map", + "1711.755e1931.chunk.js.map": "./static/js/1711.755e1931.chunk.js.map", + "9.e2862ce4.chunk.js.map": "./static/js/9.e2862ce4.chunk.js.map", + "4487.c59869da.chunk.js.map": "./static/js/4487.c59869da.chunk.js.map", + "6866.d7d9be68.chunk.js.map": "./static/js/6866.d7d9be68.chunk.js.map", + "8564.b0794921.chunk.js.map": "./static/js/8564.b0794921.chunk.js.map", + "1666.29b376af.chunk.js.map": "./static/js/1666.29b376af.chunk.js.map", + "7007.aaee4953.chunk.js.map": "./static/js/7007.aaee4953.chunk.js.map", "14.25ecb28d.chunk.js.map": "./static/js/14.25ecb28d.chunk.js.map", "3152.d03e4df4.chunk.js.map": "./static/js/3152.d03e4df4.chunk.js.map", "5444.e8727da9.chunk.js.map": "./static/js/5444.e8727da9.chunk.js.map", @@ -281,45 +289,47 @@ "9998.1a613ce5.chunk.js.map": "./static/js/9998.1a613ce5.chunk.js.map", "9769.a2bfb4d7.chunk.js.map": "./static/js/9769.a2bfb4d7.chunk.js.map", "8954.00599ff1.chunk.js.map": "./static/js/8954.00599ff1.chunk.js.map", - "4837.98af4cfe.chunk.js.map": "./static/js/4837.98af4cfe.chunk.js.map", - "3020.3b2e782c.chunk.js.map": "./static/js/3020.3b2e782c.chunk.js.map", - "7248.1e0c4e19.chunk.js.map": "./static/js/7248.1e0c4e19.chunk.js.map", "2309.49be65c5.chunk.js.map": "./static/js/2309.49be65c5.chunk.js.map", + "7248.1e0c4e19.chunk.js.map": "./static/js/7248.1e0c4e19.chunk.js.map", "9056.41f0e489.chunk.js.map": "./static/js/9056.41f0e489.chunk.js.map", "3360.453f0701.chunk.js.map": "./static/js/3360.453f0701.chunk.js.map", - "8420.cf009fd2.chunk.js.map": "./static/js/8420.cf009fd2.chunk.js.map", - "1420.517f0e88.chunk.js.map": "./static/js/1420.517f0e88.chunk.js.map", + "4837.98af4cfe.chunk.js.map": "./static/js/4837.98af4cfe.chunk.js.map", + "3020.3b2e782c.chunk.js.map": "./static/js/3020.3b2e782c.chunk.js.map", + "3300.9b8f6257.chunk.js.map": "./static/js/3300.9b8f6257.chunk.js.map", + "4322.ddc888e0.chunk.js.map": "./static/js/4322.ddc888e0.chunk.js.map", "4817.2c511e72.chunk.js.map": "./static/js/4817.2c511e72.chunk.js.map", - "1233.9903fc82.chunk.js.map": "./static/js/1233.9903fc82.chunk.js.map", + "8420.dc98b56b.chunk.js.map": "./static/js/8420.dc98b56b.chunk.js.map", "3356.05b42758.chunk.js.map": "./static/js/3356.05b42758.chunk.js.map", - "8016.b0ab3b67.chunk.js.map": "./static/js/8016.b0ab3b67.chunk.js.map", - "5482.dcaee6b1.chunk.js.map": "./static/js/5482.dcaee6b1.chunk.js.map", - "8671.2728f1f2.chunk.js.map": "./static/js/8671.2728f1f2.chunk.js.map", + "8016.0758210e.chunk.js.map": "./static/js/8016.0758210e.chunk.js.map", + "5482.565ebb65.chunk.js.map": "./static/js/5482.565ebb65.chunk.js.map", + "1233.9903fc82.chunk.js.map": "./static/js/1233.9903fc82.chunk.js.map", + "7939.46ff2d0f.chunk.js.map": "./static/js/7939.46ff2d0f.chunk.js.map", "3538.60e98cef.chunk.js.map": "./static/js/3538.60e98cef.chunk.js.map", "4996.2e18711b.chunk.js.map": "./static/js/4996.2e18711b.chunk.js.map", - "7348.b037b952.chunk.js.map": "./static/js/7348.b037b952.chunk.js.map", - "2873.ae77af6d.chunk.js.map": "./static/js/2873.ae77af6d.chunk.js.map", + "7348.7a72b31f.chunk.js.map": "./static/js/7348.7a72b31f.chunk.js.map", "8708.70b62dd5.chunk.js.map": "./static/js/8708.70b62dd5.chunk.js.map", "7932.8974111a.chunk.js.map": "./static/js/7932.8974111a.chunk.js.map", "3383.ab285f5a.chunk.js.map": "./static/js/3383.ab285f5a.chunk.js.map", - "2594.77f64a1f.chunk.js.map": "./static/js/2594.77f64a1f.chunk.js.map", + "5795.d1ea50ec.chunk.js.map": "./static/js/5795.d1ea50ec.chunk.js.map", "3045.0dea1c04.chunk.js.map": "./static/js/3045.0dea1c04.chunk.js.map", "8750.02521688.chunk.js.map": "./static/js/8750.02521688.chunk.js.map", + "635.2854d4f5.chunk.js.map": "./static/js/635.2854d4f5.chunk.js.map", + "2417.105afd14.chunk.js.map": "./static/js/2417.105afd14.chunk.js.map", "938.8f6a5aa1.chunk.js.map": "./static/js/938.8f6a5aa1.chunk.js.map", "4105.4a4541e7.chunk.js.map": "./static/js/4105.4a4541e7.chunk.js.map", + "6430.7d5ec903.chunk.js.map": "./static/js/6430.7d5ec903.chunk.js.map", "9876.939f9165.chunk.js.map": "./static/js/9876.939f9165.chunk.js.map", - "7777.2be735aa.chunk.js.map": "./static/js/7777.2be735aa.chunk.js.map", - "2491.8a968cd0.chunk.js.map": "./static/js/2491.8a968cd0.chunk.js.map", - "7042.b193939a.chunk.js.map": "./static/js/7042.b193939a.chunk.js.map", - "3201.781acfe1.chunk.js.map": "./static/js/3201.781acfe1.chunk.js.map", - "7664.62484a7b.chunk.js.map": "./static/js/7664.62484a7b.chunk.js.map", - "825.1102a1fc.chunk.js.map": "./static/js/825.1102a1fc.chunk.js.map", - "6873.b692329a.chunk.js.map": "./static/js/6873.b692329a.chunk.js.map", - "3453.cadd9dca.chunk.js.map": "./static/js/3453.cadd9dca.chunk.js.map", - "2464.0db9c672.chunk.js.map": "./static/js/2464.0db9c672.chunk.js.map" + "8174.b2493b0b.chunk.js.map": "./static/js/8174.b2493b0b.chunk.js.map", + "2491.70293bae.chunk.js.map": "./static/js/2491.70293bae.chunk.js.map", + "5339.77ff74c9.chunk.js.map": "./static/js/5339.77ff74c9.chunk.js.map", + "825.3a314578.chunk.js.map": "./static/js/825.3a314578.chunk.js.map", + "4960.4944962a.chunk.js.map": "./static/js/4960.4944962a.chunk.js.map", + "6873.1b3165f5.chunk.js.map": "./static/js/6873.1b3165f5.chunk.js.map", + "3453.75ca1d21.chunk.js.map": "./static/js/3453.75ca1d21.chunk.js.map", + "2464.f44ab309.chunk.js.map": "./static/js/2464.f44ab309.chunk.js.map" }, "entrypoints": [ "static/css/main.c4c1effe.css", - "static/js/main.6530999d.js" + "static/js/main.26dfcd6f.js" ] } \ No newline at end of file diff --git a/portal-ui/build/index.html b/portal-ui/build/index.html index f801c0416..2650e3c1d 100644 --- a/portal-ui/build/index.html +++ b/portal-ui/build/index.html @@ -1 +1 @@ -MinIO Console
\ No newline at end of file +MinIO Console
\ No newline at end of file diff --git a/portal-ui/build/static/css/2024.16d04f59.chunk.css b/portal-ui/build/static/css/2024.8e16189d.chunk.css similarity index 96% rename from portal-ui/build/static/css/2024.16d04f59.chunk.css rename to portal-ui/build/static/css/2024.8e16189d.chunk.css index 58bb4a84b..5f1d8506b 100644 --- a/portal-ui/build/static/css/2024.16d04f59.chunk.css +++ b/portal-ui/build/static/css/2024.8e16189d.chunk.css @@ -1,2 +1,2 @@ .cm-s-dracula.CodeMirror,.cm-s-dracula .CodeMirror-gutters{background-color:#282a36!important;border:none;color:#f8f8f2!important}.cm-s-dracula .CodeMirror-gutters{color:#282a36}.cm-s-dracula .CodeMirror-cursor{border-left:thin solid #f8f8f0}.cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.cm-s-dracula .CodeMirror-selected{background:hsla(0,0%,100%,.1)}.cm-s-dracula .CodeMirror-line::selection,.cm-s-dracula .CodeMirror-line>span::selection,.cm-s-dracula .CodeMirror-line>span>span::selection{background:hsla(0,0%,100%,.1)}.cm-s-dracula .CodeMirror-line::-moz-selection,.cm-s-dracula .CodeMirror-line>span::-moz-selection,.cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:hsla(0,0%,100%,.1)}.cm-s-dracula span.cm-comment{color:#6272a4}.cm-s-dracula span.cm-string,.cm-s-dracula span.cm-string-2{color:#f1fa8c}.cm-s-dracula span.cm-number{color:#bd93f9}.cm-s-dracula span.cm-variable{color:#50fa7b}.cm-s-dracula span.cm-variable-2{color:#fff}.cm-s-dracula span.cm-def{color:#50fa7b}.cm-s-dracula span.cm-keyword,.cm-s-dracula span.cm-operator{color:#ff79c6}.cm-s-dracula span.cm-atom{color:#bd93f9}.cm-s-dracula span.cm-meta{color:#f8f8f2}.cm-s-dracula span.cm-tag{color:#ff79c6}.cm-s-dracula span.cm-attribute,.cm-s-dracula span.cm-qualifier{color:#50fa7b}.cm-s-dracula span.cm-property{color:#66d9ef}.cm-s-dracula span.cm-builtin{color:#50fa7b}.cm-s-dracula span.cm-type,.cm-s-dracula span.cm-variable-3{color:#ffb86c}.cm-s-dracula .CodeMirror-activeline-background{background:hsla(0,0%,100%,.1)}.cm-s-dracula .CodeMirror-matchingbracket{color:#fff!important;text-decoration:underline} -/*# sourceMappingURL=2024.16d04f59.chunk.css.map*/ \ No newline at end of file +/*# sourceMappingURL=2024.8e16189d.chunk.css.map*/ \ No newline at end of file diff --git a/portal-ui/build/static/css/4084.16d04f59.chunk.css.map b/portal-ui/build/static/css/2024.8e16189d.chunk.css.map similarity index 97% rename from portal-ui/build/static/css/4084.16d04f59.chunk.css.map rename to portal-ui/build/static/css/2024.8e16189d.chunk.css.map index b3ba23db4..48d89a1cd 100644 --- a/portal-ui/build/static/css/4084.16d04f59.chunk.css.map +++ b/portal-ui/build/static/css/2024.8e16189d.chunk.css.map @@ -1 +1 @@ -{"version":3,"file":"static/css/4084.16d04f59.chunk.css","mappings":"AAUA,2DACE,kCAAoC,CAEpC,WAAY,CADZ,uBAEF,CACA,kCAAoC,aAAgB,CACpD,iCAAmC,8BAAiC,CACpE,qCAAuC,aAAgB,CACvD,mCAAqC,6BAAuC,CAC5E,6IAAuJ,6BAAuC,CAC9L,4JAAsK,6BAAuC,CAC7M,8BAAgC,aAAgB,CAChD,4DAA+D,aAAgB,CAC/E,6BAA+B,aAAgB,CAC/C,+BAAiC,aAAgB,CACjD,iCAAmC,UAAc,CACjD,0BAA4B,aAAgB,CAE5C,6DAAgC,aAAgB,CAChD,2BAA6B,aAAgB,CAC7C,2BAA6B,aAAgB,CAC7C,0BAA4B,aAAgB,CAE5C,gEAAkC,aAAgB,CAClD,+BAAiC,aAAgB,CACjD,8BAAgC,aAAgB,CAChD,4DAA+D,aAAgB,CAE/E,gDAAkD,6BAAmC,CACrF,0CAAwE,oBAAuB,CAAnD,yBAAqD","sources":["../node_modules/codemirror/theme/dracula.css"],"sourcesContent":["/*\n\n Name: dracula\n Author: Michael Kaminsky (http://github.com/mkaminsky11)\n\n Original dracula color scheme by Zeno Rocha (https://github.com/zenorocha/dracula-theme)\n\n*/\n\n\n.cm-s-dracula.CodeMirror, .cm-s-dracula .CodeMirror-gutters {\n background-color: #282a36 !important;\n color: #f8f8f2 !important;\n border: none;\n}\n.cm-s-dracula .CodeMirror-gutters { color: #282a36; }\n.cm-s-dracula .CodeMirror-cursor { border-left: solid thin #f8f8f0; }\n.cm-s-dracula .CodeMirror-linenumber { color: #6D8A88; }\n.cm-s-dracula .CodeMirror-selected { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula .CodeMirror-line::selection, .cm-s-dracula .CodeMirror-line > span::selection, .cm-s-dracula .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula .CodeMirror-line::-moz-selection, .cm-s-dracula .CodeMirror-line > span::-moz-selection, .cm-s-dracula .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula span.cm-comment { color: #6272a4; }\n.cm-s-dracula span.cm-string, .cm-s-dracula span.cm-string-2 { color: #f1fa8c; }\n.cm-s-dracula span.cm-number { color: #bd93f9; }\n.cm-s-dracula span.cm-variable { color: #50fa7b; }\n.cm-s-dracula span.cm-variable-2 { color: white; }\n.cm-s-dracula span.cm-def { color: #50fa7b; }\n.cm-s-dracula span.cm-operator { color: #ff79c6; }\n.cm-s-dracula span.cm-keyword { color: #ff79c6; }\n.cm-s-dracula span.cm-atom { color: #bd93f9; }\n.cm-s-dracula span.cm-meta { color: #f8f8f2; }\n.cm-s-dracula span.cm-tag { color: #ff79c6; }\n.cm-s-dracula span.cm-attribute { color: #50fa7b; }\n.cm-s-dracula span.cm-qualifier { color: #50fa7b; }\n.cm-s-dracula span.cm-property { color: #66d9ef; }\n.cm-s-dracula span.cm-builtin { color: #50fa7b; }\n.cm-s-dracula span.cm-variable-3, .cm-s-dracula span.cm-type { color: #ffb86c; }\n\n.cm-s-dracula .CodeMirror-activeline-background { background: rgba(255,255,255,0.1); }\n.cm-s-dracula .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }\n"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"static/css/2024.8e16189d.chunk.css","mappings":"AAUA,2DACE,kCAAoC,CAEpC,WAAY,CADZ,uBAEF,CACA,kCAAoC,aAAgB,CACpD,iCAAmC,8BAAiC,CACpE,qCAAuC,aAAgB,CACvD,mCAAqC,6BAAuC,CAC5E,6IAAuJ,6BAAuC,CAC9L,4JAAsK,6BAAuC,CAC7M,8BAAgC,aAAgB,CAChD,4DAA+D,aAAgB,CAC/E,6BAA+B,aAAgB,CAC/C,+BAAiC,aAAgB,CACjD,iCAAmC,UAAc,CACjD,0BAA4B,aAAgB,CAE5C,6DAAgC,aAAgB,CAChD,2BAA6B,aAAgB,CAC7C,2BAA6B,aAAgB,CAC7C,0BAA4B,aAAgB,CAE5C,gEAAkC,aAAgB,CAClD,+BAAiC,aAAgB,CACjD,8BAAgC,aAAgB,CAChD,4DAA+D,aAAgB,CAE/E,gDAAkD,6BAAmC,CACrF,0CAAwE,oBAAuB,CAAnD,yBAAqD","sources":["../node_modules/codemirror/theme/dracula.css"],"sourcesContent":["/*\n\n Name: dracula\n Author: Michael Kaminsky (http://github.com/mkaminsky11)\n\n Original dracula color scheme by Zeno Rocha (https://github.com/zenorocha/dracula-theme)\n\n*/\n\n\n.cm-s-dracula.CodeMirror, .cm-s-dracula .CodeMirror-gutters {\n background-color: #282a36 !important;\n color: #f8f8f2 !important;\n border: none;\n}\n.cm-s-dracula .CodeMirror-gutters { color: #282a36; }\n.cm-s-dracula .CodeMirror-cursor { border-left: solid thin #f8f8f0; }\n.cm-s-dracula .CodeMirror-linenumber { color: #6D8A88; }\n.cm-s-dracula .CodeMirror-selected { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula .CodeMirror-line::selection, .cm-s-dracula .CodeMirror-line > span::selection, .cm-s-dracula .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula .CodeMirror-line::-moz-selection, .cm-s-dracula .CodeMirror-line > span::-moz-selection, .cm-s-dracula .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula span.cm-comment { color: #6272a4; }\n.cm-s-dracula span.cm-string, .cm-s-dracula span.cm-string-2 { color: #f1fa8c; }\n.cm-s-dracula span.cm-number { color: #bd93f9; }\n.cm-s-dracula span.cm-variable { color: #50fa7b; }\n.cm-s-dracula span.cm-variable-2 { color: white; }\n.cm-s-dracula span.cm-def { color: #50fa7b; }\n.cm-s-dracula span.cm-operator { color: #ff79c6; }\n.cm-s-dracula span.cm-keyword { color: #ff79c6; }\n.cm-s-dracula span.cm-atom { color: #bd93f9; }\n.cm-s-dracula span.cm-meta { color: #f8f8f2; }\n.cm-s-dracula span.cm-tag { color: #ff79c6; }\n.cm-s-dracula span.cm-attribute { color: #50fa7b; }\n.cm-s-dracula span.cm-qualifier { color: #50fa7b; }\n.cm-s-dracula span.cm-property { color: #66d9ef; }\n.cm-s-dracula span.cm-builtin { color: #50fa7b; }\n.cm-s-dracula span.cm-variable-3, .cm-s-dracula span.cm-type { color: #ffb86c; }\n\n.cm-s-dracula .CodeMirror-activeline-background { background: rgba(255,255,255,0.1); }\n.cm-s-dracula .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/portal-ui/build/static/css/4084.16d04f59.chunk.css b/portal-ui/build/static/css/3816.8e16189d.chunk.css similarity index 96% rename from portal-ui/build/static/css/4084.16d04f59.chunk.css rename to portal-ui/build/static/css/3816.8e16189d.chunk.css index 14e4eed54..430860bf4 100644 --- a/portal-ui/build/static/css/4084.16d04f59.chunk.css +++ b/portal-ui/build/static/css/3816.8e16189d.chunk.css @@ -1,2 +1,2 @@ .cm-s-dracula.CodeMirror,.cm-s-dracula .CodeMirror-gutters{background-color:#282a36!important;border:none;color:#f8f8f2!important}.cm-s-dracula .CodeMirror-gutters{color:#282a36}.cm-s-dracula .CodeMirror-cursor{border-left:thin solid #f8f8f0}.cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.cm-s-dracula .CodeMirror-selected{background:hsla(0,0%,100%,.1)}.cm-s-dracula .CodeMirror-line::selection,.cm-s-dracula .CodeMirror-line>span::selection,.cm-s-dracula .CodeMirror-line>span>span::selection{background:hsla(0,0%,100%,.1)}.cm-s-dracula .CodeMirror-line::-moz-selection,.cm-s-dracula .CodeMirror-line>span::-moz-selection,.cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:hsla(0,0%,100%,.1)}.cm-s-dracula span.cm-comment{color:#6272a4}.cm-s-dracula span.cm-string,.cm-s-dracula span.cm-string-2{color:#f1fa8c}.cm-s-dracula span.cm-number{color:#bd93f9}.cm-s-dracula span.cm-variable{color:#50fa7b}.cm-s-dracula span.cm-variable-2{color:#fff}.cm-s-dracula span.cm-def{color:#50fa7b}.cm-s-dracula span.cm-keyword,.cm-s-dracula span.cm-operator{color:#ff79c6}.cm-s-dracula span.cm-atom{color:#bd93f9}.cm-s-dracula span.cm-meta{color:#f8f8f2}.cm-s-dracula span.cm-tag{color:#ff79c6}.cm-s-dracula span.cm-attribute,.cm-s-dracula span.cm-qualifier{color:#50fa7b}.cm-s-dracula span.cm-property{color:#66d9ef}.cm-s-dracula span.cm-builtin{color:#50fa7b}.cm-s-dracula span.cm-type,.cm-s-dracula span.cm-variable-3{color:#ffb86c}.cm-s-dracula .CodeMirror-activeline-background{background:hsla(0,0%,100%,.1)}.cm-s-dracula .CodeMirror-matchingbracket{color:#fff!important;text-decoration:underline} -/*# sourceMappingURL=4084.16d04f59.chunk.css.map*/ \ No newline at end of file +/*# sourceMappingURL=3816.8e16189d.chunk.css.map*/ \ No newline at end of file diff --git a/portal-ui/build/static/css/2024.16d04f59.chunk.css.map b/portal-ui/build/static/css/3816.8e16189d.chunk.css.map similarity index 97% rename from portal-ui/build/static/css/2024.16d04f59.chunk.css.map rename to portal-ui/build/static/css/3816.8e16189d.chunk.css.map index d15ddfaa1..30b1602d3 100644 --- a/portal-ui/build/static/css/2024.16d04f59.chunk.css.map +++ b/portal-ui/build/static/css/3816.8e16189d.chunk.css.map @@ -1 +1 @@ -{"version":3,"file":"static/css/2024.16d04f59.chunk.css","mappings":"AAUA,2DACE,kCAAoC,CAEpC,WAAY,CADZ,uBAEF,CACA,kCAAoC,aAAgB,CACpD,iCAAmC,8BAAiC,CACpE,qCAAuC,aAAgB,CACvD,mCAAqC,6BAAuC,CAC5E,6IAAuJ,6BAAuC,CAC9L,4JAAsK,6BAAuC,CAC7M,8BAAgC,aAAgB,CAChD,4DAA+D,aAAgB,CAC/E,6BAA+B,aAAgB,CAC/C,+BAAiC,aAAgB,CACjD,iCAAmC,UAAc,CACjD,0BAA4B,aAAgB,CAE5C,6DAAgC,aAAgB,CAChD,2BAA6B,aAAgB,CAC7C,2BAA6B,aAAgB,CAC7C,0BAA4B,aAAgB,CAE5C,gEAAkC,aAAgB,CAClD,+BAAiC,aAAgB,CACjD,8BAAgC,aAAgB,CAChD,4DAA+D,aAAgB,CAE/E,gDAAkD,6BAAmC,CACrF,0CAAwE,oBAAuB,CAAnD,yBAAqD","sources":["../node_modules/codemirror/theme/dracula.css"],"sourcesContent":["/*\n\n Name: dracula\n Author: Michael Kaminsky (http://github.com/mkaminsky11)\n\n Original dracula color scheme by Zeno Rocha (https://github.com/zenorocha/dracula-theme)\n\n*/\n\n\n.cm-s-dracula.CodeMirror, .cm-s-dracula .CodeMirror-gutters {\n background-color: #282a36 !important;\n color: #f8f8f2 !important;\n border: none;\n}\n.cm-s-dracula .CodeMirror-gutters { color: #282a36; }\n.cm-s-dracula .CodeMirror-cursor { border-left: solid thin #f8f8f0; }\n.cm-s-dracula .CodeMirror-linenumber { color: #6D8A88; }\n.cm-s-dracula .CodeMirror-selected { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula .CodeMirror-line::selection, .cm-s-dracula .CodeMirror-line > span::selection, .cm-s-dracula .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula .CodeMirror-line::-moz-selection, .cm-s-dracula .CodeMirror-line > span::-moz-selection, .cm-s-dracula .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula span.cm-comment { color: #6272a4; }\n.cm-s-dracula span.cm-string, .cm-s-dracula span.cm-string-2 { color: #f1fa8c; }\n.cm-s-dracula span.cm-number { color: #bd93f9; }\n.cm-s-dracula span.cm-variable { color: #50fa7b; }\n.cm-s-dracula span.cm-variable-2 { color: white; }\n.cm-s-dracula span.cm-def { color: #50fa7b; }\n.cm-s-dracula span.cm-operator { color: #ff79c6; }\n.cm-s-dracula span.cm-keyword { color: #ff79c6; }\n.cm-s-dracula span.cm-atom { color: #bd93f9; }\n.cm-s-dracula span.cm-meta { color: #f8f8f2; }\n.cm-s-dracula span.cm-tag { color: #ff79c6; }\n.cm-s-dracula span.cm-attribute { color: #50fa7b; }\n.cm-s-dracula span.cm-qualifier { color: #50fa7b; }\n.cm-s-dracula span.cm-property { color: #66d9ef; }\n.cm-s-dracula span.cm-builtin { color: #50fa7b; }\n.cm-s-dracula span.cm-variable-3, .cm-s-dracula span.cm-type { color: #ffb86c; }\n\n.cm-s-dracula .CodeMirror-activeline-background { background: rgba(255,255,255,0.1); }\n.cm-s-dracula .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }\n"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"static/css/3816.8e16189d.chunk.css","mappings":"AAUA,2DACE,kCAAoC,CAEpC,WAAY,CADZ,uBAEF,CACA,kCAAoC,aAAgB,CACpD,iCAAmC,8BAAiC,CACpE,qCAAuC,aAAgB,CACvD,mCAAqC,6BAAuC,CAC5E,6IAAuJ,6BAAuC,CAC9L,4JAAsK,6BAAuC,CAC7M,8BAAgC,aAAgB,CAChD,4DAA+D,aAAgB,CAC/E,6BAA+B,aAAgB,CAC/C,+BAAiC,aAAgB,CACjD,iCAAmC,UAAc,CACjD,0BAA4B,aAAgB,CAE5C,6DAAgC,aAAgB,CAChD,2BAA6B,aAAgB,CAC7C,2BAA6B,aAAgB,CAC7C,0BAA4B,aAAgB,CAE5C,gEAAkC,aAAgB,CAClD,+BAAiC,aAAgB,CACjD,8BAAgC,aAAgB,CAChD,4DAA+D,aAAgB,CAE/E,gDAAkD,6BAAmC,CACrF,0CAAwE,oBAAuB,CAAnD,yBAAqD","sources":["../node_modules/codemirror/theme/dracula.css"],"sourcesContent":["/*\n\n Name: dracula\n Author: Michael Kaminsky (http://github.com/mkaminsky11)\n\n Original dracula color scheme by Zeno Rocha (https://github.com/zenorocha/dracula-theme)\n\n*/\n\n\n.cm-s-dracula.CodeMirror, .cm-s-dracula .CodeMirror-gutters {\n background-color: #282a36 !important;\n color: #f8f8f2 !important;\n border: none;\n}\n.cm-s-dracula .CodeMirror-gutters { color: #282a36; }\n.cm-s-dracula .CodeMirror-cursor { border-left: solid thin #f8f8f0; }\n.cm-s-dracula .CodeMirror-linenumber { color: #6D8A88; }\n.cm-s-dracula .CodeMirror-selected { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula .CodeMirror-line::selection, .cm-s-dracula .CodeMirror-line > span::selection, .cm-s-dracula .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula .CodeMirror-line::-moz-selection, .cm-s-dracula .CodeMirror-line > span::-moz-selection, .cm-s-dracula .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula span.cm-comment { color: #6272a4; }\n.cm-s-dracula span.cm-string, .cm-s-dracula span.cm-string-2 { color: #f1fa8c; }\n.cm-s-dracula span.cm-number { color: #bd93f9; }\n.cm-s-dracula span.cm-variable { color: #50fa7b; }\n.cm-s-dracula span.cm-variable-2 { color: white; }\n.cm-s-dracula span.cm-def { color: #50fa7b; }\n.cm-s-dracula span.cm-operator { color: #ff79c6; }\n.cm-s-dracula span.cm-keyword { color: #ff79c6; }\n.cm-s-dracula span.cm-atom { color: #bd93f9; }\n.cm-s-dracula span.cm-meta { color: #f8f8f2; }\n.cm-s-dracula span.cm-tag { color: #ff79c6; }\n.cm-s-dracula span.cm-attribute { color: #50fa7b; }\n.cm-s-dracula span.cm-qualifier { color: #50fa7b; }\n.cm-s-dracula span.cm-property { color: #66d9ef; }\n.cm-s-dracula span.cm-builtin { color: #50fa7b; }\n.cm-s-dracula span.cm-variable-3, .cm-s-dracula span.cm-type { color: #ffb86c; }\n\n.cm-s-dracula .CodeMirror-activeline-background { background: rgba(255,255,255,0.1); }\n.cm-s-dracula .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/portal-ui/build/static/css/3816.16d04f59.chunk.css b/portal-ui/build/static/css/4084.8e16189d.chunk.css similarity index 96% rename from portal-ui/build/static/css/3816.16d04f59.chunk.css rename to portal-ui/build/static/css/4084.8e16189d.chunk.css index 31ce23611..8080c352e 100644 --- a/portal-ui/build/static/css/3816.16d04f59.chunk.css +++ b/portal-ui/build/static/css/4084.8e16189d.chunk.css @@ -1,2 +1,2 @@ .cm-s-dracula.CodeMirror,.cm-s-dracula .CodeMirror-gutters{background-color:#282a36!important;border:none;color:#f8f8f2!important}.cm-s-dracula .CodeMirror-gutters{color:#282a36}.cm-s-dracula .CodeMirror-cursor{border-left:thin solid #f8f8f0}.cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.cm-s-dracula .CodeMirror-selected{background:hsla(0,0%,100%,.1)}.cm-s-dracula .CodeMirror-line::selection,.cm-s-dracula .CodeMirror-line>span::selection,.cm-s-dracula .CodeMirror-line>span>span::selection{background:hsla(0,0%,100%,.1)}.cm-s-dracula .CodeMirror-line::-moz-selection,.cm-s-dracula .CodeMirror-line>span::-moz-selection,.cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:hsla(0,0%,100%,.1)}.cm-s-dracula span.cm-comment{color:#6272a4}.cm-s-dracula span.cm-string,.cm-s-dracula span.cm-string-2{color:#f1fa8c}.cm-s-dracula span.cm-number{color:#bd93f9}.cm-s-dracula span.cm-variable{color:#50fa7b}.cm-s-dracula span.cm-variable-2{color:#fff}.cm-s-dracula span.cm-def{color:#50fa7b}.cm-s-dracula span.cm-keyword,.cm-s-dracula span.cm-operator{color:#ff79c6}.cm-s-dracula span.cm-atom{color:#bd93f9}.cm-s-dracula span.cm-meta{color:#f8f8f2}.cm-s-dracula span.cm-tag{color:#ff79c6}.cm-s-dracula span.cm-attribute,.cm-s-dracula span.cm-qualifier{color:#50fa7b}.cm-s-dracula span.cm-property{color:#66d9ef}.cm-s-dracula span.cm-builtin{color:#50fa7b}.cm-s-dracula span.cm-type,.cm-s-dracula span.cm-variable-3{color:#ffb86c}.cm-s-dracula .CodeMirror-activeline-background{background:hsla(0,0%,100%,.1)}.cm-s-dracula .CodeMirror-matchingbracket{color:#fff!important;text-decoration:underline} -/*# sourceMappingURL=3816.16d04f59.chunk.css.map*/ \ No newline at end of file +/*# sourceMappingURL=4084.8e16189d.chunk.css.map*/ \ No newline at end of file diff --git a/portal-ui/build/static/css/5673.16d04f59.chunk.css.map b/portal-ui/build/static/css/4084.8e16189d.chunk.css.map similarity index 97% rename from portal-ui/build/static/css/5673.16d04f59.chunk.css.map rename to portal-ui/build/static/css/4084.8e16189d.chunk.css.map index 2a1c1e39c..afe34ac27 100644 --- a/portal-ui/build/static/css/5673.16d04f59.chunk.css.map +++ b/portal-ui/build/static/css/4084.8e16189d.chunk.css.map @@ -1 +1 @@ -{"version":3,"file":"static/css/5673.16d04f59.chunk.css","mappings":"AAUA,2DACE,kCAAoC,CAEpC,WAAY,CADZ,uBAEF,CACA,kCAAoC,aAAgB,CACpD,iCAAmC,8BAAiC,CACpE,qCAAuC,aAAgB,CACvD,mCAAqC,6BAAuC,CAC5E,6IAAuJ,6BAAuC,CAC9L,4JAAsK,6BAAuC,CAC7M,8BAAgC,aAAgB,CAChD,4DAA+D,aAAgB,CAC/E,6BAA+B,aAAgB,CAC/C,+BAAiC,aAAgB,CACjD,iCAAmC,UAAc,CACjD,0BAA4B,aAAgB,CAE5C,6DAAgC,aAAgB,CAChD,2BAA6B,aAAgB,CAC7C,2BAA6B,aAAgB,CAC7C,0BAA4B,aAAgB,CAE5C,gEAAkC,aAAgB,CAClD,+BAAiC,aAAgB,CACjD,8BAAgC,aAAgB,CAChD,4DAA+D,aAAgB,CAE/E,gDAAkD,6BAAmC,CACrF,0CAAwE,oBAAuB,CAAnD,yBAAqD","sources":["../node_modules/codemirror/theme/dracula.css"],"sourcesContent":["/*\n\n Name: dracula\n Author: Michael Kaminsky (http://github.com/mkaminsky11)\n\n Original dracula color scheme by Zeno Rocha (https://github.com/zenorocha/dracula-theme)\n\n*/\n\n\n.cm-s-dracula.CodeMirror, .cm-s-dracula .CodeMirror-gutters {\n background-color: #282a36 !important;\n color: #f8f8f2 !important;\n border: none;\n}\n.cm-s-dracula .CodeMirror-gutters { color: #282a36; }\n.cm-s-dracula .CodeMirror-cursor { border-left: solid thin #f8f8f0; }\n.cm-s-dracula .CodeMirror-linenumber { color: #6D8A88; }\n.cm-s-dracula .CodeMirror-selected { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula .CodeMirror-line::selection, .cm-s-dracula .CodeMirror-line > span::selection, .cm-s-dracula .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula .CodeMirror-line::-moz-selection, .cm-s-dracula .CodeMirror-line > span::-moz-selection, .cm-s-dracula .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula span.cm-comment { color: #6272a4; }\n.cm-s-dracula span.cm-string, .cm-s-dracula span.cm-string-2 { color: #f1fa8c; }\n.cm-s-dracula span.cm-number { color: #bd93f9; }\n.cm-s-dracula span.cm-variable { color: #50fa7b; }\n.cm-s-dracula span.cm-variable-2 { color: white; }\n.cm-s-dracula span.cm-def { color: #50fa7b; }\n.cm-s-dracula span.cm-operator { color: #ff79c6; }\n.cm-s-dracula span.cm-keyword { color: #ff79c6; }\n.cm-s-dracula span.cm-atom { color: #bd93f9; }\n.cm-s-dracula span.cm-meta { color: #f8f8f2; }\n.cm-s-dracula span.cm-tag { color: #ff79c6; }\n.cm-s-dracula span.cm-attribute { color: #50fa7b; }\n.cm-s-dracula span.cm-qualifier { color: #50fa7b; }\n.cm-s-dracula span.cm-property { color: #66d9ef; }\n.cm-s-dracula span.cm-builtin { color: #50fa7b; }\n.cm-s-dracula span.cm-variable-3, .cm-s-dracula span.cm-type { color: #ffb86c; }\n\n.cm-s-dracula .CodeMirror-activeline-background { background: rgba(255,255,255,0.1); }\n.cm-s-dracula .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }\n"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"static/css/4084.8e16189d.chunk.css","mappings":"AAUA,2DACE,kCAAoC,CAEpC,WAAY,CADZ,uBAEF,CACA,kCAAoC,aAAgB,CACpD,iCAAmC,8BAAiC,CACpE,qCAAuC,aAAgB,CACvD,mCAAqC,6BAAuC,CAC5E,6IAAuJ,6BAAuC,CAC9L,4JAAsK,6BAAuC,CAC7M,8BAAgC,aAAgB,CAChD,4DAA+D,aAAgB,CAC/E,6BAA+B,aAAgB,CAC/C,+BAAiC,aAAgB,CACjD,iCAAmC,UAAc,CACjD,0BAA4B,aAAgB,CAE5C,6DAAgC,aAAgB,CAChD,2BAA6B,aAAgB,CAC7C,2BAA6B,aAAgB,CAC7C,0BAA4B,aAAgB,CAE5C,gEAAkC,aAAgB,CAClD,+BAAiC,aAAgB,CACjD,8BAAgC,aAAgB,CAChD,4DAA+D,aAAgB,CAE/E,gDAAkD,6BAAmC,CACrF,0CAAwE,oBAAuB,CAAnD,yBAAqD","sources":["../node_modules/codemirror/theme/dracula.css"],"sourcesContent":["/*\n\n Name: dracula\n Author: Michael Kaminsky (http://github.com/mkaminsky11)\n\n Original dracula color scheme by Zeno Rocha (https://github.com/zenorocha/dracula-theme)\n\n*/\n\n\n.cm-s-dracula.CodeMirror, .cm-s-dracula .CodeMirror-gutters {\n background-color: #282a36 !important;\n color: #f8f8f2 !important;\n border: none;\n}\n.cm-s-dracula .CodeMirror-gutters { color: #282a36; }\n.cm-s-dracula .CodeMirror-cursor { border-left: solid thin #f8f8f0; }\n.cm-s-dracula .CodeMirror-linenumber { color: #6D8A88; }\n.cm-s-dracula .CodeMirror-selected { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula .CodeMirror-line::selection, .cm-s-dracula .CodeMirror-line > span::selection, .cm-s-dracula .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula .CodeMirror-line::-moz-selection, .cm-s-dracula .CodeMirror-line > span::-moz-selection, .cm-s-dracula .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula span.cm-comment { color: #6272a4; }\n.cm-s-dracula span.cm-string, .cm-s-dracula span.cm-string-2 { color: #f1fa8c; }\n.cm-s-dracula span.cm-number { color: #bd93f9; }\n.cm-s-dracula span.cm-variable { color: #50fa7b; }\n.cm-s-dracula span.cm-variable-2 { color: white; }\n.cm-s-dracula span.cm-def { color: #50fa7b; }\n.cm-s-dracula span.cm-operator { color: #ff79c6; }\n.cm-s-dracula span.cm-keyword { color: #ff79c6; }\n.cm-s-dracula span.cm-atom { color: #bd93f9; }\n.cm-s-dracula span.cm-meta { color: #f8f8f2; }\n.cm-s-dracula span.cm-tag { color: #ff79c6; }\n.cm-s-dracula span.cm-attribute { color: #50fa7b; }\n.cm-s-dracula span.cm-qualifier { color: #50fa7b; }\n.cm-s-dracula span.cm-property { color: #66d9ef; }\n.cm-s-dracula span.cm-builtin { color: #50fa7b; }\n.cm-s-dracula span.cm-variable-3, .cm-s-dracula span.cm-type { color: #ffb86c; }\n\n.cm-s-dracula .CodeMirror-activeline-background { background: rgba(255,255,255,0.1); }\n.cm-s-dracula .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/portal-ui/build/static/css/5673.16d04f59.chunk.css b/portal-ui/build/static/css/5822.8e16189d.chunk.css similarity index 96% rename from portal-ui/build/static/css/5673.16d04f59.chunk.css rename to portal-ui/build/static/css/5822.8e16189d.chunk.css index 8b92bed33..65d193aa9 100644 --- a/portal-ui/build/static/css/5673.16d04f59.chunk.css +++ b/portal-ui/build/static/css/5822.8e16189d.chunk.css @@ -1,2 +1,2 @@ .cm-s-dracula.CodeMirror,.cm-s-dracula .CodeMirror-gutters{background-color:#282a36!important;border:none;color:#f8f8f2!important}.cm-s-dracula .CodeMirror-gutters{color:#282a36}.cm-s-dracula .CodeMirror-cursor{border-left:thin solid #f8f8f0}.cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.cm-s-dracula .CodeMirror-selected{background:hsla(0,0%,100%,.1)}.cm-s-dracula .CodeMirror-line::selection,.cm-s-dracula .CodeMirror-line>span::selection,.cm-s-dracula .CodeMirror-line>span>span::selection{background:hsla(0,0%,100%,.1)}.cm-s-dracula .CodeMirror-line::-moz-selection,.cm-s-dracula .CodeMirror-line>span::-moz-selection,.cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:hsla(0,0%,100%,.1)}.cm-s-dracula span.cm-comment{color:#6272a4}.cm-s-dracula span.cm-string,.cm-s-dracula span.cm-string-2{color:#f1fa8c}.cm-s-dracula span.cm-number{color:#bd93f9}.cm-s-dracula span.cm-variable{color:#50fa7b}.cm-s-dracula span.cm-variable-2{color:#fff}.cm-s-dracula span.cm-def{color:#50fa7b}.cm-s-dracula span.cm-keyword,.cm-s-dracula span.cm-operator{color:#ff79c6}.cm-s-dracula span.cm-atom{color:#bd93f9}.cm-s-dracula span.cm-meta{color:#f8f8f2}.cm-s-dracula span.cm-tag{color:#ff79c6}.cm-s-dracula span.cm-attribute,.cm-s-dracula span.cm-qualifier{color:#50fa7b}.cm-s-dracula span.cm-property{color:#66d9ef}.cm-s-dracula span.cm-builtin{color:#50fa7b}.cm-s-dracula span.cm-type,.cm-s-dracula span.cm-variable-3{color:#ffb86c}.cm-s-dracula .CodeMirror-activeline-background{background:hsla(0,0%,100%,.1)}.cm-s-dracula .CodeMirror-matchingbracket{color:#fff!important;text-decoration:underline} -/*# sourceMappingURL=5673.16d04f59.chunk.css.map*/ \ No newline at end of file +/*# sourceMappingURL=5822.8e16189d.chunk.css.map*/ \ No newline at end of file diff --git a/portal-ui/build/static/css/3816.16d04f59.chunk.css.map b/portal-ui/build/static/css/5822.8e16189d.chunk.css.map similarity index 97% rename from portal-ui/build/static/css/3816.16d04f59.chunk.css.map rename to portal-ui/build/static/css/5822.8e16189d.chunk.css.map index c15789ba8..8d6279062 100644 --- a/portal-ui/build/static/css/3816.16d04f59.chunk.css.map +++ b/portal-ui/build/static/css/5822.8e16189d.chunk.css.map @@ -1 +1 @@ -{"version":3,"file":"static/css/3816.16d04f59.chunk.css","mappings":"AAUA,2DACE,kCAAoC,CAEpC,WAAY,CADZ,uBAEF,CACA,kCAAoC,aAAgB,CACpD,iCAAmC,8BAAiC,CACpE,qCAAuC,aAAgB,CACvD,mCAAqC,6BAAuC,CAC5E,6IAAuJ,6BAAuC,CAC9L,4JAAsK,6BAAuC,CAC7M,8BAAgC,aAAgB,CAChD,4DAA+D,aAAgB,CAC/E,6BAA+B,aAAgB,CAC/C,+BAAiC,aAAgB,CACjD,iCAAmC,UAAc,CACjD,0BAA4B,aAAgB,CAE5C,6DAAgC,aAAgB,CAChD,2BAA6B,aAAgB,CAC7C,2BAA6B,aAAgB,CAC7C,0BAA4B,aAAgB,CAE5C,gEAAkC,aAAgB,CAClD,+BAAiC,aAAgB,CACjD,8BAAgC,aAAgB,CAChD,4DAA+D,aAAgB,CAE/E,gDAAkD,6BAAmC,CACrF,0CAAwE,oBAAuB,CAAnD,yBAAqD","sources":["../node_modules/codemirror/theme/dracula.css"],"sourcesContent":["/*\n\n Name: dracula\n Author: Michael Kaminsky (http://github.com/mkaminsky11)\n\n Original dracula color scheme by Zeno Rocha (https://github.com/zenorocha/dracula-theme)\n\n*/\n\n\n.cm-s-dracula.CodeMirror, .cm-s-dracula .CodeMirror-gutters {\n background-color: #282a36 !important;\n color: #f8f8f2 !important;\n border: none;\n}\n.cm-s-dracula .CodeMirror-gutters { color: #282a36; }\n.cm-s-dracula .CodeMirror-cursor { border-left: solid thin #f8f8f0; }\n.cm-s-dracula .CodeMirror-linenumber { color: #6D8A88; }\n.cm-s-dracula .CodeMirror-selected { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula .CodeMirror-line::selection, .cm-s-dracula .CodeMirror-line > span::selection, .cm-s-dracula .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula .CodeMirror-line::-moz-selection, .cm-s-dracula .CodeMirror-line > span::-moz-selection, .cm-s-dracula .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula span.cm-comment { color: #6272a4; }\n.cm-s-dracula span.cm-string, .cm-s-dracula span.cm-string-2 { color: #f1fa8c; }\n.cm-s-dracula span.cm-number { color: #bd93f9; }\n.cm-s-dracula span.cm-variable { color: #50fa7b; }\n.cm-s-dracula span.cm-variable-2 { color: white; }\n.cm-s-dracula span.cm-def { color: #50fa7b; }\n.cm-s-dracula span.cm-operator { color: #ff79c6; }\n.cm-s-dracula span.cm-keyword { color: #ff79c6; }\n.cm-s-dracula span.cm-atom { color: #bd93f9; }\n.cm-s-dracula span.cm-meta { color: #f8f8f2; }\n.cm-s-dracula span.cm-tag { color: #ff79c6; }\n.cm-s-dracula span.cm-attribute { color: #50fa7b; }\n.cm-s-dracula span.cm-qualifier { color: #50fa7b; }\n.cm-s-dracula span.cm-property { color: #66d9ef; }\n.cm-s-dracula span.cm-builtin { color: #50fa7b; }\n.cm-s-dracula span.cm-variable-3, .cm-s-dracula span.cm-type { color: #ffb86c; }\n\n.cm-s-dracula .CodeMirror-activeline-background { background: rgba(255,255,255,0.1); }\n.cm-s-dracula .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }\n"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"static/css/5822.8e16189d.chunk.css","mappings":"AAUA,2DACE,kCAAoC,CAEpC,WAAY,CADZ,uBAEF,CACA,kCAAoC,aAAgB,CACpD,iCAAmC,8BAAiC,CACpE,qCAAuC,aAAgB,CACvD,mCAAqC,6BAAuC,CAC5E,6IAAuJ,6BAAuC,CAC9L,4JAAsK,6BAAuC,CAC7M,8BAAgC,aAAgB,CAChD,4DAA+D,aAAgB,CAC/E,6BAA+B,aAAgB,CAC/C,+BAAiC,aAAgB,CACjD,iCAAmC,UAAc,CACjD,0BAA4B,aAAgB,CAE5C,6DAAgC,aAAgB,CAChD,2BAA6B,aAAgB,CAC7C,2BAA6B,aAAgB,CAC7C,0BAA4B,aAAgB,CAE5C,gEAAkC,aAAgB,CAClD,+BAAiC,aAAgB,CACjD,8BAAgC,aAAgB,CAChD,4DAA+D,aAAgB,CAE/E,gDAAkD,6BAAmC,CACrF,0CAAwE,oBAAuB,CAAnD,yBAAqD","sources":["../node_modules/codemirror/theme/dracula.css"],"sourcesContent":["/*\n\n Name: dracula\n Author: Michael Kaminsky (http://github.com/mkaminsky11)\n\n Original dracula color scheme by Zeno Rocha (https://github.com/zenorocha/dracula-theme)\n\n*/\n\n\n.cm-s-dracula.CodeMirror, .cm-s-dracula .CodeMirror-gutters {\n background-color: #282a36 !important;\n color: #f8f8f2 !important;\n border: none;\n}\n.cm-s-dracula .CodeMirror-gutters { color: #282a36; }\n.cm-s-dracula .CodeMirror-cursor { border-left: solid thin #f8f8f0; }\n.cm-s-dracula .CodeMirror-linenumber { color: #6D8A88; }\n.cm-s-dracula .CodeMirror-selected { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula .CodeMirror-line::selection, .cm-s-dracula .CodeMirror-line > span::selection, .cm-s-dracula .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula .CodeMirror-line::-moz-selection, .cm-s-dracula .CodeMirror-line > span::-moz-selection, .cm-s-dracula .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula span.cm-comment { color: #6272a4; }\n.cm-s-dracula span.cm-string, .cm-s-dracula span.cm-string-2 { color: #f1fa8c; }\n.cm-s-dracula span.cm-number { color: #bd93f9; }\n.cm-s-dracula span.cm-variable { color: #50fa7b; }\n.cm-s-dracula span.cm-variable-2 { color: white; }\n.cm-s-dracula span.cm-def { color: #50fa7b; }\n.cm-s-dracula span.cm-operator { color: #ff79c6; }\n.cm-s-dracula span.cm-keyword { color: #ff79c6; }\n.cm-s-dracula span.cm-atom { color: #bd93f9; }\n.cm-s-dracula span.cm-meta { color: #f8f8f2; }\n.cm-s-dracula span.cm-tag { color: #ff79c6; }\n.cm-s-dracula span.cm-attribute { color: #50fa7b; }\n.cm-s-dracula span.cm-qualifier { color: #50fa7b; }\n.cm-s-dracula span.cm-property { color: #66d9ef; }\n.cm-s-dracula span.cm-builtin { color: #50fa7b; }\n.cm-s-dracula span.cm-variable-3, .cm-s-dracula span.cm-type { color: #ffb86c; }\n\n.cm-s-dracula .CodeMirror-activeline-background { background: rgba(255,255,255,0.1); }\n.cm-s-dracula .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/portal-ui/build/static/css/8724.16d04f59.chunk.css b/portal-ui/build/static/css/8724.16d04f59.chunk.css deleted file mode 100644 index 88fcdc7b4..000000000 --- a/portal-ui/build/static/css/8724.16d04f59.chunk.css +++ /dev/null @@ -1,2 +0,0 @@ -.cm-s-dracula.CodeMirror,.cm-s-dracula .CodeMirror-gutters{background-color:#282a36!important;border:none;color:#f8f8f2!important}.cm-s-dracula .CodeMirror-gutters{color:#282a36}.cm-s-dracula .CodeMirror-cursor{border-left:thin solid #f8f8f0}.cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.cm-s-dracula .CodeMirror-selected{background:hsla(0,0%,100%,.1)}.cm-s-dracula .CodeMirror-line::selection,.cm-s-dracula .CodeMirror-line>span::selection,.cm-s-dracula .CodeMirror-line>span>span::selection{background:hsla(0,0%,100%,.1)}.cm-s-dracula .CodeMirror-line::-moz-selection,.cm-s-dracula .CodeMirror-line>span::-moz-selection,.cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:hsla(0,0%,100%,.1)}.cm-s-dracula span.cm-comment{color:#6272a4}.cm-s-dracula span.cm-string,.cm-s-dracula span.cm-string-2{color:#f1fa8c}.cm-s-dracula span.cm-number{color:#bd93f9}.cm-s-dracula span.cm-variable{color:#50fa7b}.cm-s-dracula span.cm-variable-2{color:#fff}.cm-s-dracula span.cm-def{color:#50fa7b}.cm-s-dracula span.cm-keyword,.cm-s-dracula span.cm-operator{color:#ff79c6}.cm-s-dracula span.cm-atom{color:#bd93f9}.cm-s-dracula span.cm-meta{color:#f8f8f2}.cm-s-dracula span.cm-tag{color:#ff79c6}.cm-s-dracula span.cm-attribute,.cm-s-dracula span.cm-qualifier{color:#50fa7b}.cm-s-dracula span.cm-property{color:#66d9ef}.cm-s-dracula span.cm-builtin{color:#50fa7b}.cm-s-dracula span.cm-type,.cm-s-dracula span.cm-variable-3{color:#ffb86c}.cm-s-dracula .CodeMirror-activeline-background{background:hsla(0,0%,100%,.1)}.cm-s-dracula .CodeMirror-matchingbracket{color:#fff!important;text-decoration:underline} -/*# sourceMappingURL=8724.16d04f59.chunk.css.map*/ \ No newline at end of file diff --git a/portal-ui/build/static/css/8724.16d04f59.chunk.css.map b/portal-ui/build/static/css/8724.16d04f59.chunk.css.map deleted file mode 100644 index edabf66d9..000000000 --- a/portal-ui/build/static/css/8724.16d04f59.chunk.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/css/8724.16d04f59.chunk.css","mappings":"AAUA,2DACE,kCAAoC,CAEpC,WAAY,CADZ,uBAEF,CACA,kCAAoC,aAAgB,CACpD,iCAAmC,8BAAiC,CACpE,qCAAuC,aAAgB,CACvD,mCAAqC,6BAAuC,CAC5E,6IAAuJ,6BAAuC,CAC9L,4JAAsK,6BAAuC,CAC7M,8BAAgC,aAAgB,CAChD,4DAA+D,aAAgB,CAC/E,6BAA+B,aAAgB,CAC/C,+BAAiC,aAAgB,CACjD,iCAAmC,UAAc,CACjD,0BAA4B,aAAgB,CAE5C,6DAAgC,aAAgB,CAChD,2BAA6B,aAAgB,CAC7C,2BAA6B,aAAgB,CAC7C,0BAA4B,aAAgB,CAE5C,gEAAkC,aAAgB,CAClD,+BAAiC,aAAgB,CACjD,8BAAgC,aAAgB,CAChD,4DAA+D,aAAgB,CAE/E,gDAAkD,6BAAmC,CACrF,0CAAwE,oBAAuB,CAAnD,yBAAqD","sources":["../node_modules/codemirror/theme/dracula.css"],"sourcesContent":["/*\n\n Name: dracula\n Author: Michael Kaminsky (http://github.com/mkaminsky11)\n\n Original dracula color scheme by Zeno Rocha (https://github.com/zenorocha/dracula-theme)\n\n*/\n\n\n.cm-s-dracula.CodeMirror, .cm-s-dracula .CodeMirror-gutters {\n background-color: #282a36 !important;\n color: #f8f8f2 !important;\n border: none;\n}\n.cm-s-dracula .CodeMirror-gutters { color: #282a36; }\n.cm-s-dracula .CodeMirror-cursor { border-left: solid thin #f8f8f0; }\n.cm-s-dracula .CodeMirror-linenumber { color: #6D8A88; }\n.cm-s-dracula .CodeMirror-selected { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula .CodeMirror-line::selection, .cm-s-dracula .CodeMirror-line > span::selection, .cm-s-dracula .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula .CodeMirror-line::-moz-selection, .cm-s-dracula .CodeMirror-line > span::-moz-selection, .cm-s-dracula .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula span.cm-comment { color: #6272a4; }\n.cm-s-dracula span.cm-string, .cm-s-dracula span.cm-string-2 { color: #f1fa8c; }\n.cm-s-dracula span.cm-number { color: #bd93f9; }\n.cm-s-dracula span.cm-variable { color: #50fa7b; }\n.cm-s-dracula span.cm-variable-2 { color: white; }\n.cm-s-dracula span.cm-def { color: #50fa7b; }\n.cm-s-dracula span.cm-operator { color: #ff79c6; }\n.cm-s-dracula span.cm-keyword { color: #ff79c6; }\n.cm-s-dracula span.cm-atom { color: #bd93f9; }\n.cm-s-dracula span.cm-meta { color: #f8f8f2; }\n.cm-s-dracula span.cm-tag { color: #ff79c6; }\n.cm-s-dracula span.cm-attribute { color: #50fa7b; }\n.cm-s-dracula span.cm-qualifier { color: #50fa7b; }\n.cm-s-dracula span.cm-property { color: #66d9ef; }\n.cm-s-dracula span.cm-builtin { color: #50fa7b; }\n.cm-s-dracula span.cm-variable-3, .cm-s-dracula span.cm-type { color: #ffb86c; }\n\n.cm-s-dracula .CodeMirror-activeline-background { background: rgba(255,255,255,0.1); }\n.cm-s-dracula .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/portal-ui/build/static/css/8724.8e16189d.chunk.css b/portal-ui/build/static/css/8724.8e16189d.chunk.css new file mode 100644 index 000000000..e4054eb5c --- /dev/null +++ b/portal-ui/build/static/css/8724.8e16189d.chunk.css @@ -0,0 +1,2 @@ +.cm-s-dracula.CodeMirror,.cm-s-dracula .CodeMirror-gutters{background-color:#282a36!important;border:none;color:#f8f8f2!important}.cm-s-dracula .CodeMirror-gutters{color:#282a36}.cm-s-dracula .CodeMirror-cursor{border-left:thin solid #f8f8f0}.cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.cm-s-dracula .CodeMirror-selected{background:hsla(0,0%,100%,.1)}.cm-s-dracula .CodeMirror-line::selection,.cm-s-dracula .CodeMirror-line>span::selection,.cm-s-dracula .CodeMirror-line>span>span::selection{background:hsla(0,0%,100%,.1)}.cm-s-dracula .CodeMirror-line::-moz-selection,.cm-s-dracula .CodeMirror-line>span::-moz-selection,.cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:hsla(0,0%,100%,.1)}.cm-s-dracula span.cm-comment{color:#6272a4}.cm-s-dracula span.cm-string,.cm-s-dracula span.cm-string-2{color:#f1fa8c}.cm-s-dracula span.cm-number{color:#bd93f9}.cm-s-dracula span.cm-variable{color:#50fa7b}.cm-s-dracula span.cm-variable-2{color:#fff}.cm-s-dracula span.cm-def{color:#50fa7b}.cm-s-dracula span.cm-keyword,.cm-s-dracula span.cm-operator{color:#ff79c6}.cm-s-dracula span.cm-atom{color:#bd93f9}.cm-s-dracula span.cm-meta{color:#f8f8f2}.cm-s-dracula span.cm-tag{color:#ff79c6}.cm-s-dracula span.cm-attribute,.cm-s-dracula span.cm-qualifier{color:#50fa7b}.cm-s-dracula span.cm-property{color:#66d9ef}.cm-s-dracula span.cm-builtin{color:#50fa7b}.cm-s-dracula span.cm-type,.cm-s-dracula span.cm-variable-3{color:#ffb86c}.cm-s-dracula .CodeMirror-activeline-background{background:hsla(0,0%,100%,.1)}.cm-s-dracula .CodeMirror-matchingbracket{color:#fff!important;text-decoration:underline} +/*# sourceMappingURL=8724.8e16189d.chunk.css.map*/ \ No newline at end of file diff --git a/portal-ui/build/static/css/8724.8e16189d.chunk.css.map b/portal-ui/build/static/css/8724.8e16189d.chunk.css.map new file mode 100644 index 000000000..56301dd72 --- /dev/null +++ b/portal-ui/build/static/css/8724.8e16189d.chunk.css.map @@ -0,0 +1 @@ +{"version":3,"file":"static/css/8724.8e16189d.chunk.css","mappings":"AAUA,2DACE,kCAAoC,CAEpC,WAAY,CADZ,uBAEF,CACA,kCAAoC,aAAgB,CACpD,iCAAmC,8BAAiC,CACpE,qCAAuC,aAAgB,CACvD,mCAAqC,6BAAuC,CAC5E,6IAAuJ,6BAAuC,CAC9L,4JAAsK,6BAAuC,CAC7M,8BAAgC,aAAgB,CAChD,4DAA+D,aAAgB,CAC/E,6BAA+B,aAAgB,CAC/C,+BAAiC,aAAgB,CACjD,iCAAmC,UAAc,CACjD,0BAA4B,aAAgB,CAE5C,6DAAgC,aAAgB,CAChD,2BAA6B,aAAgB,CAC7C,2BAA6B,aAAgB,CAC7C,0BAA4B,aAAgB,CAE5C,gEAAkC,aAAgB,CAClD,+BAAiC,aAAgB,CACjD,8BAAgC,aAAgB,CAChD,4DAA+D,aAAgB,CAE/E,gDAAkD,6BAAmC,CACrF,0CAAwE,oBAAuB,CAAnD,yBAAqD","sources":["../node_modules/codemirror/theme/dracula.css"],"sourcesContent":["/*\n\n Name: dracula\n Author: Michael Kaminsky (http://github.com/mkaminsky11)\n\n Original dracula color scheme by Zeno Rocha (https://github.com/zenorocha/dracula-theme)\n\n*/\n\n\n.cm-s-dracula.CodeMirror, .cm-s-dracula .CodeMirror-gutters {\n background-color: #282a36 !important;\n color: #f8f8f2 !important;\n border: none;\n}\n.cm-s-dracula .CodeMirror-gutters { color: #282a36; }\n.cm-s-dracula .CodeMirror-cursor { border-left: solid thin #f8f8f0; }\n.cm-s-dracula .CodeMirror-linenumber { color: #6D8A88; }\n.cm-s-dracula .CodeMirror-selected { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula .CodeMirror-line::selection, .cm-s-dracula .CodeMirror-line > span::selection, .cm-s-dracula .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula .CodeMirror-line::-moz-selection, .cm-s-dracula .CodeMirror-line > span::-moz-selection, .cm-s-dracula .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula span.cm-comment { color: #6272a4; }\n.cm-s-dracula span.cm-string, .cm-s-dracula span.cm-string-2 { color: #f1fa8c; }\n.cm-s-dracula span.cm-number { color: #bd93f9; }\n.cm-s-dracula span.cm-variable { color: #50fa7b; }\n.cm-s-dracula span.cm-variable-2 { color: white; }\n.cm-s-dracula span.cm-def { color: #50fa7b; }\n.cm-s-dracula span.cm-operator { color: #ff79c6; }\n.cm-s-dracula span.cm-keyword { color: #ff79c6; }\n.cm-s-dracula span.cm-atom { color: #bd93f9; }\n.cm-s-dracula span.cm-meta { color: #f8f8f2; }\n.cm-s-dracula span.cm-tag { color: #ff79c6; }\n.cm-s-dracula span.cm-attribute { color: #50fa7b; }\n.cm-s-dracula span.cm-qualifier { color: #50fa7b; }\n.cm-s-dracula span.cm-property { color: #66d9ef; }\n.cm-s-dracula span.cm-builtin { color: #50fa7b; }\n.cm-s-dracula span.cm-variable-3, .cm-s-dracula span.cm-type { color: #ffb86c; }\n\n.cm-s-dracula .CodeMirror-activeline-background { background: rgba(255,255,255,0.1); }\n.cm-s-dracula .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/portal-ui/build/static/css/9645.16d04f59.chunk.css b/portal-ui/build/static/css/9645.16d04f59.chunk.css deleted file mode 100644 index 8c2f99fb4..000000000 --- a/portal-ui/build/static/css/9645.16d04f59.chunk.css +++ /dev/null @@ -1,2 +0,0 @@ -.cm-s-dracula.CodeMirror,.cm-s-dracula .CodeMirror-gutters{background-color:#282a36!important;border:none;color:#f8f8f2!important}.cm-s-dracula .CodeMirror-gutters{color:#282a36}.cm-s-dracula .CodeMirror-cursor{border-left:thin solid #f8f8f0}.cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.cm-s-dracula .CodeMirror-selected{background:hsla(0,0%,100%,.1)}.cm-s-dracula .CodeMirror-line::selection,.cm-s-dracula .CodeMirror-line>span::selection,.cm-s-dracula .CodeMirror-line>span>span::selection{background:hsla(0,0%,100%,.1)}.cm-s-dracula .CodeMirror-line::-moz-selection,.cm-s-dracula .CodeMirror-line>span::-moz-selection,.cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:hsla(0,0%,100%,.1)}.cm-s-dracula span.cm-comment{color:#6272a4}.cm-s-dracula span.cm-string,.cm-s-dracula span.cm-string-2{color:#f1fa8c}.cm-s-dracula span.cm-number{color:#bd93f9}.cm-s-dracula span.cm-variable{color:#50fa7b}.cm-s-dracula span.cm-variable-2{color:#fff}.cm-s-dracula span.cm-def{color:#50fa7b}.cm-s-dracula span.cm-keyword,.cm-s-dracula span.cm-operator{color:#ff79c6}.cm-s-dracula span.cm-atom{color:#bd93f9}.cm-s-dracula span.cm-meta{color:#f8f8f2}.cm-s-dracula span.cm-tag{color:#ff79c6}.cm-s-dracula span.cm-attribute,.cm-s-dracula span.cm-qualifier{color:#50fa7b}.cm-s-dracula span.cm-property{color:#66d9ef}.cm-s-dracula span.cm-builtin{color:#50fa7b}.cm-s-dracula span.cm-type,.cm-s-dracula span.cm-variable-3{color:#ffb86c}.cm-s-dracula .CodeMirror-activeline-background{background:hsla(0,0%,100%,.1)}.cm-s-dracula .CodeMirror-matchingbracket{color:#fff!important;text-decoration:underline} -/*# sourceMappingURL=9645.16d04f59.chunk.css.map*/ \ No newline at end of file diff --git a/portal-ui/build/static/css/9645.16d04f59.chunk.css.map b/portal-ui/build/static/css/9645.16d04f59.chunk.css.map deleted file mode 100644 index 4ed81b6b6..000000000 --- a/portal-ui/build/static/css/9645.16d04f59.chunk.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/css/9645.16d04f59.chunk.css","mappings":"AAUA,2DACE,kCAAoC,CAEpC,WAAY,CADZ,uBAEF,CACA,kCAAoC,aAAgB,CACpD,iCAAmC,8BAAiC,CACpE,qCAAuC,aAAgB,CACvD,mCAAqC,6BAAuC,CAC5E,6IAAuJ,6BAAuC,CAC9L,4JAAsK,6BAAuC,CAC7M,8BAAgC,aAAgB,CAChD,4DAA+D,aAAgB,CAC/E,6BAA+B,aAAgB,CAC/C,+BAAiC,aAAgB,CACjD,iCAAmC,UAAc,CACjD,0BAA4B,aAAgB,CAE5C,6DAAgC,aAAgB,CAChD,2BAA6B,aAAgB,CAC7C,2BAA6B,aAAgB,CAC7C,0BAA4B,aAAgB,CAE5C,gEAAkC,aAAgB,CAClD,+BAAiC,aAAgB,CACjD,8BAAgC,aAAgB,CAChD,4DAA+D,aAAgB,CAE/E,gDAAkD,6BAAmC,CACrF,0CAAwE,oBAAuB,CAAnD,yBAAqD","sources":["../node_modules/codemirror/theme/dracula.css"],"sourcesContent":["/*\n\n Name: dracula\n Author: Michael Kaminsky (http://github.com/mkaminsky11)\n\n Original dracula color scheme by Zeno Rocha (https://github.com/zenorocha/dracula-theme)\n\n*/\n\n\n.cm-s-dracula.CodeMirror, .cm-s-dracula .CodeMirror-gutters {\n background-color: #282a36 !important;\n color: #f8f8f2 !important;\n border: none;\n}\n.cm-s-dracula .CodeMirror-gutters { color: #282a36; }\n.cm-s-dracula .CodeMirror-cursor { border-left: solid thin #f8f8f0; }\n.cm-s-dracula .CodeMirror-linenumber { color: #6D8A88; }\n.cm-s-dracula .CodeMirror-selected { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula .CodeMirror-line::selection, .cm-s-dracula .CodeMirror-line > span::selection, .cm-s-dracula .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula .CodeMirror-line::-moz-selection, .cm-s-dracula .CodeMirror-line > span::-moz-selection, .cm-s-dracula .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula span.cm-comment { color: #6272a4; }\n.cm-s-dracula span.cm-string, .cm-s-dracula span.cm-string-2 { color: #f1fa8c; }\n.cm-s-dracula span.cm-number { color: #bd93f9; }\n.cm-s-dracula span.cm-variable { color: #50fa7b; }\n.cm-s-dracula span.cm-variable-2 { color: white; }\n.cm-s-dracula span.cm-def { color: #50fa7b; }\n.cm-s-dracula span.cm-operator { color: #ff79c6; }\n.cm-s-dracula span.cm-keyword { color: #ff79c6; }\n.cm-s-dracula span.cm-atom { color: #bd93f9; }\n.cm-s-dracula span.cm-meta { color: #f8f8f2; }\n.cm-s-dracula span.cm-tag { color: #ff79c6; }\n.cm-s-dracula span.cm-attribute { color: #50fa7b; }\n.cm-s-dracula span.cm-qualifier { color: #50fa7b; }\n.cm-s-dracula span.cm-property { color: #66d9ef; }\n.cm-s-dracula span.cm-builtin { color: #50fa7b; }\n.cm-s-dracula span.cm-variable-3, .cm-s-dracula span.cm-type { color: #ffb86c; }\n\n.cm-s-dracula .CodeMirror-activeline-background { background: rgba(255,255,255,0.1); }\n.cm-s-dracula .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/portal-ui/build/static/css/9645.8e16189d.chunk.css b/portal-ui/build/static/css/9645.8e16189d.chunk.css new file mode 100644 index 000000000..918d574b9 --- /dev/null +++ b/portal-ui/build/static/css/9645.8e16189d.chunk.css @@ -0,0 +1,2 @@ +.cm-s-dracula.CodeMirror,.cm-s-dracula .CodeMirror-gutters{background-color:#282a36!important;border:none;color:#f8f8f2!important}.cm-s-dracula .CodeMirror-gutters{color:#282a36}.cm-s-dracula .CodeMirror-cursor{border-left:thin solid #f8f8f0}.cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.cm-s-dracula .CodeMirror-selected{background:hsla(0,0%,100%,.1)}.cm-s-dracula .CodeMirror-line::selection,.cm-s-dracula .CodeMirror-line>span::selection,.cm-s-dracula .CodeMirror-line>span>span::selection{background:hsla(0,0%,100%,.1)}.cm-s-dracula .CodeMirror-line::-moz-selection,.cm-s-dracula .CodeMirror-line>span::-moz-selection,.cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:hsla(0,0%,100%,.1)}.cm-s-dracula span.cm-comment{color:#6272a4}.cm-s-dracula span.cm-string,.cm-s-dracula span.cm-string-2{color:#f1fa8c}.cm-s-dracula span.cm-number{color:#bd93f9}.cm-s-dracula span.cm-variable{color:#50fa7b}.cm-s-dracula span.cm-variable-2{color:#fff}.cm-s-dracula span.cm-def{color:#50fa7b}.cm-s-dracula span.cm-keyword,.cm-s-dracula span.cm-operator{color:#ff79c6}.cm-s-dracula span.cm-atom{color:#bd93f9}.cm-s-dracula span.cm-meta{color:#f8f8f2}.cm-s-dracula span.cm-tag{color:#ff79c6}.cm-s-dracula span.cm-attribute,.cm-s-dracula span.cm-qualifier{color:#50fa7b}.cm-s-dracula span.cm-property{color:#66d9ef}.cm-s-dracula span.cm-builtin{color:#50fa7b}.cm-s-dracula span.cm-type,.cm-s-dracula span.cm-variable-3{color:#ffb86c}.cm-s-dracula .CodeMirror-activeline-background{background:hsla(0,0%,100%,.1)}.cm-s-dracula .CodeMirror-matchingbracket{color:#fff!important;text-decoration:underline} +/*# sourceMappingURL=9645.8e16189d.chunk.css.map*/ \ No newline at end of file diff --git a/portal-ui/build/static/css/9645.8e16189d.chunk.css.map b/portal-ui/build/static/css/9645.8e16189d.chunk.css.map new file mode 100644 index 000000000..286ddbe72 --- /dev/null +++ b/portal-ui/build/static/css/9645.8e16189d.chunk.css.map @@ -0,0 +1 @@ +{"version":3,"file":"static/css/9645.8e16189d.chunk.css","mappings":"AAUA,2DACE,kCAAoC,CAEpC,WAAY,CADZ,uBAEF,CACA,kCAAoC,aAAgB,CACpD,iCAAmC,8BAAiC,CACpE,qCAAuC,aAAgB,CACvD,mCAAqC,6BAAuC,CAC5E,6IAAuJ,6BAAuC,CAC9L,4JAAsK,6BAAuC,CAC7M,8BAAgC,aAAgB,CAChD,4DAA+D,aAAgB,CAC/E,6BAA+B,aAAgB,CAC/C,+BAAiC,aAAgB,CACjD,iCAAmC,UAAc,CACjD,0BAA4B,aAAgB,CAE5C,6DAAgC,aAAgB,CAChD,2BAA6B,aAAgB,CAC7C,2BAA6B,aAAgB,CAC7C,0BAA4B,aAAgB,CAE5C,gEAAkC,aAAgB,CAClD,+BAAiC,aAAgB,CACjD,8BAAgC,aAAgB,CAChD,4DAA+D,aAAgB,CAE/E,gDAAkD,6BAAmC,CACrF,0CAAwE,oBAAuB,CAAnD,yBAAqD","sources":["../node_modules/codemirror/theme/dracula.css"],"sourcesContent":["/*\n\n Name: dracula\n Author: Michael Kaminsky (http://github.com/mkaminsky11)\n\n Original dracula color scheme by Zeno Rocha (https://github.com/zenorocha/dracula-theme)\n\n*/\n\n\n.cm-s-dracula.CodeMirror, .cm-s-dracula .CodeMirror-gutters {\n background-color: #282a36 !important;\n color: #f8f8f2 !important;\n border: none;\n}\n.cm-s-dracula .CodeMirror-gutters { color: #282a36; }\n.cm-s-dracula .CodeMirror-cursor { border-left: solid thin #f8f8f0; }\n.cm-s-dracula .CodeMirror-linenumber { color: #6D8A88; }\n.cm-s-dracula .CodeMirror-selected { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula .CodeMirror-line::selection, .cm-s-dracula .CodeMirror-line > span::selection, .cm-s-dracula .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula .CodeMirror-line::-moz-selection, .cm-s-dracula .CodeMirror-line > span::-moz-selection, .cm-s-dracula .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula span.cm-comment { color: #6272a4; }\n.cm-s-dracula span.cm-string, .cm-s-dracula span.cm-string-2 { color: #f1fa8c; }\n.cm-s-dracula span.cm-number { color: #bd93f9; }\n.cm-s-dracula span.cm-variable { color: #50fa7b; }\n.cm-s-dracula span.cm-variable-2 { color: white; }\n.cm-s-dracula span.cm-def { color: #50fa7b; }\n.cm-s-dracula span.cm-operator { color: #ff79c6; }\n.cm-s-dracula span.cm-keyword { color: #ff79c6; }\n.cm-s-dracula span.cm-atom { color: #bd93f9; }\n.cm-s-dracula span.cm-meta { color: #f8f8f2; }\n.cm-s-dracula span.cm-tag { color: #ff79c6; }\n.cm-s-dracula span.cm-attribute { color: #50fa7b; }\n.cm-s-dracula span.cm-qualifier { color: #50fa7b; }\n.cm-s-dracula span.cm-property { color: #66d9ef; }\n.cm-s-dracula span.cm-builtin { color: #50fa7b; }\n.cm-s-dracula span.cm-variable-3, .cm-s-dracula span.cm-type { color: #ffb86c; }\n\n.cm-s-dracula .CodeMirror-activeline-background { background: rgba(255,255,255,0.1); }\n.cm-s-dracula .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/portal-ui/build/static/css/9807.16d04f59.chunk.css b/portal-ui/build/static/css/9807.16d04f59.chunk.css deleted file mode 100644 index 67fc25733..000000000 --- a/portal-ui/build/static/css/9807.16d04f59.chunk.css +++ /dev/null @@ -1,2 +0,0 @@ -.cm-s-dracula.CodeMirror,.cm-s-dracula .CodeMirror-gutters{background-color:#282a36!important;border:none;color:#f8f8f2!important}.cm-s-dracula .CodeMirror-gutters{color:#282a36}.cm-s-dracula .CodeMirror-cursor{border-left:thin solid #f8f8f0}.cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.cm-s-dracula .CodeMirror-selected{background:hsla(0,0%,100%,.1)}.cm-s-dracula .CodeMirror-line::selection,.cm-s-dracula .CodeMirror-line>span::selection,.cm-s-dracula .CodeMirror-line>span>span::selection{background:hsla(0,0%,100%,.1)}.cm-s-dracula .CodeMirror-line::-moz-selection,.cm-s-dracula .CodeMirror-line>span::-moz-selection,.cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:hsla(0,0%,100%,.1)}.cm-s-dracula span.cm-comment{color:#6272a4}.cm-s-dracula span.cm-string,.cm-s-dracula span.cm-string-2{color:#f1fa8c}.cm-s-dracula span.cm-number{color:#bd93f9}.cm-s-dracula span.cm-variable{color:#50fa7b}.cm-s-dracula span.cm-variable-2{color:#fff}.cm-s-dracula span.cm-def{color:#50fa7b}.cm-s-dracula span.cm-keyword,.cm-s-dracula span.cm-operator{color:#ff79c6}.cm-s-dracula span.cm-atom{color:#bd93f9}.cm-s-dracula span.cm-meta{color:#f8f8f2}.cm-s-dracula span.cm-tag{color:#ff79c6}.cm-s-dracula span.cm-attribute,.cm-s-dracula span.cm-qualifier{color:#50fa7b}.cm-s-dracula span.cm-property{color:#66d9ef}.cm-s-dracula span.cm-builtin{color:#50fa7b}.cm-s-dracula span.cm-type,.cm-s-dracula span.cm-variable-3{color:#ffb86c}.cm-s-dracula .CodeMirror-activeline-background{background:hsla(0,0%,100%,.1)}.cm-s-dracula .CodeMirror-matchingbracket{color:#fff!important;text-decoration:underline} -/*# sourceMappingURL=9807.16d04f59.chunk.css.map*/ \ No newline at end of file diff --git a/portal-ui/build/static/css/9807.16d04f59.chunk.css.map b/portal-ui/build/static/css/9807.16d04f59.chunk.css.map deleted file mode 100644 index d7850825a..000000000 --- a/portal-ui/build/static/css/9807.16d04f59.chunk.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/css/9807.16d04f59.chunk.css","mappings":"AAUA,2DACE,kCAAoC,CAEpC,WAAY,CADZ,uBAEF,CACA,kCAAoC,aAAgB,CACpD,iCAAmC,8BAAiC,CACpE,qCAAuC,aAAgB,CACvD,mCAAqC,6BAAuC,CAC5E,6IAAuJ,6BAAuC,CAC9L,4JAAsK,6BAAuC,CAC7M,8BAAgC,aAAgB,CAChD,4DAA+D,aAAgB,CAC/E,6BAA+B,aAAgB,CAC/C,+BAAiC,aAAgB,CACjD,iCAAmC,UAAc,CACjD,0BAA4B,aAAgB,CAE5C,6DAAgC,aAAgB,CAChD,2BAA6B,aAAgB,CAC7C,2BAA6B,aAAgB,CAC7C,0BAA4B,aAAgB,CAE5C,gEAAkC,aAAgB,CAClD,+BAAiC,aAAgB,CACjD,8BAAgC,aAAgB,CAChD,4DAA+D,aAAgB,CAE/E,gDAAkD,6BAAmC,CACrF,0CAAwE,oBAAuB,CAAnD,yBAAqD","sources":["../node_modules/codemirror/theme/dracula.css"],"sourcesContent":["/*\n\n Name: dracula\n Author: Michael Kaminsky (http://github.com/mkaminsky11)\n\n Original dracula color scheme by Zeno Rocha (https://github.com/zenorocha/dracula-theme)\n\n*/\n\n\n.cm-s-dracula.CodeMirror, .cm-s-dracula .CodeMirror-gutters {\n background-color: #282a36 !important;\n color: #f8f8f2 !important;\n border: none;\n}\n.cm-s-dracula .CodeMirror-gutters { color: #282a36; }\n.cm-s-dracula .CodeMirror-cursor { border-left: solid thin #f8f8f0; }\n.cm-s-dracula .CodeMirror-linenumber { color: #6D8A88; }\n.cm-s-dracula .CodeMirror-selected { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula .CodeMirror-line::selection, .cm-s-dracula .CodeMirror-line > span::selection, .cm-s-dracula .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula .CodeMirror-line::-moz-selection, .cm-s-dracula .CodeMirror-line > span::-moz-selection, .cm-s-dracula .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula span.cm-comment { color: #6272a4; }\n.cm-s-dracula span.cm-string, .cm-s-dracula span.cm-string-2 { color: #f1fa8c; }\n.cm-s-dracula span.cm-number { color: #bd93f9; }\n.cm-s-dracula span.cm-variable { color: #50fa7b; }\n.cm-s-dracula span.cm-variable-2 { color: white; }\n.cm-s-dracula span.cm-def { color: #50fa7b; }\n.cm-s-dracula span.cm-operator { color: #ff79c6; }\n.cm-s-dracula span.cm-keyword { color: #ff79c6; }\n.cm-s-dracula span.cm-atom { color: #bd93f9; }\n.cm-s-dracula span.cm-meta { color: #f8f8f2; }\n.cm-s-dracula span.cm-tag { color: #ff79c6; }\n.cm-s-dracula span.cm-attribute { color: #50fa7b; }\n.cm-s-dracula span.cm-qualifier { color: #50fa7b; }\n.cm-s-dracula span.cm-property { color: #66d9ef; }\n.cm-s-dracula span.cm-builtin { color: #50fa7b; }\n.cm-s-dracula span.cm-variable-3, .cm-s-dracula span.cm-type { color: #ffb86c; }\n\n.cm-s-dracula .CodeMirror-activeline-background { background: rgba(255,255,255,0.1); }\n.cm-s-dracula .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/portal-ui/build/static/css/9807.8e16189d.chunk.css b/portal-ui/build/static/css/9807.8e16189d.chunk.css new file mode 100644 index 000000000..69cadd19f --- /dev/null +++ b/portal-ui/build/static/css/9807.8e16189d.chunk.css @@ -0,0 +1,2 @@ +.cm-s-dracula.CodeMirror,.cm-s-dracula .CodeMirror-gutters{background-color:#282a36!important;border:none;color:#f8f8f2!important}.cm-s-dracula .CodeMirror-gutters{color:#282a36}.cm-s-dracula .CodeMirror-cursor{border-left:thin solid #f8f8f0}.cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.cm-s-dracula .CodeMirror-selected{background:hsla(0,0%,100%,.1)}.cm-s-dracula .CodeMirror-line::selection,.cm-s-dracula .CodeMirror-line>span::selection,.cm-s-dracula .CodeMirror-line>span>span::selection{background:hsla(0,0%,100%,.1)}.cm-s-dracula .CodeMirror-line::-moz-selection,.cm-s-dracula .CodeMirror-line>span::-moz-selection,.cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:hsla(0,0%,100%,.1)}.cm-s-dracula span.cm-comment{color:#6272a4}.cm-s-dracula span.cm-string,.cm-s-dracula span.cm-string-2{color:#f1fa8c}.cm-s-dracula span.cm-number{color:#bd93f9}.cm-s-dracula span.cm-variable{color:#50fa7b}.cm-s-dracula span.cm-variable-2{color:#fff}.cm-s-dracula span.cm-def{color:#50fa7b}.cm-s-dracula span.cm-keyword,.cm-s-dracula span.cm-operator{color:#ff79c6}.cm-s-dracula span.cm-atom{color:#bd93f9}.cm-s-dracula span.cm-meta{color:#f8f8f2}.cm-s-dracula span.cm-tag{color:#ff79c6}.cm-s-dracula span.cm-attribute,.cm-s-dracula span.cm-qualifier{color:#50fa7b}.cm-s-dracula span.cm-property{color:#66d9ef}.cm-s-dracula span.cm-builtin{color:#50fa7b}.cm-s-dracula span.cm-type,.cm-s-dracula span.cm-variable-3{color:#ffb86c}.cm-s-dracula .CodeMirror-activeline-background{background:hsla(0,0%,100%,.1)}.cm-s-dracula .CodeMirror-matchingbracket{color:#fff!important;text-decoration:underline} +/*# sourceMappingURL=9807.8e16189d.chunk.css.map*/ \ No newline at end of file diff --git a/portal-ui/build/static/css/9807.8e16189d.chunk.css.map b/portal-ui/build/static/css/9807.8e16189d.chunk.css.map new file mode 100644 index 000000000..c4329caf4 --- /dev/null +++ b/portal-ui/build/static/css/9807.8e16189d.chunk.css.map @@ -0,0 +1 @@ +{"version":3,"file":"static/css/9807.8e16189d.chunk.css","mappings":"AAUA,2DACE,kCAAoC,CAEpC,WAAY,CADZ,uBAEF,CACA,kCAAoC,aAAgB,CACpD,iCAAmC,8BAAiC,CACpE,qCAAuC,aAAgB,CACvD,mCAAqC,6BAAuC,CAC5E,6IAAuJ,6BAAuC,CAC9L,4JAAsK,6BAAuC,CAC7M,8BAAgC,aAAgB,CAChD,4DAA+D,aAAgB,CAC/E,6BAA+B,aAAgB,CAC/C,+BAAiC,aAAgB,CACjD,iCAAmC,UAAc,CACjD,0BAA4B,aAAgB,CAE5C,6DAAgC,aAAgB,CAChD,2BAA6B,aAAgB,CAC7C,2BAA6B,aAAgB,CAC7C,0BAA4B,aAAgB,CAE5C,gEAAkC,aAAgB,CAClD,+BAAiC,aAAgB,CACjD,8BAAgC,aAAgB,CAChD,4DAA+D,aAAgB,CAE/E,gDAAkD,6BAAmC,CACrF,0CAAwE,oBAAuB,CAAnD,yBAAqD","sources":["../node_modules/codemirror/theme/dracula.css"],"sourcesContent":["/*\n\n Name: dracula\n Author: Michael Kaminsky (http://github.com/mkaminsky11)\n\n Original dracula color scheme by Zeno Rocha (https://github.com/zenorocha/dracula-theme)\n\n*/\n\n\n.cm-s-dracula.CodeMirror, .cm-s-dracula .CodeMirror-gutters {\n background-color: #282a36 !important;\n color: #f8f8f2 !important;\n border: none;\n}\n.cm-s-dracula .CodeMirror-gutters { color: #282a36; }\n.cm-s-dracula .CodeMirror-cursor { border-left: solid thin #f8f8f0; }\n.cm-s-dracula .CodeMirror-linenumber { color: #6D8A88; }\n.cm-s-dracula .CodeMirror-selected { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula .CodeMirror-line::selection, .cm-s-dracula .CodeMirror-line > span::selection, .cm-s-dracula .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula .CodeMirror-line::-moz-selection, .cm-s-dracula .CodeMirror-line > span::-moz-selection, .cm-s-dracula .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); }\n.cm-s-dracula span.cm-comment { color: #6272a4; }\n.cm-s-dracula span.cm-string, .cm-s-dracula span.cm-string-2 { color: #f1fa8c; }\n.cm-s-dracula span.cm-number { color: #bd93f9; }\n.cm-s-dracula span.cm-variable { color: #50fa7b; }\n.cm-s-dracula span.cm-variable-2 { color: white; }\n.cm-s-dracula span.cm-def { color: #50fa7b; }\n.cm-s-dracula span.cm-operator { color: #ff79c6; }\n.cm-s-dracula span.cm-keyword { color: #ff79c6; }\n.cm-s-dracula span.cm-atom { color: #bd93f9; }\n.cm-s-dracula span.cm-meta { color: #f8f8f2; }\n.cm-s-dracula span.cm-tag { color: #ff79c6; }\n.cm-s-dracula span.cm-attribute { color: #50fa7b; }\n.cm-s-dracula span.cm-qualifier { color: #50fa7b; }\n.cm-s-dracula span.cm-property { color: #66d9ef; }\n.cm-s-dracula span.cm-builtin { color: #50fa7b; }\n.cm-s-dracula span.cm-variable-3, .cm-s-dracula span.cm-type { color: #ffb86c; }\n\n.cm-s-dracula .CodeMirror-activeline-background { background: rgba(255,255,255,0.1); }\n.cm-s-dracula .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/portal-ui/build/static/js/1056.369ba3ab.chunk.js b/portal-ui/build/static/js/1056.369ba3ab.chunk.js new file mode 100644 index 000000000..7de844eca --- /dev/null +++ b/portal-ui/build/static/js/1056.369ba3ab.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1056,1140],{29316:function(e,t,n){n(50390);var r=n(6369),a=n(86509),s=n(4285),i=n(85615),o=n(62559);t.Z=(0,s.Z)((function(e){return(0,a.Z)({link:{display:"flex",alignItems:"center",textDecoration:"none",maxWidth:"300px",padding:"2rem 2rem 0rem 2rem",color:e.palette.primary.light,fontSize:".8rem","&:hover":{textDecoration:"underline"}},icon:{marginRight:".3rem",display:"flex",alignItems:"center",justifyContent:"center","& svg.min-icon":{width:12}}})}))((function(e){var t=e.to,n=e.label,a=e.classes,s=e.className,l=e.executeOnClick;return(0,o.jsxs)(r.rU,{to:t,className:"".concat(a.link," ").concat(s||""),onClick:function(){l&&l()},children:[(0,o.jsx)("div",{className:a.icon,children:(0,o.jsx)(i.xN,{})}),(0,o.jsx)("div",{className:a.label,children:n})]})}))},39080:function(e,t,n){n.r(t),n.d(t,{default:function(){return Z}});var r=n(18489),a=n(35531),s=n(50390),i=n(38342),o=n.n(i),l=n(86509),c=n(4285),u=n(66946),d=n(76352),m=n(25594),g=n(58217),p=n(65771),f=n(70758),h=n(33034),x=n.n(h),v=n(85615),y=n(72462),S=n(62559),C=(0,c.Z)((function(e){return(0,l.Z)({container:{display:"flex",flexFlow:"column",padding:"20px 0 8px 0"},inputWithCopy:{"& .MuiInputBase-root ":{width:"100%",background:"#FBFAFA","& .MuiInputBase-input":{height:".8rem"},"& .MuiInputAdornment-positionEnd":{marginRight:".5rem","& .MuiButtonBase-root":{height:"2rem"}}},"& .MuiButtonBase-root .min-icon":{width:".8rem",height:".8rem"}},inputLabel:(0,r.Z)((0,r.Z)({},y.YI.inputLabel),{},{fontSize:".8rem"})})}))((function(e){var t=e.label,n=void 0===t?"":t,r=e.value,a=void 0===r?"":r,s=e.classes,i=void 0===s?{}:s;return(0,S.jsxs)("div",{className:i.container,children:[(0,S.jsxs)("div",{className:i.inputLabel,children:[n,":"]}),(0,S.jsx)("div",{className:i.inputWithCopy,children:(0,S.jsx)(g.Z,{value:a,readOnly:!0,endAdornment:(0,S.jsx)(p.Z,{position:"end",children:(0,S.jsx)(x(),{text:a,children:(0,S.jsx)(f.Z,{"aria-label":"copy",tooltip:"Copy",onClick:function(){},onMouseDown:function(){},edge:"end",children:(0,S.jsx)(v.TI,{})})})})})})]})})),j=n(47424),Z=(0,c.Z)((function(e){return(0,l.Z)({warningBlock:{color:"red",fontSize:".85rem",margin:".5rem 0 .5rem 0",display:"flex",alignItems:"center","& svg ":{marginRight:".3rem",height:16,width:16}},credentialTitle:{padding:".8rem 0 0 0",fontWeight:600,fontSize:".9rem"},buttonContainer:{textAlign:"right",marginTop:"1rem"},credentialsPanel:{overflowY:"auto",maxHeight:350},promptTitle:{display:"flex",alignItems:"center"},buttonSpacer:{marginRight:".9rem"},promptIcon:{marginRight:".1rem",display:"flex",alignItems:"center",height:"2rem",width:"2rem"}})}))((function(e){var t=e.classes,n=e.newServiceAccount,i=e.open,l=e.closeModal,c=e.entity;if(!n)return null;var g=o()(n,"console",null),p=o()(n,"idp",!1);return(0,S.jsx)(d.Z,{modalOpen:i,onClose:function(){l()},title:(0,S.jsx)("div",{className:t.promptTitle,children:(0,S.jsxs)("div",{children:["New ",c," Created"]})}),titleIcon:(0,S.jsx)(v.tV,{}),children:(0,S.jsxs)(m.ZP,{container:!0,children:[(0,S.jsxs)(m.ZP,{item:!0,xs:12,className:t.formScrollable,children:["A new ",c," has been created with the following details:",!p&&g&&(0,S.jsx)(s.Fragment,{children:(0,S.jsxs)(m.ZP,{item:!0,xs:12,className:t.credentialsPanel,children:[(0,S.jsx)("div",{className:t.credentialTitle,children:"Console Credentials"}),Array.isArray(g)&&g.map((function(e,t){return(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(C,{label:"Access Key",value:e.accessKey}),(0,S.jsx)(C,{label:"Secret Key",value:e.secretKey})]})})),!Array.isArray(g)&&(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(C,{label:"Access Key",value:g.accessKey}),(0,S.jsx)(C,{label:"Secret Key",value:g.secretKey})]})]})}),p?(0,S.jsx)("div",{className:t.warningBlock,children:"Please Login via the configured external identity provider."}):(0,S.jsxs)("div",{className:t.warningBlock,children:[(0,S.jsx)(j.Z,{}),(0,S.jsx)("span",{children:"Write these down, as this is the only time the secret will be displayed."})]})]}),(0,S.jsxs)(m.ZP,{item:!0,xs:12,className:t.buttonContainer,children:[(0,S.jsx)(u.Z,{id:"done-button",variant:"outlined",className:t.buttonSpacer,onClick:function(){l()},color:"primary",children:"Done"}),!p&&(0,S.jsx)(u.Z,{id:"download-button",onClick:function(){var e={};if(g)if(Array.isArray(g)){var t=g.map((function(e){return{url:e.url,access_key:e.accessKey,secret_key:e.secretKey,api:"s3v4",path:"auto"}}));e={console:(0,a.Z)(t)}}else e={console:[{url:g.url,access_key:g.accessKey,secret_key:g.secretKey,api:"s3v4",path:"auto"}]};!function(e,t){var n=document.createElement("a");n.setAttribute("href","data:text/plain;charset=utf-8,"+encodeURIComponent(t)),n.setAttribute("download",e),n.style.display="none",document.body.appendChild(n),n.click(),document.body.removeChild(n)}("credentials.json",JSON.stringify((0,r.Z)({},e)))},endIcon:(0,S.jsx)(v._8,{}),variant:"contained",color:"primary",children:"Download"})]})]})})}))},82461:function(e,t,n){n.d(t,{Z:function(){return S}});var r=n(23430),a=n(18489),s=n(50390),i=n(38342),o=n.n(i),l=n(25594),c=n(36554),u=n(94187),d=n(95467),m=n(46529),g=n(94258),p=n(86509),f=n(4285),h=n(72462),x=n(97538),v=n(82981),y=n(62559),S=(0,f.Z)((function(e){return(0,p.Z)((0,a.Z)((0,a.Z)((0,a.Z)((0,a.Z)({},h.YI),h.Hr),{},{valueString:{maxWidth:350,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",marginTop:2},fileInputField:{margin:"13px 0","@media (max-width: 900px)":{flexFlow:"column"}}},h.bV),{},{inputLabel:(0,a.Z)((0,a.Z)({},h.YI.inputLabel),{},{fontWeight:"normal"}),textBoxContainer:(0,a.Z)((0,a.Z)({},h.YI.textBoxContainer),{},{maxWidth:"100%",border:"1px solid #eaeaea",paddingLeft:"15px"})}))}))((function(e){var t=e.label,n=e.classes,a=e.onChange,i=e.id,p=e.name,f=e.disabled,h=void 0!==f&&f,S=e.tooltip,C=void 0===S?"":S,j=e.required,Z=e.error,_=void 0===Z?"":Z,b=e.accept,P=void 0===b?"":b,N=e.value,I=void 0===N?"":N,A=(0,s.useState)(!1),T=(0,r.Z)(A,2),k=T[0],R=T[1];return(0,y.jsx)(s.Fragment,{children:(0,y.jsxs)(l.ZP,{item:!0,xs:12,className:"".concat(n.fileInputField," ").concat(n.fieldBottom," ").concat(n.fieldContainer," ").concat(""!==_?n.errorInField:""),children:[""!==t&&(0,y.jsxs)(c.Z,{htmlFor:i,className:"".concat(""!==_?n.fieldLabelError:""," ").concat(n.inputLabel),children:[(0,y.jsxs)("span",{children:[t,j?"*":""]}),""!==C&&(0,y.jsx)("div",{className:n.tooltipContainer,children:(0,y.jsx)(u.Z,{title:C,placement:"top-start",children:(0,y.jsx)("div",{className:n.tooltip,children:(0,y.jsx)(x.Z,{})})})})]}),k||""===I?(0,y.jsxs)("div",{className:n.textBoxContainer,children:[(0,y.jsx)("input",{type:"file",name:p,onChange:function(e){var t=o()(e,"target.files[0].name","");!function(e,t){var n=e.target.files[0],r=new FileReader;r.readAsDataURL(n),r.onload=function(){var e=r.result;if(e){var n=e.toString().split("base64,");2===n.length&&t(n[1])}}}(e,(function(e){a(e,t)}))},accept:P,required:j,disabled:h,className:n.fileInputField}),""!==I&&(0,y.jsx)(d.Z,{color:"primary","aria-label":"upload picture",component:"span",onClick:function(){R(!1)},disableRipple:!1,disableFocusRipple:!1,size:"small",children:(0,y.jsx)(g.Z,{})}),""!==_&&(0,y.jsx)(v.Z,{errorMessage:_})]}):(0,y.jsxs)("div",{className:n.fileReselect,children:[(0,y.jsx)("div",{className:n.valueString,children:I}),(0,y.jsx)(d.Z,{color:"primary","aria-label":"upload picture",component:"span",onClick:function(){R(!0)},disableRipple:!1,disableFocusRipple:!1,size:"small",children:(0,y.jsx)(m.Z,{})})]})]})})}))},25534:function(e,t,n){var r=n(18489),a=(n(50390),n(25594)),s=n(86509),i=n(4285),o=n(72462),l=n(62559);t.Z=(0,i.Z)((function(e){return(0,s.Z)((0,r.Z)({},o.Bw))}))((function(e){var t=e.classes,n=e.className,r=void 0===n?"":n,s=e.children;return(0,l.jsx)("div",{className:t.contentSpacer,children:(0,l.jsx)(a.ZP,{container:!0,children:(0,l.jsx)(a.ZP,{item:!0,xs:12,className:r,children:s})})})}))},1056:function(e,t,n){n.r(t),n.d(t,{default:function(){return we}});var r,a,s=n(23430),i=n(18489),o=n(50390),l=n(38342),c=n.n(l),u=n(34424),d=n(25594),m=n(81378),g=n(86509),p=n(4285),f=n(72462),h=n(30324),x=n(28948),v=n(76295),y=n(44149),S=n(93127),C=n(39080),j=n(46864),Z=n(35531),_=n(46981),b=n(10369),P=n(84201),N=n(92440),I=n(66964),A=n(67754),T=n(1365),k=n(62559),R=(0,u.$j)((function(e){return{storageClasses:e.tenants.createTenant.storageClasses,customImage:e.tenants.createTenant.fields.configure.customImage,imageName:e.tenants.createTenant.fields.configure.imageName,customDockerhub:e.tenants.createTenant.fields.configure.customDockerhub,imageRegistry:e.tenants.createTenant.fields.configure.imageRegistry,imageRegistryUsername:e.tenants.createTenant.fields.configure.imageRegistryUsername,imageRegistryPassword:e.tenants.createTenant.fields.configure.imageRegistryPassword,exposeMinIO:e.tenants.createTenant.fields.configure.exposeMinIO,exposeConsole:e.tenants.createTenant.fields.configure.exposeConsole,prometheusCustom:e.tenants.createTenant.fields.configure.prometheusCustom,tenantCustom:e.tenants.createTenant.fields.configure.tenantCustom,logSearchCustom:e.tenants.createTenant.fields.configure.logSearchCustom,logSearchVolumeSize:e.tenants.createTenant.fields.configure.logSearchVolumeSize,logSearchSizeFactor:e.tenants.createTenant.fields.configure.logSearchSizeFactor,prometheusVolumeSize:e.tenants.createTenant.fields.configure.prometheusVolumeSize,prometheusSizeFactor:e.tenants.createTenant.fields.configure.prometheusSizeFactor,logSearchSelectedStorageClass:e.tenants.createTenant.fields.configure.logSearchSelectedStorageClass,logSearchImage:e.tenants.createTenant.fields.configure.logSearchImage,kesImage:e.tenants.createTenant.fields.configure.kesImage,logSearchPostgresImage:e.tenants.createTenant.fields.configure.logSearchPostgresImage,logSearchPostgresInitImage:e.tenants.createTenant.fields.configure.logSearchPostgresInitImage,prometheusSelectedStorageClass:e.tenants.createTenant.fields.configure.prometheusSelectedStorageClass,prometheusImage:e.tenants.createTenant.fields.configure.prometheusImage,prometheusSidecarImage:e.tenants.createTenant.fields.configure.prometheusSidecarImage,prometheusInitImage:e.tenants.createTenant.fields.configure.prometheusInitImage,selectedStorageClass:e.tenants.createTenant.fields.nameTenant.selectedStorageClass,tenantSecurityContext:e.tenants.createTenant.fields.configure.tenantSecurityContext,logSearchSecurityContext:e.tenants.createTenant.fields.configure.logSearchSecurityContext,logSearchPostgresSecurityContext:e.tenants.createTenant.fields.configure.logSearchPostgresSecurityContext,prometheusSecurityContext:e.tenants.createTenant.fields.configure.prometheusSecurityContext}}),{updateAddField:j.HM,isPageValid:j.NO}),z=(0,p.Z)((function(e){return(0,g.Z)((0,i.Z)((0,i.Z)({configSectionItem:{marginRight:15,"& .multiContainer":{border:"1px solid red"}},tenantCustomizationFields:{marginLeft:30,width:"88%",margin:"auto"},containerItem:{marginRight:15},fieldGroup:(0,i.Z)((0,i.Z)({},f.QV.fieldGroup),{},{paddingTop:15,marginBottom:25}),responsiveSectionItem:{"@media (max-width: 900px)":{flexFlow:"column",alignItems:"flex-start","& div > div":{marginBottom:5,marginRight:0}}},logSearchCustomFields:{marginLeft:20,padding:10,width:"90%",margin:"auto"},fieldSpaceTop:{marginTop:15},prometheusCustomFields:{marginLeft:20,padding:10,width:"90%",margin:"auto"}},f.oO),f.AK))}))(R((function(e){var t=e.classes,n=e.storageClasses,r=e.customImage,a=e.imageName,l=e.customDockerhub,c=e.imageRegistry,u=e.imageRegistryUsername,m=e.imageRegistryPassword,g=e.exposeMinIO,p=e.exposeConsole,f=e.prometheusCustom,h=e.tenantCustom,x=e.logSearchCustom,v=e.logSearchVolumeSize,y=(e.logSearchSizeFactor,e.logSearchImage),S=e.kesImage,C=e.logSearchPostgresImage,j=e.logSearchPostgresInitImage,R=e.prometheusVolumeSize,z=(e.prometheusSizeFactor,e.logSearchSelectedStorageClass),w=e.prometheusSelectedStorageClass,D=e.prometheusImage,F=e.prometheusSidecarImage,E=e.prometheusInitImage,U=e.updateAddField,K=e.isPageValid,G=e.selectedStorageClass,q=e.tenantSecurityContext,L=e.logSearchSecurityContext,M=e.logSearchPostgresSecurityContext,V=e.prometheusSecurityContext,O=(0,o.useState)({}),B=(0,s.Z)(O,2),$=B[0],W=B[1],H=[{label:"Default",value:"default"}].concat((0,Z.Z)(n)),Y=(0,o.useCallback)((function(e,t){U("configure",e,t)}),[U]);(0,o.useEffect)((function(){var e=[];h&&(e=[].concat((0,Z.Z)(e),[{fieldKey:"tenant_securityContext_runAsUser",required:!0,value:q.runAsUser,customValidation:""===q.runAsUser||parseInt(q.runAsUser)<0,customValidationMessage:"runAsUser must be present and be 0 or more"},{fieldKey:"tenant_securityContext_runAsGroup",required:!0,value:q.runAsGroup,customValidation:""===q.runAsGroup||parseInt(q.runAsGroup)<0,customValidationMessage:"runAsGroup must be present and be 0 or more"},{fieldKey:"tenant_securityContext_fsGroup",required:!0,value:q.fsGroup,customValidation:""===q.fsGroup||parseInt(q.fsGroup)<0,customValidationMessage:"fsGroup must be present and be 0 or more"}])),f&&(e=[].concat((0,Z.Z)(e),[{fieldKey:"prometheus_storage_class",required:!0,value:w,customValidation:""===w,customValidationMessage:"Field cannot be empty"},{fieldKey:"prometheus_volume_size",required:!0,value:R,customValidation:""===R||parseInt(R)<=0,customValidationMessage:"Volume size must be present and be greater than 0"},{fieldKey:"prometheus_securityContext_runAsUser",required:!0,value:V.runAsUser,customValidation:""===V.runAsUser||parseInt(V.runAsUser)<0,customValidationMessage:"runAsUser must be present and be 0 or more"},{fieldKey:"prometheus_securityContext_runAsGroup",required:!0,value:V.runAsGroup,customValidation:""===V.runAsGroup||parseInt(V.runAsGroup)<0,customValidationMessage:"runAsGroup must be present and be 0 or more"},{fieldKey:"prometheus_securityContext_fsGroup",required:!0,value:V.fsGroup,customValidation:""===V.fsGroup||parseInt(V.fsGroup)<0,customValidationMessage:"fsGroup must be present and be 0 or more"}])),x&&(e=[].concat((0,Z.Z)(e),[{fieldKey:"log_search_storage_class",required:!0,value:z,customValidation:""===z,customValidationMessage:"Field cannot be empty"},{fieldKey:"log_search_volume_size",required:!0,value:v,customValidation:""===v||parseInt(v)<=0,customValidationMessage:"Volume size must be present and be greatter than 0"},{fieldKey:"logSearch_securityContext_runAsUser",required:!0,value:L.runAsUser,customValidation:""===L.runAsUser||parseInt(L.runAsUser)<0,customValidationMessage:"runAsUser must be present and be 0 or more"},{fieldKey:"logSearch_securityContext_runAsGroup",required:!0,value:L.runAsGroup,customValidation:""===L.runAsGroup||parseInt(L.runAsGroup)<0,customValidationMessage:"runAsGroup must be present and be 0 or more"},{fieldKey:"logSearch_securityContext_fsGroup",required:!0,value:L.fsGroup,customValidation:""===L.fsGroup||parseInt(L.fsGroup)<0,customValidationMessage:"fsGroup must be present and be 0 or more"},{fieldKey:"postgres_securityContext_runAsUser",required:!0,value:M.runAsUser,customValidation:""===M.runAsUser||parseInt(M.runAsUser)<0,customValidationMessage:"runAsUser must be present and be 0 or more"},{fieldKey:"postgres_securityContext_runAsGroup",required:!0,value:V.runAsGroup,customValidation:""===M.runAsGroup||parseInt(M.runAsGroup)<0,customValidationMessage:"runAsGroup must be present and be 0 or more"},{fieldKey:"postgres_securityContext_fsGroup",required:!0,value:M.fsGroup,customValidation:""===M.fsGroup||parseInt(M.fsGroup)<0,customValidationMessage:"fsGroup must be present and be 0 or more"}])),r&&(e=[].concat((0,Z.Z)(e),[{fieldKey:"image",required:!1,value:a,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'minio/minio:VERSION'"},{fieldKey:"logSearchImage",required:!1,value:y,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'minio/logsearchapi:VERSION'"},{fieldKey:"kesImage",required:!1,value:S,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'minio/kes:VERSION'"},{fieldKey:"logSearchPostgresImage",required:!1,value:C,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'library/postgres:VERSION'"},{fieldKey:"logSearchPostgresInitImage",required:!1,value:j,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'library/busybox:VERSION'"},{fieldKey:"prometheusImage",required:!1,value:D,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'minio/prometheus:VERSION'"},{fieldKey:"prometheusSidecarImage",required:!1,value:F,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'project/container:VERSION'"},{fieldKey:"prometheusInitImage",required:!1,value:E,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'library/busybox:VERSION'"}]),l&&(e=[].concat((0,Z.Z)(e),[{fieldKey:"registry",required:!0,value:c},{fieldKey:"registryUsername",required:!0,value:u},{fieldKey:"registryPassword",required:!0,value:m}])));var t=(0,P.R)(e);K("configure",0===Object.keys(t).length),W(t)}),[r,a,y,S,C,j,D,F,E,l,c,u,m,K,f,h,x,w,R,z,v,q,L,M,V]),(0,o.useEffect)((function(){n.length>0&&(0===n.filter((function(e){return e.value===w})).length&&Y("prometheusSelectedStorageClass","default"),0===n.filter((function(e){return e.value===z})).length&&Y("logSearchSelectedStorageClass","default"))}),[z,w,G,n,Y]);var Q=function(e){W((0,b.h)($,e))};return(0,k.jsxs)(_.Z,{className:t.paperWrapper,children:[(0,k.jsxs)("div",{className:t.headerElement,children:[(0,k.jsx)("h3",{className:t.h3Section,children:"Configure"}),(0,k.jsx)("span",{className:t.descriptionText,children:"Basic configurations for tenant management"})]}),(0,k.jsxs)("div",{className:t.headerElement,children:[(0,k.jsx)("h3",{className:t.h3Section,children:"Expose Services"}),(0,k.jsx)("span",{className:t.descriptionText,children:"Whether the tenant's services should request an external IP."})]}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.configSectionItem,children:(0,k.jsx)(N.Z,{value:"expose_minio",id:"expose_minio",name:"expose_minio",checked:g,onChange:function(e){var t=e.target.checked;Y("exposeMinIO",t)},label:"Expose MiniO Service"})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.configSectionItem,children:(0,k.jsx)(N.Z,{value:"expose_console",id:"expose_console",name:"expose_console",checked:p,onChange:function(e){var t=e.target.checked;Y("exposeConsole",t)},label:"Expose Console Service"})}),(0,k.jsxs)("div",{className:t.headerElement,children:[(0,k.jsx)("h3",{className:t.h3Section,children:"Additional Configurations"}),(0,k.jsx)("span",{className:t.descriptionText,children:"Configure SecurityContext, Storage Classes & Storage size for Log Search, Prometheus add-ons and your Tenant"})]}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.configSectionItem,children:(0,k.jsx)(N.Z,{value:"tenantConfig",id:"tenant_configuration",name:"tenant_configuration",checked:h,onChange:function(e){var t=e.target.checked;Y("tenantCustom",t)},label:"Override Tenant defaults"})}),h&&(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.tenantCustomizationFields,children:(0,k.jsxs)("fieldset",{className:t.fieldGroup,children:[(0,k.jsx)("legend",{className:t.descriptionText,children:"SecurityContext for MinIO"}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:"".concat(t.configSectionItem),children:(0,k.jsxs)("div",{className:"".concat(t.multiContainer," ").concat(t.responsiveSectionItem),children:[(0,k.jsx)("div",{className:t.containerItem,children:(0,k.jsx)(I.Z,{type:"number",id:"tenant_securityContext_runAsUser",name:"tenant_securityContext_runAsUser",onChange:function(e){Y("tenantSecurityContext",(0,i.Z)((0,i.Z)({},q),{},{runAsUser:e.target.value})),Q("tenant_securityContext_runAsUser")},label:"Run As User",value:q.runAsUser,required:!0,error:$.tenant_securityContext_runAsUser||"",min:"0"})}),(0,k.jsx)("div",{className:t.containerItem,children:(0,k.jsx)(I.Z,{type:"number",id:"tenant_securityContext_runAsGroup",name:"tenant_securityContext_runAsGroup",onChange:function(e){Y("tenantSecurityContext",(0,i.Z)((0,i.Z)({},q),{},{runAsGroup:e.target.value})),Q("tenant_securityContext_runAsGroup")},label:"Run As Group",value:q.runAsGroup,required:!0,error:$.tenant_securityContext_runAsGroup||"",min:"0"})}),(0,k.jsx)("div",{className:t.containerItem,children:(0,k.jsx)(I.Z,{type:"number",id:"tenant_securityContext_fsGroup",name:"tenant_securityContext_fsGroup",onChange:function(e){Y("tenantSecurityContext",(0,i.Z)((0,i.Z)({},q),{},{fsGroup:e.target.value})),Q("tenant_securityContext_fsGroup")},label:"FsGroup",value:q.fsGroup,required:!0,error:$.tenant_securityContext_fsGroup||"",min:"0"})})]})}),(0,k.jsx)("br",{}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.configSectionItem,children:(0,k.jsx)("div",{className:t.multiContainer,children:(0,k.jsx)(N.Z,{value:"tenantSecurityContextRunAsNonRoot",id:"tenant_securityContext_runAsNonRoot",name:"tenant_securityContext_runAsNonRoot",checked:q.runAsNonRoot,onChange:function(e){var t=e.target.checked;Y("tenantSecurityContext",(0,i.Z)((0,i.Z)({},q),{},{runAsNonRoot:t}))},label:"Do not run as Root"})})})]})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.configSectionItem,children:(0,k.jsx)(N.Z,{value:"logSearchConfig",id:"log_search_configuration",name:"log_search_configuration",checked:x,onChange:function(e){var t=e.target.checked;Y("logSearchCustom",t)},label:"Override Log Search defaults"})}),x&&(0,k.jsxs)(d.ZP,{xs:12,className:t.logSearchCustomFields,children:[(0,k.jsx)(d.ZP,{item:!0,xs:12,children:(0,k.jsx)(A.Z,{id:"log_search_storage_class",name:"log_search_storage_class",onChange:function(e){Y("logSearchSelectedStorageClass",e.target.value)},label:"Log Search Storage Class",value:z,options:H,disabled:H.length<1})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,children:(0,k.jsx)("div",{className:t.multiContainer,children:(0,k.jsx)(I.Z,{type:"number",id:"log_search_volume_size",name:"log_search_volume_size",onChange:function(e){Y("logSearchVolumeSize",e.target.value),Q("log_search_volume_size")},label:"Storage Size",overlayObject:(0,k.jsx)(T.Z,{id:"size-unit",onUnitChange:function(){},unitSelected:"Gi",unitsList:[{label:"Gi",value:"Gi"}],disabled:!0}),value:v,required:!0,error:$.log_search_volume_size||"",min:"0"})})}),(0,k.jsxs)("fieldset",{className:"".concat(t.fieldGroup," ").concat(t.fieldSpaceTop),children:[(0,k.jsx)("legend",{className:t.descriptionText,children:"SecurityContext for LogSearch"}),(0,k.jsx)(d.ZP,{item:!0,xs:12,children:(0,k.jsxs)("div",{className:"".concat(t.multiContainer," ").concat(t.responsiveSectionItem),children:[(0,k.jsx)("div",{className:t.configSectionItem,children:(0,k.jsx)(I.Z,{type:"number",id:"logSearch_securityContext_runAsUser",name:"logSearch_securityContext_runAsUser",onChange:function(e){Y("logSearchSecurityContext",(0,i.Z)((0,i.Z)({},L),{},{runAsUser:e.target.value})),Q("logSearch_securityContext_runAsUser")},label:"Run As User",value:L.runAsUser,required:!0,error:$.logSearch_securityContext_runAsUser||"",min:"0"})}),(0,k.jsx)("div",{className:t.configSectionItem,children:(0,k.jsx)(I.Z,{type:"number",id:"logSearch_securityContext_runAsGroup",name:"logSearch_securityContext_runAsGroup",onChange:function(e){Y("logSearchSecurityContext",(0,i.Z)((0,i.Z)({},L),{},{runAsGroup:e.target.value})),Q("logSearch_securityContext_runAsGroup")},label:"Run As Group",value:L.runAsGroup,required:!0,error:$.logSearch_securityContext_runAsGroup||"",min:"0"})}),(0,k.jsx)("div",{className:t.configSectionItem,children:(0,k.jsx)(I.Z,{type:"number",id:"logSearch_securityContext_fsGroup",name:"logSearch_securityContext_fsGroup",onChange:function(e){Y("logSearchSecurityContext",(0,i.Z)((0,i.Z)({},L),{},{fsGroup:e.target.value})),Q("logSearch_securityContext_fsGroup")},label:"FsGroup",value:L.fsGroup,required:!0,error:$.logSearch_securityContext_fsGroup||"",min:"0"})})]})}),(0,k.jsx)("br",{}),(0,k.jsx)(d.ZP,{item:!0,xs:12,children:(0,k.jsx)("div",{className:t.multiContainer,children:(0,k.jsx)(N.Z,{value:"logSearchSecurityContextRunAsNonRoot",id:"logSearch_securityContext_runAsNonRoot",name:"logSearch_securityContext_runAsNonRoot",checked:L.runAsNonRoot,onChange:function(e){var t=e.target.checked;Y("logSearchSecurityContext",(0,i.Z)((0,i.Z)({},L),{},{runAsNonRoot:t}))},label:"Do not run as Root"})})})]}),(0,k.jsxs)("fieldset",{className:t.fieldGroup,children:[(0,k.jsx)("legend",{className:t.descriptionText,children:"SecurityContext for PostgreSQL"}),(0,k.jsx)(d.ZP,{item:!0,xs:12,children:(0,k.jsxs)("div",{className:"".concat(t.multiContainer," ").concat(t.responsiveSectionItem),children:[(0,k.jsx)("div",{className:t.configSectionItem,children:(0,k.jsx)(I.Z,{type:"number",id:"postgres_securityContext_runAsUser",name:"postgres_securityContext_runAsUser",onChange:function(e){Y("logSearchPostgresSecurityContext",(0,i.Z)((0,i.Z)({},M),{},{runAsUser:e.target.value})),Q("postgres_securityContext_runAsUser")},label:"Run As User",value:M.runAsUser,required:!0,error:$.postgres_securityContext_runAsUser||"",min:"0"})}),(0,k.jsx)("div",{className:t.configSectionItem,children:(0,k.jsx)(I.Z,{type:"number",id:"postgres_securityContext_runAsGroup",name:"postgres_securityContext_runAsGroup",onChange:function(e){Y("logSearchPostgresSecurityContext",(0,i.Z)((0,i.Z)({},M),{},{runAsGroup:e.target.value})),Q("postgres_securityContext_runAsGroup")},label:"Run As Group",value:M.runAsGroup,required:!0,error:$.postgres_securityContext_runAsGroup||"",min:"0"})}),(0,k.jsx)("div",{className:t.configSectionItem,children:(0,k.jsx)(I.Z,{type:"number",id:"postgres_securityContext_fsGroup",name:"postgres_securityContext_fsGroup",onChange:function(e){Y("logSearchPostgresSecurityContext",(0,i.Z)((0,i.Z)({},M),{},{fsGroup:e.target.value})),Q("postgres_securityContext_fsGroup")},label:"FsGroup",value:M.fsGroup,required:!0,error:$.postgres_securityContext_fsGroup||"",min:"0"})})]})}),(0,k.jsx)("br",{}),(0,k.jsx)(d.ZP,{item:!0,xs:12,children:(0,k.jsx)("div",{className:t.multiContainer,children:(0,k.jsx)(N.Z,{value:"postgresSecurityContextRunAsNonRoot",id:"postgres_securityContext_runAsNonRoot",name:"postgres_securityContext_runAsNonRoot",checked:M.runAsNonRoot,onChange:function(e){var t=e.target.checked;Y("logSearchPostgresSecurityContext",(0,i.Z)((0,i.Z)({},M),{},{runAsNonRoot:t}))},label:"Do not run as Root"})})})]})]}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.configSectionItem,children:(0,k.jsx)(N.Z,{value:"prometheusConfig",id:"prometheus_configuration",name:"prometheus_configuration",checked:f,onChange:function(e){var t=e.target.checked;Y("prometheusCustom",t)},label:"Override Prometheus defaults"})}),f&&(0,k.jsxs)(d.ZP,{xs:12,className:t.prometheusCustomFields,children:[(0,k.jsx)(d.ZP,{item:!0,xs:12,children:(0,k.jsx)(A.Z,{id:"prometheus_storage_class",name:"prometheus_storage_class",onChange:function(e){Y("prometheusSelectedStorageClass",e.target.value)},label:"Prometheus Storage Class",value:w,options:H,disabled:H.length<1})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,children:(0,k.jsx)("div",{className:t.multiContainer,children:(0,k.jsx)(I.Z,{type:"number",id:"prometheus_volume_size",name:"prometheus_volume_size",onChange:function(e){Y("prometheusVolumeSize",e.target.value),Q("prometheus_volume_size")},label:"Storage Size",overlayObject:(0,k.jsx)(T.Z,{id:"size-unit",onUnitChange:function(){},unitSelected:"Gi",unitsList:[{label:"Gi",value:"Gi"}],disabled:!0}),value:R,required:!0,error:$.prometheus_volume_size||"",min:"0"})})}),(0,k.jsxs)("fieldset",{className:"".concat(t.fieldGroup," ").concat(t.fieldSpaceTop),children:[(0,k.jsx)("legend",{className:t.descriptionText,children:"SecurityContext for Prometheus"}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.configSectionItem,children:(0,k.jsxs)("div",{className:"".concat(t.multiContainer," ").concat(t.responsiveSectionItem),children:[(0,k.jsx)("div",{className:t.configSectionItem,children:(0,k.jsx)(I.Z,{type:"number",id:"prometheus_securityContext_runAsUser",name:"prometheus_securityContext_runAsUser",onChange:function(e){Y("prometheusSecurityContext",(0,i.Z)((0,i.Z)({},V),{},{runAsUser:e.target.value})),Q("prometheus_securityContext_runAsUser")},label:"Run As User",value:V.runAsUser,required:!0,error:$.prometheus_securityContext_runAsUser||"",min:"0"})}),(0,k.jsx)("div",{className:t.configSectionItem,children:(0,k.jsx)(I.Z,{type:"number",id:"prometheus_securityContext_runAsGroup",name:"prometheus_securityContext_runAsGroup",onChange:function(e){Y("prometheusSecurityContext",(0,i.Z)((0,i.Z)({},V),{},{runAsGroup:e.target.value})),Q("prometheus_securityContext_runAsGroup")},label:"Run As Group",value:V.runAsGroup,required:!0,error:$.prometheus_securityContext_runAsGroup||"",min:"0"})}),(0,k.jsx)("div",{className:t.configSectionItem,children:(0,k.jsx)(I.Z,{type:"number",id:"prometheus_securityContext_fsGroup",name:"prometheus_securityContext_fsGroup",onChange:function(e){Y("prometheusSecurityContext",(0,i.Z)((0,i.Z)({},V),{},{fsGroup:e.target.value})),Q("prometheus_securityContext_fsGroup")},label:"FsGroup",value:V.fsGroup,required:!0,error:$.prometheus_securityContext_fsGroup||"",min:"0"})})]})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.configSectionItem,children:(0,k.jsx)("div",{className:"".concat(t.multiContainer," ").concat(t.fieldSpaceTop),children:(0,k.jsx)(N.Z,{value:"prometheusSecurityContextRunAsNonRoot",id:"prometheus_securityContext_runAsNonRoot",name:"prometheus_securityContext_runAsNonRoot",checked:V.runAsNonRoot,onChange:function(e){var t=e.target.checked;Y("prometheusSecurityContext",(0,i.Z)((0,i.Z)({},V),{},{runAsNonRoot:t}))},label:"Do not run as Root"})})})]})]})]})}))),w=n(94187),D=n(95467),F=n(35477),E=n(94759),U=n(43615),K=n(27207),G=n(96152),q=n(35150),L=(0,u.$j)((function(e){return{idpSelection:e.tenants.createTenant.fields.identityProvider.idpSelection,accessKeys:e.tenants.createTenant.fields.identityProvider.accessKeys,secretKeys:e.tenants.createTenant.fields.identityProvider.secretKeys,openIDConfigurationURL:e.tenants.createTenant.fields.identityProvider.openIDConfigurationURL,openIDClientID:e.tenants.createTenant.fields.identityProvider.openIDClientID,openIDSecretID:e.tenants.createTenant.fields.identityProvider.openIDSecretID,openIDCallbackURL:e.tenants.createTenant.fields.identityProvider.openIDCallbackURL,openIDClaimName:e.tenants.createTenant.fields.identityProvider.openIDClaimName,openIDScopes:e.tenants.createTenant.fields.identityProvider.openIDScopes,ADURL:e.tenants.createTenant.fields.identityProvider.ADURL,ADSkipTLS:e.tenants.createTenant.fields.identityProvider.ADSkipTLS,ADServerInsecure:e.tenants.createTenant.fields.identityProvider.ADServerInsecure,ADUserNameSearchFilter:e.tenants.createTenant.fields.identityProvider.ADUserNameSearchFilter,ADGroupSearchBaseDN:e.tenants.createTenant.fields.identityProvider.ADGroupSearchBaseDN,ADGroupSearchFilter:e.tenants.createTenant.fields.identityProvider.ADGroupSearchFilter,ADGroupNameAttribute:e.tenants.createTenant.fields.identityProvider.ADGroupNameAttribute,ADUserDNs:e.tenants.createTenant.fields.identityProvider.ADUserDNs,ADUserNameFormat:e.tenants.createTenant.fields.identityProvider.ADUserNameFormat,ADLookupBindDN:e.tenants.createTenant.fields.identityProvider.ADLookupBindDN,ADLookupBindPassword:e.tenants.createTenant.fields.identityProvider.ADLookupBindPassword,ADUserDNSearchBaseDN:e.tenants.createTenant.fields.identityProvider.ADUserDNSearchBaseDN,ADUserDNSearchFilter:e.tenants.createTenant.fields.identityProvider.ADUserDNSearchFilter,ADServerStartTLS:e.tenants.createTenant.fields.identityProvider.ADServerStartTLS}}),{updateAddField:j.HM,isPageValid:j.NO}),M=(0,p.Z)((function(e){return(0,g.Z)((0,i.Z)((0,i.Z)((0,i.Z)((0,i.Z)({shortened:{gridTemplateColumns:"auto auto 50px 50px",display:"grid",gridGap:15,marginBottom:10,"& input":{fontWeight:400}},buttonTray:{marginLeft:10,display:"flex",height:38,"& button":{background:"#EAEAEA"}},overlayAction:{marginLeft:10,"& svg":{maxWidth:15,maxHeight:15},"& button":{background:"#EAEAEA"}},protocolRadioOptions:{display:"flex",flexFlow:"column",marginBottom:10,"& label":{fontSize:14},"& div":{display:"flex",flexFlow:"column",alignItems:"baseline"}},adUserDnRows:{display:"flex"}},f.QV),f.DF),f.oO),f.AK))}))(L((function(e){var t=e.classes,n=e.idpSelection,r=e.accessKeys,a=e.secretKeys,i=e.openIDConfigurationURL,l=e.openIDClientID,c=e.openIDSecretID,u=e.openIDCallbackURL,m=e.openIDClaimName,g=e.openIDScopes,p=e.ADURL,f=e.ADSkipTLS,h=e.ADServerInsecure,x=e.ADUserNameSearchFilter,v=e.ADGroupSearchBaseDN,y=e.ADGroupSearchFilter,S=e.ADGroupNameAttribute,C=e.ADUserDNs,j=e.ADUserNameFormat,A=e.ADLookupBindDN,T=e.ADLookupBindPassword,R=e.ADUserDNSearchBaseDN,z=e.ADUserDNSearchFilter,L=e.ADServerStartTLS,M=e.updateAddField,V=e.isPageValid,O=(0,o.useState)({}),B=(0,s.Z)(O,2),$=B[0],W=B[1],H=(0,o.useCallback)((function(e,t){M("identityProvider",e,t)}),[M]),Y=function(e,t){var n=(0,Z.Z)(r);n[e]=t,H("accessKeys",n)},Q=function(e,t){var n=(0,Z.Z)(a);n[e]=t,H("secretKeys",n)},X=function(e,t){var n=(0,Z.Z)(C);n[e]=t,H("ADUserDNs",n)},J=function(e){W((0,b.h)($,e))};(0,o.useEffect)((function(){var e=[];if("Built-in"===n){e=(0,Z.Z)(e);for(var t=0;t1&&(r.splice(n,1),a.splice(n,1),Y(r.length-1,r[r.length-1]))},children:(0,k.jsx)(q.Z,{})})})}),(0,k.jsx)(w.Z,{title:"Randomize Credentials","aria-label":"add",children:(0,k.jsx)("div",{className:t.overlayAction,children:(0,k.jsx)(D.Z,{onClick:function(){Y(n,(0,b.z)(16)),Q(n,(0,b.z)(32))},size:"small",children:(0,k.jsx)(E.Z,{})})})})]})]})},"identityField-".concat(n.toString()))}))),"AD"===n&&(ee=C.map((function(e,n){return(0,k.jsx)(o.Fragment,{children:(0,k.jsxs)("div",{className:t.adUserDnRows,children:[(0,k.jsx)(I.Z,{id:"ad-userdn-".concat(n.toString()),label:"",placeholder:"",name:"ad-userdn-".concat(n.toString()),value:C[n],onChange:function(e){X(n,e.target.value),J("ad-userdn-".concat(n.toString()))},index:n,error:$["ad-userdn-".concat(n.toString())]||""},"csv-ad-userdn-".concat(n.toString())),(0,k.jsxs)("div",{className:t.buttonTray,children:[(0,k.jsx)(w.Z,{title:"Add User","aria-label":"add",children:(0,k.jsx)(D.Z,{size:"small",onClick:function(){C.push(""),X(C.length-1,"")},children:(0,k.jsx)(G.Z,{})})}),(0,k.jsx)(w.Z,{title:"Remove","aria-label":"add",children:(0,k.jsx)(D.Z,{size:"small",style:{marginLeft:16},onClick:function(){C.length>1&&(C.splice(n,1),Y(C.length-1,C[C.length-1]))},children:(0,k.jsx)(U.Z,{})})})]})]})},"identityField-".concat(n.toString()))}))),(0,k.jsxs)(_.Z,{className:t.paperWrapper,children:[(0,k.jsxs)("div",{className:t.headerElement,children:[(0,k.jsx)("h3",{className:t.h3Section,children:"Identity Provider"}),(0,k.jsx)("span",{className:t.descriptionText,children:"Access to the tenant can be controlled via an external Identity Manager."})]}),(0,k.jsxs)(d.ZP,{item:!0,xs:12,className:t.protocolRadioOptions,children:[(0,k.jsx)("label",{children:"Protocol"}),(0,k.jsx)(K.Z,{currentSelection:n,id:"idp-options",name:"idp-options",label:" ",onChange:function(e){H("idpSelection",e.target.value)},selectorOptions:[{label:"Built-in",value:"Built-in"},{label:"OpenID",value:"OpenID"},{label:"Active Directory",value:"AD"}]})]}),"Built-in"===n&&(0,k.jsxs)(o.Fragment,{children:["Add additional users",ee]}),"OpenID"===n&&(0,k.jsxs)(o.Fragment,{children:[(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"openID_CONFIGURATION_URL",name:"openID_CONFIGURATION_URL",onChange:function(e){H("openIDConfigurationURL",e.target.value),J("openID_CONFIGURATION_URL")},label:"Configuration URL",value:i,placeholder:"https://your-identity-provider.com/.well-known/openid-configuration",error:$.openID_CONFIGURATION_URL||"",required:!0})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"openID_clientID",name:"openID_clientID",onChange:function(e){H("openIDClientID",e.target.value),J("openID_clientID")},label:"Client ID",value:l,error:$.openID_clientID||"",required:!0})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"openID_secretID",name:"openID_secretID",onChange:function(e){H("openIDSecretID",e.target.value),J("openID_secretID")},label:"Secret ID",value:c,error:$.openID_secretID||"",required:!0})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"openID_callbackURL",name:"openID_callbackURL",onChange:function(e){H("openIDCallbackURL",e.target.value),J("openID_callbackURL")},label:"Callback URL",value:u,placeholder:"https://your-console-endpoint:9443/oauth_callback",error:$.openID_callbackURL||""})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"openID_claimName",name:"openID_claimName",onChange:function(e){H("openIDClaimName",e.target.value),J("openID_claimName")},label:"Claim Name",value:m,error:$.openID_claimName||"",required:!0})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"openID_scopes",name:"openID_scopes",onChange:function(e){H("openIDScopes",e.target.value),J("openID_scopes")},label:"Scopes",value:g})})]}),"AD"===n&&(0,k.jsxs)(o.Fragment,{children:[(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"AD_URL",name:"AD_URL",onChange:function(e){H("ADURL",e.target.value),J("AD_URL")},label:"LDAP Server Address",value:p,placeholder:"ldap-server:636",error:$.AD_URL||"",required:!0})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(N.Z,{value:"ad_skipTLS",id:"ad_skipTLS",name:"ad_skipTLS",checked:f,onChange:function(e){var t=e.target.checked;H("ADSkipTLS",t)},label:"Skip TLS Verification"})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(N.Z,{value:"ad_serverInsecure",id:"ad_serverInsecure",name:"ad_serverInsecure",checked:h,onChange:function(e){var t=e.target.checked;H("ADServerInsecure",t)},label:"Server Insecure"})}),h?(0,k.jsxs)(d.ZP,{item:!0,xs:12,children:[(0,k.jsx)(F.Z,{className:t.error,variant:"caption",display:"block",gutterBottom:!0,children:"Warning: All traffic with Active Directory will be unencrypted"}),(0,k.jsx)("br",{})]}):null,(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(N.Z,{value:"ad_serverStartTLS",id:"ad_serverStartTLS",name:"ad_serverStartTLS",checked:L,onChange:function(e){var t=e.target.checked;H("ADServerStartTLS",t)},label:"Start TLS connection to AD/LDAP server"})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"ad_userNameFormat",name:"ad_userNameFormat",onChange:function(e){H("ADUserNameFormat",e.target.value)},label:"Username Format",value:j,placeholder:"uid=%s,cn=accounts,dc=myldapserver,dc=com"})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"ad_userNameFilter",name:"ad_userNameFilter",onChange:function(e){H("ADUserNameSearchFilter",e.target.value)},label:"Username Search Filter",value:x,placeholder:"(|(objectclass=posixAccount)(uid=%s))"})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"ad_groupSearchBaseDN",name:"ad_groupSearchBaseDN",onChange:function(e){H("ADGroupSearchBaseDN",e.target.value)},label:"Group Search Base DN",value:v,placeholder:"ou=hwengg,dc=min,dc=io;ou=swengg,dc=min,dc=io"})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"ad_groupSearchFilter",name:"ad_groupSearchFilter",onChange:function(e){H("ADGroupSearchFilter",e.target.value)},label:"Group Search Filter",value:y,placeholder:"(&(objectclass=groupOfNames)(member=%s))"})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"ad_groupNameAttribute",name:"ad_groupNameAttribute",onChange:function(e){H("ADGroupNameAttribute",e.target.value)},label:"Group Name Attribute",value:S,placeholder:"cn"})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"ad_lookupBindDN",name:"ad_lookupBindDN",onChange:function(e){H("ADLookupBindDN",e.target.value)},label:"Lookup Bind DN",value:A,placeholder:"cn=admin,dc=min,dc=io"})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"ad_lookupBindPassword",name:"ad_lookupBindPassword",onChange:function(e){H("ADLookupBindPassword",e.target.value)},label:"Lookup Bind Password",value:T,placeholder:"admin"})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"ad_userDNSearchBaseDN",name:"ad_userDNSearchBaseDN",onChange:function(e){H("ADUserDNSearchBaseDN",e.target.value)},label:"User DN Search Base DN",value:R,placeholder:"dc=min,dc=io"})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"ad_userDNSearchFilter",name:"ad_userDNSearchFilter",onChange:function(e){H("ADUserDNSearchFilter",e.target.value)},label:"User DN Search Filter",value:z,placeholder:"(uid=%s)"})}),(0,k.jsxs)("fieldset",{className:t.fieldGroup,children:[(0,k.jsx)("legend",{className:t.descriptionText,children:"List of user DNs (Distinguished Names) to be Tenant Administrators"}),(0,k.jsx)(d.ZP,{item:!0,xs:12,children:ee})]})]})]})}))),V=n(82461),O=n(14792),B=(0,u.$j)((function(e){return{enableTLS:e.tenants.createTenant.fields.security.enableTLS,enableAutoCert:e.tenants.createTenant.fields.security.enableAutoCert,enableCustomCerts:e.tenants.createTenant.fields.security.enableCustomCerts,minioCertificates:e.tenants.createTenant.certificates.minioCertificates,caCertificates:e.tenants.createTenant.certificates.caCertificates}}),{updateAddField:j.HM,isPageValid:j.NO,addFileToCaCertificates:j.Eq,deleteCaCertificate:j.IG,addCaCertificate:j.fK,addKeyPair:j.Mg,addFileToKeyPair:j.aN,deleteKeyPair:j.XX}),$=(0,p.Z)((function(e){return(0,g.Z)((0,i.Z)((0,i.Z)((0,i.Z)({minioCertificateRows:{display:"flex",alignItems:"center",justifyContent:"flex-start",borderBottom:"1px solid #EAEAEA","&:last-child":{borderBottom:0},"@media (max-width: 900px)":{flex:1}},fileItem:{marginRight:10,display:"flex","& div label":{minWidth:50},"@media (max-width: 900px)":{flexFlow:"column"}},minioCertsContainer:{marginBottom:15},minioCACertsRow:{display:"flex",alignItems:"center",justifyContent:"flex-start",borderBottom:"1px solid #EAEAEA","&:last-child":{borderBottom:0},"@media (max-width: 900px)":{flex:1,"& div label":{minWidth:50}}},rowActions:{display:"flex",justifyContent:"flex-end","@media (max-width: 900px)":{flex:1}},overlayAction:{marginLeft:10,"& svg":{maxWidth:15,maxHeight:15},"& button":{background:"#EAEAEA"}}},f.QV),f.oO),f.AK))}))(B((function(e){var t=e.classes,n=e.enableTLS,r=e.enableAutoCert,a=e.enableCustomCerts,s=e.minioCertificates,i=e.caCertificates,l=e.updateAddField,c=e.isPageValid,u=e.addFileToCaCertificates,m=e.deleteCaCertificate,g=e.addCaCertificate,p=e.addKeyPair,f=e.addFileToKeyPair,h=e.deleteKeyPair,x=(0,o.useCallback)((function(e,t){l("security",e,t)}),[l]);return(0,o.useEffect)((function(){c("security",!n||(!!r||!!a))}),[n,r,a,c]),(0,k.jsxs)(_.Z,{className:t.paperWrapper,children:[(0,k.jsx)("div",{className:t.headerElement,children:(0,k.jsx)("h3",{className:t.h3Section,children:"Security"})}),(0,k.jsxs)(d.ZP,{item:!0,xs:12,children:[(0,k.jsx)(N.Z,{value:"enableTLS",id:"enableTLS",name:"enableTLS",checked:n,onChange:function(e){var t=e.target.checked;x("enableTLS",t)},label:"Enable TLS"}),"Enable TLS for the tenant, this is required for Encryption Configuration",n&&(0,k.jsxs)(o.Fragment,{children:[(0,k.jsx)("br",{}),(0,k.jsx)("br",{}),(0,k.jsx)(F.Z,{variant:"caption",display:"block",gutterBottom:!0,children:"AutoCert: MinIO Operator will generate all TLS certificates automatically"}),(0,k.jsx)(F.Z,{variant:"caption",display:"block",gutterBottom:!0,children:"Custom certificates: Allow user to provide your own certificates"}),(0,k.jsx)("br",{})]})]}),n&&(0,k.jsxs)(o.Fragment,{children:[(0,k.jsxs)(d.ZP,{item:!0,xs:12,children:[(0,k.jsx)(N.Z,{value:"enableAutoCert",id:"enableAutoCert",name:"enableAutoCert",checked:r,onChange:function(e){var t=e.target.checked;x("enableAutoCert",t)},label:"Enable AutoCert"}),(0,k.jsx)(N.Z,{value:"enableCustomCerts",id:"enableCustomCerts",name:"enableCustomCerts",checked:a,onChange:function(e){var t=e.target.checked;x("enableCustomCerts",t)},label:"Custom Certificates"})]}),a&&(0,k.jsxs)(o.Fragment,{children:[(0,k.jsx)(d.ZP,{container:!0,children:(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.minioCertsContainer,children:(0,k.jsxs)("fieldset",{className:t.fieldGroup,children:[(0,k.jsx)("legend",{className:t.descriptionText,children:"MinIO Certificates"}),s.map((function(e){return(0,k.jsxs)(d.ZP,{item:!0,xs:12,className:t.minioCertificateRows,children:[(0,k.jsxs)(d.ZP,{item:!0,xs:10,className:t.fileItem,children:[(0,k.jsx)(V.Z,{onChange:function(t,n){f(e.id,"cert",n,t)},accept:".cer,.crt,.cert,.pem",id:"tlsCert",name:"tlsCert",label:"Cert",value:e.cert}),(0,k.jsx)(V.Z,{onChange:function(t,n){f(e.id,"key",n,t)},accept:".key,.pem",id:"tlsKey",name:"tlsKey",label:"Key",value:e.key})]}),(0,k.jsxs)(d.ZP,{item:!0,xs:2,className:t.rowActions,children:[(0,k.jsx)("div",{className:t.overlayAction,children:(0,k.jsx)(D.Z,{size:"small",onClick:p,children:(0,k.jsx)(O.Z,{})})}),(0,k.jsx)("div",{className:t.overlayAction,children:(0,k.jsx)(D.Z,{size:"small",onClick:function(){h(e.id)},children:(0,k.jsx)(q.Z,{})})})]})]},e.id)}))]})})}),(0,k.jsx)(d.ZP,{container:!0,children:(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.minioCertsContainer,children:(0,k.jsxs)("fieldset",{className:t.fieldGroup,children:[(0,k.jsx)("legend",{className:t.descriptionText,children:"MinIO CA Certificates"}),i.map((function(e){return(0,k.jsxs)(d.ZP,{item:!0,xs:12,className:t.minioCACertsRow,children:[(0,k.jsx)(d.ZP,{item:!0,xs:6,children:(0,k.jsx)(V.Z,{onChange:function(t,n){u(e.id,"cert",n,t)},accept:".cer,.crt,.cert,.pem",id:"tlsCert",name:"tlsCert",label:"Cert",value:e.cert})}),(0,k.jsx)(d.ZP,{item:!0,xs:6,children:(0,k.jsxs)("div",{className:t.rowActions,children:[(0,k.jsx)("div",{className:t.overlayAction,children:(0,k.jsx)(D.Z,{size:"small",onClick:g,children:(0,k.jsx)(O.Z,{})})}),(0,k.jsx)("div",{className:t.overlayAction,children:(0,k.jsx)(D.Z,{size:"small",onClick:function(){m(e.id)},children:(0,k.jsx)(q.Z,{})})})]})})]},e.id)}))]})})})]})]})]})}))),W=(0,u.$j)((function(e){return{replicas:e.tenants.createTenant.fields.encryption.replicas,enableEncryption:e.tenants.createTenant.fields.encryption.enableEncryption,encryptionType:e.tenants.createTenant.fields.encryption.encryptionType,gemaltoEndpoint:e.tenants.createTenant.fields.encryption.gemaltoEndpoint,gemaltoToken:e.tenants.createTenant.fields.encryption.gemaltoToken,gemaltoDomain:e.tenants.createTenant.fields.encryption.gemaltoDomain,gemaltoRetry:e.tenants.createTenant.fields.encryption.gemaltoRetry,awsEndpoint:e.tenants.createTenant.fields.encryption.awsEndpoint,awsRegion:e.tenants.createTenant.fields.encryption.awsRegion,awsKMSKey:e.tenants.createTenant.fields.encryption.awsKMSKey,awsAccessKey:e.tenants.createTenant.fields.encryption.awsAccessKey,awsSecretKey:e.tenants.createTenant.fields.encryption.awsSecretKey,awsToken:e.tenants.createTenant.fields.encryption.awsToken,vaultEndpoint:e.tenants.createTenant.fields.encryption.vaultEndpoint,vaultEngine:e.tenants.createTenant.fields.encryption.vaultEngine,vaultNamespace:e.tenants.createTenant.fields.encryption.vaultNamespace,vaultPrefix:e.tenants.createTenant.fields.encryption.vaultPrefix,vaultAppRoleEngine:e.tenants.createTenant.fields.encryption.vaultAppRoleEngine,vaultId:e.tenants.createTenant.fields.encryption.vaultId,vaultSecret:e.tenants.createTenant.fields.encryption.vaultSecret,vaultRetry:e.tenants.createTenant.fields.encryption.vaultRetry,vaultPing:e.tenants.createTenant.fields.encryption.vaultPing,azureEndpoint:e.tenants.createTenant.fields.encryption.azureEndpoint,azureTenantID:e.tenants.createTenant.fields.encryption.azureTenantID,azureClientID:e.tenants.createTenant.fields.encryption.azureClientID,azureClientSecret:e.tenants.createTenant.fields.encryption.azureClientSecret,gcpProjectID:e.tenants.createTenant.fields.encryption.gcpProjectID,gcpEndpoint:e.tenants.createTenant.fields.encryption.gcpEndpoint,gcpClientEmail:e.tenants.createTenant.fields.encryption.gcpClientEmail,gcpClientID:e.tenants.createTenant.fields.encryption.gcpClientID,gcpPrivateKeyID:e.tenants.createTenant.fields.encryption.gcpPrivateKeyID,gcpPrivateKey:e.tenants.createTenant.fields.encryption.gcpPrivateKey,enableCustomCertsForKES:e.tenants.createTenant.fields.encryption.enableCustomCertsForKES,enableAutoCert:e.tenants.createTenant.fields.security.enableAutoCert,enableTLS:e.tenants.createTenant.fields.security.enableTLS,minioCertificates:e.tenants.createTenant.certificates.minioCertificates,serverCertificate:e.tenants.createTenant.certificates.serverCertificate,clientCertificate:e.tenants.createTenant.certificates.clientCertificate,vaultCertificate:e.tenants.createTenant.certificates.vaultCertificate,vaultCA:e.tenants.createTenant.certificates.vaultCA,gemaltoCA:e.tenants.createTenant.certificates.gemaltoCA,enableCustomCerts:e.tenants.createTenant.fields.security.enableCustomCerts,kesSecurityContext:e.tenants.createTenant.fields.encryption.kesSecurityContext}}),{updateAddField:j.HM,isPageValid:j.NO,addFileServerCert:j.$1,addFileClientCert:j.BI,addFileVaultCert:j.cl,addFileVaultCa:j.fk,addFileGemaltoCa:j.MX}),H=(0,p.Z)((function(e){return(0,g.Z)((0,i.Z)((0,i.Z)((0,i.Z)((0,i.Z)({encryptionTypeOptions:{marginBottom:15},mutualTlsConfig:{marginTop:15,"& fieldset":{flex:1}},rightSpacer:{marginRight:15},responsiveContainer:{"@media (max-width: 900px)":{display:"flex",flexFlow:"column"}}},f.QV),f.DF),f.oO),f.AK))}))(W((function(e){var t=e.classes,n=e.updateAddField,r=e.isPageValid,a=e.addFileServerCert,l=e.addFileClientCert,c=e.addFileVaultCert,u=e.addFileVaultCa,m=e.addFileGemaltoCa,g=e.enableEncryption,p=e.enableCustomCerts,f=e.encryptionType,h=e.gemaltoEndpoint,x=e.gemaltoToken,v=e.gemaltoDomain,y=e.gemaltoRetry,S=e.awsEndpoint,C=e.awsRegion,j=e.awsKMSKey,A=e.awsAccessKey,T=e.awsSecretKey,R=e.awsToken,z=e.vaultEndpoint,w=e.vaultEngine,D=e.vaultNamespace,F=e.vaultPrefix,E=e.vaultAppRoleEngine,U=e.vaultId,G=e.vaultSecret,q=e.vaultRetry,L=e.vaultPing,M=e.azureEndpoint,O=e.azureTenantID,B=e.azureClientID,$=e.azureClientSecret,W=e.gcpProjectID,H=e.gcpEndpoint,Y=e.gcpClientEmail,Q=e.gcpClientID,X=e.gcpPrivateKeyID,J=e.gcpPrivateKey,ee=e.enableCustomCertsForKES,te=e.enableAutoCert,ne=e.enableTLS,re=e.minioCertificates,ae=e.serverCertificate,se=e.clientCertificate,ie=e.vaultCertificate,oe=e.vaultCA,le=e.gemaltoCA,ce=e.kesSecurityContext,ue=e.replicas,de=(0,o.useState)({}),me=(0,s.Z)(de,2),ge=me[0],pe=me[1],fe=!1;ne&&(te||re&&re.filter((function(e){return e.encoded_key&&e.encoded_cert})).length>0)&&(fe=!0);var he=(0,o.useCallback)((function(e,t){n("encryption",e,t)}),[n]),xe=function(e){pe((0,b.h)(ge,e))};return(0,o.useEffect)((function(){var e=[];g&&(e=[].concat((0,Z.Z)(e),[{fieldKey:"replicas",required:!0,value:ue,customValidation:parseInt(ue)<1,customValidationMessage:"Replicas needs to be 1 or greater"},{fieldKey:"kes_securityContext_runAsUser",required:!0,value:ce.runAsUser,customValidation:""===ce.runAsUser||parseInt(ce.runAsUser)<0,customValidationMessage:"runAsUser must be present and be 0 or more"},{fieldKey:"kes_securityContext_runAsGroup",required:!0,value:ce.runAsGroup,customValidation:""===ce.runAsGroup||parseInt(ce.runAsGroup)<0,customValidationMessage:"runAsGroup must be present and be 0 or more"},{fieldKey:"kes_securityContext_fsGroup",required:!0,value:ce.fsGroup,customValidation:""===ce.fsGroup||parseInt(ce.fsGroup)<0,customValidationMessage:"fsGroup must be present and be 0 or more"}]),p&&(e=[].concat((0,Z.Z)(e),[{fieldKey:"serverKey",required:!te,value:ae.encoded_key},{fieldKey:"serverCert",required:!te,value:ae.encoded_cert},{fieldKey:"clientKey",required:!te,value:se.encoded_key},{fieldKey:"clientCert",required:!te,value:se.encoded_cert}])),"vault"===f&&(e=[].concat((0,Z.Z)(e),[{fieldKey:"vault_endpoint",required:!0,value:z},{fieldKey:"vault_id",required:!0,value:U},{fieldKey:"vault_secret",required:!0,value:G},{fieldKey:"vault_ping",required:!1,value:L,customValidation:parseInt(L)<0,customValidationMessage:"Value needs to be 0 or greater"},{fieldKey:"vault_retry",required:!1,value:q,customValidation:parseInt(q)<0,customValidationMessage:"Value needs to be 0 or greater"}])),"aws"===f&&(e=[].concat((0,Z.Z)(e),[{fieldKey:"aws_endpoint",required:!0,value:S},{fieldKey:"aws_region",required:!0,value:C},{fieldKey:"aws_accessKey",required:!0,value:A},{fieldKey:"aws_secretKey",required:!0,value:T}])),"gemalto"===f&&(e=[].concat((0,Z.Z)(e),[{fieldKey:"gemalto_endpoint",required:!0,value:h},{fieldKey:"gemalto_token",required:!0,value:x},{fieldKey:"gemalto_domain",required:!0,value:v},{fieldKey:"gemalto_retry",required:!1,value:y,customValidation:parseInt(y)<0,customValidationMessage:"Value needs to be 0 or greater"}])),"azure"===f&&(e=[].concat((0,Z.Z)(e),[{fieldKey:"azure_endpoint",required:!0,value:M},{fieldKey:"azure_tenant_id",required:!0,value:O},{fieldKey:"azure_client_id",required:!0,value:B},{fieldKey:"azure_client_secret",required:!0,value:$}])));var t=(0,P.R)(e);r("encryption",0===Object.keys(t).length),pe(t)}),[g,f,z,w,U,G,L,q,S,C,T,A,h,x,v,y,W,H,Y,Q,X,J,M,O,B,$,r,te,p,ae.encoded_key,ae.encoded_cert,se.encoded_key,se.encoded_cert,ce,ue]),(0,k.jsxs)(_.Z,{className:t.paperWrapper,children:[(0,k.jsxs)("div",{className:t.headerElement,children:[(0,k.jsx)("h3",{className:t.h3Section,children:"Encryption"}),(0,k.jsx)("span",{className:t.descriptionText,children:"How would you like to encrypt the information at rest."})]}),(0,k.jsx)(d.ZP,{item:!0,xs:12,children:(0,k.jsx)(N.Z,{value:"enableEncryption",id:"enableEncryption",name:"enableEncryption",checked:g,onChange:function(e){var t=e.target.checked;he("enableEncryption",t)},label:"Enable Server Side Encryption",disabled:!fe})}),g&&(0,k.jsxs)(o.Fragment,{children:[(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.encryptionTypeOptions,children:(0,k.jsx)(K.Z,{currentSelection:f,id:"encryptionType",name:"encryptionType",label:"Encryption Options",onChange:function(e){he("encryptionType",e.target.value)},selectorOptions:[{label:"Vault",value:"vault"},{label:"AWS",value:"aws"},{label:"Gemalto",value:"gemalto"},{label:"GCP",value:"gcp"},{label:"Azure",value:"azure"}]})}),"vault"===f&&(0,k.jsxs)(o.Fragment,{children:[(0,k.jsx)(d.ZP,{item:!0,xs:12,children:(0,k.jsx)(N.Z,{value:"enableCustomCertsForKES",id:"enableCustomCertsForKES",name:"enableCustomCertsForKES",checked:ee||!te,onChange:function(e){var t=e.target.checked;he("enableCustomCertsForKES",t)},label:"Custom Certificates",disabled:!te})}),(ee||!te)&&(0,k.jsxs)(o.Fragment,{children:[(0,k.jsx)(d.ZP,{container:!0,children:(0,k.jsx)(d.ZP,{item:!0,xs:12,style:{marginBottom:15},children:(0,k.jsxs)("fieldset",{className:t.fieldGroup,children:[(0,k.jsx)("legend",{className:t.descriptionText,children:"Encryption Service Certificates"}),(0,k.jsx)(V.Z,{onChange:function(e,t){a("key",t,e),xe("serverKey")},accept:".key,.pem",id:"serverKey",name:"serverKey",label:"Key",error:ge.serverKey||"",value:ae.key,required:!te}),(0,k.jsx)(V.Z,{onChange:function(e,t){a("cert",t,e),xe("serverCert")},accept:".cer,.crt,.cert,.pem",id:"serverCert",name:"serverCert",label:"Cert",error:ge.serverCert||"",value:ae.cert,required:!te})]})})}),(0,k.jsx)(d.ZP,{container:!0,style:{marginBottom:15},children:(0,k.jsx)(d.ZP,{item:!0,xs:12,children:(0,k.jsxs)("fieldset",{className:t.fieldGroup,children:[(0,k.jsx)("legend",{className:t.descriptionText,children:"Mutual TLS authentication"}),(0,k.jsx)(V.Z,{onChange:function(e,t){l("key",t,e),xe("clientKey")},accept:".key,.pem",id:"clientKey",name:"clientKey",label:"Key",error:ge.clientKey||"",value:se.key,required:!te}),(0,k.jsx)(V.Z,{onChange:function(e,t){l("cert",t,e),xe("clientCert")},accept:".cer,.crt,.cert,.pem",id:"clientCert",name:"clientCert",label:"Cert",error:ge.clientCert||"",value:se.cert,required:!te})]})})})]}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"vault_endpoint",name:"vault_endpoint",onChange:function(e){he("vaultEndpoint",e.target.value),xe("vault_endpoint")},label:"Endpoint",value:z,error:ge.vault_endpoint||"",required:!0})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"vault_engine",name:"vault_engine",onChange:function(e){he("vaultEngine",e.target.value),xe("vault_engine")},label:"Engine",value:w})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"vault_namespace",name:"vault_namespace",onChange:function(e){he("vaultNamespace",e.target.value)},label:"Namespace",value:D})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"vault_prefix",name:"vault_prefix",onChange:function(e){he("vaultPrefix",e.target.value)},label:"Prefix",value:F})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,children:(0,k.jsxs)("fieldset",{className:t.fieldGroup,children:[(0,k.jsx)("legend",{className:t.descriptionText,children:"App Role"}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"vault_approle_engine",name:"vault_approle_engine",onChange:function(e){he("vaultAppRoleEngine",e.target.value)},label:"Engine",value:E})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"vault_id",name:"vault_id",onChange:function(e){he("vaultId",e.target.value),xe("vault_id")},label:"AppRole ID",value:U,error:ge.vault_id||"",required:!0})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"vault_secret",name:"vault_secret",onChange:function(e){he("vaultSecret",e.target.value),xe("vault_secret")},label:"AppRole Secret",value:G,error:ge.vault_secret||"",required:!0})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{type:"number",min:"0",id:"vault_retry",name:"vault_retry",onChange:function(e){he("vaultRetry",e.target.value),xe("vault_retry")},label:"Retry (Seconds)",value:q,error:ge.vault_retry||""})})]})}),(0,k.jsx)(d.ZP,{container:!0,className:t.mutualTlsConfig,children:(0,k.jsxs)("fieldset",{className:t.fieldGroup,children:[(0,k.jsx)("legend",{className:t.descriptionText,children:"Mutual TLS authentication (optional)"}),(0,k.jsx)(V.Z,{onChange:function(e,t){c("key",t,e),xe("vault_key")},accept:".key,.pem",id:"vault_key",name:"vault_key",label:"Key",value:ie.key}),(0,k.jsx)(V.Z,{onChange:function(e,t){c("cert",t,e),xe("vault_cert")},accept:".cer,.crt,.cert,.pem",id:"vault_cert",name:"vault_cert",label:"Cert",value:ie.cert}),(0,k.jsx)(V.Z,{onChange:function(e,t){u(t,e),xe("vault_ca")},accept:".cer,.crt,.cert,.pem",id:"vault_ca",name:"vault_ca",label:"CA",value:oe.cert})]})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,style:{marginTop:15},children:(0,k.jsxs)("fieldset",{className:t.fieldGroup,children:[(0,k.jsx)("legend",{className:t.descriptionText,children:"Status"}),(0,k.jsx)(I.Z,{type:"number",min:"0",id:"vault_ping",name:"vault_ping",onChange:function(e){he("vaultPing",e.target.value),xe("vault_ping")},label:"Ping (Seconds)",value:L,error:ge.vault_ping||""})]})})]}),"azure"===f&&(0,k.jsxs)(o.Fragment,{children:[(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"azure_endpoint",name:"azure_endpoint",onChange:function(e){he("azureEndpoint",e.target.value),xe("azure_endpoint")},label:"Endpoint",value:M,error:ge.azure_endpoint||""})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,children:(0,k.jsxs)("fieldset",{className:t.fieldGroup,children:[(0,k.jsx)("legend",{className:t.descriptionText,children:"Credentials"}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"azure_tenant_id",name:"azure_tenant_id",onChange:function(e){he("azureTenantID",e.target.value),xe("azure_tenant_id")},label:"Tenant ID",value:O,error:ge.azure_tenant_id||""})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"azure_client_id",name:"azure_client_id",onChange:function(e){he("azureClientID",e.target.value),xe("azure_client_id")},label:"Client ID",value:B,error:ge.azure_client_id||""})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"azure_client_secret",name:"azure_client_secret",onChange:function(e){he("azureClientSecret",e.target.value),xe("azure_client_secret")},label:"Client Secret",value:$,error:ge.azure_client_secret||""})})]})})]}),"gcp"===f&&(0,k.jsxs)(o.Fragment,{children:[(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"gcp_project_id",name:"gcp_project_id",onChange:function(e){he("gcpProjectID",e.target.value)},label:"Project ID",value:W})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"gcp_endpoint",name:"gcp_endpoint",onChange:function(e){he("gcpEndpoint",e.target.value)},label:"Endpoint",value:H})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,children:(0,k.jsxs)("fieldset",{className:t.fieldGroup,children:[(0,k.jsx)("legend",{className:t.descriptionText,children:"Credentials"}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"gcp_client_email",name:"gcp_client_email",onChange:function(e){he("gcpClientEmail",e.target.value)},label:"Client Email",value:Y})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"gcp_client_id",name:"gcp_client_id",onChange:function(e){he("gcpClientID",e.target.value)},label:"Client ID",value:Q})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"gcp_private_key_id",name:"gcp_private_key_id",onChange:function(e){he("gcpPrivateKeyID",e.target.value)},label:"Private Key ID",value:X})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"gcp_private_key",name:"gcp_private_key",onChange:function(e){he("gcpPrivateKey",e.target.value)},label:"Private Key",value:J})})]})})]}),"aws"===f&&(0,k.jsxs)(o.Fragment,{children:[(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"aws_endpoint",name:"aws_endpoint",onChange:function(e){he("awsEndpoint",e.target.value),xe("aws_endpoint")},label:"Endpoint",value:S,error:ge.aws_endpoint||"",required:!0})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"aws_region",name:"aws_region",onChange:function(e){he("awsRegion",e.target.value),xe("aws_region")},label:"Region",value:C,error:ge.aws_region||"",required:!0})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"aws_kmsKey",name:"aws_kmsKey",onChange:function(e){he("awsKMSKey",e.target.value)},label:"KMS Key",value:j})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,children:(0,k.jsxs)("fieldset",{className:t.fieldGroup,children:[(0,k.jsx)("legend",{className:t.descriptionText,children:"Credentials"}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"aws_accessKey",name:"aws_accessKey",onChange:function(e){he("awsAccessKey",e.target.value),xe("aws_accessKey")},label:"Access Key",value:A,error:ge.aws_accessKey||"",required:!0})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"aws_secretKey",name:"aws_secretKey",onChange:function(e){he("awsSecretKey",e.target.value),xe("aws_secretKey")},label:"Secret Key",value:T,error:ge.aws_secretKey||"",required:!0})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"aws_token",name:"aws_token",onChange:function(e){he("awsToken",e.target.value)},label:"Token",value:R})})]})})]}),"gemalto"===f&&(0,k.jsxs)(o.Fragment,{children:[(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"gemalto_endpoint",name:"gemalto_endpoint",onChange:function(e){he("gemaltoEndpoint",e.target.value),xe("gemalto_endpoint")},label:"Endpoint",value:h,error:ge.gemalto_endpoint||"",required:!0})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,style:{marginBottom:15},children:(0,k.jsxs)("fieldset",{className:t.fieldGroup,children:[(0,k.jsx)("legend",{className:t.descriptionText,children:"Credentials"}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"gemalto_token",name:"gemalto_token",onChange:function(e){he("gemaltoToken",e.target.value),xe("gemalto_token")},label:"Token",value:x,error:ge.gemalto_token||"",required:!0})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"gemalto_domain",name:"gemalto_domain",onChange:function(e){he("gemaltoDomain",e.target.value),xe("gemalto_domain")},label:"Domain",value:v,error:ge.gemalto_domain||"",required:!0})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{type:"number",min:"0",id:"gemalto_retry",name:"gemalto_retry",onChange:function(e){he("gemaltoRetry",e.target.value),xe("gemalto_retry")},label:"Retry (seconds)",value:y,error:ge.gemalto_retry||""})})]})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,style:{marginBottom:15},children:(0,k.jsxs)("fieldset",{className:t.fieldGroup,children:[(0,k.jsx)("legend",{className:t.descriptionText,children:"Custom CA Root certificate verification"}),(0,k.jsx)(V.Z,{onChange:function(e,t){m(t,e),xe("gemalto_ca")},accept:".cer,.crt,.cert,.pem",id:"gemalto_ca",name:"gemalto_ca",label:"CA",value:le.cert})]})})]}),(0,k.jsx)("div",{className:t.headerElement,children:(0,k.jsx)("h4",{className:t.h3Section,children:"Additional Configurations"})}),(0,k.jsxs)(d.ZP,{item:!0,xs:12,children:[(0,k.jsx)(d.ZP,{item:!0,xs:12,classes:t.formFieldRow,children:(0,k.jsx)(I.Z,{type:"number",min:"1",id:"replicas",name:"replicas",onChange:function(e){he("replicas",e.target.value),xe("replicas")},label:"Replicas",value:ue,required:!0,error:ge.replicas||""})}),(0,k.jsxs)("fieldset",{className:t.fieldGroup,style:{marginTop:15},children:[(0,k.jsx)("legend",{className:t.descriptionText,children:"SecurityContext for KES pods"}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.kesSecurityContext,children:(0,k.jsxs)("div",{className:"".concat(t.multiContainer," ").concat(t.responsiveContainer),children:[(0,k.jsx)("div",{className:"".concat(t.formFieldRow," ").concat(t.rightSpacer),children:(0,k.jsx)(I.Z,{type:"number",id:"kes_securityContext_runAsUser",name:"kes_securityContext_runAsUser",onChange:function(e){he("kesSecurityContext",(0,i.Z)((0,i.Z)({},ce),{},{runAsUser:e.target.value})),xe("kes_securityContext_runAsUser")},label:"Run As User",value:ce.runAsUser,required:!0,error:ge.kes_securityContext_runAsUser||"",min:"0"})}),(0,k.jsx)("div",{className:"".concat(t.formFieldRow," ").concat(t.rightSpacer),children:(0,k.jsx)(I.Z,{type:"number",id:"kes_securityContext_runAsGroup",name:"kes_securityContext_runAsGroup",onChange:function(e){he("kesSecurityContext",(0,i.Z)((0,i.Z)({},ce),{},{runAsGroup:e.target.value})),xe("kes_securityContext_runAsGroup")},label:"Run As Group",value:ce.runAsGroup,required:!0,error:ge.kes_securityContext_runAsGroup||"",min:"0"})}),(0,k.jsx)("div",{className:"".concat(t.formFieldRow," ").concat(t.rightSpacer),children:(0,k.jsx)(I.Z,{type:"number",id:"kes_securityContext_fsGroup",name:"kes_securityContext_fsGroup",onChange:function(e){he("kesSecurityContext",(0,i.Z)((0,i.Z)({},ce),{},{fsGroup:e.target.value})),xe("kes_securityContext_fsGroup")},label:"FsGroup",value:ce.fsGroup,required:!0,error:ge.kes_securityContext_fsGroup||"",min:"0"})})]})}),(0,k.jsx)("br",{}),(0,k.jsx)(d.ZP,{item:!0,xs:12,children:(0,k.jsx)("div",{className:t.multiContainer,children:(0,k.jsx)(N.Z,{value:"kesSecurityContextRunAsNonRoot",id:"kes_securityContext_runAsNonRoot",name:"kes_securityContext_runAsNonRoot",checked:ce.runAsNonRoot,onChange:function(e){var t=e.target.checked;he("kesSecurityContext",(0,i.Z)((0,i.Z)({},ce),{},{runAsNonRoot:t}))},label:"Do not run as Root"})})})]})]})]})]})}))),Y=(0,u.$j)((function(e){var t=e.tenants.createTenant;return{podAffinity:t.fields.affinity.podAffinity,nodeSelectorLabels:t.fields.affinity.nodeSelectorLabels,withPodAntiAffinity:t.fields.affinity.withPodAntiAffinity,keyValuePairs:t.nodeSelectorPairs}}),{setModalErrorSnackMessage:y.zb,updateAddField:j.HM,isPageValid:j.NO,setKeyValuePairs:j.i$}),Q=(0,p.Z)((function(e){return(0,g.Z)((0,i.Z)((0,i.Z)({overlayAction:{marginLeft:10,"& svg":{maxWidth:15,maxHeight:15},"& button":{background:"#EAEAEA"}},affinityConfigField:{display:"flex"},affinityFieldLabel:{display:"flex",flexFlow:"column",flex:1},radioField:{display:"flex",alignItems:"flex-start",marginTop:10,"& div:first-child":{display:"flex",flexFlow:"column",alignItems:"baseline",textAlign:"left !important"}},affinityLabelKey:{"& div:first-child":{marginBottom:0}},affinityLabelValue:{marginLeft:10,"& div:first-child":{marginBottom:0}},rowActions:{display:"flex",alignItems:"center"},fieldContainer:{marginBottom:0},affinityRow:{marginBottom:10,display:"flex"}},f.oO),f.AK))}))(Y((function(e){var t=e.classes,n=e.podAffinity,r=e.nodeSelectorLabels,a=e.withPodAntiAffinity,i=e.setModalErrorSnackMessage,l=e.updateAddField,c=e.keyValuePairs,u=e.setKeyValuePairs,m=e.isPageValid,g=(0,o.useState)({}),p=(0,s.Z)(g,2),f=p[0],x=p[1],v=(0,o.useState)(!0),y=(0,s.Z)(v,2),S=y[0],C=y[1],j=(0,o.useState)({}),b=(0,s.Z)(j,2),T=b[0],R=b[1],z=(0,o.useState)([]),w=(0,s.Z)(z,2),F=w[0],E=w[1],U=(0,o.useCallback)((function(e,t){l("affinity",e,t)}),[l]);return(0,o.useEffect)((function(){S&&h.Z.invoke("GET","/api/v1/nodes/labels").then((function(e){C(!1),R(e);var t=[];for(var n in e)t.push({label:n,value:n});E(t)})).catch((function(e){C(!1),i(e),R({})}))}),[i,S]),(0,o.useEffect)((function(){if(c){var e=c.filter((function(e){return""!==e.key})).map((function(e){return"".concat(e.key,"=").concat(e.value)})).filter((function(e,t,n){return n.indexOf(e)===t})).join("&");U("nodeSelectorLabels",e)}}),[c,U]),(0,o.useEffect)((function(){var e=[];if("nodeSelector"===n){var t=!0,a=r.split("&");1===a.length&&""===a[0]&&(t=!1),a.forEach((function(e,n){var r=e.split("=");2!==r.length&&(t=!1),n+1!==a.length&&(""!==r[0]&&""!==r[1]||(t=!1))})),e=[].concat((0,Z.Z)(e),[{fieldKey:"labels",required:!0,value:r,customValidation:!t,customValidationMessage:"You need to add at least one label key-pair"}])}var s=(0,P.R)(e);m("affinity",0===Object.keys(s).length),x(s)}),[m,n,r]),(0,k.jsxs)(_.Z,{className:t.paperWrapper,children:[(0,k.jsxs)("div",{className:t.headerElement,children:[(0,k.jsx)("h3",{className:t.h3Section,children:"Pod Placement"}),(0,k.jsx)("span",{className:t.descriptionText,children:"Configure how pods will be assigned to nodes"})]}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.affinityConfigField,children:(0,k.jsxs)(d.ZP,{item:!0,className:t.affinityFieldLabel,children:[(0,k.jsx)("div",{className:t.label,children:"Type"}),(0,k.jsx)("div",{className:"".concat(t.descriptionText," ").concat(t.affinityHelpText),children:"MinIO supports multiple configurations for Pod Affinity"}),(0,k.jsx)(d.ZP,{item:!0,className:t.radioField,children:(0,k.jsx)(K.Z,{currentSelection:n,id:"affinity-options",name:"affinity-options",label:" ",onChange:function(e){U("podAffinity",e.target.value)},selectorOptions:[{label:"None",value:"none"},{label:"Default (Pod Anti-Affinnity)",value:"default"},{label:"Node Selector",value:"nodeSelector"}]})})]})}),"nodeSelector"===n&&(0,k.jsxs)(o.Fragment,{children:[(0,k.jsx)("br",{}),(0,k.jsx)(d.ZP,{item:!0,xs:12,children:(0,k.jsx)(N.Z,{value:"with_pod_anti_affinity",id:"with_pod_anti_affinity",name:"with_pod_anti_affinity",checked:a,onChange:function(e){var t=e.target.checked;U("withPodAntiAffinity",t)},label:"With Pod Anti-Affinity"})}),(0,k.jsxs)(d.ZP,{item:!0,xs:12,children:[(0,k.jsx)("h3",{children:"Labels"}),(0,k.jsx)("span",{className:t.error,children:f.labels}),(0,k.jsx)(d.ZP,{container:!0,children:c&&c.map((function(e,n){return(0,k.jsxs)(d.ZP,{item:!0,xs:12,className:t.affinityRow,children:[(0,k.jsxs)(d.ZP,{item:!0,xs:5,className:t.affinityLabelKey,children:[F.length>0&&(0,k.jsx)(A.Z,{onChange:function(e){var t=e.target.value,r=Object.assign([],c);r[n].key=e.target.value,r[n].value=T[t][0],u(r)},id:"select-access-policy",name:"select-access-policy",label:"",value:e.key,options:F}),0===F.length&&(0,k.jsx)(I.Z,{id:"nodeselector-key-".concat(n.toString()),label:"",name:"nodeselector-".concat(n.toString()),value:e.key,onChange:function(e){var t=Object.assign([],c);t[n].key=e.target.value,u(t)},index:n,placeholder:"Key"})]}),(0,k.jsxs)(d.ZP,{item:!0,xs:5,className:t.affinityLabelValue,children:[F.length>0&&(0,k.jsx)(A.Z,{onChange:function(e){var t=Object.assign([],c);t[n].value=e.target.value,u(t)},id:"select-access-policy",name:"select-access-policy",label:"",value:e.value,options:T[e.key]?T[e.key].map((function(e){return{label:e,value:e}})):[]}),0===F.length&&(0,k.jsx)(I.Z,{id:"nodeselector-value-".concat(n.toString()),label:"",name:"nodeselector-".concat(n.toString()),value:e.value,onChange:function(e){var t=Object.assign([],c);t[n].value=e.target.value,u(t)},index:n,placeholder:"value"})]}),(0,k.jsxs)(d.ZP,{item:!0,xs:2,className:t.rowActions,children:[(0,k.jsx)("div",{className:t.overlayAction,children:(0,k.jsx)(D.Z,{size:"small",onClick:function(){var e=Object.assign([],c);F.length>0?e.push({key:F[0].value,value:T[F[0].value][0]}):e.push({key:"",value:""}),u(e)},children:(0,k.jsx)(O.Z,{})})}),c.length>1&&(0,k.jsx)("div",{className:t.overlayAction,children:(0,k.jsx)(D.Z,{size:"small",onClick:function(){var e=c.filter((function(e,t){return t!==n}));u(e)},children:(0,k.jsx)(q.Z,{})})})]})]},"affinity-keyVal-".concat(n.toString()))}))})]})]})]})}))),X=n(35721),J=n(24442),ee=(0,u.$j)((function(e){return{storageClasses:e.tenants.createTenant.storageClasses,customImage:e.tenants.createTenant.fields.configure.customImage,imageName:e.tenants.createTenant.fields.configure.imageName,customDockerhub:e.tenants.createTenant.fields.configure.customDockerhub,imageRegistry:e.tenants.createTenant.fields.configure.imageRegistry,imageRegistryUsername:e.tenants.createTenant.fields.configure.imageRegistryUsername,imageRegistryPassword:e.tenants.createTenant.fields.configure.imageRegistryPassword,exposeMinIO:e.tenants.createTenant.fields.configure.exposeMinIO,exposeConsole:e.tenants.createTenant.fields.configure.exposeConsole,prometheusCustom:e.tenants.createTenant.fields.configure.prometheusCustom,tenantCustom:e.tenants.createTenant.fields.configure.tenantCustom,logSearchCustom:e.tenants.createTenant.fields.configure.logSearchCustom,logSearchVolumeSize:e.tenants.createTenant.fields.configure.logSearchVolumeSize,logSearchSizeFactor:e.tenants.createTenant.fields.configure.logSearchSizeFactor,prometheusVolumeSize:e.tenants.createTenant.fields.configure.prometheusVolumeSize,prometheusSizeFactor:e.tenants.createTenant.fields.configure.prometheusSizeFactor,logSearchSelectedStorageClass:e.tenants.createTenant.fields.configure.logSearchSelectedStorageClass,logSearchImage:e.tenants.createTenant.fields.configure.logSearchImage,kesImage:e.tenants.createTenant.fields.configure.kesImage,logSearchPostgresImage:e.tenants.createTenant.fields.configure.logSearchPostgresImage,logSearchPostgresInitImage:e.tenants.createTenant.fields.configure.logSearchPostgresInitImage,prometheusSelectedStorageClass:e.tenants.createTenant.fields.configure.prometheusSelectedStorageClass,prometheusImage:e.tenants.createTenant.fields.configure.prometheusImage,prometheusSidecarImage:e.tenants.createTenant.fields.configure.prometheusSidecarImage,prometheusInitImage:e.tenants.createTenant.fields.configure.prometheusInitImage,selectedStorageClass:e.tenants.createTenant.fields.nameTenant.selectedStorageClass}}),{updateAddField:j.HM,isPageValid:j.NO}),te=(0,p.Z)((function(e){return(0,g.Z)((0,i.Z)((0,i.Z)((0,i.Z)({},f.DF),f.oO),f.AK))}))(ee((function(e){var t=e.classes,n=(e.storageClasses,e.customImage),r=e.imageName,a=e.customDockerhub,i=e.imageRegistry,l=e.imageRegistryUsername,c=e.imageRegistryPassword,u=(e.exposeMinIO,e.exposeConsole,e.prometheusCustom),m=e.tenantCustom,g=e.logSearchCustom,p=e.logSearchVolumeSize,f=(e.logSearchSizeFactor,e.logSearchImage),h=e.kesImage,x=e.logSearchPostgresImage,v=e.logSearchPostgresInitImage,y=e.prometheusVolumeSize,S=(e.prometheusSizeFactor,e.logSearchSelectedStorageClass),C=e.prometheusSelectedStorageClass,j=e.prometheusImage,A=e.prometheusSidecarImage,T=e.prometheusInitImage,R=e.updateAddField,z=e.isPageValid,w=(e.selectedStorageClass,(0,o.useState)({})),D=(0,s.Z)(w,2),F=D[0],E=D[1],U=(0,o.useCallback)((function(e,t){R("configure",e,t)}),[R]);(0,o.useEffect)((function(){var e=[];u&&(e=[].concat((0,Z.Z)(e),[{fieldKey:"prometheus_storage_class",required:!0,value:C,customValidation:""===C,customValidationMessage:"Field cannot be empty"},{fieldKey:"prometheus_volume_size",required:!0,value:y,customValidation:""===y||parseInt(y)<=0,customValidationMessage:"Volume size must be present and be greatter than 0"}])),g&&(e=[].concat((0,Z.Z)(e),[{fieldKey:"log_search_storage_class",required:!0,value:S,customValidation:""===S,customValidationMessage:"Field cannot be empty"},{fieldKey:"log_search_volume_size",required:!0,value:p,customValidation:""===p||parseInt(p)<=0,customValidationMessage:"Volume size must be present and be greatter than 0"}])),n&&(e=[].concat((0,Z.Z)(e),[{fieldKey:"image",required:!1,value:r,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'minio/minio:VERSION'"},{fieldKey:"logSearchImage",required:!1,value:f,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'minio/logsearchapi:VERSION'"},{fieldKey:"kesImage",required:!1,value:h,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'minio/kes:VERSION'"},{fieldKey:"logSearchPostgresImage",required:!1,value:x,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'library/postgres:VERSION'"},{fieldKey:"logSearchPostgresInitImage",required:!1,value:v,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'library/busybox:VERSION'"},{fieldKey:"prometheusImage",required:!1,value:j,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'minio/prometheus:VERSION'"},{fieldKey:"prometheusSidecarImage",required:!1,value:A,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'project/container:VERSION'"},{fieldKey:"prometheusInitImage",required:!1,value:T,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'library/busybox:VERSION'"}]),a&&(e=[].concat((0,Z.Z)(e),[{fieldKey:"registry",required:!0,value:i},{fieldKey:"registryUsername",required:!0,value:l},{fieldKey:"registryPassword",required:!0,value:c}])));var t=(0,P.R)(e);z("configure",0===Object.keys(t).length),E(t)}),[n,r,f,h,x,v,j,A,T,a,i,l,c,z,u,m,g,C,y,S,p]);var K=function(e){E((0,b.h)(F,e))};return(0,k.jsxs)(_.Z,{className:t.paperWrapper,children:[(0,k.jsxs)("div",{className:t.headerElement,children:[(0,k.jsx)("h3",{className:t.h3Section,children:"Container Images"}),(0,k.jsx)("span",{className:t.descriptionText,children:"Images used by the Tenant Deployment"})]}),(0,k.jsxs)(o.Fragment,{children:[(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"image",name:"image",onChange:function(e){U("imageName",e.target.value),K("image")},label:"MinIO's Image",value:r,error:F.image||"",placeholder:"E.g. minio/minio:RELEASE.2022-01-08T03-11-54Z"})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"logSearchImage",name:"logSearchImage",onChange:function(e){U("logSearchImage",e.target.value),K("logSearchImage")},label:"Log Search API's Image",value:f,error:F.logSearchImage||"",placeholder:"E.g. minio/logsearchapi:v4.1.1"})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"kesImage",name:"kesImage",onChange:function(e){U("kesImage",e.target.value),K("kesImage")},label:"KES Image",value:h,error:F.kesImage||"",placeholder:"E.g. minio/kes:v0.14.0"})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"logSearchPostgresImage",name:"logSearchPostgresImage",onChange:function(e){U("logSearchPostgresImage",e.target.value),K("logSearchPostgresImage")},label:"Log Search Postgres's Image",value:x,error:F.logSearchPostgresImage||"",placeholder:"E.g. library/postgres:13"})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"logSearchPostgresInitImage",name:"logSearchPostgresInitImage",onChange:function(e){U("logSearchPostgresInitImage",e.target.value),K("logSearchPostgresInitImage")},label:"Log Search Postgres's Init Image",value:v,error:F.logSearchPostgresInitImage||"",placeholder:"E.g. library/busybox:1.33.1"})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"prometheusImage",name:"prometheusImage",onChange:function(e){U("prometheusImage",e.target.value),K("prometheusImage")},label:"Prometheus Image",value:j,error:F.prometheusImage||"",placeholder:"E.g. quay.io/prometheus/prometheus:latest"})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"prometheusSidecarImage",name:"prometheusSidecarImage",onChange:function(e){U("prometheusSidecarImage",e.target.value),K("prometheusSidecarImage")},label:"Prometheus Sidecar Image",value:A,error:F.prometheusSidecarImage||"",placeholder:"E.g. quay.io/prometheus/prometheus:latest"})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"prometheusInitImage",name:"prometheusInitImage",onChange:function(e){U("prometheusInitImage",e.target.value),K("prometheusInitImage")},label:"Prometheus Init Image",value:T,error:F.prometheusInitImage||"",placeholder:"E.g. quay.io/prometheus/prometheus:latest"})})]}),n&&(0,k.jsx)(o.Fragment,{children:(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(N.Z,{value:"custom_docker_hub",id:"custom_docker_hub",name:"custom_docker_hub",checked:a,onChange:function(e){var t=e.target.checked;U("customDockerhub",t)},label:"Set/Update Image Registry"})})}),a&&(0,k.jsxs)(o.Fragment,{children:[(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"registry",name:"registry",onChange:function(e){U("imageRegistry",e.target.value)},label:"Endpoint",value:i,error:F.registry||"",placeholder:"E.g. https://index.docker.io/v1/",required:!0})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"registryUsername",name:"registryUsername",onChange:function(e){U("imageRegistryUsername",e.target.value)},label:"Username",value:l,error:F.registryUsername||"",required:!0})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"registryPassword",name:"registryPassword",onChange:function(e){U("imageRegistryPassword",e.target.value)},label:"Password",value:c,error:F.registryPassword||"",required:!0})})]})]})}))),ne=n(25534),re=n(29316),ae=n(3143),se=n.n(ae),ie=n(32120),oe=n(23473),le=n(60656),ce=n(85615),ue={setErrorSnackMessage:y.Ih},de=(0,u.$j)(null,ue),me=(0,p.Z)((function(e){return(0,g.Z)((0,i.Z)((0,i.Z)({wrapText:{maxWidth:"200px",whiteSpace:"normal",wordWrap:"break-word"}},f.oO),f.Qw))}))(de((function(e){var t=e.classes,n=e.namespace,r=e.addNamespaceOpen,a=e.closeAddNamespaceModalAndRefresh,i=e.setErrorSnackMessage,l=(0,o.useState)(!1),c=(0,s.Z)(l,2),u=c[0],d=c[1];(0,o.useEffect)((function(){u&&h.Z.invoke("POST","/api/v1/namespace",{name:n}).then((function(e){d(!1),a(!0)})).catch((function(e){d(!1),i(e)}))}),[u,a,n,i]);return(0,k.jsx)(le.Z,{title:"New namespace",confirmText:"Create",confirmButtonProps:{color:"primary",variant:"contained"},isOpen:r,titleIcon:(0,k.jsx)(ce.Ej,{}),isLoading:u,onConfirm:function(){d(!0)},onClose:function(){a(!1)},confirmationContent:(0,k.jsxs)(o.Fragment,{children:[u&&(0,k.jsx)(m.Z,{}),(0,k.jsxs)(oe.Z,{children:["Are you sure you want to add a namespace called",(0,k.jsx)("br",{}),(0,k.jsx)("b",{className:t.wrapText,children:n}),"?"]})]})})}))),ge=n(4182),pe=n(35044),fe=n(73481),he=n(29399),xe=n(95995),ve=(0,u.$j)((function(e){return{volumeSize:e.tenants.createTenant.fields.tenantSize.volumeSize,sizeFactor:e.tenants.createTenant.fields.tenantSize.sizeFactor,drivesPerServer:e.tenants.createTenant.fields.tenantSize.drivesPerServer,nodes:e.tenants.createTenant.fields.tenantSize.nodes,memoryNode:e.tenants.createTenant.fields.tenantSize.resourcesMemoryRequest,ecParity:e.tenants.createTenant.fields.tenantSize.ecParity,ecParityChoices:e.tenants.createTenant.fields.tenantSize.ecParityChoices,cleanECChoices:e.tenants.createTenant.fields.tenantSize.cleanECChoices,resourcesSize:e.tenants.createTenant.fields.tenantSize.resourcesSize,distribution:e.tenants.createTenant.fields.tenantSize.distribution,ecParityCalc:e.tenants.createTenant.fields.tenantSize.ecParityCalc,limitSize:e.tenants.createTenant.fields.tenantSize.limitSize,selectedStorageClass:e.tenants.createTenant.fields.nameTenant.selectedStorageClass,cpuToUse:e.tenants.createTenant.fields.tenantSize.resourcesCPURequest,integrationSelection:e.tenants.createTenant.fields.tenantSize.integrationSelection}}),{updateAddField:j.HM,isPageValid:j.NO}),ye=(0,p.Z)((function(e){return(0,g.Z)((0,i.Z)((0,i.Z)({root:{margin:4},table:{"& .MuiTableCell-root":{fontSize:13}}},f.oO),f.AK))}))(ve((function(e){var t=e.classes,n=e.nodes,r=e.memoryNode,a=e.ecParity,s=e.distribution,i=e.ecParityCalc,l=e.cpuToUse,c=e.integrationSelection,u=i.storageFactors.find((function(e){return e.erasureCode===a}));return(0,k.jsxs)("div",{className:t.root,children:[(0,k.jsx)("h4",{children:"Resource Allocation"}),(0,k.jsx)(xe.Z,{}),(0,k.jsx)(ge.Z,{className:t.table,"aria-label":"simple table",size:"small",children:(0,k.jsxs)(pe.Z,{children:[(0,k.jsxs)(he.Z,{children:[(0,k.jsx)(fe.Z,{scope:"row",children:"Number of Servers"}),(0,k.jsx)(fe.Z,{align:"right",children:parseInt(n)>0?n:"-"})]}),""===c.typeSelection&&""===c.storageClass&&(0,k.jsxs)(o.Fragment,{children:[(0,k.jsxs)(he.Z,{children:[(0,k.jsx)(fe.Z,{scope:"row",children:"Drives per Server"}),(0,k.jsx)(fe.Z,{align:"right",children:s?s.disks:"-"})]}),(0,k.jsxs)(he.Z,{children:[(0,k.jsx)(fe.Z,{scope:"row",children:"Drive Capacity"}),(0,k.jsx)(fe.Z,{align:"right",children:s?(0,x.ae)(s.pvSize):"-"})]})]}),(0,k.jsxs)(he.Z,{children:[(0,k.jsx)(fe.Z,{scope:"row",children:"Total Volumes"}),(0,k.jsx)(fe.Z,{align:"right",children:s?s.persistentVolumes:"-"})]}),""===c.typeSelection&&""===c.storageClass&&(0,k.jsxs)(o.Fragment,{children:[(0,k.jsxs)(he.Z,{children:[(0,k.jsx)(fe.Z,{scope:"row",children:"Memory per Node"}),(0,k.jsxs)(fe.Z,{align:"right",children:[r," Gi"]})]}),(0,k.jsxs)(he.Z,{children:[(0,k.jsx)(fe.Z,{style:{borderBottom:0},scope:"row",children:"CPU Selection"}),(0,k.jsx)(fe.Z,{style:{borderBottom:0},align:"right",children:l})]})]})]})}),0===i.error&&u&&(0,k.jsxs)(o.Fragment,{children:[(0,k.jsx)("h4",{children:"Erasure Code Configuration"}),(0,k.jsx)(xe.Z,{}),(0,k.jsx)(ge.Z,{className:t.table,"aria-label":"simple table",size:"small",children:(0,k.jsxs)(pe.Z,{children:[(0,k.jsxs)(he.Z,{children:[(0,k.jsx)(fe.Z,{scope:"row",children:"EC Parity"}),(0,k.jsx)(fe.Z,{align:"right",children:""!==a?a:"-"})]}),(0,k.jsxs)(he.Z,{children:[(0,k.jsx)(fe.Z,{scope:"row",children:"Raw Capacity"}),(0,k.jsx)(fe.Z,{align:"right",children:(0,x.ae)(i.rawCapacity)})]}),(0,k.jsxs)(he.Z,{children:[(0,k.jsx)(fe.Z,{scope:"row",children:"Usable Capacity"}),(0,k.jsx)(fe.Z,{align:"right",children:(0,x.ae)(u.maxCapacity)})]}),(0,k.jsxs)(he.Z,{children:[(0,k.jsx)(fe.Z,{style:{borderBottom:0},scope:"row",children:"Server Failures Tolerated"}),(0,k.jsx)(fe.Z,{style:{borderBottom:0},align:"right",children:s?Math.floor(u.maxFailureTolerations/s.disks):"-"})]})]})})]}),""!==c.typeSelection&&""!==c.storageClass&&(0,k.jsxs)(o.Fragment,{children:[(0,k.jsx)("h4",{children:"Single Instance Configuration"}),(0,k.jsx)(xe.Z,{}),(0,k.jsx)(ge.Z,{className:t.table,"aria-label":"simple table",size:"small",children:(0,k.jsxs)(pe.Z,{children:[(0,k.jsxs)(he.Z,{children:[(0,k.jsx)(fe.Z,{scope:"row",children:"CPU"}),(0,k.jsx)(fe.Z,{align:"right",children:0!==c.CPU?c.CPU:"-"})]}),(0,k.jsxs)(he.Z,{children:[(0,k.jsx)(fe.Z,{scope:"row",children:"Memory"}),(0,k.jsx)(fe.Z,{align:"right",children:0!==c.memory?"".concat(c.memory," Gi"):"-"})]}),(0,k.jsxs)(he.Z,{children:[(0,k.jsx)(fe.Z,{scope:"row",children:"Drives per Server"}),(0,k.jsx)(fe.Z,{align:"right",children:0!==c.drivesPerServer?"".concat(c.drivesPerServer):"-"})]}),(0,k.jsxs)(he.Z,{children:[(0,k.jsx)(fe.Z,{style:{borderBottom:0},scope:"row",children:"Drive Size"}),(0,k.jsxs)(fe.Z,{style:{borderBottom:0},align:"right",children:[c.driveSize.driveSize,c.driveSize.sizeUnit]})]})]})})]})]})}))),Se=n(7262),Ce=(0,u.$j)((function(e){return{nodes:e.tenants.createTenant.fields.tenantSize.nodes,resourcesSize:e.tenants.createTenant.fields.tenantSize.resourcesSize,selectedStorageClass:e.tenants.createTenant.fields.nameTenant.selectedStorageClass,maxAllocatableResources:e.tenants.createTenant.fields.tenantSize.maxAllocatableResources,maxCPUsUse:e.tenants.createTenant.fields.tenantSize.maxCPUsUse,maxMemorySize:e.tenants.createTenant.fields.tenantSize.maxMemorySize,resourcesSpecifyLimit:e.tenants.createTenant.fields.tenantSize.resourcesSpecifyLimit,resourcesCPURequestError:e.tenants.createTenant.fields.tenantSize.resourcesCPURequestError,resourcesCPURequest:e.tenants.createTenant.fields.tenantSize.resourcesCPURequest,resourcesCPULimitError:e.tenants.createTenant.fields.tenantSize.resourcesCPULimitError,resourcesCPULimit:e.tenants.createTenant.fields.tenantSize.resourcesCPULimit,resourcesMemoryRequestError:e.tenants.createTenant.fields.tenantSize.resourcesMemoryRequestError,resourcesMemoryRequest:e.tenants.createTenant.fields.tenantSize.resourcesMemoryRequest,resourcesMemoryLimitError:e.tenants.createTenant.fields.tenantSize.resourcesMemoryLimitError,resourcesMemoryLimit:e.tenants.createTenant.fields.tenantSize.resourcesMemoryLimit}}),{updateAddField:j.HM,isPageValid:j.NO}),je=(0,p.Z)((function(e){return(0,g.Z)((0,i.Z)((0,i.Z)((0,i.Z)({compositeFieldContainer:{display:"flex",alignItems:"center"},compositeAddOn:{marginLeft:10,"& div":{marginBottom:0},"@media (max-width: 900px)":{"& div":{marginTop:5}}}},f.DF),f.oO),f.AK))}))(Ce((function(e){var t=e.classes,n=e.updateAddField,r=e.isPageValid,a=e.nodes,s=e.resourcesSize,i=e.selectedStorageClass,l=(e.maxAllocatableResources,e.maxCPUsUse),u=e.maxMemorySize,m=e.resourcesSpecifyLimit,g=e.resourcesCPURequestError,p=e.resourcesCPURequest,f=e.resourcesCPULimitError,x=e.resourcesCPULimit,v=e.resourcesMemoryRequestError,y=e.resourcesMemoryRequest,S=e.resourcesMemoryLimitError,C=e.resourcesMemoryLimit,j=(0,o.useCallback)((function(e,t){n("tenantSize",e,t)}),[n]);return(0,o.useEffect)((function(){r("tenantSize",""===v&&""===S&&""===g&&""===f)}),[r,v,S,g,f]),(0,o.useEffect)((function(){h.Z.invoke("GET","api/v1/cluster/allocatable-resources?num_nodes=".concat(a)).then((function(e){j("maxAllocatableResources",e);var t=e,n=c()(t,"min_allocatable_mem",!1),r=c()(t,"min_allocatable_cpu",!1);if(!1===n||!1===r)return j("cpuToUse",0),j("maxMemorySize",""),void j("maxCPUsUse","");var a=(0,Se.floor)(e.mem_priority.max_allocatable_mem/1024/1024/1024);j("maxMemorySize",a.toString()),j("maxCPUsUse",e.cpu_priority.max_allocatable_cpu.toString());var s=c()(t,"cpu_priority.max_allocatable_cpu",0),i=Math.max(1,(0,Se.floor)(s/2));""===p&&j("resourcesCPURequest",i);var o=Math.max(2,(0,Se.floor)(a/2));""===y&&j("resourcesMemoryRequest",o)})).catch((function(e){j("maxMemorySize",0),j("resourcesCPURequest",""),j("resourcesMemoryRequest",""),console.error(e)}))}),[a,j]),(0,k.jsxs)(o.Fragment,{children:[(0,k.jsx)(d.ZP,{item:!0,xs:12,children:(0,k.jsxs)("div",{className:t.headerElement,children:[(0,k.jsx)("h3",{className:t.h3Section,children:"Resources"}),(0,k.jsx)("span",{className:t.descriptionText,children:"You may specify the amount of CPU and Memory that MinIO servers should reserve on each node."})]})}),""!==s.error&&(0,k.jsx)(d.ZP,{item:!0,xs:12,children:(0,k.jsx)("div",{className:t.error,children:s.error})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{label:"CPU Request",id:"resourcesCPURequest",name:"resourcesCPURequest",onChange:function(e){var t=parseInt(e.target.value);""===e.target.value?j("resourcesCPURequestError",""):isNaN(t)?j("resourcesCPURequestError","Invalid number"):t>parseInt(l)?j("resourcesCPURequestError","Request exceeds available cores (".concat(l,")")):e.target.validity.valid?j("resourcesCPURequestError",""):j("resourcesCPURequestError","Invalid configuration"),j("resourcesCPURequest",e.target.value)},value:p,disabled:""===i,max:l,error:g,pattern:"[0-9]*"})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"resourcesMemoryRequest",name:"resourcesMemoryRequest",onChange:function(e){var t=parseInt(e.target.value);""===e.target.value?j("resourcesMemoryRequestError",""):isNaN(t)?j("resourcesMemoryRequestError","Invalid number"):t>parseInt(u)?j("resourcesMemoryRequestError","Request exceeds available memory across ".concat(a," nodes (").concat(u,"Gi)")):t<2?j("resourcesMemoryRequestError","At least 2Gi must be requested"):e.target.validity.valid?j("resourcesMemoryRequestError",""):j("resourcesMemoryRequestError","Invalid configuration"),j("resourcesMemoryRequest",e.target.value)},label:"Memory Request",overlayObject:(0,k.jsx)(T.Z,{id:"size-unit",onUnitChange:function(){},unitSelected:"Gi",unitsList:[{label:"Gi",value:"Gi"}],disabled:!0}),value:y,disabled:""===i,error:v,pattern:"[0-9]*"})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,children:(0,k.jsx)(N.Z,{value:"resourcesSpecifyLimit",id:"resourcesSpecifyLimit",name:"resourcesSpecifyLimit",checked:m,onChange:function(e){var t=e.target.checked;j("resourcesSpecifyLimit",t)},label:"Specify Limit"})}),m&&(0,k.jsxs)(o.Fragment,{children:[(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{label:"CPU Limit",id:"resourcesCPULimit",name:"resourcesCPULimit",onChange:function(e){var t=parseInt(e.target.value);""===e.target.value?j("resourcesCPULimitError",""):isNaN(t)?j("resourcesCPULimitError","Invalid number"):e.target.validity.valid?j("resourcesCPULimitError",""):j("resourcesCPULimitError","Invalid configuration"),j("resourcesCPULimit",e.target.value)},value:x,disabled:""===i,max:l,error:f,pattern:"[0-9]*"})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"resourcesMemoryLimit",name:"resourcesMemoryLimit",onChange:function(e){var t=parseInt(e.target.value);console.log("value",t),""===e.target.value?j("resourcesMemoryLimitError",""):isNaN(t)?j("resourcesMemoryLimitError","Invalid number"):e.target.validity.valid?j("resourcesMemoryLimitError",""):j("resourcesMemoryLimitError","Invalid configuration"),j("resourcesMemoryLimit",e.target.value)},label:"Memory Limit",overlayObject:(0,k.jsx)(T.Z,{id:"size-unit",onUnitChange:function(){},unitSelected:"Gi",unitsList:[{label:"Gi",value:"Gi"}],disabled:!0}),value:C,disabled:""===i,error:S,pattern:"[0-9]*"})})]})]})}))),Ze=(0,u.$j)((function(e){return{volumeSize:e.tenants.createTenant.fields.tenantSize.volumeSize,sizeFactor:e.tenants.createTenant.fields.tenantSize.sizeFactor,drivesPerServer:e.tenants.createTenant.fields.tenantSize.drivesPerServer,nodes:e.tenants.createTenant.fields.tenantSize.nodes,memoryNode:e.tenants.createTenant.fields.tenantSize.memoryNode,ecParity:e.tenants.createTenant.fields.tenantSize.ecParity,ecParityChoices:e.tenants.createTenant.fields.tenantSize.ecParityChoices,cleanECChoices:e.tenants.createTenant.fields.tenantSize.cleanECChoices,resourcesSize:e.tenants.createTenant.fields.tenantSize.resourcesSize,distribution:e.tenants.createTenant.fields.tenantSize.distribution,ecParityCalc:e.tenants.createTenant.fields.tenantSize.ecParityCalc,limitSize:e.tenants.createTenant.limitSize,selectedStorageClass:e.tenants.createTenant.fields.nameTenant.selectedStorageClass}}),{updateAddField:j.HM,isPageValid:j.NO}),_e=(0,p.Z)((function(e){return(0,g.Z)((0,i.Z)((0,i.Z)((0,i.Z)({compositeFieldContainer:{display:"flex",alignItems:"center"},compositeAddOn:{marginLeft:10,"& div":{marginBottom:0},"@media (max-width: 900px)":{"& div":{marginTop:5}}}},f.DF),f.oO),f.AK))}))(Ze((function(e){var t=e.classes,n=e.updateAddField,r=e.isPageValid,a=e.volumeSize,i=e.sizeFactor,l=e.drivesPerServer,c=e.nodes,u=e.memoryNode,m=e.ecParity,g=e.ecParityChoices,p=e.cleanECChoices,f=e.resourcesSize,v=e.distribution,y=e.ecParityCalc,S=e.limitSize,C=e.selectedStorageClass,j=(0,o.useState)({}),Z=(0,s.Z)(j,2),_=Z[0],N=Z[1],R=(0,o.useState)(!1),z=(0,s.Z)(R,2),w=z[0],D=z[1],F=(0,o.useState)(""),E=(0,s.Z)(F,2),U=E[0],K=E[1],G=(0,o.useCallback)((function(e,t){n("tenantSize",e,t)}),[n]),q=function(e){N((0,b.h)(_,e))};return(0,o.useEffect)((function(){if(g.length>0&&""===v.error){var e=(0,x.ES)(p,v.persistentVolumes,v.pvSize,v.nodes);G("ecParityCalc",e),p.includes(m)&&""!==m||G("ecParity",e.defaultEC)}}),[m,g.length,v,p,G]),(0,o.useEffect)((function(){var e=a,t=i,n=(0,x.Pw)("12","Ti",!0),r={unit:t,value:e.toString()},s=(0,x.zg)(r,parseInt(c),parseInt(n),parseInt(l));G("distribution",s),D(!1),K("")}),[c,a,i,G,l]),(0,o.useEffect)((function(){var e=(0,x.Pw)(a,i,!0),t=(0,P.R)([{fieldKey:"nodes",required:!0,value:c,customValidation:w,customValidationMessage:U},{fieldKey:"volume_size",required:!0,value:a,customValidation:parseInt(e)<1073741824||parseInt(e)>S[C],customValidationMessage:"Volume size must be greater than 1Gi and less than ".concat((0,x.ae)(S[C],!0))},{fieldKey:"drivesps",required:!0,value:l,customValidation:parseInt(l)<1,customValidationMessage:"There must be at least one drive"}]);r("tenantSize",!("nodes"in t)&&!("volume_size"in t)&&!("drivesps"in t)&&""===v.error&&0===y.error&&""!==m),N(t)}),[c,a,i,u,v,y,f,S,C,r,w,U,l,m]),(0,o.useEffect)((function(){""===v.error&&""!==c.trim()&&0!==v.disks&&h.Z.invoke("GET","api/v1/get-parity/".concat(c,"/").concat(v.disks)).then((function(e){G("ecParityChoices",(0,ie.dv)(e)),G("cleanECChoices",e)})).catch((function(e){G("ecparityChoices",[]),r("tenantSize",!1),G("ecParity","")}))}),[v,r,G,c]),(0,k.jsxs)(o.Fragment,{children:[(0,k.jsx)(d.ZP,{item:!0,xs:12,children:(0,k.jsxs)("div",{className:t.headerElement,children:[(0,k.jsx)("h3",{className:t.h3Section,children:"Capacity"}),(0,k.jsx)("span",{className:t.descriptionText,children:"Please select the desired capacity"})]})}),""!==v.error&&(0,k.jsx)(d.ZP,{item:!0,xs:12,children:(0,k.jsx)("div",{className:t.error,children:v.error})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"nodes",name:"nodes",onChange:function(e){e.target.validity.valid&&(G("nodes",e.target.value),q("nodes"))},label:"Number of Servers",disabled:""===C,value:c,min:"4",required:!0,error:_.nodes||"",pattern:"[0-9]*"})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"drivesps",name:"drivesps",onChange:function(e){e.target.validity.valid&&(G("drivesPerServer",e.target.value),q("drivesps"))},label:"Drives per Server",value:l,disabled:""===C,min:"1",required:!0,error:_.drivesps||"",pattern:"[0-9]*"})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,children:(0,k.jsx)("div",{className:t.formFieldRow,children:(0,k.jsx)(I.Z,{type:"number",id:"volume_size",name:"volume_size",onChange:function(e){G("volumeSize",e.target.value),q("volume_size")},label:"Total Size",value:a,disabled:""===C,required:!0,error:_.volume_size||"",min:"0",overlayObject:(0,k.jsx)(T.Z,{id:"size-unit",onUnitChange:function(e){G("sizeFactor",e)},unitSelected:i,unitsList:(0,x.zQ)(["Ki","Mi"]),disabled:""===C})})})}),(0,k.jsxs)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:[(0,k.jsx)(A.Z,{id:"ec_parity",name:"ec_parity",onChange:function(e){G("ecParity",e.target.value)},label:"Erasure Code Parity",disabled:""===C,value:m,options:g}),(0,k.jsx)("span",{className:t.descriptionText,children:"Please select the desired parity. This setting will change the max usable capacity in the cluster"})]}),(0,k.jsx)(je,{})]})}))),be=n(36222),Pe=(0,u.$j)((function(e){return function(){var t=e.tenants.createTenant,n=t.fields.tenantSize,r=n.memoryNode,a=n.ecParityChoices,s=n.distribution,i=n.cleanECChoices,o=n.sizeFactor,l=n.ecParity,c=n.cpuToUse,u=n.integrationSelection,d=n.resourcesSize,m=n.drivesPerServer,g=n.maxCPUsUse,p=n.ecParityCalc;return{volumeSize:n.volumeSize,sizeFactor:o,drivesPerServer:m,nodes:n.nodes,memoryNode:r,ecParity:l,ecParityChoices:a,cleanECChoices:i,resourcesSize:d,distribution:s,ecParityCalc:p,cpuToUse:c,maxCPUsUse:g,integrationSelection:u,limitSize:t.limitSize,selectedStorageType:t.fields.nameTenant.selectedStorageType}}}),{updateAddField:j.HM,isPageValid:j.NO}),Ne=(0,p.Z)((function(e){return(0,g.Z)((0,i.Z)((0,i.Z)((0,i.Z)({compositeFieldContainer:{display:"flex",alignItems:"center"},compositeAddOn:{marginLeft:10,"& div":{marginBottom:0},"@media (max-width: 900px)":{"& div":{marginTop:5}}}},f.DF),f.oO),f.AK))}))(Pe((function(e){var t=e.classes,n=e.updateAddField,r=e.isPageValid,a=e.volumeSize,i=e.sizeFactor,l=e.drivesPerServer,u=e.nodes,m=e.memoryNode,g=e.ecParity,p=e.ecParityChoices,f=e.cleanECChoices,v=e.resourcesSize,y=e.distribution,S=e.ecParityCalc,C=e.limitSize,j=e.cpuToUse,Z=e.selectedStorageType,_=e.maxCPUsUse,N=e.formToRender,T=e.integrationSelection,R=(0,o.useState)({}),z=(0,s.Z)(R,2),w=z[0],D=z[1],F=(0,o.useCallback)((function(e,t){n("tenantSize",e,t)}),[n]),E=(0,o.useCallback)((function(e,t){n("nameTenant",e,t)}),[n]);return(0,o.useEffect)((function(){if(p.length>0&&""===y.error){var e=(0,x.ES)(f,y.persistentVolumes,y.pvSize,y.nodes);F("ecParityCalc",e),f.includes(g)&&""!==g||F("ecParity",e.defaultEC)}}),[g,p,y,f,F]),(0,o.useEffect)((function(){if(void 0!==N&&parseInt(u)>=4){var e=Ae[N];if(Object.keys(e).length>0){var t=c()(e,"configurations",[]).find((function(e){return e.typeSelection===Z}));if(t){F("integrationSelection",t),E("selectedStorageClass",t.storageClass);var n={pvSize:parseInt((0,x.Pw)(t.driveSize.driveSize,t.driveSize.sizeUnit,!0),10),nodes:parseInt(u),disks:t.drivesPerServer,persistentVolumes:t.drivesPerServer*parseInt(u),error:""};F("distribution",n),F("resourcesCPURequest",Math.max(1,t.CPU/2)),F("resourcesMemoryRequest",Math.max(2,t.memory/2))}}}}),[u,Z,N,F,E]),(0,o.useEffect)((function(){var e=(0,P.R)([{fieldKey:"nodes",required:!0,value:u,customValidation:parseInt(u)<4,customValidationMessage:"Al least 4 servers must be selected"}]);r("tenantSize",!("nodes"in e)&&""===y.error&&0===S.error&&""===v.error&&""!==g&&parseInt(u)>=4),D(e)}),[u,a,i,m,y,S,v,C,Z,j,_,r,l,g]),(0,o.useEffect)((function(){0!==T.drivesPerServer&&""!==u.trim()&&h.Z.invoke("GET","api/v1/get-parity/".concat(u,"/").concat(T.drivesPerServer)).then((function(e){F("ecParityChoices",(0,ie.dv)(e)),F("cleanECChoices",e)})).catch((function(e){F("ecparityChoices",[]),r("tenantSize",!1),F("ecParity","")}))}),[T,u,r,F]),(0,k.jsxs)(o.Fragment,{children:[(0,k.jsx)(d.ZP,{item:!0,xs:12,children:(0,k.jsxs)("div",{className:t.headerElement,children:[(0,k.jsx)("h3",{className:t.h3Section,children:"Tenant Size"}),(0,k.jsx)("span",{className:t.descriptionText,children:"Please select the desired capacity"})]})}),""!==y.error&&(0,k.jsx)(d.ZP,{item:!0,xs:12,children:(0,k.jsx)("div",{className:t.error,children:y.error})}),""!==v.error&&(0,k.jsx)(d.ZP,{item:!0,xs:12,children:(0,k.jsx)("div",{className:t.error,children:v.error})}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"nodes",name:"nodes",onChange:function(e){var t;e.target.validity.valid&&(F("nodes",e.target.value),t="nodes",D((0,b.h)(w,t)))},label:"Number of Servers",disabled:""===Z,value:u,min:"4",required:!0,error:w.nodes||"",pattern:"[0-9]*"})}),(0,k.jsxs)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:[(0,k.jsx)(A.Z,{id:"ec_parity",name:"ec_parity",onChange:function(e){F("ecParity",e.target.value)},label:"Erasure Code Parity",disabled:""===Z,value:g,options:p}),(0,k.jsx)("span",{className:t.descriptionText,children:"Please select the desired parity. This setting will change the max usable capacity in the cluster"})]})]})})));!function(e){e[e.aws=0]="aws",e[e.azure=1]="azure",e[e.gcp=2]="gcp",e[e.default=3]="default",e[e[void 0]=4]="undefined"}(a||(a={}));var Ie={"mp-mode-aws":a.aws,"mp-mode-azure":a.azure,"mp-mode-gcp":a.gcp},Ae=(r={},(0,be.Z)(r,a.aws,{variantSelectorLabel:"Storage Type",variantSelectorValues:[{label:"NVME",value:"nvme"},{label:"HDD",value:"hdd"}],configurations:[{typeSelection:"nvme",storageClass:"nvme-i3en-12xlarge",CPU:48,memory:384,driveSize:{driveSize:"7500",sizeUnit:"Gi"},drivesPerServer:4},{typeSelection:"hdd",storageClass:"hdd-d3en-12xlarge",CPU:8,memory:32,driveSize:{driveSize:"12.7",sizeUnit:"Ti"},drivesPerServer:4}],sizingComponent:(0,k.jsx)(Ne,{formToRender:a.aws})}),(0,be.Z)(r,a.azure,{variantSelectorLabel:"VM Size",variantSelectorValues:[{label:"Standard_L32s_v2",value:"Standard_L32s_v2"},{label:"Standard_L48s_v2",value:"Standard_L48s_v2"},{label:"Standard_L64s_v2",value:"Standard_L64s_v2"}],configurations:[{typeSelection:"Standard_L8s_v2",storageClass:"local-nvme",CPU:8,memory:64,driveSize:{driveSize:"1787",sizeUnit:"Gi"},drivesPerServer:1},{typeSelection:"Standard_L16s_v2",storageClass:"local-nvme",CPU:16,memory:128,driveSize:{driveSize:"1787",sizeUnit:"Gi"},drivesPerServer:2},{typeSelection:"Standard_L32s_v2",storageClass:"local-nvme",CPU:32,memory:256,driveSize:{driveSize:"1787",sizeUnit:"Gi"},drivesPerServer:4},{typeSelection:"Standard_L48s_v2",storageClass:"local-nvme",CPU:48,memory:384,driveSize:{driveSize:"1787",sizeUnit:"Gi"},drivesPerServer:6},{typeSelection:"Standard_L64s_v2",storageClass:"local-nvme",CPU:64,memory:512,driveSize:{driveSize:"1787",sizeUnit:"Gi"},drivesPerServer:8}],sizingComponent:(0,k.jsx)(Ne,{formToRender:a.azure})}),(0,be.Z)(r,a.gcp,{variantSelectorLabel:"Storage Type",variantSelectorValues:[{label:"SSD",value:"ssd"}],configurations:[{typeSelection:"ssd",storageClass:"local-ssd",CPU:32,memory:128,driveSize:{driveSize:"368",sizeUnit:"Gi"},drivesPerServer:24}],sizingComponent:(0,k.jsx)(Ne,{formToRender:a.gcp})}),(0,be.Z)(r,a.default,{}),(0,be.Z)(r,a.undefined,{}),r),Te=(0,u.$j)((function(e){return{tenantName:e.tenants.createTenant.fields.nameTenant.tenantName,namespace:e.tenants.createTenant.fields.nameTenant.namespace,selectedStorageClass:e.tenants.createTenant.fields.nameTenant.selectedStorageClass,selectedStorageType:e.tenants.createTenant.fields.nameTenant.selectedStorageType,storageClasses:e.tenants.createTenant.storageClasses}}),{setModalErrorSnackMessage:y.zb,updateAddField:j.HM,setStorageClassesList:j.wZ,setLimitSize:j.DH,isPageValid:j.NO}),ke=(0,p.Z)((function(e){return(0,g.Z)((0,i.Z)((0,i.Z)((0,i.Z)({sizePreview:{position:"fixed",marginLeft:10,background:"#FFFFFF",border:"1px solid #EAEAEA",padding:2}},f.DF),f.oO),f.AK))}))(Te((function(e){var t=e.classes,n=e.storageClasses,r=e.tenantName,i=e.namespace,l=e.selectedStorageClass,u=e.selectedStorageType,m=e.formToRender,g=void 0===m?a.default:m,p=e.updateAddField,f=e.setStorageClassesList,x=e.setLimitSize,v=e.isPageValid,y=e.setModalErrorSnackMessage,S=(0,o.useState)({}),C=(0,s.Z)(S,2),j=C[0],Z=C[1],N=(0,o.useState)(!0),T=(0,s.Z)(N,2),R=T[0],z=T[1],w=(0,o.useState)(!1),D=(0,s.Z)(w,2),F=D[0],E=D[1],U=(0,o.useState)(!1),K=(0,s.Z)(U,2),G=K[0],q=K[1],L=(0,o.useState)(!1),M=(0,s.Z)(L,2),V=M[0],B=M[1],$=(0,o.useCallback)((function(e,t){p("nameTenant",e,t)}),[p]),W=(0,o.useCallback)((function(){q(!1),h.Z.invoke("GET","/api/v1/namespaces/".concat(i,"/tenants")).then((function(e){var t=c()(e,"tenants",[]);if(t&&t.length>0)return z(!1),void E(!1);z(!0),h.Z.invoke("GET","/api/v1/namespaces/".concat(i,"/resourcequotas/").concat(i,"-storagequota")).then((function(e){var t=c()(e,"elements",[]);x((0,ie.OU)(e));var n=t.map((function(e){var t=c()(e,"name","").split(".storageclass.storage.k8s.io/requests.storage")[0];return{label:t,value:t}}));f(n);var r=n.findIndex((function(e){return e.value===l}));n.length>0&&-1===r?$("selectedStorageClass",n[0].value):0===n.length&&($("selectedStorageClass",""),f([])),E(!1)})).catch((function(e){E(!1),q(!0),$("selectedStorageClass",""),f([]),console.error("Namespace error: ",e)}))})).catch((function(e){y({errorMessage:"Error validating if namespace already has tenants",detailedError:e.detailedError})}))}),[i,x,y,f,$,l]),H=(0,o.useMemo)((function(){return se()(W,500)}),[W]);(0,o.useEffect)((function(){if(""!==i)return H(),E(!0),H.cancel}),[H,i]),(0,o.useEffect)((function(){var e=!1,t="";R||F?n.length<1&&R&&!F&&(e=!0,t="Please enter a valid namespace"):(e=!0,t="You can only create one tenant per namespace");var s=(0,P.R)([{fieldKey:"tenant-name",required:!0,pattern:/^[a-z0-9-]{3,63}$/,customPatternMessage:"Name only can contain lowercase letters, numbers and '-'. Min. Length: 3",value:r},{fieldKey:"namespace",required:!0,value:i,customValidation:e,customValidationMessage:t}]),o=!("tenant-name"in s)&&!("namespace"in s)&&(g===a.default&&n.length>0||g!==a.default&&""!==u);v("nameTenant",o),Z(s)}),[n,i,r,v,R,F,u,g]);var Y=function(e){Z((0,b.h)(j,e))};return(0,k.jsxs)(o.Fragment,{children:[V&&(0,k.jsx)(me,{addNamespaceOpen:V,closeAddNamespaceModalAndRefresh:function(e){B(!1),e&&H()},namespace:i}),(0,k.jsxs)(d.ZP,{container:!0,children:[(0,k.jsx)(d.ZP,{item:!0,xs:8,md:9,children:(0,k.jsx)(_.Z,{className:t.paperWrapper,sx:{minHeight:550},children:(0,k.jsxs)(d.ZP,{container:!0,children:[(0,k.jsxs)(d.ZP,{item:!0,xs:12,children:[(0,k.jsxs)("div",{className:t.headerElement,children:[(0,k.jsx)("h3",{className:t.h3Section,children:"Name"}),(0,k.jsx)("span",{className:t.descriptionText,children:"How would you like to name this new tenant?"})]}),(0,k.jsx)("div",{className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"tenant-name",name:"tenant-name",onChange:function(e){$("tenantName",e.target.value),Y("tenant-name")},label:"Name",value:r,required:!0,error:j["tenant-name"]||""})})]}),(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(I.Z,{id:"namespace",name:"namespace",onChange:function(e){$("namespace",e.target.value),Y("namespace")},label:"Namespace",value:i,error:j.namespace||"",overlayIcon:G?(0,k.jsx)(O.Z,{}):null,overlayAction:function(){B(!0)},required:!0})}),g===a.default?(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(A.Z,{id:"storage_class",name:"storage_class",onChange:function(e){$("selectedStorageClass",e.target.value)},label:"Storage Class",value:l,options:n,disabled:n.length<1})}):(0,k.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,k.jsx)(A.Z,{id:"storage_type",name:"storage_type",onChange:function(e){$("selectedStorageType",e.target.value)},label:c()(Ae,"".concat(g,".variantSelectorLabel"),"Storage Type"),value:u,options:c()(Ae,"".concat(g,".variantSelectorValues"),[])})}),g===a.default?(0,k.jsx)(_e,{}):c()(Ae,"".concat(g,".sizingComponent"),null)]})})}),(0,k.jsx)(d.ZP,{item:!0,xs:4,md:3,children:(0,k.jsx)("div",{className:t.sizePreview,children:(0,k.jsx)(ye,{})})})]})]})}))),Re=(0,u.$j)((function(e){return{features:e.console.session.features}}),null)((function(e){var t=e.features,n=(0,o.useState)(null),r=(0,s.Z)(n,2),i=r[0],l=r[1];return(0,o.useEffect)((function(){var e=a.default;t&&0!==t.length&&Object.keys(Ie).forEach((function(n){t.includes(n)&&(e=c()(Ie,n,a.default))}));l(e)}),[t]),null===i?null:(0,k.jsx)(ke,{formToRender:i})})),ze=(0,u.$j)((function(e){return{namespace:e.tenants.createTenant.fields.nameTenant.namespace,validPages:e.tenants.createTenant.validPages,fields:e.tenants.createTenant.fields,certificates:e.tenants.createTenant.certificates,selectedStorageClass:e.tenants.createTenant.fields.nameTenant.selectedStorageClass}}),{setErrorSnackMessage:y.Ih,updateAddField:j.HM,resetAddTenantForm:j.dS}),we=(0,p.Z)((function(e){return(0,g.Z)((0,i.Z)((0,i.Z)((0,i.Z)({pageBox:{border:"1px solid #EAEAEA"}},f.oO),f.AK),f.Je))}))(ze((function(e){var t=e.classes,n=e.fields,r=e.certificates,a=e.selectedStorageClass,l=e.namespace,u=e.validPages,g=e.setErrorSnackMessage,p=e.resetAddTenantForm,f=(0,o.useState)(!1),y=(0,s.Z)(f,2),j=y[0],Z=y[1],_=(0,o.useState)(null),b=(0,s.Z)(_,2),P=b[0],N=b[1],I=(0,o.useState)(!1),A=(0,s.Z)(I,2),T=A[0],R=A[1];(0,o.useEffect)((function(){var e=n.nameTenant.tenantName,t=n.nameTenant.selectedStorageClass,a=n.configure.imageName,s=n.configure.customDockerhub,o=n.configure.imageRegistry,u=n.configure.imageRegistryUsername,d=n.configure.imageRegistryPassword,m=n.configure.exposeMinIO,p=n.configure.exposeConsole,f=n.identityProvider.idpSelection,v=n.identityProvider.openIDConfigurationURL,y=n.identityProvider.openIDClientID,C=n.identityProvider.openIDClaimName,j=n.identityProvider.openIDCallbackURL,_=n.identityProvider.openIDScopes,b=n.identityProvider.openIDSecretID,P=n.identityProvider.ADURL,I=n.identityProvider.ADSkipTLS,A=n.identityProvider.ADServerInsecure,k=n.identityProvider.ADUserNameSearchFilter,z=n.identityProvider.ADGroupSearchBaseDN,w=n.identityProvider.ADGroupSearchFilter,D=n.identityProvider.ADGroupNameAttribute,F=n.identityProvider.ADUserDNs,E=n.identityProvider.ADUserNameFormat,U=n.identityProvider.ADLookupBindDN,K=n.identityProvider.ADLookupBindPassword,G=n.identityProvider.ADUserDNSearchBaseDN,q=n.identityProvider.ADUserDNSearchFilter,L=n.identityProvider.ADServerStartTLS,M=n.identityProvider.accessKeys,V=n.identityProvider.secretKeys,O=r.minioCertificates,B=r.caCertificates,$=r.consoleCaCertificates,W=r.consoleCertificate,H=r.serverCertificate,Y=r.clientCertificate,Q=r.vaultCertificate,X=r.vaultCA,J=r.gemaltoCA,ee=n.encryption.enableEncryption,te=n.encryption.encryptionType,ne=n.encryption.gemaltoEndpoint,re=n.encryption.gemaltoToken,ae=n.encryption.gemaltoDomain,se=n.encryption.gemaltoRetry,ie=n.encryption.awsEndpoint,oe=n.encryption.awsRegion,le=n.encryption.awsKMSKey,ce=n.encryption.awsAccessKey,ue=n.encryption.awsSecretKey,de=n.encryption.awsToken,me=n.encryption.vaultEndpoint,ge=n.encryption.vaultEngine,pe=n.encryption.vaultNamespace,fe=n.encryption.vaultPrefix,he=n.encryption.vaultAppRoleEngine,xe=n.encryption.vaultId,ve=n.encryption.vaultSecret,ye=n.encryption.vaultRetry,Se=n.encryption.vaultPing,Ce=n.encryption.azureEndpoint,je=n.encryption.azureTenantID,Ze=n.encryption.azureClientID,_e=n.encryption.azureClientSecret,be=n.encryption.gcpProjectID,Pe=n.encryption.gcpEndpoint,Ne=n.encryption.gcpClientEmail,Ie=n.encryption.gcpClientID,Ae=n.encryption.gcpPrivateKeyID,Te=n.encryption.gcpPrivateKey,ke=n.security.enableAutoCert,Re=n.security.enableTLS,ze=n.tenantSize.ecParity,we=n.tenantSize.distribution,De=n.configure.tenantCustom,Fe=n.configure.logSearchCustom,Ee=n.configure.prometheusCustom,Ue=n.configure.logSearchVolumeSize,Ke=n.configure.logSearchSelectedStorageClass,Ge=n.configure.logSearchImage,qe=n.configure.kesImage,Le=n.configure.logSearchPostgresImage,Me=n.configure.logSearchPostgresInitImage,Ve=n.configure.prometheusImage,Oe=n.configure.prometheusSidecarImage,Be=n.configure.prometheusInitImage,$e=n.configure.prometheusSelectedStorageClass,We=n.configure.prometheusVolumeSize,He=n.affinity.podAffinity,Ye=n.affinity.nodeSelectorLabels,Qe=n.affinity.withPodAntiAffinity,Xe=n.configure.tenantSecurityContext,Je=n.configure.logSearchSecurityContext,et=n.configure.logSearchPostgresSecurityContext,tt=n.configure.prometheusSecurityContext,nt=n.encryption.kesSecurityContext,rt=n.encryption.replicas;if(T){var at=(0,x.en)([]),st={};switch(He){case"default":st={affinity:(0,S.P)(e,at)};break;case"nodeSelector":st={affinity:(0,S.q)(Ye,Qe,e,at)}}var it=ze.split(":")[1],ot={name:e,namespace:l,access_key:"",secret_key:"",access_keys:[],secret_keys:[],enable_tls:Re&&ke,enable_console:!0,enable_prometheus:!0,service_name:"",image:a,expose_minio:m,expose_console:p,pools:[(0,i.Z)({name:at,servers:we.nodes,volumes_per_server:we.disks,volume_configuration:{size:we.pvSize,storage_class_name:t},securityContext:De?Xe:null},st)],erasureCodingParity:parseInt(it,10)};""===n.tenantSize.resourcesCPURequest&&""===n.tenantSize.resourcesCPULimit&&""===n.tenantSize.resourcesMemoryRequest&&""===n.tenantSize.resourcesMemoryLimit||(ot.pools[0].resources={},""===n.tenantSize.resourcesCPURequest&&""===n.tenantSize.resourcesMemoryRequest||(ot.pools[0].resources.requests={},""!==n.tenantSize.resourcesCPURequest&&(ot.pools[0].resources.requests.cpu=parseInt(n.tenantSize.resourcesCPURequest)),""!==n.tenantSize.resourcesMemoryRequest&&(ot.pools[0].resources.requests.memory=parseInt((0,x.Pw)(n.tenantSize.resourcesMemoryRequest,"Gi",!0)))),""===n.tenantSize.resourcesCPULimit&&""===n.tenantSize.resourcesMemoryLimit||(ot.pools[0].resources.limits={},""!==n.tenantSize.resourcesCPULimit&&(ot.pools[0].resources.limits.cpu=parseInt(n.tenantSize.resourcesCPULimit)),""!==n.tenantSize.resourcesMemoryLimit&&(ot.pools[0].resources.limits.memory=parseInt((0,x.Pw)(n.tenantSize.resourcesMemoryLimit,"Gi",!0))))),s&&(ot=(0,i.Z)((0,i.Z)({},ot),{},{image_registry:{registry:o,username:u,password:d}})),ot=Fe?(0,i.Z)((0,i.Z)({},ot),{},{logSearchConfiguration:{storageClass:"default"===Ke?"":Ke,storageSize:parseInt(Ue),image:Ge,postgres_image:Le,postgres_init_image:Me,securityContext:Je,postgres_securityContext:et}}):(0,i.Z)((0,i.Z)({},ot),{},{logSearchConfiguration:{image:Ge,postgres_image:Le,postgres_init_image:Me}}),ot=Ee?(0,i.Z)((0,i.Z)({},ot),{},{prometheusConfiguration:{storageClass:"default"===$e?"":$e,storageSize:parseInt(We),image:Ve,sidecar_image:Oe,init_image:Be,securityContext:tt}}):(0,i.Z)((0,i.Z)({},ot),{},{prometheusConfiguration:{image:Ve,sidecar_image:Oe,init_image:Be}});var lt=null,ct=null,ut=null,dt=null;if(B.length>0&&(ut={ca_certificates:B.map((function(e){return e.encoded_cert})).filter((function(e){return e}))}),$.length>0&&(dt={console_ca_certificates:$.map((function(e){return e.encoded_cert})).filter((function(e){return e}))}),Re&&O.length>0&&(lt={minio:O.map((function(e){return{crt:e.encoded_cert,key:e.encoded_key}})).filter((function(e){return e.crt&&e.key}))}),Re&&""!==W.encoded_cert&&""!==W.encoded_key&&(ct={console:{crt:W.encoded_cert,key:W.encoded_key}}),(lt||ct||ut||dt)&&(ot=(0,i.Z)((0,i.Z)({},ot),{},{tls:(0,i.Z)((0,i.Z)((0,i.Z)((0,i.Z)({},lt),ct),ut),dt)})),ee){var mt={};switch(te){case"gemalto":var gt={};""!==J.encoded_cert&&(gt={ca:J.encoded_cert}),mt={gemalto:{keysecure:{endpoint:ne,credentials:{token:re,domain:ae,retry:parseInt(se)},tls:(0,i.Z)({},gt)}}};break;case"aws":mt={aws:{secretsmanager:{endpoint:ie,region:oe,kmskey:le,credentials:{accesskey:ce,secretkey:ue,token:de}}}};break;case"azure":mt={azure:{keyvault:{endpoint:Ce,credentials:{tenant_id:je,client_id:Ze,client_secret:_e}}}};break;case"gcp":mt={gcp:{secretmanager:{project_id:be,endpoint:Pe,credentials:{client_email:Ne,client_id:Ie,private_key_id:Ae,private_key:Te}}}};break;case"vault":var pt=null,ft=null;""!==Q.encoded_key&&""!==Q.encoded_cert&&(pt={key:Q.encoded_key,crt:Q.encoded_cert}),""!==X.encoded_cert&&(ft={ca:X.encoded_cert});var ht=null;(pt||X)&&(ht={tls:(0,i.Z)((0,i.Z)({},pt),ft)}),mt={vault:(0,i.Z)((0,i.Z)({endpoint:me,engine:ge,namespace:pe,prefix:fe,approle:{engine:he,id:xe,secret:ve,retry:parseInt(ye)}},ht),{},{status:{ping:parseInt(Se)}})}}var xt={},vt={};""!==Y.encoded_key&&""!==Y.encoded_cert&&(vt={client:{key:Y.encoded_key,crt:Y.encoded_cert}}),""!==H.encoded_key&&""!==H.encoded_cert&&(xt={server:{key:H.encoded_key,crt:H.encoded_cert}}),ot=(0,i.Z)((0,i.Z)({},ot),{},{encryption:(0,i.Z)((0,i.Z)((0,i.Z)({replicas:rt,securityContext:nt,image:qe},vt),xt),mt)})}var yt={};switch(f){case"Built-in":for(var St=[],Ct=0;Ct.\n\nimport React from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { BackSettingsIcon } from \"../icons\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n link: {\n display: \"flex\",\n alignItems: \"center\",\n textDecoration: \"none\",\n maxWidth: \"300px\",\n padding: \"2rem 2rem 0rem 2rem\",\n color: theme.palette.primary.light,\n fontSize: \".8rem\",\n \"&:hover\": {\n textDecoration: \"underline\",\n },\n },\n icon: {\n marginRight: \".3rem\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n \"& svg.min-icon\": {\n width: 12,\n },\n },\n });\n\ninterface IBackLink {\n classes: any;\n to: string;\n label: string;\n className?: any;\n executeOnClick?: () => void;\n}\n\nconst BackLink = ({\n to,\n label,\n classes,\n className,\n executeOnClick,\n}: IBackLink) => {\n return (\n {\n if (executeOnClick) {\n executeOnClick();\n }\n }}\n >\n
\n \n
\n
{label}
\n \n );\n};\n\nexport default withStyles(styles)(BackLink);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { InputAdornment, OutlinedInput } from \"@mui/material\";\nimport BoxIconButton from \"../BoxIconButton/BoxIconButton\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport CopyToClipboard from \"react-copy-to-clipboard\";\nimport { CopyIcon } from \"../../../../icons\";\nimport { fieldBasic } from \"../FormComponents/common/styleLibrary\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n container: {\n display: \"flex\",\n flexFlow: \"column\",\n padding: \"20px 0 8px 0\",\n },\n inputWithCopy: {\n \"& .MuiInputBase-root \": {\n width: \"100%\",\n background: \"#FBFAFA\",\n \"& .MuiInputBase-input\": {\n height: \".8rem\",\n },\n \"& .MuiInputAdornment-positionEnd\": {\n marginRight: \".5rem\",\n \"& .MuiButtonBase-root\": {\n height: \"2rem\",\n },\n },\n },\n \"& .MuiButtonBase-root .min-icon\": {\n width: \".8rem\",\n height: \".8rem\",\n },\n },\n inputLabel: {\n ...fieldBasic.inputLabel,\n fontSize: \".8rem\",\n },\n });\n\nconst CredentialItem = ({\n label = \"\",\n value = \"\",\n classes = {},\n}: {\n label: string;\n value: string;\n classes: any;\n}) => {\n return (\n
\n
{label}:
\n
\n \n \n {}}\n onMouseDown={() => {}}\n edge=\"end\"\n >\n \n \n \n \n }\n />\n
\n
\n );\n};\n\nexport default withStyles(styles)(CredentialItem);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport get from \"lodash/get\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { NewServiceAccount } from \"./types\";\nimport { Button } from \"@mui/material\";\nimport ModalWrapper from \"../ModalWrapper/ModalWrapper\";\nimport Grid from \"@mui/material/Grid\";\nimport CredentialItem from \"./CredentialItem\";\nimport WarnIcon from \"../../../../icons/WarnIcon\";\nimport { DownloadIcon, ServiceAccountCredentialsIcon } from \"../../../../icons\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n warningBlock: {\n color: \"red\",\n fontSize: \".85rem\",\n margin: \".5rem 0 .5rem 0\",\n display: \"flex\",\n alignItems: \"center\",\n \"& svg \": {\n marginRight: \".3rem\",\n height: 16,\n width: 16,\n },\n },\n credentialTitle: {\n padding: \".8rem 0 0 0\",\n fontWeight: 600,\n fontSize: \".9rem\",\n },\n buttonContainer: {\n textAlign: \"right\",\n marginTop: \"1rem\",\n },\n credentialsPanel: {\n overflowY: \"auto\",\n maxHeight: 350,\n },\n promptTitle: {\n display: \"flex\",\n alignItems: \"center\",\n },\n buttonSpacer: {\n marginRight: \".9rem\",\n },\n promptIcon: {\n marginRight: \".1rem\",\n display: \"flex\",\n alignItems: \"center\",\n height: \"2rem\",\n width: \"2rem\",\n },\n });\n\ninterface ICredentialsPromptProps {\n classes: any;\n newServiceAccount: NewServiceAccount | null;\n open: boolean;\n entity: string;\n closeModal: () => void;\n}\n\nconst download = (filename: string, text: string) => {\n let element = document.createElement(\"a\");\n element.setAttribute(\n \"href\",\n \"data:text/plain;charset=utf-8,\" + encodeURIComponent(text)\n );\n element.setAttribute(\"download\", filename);\n\n element.style.display = \"none\";\n document.body.appendChild(element);\n\n element.click();\n document.body.removeChild(element);\n};\n\nconst CredentialsPrompt = ({\n classes,\n newServiceAccount,\n open,\n closeModal,\n entity,\n}: ICredentialsPromptProps) => {\n if (!newServiceAccount) {\n return null;\n }\n const consoleCreds = get(newServiceAccount, \"console\", null);\n const idp = get(newServiceAccount, \"idp\", false);\n\n return (\n {\n closeModal();\n }}\n title={\n
\n
New {entity} Created
\n
\n }\n titleIcon={}\n >\n \n \n A new {entity} has been created with the following details:\n {!idp && consoleCreds && (\n \n \n
\n Console Credentials\n
\n {Array.isArray(consoleCreds) &&\n consoleCreds.map((credentialsPair, index) => {\n return (\n <>\n \n \n \n );\n })}\n {!Array.isArray(consoleCreds) && (\n <>\n \n \n \n )}\n
\n
\n )}\n {idp ? (\n
\n Please Login via the configured external identity provider.\n
\n ) : (\n
\n \n \n Write these down, as this is the only time the secret will be\n displayed.\n \n
\n )}\n
\n \n {\n closeModal();\n }}\n color=\"primary\"\n >\n Done\n \n\n {!idp && (\n {\n let consoleExtras = {};\n\n if (consoleCreds) {\n if (!Array.isArray(consoleCreds)) {\n consoleExtras = {\n console: [\n {\n url: consoleCreds.url,\n access_key: consoleCreds.accessKey,\n secret_key: consoleCreds.secretKey,\n api: \"s3v4\",\n path: \"auto\",\n },\n ],\n };\n } else {\n const cCreds = consoleCreds.map((itemMap) => {\n return {\n url: itemMap.url,\n access_key: itemMap.accessKey,\n secret_key: itemMap.secretKey,\n api: \"s3v4\",\n path: \"auto\",\n };\n });\n\n consoleExtras = {\n console: [...cCreds],\n };\n }\n }\n\n download(\n \"credentials.json\",\n JSON.stringify({\n ...consoleExtras,\n })\n );\n }}\n endIcon={}\n variant=\"contained\"\n color=\"primary\"\n >\n Download\n \n )}\n \n
\n \n );\n};\n\nexport default withStyles(styles)(CredentialsPrompt);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport get from \"lodash/get\";\nimport { Grid, InputLabel, Tooltip } from \"@mui/material\";\nimport IconButton from \"@mui/material/IconButton\";\nimport AttachFileIcon from \"@mui/icons-material/AttachFile\";\nimport CancelIcon from \"@mui/icons-material/Cancel\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n fieldBasic,\n fileInputStyles,\n tooltipHelper,\n} from \"../common/styleLibrary\";\nimport { fileProcess } from \"./utils\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\nimport ErrorBlock from \"../../../../shared/ErrorBlock\";\n\ninterface InputBoxProps {\n label: string;\n classes: any;\n onChange: (e: string, i: string) => void;\n id: string;\n name: string;\n disabled?: boolean;\n tooltip?: string;\n required?: boolean;\n error?: string;\n accept?: string;\n value?: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n valueString: {\n maxWidth: 350,\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n marginTop: 2,\n },\n fileInputField: {\n margin: \"13px 0\",\n \"@media (max-width: 900px)\": {\n flexFlow: \"column\",\n },\n },\n ...fileInputStyles,\n inputLabel: {\n ...fieldBasic.inputLabel,\n fontWeight: \"normal\",\n },\n textBoxContainer: {\n ...fieldBasic.textBoxContainer,\n maxWidth: \"100%\",\n border: \"1px solid #eaeaea\",\n paddingLeft: \"15px\",\n },\n });\n\nconst FileSelector = ({\n label,\n classes,\n onChange,\n id,\n name,\n disabled = false,\n tooltip = \"\",\n required,\n error = \"\",\n accept = \"\",\n value = \"\",\n}: InputBoxProps) => {\n const [showFileSelector, setShowSelector] = useState(false);\n\n return (\n \n \n {label !== \"\" && (\n \n \n {label}\n {required ? \"*\" : \"\"}\n \n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n \n )}\n\n {showFileSelector || value === \"\" ? (\n
\n {\n const fileName = get(e, \"target.files[0].name\", \"\");\n fileProcess(e, (data: any) => {\n onChange(data, fileName);\n });\n }}\n accept={accept}\n required={required}\n disabled={disabled}\n className={classes.fileInputField}\n />\n\n {value !== \"\" && (\n {\n setShowSelector(false);\n }}\n disableRipple={false}\n disableFocusRipple={false}\n size=\"small\"\n >\n \n \n )}\n\n {error !== \"\" && }\n
\n ) : (\n
\n
{value}
\n {\n setShowSelector(true);\n }}\n disableRipple={false}\n disableFocusRipple={false}\n size=\"small\"\n >\n \n \n
\n )}\n \n
\n );\n};\n\nexport default withStyles(styles)(FileSelector);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nexport const fileProcess = (evt: any, callback: any) => {\n const file = evt.target.files[0];\n const reader = new FileReader();\n reader.readAsDataURL(file);\n\n reader.onload = () => {\n // reader.readAsDataURL(file) output will be something like: data:application/x-x509-ca-cert;base64,LS0tLS1CRUdJTiBDRVJUSU\n // we care only about the actual base64 part (everything after \"data:application/x-x509-ca-cert;base64,\")\n const fileBase64 = reader.result;\n if (fileBase64) {\n const fileArray = fileBase64.toString().split(\"base64,\");\n\n if (fileArray.length === 2) {\n callback(fileArray[1]);\n }\n }\n };\n};\n","import React from \"react\";\nimport { Grid } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { pageContentStyles } from \"../FormComponents/common/styleLibrary\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...pageContentStyles,\n });\n\ntype PageLayoutProps = {\n className?: string;\n classes?: any;\n children: any;\n};\n\nconst PageLayout = ({ classes, className = \"\", children }: PageLayoutProps) => {\n return (\n
\n \n \n {children}\n \n \n
\n );\n};\n\nexport default withStyles(styles)(PageLayout);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { Opts } from \"../../../ListTenants/utils\";\nimport TenantSizeMK from \"./TenantSizeMK\";\n\nexport enum IMkEnvs {\n \"aws\",\n \"azure\",\n \"gcp\",\n \"default\",\n undefined,\n}\n\nexport interface IDriveSizing {\n driveSize: string;\n sizeUnit: string;\n}\n\nexport interface IntegrationConfiguration {\n typeSelection: string;\n storageClass: string;\n CPU: number;\n memory: number;\n drivesPerServer: number;\n driveSize: IDriveSizing;\n}\n\nexport const AWSStorageTypes: Opts[] = [\n { label: \"NVME\", value: \"nvme\" },\n { label: \"HDD\", value: \"hdd\" },\n];\n\nexport const AzureStorageTypes: Opts[] = [\n { label: \"Standard_L32s_v2\", value: \"Standard_L32s_v2\" },\n { label: \"Standard_L48s_v2\", value: \"Standard_L48s_v2\" },\n { label: \"Standard_L64s_v2\", value: \"Standard_L64s_v2\" },\n];\n\nexport const resourcesConfigurations = {\n \"mp-mode-aws\": IMkEnvs.aws,\n \"mp-mode-azure\": IMkEnvs.azure,\n \"mp-mode-gcp\": IMkEnvs.gcp,\n};\n\nexport const AWSConfigurations: IntegrationConfiguration[] = [\n {\n typeSelection: \"nvme\",\n storageClass: \"nvme-i3en-12xlarge\",\n CPU: 48,\n memory: 384,\n driveSize: { driveSize: \"7500\", sizeUnit: \"Gi\" },\n drivesPerServer: 4,\n },\n {\n typeSelection: \"hdd\",\n storageClass: \"hdd-d3en-12xlarge\",\n CPU: 8,\n memory: 32,\n driveSize: { driveSize: \"12.7\", sizeUnit: \"Ti\" },\n drivesPerServer: 4,\n },\n];\n\nexport const AzureConfigurations: IntegrationConfiguration[] = [\n {\n typeSelection: \"Standard_L8s_v2\",\n storageClass: \"local-nvme\",\n CPU: 8,\n memory: 64,\n driveSize: { driveSize: \"1787\", sizeUnit: \"Gi\" },\n drivesPerServer: 1,\n },\n {\n typeSelection: \"Standard_L16s_v2\",\n storageClass: \"local-nvme\",\n CPU: 16,\n memory: 128,\n driveSize: { driveSize: \"1787\", sizeUnit: \"Gi\" },\n drivesPerServer: 2,\n },\n {\n typeSelection: \"Standard_L32s_v2\",\n storageClass: \"local-nvme\",\n CPU: 32,\n memory: 256,\n driveSize: { driveSize: \"1787\", sizeUnit: \"Gi\" },\n drivesPerServer: 4,\n },\n {\n typeSelection: \"Standard_L48s_v2\",\n storageClass: \"local-nvme\",\n CPU: 48,\n memory: 384,\n driveSize: { driveSize: \"1787\", sizeUnit: \"Gi\" },\n drivesPerServer: 6,\n },\n {\n typeSelection: \"Standard_L64s_v2\",\n storageClass: \"local-nvme\",\n CPU: 64,\n memory: 512,\n driveSize: { driveSize: \"1787\", sizeUnit: \"Gi\" },\n drivesPerServer: 8,\n },\n];\n\nexport const GCPStorageTypes: Opts[] = [{ label: \"SSD\", value: \"ssd\" }];\n\nexport const GCPConfigurations: IntegrationConfiguration[] = [\n {\n typeSelection: \"ssd\",\n storageClass: \"local-ssd\",\n CPU: 32,\n memory: 128,\n driveSize: { driveSize: \"368\", sizeUnit: \"Gi\" },\n drivesPerServer: 24,\n },\n];\n\nexport const mkPanelConfigurations = {\n [IMkEnvs.aws]: {\n variantSelectorLabel: \"Storage Type\",\n variantSelectorValues: AWSStorageTypes,\n configurations: AWSConfigurations,\n sizingComponent: ,\n },\n [IMkEnvs.azure]: {\n variantSelectorLabel: \"VM Size\",\n variantSelectorValues: AzureStorageTypes,\n configurations: AzureConfigurations,\n sizingComponent: ,\n },\n [IMkEnvs.gcp]: {\n variantSelectorLabel: \"Storage Type\",\n variantSelectorValues: GCPStorageTypes,\n configurations: GCPConfigurations,\n sizingComponent: ,\n },\n [IMkEnvs.default]: {},\n [IMkEnvs.undefined]: {},\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Grid, Paper, SelectChangeEvent } from \"@mui/material\";\nimport {\n createTenantCommon,\n modalBasic,\n wizardCommon,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\nimport { isPageValid, updateAddField } from \"../../actions\";\nimport { AppState } from \"../../../../../store\";\nimport { clearValidationError } from \"../../utils\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../utils/validationFunctions\";\nimport FormSwitchWrapper from \"../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport InputBoxWrapper from \"../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport SelectWrapper from \"../../../Common/FormComponents/SelectWrapper/SelectWrapper\";\nimport { ISecurityContext } from \"../../types\";\nimport InputUnitMenu from \"../../../Common/FormComponents/InputUnitMenu/InputUnitMenu\";\n\ninterface IConfigureProps {\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n storageClasses: any;\n classes: any;\n customImage: boolean;\n imageName: string;\n customDockerhub: boolean;\n imageRegistry: string;\n imageRegistryUsername: string;\n imageRegistryPassword: string;\n exposeMinIO: boolean;\n exposeConsole: boolean;\n prometheusCustom: boolean;\n tenantCustom: boolean;\n logSearchCustom: boolean;\n logSearchVolumeSize: string;\n logSearchSizeFactor: string;\n prometheusVolumeSize: string;\n prometheusSizeFactor: string;\n logSearchSelectedStorageClass: string;\n logSearchImage: string;\n kesImage: string;\n logSearchPostgresImage: string;\n logSearchPostgresInitImage: string;\n prometheusSelectedStorageClass: string;\n prometheusImage: string;\n prometheusSidecarImage: string;\n prometheusInitImage: string;\n selectedStorageClass: string;\n tenantSecurityContext: ISecurityContext;\n logSearchSecurityContext: ISecurityContext;\n logSearchPostgresSecurityContext: ISecurityContext;\n prometheusSecurityContext: ISecurityContext;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n configSectionItem: {\n marginRight: 15,\n\n \"& .multiContainer\": {\n border: \"1px solid red\",\n },\n },\n tenantCustomizationFields: {\n marginLeft: 30, // 2nd Level(15+15)\n width: \"88%\",\n margin: \"auto\",\n },\n containerItem: {\n marginRight: 15,\n },\n fieldGroup: {\n ...createTenantCommon.fieldGroup,\n paddingTop: 15,\n marginBottom: 25,\n },\n responsiveSectionItem: {\n \"@media (max-width: 900px)\": {\n flexFlow: \"column\",\n alignItems: \"flex-start\",\n\n \"& div > div\": {\n marginBottom: 5,\n marginRight: 0,\n },\n },\n },\n\n logSearchCustomFields: {\n marginLeft: 20, // 2nd Level(15+15)\n padding: 10,\n width: \"90%\",\n margin: \"auto\",\n },\n fieldSpaceTop: {\n marginTop: 15,\n },\n prometheusCustomFields: {\n marginLeft: 20, // 2nd Level(15+15)\n padding: 10,\n width: \"90%\",\n margin: \"auto\",\n },\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst Configure = ({\n classes,\n storageClasses,\n customImage,\n imageName,\n customDockerhub,\n imageRegistry,\n imageRegistryUsername,\n imageRegistryPassword,\n exposeMinIO,\n exposeConsole,\n prometheusCustom,\n tenantCustom,\n logSearchCustom,\n logSearchVolumeSize,\n logSearchSizeFactor,\n logSearchImage,\n kesImage,\n logSearchPostgresImage,\n logSearchPostgresInitImage,\n prometheusVolumeSize,\n prometheusSizeFactor,\n logSearchSelectedStorageClass,\n prometheusSelectedStorageClass,\n prometheusImage,\n prometheusSidecarImage,\n prometheusInitImage,\n updateAddField,\n isPageValid,\n selectedStorageClass,\n tenantSecurityContext,\n logSearchSecurityContext,\n logSearchPostgresSecurityContext,\n prometheusSecurityContext,\n}: IConfigureProps) => {\n const [validationErrors, setValidationErrors] = useState({});\n\n const configureSTClasses = [\n { label: \"Default\", value: \"default\" },\n ...storageClasses,\n ];\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n updateAddField(\"configure\", field, value);\n },\n [updateAddField]\n );\n\n // Validation\n useEffect(() => {\n let customAccountValidation: IValidation[] = [];\n if (tenantCustom) {\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"tenant_securityContext_runAsUser\",\n required: true,\n value: tenantSecurityContext.runAsUser,\n customValidation:\n tenantSecurityContext.runAsUser === \"\" ||\n parseInt(tenantSecurityContext.runAsUser) < 0,\n customValidationMessage: `runAsUser must be present and be 0 or more`,\n },\n {\n fieldKey: \"tenant_securityContext_runAsGroup\",\n required: true,\n value: tenantSecurityContext.runAsGroup,\n customValidation:\n tenantSecurityContext.runAsGroup === \"\" ||\n parseInt(tenantSecurityContext.runAsGroup) < 0,\n customValidationMessage: `runAsGroup must be present and be 0 or more`,\n },\n {\n fieldKey: \"tenant_securityContext_fsGroup\",\n required: true,\n value: tenantSecurityContext.fsGroup,\n customValidation:\n tenantSecurityContext.fsGroup === \"\" ||\n parseInt(tenantSecurityContext.fsGroup) < 0,\n customValidationMessage: `fsGroup must be present and be 0 or more`,\n },\n ];\n }\n if (prometheusCustom) {\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"prometheus_storage_class\",\n required: true,\n value: prometheusSelectedStorageClass,\n customValidation: prometheusSelectedStorageClass === \"\",\n customValidationMessage: \"Field cannot be empty\",\n },\n {\n fieldKey: \"prometheus_volume_size\",\n required: true,\n value: prometheusVolumeSize,\n customValidation:\n prometheusVolumeSize === \"\" || parseInt(prometheusVolumeSize) <= 0,\n customValidationMessage: `Volume size must be present and be greater than 0`,\n },\n {\n fieldKey: \"prometheus_securityContext_runAsUser\",\n required: true,\n value: prometheusSecurityContext.runAsUser,\n customValidation:\n prometheusSecurityContext.runAsUser === \"\" ||\n parseInt(prometheusSecurityContext.runAsUser) < 0,\n customValidationMessage: `runAsUser must be present and be 0 or more`,\n },\n {\n fieldKey: \"prometheus_securityContext_runAsGroup\",\n required: true,\n value: prometheusSecurityContext.runAsGroup,\n customValidation:\n prometheusSecurityContext.runAsGroup === \"\" ||\n parseInt(prometheusSecurityContext.runAsGroup) < 0,\n customValidationMessage: `runAsGroup must be present and be 0 or more`,\n },\n {\n fieldKey: \"prometheus_securityContext_fsGroup\",\n required: true,\n value: prometheusSecurityContext.fsGroup,\n customValidation:\n prometheusSecurityContext.fsGroup === \"\" ||\n parseInt(prometheusSecurityContext.fsGroup) < 0,\n customValidationMessage: `fsGroup must be present and be 0 or more`,\n },\n ];\n }\n if (logSearchCustom) {\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"log_search_storage_class\",\n required: true,\n value: logSearchSelectedStorageClass,\n customValidation: logSearchSelectedStorageClass === \"\",\n customValidationMessage: \"Field cannot be empty\",\n },\n {\n fieldKey: \"log_search_volume_size\",\n required: true,\n value: logSearchVolumeSize,\n customValidation:\n logSearchVolumeSize === \"\" || parseInt(logSearchVolumeSize) <= 0,\n customValidationMessage: `Volume size must be present and be greatter than 0`,\n },\n {\n fieldKey: \"logSearch_securityContext_runAsUser\",\n required: true,\n value: logSearchSecurityContext.runAsUser,\n customValidation:\n logSearchSecurityContext.runAsUser === \"\" ||\n parseInt(logSearchSecurityContext.runAsUser) < 0,\n customValidationMessage: `runAsUser must be present and be 0 or more`,\n },\n {\n fieldKey: \"logSearch_securityContext_runAsGroup\",\n required: true,\n value: logSearchSecurityContext.runAsGroup,\n customValidation:\n logSearchSecurityContext.runAsGroup === \"\" ||\n parseInt(logSearchSecurityContext.runAsGroup) < 0,\n customValidationMessage: `runAsGroup must be present and be 0 or more`,\n },\n {\n fieldKey: \"logSearch_securityContext_fsGroup\",\n required: true,\n value: logSearchSecurityContext.fsGroup,\n customValidation:\n logSearchSecurityContext.fsGroup === \"\" ||\n parseInt(logSearchSecurityContext.fsGroup) < 0,\n customValidationMessage: `fsGroup must be present and be 0 or more`,\n },\n {\n fieldKey: \"postgres_securityContext_runAsUser\",\n required: true,\n value: logSearchPostgresSecurityContext.runAsUser,\n customValidation:\n logSearchPostgresSecurityContext.runAsUser === \"\" ||\n parseInt(logSearchPostgresSecurityContext.runAsUser) < 0,\n customValidationMessage: `runAsUser must be present and be 0 or more`,\n },\n {\n fieldKey: \"postgres_securityContext_runAsGroup\",\n required: true,\n value: prometheusSecurityContext.runAsGroup,\n customValidation:\n logSearchPostgresSecurityContext.runAsGroup === \"\" ||\n parseInt(logSearchPostgresSecurityContext.runAsGroup) < 0,\n customValidationMessage: `runAsGroup must be present and be 0 or more`,\n },\n {\n fieldKey: \"postgres_securityContext_fsGroup\",\n required: true,\n value: logSearchPostgresSecurityContext.fsGroup,\n customValidation:\n logSearchPostgresSecurityContext.fsGroup === \"\" ||\n parseInt(logSearchPostgresSecurityContext.fsGroup) < 0,\n customValidationMessage: `fsGroup must be present and be 0 or more`,\n },\n ];\n }\n\n if (customImage) {\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"image\",\n required: false,\n value: imageName,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage: \"Format must be of form: 'minio/minio:VERSION'\",\n },\n {\n fieldKey: \"logSearchImage\",\n required: false,\n value: logSearchImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage:\n \"Format must be of form: 'minio/logsearchapi:VERSION'\",\n },\n {\n fieldKey: \"kesImage\",\n required: false,\n value: kesImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage: \"Format must be of form: 'minio/kes:VERSION'\",\n },\n {\n fieldKey: \"logSearchPostgresImage\",\n required: false,\n value: logSearchPostgresImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage:\n \"Format must be of form: 'library/postgres:VERSION'\",\n },\n {\n fieldKey: \"logSearchPostgresInitImage\",\n required: false,\n value: logSearchPostgresInitImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage:\n \"Format must be of form: 'library/busybox:VERSION'\",\n },\n {\n fieldKey: \"prometheusImage\",\n required: false,\n value: prometheusImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage:\n \"Format must be of form: 'minio/prometheus:VERSION'\",\n },\n {\n fieldKey: \"prometheusSidecarImage\",\n required: false,\n value: prometheusSidecarImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage:\n \"Format must be of form: 'project/container:VERSION'\",\n },\n {\n fieldKey: \"prometheusInitImage\",\n required: false,\n value: prometheusInitImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage:\n \"Format must be of form: 'library/busybox:VERSION'\",\n },\n ];\n if (customDockerhub) {\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"registry\",\n required: true,\n value: imageRegistry,\n },\n {\n fieldKey: \"registryUsername\",\n required: true,\n value: imageRegistryUsername,\n },\n {\n fieldKey: \"registryPassword\",\n required: true,\n value: imageRegistryPassword,\n },\n ];\n }\n }\n\n const commonVal = commonFormValidation(customAccountValidation);\n\n isPageValid(\"configure\", Object.keys(commonVal).length === 0);\n\n setValidationErrors(commonVal);\n }, [\n customImage,\n imageName,\n logSearchImage,\n kesImage,\n logSearchPostgresImage,\n logSearchPostgresInitImage,\n prometheusImage,\n prometheusSidecarImage,\n prometheusInitImage,\n customDockerhub,\n imageRegistry,\n imageRegistryUsername,\n imageRegistryPassword,\n isPageValid,\n prometheusCustom,\n tenantCustom,\n logSearchCustom,\n prometheusSelectedStorageClass,\n prometheusVolumeSize,\n logSearchSelectedStorageClass,\n logSearchVolumeSize,\n tenantSecurityContext,\n logSearchSecurityContext,\n logSearchPostgresSecurityContext,\n prometheusSecurityContext,\n ]);\n\n useEffect(() => {\n // New default values in current selection is invalid\n if (storageClasses.length > 0) {\n const filterPrometheus = storageClasses.filter(\n (item: any) => item.value === prometheusSelectedStorageClass\n );\n if (filterPrometheus.length === 0) {\n updateField(\"prometheusSelectedStorageClass\", \"default\");\n }\n\n const filterLogSearch = storageClasses.filter(\n (item: any) => item.value === logSearchSelectedStorageClass\n );\n if (filterLogSearch.length === 0) {\n updateField(\"logSearchSelectedStorageClass\", \"default\");\n }\n }\n }, [\n logSearchSelectedStorageClass,\n prometheusSelectedStorageClass,\n selectedStorageClass,\n storageClasses,\n updateField,\n ]);\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n return (\n \n
\n

Configure

\n \n Basic configurations for tenant management\n \n
\n
\n

Expose Services

\n \n Whether the tenant's services should request an external IP.\n \n
\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"exposeMinIO\", checked);\n }}\n label={\"Expose MiniO Service\"}\n />\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"exposeConsole\", checked);\n }}\n label={\"Expose Console Service\"}\n />\n \n\n
\n

Additional Configurations

\n \n Configure SecurityContext, Storage Classes & Storage size for Log\n Search, Prometheus add-ons and your Tenant\n \n
\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"tenantCustom\", checked);\n }}\n label={\"Override Tenant defaults\"}\n />\n \n {tenantCustom && (\n \n
\n \n SecurityContext for MinIO\n \n \n \n
\n ) => {\n updateField(\"tenantSecurityContext\", {\n ...tenantSecurityContext,\n runAsUser: e.target.value,\n });\n cleanValidation(\"tenant_securityContext_runAsUser\");\n }}\n label=\"Run As User\"\n value={tenantSecurityContext.runAsUser}\n required\n error={\n validationErrors[\"tenant_securityContext_runAsUser\"] || \"\"\n }\n min=\"0\"\n />\n
\n
\n ) => {\n updateField(\"tenantSecurityContext\", {\n ...tenantSecurityContext,\n runAsGroup: e.target.value,\n });\n cleanValidation(\"tenant_securityContext_runAsGroup\");\n }}\n label=\"Run As Group\"\n value={tenantSecurityContext.runAsGroup}\n required\n error={\n validationErrors[\"tenant_securityContext_runAsGroup\"] ||\n \"\"\n }\n min=\"0\"\n />\n
\n
\n ) => {\n updateField(\"tenantSecurityContext\", {\n ...tenantSecurityContext,\n fsGroup: e.target.value,\n });\n cleanValidation(\"tenant_securityContext_fsGroup\");\n }}\n label=\"FsGroup\"\n value={tenantSecurityContext.fsGroup}\n required\n error={\n validationErrors[\"tenant_securityContext_fsGroup\"] || \"\"\n }\n min=\"0\"\n />\n
\n \n
\n
\n \n
\n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"tenantSecurityContext\", {\n ...tenantSecurityContext,\n runAsNonRoot: checked,\n });\n }}\n label={\"Do not run as Root\"}\n />\n
\n
\n
\n
\n )}\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"logSearchCustom\", checked);\n }}\n label={\"Override Log Search defaults\"}\n />\n \n {logSearchCustom && (\n \n \n ) => {\n updateField(\n \"logSearchSelectedStorageClass\",\n e.target.value as string\n );\n }}\n label=\"Log Search Storage Class\"\n value={logSearchSelectedStorageClass}\n options={configureSTClasses}\n disabled={configureSTClasses.length < 1}\n />\n \n \n
\n ) => {\n updateField(\"logSearchVolumeSize\", e.target.value);\n cleanValidation(\"log_search_volume_size\");\n }}\n label=\"Storage Size\"\n overlayObject={\n {}}\n unitSelected={\"Gi\"}\n unitsList={[{ label: \"Gi\", value: \"Gi\" }]}\n disabled={true}\n />\n }\n value={logSearchVolumeSize}\n required\n error={validationErrors[\"log_search_volume_size\"] || \"\"}\n min=\"0\"\n />\n
\n
\n\n \n \n SecurityContext for LogSearch\n \n\n \n \n
\n ) => {\n updateField(\"logSearchSecurityContext\", {\n ...logSearchSecurityContext,\n runAsUser: e.target.value,\n });\n cleanValidation(\"logSearch_securityContext_runAsUser\");\n }}\n label=\"Run As User\"\n value={logSearchSecurityContext.runAsUser}\n required\n error={\n validationErrors[\"logSearch_securityContext_runAsUser\"] ||\n \"\"\n }\n min=\"0\"\n />\n
\n
\n ) => {\n updateField(\"logSearchSecurityContext\", {\n ...logSearchSecurityContext,\n runAsGroup: e.target.value,\n });\n cleanValidation(\"logSearch_securityContext_runAsGroup\");\n }}\n label=\"Run As Group\"\n value={logSearchSecurityContext.runAsGroup}\n required\n error={\n validationErrors[\n \"logSearch_securityContext_runAsGroup\"\n ] || \"\"\n }\n min=\"0\"\n />\n
\n
\n ) => {\n updateField(\"logSearchSecurityContext\", {\n ...logSearchSecurityContext,\n fsGroup: e.target.value,\n });\n cleanValidation(\"logSearch_securityContext_fsGroup\");\n }}\n label=\"FsGroup\"\n value={logSearchSecurityContext.fsGroup}\n required\n error={\n validationErrors[\"logSearch_securityContext_fsGroup\"] ||\n \"\"\n }\n min=\"0\"\n />\n
\n \n
\n
\n \n
\n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"logSearchSecurityContext\", {\n ...logSearchSecurityContext,\n runAsNonRoot: checked,\n });\n }}\n label={\"Do not run as Root\"}\n />\n
\n
\n \n
\n \n SecurityContext for PostgreSQL\n \n\n \n \n
\n ) => {\n updateField(\"logSearchPostgresSecurityContext\", {\n ...logSearchPostgresSecurityContext,\n runAsUser: e.target.value,\n });\n cleanValidation(\"postgres_securityContext_runAsUser\");\n }}\n label=\"Run As User\"\n value={logSearchPostgresSecurityContext.runAsUser}\n required\n error={\n validationErrors[\"postgres_securityContext_runAsUser\"] ||\n \"\"\n }\n min=\"0\"\n />\n
\n
\n ) => {\n updateField(\"logSearchPostgresSecurityContext\", {\n ...logSearchPostgresSecurityContext,\n runAsGroup: e.target.value,\n });\n cleanValidation(\"postgres_securityContext_runAsGroup\");\n }}\n label=\"Run As Group\"\n value={logSearchPostgresSecurityContext.runAsGroup}\n required\n error={\n validationErrors[\"postgres_securityContext_runAsGroup\"] ||\n \"\"\n }\n min=\"0\"\n />\n
\n
\n ) => {\n updateField(\"logSearchPostgresSecurityContext\", {\n ...logSearchPostgresSecurityContext,\n fsGroup: e.target.value,\n });\n cleanValidation(\"postgres_securityContext_fsGroup\");\n }}\n label=\"FsGroup\"\n value={logSearchPostgresSecurityContext.fsGroup}\n required\n error={\n validationErrors[\"postgres_securityContext_fsGroup\"] || \"\"\n }\n min=\"0\"\n />\n
\n \n
\n
\n \n
\n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"logSearchPostgresSecurityContext\", {\n ...logSearchPostgresSecurityContext,\n runAsNonRoot: checked,\n });\n }}\n label={\"Do not run as Root\"}\n />\n
\n
\n
\n
\n )}\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"prometheusCustom\", checked);\n }}\n label={\"Override Prometheus defaults\"}\n />\n \n {prometheusCustom && (\n \n \n ) => {\n updateField(\n \"prometheusSelectedStorageClass\",\n e.target.value as string\n );\n }}\n label=\"Prometheus Storage Class\"\n value={prometheusSelectedStorageClass}\n options={configureSTClasses}\n disabled={configureSTClasses.length < 1}\n />\n \n \n
\n ) => {\n updateField(\"prometheusVolumeSize\", e.target.value);\n cleanValidation(\"prometheus_volume_size\");\n }}\n label=\"Storage Size\"\n overlayObject={\n {}}\n unitSelected={\"Gi\"}\n unitsList={[{ label: \"Gi\", value: \"Gi\" }]}\n disabled={true}\n />\n }\n value={prometheusVolumeSize}\n required\n error={validationErrors[\"prometheus_volume_size\"] || \"\"}\n min=\"0\"\n />\n
\n
\n \n \n SecurityContext for Prometheus\n \n \n \n
\n ) => {\n updateField(\"prometheusSecurityContext\", {\n ...prometheusSecurityContext,\n runAsUser: e.target.value,\n });\n cleanValidation(\"prometheus_securityContext_runAsUser\");\n }}\n label=\"Run As User\"\n value={prometheusSecurityContext.runAsUser}\n required\n error={\n validationErrors[\n \"prometheus_securityContext_runAsUser\"\n ] || \"\"\n }\n min=\"0\"\n />\n
\n
\n ) => {\n updateField(\"prometheusSecurityContext\", {\n ...prometheusSecurityContext,\n runAsGroup: e.target.value,\n });\n cleanValidation(\"prometheus_securityContext_runAsGroup\");\n }}\n label=\"Run As Group\"\n value={prometheusSecurityContext.runAsGroup}\n required\n error={\n validationErrors[\n \"prometheus_securityContext_runAsGroup\"\n ] || \"\"\n }\n min=\"0\"\n />\n
\n
\n ) => {\n updateField(\"prometheusSecurityContext\", {\n ...prometheusSecurityContext,\n fsGroup: e.target.value,\n });\n cleanValidation(\"prometheus_securityContext_fsGroup\");\n }}\n label=\"FsGroup\"\n value={prometheusSecurityContext.fsGroup}\n required\n error={\n validationErrors[\"prometheus_securityContext_fsGroup\"] ||\n \"\"\n }\n min=\"0\"\n />\n
\n \n
\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"prometheusSecurityContext\", {\n ...prometheusSecurityContext,\n runAsNonRoot: checked,\n });\n }}\n label={\"Do not run as Root\"}\n />\n \n \n \n
\n )}\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n storageClasses: state.tenants.createTenant.storageClasses,\n customImage: state.tenants.createTenant.fields.configure.customImage,\n imageName: state.tenants.createTenant.fields.configure.imageName,\n customDockerhub: state.tenants.createTenant.fields.configure.customDockerhub,\n imageRegistry: state.tenants.createTenant.fields.configure.imageRegistry,\n imageRegistryUsername:\n state.tenants.createTenant.fields.configure.imageRegistryUsername,\n imageRegistryPassword:\n state.tenants.createTenant.fields.configure.imageRegistryPassword,\n exposeMinIO: state.tenants.createTenant.fields.configure.exposeMinIO,\n exposeConsole: state.tenants.createTenant.fields.configure.exposeConsole,\n prometheusCustom:\n state.tenants.createTenant.fields.configure.prometheusCustom,\n tenantCustom: state.tenants.createTenant.fields.configure.tenantCustom,\n logSearchCustom: state.tenants.createTenant.fields.configure.logSearchCustom,\n logSearchVolumeSize:\n state.tenants.createTenant.fields.configure.logSearchVolumeSize,\n logSearchSizeFactor:\n state.tenants.createTenant.fields.configure.logSearchSizeFactor,\n prometheusVolumeSize:\n state.tenants.createTenant.fields.configure.prometheusVolumeSize,\n prometheusSizeFactor:\n state.tenants.createTenant.fields.configure.prometheusSizeFactor,\n logSearchSelectedStorageClass:\n state.tenants.createTenant.fields.configure.logSearchSelectedStorageClass,\n logSearchImage: state.tenants.createTenant.fields.configure.logSearchImage,\n kesImage: state.tenants.createTenant.fields.configure.kesImage,\n logSearchPostgresImage:\n state.tenants.createTenant.fields.configure.logSearchPostgresImage,\n logSearchPostgresInitImage:\n state.tenants.createTenant.fields.configure.logSearchPostgresInitImage,\n prometheusSelectedStorageClass:\n state.tenants.createTenant.fields.configure.prometheusSelectedStorageClass,\n prometheusImage: state.tenants.createTenant.fields.configure.prometheusImage,\n prometheusSidecarImage:\n state.tenants.createTenant.fields.configure.prometheusSidecarImage,\n prometheusInitImage:\n state.tenants.createTenant.fields.configure.prometheusInitImage,\n selectedStorageClass:\n state.tenants.createTenant.fields.nameTenant.selectedStorageClass,\n tenantSecurityContext:\n state.tenants.createTenant.fields.configure.tenantSecurityContext,\n logSearchSecurityContext:\n state.tenants.createTenant.fields.configure.logSearchSecurityContext,\n logSearchPostgresSecurityContext:\n state.tenants.createTenant.fields.configure\n .logSearchPostgresSecurityContext,\n prometheusSecurityContext:\n state.tenants.createTenant.fields.configure.prometheusSecurityContext,\n});\n\nconst connector = connect(mapState, {\n updateAddField,\n isPageValid,\n});\n\nexport default withStyles(styles)(connector(Configure));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Grid, IconButton, Paper, Tooltip, Typography } from \"@mui/material\";\nimport CasinoIcon from \"@mui/icons-material/Casino\";\nimport DeleteIcon from \"@mui/icons-material/Delete\";\nimport {\n createTenantCommon,\n formFieldStyles,\n modalBasic,\n wizardCommon,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\nimport { isPageValid, updateAddField } from \"../../actions\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../utils/validationFunctions\";\nimport { AppState } from \"../../../../../store\";\nimport { clearValidationError, getRandomString } from \"../../utils\";\nimport RadioGroupSelector from \"../../../Common/FormComponents/RadioGroupSelector/RadioGroupSelector\";\nimport InputBoxWrapper from \"../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport FormSwitchWrapper from \"../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport AddIcon from \"@mui/icons-material/Add\";\nimport RemoveIcon from \"../../../../../icons/RemoveIcon\";\n\ninterface IIdentityProviderProps {\n classes: any;\n idpSelection: string;\n accessKeys: string[];\n secretKeys: string[];\n openIDConfigurationURL: string;\n openIDClientID: string;\n openIDSecretID: string;\n openIDCallbackURL: string;\n openIDClaimName: string;\n openIDScopes: string;\n ADURL: string;\n ADSkipTLS: boolean;\n ADServerInsecure: boolean;\n ADUserNameSearchFilter: string;\n ADGroupSearchBaseDN: string;\n ADGroupSearchFilter: string;\n ADGroupNameAttribute: string;\n ADUserDNs: string[];\n ADUserNameFormat: string;\n ADLookupBindDN: string;\n ADLookupBindPassword: string;\n ADUserDNSearchBaseDN: string;\n ADUserDNSearchFilter: string;\n ADServerStartTLS: boolean;\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n shortened: {\n gridTemplateColumns: \"auto auto 50px 50px\",\n display: \"grid\",\n gridGap: 15,\n marginBottom: 10,\n \"& input\": {\n fontWeight: 400,\n },\n },\n buttonTray: {\n marginLeft: 10,\n display: \"flex\",\n height: 38,\n \"& button\": {\n background: \"#EAEAEA\",\n },\n },\n overlayAction: {\n marginLeft: 10,\n \"& svg\": {\n maxWidth: 15,\n maxHeight: 15,\n },\n \"& button\": {\n background: \"#EAEAEA\",\n },\n },\n protocolRadioOptions: {\n display: \"flex\",\n flexFlow: \"column\",\n marginBottom: 10,\n\n \"& label\": {\n fontSize: 14,\n },\n \"& div\": {\n display: \"flex\",\n flexFlow: \"column\",\n alignItems: \"baseline\",\n },\n },\n adUserDnRows: {\n display: \"flex\",\n },\n ...createTenantCommon,\n ...formFieldStyles,\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst IdentityProvider = ({\n classes,\n idpSelection,\n accessKeys,\n secretKeys,\n openIDConfigurationURL,\n openIDClientID,\n openIDSecretID,\n openIDCallbackURL,\n openIDClaimName,\n openIDScopes,\n ADURL,\n ADSkipTLS,\n ADServerInsecure,\n ADUserNameSearchFilter,\n ADGroupSearchBaseDN,\n ADGroupSearchFilter,\n ADGroupNameAttribute,\n ADUserDNs,\n ADUserNameFormat,\n ADLookupBindDN,\n ADLookupBindPassword,\n ADUserDNSearchBaseDN,\n ADUserDNSearchFilter,\n ADServerStartTLS,\n updateAddField,\n isPageValid,\n}: IIdentityProviderProps) => {\n const [validationErrors, setValidationErrors] = useState({});\n\n const updateField = useCallback(\n (field: string, value: any) => {\n updateAddField(\"identityProvider\", field, value);\n },\n [updateAddField]\n );\n const updateUserField = (index: number, value: string) => {\n const newUserField = [...accessKeys];\n newUserField[index] = value;\n updateField(\"accessKeys\", newUserField);\n };\n const updatePwordField = (index: number, value: string) => {\n const newUserField = [...secretKeys];\n newUserField[index] = value;\n updateField(\"secretKeys\", newUserField);\n };\n const updateADUserField = (index: number, value: string) => {\n const newADUserDNsField = [...ADUserDNs];\n newADUserDNsField[index] = value;\n updateField(\"ADUserDNs\", newADUserDNsField);\n };\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n // Validation\n\n useEffect(() => {\n let customIDPValidation: IValidation[] = [];\n\n if (idpSelection === \"Built-in\") {\n customIDPValidation = [...customIDPValidation];\n for (var i = 0; i < accessKeys.length; i++) {\n customIDPValidation.push({\n fieldKey: `accesskey-${i.toString()}`,\n required: true,\n value: accessKeys[i],\n pattern: /^[a-zA-Z0-9-]{8,63}$/,\n customPatternMessage: \"Keys must be at least length 8\",\n });\n customIDPValidation.push({\n fieldKey: `secretkey-${i.toString()}`,\n required: true,\n value: secretKeys[i],\n pattern: /^[a-zA-Z0-9-]{8,63}$/,\n customPatternMessage: \"Keys must be at least length 8\",\n });\n }\n }\n\n if (idpSelection === \"OpenID\") {\n customIDPValidation = [\n ...customIDPValidation,\n {\n fieldKey: \"openID_CONFIGURATION_URL\",\n required: true,\n value: openIDConfigurationURL,\n },\n {\n fieldKey: \"openID_clientID\",\n required: true,\n value: openIDClientID,\n },\n {\n fieldKey: \"openID_secretID\",\n required: true,\n value: openIDSecretID,\n },\n {\n fieldKey: \"openID_claimName\",\n required: true,\n value: openIDClaimName,\n },\n ];\n }\n\n if (idpSelection === \"AD\") {\n customIDPValidation = [\n ...customIDPValidation,\n {\n fieldKey: \"AD_URL\",\n required: true,\n value: ADURL,\n },\n ];\n // validate user DNs\n for (let i = 0; i < ADUserDNs.length; i++) {\n customIDPValidation.push({\n fieldKey: `ad-userdn-${i.toString()}`,\n required: true,\n value: ADUserDNs[i],\n });\n }\n }\n\n const commonVal = commonFormValidation(customIDPValidation);\n\n isPageValid(\"identityProvider\", Object.keys(commonVal).length === 0);\n\n setValidationErrors(commonVal);\n }, [\n idpSelection,\n accessKeys,\n secretKeys,\n openIDClientID,\n openIDSecretID,\n ADURL,\n ADUserNameSearchFilter,\n ADGroupSearchBaseDN,\n ADGroupSearchFilter,\n ADGroupNameAttribute,\n ADUserDNs,\n isPageValid,\n openIDConfigurationURL,\n openIDClaimName,\n ]);\n let inputs = null;\n if (idpSelection === \"Built-in\") {\n inputs = accessKeys.map((_, index) => {\n return (\n \n
\n ) => {\n updateUserField(index, e.target.value);\n cleanValidation(`accesskey-${index.toString()}`);\n }}\n index={index}\n key={`csv-accesskey-${index.toString()}`}\n error={validationErrors[`accesskey-${index.toString()}`] || \"\"}\n />\n ) => {\n updatePwordField(index, e.target.value);\n cleanValidation(`secretkey-${index.toString()}`);\n }}\n index={index}\n key={`csv-secretkey-${index.toString()}`}\n error={validationErrors[`secretkey-${index.toString()}`] || \"\"}\n />\n
\n \n
\n {\n accessKeys.push(\"\");\n secretKeys.push(\"\");\n updateUserField(accessKeys.length - 1, \"\");\n updatePwordField(secretKeys.length - 1, \"\");\n }}\n >\n \n \n
\n
\n \n
\n {\n if (accessKeys.length > 1) {\n accessKeys.splice(index, 1);\n secretKeys.splice(index, 1);\n updateUserField(\n accessKeys.length - 1,\n accessKeys[accessKeys.length - 1]\n );\n }\n }}\n >\n \n \n
\n
\n \n
\n {\n updateUserField(index, getRandomString(16));\n updatePwordField(index, getRandomString(32));\n }}\n size={\"small\"}\n >\n \n \n
\n
\n
\n
\n
\n );\n });\n }\n if (idpSelection === \"AD\") {\n inputs = ADUserDNs.map((_, index) => {\n return (\n \n
\n ) => {\n updateADUserField(index, e.target.value);\n cleanValidation(`ad-userdn-${index.toString()}`);\n }}\n index={index}\n key={`csv-ad-userdn-${index.toString()}`}\n error={validationErrors[`ad-userdn-${index.toString()}`] || \"\"}\n />\n
\n \n {\n ADUserDNs.push(\"\");\n updateADUserField(ADUserDNs.length - 1, \"\");\n }}\n >\n \n \n \n \n {\n if (ADUserDNs.length > 1) {\n ADUserDNs.splice(index, 1);\n updateUserField(\n ADUserDNs.length - 1,\n ADUserDNs[ADUserDNs.length - 1]\n );\n }\n }}\n >\n \n \n \n
\n
\n
\n );\n });\n }\n return (\n \n
\n

Identity Provider

\n \n Access to the tenant can be controlled via an external Identity\n Manager.\n \n
\n \n \n {\n updateField(\"idpSelection\", e.target.value);\n }}\n selectorOptions={[\n { label: \"Built-in\", value: \"Built-in\" },\n { label: \"OpenID\", value: \"OpenID\" },\n { label: \"Active Directory\", value: \"AD\" },\n ]}\n />\n \n {idpSelection === \"Built-in\" && (\n \n Add additional users\n {inputs}\n \n )}\n {idpSelection === \"OpenID\" && (\n \n \n ) => {\n updateField(\"openIDConfigurationURL\", e.target.value);\n cleanValidation(\"openID_CONFIGURATION_URL\");\n }}\n label=\"Configuration URL\"\n value={openIDConfigurationURL}\n placeholder=\"https://your-identity-provider.com/.well-known/openid-configuration\"\n error={validationErrors[\"openID_CONFIGURATION_URL\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"openIDClientID\", e.target.value);\n cleanValidation(\"openID_clientID\");\n }}\n label=\"Client ID\"\n value={openIDClientID}\n error={validationErrors[\"openID_clientID\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"openIDSecretID\", e.target.value);\n cleanValidation(\"openID_secretID\");\n }}\n label=\"Secret ID\"\n value={openIDSecretID}\n error={validationErrors[\"openID_secretID\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"openIDCallbackURL\", e.target.value);\n cleanValidation(\"openID_callbackURL\");\n }}\n label=\"Callback URL\"\n value={openIDCallbackURL}\n placeholder=\"https://your-console-endpoint:9443/oauth_callback\"\n error={validationErrors[\"openID_callbackURL\"] || \"\"}\n />\n \n \n ) => {\n updateField(\"openIDClaimName\", e.target.value);\n cleanValidation(\"openID_claimName\");\n }}\n label=\"Claim Name\"\n value={openIDClaimName}\n error={validationErrors[\"openID_claimName\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"openIDScopes\", e.target.value);\n cleanValidation(\"openID_scopes\");\n }}\n label=\"Scopes\"\n value={openIDScopes}\n />\n \n \n )}\n {idpSelection === \"AD\" && (\n \n \n ) => {\n updateField(\"ADURL\", e.target.value);\n cleanValidation(\"AD_URL\");\n }}\n label=\"LDAP Server Address\"\n value={ADURL}\n placeholder=\"ldap-server:636\"\n error={validationErrors[\"AD_URL\"] || \"\"}\n required\n />\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"ADSkipTLS\", checked);\n }}\n label={\"Skip TLS Verification\"}\n />\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"ADServerInsecure\", checked);\n }}\n label={\"Server Insecure\"}\n />\n \n {ADServerInsecure ? (\n \n \n Warning: All traffic with Active Directory will be unencrypted\n \n
\n
\n ) : null}\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"ADServerStartTLS\", checked);\n }}\n label={\"Start TLS connection to AD/LDAP server\"}\n />\n \n \n ) => {\n updateField(\"ADUserNameFormat\", e.target.value);\n }}\n label=\"Username Format\"\n value={ADUserNameFormat}\n placeholder=\"uid=%s,cn=accounts,dc=myldapserver,dc=com\"\n />\n \n \n ) => {\n updateField(\"ADUserNameSearchFilter\", e.target.value);\n }}\n label=\"Username Search Filter\"\n value={ADUserNameSearchFilter}\n placeholder=\"(|(objectclass=posixAccount)(uid=%s))\"\n />\n \n \n ) => {\n updateField(\"ADGroupSearchBaseDN\", e.target.value);\n }}\n label=\"Group Search Base DN\"\n value={ADGroupSearchBaseDN}\n placeholder=\"ou=hwengg,dc=min,dc=io;ou=swengg,dc=min,dc=io\"\n />\n \n \n ) => {\n updateField(\"ADGroupSearchFilter\", e.target.value);\n }}\n label=\"Group Search Filter\"\n value={ADGroupSearchFilter}\n placeholder=\"(&(objectclass=groupOfNames)(member=%s))\"\n />\n \n \n ) => {\n updateField(\"ADGroupNameAttribute\", e.target.value);\n }}\n label=\"Group Name Attribute\"\n value={ADGroupNameAttribute}\n placeholder=\"cn\"\n />\n \n \n ) => {\n updateField(\"ADLookupBindDN\", e.target.value);\n }}\n label=\"Lookup Bind DN\"\n value={ADLookupBindDN}\n placeholder=\"cn=admin,dc=min,dc=io\"\n />\n \n \n ) => {\n updateField(\"ADLookupBindPassword\", e.target.value);\n }}\n label=\"Lookup Bind Password\"\n value={ADLookupBindPassword}\n placeholder=\"admin\"\n />\n \n \n ) => {\n updateField(\"ADUserDNSearchBaseDN\", e.target.value);\n }}\n label=\"User DN Search Base DN\"\n value={ADUserDNSearchBaseDN}\n placeholder=\"dc=min,dc=io\"\n />\n \n \n ) => {\n updateField(\"ADUserDNSearchFilter\", e.target.value);\n }}\n label=\"User DN Search Filter\"\n value={ADUserDNSearchFilter}\n placeholder=\"(uid=%s)\"\n />\n \n
\n \n List of user DNs (Distinguished Names) to be Tenant Administrators\n \n \n {inputs}\n \n
\n
\n )}\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n idpSelection: state.tenants.createTenant.fields.identityProvider.idpSelection,\n accessKeys: state.tenants.createTenant.fields.identityProvider.accessKeys,\n secretKeys: state.tenants.createTenant.fields.identityProvider.secretKeys,\n openIDConfigurationURL:\n state.tenants.createTenant.fields.identityProvider.openIDConfigurationURL,\n openIDClientID:\n state.tenants.createTenant.fields.identityProvider.openIDClientID,\n openIDSecretID:\n state.tenants.createTenant.fields.identityProvider.openIDSecretID,\n openIDCallbackURL:\n state.tenants.createTenant.fields.identityProvider.openIDCallbackURL,\n openIDClaimName:\n state.tenants.createTenant.fields.identityProvider.openIDClaimName,\n openIDScopes: state.tenants.createTenant.fields.identityProvider.openIDScopes,\n ADURL: state.tenants.createTenant.fields.identityProvider.ADURL,\n ADSkipTLS: state.tenants.createTenant.fields.identityProvider.ADSkipTLS,\n ADServerInsecure:\n state.tenants.createTenant.fields.identityProvider.ADServerInsecure,\n ADUserNameSearchFilter:\n state.tenants.createTenant.fields.identityProvider.ADUserNameSearchFilter,\n ADGroupSearchBaseDN:\n state.tenants.createTenant.fields.identityProvider.ADGroupSearchBaseDN,\n ADGroupSearchFilter:\n state.tenants.createTenant.fields.identityProvider.ADGroupSearchFilter,\n ADGroupNameAttribute:\n state.tenants.createTenant.fields.identityProvider.ADGroupNameAttribute,\n ADUserDNs: state.tenants.createTenant.fields.identityProvider.ADUserDNs,\n ADUserNameFormat:\n state.tenants.createTenant.fields.identityProvider.ADUserNameFormat,\n ADLookupBindDN:\n state.tenants.createTenant.fields.identityProvider.ADLookupBindDN,\n ADLookupBindPassword:\n state.tenants.createTenant.fields.identityProvider.ADLookupBindPassword,\n ADUserDNSearchBaseDN:\n state.tenants.createTenant.fields.identityProvider.ADUserDNSearchBaseDN,\n ADUserDNSearchFilter:\n state.tenants.createTenant.fields.identityProvider.ADUserDNSearchFilter,\n ADServerStartTLS:\n state.tenants.createTenant.fields.identityProvider.ADServerStartTLS,\n});\n\nconst connector = connect(mapState, {\n updateAddField,\n isPageValid,\n});\n\nexport default withStyles(styles)(connector(IdentityProvider));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Grid, IconButton, Paper, Typography } from \"@mui/material\";\nimport {\n createTenantCommon,\n modalBasic,\n wizardCommon,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\nimport {\n addCaCertificate,\n addFileToCaCertificates,\n addFileToKeyPair,\n addKeyPair,\n deleteCaCertificate,\n deleteKeyPair,\n isPageValid,\n updateAddField,\n} from \"../../actions\";\nimport { AppState } from \"../../../../../store\";\nimport { KeyPair } from \"../../ListTenants/utils\";\nimport FormSwitchWrapper from \"../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport FileSelector from \"../../../Common/FormComponents/FileSelector/FileSelector\";\nimport AddIcon from \"../../../../../icons/AddIcon\";\nimport RemoveIcon from \"../../../../../icons/RemoveIcon\";\n\ninterface ISecurityProps {\n classes: any;\n enableTLS: boolean;\n enableAutoCert: boolean;\n enableCustomCerts: boolean;\n minioCertificates: KeyPair[];\n caCertificates: KeyPair[];\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n addFileToCaCertificates: typeof addFileToCaCertificates;\n deleteCaCertificate: typeof deleteCaCertificate;\n addCaCertificate: typeof addCaCertificate;\n addKeyPair: typeof addKeyPair;\n addFileToKeyPair: typeof addFileToKeyPair;\n deleteKeyPair: typeof deleteKeyPair;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n minioCertificateRows: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n borderBottom: \"1px solid #EAEAEA\",\n \"&:last-child\": {\n borderBottom: 0,\n },\n \"@media (max-width: 900px)\": {\n flex: 1,\n },\n },\n fileItem: {\n marginRight: 10,\n display: \"flex\",\n \"& div label\": {\n minWidth: 50,\n },\n\n \"@media (max-width: 900px)\": {\n flexFlow: \"column\",\n },\n },\n minioCertsContainer: {\n marginBottom: 15,\n },\n minioCACertsRow: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n\n borderBottom: \"1px solid #EAEAEA\",\n \"&:last-child\": {\n borderBottom: 0,\n },\n \"@media (max-width: 900px)\": {\n flex: 1,\n\n \"& div label\": {\n minWidth: 50,\n },\n },\n },\n rowActions: {\n display: \"flex\",\n justifyContent: \"flex-end\",\n \"@media (max-width: 900px)\": {\n flex: 1,\n },\n },\n overlayAction: {\n marginLeft: 10,\n \"& svg\": {\n maxWidth: 15,\n maxHeight: 15,\n },\n \"& button\": {\n background: \"#EAEAEA\",\n },\n },\n\n ...createTenantCommon,\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst Security = ({\n classes,\n enableTLS,\n enableAutoCert,\n enableCustomCerts,\n minioCertificates,\n caCertificates,\n updateAddField,\n isPageValid,\n addFileToCaCertificates,\n deleteCaCertificate,\n addCaCertificate,\n addKeyPair,\n addFileToKeyPair,\n deleteKeyPair,\n}: ISecurityProps) => {\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n updateAddField(\"security\", field, value);\n },\n [updateAddField]\n );\n\n // Validation\n\n useEffect(() => {\n if (!enableTLS) {\n isPageValid(\"security\", true);\n return;\n }\n if (enableAutoCert) {\n isPageValid(\"security\", true);\n return;\n }\n if (enableCustomCerts) {\n isPageValid(\"security\", true);\n return;\n }\n isPageValid(\"security\", false);\n }, [enableTLS, enableAutoCert, enableCustomCerts, isPageValid]);\n\n return (\n \n
\n

Security

\n
\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"enableTLS\", checked);\n }}\n label={\"Enable TLS\"}\n />\n Enable TLS for the tenant, this is required for Encryption Configuration\n {enableTLS && (\n \n
\n
\n \n AutoCert: MinIO Operator will generate all TLS certificates\n automatically\n \n \n Custom certificates: Allow user to provide your own certificates\n \n
\n
\n )}\n
\n {enableTLS && (\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"enableAutoCert\", checked);\n }}\n label={\"Enable AutoCert\"}\n />\n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"enableCustomCerts\", checked);\n }}\n label={\"Custom Certificates\"}\n />\n \n {enableCustomCerts && (\n \n \n \n
\n \n MinIO Certificates\n \n {minioCertificates.map((keyPair: KeyPair) => (\n \n \n {\n addFileToKeyPair(\n keyPair.id,\n \"cert\",\n fileName,\n encodedValue\n );\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"tlsCert\"\n name=\"tlsCert\"\n label=\"Cert\"\n value={keyPair.cert}\n />\n {\n addFileToKeyPair(\n keyPair.id,\n \"key\",\n fileName,\n encodedValue\n );\n }}\n accept=\".key,.pem\"\n id=\"tlsKey\"\n name=\"tlsKey\"\n label=\"Key\"\n value={keyPair.key}\n />\n \n\n \n
\n \n \n \n
\n
\n {\n deleteKeyPair(keyPair.id);\n }}\n >\n \n \n
\n
\n \n ))}\n
\n
\n
\n\n \n \n
\n \n MinIO CA Certificates\n \n\n {caCertificates.map((keyPair: KeyPair) => (\n \n \n {\n addFileToCaCertificates(\n keyPair.id,\n \"cert\",\n fileName,\n encodedValue\n );\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"tlsCert\"\n name=\"tlsCert\"\n label=\"Cert\"\n value={keyPair.cert}\n />\n \n \n
\n
\n \n \n \n
\n
\n {\n deleteCaCertificate(keyPair.id);\n }}\n >\n \n \n
\n
\n
\n \n ))}\n
\n
\n
\n
\n )}\n
\n )}\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n enableTLS: state.tenants.createTenant.fields.security.enableTLS,\n enableAutoCert: state.tenants.createTenant.fields.security.enableAutoCert,\n enableCustomCerts:\n state.tenants.createTenant.fields.security.enableCustomCerts,\n minioCertificates: state.tenants.createTenant.certificates.minioCertificates,\n caCertificates: state.tenants.createTenant.certificates.caCertificates,\n});\n\nconst connector = connect(mapState, {\n updateAddField,\n isPageValid,\n addFileToCaCertificates,\n deleteCaCertificate,\n addCaCertificate,\n addKeyPair,\n addFileToKeyPair,\n deleteKeyPair,\n});\n\nexport default withStyles(styles)(connector(Security));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Paper } from \"@mui/material\";\nimport Grid from \"@mui/material/Grid\";\nimport {\n addFileClientCert,\n addFileGemaltoCa,\n addFileServerCert,\n addFileVaultCa,\n addFileVaultCert,\n isPageValid,\n updateAddField,\n} from \"../../actions\";\nimport {\n createTenantCommon,\n formFieldStyles,\n modalBasic,\n wizardCommon,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\nimport { AppState } from \"../../../../../store\";\nimport { clearValidationError } from \"../../utils\";\nimport InputBoxWrapper from \"../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport FormSwitchWrapper from \"../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport FileSelector from \"../../../Common/FormComponents/FileSelector/FileSelector\";\nimport RadioGroupSelector from \"../../../Common/FormComponents/RadioGroupSelector/RadioGroupSelector\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../utils/validationFunctions\";\nimport { KeyPair } from \"../../ListTenants/utils\";\nimport { ISecurityContext } from \"../../types\";\n\ninterface IEncryptionProps {\n classes: any;\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n addFileServerCert: typeof addFileServerCert;\n addFileClientCert: typeof addFileClientCert;\n addFileVaultCert: typeof addFileVaultCert;\n addFileVaultCa: typeof addFileVaultCa;\n addFileGemaltoCa: typeof addFileGemaltoCa;\n enableEncryption: boolean;\n encryptionType: string;\n gemaltoEndpoint: string;\n gemaltoToken: string;\n gemaltoDomain: string;\n gemaltoRetry: string;\n awsEndpoint: string;\n awsRegion: string;\n awsKMSKey: string;\n awsAccessKey: string;\n awsSecretKey: string;\n awsToken: string;\n vaultEndpoint: string;\n vaultEngine: string;\n vaultNamespace: string;\n vaultPrefix: string;\n vaultAppRoleEngine: string;\n vaultId: string;\n vaultSecret: string;\n vaultRetry: string;\n vaultPing: string;\n azureEndpoint: string;\n azureTenantID: string;\n azureClientID: string;\n azureClientSecret: string;\n gcpProjectID: string;\n gcpEndpoint: string;\n gcpClientEmail: string;\n gcpClientID: string;\n gcpPrivateKeyID: string;\n gcpPrivateKey: string;\n enableCustomCertsForKES: boolean;\n enableAutoCert: boolean;\n enableTLS: boolean;\n enableCustomCerts: boolean;\n minioCertificates: KeyPair[];\n serverCertificate: KeyPair;\n clientCertificate: KeyPair;\n vaultCertificate: KeyPair;\n vaultCA: KeyPair;\n gemaltoCA: KeyPair;\n kesSecurityContext: ISecurityContext;\n replicas: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n encryptionTypeOptions: {\n marginBottom: 15,\n },\n mutualTlsConfig: {\n marginTop: 15,\n \"& fieldset\": {\n flex: 1,\n },\n },\n rightSpacer: {\n marginRight: 15,\n },\n responsiveContainer: {\n \"@media (max-width: 900px)\": {\n display: \"flex\",\n flexFlow: \"column\",\n },\n },\n ...createTenantCommon,\n ...formFieldStyles,\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst Encryption = ({\n classes,\n updateAddField,\n isPageValid,\n addFileServerCert,\n addFileClientCert,\n addFileVaultCert,\n addFileVaultCa,\n addFileGemaltoCa,\n enableEncryption,\n enableCustomCerts,\n encryptionType,\n gemaltoEndpoint,\n gemaltoToken,\n gemaltoDomain,\n gemaltoRetry,\n awsEndpoint,\n awsRegion,\n awsKMSKey,\n awsAccessKey,\n awsSecretKey,\n awsToken,\n vaultEndpoint,\n vaultEngine,\n vaultNamespace,\n vaultPrefix,\n vaultAppRoleEngine,\n vaultId,\n vaultSecret,\n vaultRetry,\n vaultPing,\n azureEndpoint,\n azureTenantID,\n azureClientID,\n azureClientSecret,\n gcpProjectID,\n gcpEndpoint,\n gcpClientEmail,\n gcpClientID,\n gcpPrivateKeyID,\n gcpPrivateKey,\n enableCustomCertsForKES,\n enableAutoCert,\n enableTLS,\n minioCertificates,\n serverCertificate,\n clientCertificate,\n vaultCertificate,\n vaultCA,\n gemaltoCA,\n kesSecurityContext,\n replicas,\n}: IEncryptionProps) => {\n const [validationErrors, setValidationErrors] = useState({});\n\n let encryptionAvailable = false;\n if (\n enableTLS &&\n (enableAutoCert ||\n (minioCertificates &&\n minioCertificates.filter(\n (item) => item.encoded_key && item.encoded_cert\n ).length > 0))\n ) {\n encryptionAvailable = true;\n }\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n updateAddField(\"encryption\", field, value);\n },\n [updateAddField]\n );\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n // Validation\n useEffect(() => {\n let encryptionValidation: IValidation[] = [];\n\n if (enableEncryption) {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"replicas\",\n required: true,\n value: replicas,\n customValidation: parseInt(replicas) < 1,\n customValidationMessage: \"Replicas needs to be 1 or greater\",\n },\n {\n fieldKey: \"kes_securityContext_runAsUser\",\n required: true,\n value: kesSecurityContext.runAsUser,\n customValidation:\n kesSecurityContext.runAsUser === \"\" ||\n parseInt(kesSecurityContext.runAsUser) < 0,\n customValidationMessage: `runAsUser must be present and be 0 or more`,\n },\n {\n fieldKey: \"kes_securityContext_runAsGroup\",\n required: true,\n value: kesSecurityContext.runAsGroup,\n customValidation:\n kesSecurityContext.runAsGroup === \"\" ||\n parseInt(kesSecurityContext.runAsGroup) < 0,\n customValidationMessage: `runAsGroup must be present and be 0 or more`,\n },\n {\n fieldKey: \"kes_securityContext_fsGroup\",\n required: true,\n value: kesSecurityContext.fsGroup,\n customValidation:\n kesSecurityContext.fsGroup === \"\" ||\n parseInt(kesSecurityContext.fsGroup) < 0,\n customValidationMessage: `fsGroup must be present and be 0 or more`,\n },\n ];\n\n if (enableCustomCerts) {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"serverKey\",\n required: !enableAutoCert,\n value: serverCertificate.encoded_key,\n },\n {\n fieldKey: \"serverCert\",\n required: !enableAutoCert,\n value: serverCertificate.encoded_cert,\n },\n {\n fieldKey: \"clientKey\",\n required: !enableAutoCert,\n value: clientCertificate.encoded_key,\n },\n {\n fieldKey: \"clientCert\",\n required: !enableAutoCert,\n value: clientCertificate.encoded_cert,\n },\n ];\n }\n\n if (encryptionType === \"vault\") {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"vault_endpoint\",\n required: true,\n value: vaultEndpoint,\n },\n {\n fieldKey: \"vault_id\",\n required: true,\n value: vaultId,\n },\n {\n fieldKey: \"vault_secret\",\n required: true,\n value: vaultSecret,\n },\n {\n fieldKey: \"vault_ping\",\n required: false,\n value: vaultPing,\n customValidation: parseInt(vaultPing) < 0,\n customValidationMessage: \"Value needs to be 0 or greater\",\n },\n {\n fieldKey: \"vault_retry\",\n required: false,\n value: vaultRetry,\n customValidation: parseInt(vaultRetry) < 0,\n customValidationMessage: \"Value needs to be 0 or greater\",\n },\n ];\n }\n\n if (encryptionType === \"aws\") {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"aws_endpoint\",\n required: true,\n value: awsEndpoint,\n },\n {\n fieldKey: \"aws_region\",\n required: true,\n value: awsRegion,\n },\n {\n fieldKey: \"aws_accessKey\",\n required: true,\n value: awsAccessKey,\n },\n {\n fieldKey: \"aws_secretKey\",\n required: true,\n value: awsSecretKey,\n },\n ];\n }\n\n if (encryptionType === \"gemalto\") {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"gemalto_endpoint\",\n required: true,\n value: gemaltoEndpoint,\n },\n {\n fieldKey: \"gemalto_token\",\n required: true,\n value: gemaltoToken,\n },\n {\n fieldKey: \"gemalto_domain\",\n required: true,\n value: gemaltoDomain,\n },\n {\n fieldKey: \"gemalto_retry\",\n required: false,\n value: gemaltoRetry,\n customValidation: parseInt(gemaltoRetry) < 0,\n customValidationMessage: \"Value needs to be 0 or greater\",\n },\n ];\n }\n\n if (encryptionType === \"azure\") {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"azure_endpoint\",\n required: true,\n value: azureEndpoint,\n },\n {\n fieldKey: \"azure_tenant_id\",\n required: true,\n value: azureTenantID,\n },\n {\n fieldKey: \"azure_client_id\",\n required: true,\n value: azureClientID,\n },\n {\n fieldKey: \"azure_client_secret\",\n required: true,\n value: azureClientSecret,\n },\n ];\n }\n }\n\n const commonVal = commonFormValidation(encryptionValidation);\n\n isPageValid(\"encryption\", Object.keys(commonVal).length === 0);\n\n setValidationErrors(commonVal);\n }, [\n enableEncryption,\n encryptionType,\n vaultEndpoint,\n vaultEngine,\n vaultId,\n vaultSecret,\n vaultPing,\n vaultRetry,\n awsEndpoint,\n awsRegion,\n awsSecretKey,\n awsAccessKey,\n gemaltoEndpoint,\n gemaltoToken,\n gemaltoDomain,\n gemaltoRetry,\n gcpProjectID,\n gcpEndpoint,\n gcpClientEmail,\n gcpClientID,\n gcpPrivateKeyID,\n gcpPrivateKey,\n azureEndpoint,\n azureTenantID,\n azureClientID,\n azureClientSecret,\n isPageValid,\n enableAutoCert,\n enableCustomCerts,\n serverCertificate.encoded_key,\n serverCertificate.encoded_cert,\n clientCertificate.encoded_key,\n clientCertificate.encoded_cert,\n kesSecurityContext,\n replicas,\n ]);\n\n return (\n \n
\n

Encryption

\n \n How would you like to encrypt the information at rest.\n \n
\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"enableEncryption\", checked);\n }}\n label={\"Enable Server Side Encryption\"}\n disabled={!encryptionAvailable}\n />\n \n {enableEncryption && (\n \n \n {\n updateField(\"encryptionType\", e.target.value);\n }}\n selectorOptions={[\n { label: \"Vault\", value: \"vault\" },\n { label: \"AWS\", value: \"aws\" },\n { label: \"Gemalto\", value: \"gemalto\" },\n { label: \"GCP\", value: \"gcp\" },\n { label: \"Azure\", value: \"azure\" },\n ]}\n />\n \n {encryptionType === \"vault\" && (\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"enableCustomCertsForKES\", checked);\n }}\n label={\"Custom Certificates\"}\n disabled={!enableAutoCert}\n />\n \n {(enableCustomCertsForKES || !enableAutoCert) && (\n \n \n \n
\n \n Encryption Service Certificates\n \n {\n addFileServerCert(\"key\", fileName, encodedValue);\n cleanValidation(\"serverKey\");\n }}\n accept=\".key,.pem\"\n id=\"serverKey\"\n name=\"serverKey\"\n label=\"Key\"\n error={validationErrors[\"serverKey\"] || \"\"}\n value={serverCertificate.key}\n required={!enableAutoCert}\n />\n {\n addFileServerCert(\"cert\", fileName, encodedValue);\n cleanValidation(\"serverCert\");\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"serverCert\"\n name=\"serverCert\"\n label=\"Cert\"\n error={validationErrors[\"serverCert\"] || \"\"}\n value={serverCertificate.cert}\n required={!enableAutoCert}\n />\n
\n
\n
\n\n \n \n
\n \n Mutual TLS authentication\n \n {\n addFileClientCert(\"key\", fileName, encodedValue);\n cleanValidation(\"clientKey\");\n }}\n accept=\".key,.pem\"\n id=\"clientKey\"\n name=\"clientKey\"\n label=\"Key\"\n error={validationErrors[\"clientKey\"] || \"\"}\n value={clientCertificate.key}\n required={!enableAutoCert}\n />\n {\n addFileClientCert(\"cert\", fileName, encodedValue);\n cleanValidation(\"clientCert\");\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"clientCert\"\n name=\"clientCert\"\n label=\"Cert\"\n error={validationErrors[\"clientCert\"] || \"\"}\n value={clientCertificate.cert}\n required={!enableAutoCert}\n />\n
\n
\n
\n
\n )}\n \n ) => {\n updateField(\"vaultEndpoint\", e.target.value);\n cleanValidation(\"vault_endpoint\");\n }}\n label=\"Endpoint\"\n value={vaultEndpoint}\n error={validationErrors[\"vault_endpoint\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"vaultEngine\", e.target.value);\n cleanValidation(\"vault_engine\");\n }}\n label=\"Engine\"\n value={vaultEngine}\n />\n \n \n ) => {\n updateField(\"vaultNamespace\", e.target.value);\n }}\n label=\"Namespace\"\n value={vaultNamespace}\n />\n \n \n ) => {\n updateField(\"vaultPrefix\", e.target.value);\n }}\n label=\"Prefix\"\n value={vaultPrefix}\n />\n \n\n \n
\n App Role\n \n ) => {\n updateField(\"vaultAppRoleEngine\", e.target.value);\n }}\n label=\"Engine\"\n value={vaultAppRoleEngine}\n />\n \n \n ) => {\n updateField(\"vaultId\", e.target.value);\n cleanValidation(\"vault_id\");\n }}\n label=\"AppRole ID\"\n value={vaultId}\n error={validationErrors[\"vault_id\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"vaultSecret\", e.target.value);\n cleanValidation(\"vault_secret\");\n }}\n label=\"AppRole Secret\"\n value={vaultSecret}\n error={validationErrors[\"vault_secret\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"vaultRetry\", e.target.value);\n cleanValidation(\"vault_retry\");\n }}\n label=\"Retry (Seconds)\"\n value={vaultRetry}\n error={validationErrors[\"vault_retry\"] || \"\"}\n />\n \n
\n
\n\n \n
\n \n Mutual TLS authentication (optional)\n \n {\n addFileVaultCert(\"key\", fileName, encodedValue);\n cleanValidation(\"vault_key\");\n }}\n accept=\".key,.pem\"\n id=\"vault_key\"\n name=\"vault_key\"\n label=\"Key\"\n value={vaultCertificate.key}\n />\n {\n addFileVaultCert(\"cert\", fileName, encodedValue);\n cleanValidation(\"vault_cert\");\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"vault_cert\"\n name=\"vault_cert\"\n label=\"Cert\"\n value={vaultCertificate.cert}\n />\n {\n addFileVaultCa(fileName, encodedValue);\n cleanValidation(\"vault_ca\");\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"vault_ca\"\n name=\"vault_ca\"\n label=\"CA\"\n value={vaultCA.cert}\n />\n
\n
\n \n
\n Status\n ) => {\n updateField(\"vaultPing\", e.target.value);\n cleanValidation(\"vault_ping\");\n }}\n label=\"Ping (Seconds)\"\n value={vaultPing}\n error={validationErrors[\"vault_ping\"] || \"\"}\n />\n
\n \n
\n )}\n {encryptionType === \"azure\" && (\n \n \n ) => {\n updateField(\"azureEndpoint\", e.target.value);\n cleanValidation(\"azure_endpoint\");\n }}\n label=\"Endpoint\"\n value={azureEndpoint}\n error={validationErrors[\"azure_endpoint\"] || \"\"}\n />\n \n \n
\n \n Credentials\n \n \n ) => {\n updateField(\"azureTenantID\", e.target.value);\n cleanValidation(\"azure_tenant_id\");\n }}\n label=\"Tenant ID\"\n value={azureTenantID}\n error={validationErrors[\"azure_tenant_id\"] || \"\"}\n />\n \n \n ) => {\n updateField(\"azureClientID\", e.target.value);\n cleanValidation(\"azure_client_id\");\n }}\n label=\"Client ID\"\n value={azureClientID}\n error={validationErrors[\"azure_client_id\"] || \"\"}\n />\n \n \n ) => {\n updateField(\"azureClientSecret\", e.target.value);\n cleanValidation(\"azure_client_secret\");\n }}\n label=\"Client Secret\"\n value={azureClientSecret}\n error={validationErrors[\"azure_client_secret\"] || \"\"}\n />\n \n
\n
\n
\n )}\n {encryptionType === \"gcp\" && (\n \n \n ) => {\n updateField(\"gcpProjectID\", e.target.value);\n }}\n label=\"Project ID\"\n value={gcpProjectID}\n />\n \n \n ) => {\n updateField(\"gcpEndpoint\", e.target.value);\n }}\n label=\"Endpoint\"\n value={gcpEndpoint}\n />\n \n \n
\n \n Credentials\n \n \n ) => {\n updateField(\"gcpClientEmail\", e.target.value);\n }}\n label=\"Client Email\"\n value={gcpClientEmail}\n />\n \n \n ) => {\n updateField(\"gcpClientID\", e.target.value);\n }}\n label=\"Client ID\"\n value={gcpClientID}\n />\n \n \n ) => {\n updateField(\"gcpPrivateKeyID\", e.target.value);\n }}\n label=\"Private Key ID\"\n value={gcpPrivateKeyID}\n />\n \n \n ) => {\n updateField(\"gcpPrivateKey\", e.target.value);\n }}\n label=\"Private Key\"\n value={gcpPrivateKey}\n />\n \n
\n
\n
\n )}\n {encryptionType === \"aws\" && (\n \n \n ) => {\n updateField(\"awsEndpoint\", e.target.value);\n cleanValidation(\"aws_endpoint\");\n }}\n label=\"Endpoint\"\n value={awsEndpoint}\n error={validationErrors[\"aws_endpoint\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"awsRegion\", e.target.value);\n cleanValidation(\"aws_region\");\n }}\n label=\"Region\"\n value={awsRegion}\n error={validationErrors[\"aws_region\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"awsKMSKey\", e.target.value);\n }}\n label=\"KMS Key\"\n value={awsKMSKey}\n />\n \n \n
\n \n Credentials\n \n \n ) => {\n updateField(\"awsAccessKey\", e.target.value);\n cleanValidation(\"aws_accessKey\");\n }}\n label=\"Access Key\"\n value={awsAccessKey}\n error={validationErrors[\"aws_accessKey\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"awsSecretKey\", e.target.value);\n cleanValidation(\"aws_secretKey\");\n }}\n label=\"Secret Key\"\n value={awsSecretKey}\n error={validationErrors[\"aws_secretKey\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"awsToken\", e.target.value);\n }}\n label=\"Token\"\n value={awsToken}\n />\n \n
\n
\n
\n )}\n {encryptionType === \"gemalto\" && (\n \n \n ) => {\n updateField(\"gemaltoEndpoint\", e.target.value);\n cleanValidation(\"gemalto_endpoint\");\n }}\n label=\"Endpoint\"\n value={gemaltoEndpoint}\n error={validationErrors[\"gemalto_endpoint\"] || \"\"}\n required\n />\n \n \n
\n \n Credentials\n \n \n ) => {\n updateField(\"gemaltoToken\", e.target.value);\n cleanValidation(\"gemalto_token\");\n }}\n label=\"Token\"\n value={gemaltoToken}\n error={validationErrors[\"gemalto_token\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"gemaltoDomain\", e.target.value);\n cleanValidation(\"gemalto_domain\");\n }}\n label=\"Domain\"\n value={gemaltoDomain}\n error={validationErrors[\"gemalto_domain\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"gemaltoRetry\", e.target.value);\n cleanValidation(\"gemalto_retry\");\n }}\n label=\"Retry (seconds)\"\n value={gemaltoRetry}\n error={validationErrors[\"gemalto_retry\"] || \"\"}\n />\n \n
\n \n \n
\n \n Custom CA Root certificate verification\n \n\n {\n addFileGemaltoCa(fileName, encodedValue);\n cleanValidation(\"gemalto_ca\");\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"gemalto_ca\"\n name=\"gemalto_ca\"\n label=\"CA\"\n value={gemaltoCA.cert}\n />\n
\n \n
\n )}\n
\n

Additional Configurations

\n
\n \n \n ) => {\n updateField(\"replicas\", e.target.value);\n cleanValidation(\"replicas\");\n }}\n label=\"Replicas\"\n value={replicas}\n required\n error={validationErrors[\"replicas\"] || \"\"}\n />\n \n\n
\n \n SecurityContext for KES pods\n \n \n \n \n ) => {\n updateField(\"kesSecurityContext\", {\n ...kesSecurityContext,\n runAsUser: e.target.value,\n });\n cleanValidation(\"kes_securityContext_runAsUser\");\n }}\n label=\"Run As User\"\n value={kesSecurityContext.runAsUser}\n required\n error={\n validationErrors[\"kes_securityContext_runAsUser\"] || \"\"\n }\n min=\"0\"\n />\n \n \n ) => {\n updateField(\"kesSecurityContext\", {\n ...kesSecurityContext,\n runAsGroup: e.target.value,\n });\n cleanValidation(\"kes_securityContext_runAsGroup\");\n }}\n label=\"Run As Group\"\n value={kesSecurityContext.runAsGroup}\n required\n error={\n validationErrors[\"kes_securityContext_runAsGroup\"] || \"\"\n }\n min=\"0\"\n />\n \n \n ) => {\n updateField(\"kesSecurityContext\", {\n ...kesSecurityContext,\n fsGroup: e.target.value,\n });\n cleanValidation(\"kes_securityContext_fsGroup\");\n }}\n label=\"FsGroup\"\n value={kesSecurityContext.fsGroup}\n required\n error={\n validationErrors[\"kes_securityContext_fsGroup\"] || \"\"\n }\n min=\"0\"\n />\n \n \n \n
\n \n
\n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"kesSecurityContext\", {\n ...kesSecurityContext,\n runAsNonRoot: checked,\n });\n }}\n label={\"Do not run as Root\"}\n />\n
\n
\n
\n
\n
\n )}\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n replicas: state.tenants.createTenant.fields.encryption.replicas,\n enableEncryption:\n state.tenants.createTenant.fields.encryption.enableEncryption,\n encryptionType: state.tenants.createTenant.fields.encryption.encryptionType,\n gemaltoEndpoint: state.tenants.createTenant.fields.encryption.gemaltoEndpoint,\n gemaltoToken: state.tenants.createTenant.fields.encryption.gemaltoToken,\n gemaltoDomain: state.tenants.createTenant.fields.encryption.gemaltoDomain,\n gemaltoRetry: state.tenants.createTenant.fields.encryption.gemaltoRetry,\n awsEndpoint: state.tenants.createTenant.fields.encryption.awsEndpoint,\n awsRegion: state.tenants.createTenant.fields.encryption.awsRegion,\n awsKMSKey: state.tenants.createTenant.fields.encryption.awsKMSKey,\n awsAccessKey: state.tenants.createTenant.fields.encryption.awsAccessKey,\n awsSecretKey: state.tenants.createTenant.fields.encryption.awsSecretKey,\n awsToken: state.tenants.createTenant.fields.encryption.awsToken,\n vaultEndpoint: state.tenants.createTenant.fields.encryption.vaultEndpoint,\n vaultEngine: state.tenants.createTenant.fields.encryption.vaultEngine,\n vaultNamespace: state.tenants.createTenant.fields.encryption.vaultNamespace,\n vaultPrefix: state.tenants.createTenant.fields.encryption.vaultPrefix,\n vaultAppRoleEngine:\n state.tenants.createTenant.fields.encryption.vaultAppRoleEngine,\n vaultId: state.tenants.createTenant.fields.encryption.vaultId,\n vaultSecret: state.tenants.createTenant.fields.encryption.vaultSecret,\n vaultRetry: state.tenants.createTenant.fields.encryption.vaultRetry,\n vaultPing: state.tenants.createTenant.fields.encryption.vaultPing,\n azureEndpoint: state.tenants.createTenant.fields.encryption.azureEndpoint,\n azureTenantID: state.tenants.createTenant.fields.encryption.azureTenantID,\n azureClientID: state.tenants.createTenant.fields.encryption.azureClientID,\n azureClientSecret:\n state.tenants.createTenant.fields.encryption.azureClientSecret,\n gcpProjectID: state.tenants.createTenant.fields.encryption.gcpProjectID,\n gcpEndpoint: state.tenants.createTenant.fields.encryption.gcpEndpoint,\n gcpClientEmail: state.tenants.createTenant.fields.encryption.gcpClientEmail,\n gcpClientID: state.tenants.createTenant.fields.encryption.gcpClientID,\n gcpPrivateKeyID: state.tenants.createTenant.fields.encryption.gcpPrivateKeyID,\n gcpPrivateKey: state.tenants.createTenant.fields.encryption.gcpPrivateKey,\n enableCustomCertsForKES:\n state.tenants.createTenant.fields.encryption.enableCustomCertsForKES,\n enableAutoCert: state.tenants.createTenant.fields.security.enableAutoCert,\n enableTLS: state.tenants.createTenant.fields.security.enableTLS,\n minioCertificates: state.tenants.createTenant.certificates.minioCertificates,\n serverCertificate: state.tenants.createTenant.certificates.serverCertificate,\n clientCertificate: state.tenants.createTenant.certificates.clientCertificate,\n vaultCertificate: state.tenants.createTenant.certificates.vaultCertificate,\n vaultCA: state.tenants.createTenant.certificates.vaultCA,\n gemaltoCA: state.tenants.createTenant.certificates.gemaltoCA,\n enableCustomCerts:\n state.tenants.createTenant.fields.security.enableCustomCerts,\n kesSecurityContext:\n state.tenants.createTenant.fields.encryption.kesSecurityContext,\n});\n\nconst connector = connect(mapState, {\n updateAddField,\n isPageValid,\n addFileServerCert,\n addFileClientCert,\n addFileVaultCert,\n addFileVaultCa,\n addFileGemaltoCa,\n});\n\nexport default withStyles(styles)(connector(Encryption));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Grid, IconButton, Paper, SelectChangeEvent } from \"@mui/material\";\nimport { AppState } from \"../../../../../store\";\nimport { isPageValid, setKeyValuePairs, updateAddField } from \"../../actions\";\nimport { setModalErrorSnackMessage } from \"../../../../../actions\";\nimport {\n modalBasic,\n wizardCommon,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../utils/validationFunctions\";\nimport { ErrorResponseHandler } from \"../../../../../common/types\";\nimport { LabelKeyPair } from \"../../types\";\nimport RadioGroupSelector from \"../../../Common/FormComponents/RadioGroupSelector/RadioGroupSelector\";\nimport FormSwitchWrapper from \"../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport api from \"../../../../../common/api\";\nimport InputBoxWrapper from \"../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport AddIcon from \"../../../../../icons/AddIcon\";\nimport RemoveIcon from \"../../../../../icons/RemoveIcon\";\nimport SelectWrapper from \"../../../Common/FormComponents/SelectWrapper/SelectWrapper\";\n\ninterface IAffinityProps {\n classes: any;\n podAffinity: string;\n nodeSelectorLabels: string;\n withPodAntiAffinity: boolean;\n keyValuePairs: LabelKeyPair[];\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n setKeyValuePairs: typeof setKeyValuePairs;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n overlayAction: {\n marginLeft: 10,\n \"& svg\": {\n maxWidth: 15,\n maxHeight: 15,\n },\n \"& button\": {\n background: \"#EAEAEA\",\n },\n },\n affinityConfigField: {\n display: \"flex\",\n },\n affinityFieldLabel: {\n display: \"flex\",\n flexFlow: \"column\",\n flex: 1,\n },\n radioField: {\n display: \"flex\",\n alignItems: \"flex-start\",\n marginTop: 10,\n \"& div:first-child\": {\n display: \"flex\",\n flexFlow: \"column\",\n alignItems: \"baseline\",\n textAlign: \"left !important\",\n },\n },\n affinityLabelKey: {\n \"& div:first-child\": {\n marginBottom: 0,\n },\n },\n affinityLabelValue: {\n marginLeft: 10,\n \"& div:first-child\": {\n marginBottom: 0,\n },\n },\n rowActions: {\n display: \"flex\",\n alignItems: \"center\",\n },\n fieldContainer: {\n marginBottom: 0,\n },\n affinityRow: {\n marginBottom: 10,\n display: \"flex\",\n },\n ...modalBasic,\n ...wizardCommon,\n });\n\ninterface OptionPair {\n label: string;\n value: string;\n}\n\nconst Affinity = ({\n classes,\n podAffinity,\n nodeSelectorLabels,\n withPodAntiAffinity,\n setModalErrorSnackMessage,\n updateAddField,\n keyValuePairs,\n setKeyValuePairs,\n isPageValid,\n}: IAffinityProps) => {\n const [validationErrors, setValidationErrors] = useState({});\n const [loading, setLoading] = useState(true);\n const [keyValueMap, setKeyValueMap] = useState<{ [key: string]: string[] }>(\n {}\n );\n const [keyOptions, setKeyOptions] = useState([]);\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n updateAddField(\"affinity\", field, value);\n },\n [updateAddField]\n );\n\n useEffect(() => {\n if (loading) {\n api\n .invoke(\"GET\", `/api/v1/nodes/labels`)\n .then((res: { [key: string]: string[] }) => {\n setLoading(false);\n setKeyValueMap(res);\n let keys: OptionPair[] = [];\n for (let k in res) {\n keys.push({\n label: k,\n value: k,\n });\n }\n setKeyOptions(keys);\n })\n .catch((err: ErrorResponseHandler) => {\n setLoading(false);\n setModalErrorSnackMessage(err);\n setKeyValueMap({});\n });\n }\n }, [setModalErrorSnackMessage, loading]);\n\n useEffect(() => {\n if (keyValuePairs) {\n const vlr = keyValuePairs\n .filter((kvp) => kvp.key !== \"\")\n .map((kvp) => `${kvp.key}=${kvp.value}`)\n .filter((kvs, i, a) => a.indexOf(kvs) === i);\n const vl = vlr.join(\"&\");\n updateField(\"nodeSelectorLabels\", vl);\n }\n }, [keyValuePairs, updateField]);\n\n // Validation\n useEffect(() => {\n let customAccountValidation: IValidation[] = [];\n\n if (podAffinity === \"nodeSelector\") {\n let valid = true;\n\n const splittedLabels = nodeSelectorLabels.split(\"&\");\n\n if (splittedLabels.length === 1 && splittedLabels[0] === \"\") {\n valid = false;\n }\n\n splittedLabels.forEach((item: string, index: number) => {\n const splitItem = item.split(\"=\");\n\n if (splitItem.length !== 2) {\n valid = false;\n }\n\n if (index + 1 !== splittedLabels.length) {\n if (splitItem[0] === \"\" || splitItem[1] === \"\") {\n valid = false;\n }\n }\n });\n\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"labels\",\n required: true,\n value: nodeSelectorLabels,\n customValidation: !valid,\n customValidationMessage:\n \"You need to add at least one label key-pair\",\n },\n ];\n }\n\n const commonVal = commonFormValidation(customAccountValidation);\n\n isPageValid(\"affinity\", Object.keys(commonVal).length === 0);\n\n setValidationErrors(commonVal);\n }, [isPageValid, podAffinity, nodeSelectorLabels]);\n\n return (\n \n
\n

Pod Placement

\n \n Configure how pods will be assigned to nodes\n \n
\n \n \n
Type
\n \n MinIO supports multiple configurations for Pod Affinity\n \n \n {\n updateField(\"podAffinity\", e.target.value);\n }}\n selectorOptions={[\n { label: \"None\", value: \"none\" },\n { label: \"Default (Pod Anti-Affinnity)\", value: \"default\" },\n { label: \"Node Selector\", value: \"nodeSelector\" },\n ]}\n />\n \n
\n
\n {podAffinity === \"nodeSelector\" && (\n \n
\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"withPodAntiAffinity\", checked);\n }}\n label={\"With Pod Anti-Affinity\"}\n />\n \n \n

Labels

\n {validationErrors[\"labels\"]}\n \n {keyValuePairs &&\n keyValuePairs.map((kvp, i) => {\n return (\n \n \n {keyOptions.length > 0 && (\n ) => {\n const newKey = e.target.value as string;\n const arrCp: LabelKeyPair[] = Object.assign(\n [],\n keyValuePairs\n );\n\n arrCp[i].key = e.target.value as string;\n arrCp[i].value = keyValueMap[newKey][0];\n setKeyValuePairs(arrCp);\n }}\n id=\"select-access-policy\"\n name=\"select-access-policy\"\n label={\"\"}\n value={kvp.key}\n options={keyOptions}\n />\n )}\n {keyOptions.length === 0 && (\n {\n const arrCp: LabelKeyPair[] = Object.assign(\n [],\n keyValuePairs\n );\n arrCp[i].key = e.target.value;\n setKeyValuePairs(arrCp);\n }}\n index={i}\n placeholder={\"Key\"}\n />\n )}\n \n \n {keyOptions.length > 0 && (\n ) => {\n const arrCp: LabelKeyPair[] = Object.assign(\n [],\n keyValuePairs\n );\n arrCp[i].value = e.target.value as string;\n setKeyValuePairs(arrCp);\n }}\n id=\"select-access-policy\"\n name=\"select-access-policy\"\n label={\"\"}\n value={kvp.value}\n options={\n keyValueMap[kvp.key]\n ? keyValueMap[kvp.key].map((v) => {\n return { label: v, value: v };\n })\n : []\n }\n />\n )}\n {keyOptions.length === 0 && (\n {\n const arrCp: LabelKeyPair[] = Object.assign(\n [],\n keyValuePairs\n );\n arrCp[i].value = e.target.value;\n setKeyValuePairs(arrCp);\n }}\n index={i}\n placeholder={\"value\"}\n />\n )}\n \n \n
\n {\n const arrCp = Object.assign([], keyValuePairs);\n if (keyOptions.length > 0) {\n arrCp.push({\n key: keyOptions[0].value,\n value: keyValueMap[keyOptions[0].value][0],\n });\n } else {\n arrCp.push({ key: \"\", value: \"\" });\n }\n\n setKeyValuePairs(arrCp);\n }}\n >\n \n \n
\n {keyValuePairs.length > 1 && (\n
\n {\n const arrCp = keyValuePairs.filter(\n (item, index) => index !== i\n );\n setKeyValuePairs(arrCp);\n }}\n >\n \n \n
\n )}\n
\n
\n );\n })}\n
\n \n
\n )}\n
\n );\n};\n\nconst mapState = (state: AppState) => {\n const createTenant = state.tenants.createTenant;\n\n return {\n podAffinity: createTenant.fields.affinity.podAffinity,\n nodeSelectorLabels: createTenant.fields.affinity.nodeSelectorLabels,\n withPodAntiAffinity: createTenant.fields.affinity.withPodAntiAffinity,\n keyValuePairs: createTenant.nodeSelectorPairs,\n };\n};\n\nconst connector = connect(mapState, {\n setModalErrorSnackMessage,\n updateAddField,\n isPageValid,\n setKeyValuePairs,\n});\n\nexport default withStyles(styles)(connector(Affinity));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Grid, Paper } from \"@mui/material\";\nimport {\n formFieldStyles,\n modalBasic,\n wizardCommon,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\nimport { isPageValid, updateAddField } from \"../../actions\";\nimport { AppState } from \"../../../../../store\";\nimport { clearValidationError } from \"../../utils\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../utils/validationFunctions\";\nimport FormSwitchWrapper from \"../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport InputBoxWrapper from \"../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\n\ninterface IImagesProps {\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n storageClasses: any;\n classes: any;\n customImage: boolean;\n imageName: string;\n customDockerhub: boolean;\n imageRegistry: string;\n imageRegistryUsername: string;\n imageRegistryPassword: string;\n exposeMinIO: boolean;\n exposeConsole: boolean;\n prometheusCustom: boolean;\n tenantCustom: boolean;\n logSearchCustom: boolean;\n logSearchVolumeSize: string;\n logSearchSizeFactor: string;\n prometheusVolumeSize: string;\n prometheusSizeFactor: string;\n logSearchSelectedStorageClass: string;\n logSearchImage: string;\n kesImage: string;\n logSearchPostgresImage: string;\n logSearchPostgresInitImage: string;\n prometheusSelectedStorageClass: string;\n prometheusImage: string;\n prometheusSidecarImage: string;\n prometheusInitImage: string;\n selectedStorageClass: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...formFieldStyles,\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst Images = ({\n classes,\n storageClasses,\n customImage,\n imageName,\n customDockerhub,\n imageRegistry,\n imageRegistryUsername,\n imageRegistryPassword,\n exposeMinIO,\n exposeConsole,\n prometheusCustom,\n tenantCustom,\n logSearchCustom,\n logSearchVolumeSize,\n logSearchSizeFactor,\n logSearchImage,\n kesImage,\n logSearchPostgresImage,\n logSearchPostgresInitImage,\n prometheusVolumeSize,\n prometheusSizeFactor,\n logSearchSelectedStorageClass,\n prometheusSelectedStorageClass,\n prometheusImage,\n prometheusSidecarImage,\n prometheusInitImage,\n updateAddField,\n isPageValid,\n selectedStorageClass,\n}: IImagesProps) => {\n const [validationErrors, setValidationErrors] = useState({});\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n updateAddField(\"configure\", field, value);\n },\n [updateAddField]\n );\n\n // Validation\n useEffect(() => {\n let customAccountValidation: IValidation[] = [];\n\n if (prometheusCustom) {\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"prometheus_storage_class\",\n required: true,\n value: prometheusSelectedStorageClass,\n customValidation: prometheusSelectedStorageClass === \"\",\n customValidationMessage: \"Field cannot be empty\",\n },\n {\n fieldKey: \"prometheus_volume_size\",\n required: true,\n value: prometheusVolumeSize,\n customValidation:\n prometheusVolumeSize === \"\" || parseInt(prometheusVolumeSize) <= 0,\n customValidationMessage: `Volume size must be present and be greatter than 0`,\n },\n ];\n }\n if (logSearchCustom) {\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"log_search_storage_class\",\n required: true,\n value: logSearchSelectedStorageClass,\n customValidation: logSearchSelectedStorageClass === \"\",\n customValidationMessage: \"Field cannot be empty\",\n },\n {\n fieldKey: \"log_search_volume_size\",\n required: true,\n value: logSearchVolumeSize,\n customValidation:\n logSearchVolumeSize === \"\" || parseInt(logSearchVolumeSize) <= 0,\n customValidationMessage: `Volume size must be present and be greatter than 0`,\n },\n ];\n }\n\n if (customImage) {\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"image\",\n required: false,\n value: imageName,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage: \"Format must be of form: 'minio/minio:VERSION'\",\n },\n {\n fieldKey: \"logSearchImage\",\n required: false,\n value: logSearchImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage:\n \"Format must be of form: 'minio/logsearchapi:VERSION'\",\n },\n {\n fieldKey: \"kesImage\",\n required: false,\n value: kesImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage: \"Format must be of form: 'minio/kes:VERSION'\",\n },\n {\n fieldKey: \"logSearchPostgresImage\",\n required: false,\n value: logSearchPostgresImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage:\n \"Format must be of form: 'library/postgres:VERSION'\",\n },\n {\n fieldKey: \"logSearchPostgresInitImage\",\n required: false,\n value: logSearchPostgresInitImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage:\n \"Format must be of form: 'library/busybox:VERSION'\",\n },\n {\n fieldKey: \"prometheusImage\",\n required: false,\n value: prometheusImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage:\n \"Format must be of form: 'minio/prometheus:VERSION'\",\n },\n {\n fieldKey: \"prometheusSidecarImage\",\n required: false,\n value: prometheusSidecarImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage:\n \"Format must be of form: 'project/container:VERSION'\",\n },\n {\n fieldKey: \"prometheusInitImage\",\n required: false,\n value: prometheusInitImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage:\n \"Format must be of form: 'library/busybox:VERSION'\",\n },\n ];\n if (customDockerhub) {\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"registry\",\n required: true,\n value: imageRegistry,\n },\n {\n fieldKey: \"registryUsername\",\n required: true,\n value: imageRegistryUsername,\n },\n {\n fieldKey: \"registryPassword\",\n required: true,\n value: imageRegistryPassword,\n },\n ];\n }\n }\n\n const commonVal = commonFormValidation(customAccountValidation);\n\n isPageValid(\"configure\", Object.keys(commonVal).length === 0);\n\n setValidationErrors(commonVal);\n }, [\n customImage,\n imageName,\n logSearchImage,\n kesImage,\n logSearchPostgresImage,\n logSearchPostgresInitImage,\n prometheusImage,\n prometheusSidecarImage,\n prometheusInitImage,\n customDockerhub,\n imageRegistry,\n imageRegistryUsername,\n imageRegistryPassword,\n isPageValid,\n prometheusCustom,\n tenantCustom,\n logSearchCustom,\n prometheusSelectedStorageClass,\n prometheusVolumeSize,\n logSearchSelectedStorageClass,\n logSearchVolumeSize,\n ]);\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n return (\n \n
\n

Container Images

\n \n Images used by the Tenant Deployment\n \n
\n\n \n \n ) => {\n updateField(\"imageName\", e.target.value);\n cleanValidation(\"image\");\n }}\n label=\"MinIO's Image\"\n value={imageName}\n error={validationErrors[\"image\"] || \"\"}\n placeholder=\"E.g. minio/minio:RELEASE.2022-01-08T03-11-54Z\"\n />\n \n \n ) => {\n updateField(\"logSearchImage\", e.target.value);\n cleanValidation(\"logSearchImage\");\n }}\n label=\"Log Search API's Image\"\n value={logSearchImage}\n error={validationErrors[\"logSearchImage\"] || \"\"}\n placeholder=\"E.g. minio/logsearchapi:v4.1.1\"\n />\n \n \n ) => {\n updateField(\"kesImage\", e.target.value);\n cleanValidation(\"kesImage\");\n }}\n label=\"KES Image\"\n value={kesImage}\n error={validationErrors[\"kesImage\"] || \"\"}\n placeholder=\"E.g. minio/kes:v0.14.0\"\n />\n \n \n ) => {\n updateField(\"logSearchPostgresImage\", e.target.value);\n cleanValidation(\"logSearchPostgresImage\");\n }}\n label=\"Log Search Postgres's Image\"\n value={logSearchPostgresImage}\n error={validationErrors[\"logSearchPostgresImage\"] || \"\"}\n placeholder=\"E.g. library/postgres:13\"\n />\n \n \n ) => {\n updateField(\"logSearchPostgresInitImage\", e.target.value);\n cleanValidation(\"logSearchPostgresInitImage\");\n }}\n label=\"Log Search Postgres's Init Image\"\n value={logSearchPostgresInitImage}\n error={validationErrors[\"logSearchPostgresInitImage\"] || \"\"}\n placeholder=\"E.g. library/busybox:1.33.1\"\n />\n \n \n ) => {\n updateField(\"prometheusImage\", e.target.value);\n cleanValidation(\"prometheusImage\");\n }}\n label=\"Prometheus Image\"\n value={prometheusImage}\n error={validationErrors[\"prometheusImage\"] || \"\"}\n placeholder=\"E.g. quay.io/prometheus/prometheus:latest\"\n />\n \n \n ) => {\n updateField(\"prometheusSidecarImage\", e.target.value);\n cleanValidation(\"prometheusSidecarImage\");\n }}\n label=\"Prometheus Sidecar Image\"\n value={prometheusSidecarImage}\n error={validationErrors[\"prometheusSidecarImage\"] || \"\"}\n placeholder=\"E.g. quay.io/prometheus/prometheus:latest\"\n />\n \n \n ) => {\n updateField(\"prometheusInitImage\", e.target.value);\n cleanValidation(\"prometheusInitImage\");\n }}\n label=\"Prometheus Init Image\"\n value={prometheusInitImage}\n error={validationErrors[\"prometheusInitImage\"] || \"\"}\n placeholder=\"E.g. quay.io/prometheus/prometheus:latest\"\n />\n \n \n\n {customImage && (\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"customDockerhub\", checked);\n }}\n label={\"Set/Update Image Registry\"}\n />\n \n \n )}\n {customDockerhub && (\n \n \n ) => {\n updateField(\"imageRegistry\", e.target.value);\n }}\n label=\"Endpoint\"\n value={imageRegistry}\n error={validationErrors[\"registry\"] || \"\"}\n placeholder=\"E.g. https://index.docker.io/v1/\"\n required\n />\n \n \n ) => {\n updateField(\"imageRegistryUsername\", e.target.value);\n }}\n label=\"Username\"\n value={imageRegistryUsername}\n error={validationErrors[\"registryUsername\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"imageRegistryPassword\", e.target.value);\n }}\n label=\"Password\"\n value={imageRegistryPassword}\n error={validationErrors[\"registryPassword\"] || \"\"}\n required\n />\n \n \n )}\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n storageClasses: state.tenants.createTenant.storageClasses,\n customImage: state.tenants.createTenant.fields.configure.customImage,\n imageName: state.tenants.createTenant.fields.configure.imageName,\n customDockerhub: state.tenants.createTenant.fields.configure.customDockerhub,\n imageRegistry: state.tenants.createTenant.fields.configure.imageRegistry,\n imageRegistryUsername:\n state.tenants.createTenant.fields.configure.imageRegistryUsername,\n imageRegistryPassword:\n state.tenants.createTenant.fields.configure.imageRegistryPassword,\n exposeMinIO: state.tenants.createTenant.fields.configure.exposeMinIO,\n exposeConsole: state.tenants.createTenant.fields.configure.exposeConsole,\n prometheusCustom:\n state.tenants.createTenant.fields.configure.prometheusCustom,\n tenantCustom: state.tenants.createTenant.fields.configure.tenantCustom,\n logSearchCustom: state.tenants.createTenant.fields.configure.logSearchCustom,\n logSearchVolumeSize:\n state.tenants.createTenant.fields.configure.logSearchVolumeSize,\n logSearchSizeFactor:\n state.tenants.createTenant.fields.configure.logSearchSizeFactor,\n prometheusVolumeSize:\n state.tenants.createTenant.fields.configure.prometheusVolumeSize,\n prometheusSizeFactor:\n state.tenants.createTenant.fields.configure.prometheusSizeFactor,\n logSearchSelectedStorageClass:\n state.tenants.createTenant.fields.configure.logSearchSelectedStorageClass,\n logSearchImage: state.tenants.createTenant.fields.configure.logSearchImage,\n kesImage: state.tenants.createTenant.fields.configure.kesImage,\n logSearchPostgresImage:\n state.tenants.createTenant.fields.configure.logSearchPostgresImage,\n logSearchPostgresInitImage:\n state.tenants.createTenant.fields.configure.logSearchPostgresInitImage,\n prometheusSelectedStorageClass:\n state.tenants.createTenant.fields.configure.prometheusSelectedStorageClass,\n prometheusImage: state.tenants.createTenant.fields.configure.prometheusImage,\n prometheusSidecarImage:\n state.tenants.createTenant.fields.configure.prometheusSidecarImage,\n prometheusInitImage:\n state.tenants.createTenant.fields.configure.prometheusInitImage,\n selectedStorageClass:\n state.tenants.createTenant.fields.nameTenant.selectedStorageClass,\n});\n\nconst connector = connect(mapState, {\n updateAddField,\n isPageValid,\n});\n\nexport default withStyles(styles)(connector(Images));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { DialogContentText, LinearProgress } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n deleteDialogStyles,\n modalBasic,\n} from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport { setErrorSnackMessage } from \"../../../../../../actions\";\nimport { ErrorResponseHandler } from \"../../../../../../common/types\";\nimport api from \"../../../../../../common/api\";\nimport ConfirmDialog from \"../../../../Common/ModalWrapper/ConfirmDialog\";\nimport { ConfirmModalIcon } from \"../../../../../../icons\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n wrapText: {\n maxWidth: \"200px\",\n whiteSpace: \"normal\",\n wordWrap: \"break-word\",\n },\n ...modalBasic,\n ...deleteDialogStyles,\n });\n\ninterface IAddNamespace {\n classes: any;\n namespace: string;\n addNamespaceOpen: boolean;\n closeAddNamespaceModalAndRefresh: (reloadNamespaceData: boolean) => void;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst AddNamespaceModal = ({\n classes,\n namespace,\n addNamespaceOpen,\n closeAddNamespaceModalAndRefresh,\n setErrorSnackMessage,\n}: IAddNamespace) => {\n const [addNamespaceLoading, setAddNamespaceLoading] =\n useState(false);\n\n useEffect(() => {\n if (addNamespaceLoading) {\n api\n .invoke(\"POST\", \"/api/v1/namespace\", {\n name: namespace,\n })\n .then((res) => {\n setAddNamespaceLoading(false);\n closeAddNamespaceModalAndRefresh(true);\n })\n .catch((err: ErrorResponseHandler) => {\n setAddNamespaceLoading(false);\n setErrorSnackMessage(err);\n });\n }\n }, [\n addNamespaceLoading,\n closeAddNamespaceModalAndRefresh,\n namespace,\n setErrorSnackMessage,\n ]);\n\n const addNamespace = () => {\n setAddNamespaceLoading(true);\n };\n\n return (\n }\n isLoading={addNamespaceLoading}\n onConfirm={addNamespace}\n onClose={() => {\n closeAddNamespaceModalAndRefresh(false);\n }}\n confirmationContent={\n \n {addNamespaceLoading && }\n \n Are you sure you want to add a namespace called\n
\n {namespace}?\n
\n
\n }\n />\n );\n};\n\nconst mapDispatchToProps = {\n setErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(AddNamespaceModal));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { AppState } from \"../../../../../store\";\nimport { isPageValid, updateAddField } from \"../../actions\";\nimport {\n modalBasic,\n wizardCommon,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\nimport Table from \"@mui/material/Table\";\nimport TableBody from \"@mui/material/TableBody\";\nimport TableCell from \"@mui/material/TableCell\";\nimport TableRow from \"@mui/material/TableRow\";\nimport { niceBytes } from \"../../../../../common/utils\";\nimport { Opts } from \"../../ListTenants/utils\";\nimport { IResourcesSize } from \"../../ListTenants/types\";\nimport { IErasureCodeCalc } from \"../../../../../common/types\";\n\nimport { Divider } from \"@mui/material\";\nimport { IntegrationConfiguration } from \"./TenantResources/utils\";\n\ninterface ISizePreviewProps {\n classes: any;\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n volumeSize: string;\n sizeFactor: string;\n drivesPerServer: string;\n nodes: string;\n memoryNode: string;\n ecParity: string;\n ecParityChoices: Opts[];\n cleanECChoices: string[];\n resourcesSize: IResourcesSize;\n distribution: any;\n ecParityCalc: IErasureCodeCalc;\n limitSize: any;\n selectedStorageClass: string;\n cpuToUse: string;\n integrationSelection: IntegrationConfiguration;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n margin: 4,\n },\n table: {\n \"& .MuiTableCell-root\": {\n fontSize: 13,\n },\n },\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst SizePreview = ({\n classes,\n nodes,\n memoryNode,\n ecParity,\n distribution,\n ecParityCalc,\n cpuToUse,\n integrationSelection,\n}: ISizePreviewProps) => {\n const usableInformation = ecParityCalc.storageFactors.find(\n (element) => element.erasureCode === ecParity\n );\n\n return (\n
\n

Resource Allocation

\n \n \n \n \n Number of Servers\n \n {parseInt(nodes) > 0 ? nodes : \"-\"}\n \n \n {integrationSelection.typeSelection === \"\" &&\n integrationSelection.storageClass === \"\" && (\n \n \n Drives per Server\n \n {distribution ? distribution.disks : \"-\"}\n \n \n \n Drive Capacity\n \n {distribution ? niceBytes(distribution.pvSize) : \"-\"}\n \n \n \n )}\n\n \n Total Volumes\n \n {distribution ? distribution.persistentVolumes : \"-\"}\n \n \n {integrationSelection.typeSelection === \"\" &&\n integrationSelection.storageClass === \"\" && (\n \n \n Memory per Node\n {memoryNode} Gi\n \n \n \n CPU Selection\n \n \n {cpuToUse}\n \n \n \n )}\n \n
\n {ecParityCalc.error === 0 && usableInformation && (\n \n

Erasure Code Configuration

\n \n \n \n \n EC Parity\n \n {ecParity !== \"\" ? ecParity : \"-\"}\n \n \n \n Raw Capacity\n \n {niceBytes(ecParityCalc.rawCapacity)}\n \n \n \n Usable Capacity\n \n {niceBytes(usableInformation.maxCapacity)}\n \n \n \n \n Server Failures Tolerated\n \n \n {distribution\n ? Math.floor(\n usableInformation.maxFailureTolerations /\n distribution.disks\n )\n : \"-\"}\n \n \n \n \n
\n )}\n {integrationSelection.typeSelection !== \"\" &&\n integrationSelection.storageClass !== \"\" && (\n \n

Single Instance Configuration

\n \n \n \n \n CPU\n \n {integrationSelection.CPU !== 0\n ? integrationSelection.CPU\n : \"-\"}\n \n \n \n Memory\n \n {integrationSelection.memory !== 0\n ? `${integrationSelection.memory} Gi`\n : \"-\"}\n \n \n \n Drives per Server\n \n {integrationSelection.drivesPerServer !== 0\n ? `${integrationSelection.drivesPerServer}`\n : \"-\"}\n \n \n \n \n Drive Size\n \n \n {integrationSelection.driveSize.driveSize}\n {integrationSelection.driveSize.sizeUnit}\n \n \n \n \n
\n )}\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n volumeSize: state.tenants.createTenant.fields.tenantSize.volumeSize,\n sizeFactor: state.tenants.createTenant.fields.tenantSize.sizeFactor,\n drivesPerServer: state.tenants.createTenant.fields.tenantSize.drivesPerServer,\n nodes: state.tenants.createTenant.fields.tenantSize.nodes,\n memoryNode:\n state.tenants.createTenant.fields.tenantSize.resourcesMemoryRequest,\n ecParity: state.tenants.createTenant.fields.tenantSize.ecParity,\n ecParityChoices: state.tenants.createTenant.fields.tenantSize.ecParityChoices,\n cleanECChoices: state.tenants.createTenant.fields.tenantSize.cleanECChoices,\n resourcesSize: state.tenants.createTenant.fields.tenantSize.resourcesSize,\n distribution: state.tenants.createTenant.fields.tenantSize.distribution,\n ecParityCalc: state.tenants.createTenant.fields.tenantSize.ecParityCalc,\n limitSize: state.tenants.createTenant.fields.tenantSize.limitSize,\n selectedStorageClass:\n state.tenants.createTenant.fields.nameTenant.selectedStorageClass,\n cpuToUse: state.tenants.createTenant.fields.tenantSize.resourcesCPURequest,\n integrationSelection:\n state.tenants.createTenant.fields.tenantSize.integrationSelection,\n});\n\nconst connector = connect(mapState, {\n updateAddField,\n isPageValid,\n});\n\nexport default withStyles(styles)(connector(SizePreview));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport get from \"lodash/get\";\nimport { AppState } from \"../../../../../../store\";\nimport { isPageValid, updateAddField } from \"../../../actions\";\nimport {\n formFieldStyles,\n modalBasic,\n wizardCommon,\n} from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport Grid from \"@mui/material/Grid\";\nimport { IResourcesSize } from \"../../../ListTenants/types\";\nimport { AllocableResourcesResponse } from \"../../../types\";\nimport api from \"../../../../../../common/api\";\nimport InputBoxWrapper from \"../../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport FormSwitchWrapper from \"../../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport { floor } from \"lodash\";\nimport InputUnitMenu from \"../../../../Common/FormComponents/InputUnitMenu/InputUnitMenu\";\n\ninterface ITenantSizeResourcesProps {\n classes: any;\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n nodes: string;\n resourcesSize: IResourcesSize;\n selectedStorageClass: string;\n maxAllocatableResources: AllocableResourcesResponse;\n maxCPUsUse: string;\n maxMemorySize: string;\n\n resourcesSpecifyLimit: boolean;\n resourcesCPURequestError: string;\n resourcesCPURequest: string;\n resourcesCPULimitError: string;\n resourcesCPULimit: string;\n resourcesMemoryRequestError: string;\n resourcesMemoryRequest: string;\n resourcesMemoryLimitError: string;\n resourcesMemoryLimit: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n compositeFieldContainer: {\n display: \"flex\",\n alignItems: \"center\",\n },\n compositeAddOn: {\n marginLeft: 10,\n \"& div\": {\n marginBottom: 0,\n },\n \"@media (max-width: 900px)\": {\n \"& div\": {\n marginTop: 5,\n },\n },\n },\n ...formFieldStyles,\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst TenantSizeResources = ({\n classes,\n updateAddField,\n isPageValid,\n nodes,\n\n resourcesSize,\n selectedStorageClass,\n maxAllocatableResources,\n maxCPUsUse,\n maxMemorySize,\n resourcesSpecifyLimit,\n resourcesCPURequestError,\n resourcesCPURequest,\n resourcesCPULimitError,\n resourcesCPULimit,\n resourcesMemoryRequestError,\n resourcesMemoryRequest,\n resourcesMemoryLimitError,\n resourcesMemoryLimit,\n}: ITenantSizeResourcesProps) => {\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n updateAddField(\"tenantSize\", field, value);\n },\n [updateAddField]\n );\n\n /*Debounce functions*/\n\n useEffect(() => {\n isPageValid(\n \"tenantSize\",\n resourcesMemoryRequestError === \"\" &&\n resourcesMemoryLimitError === \"\" &&\n resourcesCPURequestError === \"\" &&\n resourcesCPULimitError === \"\"\n );\n }, [\n isPageValid,\n resourcesMemoryRequestError,\n resourcesMemoryLimitError,\n resourcesCPURequestError,\n resourcesCPULimitError,\n ]);\n\n /*End debounce functions*/\n\n /*Calculate Allocation*/\n useEffect(() => {\n // Get allocatable Resources\n api\n .invoke(\"GET\", `api/v1/cluster/allocatable-resources?num_nodes=${nodes}`)\n .then((res: AllocableResourcesResponse) => {\n updateField(\"maxAllocatableResources\", res);\n\n const maxAllocatableResources = res;\n\n const memoryExists = get(\n maxAllocatableResources,\n \"min_allocatable_mem\",\n false\n );\n\n const cpuExists = get(\n maxAllocatableResources,\n \"min_allocatable_cpu\",\n false\n );\n\n if (memoryExists === false || cpuExists === false) {\n updateField(\"cpuToUse\", 0);\n\n updateField(\"maxMemorySize\", \"\");\n updateField(\"maxCPUsUse\", \"\");\n\n return;\n }\n\n const maxMemory = floor(\n res.mem_priority.max_allocatable_mem / 1024 / 1024 / 1024\n );\n // We default to Best CPU Configuration\n updateField(\"maxMemorySize\", maxMemory.toString());\n updateField(\n \"maxCPUsUse\",\n res.cpu_priority.max_allocatable_cpu.toString()\n );\n\n const maxAllocatableCPU = get(\n maxAllocatableResources,\n \"cpu_priority.max_allocatable_cpu\",\n 0\n );\n\n const baseCpuUse = Math.max(1, floor(maxAllocatableCPU / 2));\n if (resourcesCPURequest === \"\") {\n updateField(\"resourcesCPURequest\", baseCpuUse);\n }\n\n const baseMemoryUse = Math.max(2, floor(maxMemory / 2));\n if (resourcesMemoryRequest === \"\") {\n updateField(\"resourcesMemoryRequest\", baseMemoryUse);\n }\n })\n .catch((err: any) => {\n updateField(\"maxMemorySize\", 0);\n updateField(\"resourcesCPURequest\", \"\");\n updateField(\"resourcesMemoryRequest\", \"\");\n\n console.error(err);\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [nodes, updateField]);\n\n /*Calculate Allocation End*/\n\n return (\n \n \n
\n

Resources

\n \n You may specify the amount of CPU and Memory that MinIO servers\n should reserve on each node.\n \n
\n
\n {resourcesSize.error !== \"\" && (\n \n
{resourcesSize.error}
\n
\n )}\n\n \n {\n let value = parseInt(e.target.value);\n if (e.target.value === \"\") {\n updateField(\"resourcesCPURequestError\", \"\");\n } else if (isNaN(value)) {\n updateField(\"resourcesCPURequestError\", \"Invalid number\");\n } else if (value > parseInt(maxCPUsUse)) {\n updateField(\n \"resourcesCPURequestError\",\n `Request exceeds available cores (${maxCPUsUse})`\n );\n } else if (e.target.validity.valid) {\n updateField(\"resourcesCPURequestError\", \"\");\n } else {\n updateField(\"resourcesCPURequestError\", \"Invalid configuration\");\n }\n updateField(\"resourcesCPURequest\", e.target.value);\n }}\n value={resourcesCPURequest}\n disabled={selectedStorageClass === \"\"}\n max={maxCPUsUse}\n error={resourcesCPURequestError}\n pattern={\"[0-9]*\"}\n />\n \n\n \n ) => {\n let value = parseInt(e.target.value);\n if (e.target.value === \"\") {\n updateField(\"resourcesMemoryRequestError\", \"\");\n } else if (isNaN(value)) {\n updateField(\"resourcesMemoryRequestError\", \"Invalid number\");\n } else if (value > parseInt(maxMemorySize)) {\n updateField(\n \"resourcesMemoryRequestError\",\n `Request exceeds available memory across ${nodes} nodes (${maxMemorySize}Gi)`\n );\n } else if (value < 2) {\n updateField(\n \"resourcesMemoryRequestError\",\n \"At least 2Gi must be requested\"\n );\n } else if (e.target.validity.valid) {\n updateField(\"resourcesMemoryRequestError\", \"\");\n } else {\n updateField(\n \"resourcesMemoryRequestError\",\n \"Invalid configuration\"\n );\n }\n updateField(\"resourcesMemoryRequest\", e.target.value);\n }}\n label=\"Memory Request\"\n overlayObject={\n {}}\n unitSelected={\"Gi\"}\n unitsList={[{ label: \"Gi\", value: \"Gi\" }]}\n disabled={true}\n />\n }\n value={resourcesMemoryRequest}\n disabled={selectedStorageClass === \"\"}\n error={resourcesMemoryRequestError}\n pattern={\"[0-9]*\"}\n />\n \n\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"resourcesSpecifyLimit\", checked);\n }}\n label={\"Specify Limit\"}\n />\n \n\n {resourcesSpecifyLimit && (\n \n \n {\n let value = parseInt(e.target.value);\n if (e.target.value === \"\") {\n updateField(\"resourcesCPULimitError\", \"\");\n } else if (isNaN(value)) {\n updateField(\"resourcesCPULimitError\", \"Invalid number\");\n } else if (e.target.validity.valid) {\n updateField(\"resourcesCPULimitError\", \"\");\n } else {\n updateField(\n \"resourcesCPULimitError\",\n \"Invalid configuration\"\n );\n }\n updateField(\"resourcesCPULimit\", e.target.value);\n }}\n value={resourcesCPULimit}\n disabled={selectedStorageClass === \"\"}\n max={maxCPUsUse}\n error={resourcesCPULimitError}\n pattern={\"[0-9]*\"}\n />\n \n\n \n ) => {\n let value = parseInt(e.target.value);\n console.log(\"value\", value);\n if (e.target.value === \"\") {\n updateField(\"resourcesMemoryLimitError\", \"\");\n } else if (isNaN(value)) {\n updateField(\"resourcesMemoryLimitError\", \"Invalid number\");\n } else if (e.target.validity.valid) {\n updateField(\"resourcesMemoryLimitError\", \"\");\n } else {\n updateField(\n \"resourcesMemoryLimitError\",\n \"Invalid configuration\"\n );\n }\n updateField(\"resourcesMemoryLimit\", e.target.value);\n }}\n label=\"Memory Limit\"\n overlayObject={\n {}}\n unitSelected={\"Gi\"}\n unitsList={[{ label: \"Gi\", value: \"Gi\" }]}\n disabled={true}\n />\n }\n value={resourcesMemoryLimit}\n disabled={selectedStorageClass === \"\"}\n error={resourcesMemoryLimitError}\n pattern={\"[0-9]*\"}\n />\n \n \n )}\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n nodes: state.tenants.createTenant.fields.tenantSize.nodes,\n\n resourcesSize: state.tenants.createTenant.fields.tenantSize.resourcesSize,\n selectedStorageClass:\n state.tenants.createTenant.fields.nameTenant.selectedStorageClass,\n maxAllocatableResources:\n state.tenants.createTenant.fields.tenantSize.maxAllocatableResources,\n maxCPUsUse: state.tenants.createTenant.fields.tenantSize.maxCPUsUse,\n maxMemorySize: state.tenants.createTenant.fields.tenantSize.maxMemorySize,\n\n resourcesSpecifyLimit:\n state.tenants.createTenant.fields.tenantSize.resourcesSpecifyLimit,\n\n resourcesCPURequestError:\n state.tenants.createTenant.fields.tenantSize.resourcesCPURequestError,\n resourcesCPURequest:\n state.tenants.createTenant.fields.tenantSize.resourcesCPURequest,\n resourcesCPULimitError:\n state.tenants.createTenant.fields.tenantSize.resourcesCPULimitError,\n resourcesCPULimit:\n state.tenants.createTenant.fields.tenantSize.resourcesCPULimit,\n\n resourcesMemoryRequestError:\n state.tenants.createTenant.fields.tenantSize.resourcesMemoryRequestError,\n resourcesMemoryRequest:\n state.tenants.createTenant.fields.tenantSize.resourcesMemoryRequest,\n resourcesMemoryLimitError:\n state.tenants.createTenant.fields.tenantSize.resourcesMemoryLimitError,\n resourcesMemoryLimit:\n state.tenants.createTenant.fields.tenantSize.resourcesMemoryLimit,\n});\n\nconst connector = connect(mapState, {\n updateAddField,\n isPageValid,\n});\n\nexport default withStyles(styles)(connector(TenantSizeResources));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport { SelectChangeEvent } from \"@mui/material\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { AppState } from \"../../../../../../store\";\nimport { isPageValid, updateAddField } from \"../../../actions\";\nimport {\n formFieldStyles,\n modalBasic,\n wizardCommon,\n} from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport Grid from \"@mui/material/Grid\";\nimport {\n calculateDistribution,\n erasureCodeCalc,\n getBytes,\n k8sScalarUnitsExcluding,\n niceBytes,\n} from \"../../../../../../common/utils\";\nimport { clearValidationError } from \"../../../utils\";\nimport { ecListTransform, Opts } from \"../../../ListTenants/utils\";\nimport { IResourcesSize } from \"../../../ListTenants/types\";\nimport { ICapacity, IErasureCodeCalc } from \"../../../../../../common/types\";\nimport { commonFormValidation } from \"../../../../../../utils/validationFunctions\";\nimport api from \"../../../../../../common/api\";\nimport InputBoxWrapper from \"../../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport SelectWrapper from \"../../../../Common/FormComponents/SelectWrapper/SelectWrapper\";\nimport TenantSizeResources from \"./TenantSizeResources\";\nimport InputUnitMenu from \"../../../../Common/FormComponents/InputUnitMenu/InputUnitMenu\";\n\ninterface ITenantSizeProps {\n classes: any;\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n volumeSize: string;\n sizeFactor: string;\n drivesPerServer: string;\n nodes: string;\n memoryNode: string;\n ecParity: string;\n ecParityChoices: Opts[];\n cleanECChoices: string[];\n resourcesSize: IResourcesSize;\n distribution: any;\n ecParityCalc: IErasureCodeCalc;\n limitSize: any;\n selectedStorageClass: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n compositeFieldContainer: {\n display: \"flex\",\n alignItems: \"center\",\n },\n compositeAddOn: {\n marginLeft: 10,\n \"& div\": {\n marginBottom: 0,\n },\n \"@media (max-width: 900px)\": {\n \"& div\": {\n marginTop: 5,\n },\n },\n },\n ...formFieldStyles,\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst TenantSize = ({\n classes,\n updateAddField,\n isPageValid,\n volumeSize,\n sizeFactor,\n drivesPerServer,\n nodes,\n memoryNode,\n ecParity,\n ecParityChoices,\n cleanECChoices,\n resourcesSize,\n distribution,\n ecParityCalc,\n limitSize,\n selectedStorageClass,\n}: ITenantSizeProps) => {\n const [validationErrors, setValidationErrors] = useState({});\n const [errorFlag, setErrorFlag] = useState(false);\n const [nodeError, setNodeError] = useState(\"\");\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n updateAddField(\"tenantSize\", field, value);\n },\n [updateAddField]\n );\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n /*Debounce functions*/\n\n // Storage Quotas\n\n useEffect(() => {\n if (ecParityChoices.length > 0 && distribution.error === \"\") {\n const ecCodeValidated = erasureCodeCalc(\n cleanECChoices,\n distribution.persistentVolumes,\n distribution.pvSize,\n distribution.nodes\n );\n\n updateField(\"ecParityCalc\", ecCodeValidated);\n if (!cleanECChoices.includes(ecParity) || ecParity === \"\") {\n updateField(\"ecParity\", ecCodeValidated.defaultEC);\n }\n }\n }, [\n ecParity,\n ecParityChoices.length,\n distribution,\n cleanECChoices,\n updateField,\n ]);\n /*End debounce functions*/\n\n /*Calculate Allocation*/\n useEffect(() => {\n //Validate Cluster Size\n const size = volumeSize;\n const factor = sizeFactor;\n const limitSize = getBytes(\"12\", \"Ti\", true);\n\n const clusterCapacity: ICapacity = {\n unit: factor,\n value: size.toString(),\n };\n\n const distrCalculate = calculateDistribution(\n clusterCapacity,\n parseInt(nodes),\n parseInt(limitSize),\n parseInt(drivesPerServer)\n );\n\n updateField(\"distribution\", distrCalculate);\n setErrorFlag(false);\n setNodeError(\"\");\n }, [nodes, volumeSize, sizeFactor, updateField, drivesPerServer]);\n\n /*Calculate Allocation End*/\n\n /* Validations of pages */\n\n useEffect(() => {\n const parsedSize = getBytes(volumeSize, sizeFactor, true);\n\n const commonValidation = commonFormValidation([\n {\n fieldKey: \"nodes\",\n required: true,\n value: nodes,\n customValidation: errorFlag,\n customValidationMessage: nodeError,\n },\n {\n fieldKey: \"volume_size\",\n required: true,\n value: volumeSize,\n customValidation:\n parseInt(parsedSize) < 1073741824 ||\n parseInt(parsedSize) > limitSize[selectedStorageClass],\n customValidationMessage: `Volume size must be greater than 1Gi and less than ${niceBytes(\n limitSize[selectedStorageClass],\n true\n )}`,\n },\n {\n fieldKey: \"drivesps\",\n required: true,\n value: drivesPerServer,\n customValidation: parseInt(drivesPerServer) < 1,\n customValidationMessage: \"There must be at least one drive\",\n },\n ]);\n\n isPageValid(\n \"tenantSize\",\n !(\"nodes\" in commonValidation) &&\n !(\"volume_size\" in commonValidation) &&\n !(\"drivesps\" in commonValidation) &&\n distribution.error === \"\" &&\n ecParityCalc.error === 0 &&\n ecParity !== \"\"\n );\n\n setValidationErrors(commonValidation);\n }, [\n nodes,\n volumeSize,\n sizeFactor,\n memoryNode,\n distribution,\n ecParityCalc,\n resourcesSize,\n limitSize,\n selectedStorageClass,\n isPageValid,\n errorFlag,\n nodeError,\n drivesPerServer,\n ecParity,\n ]);\n\n useEffect(() => {\n if (distribution.error === \"\") {\n // Get EC Value\n if (nodes.trim() !== \"\" && distribution.disks !== 0) {\n api\n .invoke(\"GET\", `api/v1/get-parity/${nodes}/${distribution.disks}`)\n .then((ecList: string[]) => {\n updateField(\"ecParityChoices\", ecListTransform(ecList));\n updateField(\"cleanECChoices\", ecList);\n })\n .catch((err: any) => {\n updateField(\"ecparityChoices\", []);\n isPageValid(\"tenantSize\", false);\n updateField(\"ecParity\", \"\");\n });\n }\n }\n }, [distribution, isPageValid, updateField, nodes]);\n\n /* End Validation of pages */\n\n return (\n \n \n
\n

Capacity

\n \n Please select the desired capacity\n \n
\n
\n {distribution.error !== \"\" && (\n \n
{distribution.error}
\n
\n )}\n \n ) => {\n if (e.target.validity.valid) {\n updateField(\"nodes\", e.target.value);\n cleanValidation(\"nodes\");\n }\n }}\n label=\"Number of Servers\"\n disabled={selectedStorageClass === \"\"}\n value={nodes}\n min=\"4\"\n required\n error={validationErrors[\"nodes\"] || \"\"}\n pattern={\"[0-9]*\"}\n />\n \n \n ) => {\n if (e.target.validity.valid) {\n updateField(\"drivesPerServer\", e.target.value);\n cleanValidation(\"drivesps\");\n }\n }}\n label=\"Drives per Server\"\n value={drivesPerServer}\n disabled={selectedStorageClass === \"\"}\n min=\"1\"\n required\n error={validationErrors[\"drivesps\"] || \"\"}\n pattern={\"[0-9]*\"}\n />\n \n \n
\n ) => {\n updateField(\"volumeSize\", e.target.value);\n cleanValidation(\"volume_size\");\n }}\n label=\"Total Size\"\n value={volumeSize}\n disabled={selectedStorageClass === \"\"}\n required\n error={validationErrors[\"volume_size\"] || \"\"}\n min=\"0\"\n overlayObject={\n {\n updateField(\"sizeFactor\", newValue);\n }}\n unitSelected={sizeFactor}\n unitsList={k8sScalarUnitsExcluding([\"Ki\", \"Mi\"])}\n disabled={selectedStorageClass === \"\"}\n />\n }\n />\n
\n
\n\n \n ) => {\n updateField(\"ecParity\", e.target.value as string);\n }}\n label=\"Erasure Code Parity\"\n disabled={selectedStorageClass === \"\"}\n value={ecParity}\n options={ecParityChoices}\n />\n \n Please select the desired parity. This setting will change the max\n usable capacity in the cluster\n \n \n\n \n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n volumeSize: state.tenants.createTenant.fields.tenantSize.volumeSize,\n sizeFactor: state.tenants.createTenant.fields.tenantSize.sizeFactor,\n drivesPerServer: state.tenants.createTenant.fields.tenantSize.drivesPerServer,\n nodes: state.tenants.createTenant.fields.tenantSize.nodes,\n memoryNode: state.tenants.createTenant.fields.tenantSize.memoryNode,\n ecParity: state.tenants.createTenant.fields.tenantSize.ecParity,\n ecParityChoices: state.tenants.createTenant.fields.tenantSize.ecParityChoices,\n cleanECChoices: state.tenants.createTenant.fields.tenantSize.cleanECChoices,\n\n resourcesSize: state.tenants.createTenant.fields.tenantSize.resourcesSize,\n distribution: state.tenants.createTenant.fields.tenantSize.distribution,\n ecParityCalc: state.tenants.createTenant.fields.tenantSize.ecParityCalc,\n limitSize: state.tenants.createTenant.limitSize,\n selectedStorageClass:\n state.tenants.createTenant.fields.nameTenant.selectedStorageClass,\n});\n\nconst connector = connect(mapState, {\n updateAddField,\n isPageValid,\n});\n\nexport default withStyles(styles)(connector(TenantSize));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport { SelectChangeEvent } from \"@mui/material\";\nimport get from \"lodash/get\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { AppState } from \"../../../../../../store\";\nimport { isPageValid, updateAddField } from \"../../../actions\";\nimport {\n formFieldStyles,\n modalBasic,\n wizardCommon,\n} from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport Grid from \"@mui/material/Grid\";\nimport { erasureCodeCalc, getBytes } from \"../../../../../../common/utils\";\nimport { clearValidationError } from \"../../../utils\";\nimport { ecListTransform, Opts } from \"../../../ListTenants/utils\";\nimport { IResourcesSize } from \"../../../ListTenants/types\";\nimport {\n IErasureCodeCalc,\n IStorageDistribution,\n} from \"../../../../../../common/types\";\nimport { commonFormValidation } from \"../../../../../../utils/validationFunctions\";\nimport api from \"../../../../../../common/api\";\nimport InputBoxWrapper from \"../../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport SelectWrapper from \"../../../../Common/FormComponents/SelectWrapper/SelectWrapper\";\nimport {\n IMkEnvs,\n IntegrationConfiguration,\n mkPanelConfigurations,\n} from \"./utils\";\n\ninterface ITenantSizeAWSProps {\n classes: any;\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n volumeSize: string;\n sizeFactor: string;\n drivesPerServer: string;\n nodes: string;\n memoryNode: string;\n ecParity: string;\n ecParityChoices: Opts[];\n cleanECChoices: string[];\n resourcesSize: IResourcesSize;\n distribution: any;\n ecParityCalc: IErasureCodeCalc;\n limitSize: any;\n selectedStorageType: string;\n cpuToUse: string;\n maxCPUsUse: string;\n formToRender?: IMkEnvs;\n integrationSelection: IntegrationConfiguration;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n compositeFieldContainer: {\n display: \"flex\",\n alignItems: \"center\",\n },\n compositeAddOn: {\n marginLeft: 10,\n \"& div\": {\n marginBottom: 0,\n },\n \"@media (max-width: 900px)\": {\n \"& div\": {\n marginTop: 5,\n },\n },\n },\n ...formFieldStyles,\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst TenantSizeMK = ({\n classes,\n updateAddField,\n isPageValid,\n volumeSize,\n sizeFactor,\n drivesPerServer,\n nodes,\n memoryNode,\n ecParity,\n ecParityChoices,\n cleanECChoices,\n resourcesSize,\n distribution,\n ecParityCalc,\n limitSize,\n cpuToUse,\n selectedStorageType,\n maxCPUsUse,\n formToRender,\n integrationSelection,\n}: ITenantSizeAWSProps) => {\n const [validationErrors, setValidationErrors] = useState({});\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n updateAddField(\"tenantSize\", field, value);\n },\n [updateAddField]\n );\n\n const updateMainField = useCallback(\n (field: string, value: string) => {\n updateAddField(\"nameTenant\", field, value);\n },\n [updateAddField]\n );\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n /*Debounce functions*/\n\n // Storage Quotas\n useEffect(() => {\n if (ecParityChoices.length > 0 && distribution.error === \"\") {\n const ecCodeValidated = erasureCodeCalc(\n cleanECChoices,\n distribution.persistentVolumes,\n distribution.pvSize,\n distribution.nodes\n );\n\n updateField(\"ecParityCalc\", ecCodeValidated);\n\n if (!cleanECChoices.includes(ecParity) || ecParity === \"\") {\n updateField(\"ecParity\", ecCodeValidated.defaultEC);\n }\n }\n }, [ecParity, ecParityChoices, distribution, cleanECChoices, updateField]);\n /*End debounce functions*/\n\n /*Set location Storage Types*/\n useEffect(() => {\n if (formToRender !== undefined && parseInt(nodes) >= 4) {\n const setConfigs = mkPanelConfigurations[formToRender];\n const keyCount = Object.keys(setConfigs).length;\n\n //Configuration is filled\n if (keyCount > 0) {\n const configs: IntegrationConfiguration[] = get(\n setConfigs,\n \"configurations\",\n []\n );\n\n const mainSelection = configs.find(\n (item) => item.typeSelection === selectedStorageType\n );\n\n if (mainSelection) {\n updateField(\"integrationSelection\", mainSelection);\n updateMainField(\"selectedStorageClass\", mainSelection.storageClass);\n\n let pvSize = parseInt(\n getBytes(\n mainSelection.driveSize.driveSize,\n mainSelection.driveSize.sizeUnit,\n true\n ),\n 10\n );\n\n const distrCalculate: IStorageDistribution = {\n pvSize,\n nodes: parseInt(nodes),\n disks: mainSelection.drivesPerServer,\n persistentVolumes: mainSelection.drivesPerServer * parseInt(nodes),\n error: \"\",\n };\n\n updateField(\"distribution\", distrCalculate);\n // apply requests, half of the available resources\n updateField(\n \"resourcesCPURequest\",\n Math.max(1, mainSelection.CPU / 2)\n );\n updateField(\n \"resourcesMemoryRequest\",\n Math.max(2, mainSelection.memory / 2)\n );\n }\n }\n }\n }, [nodes, selectedStorageType, formToRender, updateField, updateMainField]);\n\n /*Calculate Allocation End*/\n\n /* Validations of pages */\n\n useEffect(() => {\n const commonValidation = commonFormValidation([\n {\n fieldKey: \"nodes\",\n required: true,\n value: nodes,\n customValidation: parseInt(nodes) < 4,\n customValidationMessage: \"Al least 4 servers must be selected\",\n },\n ]);\n\n isPageValid(\n \"tenantSize\",\n !(\"nodes\" in commonValidation) &&\n distribution.error === \"\" &&\n ecParityCalc.error === 0 &&\n resourcesSize.error === \"\" &&\n ecParity !== \"\" &&\n parseInt(nodes) >= 4\n );\n\n setValidationErrors(commonValidation);\n }, [\n nodes,\n volumeSize,\n sizeFactor,\n memoryNode,\n distribution,\n ecParityCalc,\n resourcesSize,\n limitSize,\n selectedStorageType,\n cpuToUse,\n maxCPUsUse,\n isPageValid,\n drivesPerServer,\n ecParity,\n ]);\n\n useEffect(() => {\n if (integrationSelection.drivesPerServer !== 0) {\n // Get EC Value\n if (nodes.trim() !== \"\") {\n api\n .invoke(\n \"GET\",\n `api/v1/get-parity/${nodes}/${integrationSelection.drivesPerServer}`\n )\n .then((ecList: string[]) => {\n updateField(\"ecParityChoices\", ecListTransform(ecList));\n updateField(\"cleanECChoices\", ecList);\n })\n .catch((err: any) => {\n updateField(\"ecparityChoices\", []);\n isPageValid(\"tenantSize\", false);\n updateField(\"ecParity\", \"\");\n });\n }\n }\n }, [integrationSelection, nodes, isPageValid, updateField]);\n\n /* End Validation of pages */\n\n return (\n \n \n
\n

Tenant Size

\n \n Please select the desired capacity\n \n
\n
\n {distribution.error !== \"\" && (\n \n
{distribution.error}
\n
\n )}\n {resourcesSize.error !== \"\" && (\n \n
{resourcesSize.error}
\n
\n )}\n \n ) => {\n if (e.target.validity.valid) {\n updateField(\"nodes\", e.target.value);\n cleanValidation(\"nodes\");\n }\n }}\n label=\"Number of Servers\"\n disabled={selectedStorageType === \"\"}\n value={nodes}\n min=\"4\"\n required\n error={validationErrors[\"nodes\"] || \"\"}\n pattern={\"[0-9]*\"}\n />\n \n \n ) => {\n updateField(\"ecParity\", e.target.value as string);\n }}\n label=\"Erasure Code Parity\"\n disabled={selectedStorageType === \"\"}\n value={ecParity}\n options={ecParityChoices}\n />\n \n Please select the desired parity. This setting will change the max\n usable capacity in the cluster\n \n \n
\n );\n};\n\nconst mapState = (state: AppState) => () => {\n const createTenant = state.tenants.createTenant;\n\n const {\n memoryNode,\n ecParityChoices,\n distribution,\n cleanECChoices,\n sizeFactor,\n ecParity,\n cpuToUse,\n integrationSelection,\n resourcesSize,\n drivesPerServer,\n maxCPUsUse,\n ecParityCalc,\n volumeSize,\n nodes,\n } = createTenant.fields.tenantSize;\n\n return {\n volumeSize,\n sizeFactor,\n drivesPerServer,\n nodes,\n memoryNode,\n ecParity,\n ecParityChoices,\n cleanECChoices,\n resourcesSize,\n distribution,\n ecParityCalc,\n cpuToUse,\n maxCPUsUse,\n integrationSelection,\n limitSize: createTenant.limitSize,\n selectedStorageType: createTenant.fields.nameTenant.selectedStorageType,\n };\n};\n\nconst connector = connect(mapState, {\n updateAddField,\n isPageValid,\n});\n\nexport default withStyles(styles)(connector(TenantSizeMK));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, {\n Fragment,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { connect } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport get from \"lodash/get\";\nimport debounce from \"lodash/debounce\";\nimport Grid from \"@mui/material/Grid\";\nimport {\n formFieldStyles,\n modalBasic,\n wizardCommon,\n} from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport { setModalErrorSnackMessage } from \"../../../../../../actions\";\nimport {\n isPageValid,\n setLimitSize,\n setStorageClassesList,\n updateAddField,\n} from \"../../../actions\";\nimport {\n getLimitSizes,\n IQuotaElement,\n IQuotas,\n Opts,\n} from \"../../../ListTenants/utils\";\nimport { AppState } from \"../../../../../../store\";\nimport { commonFormValidation } from \"../../../../../../utils/validationFunctions\";\nimport { clearValidationError } from \"../../../utils\";\nimport { ErrorResponseHandler } from \"../../../../../../common/types\";\nimport api from \"../../../../../../common/api\";\nimport InputBoxWrapper from \"../../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport SelectWrapper from \"../../../../Common/FormComponents/SelectWrapper/SelectWrapper\";\nimport AddIcon from \"../../../../../../icons/AddIcon\";\nimport AddNamespaceModal from \"../helpers/AddNamespaceModal\";\nimport SizePreview from \"../SizePreview\";\nimport TenantSize from \"./TenantSize\";\nimport { Paper, SelectChangeEvent } from \"@mui/material\";\nimport { IMkEnvs, mkPanelConfigurations } from \"./utils\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n sizePreview: {\n position: \"fixed\",\n marginLeft: 10,\n background: \"#FFFFFF\",\n border: \"1px solid #EAEAEA\",\n padding: 2,\n },\n ...formFieldStyles,\n ...modalBasic,\n ...wizardCommon,\n });\n\ninterface INameTenantMainScreen {\n classes: any;\n storageClasses: Opts[];\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n setStorageClassesList: typeof setStorageClassesList;\n setLimitSize: typeof setLimitSize;\n tenantName: string;\n namespace: string;\n selectedStorageClass: string;\n selectedStorageType: string;\n formToRender?: IMkEnvs;\n}\n\nconst NameTenantMain = ({\n classes,\n storageClasses,\n tenantName,\n namespace,\n selectedStorageClass,\n selectedStorageType,\n formToRender = IMkEnvs.default,\n updateAddField,\n setStorageClassesList,\n setLimitSize,\n isPageValid,\n setModalErrorSnackMessage,\n}: INameTenantMainScreen) => {\n const [validationErrors, setValidationErrors] = useState({});\n const [emptyNamespace, setEmptyNamespace] = useState(true);\n const [loadingNamespaceInfo, setLoadingNamespaceInfo] =\n useState(false);\n const [showCreateButton, setShowCreateButton] = useState(false);\n const [openAddNSConfirm, setOpenAddNSConfirm] = useState(false);\n\n // Common\n const updateField = useCallback(\n (field: string, value: string) => {\n updateAddField(\"nameTenant\", field, value);\n },\n [updateAddField]\n );\n\n // Storage classes retrieval\n const getNamespaceInformation = useCallback(() => {\n setShowCreateButton(false);\n // Empty tenantValidation\n api\n .invoke(\"GET\", `/api/v1/namespaces/${namespace}/tenants`)\n .then((res: any[]) => {\n const tenantsList = get(res, \"tenants\", []);\n\n if (tenantsList && tenantsList.length > 0) {\n setEmptyNamespace(false);\n setLoadingNamespaceInfo(false);\n return;\n }\n setEmptyNamespace(true);\n\n // Storagequotas retrieval\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${namespace}/resourcequotas/${namespace}-storagequota`\n )\n .then((res: IQuotas) => {\n const elements: IQuotaElement[] = get(res, \"elements\", []);\n setLimitSize(getLimitSizes(res));\n\n const newStorage = elements.map((storageClass: any) => {\n const name = get(storageClass, \"name\", \"\").split(\n \".storageclass.storage.k8s.io/requests.storage\"\n )[0];\n\n return { label: name, value: name };\n });\n\n setStorageClassesList(newStorage);\n\n const stExists = newStorage.findIndex(\n (storageClass) => storageClass.value === selectedStorageClass\n );\n\n if (newStorage.length > 0 && stExists === -1) {\n updateField(\"selectedStorageClass\", newStorage[0].value);\n } else if (newStorage.length === 0) {\n updateField(\"selectedStorageClass\", \"\");\n setStorageClassesList([]);\n }\n setLoadingNamespaceInfo(false);\n })\n .catch((err: ErrorResponseHandler) => {\n setLoadingNamespaceInfo(false);\n setShowCreateButton(true);\n updateField(\"selectedStorageClass\", \"\");\n setStorageClassesList([]);\n console.error(\"Namespace error: \", err);\n });\n })\n .catch((err: ErrorResponseHandler) => {\n setModalErrorSnackMessage({\n errorMessage: \"Error validating if namespace already has tenants\",\n detailedError: err.detailedError,\n });\n });\n }, [\n namespace,\n setLimitSize,\n setModalErrorSnackMessage,\n setStorageClassesList,\n updateField,\n selectedStorageClass,\n ]);\n\n const debounceNamespace = useMemo(\n () => debounce(getNamespaceInformation, 500),\n [getNamespaceInformation]\n );\n\n useEffect(() => {\n if (namespace !== \"\") {\n debounceNamespace();\n setLoadingNamespaceInfo(true);\n\n // Cancel previous debounce calls during useEffect cleanup.\n return debounceNamespace.cancel;\n }\n }, [debounceNamespace, namespace]);\n\n // Validation\n useEffect(() => {\n let customNamespaceError = false;\n let errorMessage = \"\";\n\n if (!emptyNamespace && !loadingNamespaceInfo) {\n customNamespaceError = true;\n errorMessage = \"You can only create one tenant per namespace\";\n } else if (\n storageClasses.length < 1 &&\n emptyNamespace &&\n !loadingNamespaceInfo\n ) {\n customNamespaceError = true;\n errorMessage = \"Please enter a valid namespace\";\n }\n\n const commonValidation = commonFormValidation([\n {\n fieldKey: \"tenant-name\",\n required: true,\n pattern: /^[a-z0-9-]{3,63}$/,\n customPatternMessage:\n \"Name only can contain lowercase letters, numbers and '-'. Min. Length: 3\",\n value: tenantName,\n },\n {\n fieldKey: \"namespace\",\n required: true,\n value: namespace,\n customValidation: customNamespaceError,\n customValidationMessage: errorMessage,\n },\n ]);\n\n const isValid =\n !(\"tenant-name\" in commonValidation) &&\n !(\"namespace\" in commonValidation) &&\n ((formToRender === IMkEnvs.default && storageClasses.length > 0) ||\n (formToRender !== IMkEnvs.default && selectedStorageType !== \"\"));\n\n isPageValid(\"nameTenant\", isValid);\n\n setValidationErrors(commonValidation);\n }, [\n storageClasses,\n namespace,\n tenantName,\n isPageValid,\n emptyNamespace,\n loadingNamespaceInfo,\n selectedStorageType,\n formToRender,\n ]);\n\n const frmValidationCleanup = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n const addNamespace = () => {\n setOpenAddNSConfirm(true);\n };\n\n const closeAddNamespace = (refresh: boolean) => {\n setOpenAddNSConfirm(false);\n\n if (refresh) {\n debounceNamespace();\n }\n };\n\n return (\n \n {openAddNSConfirm && (\n \n )}\n \n \n \n \n \n
\n

Name

\n \n How would you like to name this new tenant?\n \n
\n
\n ) => {\n updateField(\"tenantName\", e.target.value);\n frmValidationCleanup(\"tenant-name\");\n }}\n label=\"Name\"\n value={tenantName}\n required\n error={validationErrors[\"tenant-name\"] || \"\"}\n />\n
\n
\n \n ) => {\n updateField(\"namespace\", e.target.value);\n frmValidationCleanup(\"namespace\");\n }}\n label=\"Namespace\"\n value={namespace}\n error={validationErrors[\"namespace\"] || \"\"}\n overlayIcon={showCreateButton ? : null}\n overlayAction={addNamespace}\n required\n />\n \n {formToRender === IMkEnvs.default ? (\n \n ) => {\n updateField(\n \"selectedStorageClass\",\n e.target.value as string\n );\n }}\n label=\"Storage Class\"\n value={selectedStorageClass}\n options={storageClasses}\n disabled={storageClasses.length < 1}\n />\n \n ) : (\n \n ) => {\n updateField(\n \"selectedStorageType\",\n e.target.value as string\n );\n }}\n label={get(\n mkPanelConfigurations,\n `${formToRender}.variantSelectorLabel`,\n \"Storage Type\"\n )}\n value={selectedStorageType}\n options={get(\n mkPanelConfigurations,\n `${formToRender}.variantSelectorValues`,\n []\n )}\n />\n \n )}\n {formToRender === IMkEnvs.default ? (\n \n ) : (\n get(\n mkPanelConfigurations,\n `${formToRender}.sizingComponent`,\n null\n )\n )}\n
\n
\n
\n \n
\n \n
\n
\n
\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n tenantName: state.tenants.createTenant.fields.nameTenant.tenantName,\n namespace: state.tenants.createTenant.fields.nameTenant.namespace,\n selectedStorageClass:\n state.tenants.createTenant.fields.nameTenant.selectedStorageClass,\n selectedStorageType:\n state.tenants.createTenant.fields.nameTenant.selectedStorageType,\n storageClasses: state.tenants.createTenant.storageClasses,\n});\n\nconst connector = connect(mapState, {\n setModalErrorSnackMessage,\n updateAddField,\n setStorageClassesList,\n setLimitSize,\n isPageValid,\n});\n\nexport default withStyles(styles)(connector(NameTenantMain));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport get from \"lodash/get\";\nimport NameTenantMain from \"./NameTenantMain\";\nimport { IMkEnvs, resourcesConfigurations } from \"./utils\";\nimport { AppState } from \"../../../../../../store\";\n\ninterface ITenantResources {\n features?: string[];\n}\n\nconst TenantResources = ({ features }: ITenantResources) => {\n const [formRender, setFormRender] = useState(null);\n\n useEffect(() => {\n let setConfiguration = IMkEnvs.default;\n\n if (features && features.length !== 0) {\n const possibleVariables = Object.keys(resourcesConfigurations);\n\n possibleVariables.forEach((element) => {\n if (features.includes(element)) {\n setConfiguration = get(\n resourcesConfigurations,\n element,\n IMkEnvs.default\n );\n }\n });\n }\n\n setFormRender(setConfiguration);\n }, [features]);\n\n if (formRender === null) {\n return null;\n }\n\n return ;\n};\n\nconst mapState = (state: AppState) => ({\n features: state.console.session.features,\n});\n\nconst connector = connect(mapState, null);\n\nexport default connector(TenantResources);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport get from \"lodash/get\";\nimport { connect } from \"react-redux\";\nimport Grid from \"@mui/material/Grid\";\nimport { LinearProgress } from \"@mui/material\";\n\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n modalBasic,\n settingsCommon,\n wizardCommon,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport api from \"../../../../common/api\";\nimport { generatePoolName, getBytes } from \"../../../../common/utils\";\nimport GenericWizard from \"../../Common/GenericWizard/GenericWizard\";\nimport { IWizardElement } from \"../../Common/GenericWizard/types\";\nimport { NewServiceAccount } from \"../../Common/CredentialsPrompt/types\";\nimport { ErrorResponseHandler, ITenantCreator } from \"../../../../common/types\";\nimport { KeyPair } from \"../ListTenants/utils\";\n\nimport { setErrorSnackMessage } from \"../../../../actions\";\nimport { getDefaultAffinity, getNodeSelector } from \"../TenantDetails/utils\";\nimport CredentialsPrompt from \"../../Common/CredentialsPrompt/CredentialsPrompt\";\nimport { AppState } from \"../../../../store\";\nimport { ICertificatesItems, IFieldStore } from \"../types\";\nimport { resetAddTenantForm, updateAddField } from \"../actions\";\nimport Configure from \"./Steps/Configure\";\nimport IdentityProvider from \"./Steps/IdentityProvider\";\nimport Security from \"./Steps/Security\";\nimport Encryption from \"./Steps/Encryption\";\nimport Affinity from \"./Steps/Affinity\";\nimport PageHeader from \"../../Common/PageHeader/PageHeader\";\nimport history from \"../../../../history\";\nimport Images from \"./Steps/Images\";\nimport PageLayout from \"../../Common/Layout/PageLayout\";\nimport BackLink from \"../../../../common/BackLink\";\nimport TenantResources from \"./Steps/TenantResources/TenantResources\";\n\ninterface IAddTenantProps {\n setErrorSnackMessage: typeof setErrorSnackMessage;\n resetAddTenantForm: typeof resetAddTenantForm;\n updateAddField: typeof updateAddField;\n fields: IFieldStore;\n certificates: ICertificatesItems;\n selectedStorageClass: string;\n namespace: string;\n validPages: string[];\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n pageBox: {\n border: \"1px solid #EAEAEA\",\n },\n ...modalBasic,\n ...wizardCommon,\n ...settingsCommon,\n });\n\nconst AddTenant = ({\n classes,\n fields,\n certificates,\n selectedStorageClass,\n namespace,\n validPages,\n setErrorSnackMessage,\n resetAddTenantForm,\n}: IAddTenantProps) => {\n // Modals\n const [showNewCredentials, setShowNewCredentials] = useState(false);\n const [createdAccount, setCreatedAccount] =\n useState(null);\n\n // Fields\n const [addSending, setAddSending] = useState(false);\n\n /* Send Information to backend */\n useEffect(() => {\n const tenantName = fields.nameTenant.tenantName;\n const selectedStorageClass = fields.nameTenant.selectedStorageClass;\n const imageName = fields.configure.imageName;\n const customDockerhub = fields.configure.customDockerhub;\n const imageRegistry = fields.configure.imageRegistry;\n const imageRegistryUsername = fields.configure.imageRegistryUsername;\n const imageRegistryPassword = fields.configure.imageRegistryPassword;\n const exposeMinIO = fields.configure.exposeMinIO;\n const exposeConsole = fields.configure.exposeConsole;\n const idpSelection = fields.identityProvider.idpSelection;\n const openIDConfigurationURL =\n fields.identityProvider.openIDConfigurationURL;\n const openIDClientID = fields.identityProvider.openIDClientID;\n const openIDClaimName = fields.identityProvider.openIDClaimName;\n const openIDCallbackURL = fields.identityProvider.openIDCallbackURL;\n const openIDScopes = fields.identityProvider.openIDScopes;\n const openIDSecretID = fields.identityProvider.openIDSecretID;\n const ADURL = fields.identityProvider.ADURL;\n const ADSkipTLS = fields.identityProvider.ADSkipTLS;\n const ADServerInsecure = fields.identityProvider.ADServerInsecure;\n const ADUserNameSearchFilter =\n fields.identityProvider.ADUserNameSearchFilter;\n const ADGroupSearchBaseDN = fields.identityProvider.ADGroupSearchBaseDN;\n const ADGroupSearchFilter = fields.identityProvider.ADGroupSearchFilter;\n const ADGroupNameAttribute = fields.identityProvider.ADGroupNameAttribute;\n const ADUserDNs = fields.identityProvider.ADUserDNs;\n const ADUserNameFormat = fields.identityProvider.ADUserNameFormat;\n const ADLookupBindDN = fields.identityProvider.ADLookupBindDN;\n const ADLookupBindPassword = fields.identityProvider.ADLookupBindPassword;\n const ADUserDNSearchBaseDN = fields.identityProvider.ADUserDNSearchBaseDN;\n const ADUserDNSearchFilter = fields.identityProvider.ADUserDNSearchFilter;\n const ADServerStartTLS = fields.identityProvider.ADServerStartTLS;\n const accessKeys = fields.identityProvider.accessKeys;\n const secretKeys = fields.identityProvider.secretKeys;\n const minioCertificates = certificates.minioCertificates;\n const caCertificates = certificates.caCertificates;\n const consoleCaCertificates = certificates.consoleCaCertificates;\n const consoleCertificate = certificates.consoleCertificate;\n const serverCertificate = certificates.serverCertificate;\n const clientCertificate = certificates.clientCertificate;\n const vaultCertificate = certificates.vaultCertificate;\n const vaultCA = certificates.vaultCA;\n const gemaltoCA = certificates.gemaltoCA;\n const enableEncryption = fields.encryption.enableEncryption;\n const encryptionType = fields.encryption.encryptionType;\n const gemaltoEndpoint = fields.encryption.gemaltoEndpoint;\n const gemaltoToken = fields.encryption.gemaltoToken;\n const gemaltoDomain = fields.encryption.gemaltoDomain;\n const gemaltoRetry = fields.encryption.gemaltoRetry;\n const awsEndpoint = fields.encryption.awsEndpoint;\n const awsRegion = fields.encryption.awsRegion;\n const awsKMSKey = fields.encryption.awsKMSKey;\n const awsAccessKey = fields.encryption.awsAccessKey;\n const awsSecretKey = fields.encryption.awsSecretKey;\n const awsToken = fields.encryption.awsToken;\n const vaultEndpoint = fields.encryption.vaultEndpoint;\n const vaultEngine = fields.encryption.vaultEngine;\n const vaultNamespace = fields.encryption.vaultNamespace;\n const vaultPrefix = fields.encryption.vaultPrefix;\n const vaultAppRoleEngine = fields.encryption.vaultAppRoleEngine;\n const vaultId = fields.encryption.vaultId;\n const vaultSecret = fields.encryption.vaultSecret;\n const vaultRetry = fields.encryption.vaultRetry;\n const vaultPing = fields.encryption.vaultPing;\n const azureEndpoint = fields.encryption.azureEndpoint;\n const azureTenantID = fields.encryption.azureTenantID;\n const azureClientID = fields.encryption.azureClientID;\n const azureClientSecret = fields.encryption.azureClientSecret;\n const gcpProjectID = fields.encryption.gcpProjectID;\n const gcpEndpoint = fields.encryption.gcpEndpoint;\n const gcpClientEmail = fields.encryption.gcpClientEmail;\n const gcpClientID = fields.encryption.gcpClientID;\n const gcpPrivateKeyID = fields.encryption.gcpPrivateKeyID;\n const gcpPrivateKey = fields.encryption.gcpPrivateKey;\n const enableAutoCert = fields.security.enableAutoCert;\n const enableTLS = fields.security.enableTLS;\n const ecParity = fields.tenantSize.ecParity;\n const distribution = fields.tenantSize.distribution;\n const tenantCustom = fields.configure.tenantCustom;\n const logSearchCustom = fields.configure.logSearchCustom;\n const prometheusCustom = fields.configure.prometheusCustom;\n const logSearchVolumeSize = fields.configure.logSearchVolumeSize;\n const logSearchSelectedStorageClass =\n fields.configure.logSearchSelectedStorageClass;\n const logSearchImage = fields.configure.logSearchImage;\n const kesImage = fields.configure.kesImage;\n const logSearchPostgresImage = fields.configure.logSearchPostgresImage;\n const logSearchPostgresInitImage =\n fields.configure.logSearchPostgresInitImage;\n const prometheusImage = fields.configure.prometheusImage;\n const prometheusSidecarImage = fields.configure.prometheusSidecarImage;\n const prometheusInitImage = fields.configure.prometheusInitImage;\n const prometheusSelectedStorageClass =\n fields.configure.prometheusSelectedStorageClass;\n const prometheusVolumeSize = fields.configure.prometheusVolumeSize;\n const affinityType = fields.affinity.podAffinity;\n const nodeSelectorLabels = fields.affinity.nodeSelectorLabels;\n const withPodAntiAffinity = fields.affinity.withPodAntiAffinity;\n\n const tenantSecurityContext = fields.configure.tenantSecurityContext;\n const logSearchSecurityContext = fields.configure.logSearchSecurityContext;\n const logSearchPostgresSecurityContext =\n fields.configure.logSearchPostgresSecurityContext;\n const prometheusSecurityContext =\n fields.configure.prometheusSecurityContext;\n const kesSecurityContext = fields.encryption.kesSecurityContext;\n const kesReplicas = fields.encryption.replicas;\n\n if (addSending) {\n const poolName = generatePoolName([]);\n\n let affinityObject = {};\n\n switch (affinityType) {\n case \"default\":\n affinityObject = {\n affinity: getDefaultAffinity(tenantName, poolName),\n };\n break;\n case \"nodeSelector\":\n affinityObject = {\n affinity: getNodeSelector(\n nodeSelectorLabels,\n withPodAntiAffinity,\n tenantName,\n poolName\n ),\n };\n break;\n }\n\n const erasureCode = ecParity.split(\":\")[1];\n\n let dataSend: ITenantCreator = {\n name: tenantName,\n namespace: namespace,\n access_key: \"\",\n secret_key: \"\",\n access_keys: [],\n secret_keys: [],\n enable_tls: enableTLS && enableAutoCert,\n enable_console: true,\n enable_prometheus: true,\n service_name: \"\",\n image: imageName,\n expose_minio: exposeMinIO,\n expose_console: exposeConsole,\n pools: [\n {\n name: poolName,\n servers: distribution.nodes,\n volumes_per_server: distribution.disks,\n volume_configuration: {\n size: distribution.pvSize,\n storage_class_name: selectedStorageClass,\n },\n securityContext: tenantCustom ? tenantSecurityContext : null,\n ...affinityObject,\n },\n ],\n erasureCodingParity: parseInt(erasureCode, 10),\n };\n\n // Set Resources\n if (\n fields.tenantSize.resourcesCPURequest !== \"\" ||\n fields.tenantSize.resourcesCPULimit !== \"\" ||\n fields.tenantSize.resourcesMemoryRequest !== \"\" ||\n fields.tenantSize.resourcesMemoryLimit !== \"\"\n ) {\n dataSend.pools[0].resources = {};\n // requests\n if (\n fields.tenantSize.resourcesCPURequest !== \"\" ||\n fields.tenantSize.resourcesMemoryRequest !== \"\"\n ) {\n dataSend.pools[0].resources.requests = {};\n if (fields.tenantSize.resourcesCPURequest !== \"\") {\n dataSend.pools[0].resources.requests.cpu = parseInt(\n fields.tenantSize.resourcesCPURequest\n );\n }\n if (fields.tenantSize.resourcesMemoryRequest !== \"\") {\n dataSend.pools[0].resources.requests.memory = parseInt(\n getBytes(fields.tenantSize.resourcesMemoryRequest, \"Gi\", true)\n );\n }\n }\n // limits\n if (\n fields.tenantSize.resourcesCPULimit !== \"\" ||\n fields.tenantSize.resourcesMemoryLimit !== \"\"\n ) {\n dataSend.pools[0].resources.limits = {};\n if (fields.tenantSize.resourcesCPULimit !== \"\") {\n dataSend.pools[0].resources.limits.cpu = parseInt(\n fields.tenantSize.resourcesCPULimit\n );\n }\n if (fields.tenantSize.resourcesMemoryLimit !== \"\") {\n dataSend.pools[0].resources.limits.memory = parseInt(\n getBytes(fields.tenantSize.resourcesMemoryLimit, \"Gi\", true)\n );\n }\n }\n }\n if (customDockerhub) {\n dataSend = {\n ...dataSend,\n image_registry: {\n registry: imageRegistry,\n username: imageRegistryUsername,\n password: imageRegistryPassword,\n },\n };\n }\n\n if (logSearchCustom) {\n dataSend = {\n ...dataSend,\n logSearchConfiguration: {\n storageClass:\n logSearchSelectedStorageClass === \"default\"\n ? \"\"\n : logSearchSelectedStorageClass,\n storageSize: parseInt(logSearchVolumeSize),\n image: logSearchImage,\n postgres_image: logSearchPostgresImage,\n postgres_init_image: logSearchPostgresInitImage,\n securityContext: logSearchSecurityContext,\n postgres_securityContext: logSearchPostgresSecurityContext,\n },\n };\n } else {\n dataSend = {\n ...dataSend,\n logSearchConfiguration: {\n image: logSearchImage,\n postgres_image: logSearchPostgresImage,\n postgres_init_image: logSearchPostgresInitImage,\n },\n };\n }\n\n if (prometheusCustom) {\n dataSend = {\n ...dataSend,\n prometheusConfiguration: {\n storageClass:\n prometheusSelectedStorageClass === \"default\"\n ? \"\"\n : prometheusSelectedStorageClass,\n storageSize: parseInt(prometheusVolumeSize),\n image: prometheusImage,\n sidecar_image: prometheusSidecarImage,\n init_image: prometheusInitImage,\n securityContext: prometheusSecurityContext,\n },\n };\n } else {\n dataSend = {\n ...dataSend,\n prometheusConfiguration: {\n image: prometheusImage,\n sidecar_image: prometheusSidecarImage,\n init_image: prometheusInitImage,\n },\n };\n }\n\n let tenantCerts: any = null;\n let consoleCerts: any = null;\n let caCerts: any = null;\n let consoleCaCerts: any = null;\n\n if (caCertificates.length > 0) {\n caCerts = {\n ca_certificates: caCertificates\n .map((keyPair: KeyPair) => keyPair.encoded_cert)\n .filter((keyPair) => keyPair),\n };\n }\n\n if (consoleCaCertificates.length > 0) {\n consoleCaCerts = {\n console_ca_certificates: consoleCaCertificates\n .map((keyPair: KeyPair) => keyPair.encoded_cert)\n .filter((keyPair) => keyPair),\n };\n }\n\n if (enableTLS && minioCertificates.length > 0) {\n tenantCerts = {\n minio: minioCertificates\n .map((keyPair: KeyPair) => ({\n crt: keyPair.encoded_cert,\n key: keyPair.encoded_key,\n }))\n .filter((keyPair) => keyPair.crt && keyPair.key),\n };\n }\n\n if (\n enableTLS &&\n consoleCertificate.encoded_cert !== \"\" &&\n consoleCertificate.encoded_key !== \"\"\n ) {\n consoleCerts = {\n console: {\n crt: consoleCertificate.encoded_cert,\n key: consoleCertificate.encoded_key,\n },\n };\n }\n\n if (tenantCerts || consoleCerts || caCerts || consoleCaCerts) {\n dataSend = {\n ...dataSend,\n tls: {\n ...tenantCerts,\n ...consoleCerts,\n ...caCerts,\n ...consoleCaCerts,\n },\n };\n }\n\n if (enableEncryption) {\n let insertEncrypt = {};\n\n switch (encryptionType) {\n case \"gemalto\":\n let gemaltoCAIntroduce = {};\n\n if (gemaltoCA.encoded_cert !== \"\") {\n gemaltoCAIntroduce = {\n ca: gemaltoCA.encoded_cert,\n };\n }\n insertEncrypt = {\n gemalto: {\n keysecure: {\n endpoint: gemaltoEndpoint,\n credentials: {\n token: gemaltoToken,\n domain: gemaltoDomain,\n retry: parseInt(gemaltoRetry),\n },\n tls: {\n ...gemaltoCAIntroduce,\n },\n },\n },\n };\n break;\n case \"aws\":\n insertEncrypt = {\n aws: {\n secretsmanager: {\n endpoint: awsEndpoint,\n region: awsRegion,\n kmskey: awsKMSKey,\n credentials: {\n accesskey: awsAccessKey,\n secretkey: awsSecretKey,\n token: awsToken,\n },\n },\n },\n };\n break;\n case \"azure\":\n insertEncrypt = {\n azure: {\n keyvault: {\n endpoint: azureEndpoint,\n credentials: {\n tenant_id: azureTenantID,\n client_id: azureClientID,\n client_secret: azureClientSecret,\n },\n },\n },\n };\n break;\n case \"gcp\":\n insertEncrypt = {\n gcp: {\n secretmanager: {\n project_id: gcpProjectID,\n endpoint: gcpEndpoint,\n credentials: {\n client_email: gcpClientEmail,\n client_id: gcpClientID,\n private_key_id: gcpPrivateKeyID,\n private_key: gcpPrivateKey,\n },\n },\n },\n };\n break;\n case \"vault\":\n let vaultKeyPair = null;\n let vaultCAInsert = null;\n if (\n vaultCertificate.encoded_key !== \"\" &&\n vaultCertificate.encoded_cert !== \"\"\n ) {\n vaultKeyPair = {\n key: vaultCertificate.encoded_key,\n crt: vaultCertificate.encoded_cert,\n };\n }\n if (vaultCA.encoded_cert !== \"\") {\n vaultCAInsert = {\n ca: vaultCA.encoded_cert,\n };\n }\n let vaultTLS = null;\n if (vaultKeyPair || vaultCA) {\n vaultTLS = {\n tls: {\n ...vaultKeyPair,\n ...vaultCAInsert,\n },\n };\n }\n insertEncrypt = {\n vault: {\n endpoint: vaultEndpoint,\n engine: vaultEngine,\n namespace: vaultNamespace,\n prefix: vaultPrefix,\n approle: {\n engine: vaultAppRoleEngine,\n id: vaultId,\n secret: vaultSecret,\n retry: parseInt(vaultRetry),\n },\n ...vaultTLS,\n status: {\n ping: parseInt(vaultPing),\n },\n },\n };\n break;\n }\n\n let encryptionServerKeyPair: any = {};\n let encryptionClientKeyPair: any = {};\n\n if (\n clientCertificate.encoded_key !== \"\" &&\n clientCertificate.encoded_cert !== \"\"\n ) {\n encryptionClientKeyPair = {\n client: {\n key: clientCertificate.encoded_key,\n crt: clientCertificate.encoded_cert,\n },\n };\n }\n\n if (\n serverCertificate.encoded_key !== \"\" &&\n serverCertificate.encoded_cert !== \"\"\n ) {\n encryptionServerKeyPair = {\n server: {\n key: serverCertificate.encoded_key,\n crt: serverCertificate.encoded_cert,\n },\n };\n }\n\n dataSend = {\n ...dataSend,\n encryption: {\n replicas: kesReplicas,\n securityContext: kesSecurityContext,\n image: kesImage,\n ...encryptionClientKeyPair,\n ...encryptionServerKeyPair,\n ...insertEncrypt,\n },\n };\n }\n\n let dataIDP: any = {};\n switch (idpSelection) {\n case \"Built-in\":\n let keyarray = [];\n for (let i = 0; i < accessKeys.length; i++) {\n keyarray.push({\n access_key: accessKeys[i],\n secret_key: secretKeys[i],\n });\n }\n dataIDP = {\n keys: keyarray,\n };\n break;\n case \"OpenID\":\n dataIDP = {\n oidc: {\n configuration_url: openIDConfigurationURL,\n client_id: openIDClientID,\n secret_id: openIDSecretID,\n claim_name: openIDClaimName,\n callback_url: openIDCallbackURL,\n scopes: openIDScopes,\n },\n };\n break;\n case \"AD\":\n dataIDP = {\n active_directory: {\n url: ADURL,\n skip_tls_verification: ADSkipTLS,\n server_insecure: ADServerInsecure,\n username_format: ADUserNameFormat,\n username_search_filter: ADUserNameSearchFilter,\n group_search_base_dn: ADGroupSearchBaseDN,\n group_search_filter: ADGroupSearchFilter,\n group_name_attribute: ADGroupNameAttribute,\n user_dns: ADUserDNs,\n lookup_bind_dn: ADLookupBindDN,\n lookup_bind_password: ADLookupBindPassword,\n user_dn_search_base_dn: ADUserDNSearchBaseDN,\n user_dn_search_filter: ADUserDNSearchFilter,\n server_start_tls: ADServerStartTLS,\n },\n };\n break;\n }\n\n dataSend = {\n ...dataSend,\n idp: { ...dataIDP },\n };\n api\n .invoke(\"POST\", `/api/v1/tenants`, dataSend)\n .then((res) => {\n const consoleSAList = get(res, \"console\", []);\n\n let newSrvAcc: NewServiceAccount = {\n idp: get(res, \"externalIDP\", false),\n console: [],\n };\n\n if (consoleSAList) {\n if (Array.isArray(consoleSAList)) {\n const consoleItem = consoleSAList.map((consoleKey) => {\n return {\n accessKey: consoleKey.access_key,\n secretKey: consoleKey.secret_key,\n api: \"s3v4\",\n path: \"auto\",\n url: consoleKey.url,\n };\n });\n\n newSrvAcc.console = consoleItem;\n } else {\n newSrvAcc = {\n console: {\n accessKey: res.console.access_key,\n secretKey: res.console.secret_key,\n url: res.console.url,\n },\n };\n }\n }\n setAddSending(false);\n setShowNewCredentials(true);\n setCreatedAccount(newSrvAcc);\n })\n .catch((err: ErrorResponseHandler) => {\n setAddSending(false);\n setErrorSnackMessage(err);\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [addSending]);\n\n const cancelButton = {\n label: \"Cancel\",\n type: \"other\",\n enabled: true,\n action: () => {\n resetAddTenantForm();\n history.push(\"/tenants\");\n },\n };\n const requiredPages = [\n \"nameTenant\",\n \"tenantSize\",\n \"configure\",\n \"affinity\",\n \"identityProvider\",\n \"security\",\n \"encryption\",\n ];\n const createButton = {\n label: \"Create\",\n type: \"submit\",\n enabled:\n !addSending &&\n selectedStorageClass !== \"\" &&\n requiredPages.every((v) => validPages.includes(v)),\n action: () => {\n setAddSending(true);\n },\n };\n\n const wizardSteps: IWizardElement[] = [\n {\n label: \"Setup\",\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n {\n label: \"Configure\",\n advancedOnly: true,\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n {\n label: \"Images\",\n advancedOnly: true,\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n {\n label: \"Pod Placement\",\n advancedOnly: true,\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n {\n label: \"Identity Provider\",\n advancedOnly: true,\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n {\n label: \"Security\",\n advancedOnly: true,\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n {\n label: \"Encryption\",\n advancedOnly: true,\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n ];\n\n let filteredWizardSteps = wizardSteps;\n\n const closeCredentialsModal = () => {\n resetAddTenantForm();\n history.push(\"/tenants\");\n };\n\n return (\n \n {showNewCredentials && (\n {\n closeCredentialsModal();\n }}\n entity=\"Tenant\"\n />\n )}\n \n \n \n {addSending && (\n \n \n \n )}\n \n \n \n \n \n );\n};\n\nconst mapState = (state: AppState) => ({\n namespace: state.tenants.createTenant.fields.nameTenant.namespace,\n validPages: state.tenants.createTenant.validPages,\n fields: state.tenants.createTenant.fields,\n certificates: state.tenants.createTenant.certificates,\n selectedStorageClass:\n state.tenants.createTenant.fields.nameTenant.selectedStorageClass,\n});\n\nconst connector = connect(mapState, {\n setErrorSnackMessage,\n updateAddField,\n resetAddTenantForm,\n});\n\nexport default withStyles(styles)(connector(AddTenant));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport get from \"lodash/get\";\nimport { ITenant } from \"./types\";\n\nexport interface Opts {\n label: string;\n value: string;\n}\n\nexport interface IQuotaElement {\n hard: number;\n name: string;\n}\n\nexport interface IQuotas {\n elements?: IQuotaElement[];\n name: string;\n}\n\nexport const minMemReq = 2147483648;\n\nexport interface KeyPair {\n id: string;\n encoded_cert: string;\n encoded_key: string;\n cert: string;\n key: string;\n}\n\nexport const ecListTransform = (ecList: string[]): Opts[] => {\n return ecList.map((value) => {\n return { label: value, value };\n });\n};\n\nexport const getLimitSizes = (resourceQuotas: IQuotas) => {\n const quotas: IQuotaElement[] = get(resourceQuotas, \"elements\", []);\n\n const returnQuotas: any = {};\n\n quotas.forEach((rsQuota) => {\n const stCName = rsQuota.name.split(\n \".storageclass.storage.k8s.io/requests.storage\"\n )[0];\n const hard = get(rsQuota, \"hard\", 0);\n const used = get(rsQuota, \"used\", 0);\n\n returnQuotas[stCName] = hard - used;\n });\n\n return returnQuotas;\n};\n\nexport const tenantIsOnline = (tenant: ITenant): boolean => {\n if (tenant.currentState === \"\") {\n return false;\n }\n if (\n !tenant.status &&\n tenant.health_status !== \"green\" &&\n tenant.health_status !== \"yellow\"\n ) {\n return false;\n }\n if (\n tenant.status &&\n tenant.status.health_status !== \"green\" &&\n tenant.status.health_status !== \"yellow\"\n ) {\n return false;\n }\n return true;\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport { IAffinityModel } from \"../../../../common/types\";\n\nexport const getDefaultAffinity = (tenantName: string, poolName: string) => {\n const defaultAffinity: IAffinityModel = {\n podAntiAffinity: {\n requiredDuringSchedulingIgnoredDuringExecution: [\n {\n labelSelector: {\n matchExpressions: [\n {\n key: \"v1.min.io/tenant\",\n operator: \"In\",\n values: [tenantName],\n },\n {\n key: \"v1.min.io/pool\",\n operator: \"In\",\n values: [poolName],\n },\n ],\n },\n topologyKey: \"kubernetes.io/hostname\",\n },\n ],\n },\n };\n return defaultAffinity;\n};\n\nexport const getNodeSelector = (\n labels: string,\n withPodAntiAffinity: boolean,\n tenantName: string,\n poolName: string\n) => {\n // Labels in the form of key1=value1&key2=value2&key3=value3...\n const splittedLabels = labels.split(\"&\");\n let matchExpressions: any = [];\n\n splittedLabels.forEach((label: string) => {\n const splitKeyValue = label.split(\"=\");\n if (splitKeyValue.length === 2) {\n matchExpressions.push({\n key: splitKeyValue[0],\n operator: \"In\",\n values: [splitKeyValue[1]],\n });\n }\n });\n\n const nodeSelector: IAffinityModel = {\n nodeAffinity: {\n requiredDuringSchedulingIgnoredDuringExecution: {\n nodeSelectorTerms: [\n {\n matchExpressions: matchExpressions,\n },\n ],\n },\n },\n };\n if (withPodAntiAffinity) {\n const def = getDefaultAffinity(tenantName, poolName);\n nodeSelector.podAntiAffinity = def.podAntiAffinity;\n }\n console.log(nodeSelector);\n return nodeSelector;\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { ITenant } from \"./ListTenants/types\";\nimport { Opts } from \"./ListTenants/utils\";\nimport {\n ADD_TENANT_ADD_CA_KEYPAIR,\n ADD_TENANT_ADD_CONSOLE_CA_KEYPAIR,\n ADD_TENANT_ADD_CONSOLE_CERT,\n ADD_TENANT_ADD_FILE_TO_CA_KEYPAIR,\n ADD_TENANT_ADD_FILE_TO_CONSOLE_CA_KEYPAIR,\n ADD_TENANT_ADD_FILE_TO_MINIO_KEYPAIR,\n ADD_TENANT_ADD_MINIO_KEYPAIR,\n ADD_TENANT_DELETE_CA_KEYPAIR,\n ADD_TENANT_DELETE_CONSOLE_CA_KEYPAIR,\n ADD_TENANT_DELETE_MINIO_KEYPAIR,\n ADD_TENANT_ENCRYPTION_CLIENT_CERT,\n ADD_TENANT_ENCRYPTION_GEMALTO_CA,\n ADD_TENANT_ENCRYPTION_SERVER_CERT,\n ADD_TENANT_ENCRYPTION_VAULT_CA,\n ADD_TENANT_ENCRYPTION_VAULT_CERT,\n ADD_TENANT_RESET_FORM,\n ADD_TENANT_SET_CURRENT_PAGE,\n ADD_TENANT_SET_LIMIT_SIZE,\n ADD_TENANT_SET_PAGE_VALID,\n ADD_TENANT_SET_STORAGE_CLASSES_LIST,\n ADD_TENANT_UPDATE_FIELD,\n TENANT_DETAILS_SET_CURRENT_TENANT,\n TENANT_DETAILS_SET_LOADING,\n TENANT_DETAILS_SET_TAB,\n TENANT_DETAILS_SET_TENANT,\n ADD_TENANT_SET_KEY_PAIR_VALUE,\n LabelKeyPair,\n} from \"./types\";\n\n// Basic actions\nexport const setWizardPage = (page: number) => {\n return {\n type: ADD_TENANT_SET_CURRENT_PAGE,\n page,\n };\n};\n\nexport const updateAddField = (\n pageName: string,\n fieldName: string,\n value: any\n) => {\n return {\n type: ADD_TENANT_UPDATE_FIELD,\n pageName,\n field: fieldName,\n value,\n };\n};\n\nexport const isPageValid = (pageName: string, valid: boolean) => {\n return {\n type: ADD_TENANT_SET_PAGE_VALID,\n pageName,\n valid,\n };\n};\n\n// Name Tenant actions\n\nexport const setStorageClassesList = (storageClasses: Opts[]) => {\n return {\n type: ADD_TENANT_SET_STORAGE_CLASSES_LIST,\n storageClasses,\n };\n};\n\nexport const setLimitSize = (limitSize: any) => {\n return {\n type: ADD_TENANT_SET_LIMIT_SIZE,\n limitSize,\n };\n};\n\n// Security actions\n\nexport const addCaCertificate = () => {\n return {\n type: ADD_TENANT_ADD_CA_KEYPAIR,\n };\n};\n\nexport const deleteCaCertificate = (id: string) => {\n return {\n type: ADD_TENANT_DELETE_CA_KEYPAIR,\n id,\n };\n};\n\nexport const addFileToCaCertificates = (\n id: string,\n key: string,\n fileName: string,\n value: string\n) => {\n return {\n type: ADD_TENANT_ADD_FILE_TO_CA_KEYPAIR,\n id,\n key,\n fileName,\n value,\n };\n};\n\nexport const addConsoleCaCertificate = () => {\n return {\n type: ADD_TENANT_ADD_CONSOLE_CA_KEYPAIR,\n };\n};\n\nexport const deleteConsoleCaCertificate = (id: string) => {\n return {\n type: ADD_TENANT_DELETE_CONSOLE_CA_KEYPAIR,\n id,\n };\n};\n\nexport const addFileToConsoleCaCertificates = (\n id: string,\n key: string,\n fileName: string,\n value: string\n) => {\n return {\n type: ADD_TENANT_ADD_FILE_TO_CONSOLE_CA_KEYPAIR,\n id,\n key,\n fileName,\n value,\n };\n};\n\nexport const addKeyPair = () => {\n return {\n type: ADD_TENANT_ADD_MINIO_KEYPAIR,\n };\n};\n\nexport const deleteKeyPair = (id: string) => {\n return {\n type: ADD_TENANT_DELETE_MINIO_KEYPAIR,\n id,\n };\n};\n\nexport const addFileToKeyPair = (\n id: string,\n key: string,\n fileName: string,\n value: string\n) => {\n return {\n type: ADD_TENANT_ADD_FILE_TO_MINIO_KEYPAIR,\n id,\n key,\n fileName,\n value,\n };\n};\n\nexport const addConsoleCertificate = (\n key: string,\n fileName: string,\n value: string\n) => {\n return {\n type: ADD_TENANT_ADD_CONSOLE_CERT,\n key,\n fileName,\n value,\n };\n};\n\nexport const addFileServerCert = (\n key: string,\n fileName: string,\n value: string\n) => {\n return {\n type: ADD_TENANT_ENCRYPTION_SERVER_CERT,\n key,\n fileName,\n value,\n };\n};\n\nexport const addFileClientCert = (\n key: string,\n fileName: string,\n value: string\n) => {\n return {\n type: ADD_TENANT_ENCRYPTION_CLIENT_CERT,\n key,\n fileName,\n value,\n };\n};\n\nexport const addFileVaultCert = (\n key: string,\n fileName: string,\n value: string\n) => {\n return {\n type: ADD_TENANT_ENCRYPTION_VAULT_CERT,\n key,\n fileName,\n value,\n };\n};\n\nexport const addFileVaultCa = (fileName: string, value: string) => {\n return {\n type: ADD_TENANT_ENCRYPTION_VAULT_CA,\n fileName,\n value,\n };\n};\n\nexport const addFileGemaltoCa = (fileName: string, value: string) => {\n return {\n type: ADD_TENANT_ENCRYPTION_GEMALTO_CA,\n fileName,\n value,\n };\n};\n\nexport const resetAddTenantForm = () => {\n return {\n type: ADD_TENANT_RESET_FORM,\n };\n};\n\nexport const setTenantDetailsLoad = (loading: boolean) => {\n return {\n type: TENANT_DETAILS_SET_LOADING,\n state: loading,\n };\n};\n\nexport const setTenantName = (tenantName: string, tenantNamespace: string) => {\n return {\n type: TENANT_DETAILS_SET_CURRENT_TENANT,\n name: tenantName,\n namespace: tenantNamespace,\n };\n};\n\nexport const setTenantInfo = (tenant: ITenant | null) => {\n return {\n type: TENANT_DETAILS_SET_TENANT,\n tenant,\n };\n};\n\nexport const setTenantTab = (tab: string) => {\n return {\n type: TENANT_DETAILS_SET_TAB,\n tab,\n };\n};\n\nexport const setKeyValuePairs = (newArray: LabelKeyPair[]) => {\n return {\n type: ADD_TENANT_SET_KEY_PAIR_VALUE,\n newArray,\n };\n};\n","import React from \"react\";\nimport Typography from \"@mui/material/Typography\";\nimport { Theme } from \"@mui/material/styles\";\n\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n errorBlock: {\n color: theme.palette?.error.main || \"#C83B51\",\n },\n });\n\ninterface IErrorBlockProps {\n classes: any;\n errorMessage: string;\n withBreak?: boolean;\n}\n\nconst ErrorBlock = ({\n classes,\n errorMessage,\n withBreak = true,\n}: IErrorBlockProps) => {\n return (\n \n {withBreak &&
}\n \n {errorMessage}\n \n
\n );\n};\n\nexport default withStyles(styles)(ErrorBlock);\n"],"names":["withStyles","theme","createStyles","link","display","alignItems","textDecoration","maxWidth","padding","color","palette","primary","light","fontSize","icon","marginRight","justifyContent","width","to","label","classes","className","executeOnClick","onClick","container","flexFlow","inputWithCopy","background","height","inputLabel","fieldBasic","value","OutlinedInput","readOnly","endAdornment","InputAdornment","position","text","BoxIconButton","tooltip","onMouseDown","edge","warningBlock","margin","credentialTitle","fontWeight","buttonContainer","textAlign","marginTop","credentialsPanel","overflowY","maxHeight","promptTitle","buttonSpacer","promptIcon","newServiceAccount","open","closeModal","entity","consoleCreds","get","idp","ModalWrapper","modalOpen","onClose","title","titleIcon","Grid","item","xs","formScrollable","Array","isArray","map","credentialsPair","index","accessKey","secretKey","WarnIcon","Button","id","variant","consoleExtras","cCreds","itemMap","url","access_key","secret_key","api","path","console","filename","element","document","createElement","setAttribute","encodeURIComponent","style","body","appendChild","click","removeChild","download","JSON","stringify","endIcon","tooltipHelper","valueString","whiteSpace","overflow","textOverflow","fileInputField","fileInputStyles","textBoxContainer","border","paddingLeft","onChange","name","disabled","required","error","accept","useState","showFileSelector","setShowSelector","fieldBottom","fieldContainer","errorInField","InputLabel","htmlFor","fieldLabelError","tooltipContainer","Tooltip","placement","HelpIcon","type","e","fileName","evt","callback","file","target","files","reader","FileReader","readAsDataURL","onload","fileBase64","result","fileArray","toString","split","length","fileProcess","data","IconButton","component","disableRipple","disableFocusRipple","size","Cancel","ErrorBlock","errorMessage","fileReselect","AttachFile","pageContentStyles","children","contentSpacer","IMkEnvs","connector","connect","state","storageClasses","tenants","createTenant","customImage","fields","configure","imageName","customDockerhub","imageRegistry","imageRegistryUsername","imageRegistryPassword","exposeMinIO","exposeConsole","prometheusCustom","tenantCustom","logSearchCustom","logSearchVolumeSize","logSearchSizeFactor","prometheusVolumeSize","prometheusSizeFactor","logSearchSelectedStorageClass","logSearchImage","kesImage","logSearchPostgresImage","logSearchPostgresInitImage","prometheusSelectedStorageClass","prometheusImage","prometheusSidecarImage","prometheusInitImage","selectedStorageClass","nameTenant","tenantSecurityContext","logSearchSecurityContext","logSearchPostgresSecurityContext","prometheusSecurityContext","updateAddField","isPageValid","configSectionItem","tenantCustomizationFields","marginLeft","containerItem","fieldGroup","createTenantCommon","paddingTop","marginBottom","responsiveSectionItem","logSearchCustomFields","fieldSpaceTop","prometheusCustomFields","modalBasic","wizardCommon","validationErrors","setValidationErrors","configureSTClasses","updateField","useCallback","field","useEffect","customAccountValidation","fieldKey","runAsUser","customValidation","parseInt","customValidationMessage","runAsGroup","fsGroup","pattern","customPatternMessage","commonVal","commonFormValidation","Object","keys","filter","cleanValidation","fieldName","clearValidationError","Paper","paperWrapper","headerElement","h3Section","descriptionText","FormSwitchWrapper","checked","multiContainer","InputBoxWrapper","min","runAsNonRoot","SelectWrapper","options","overlayObject","InputUnitMenu","onUnitChange","unitSelected","unitsList","idpSelection","identityProvider","accessKeys","secretKeys","openIDConfigurationURL","openIDClientID","openIDSecretID","openIDCallbackURL","openIDClaimName","openIDScopes","ADURL","ADSkipTLS","ADServerInsecure","ADUserNameSearchFilter","ADGroupSearchBaseDN","ADGroupSearchFilter","ADGroupNameAttribute","ADUserDNs","ADUserNameFormat","ADLookupBindDN","ADLookupBindPassword","ADUserDNSearchBaseDN","ADUserDNSearchFilter","ADServerStartTLS","shortened","gridTemplateColumns","gridGap","buttonTray","overlayAction","protocolRadioOptions","adUserDnRows","formFieldStyles","updateUserField","newUserField","updatePwordField","updateADUserField","newADUserDNsField","customIDPValidation","i","push","inputs","_","Fragment","placeholder","Add","splice","RemoveIcon","getRandomString","Casino","Delete","RadioGroupSelector","currentSelection","selectorOptions","formFieldRow","Typography","gutterBottom","enableTLS","security","enableAutoCert","enableCustomCerts","minioCertificates","certificates","caCertificates","addFileToCaCertificates","deleteCaCertificate","addCaCertificate","addKeyPair","addFileToKeyPair","deleteKeyPair","minioCertificateRows","borderBottom","flex","fileItem","minWidth","minioCertsContainer","minioCACertsRow","rowActions","keyPair","FileSelector","encodedValue","cert","key","AddIcon","replicas","encryption","enableEncryption","encryptionType","gemaltoEndpoint","gemaltoToken","gemaltoDomain","gemaltoRetry","awsEndpoint","awsRegion","awsKMSKey","awsAccessKey","awsSecretKey","awsToken","vaultEndpoint","vaultEngine","vaultNamespace","vaultPrefix","vaultAppRoleEngine","vaultId","vaultSecret","vaultRetry","vaultPing","azureEndpoint","azureTenantID","azureClientID","azureClientSecret","gcpProjectID","gcpEndpoint","gcpClientEmail","gcpClientID","gcpPrivateKeyID","gcpPrivateKey","enableCustomCertsForKES","serverCertificate","clientCertificate","vaultCertificate","vaultCA","gemaltoCA","kesSecurityContext","addFileServerCert","addFileClientCert","addFileVaultCert","addFileVaultCa","addFileGemaltoCa","encryptionTypeOptions","mutualTlsConfig","rightSpacer","responsiveContainer","encryptionAvailable","encoded_key","encoded_cert","encryptionValidation","podAffinity","affinity","nodeSelectorLabels","withPodAntiAffinity","keyValuePairs","nodeSelectorPairs","setModalErrorSnackMessage","setKeyValuePairs","affinityConfigField","affinityFieldLabel","radioField","affinityLabelKey","affinityLabelValue","affinityRow","loading","setLoading","keyValueMap","setKeyValueMap","keyOptions","setKeyOptions","then","res","k","catch","err","vl","kvp","kvs","a","indexOf","join","valid","splittedLabels","forEach","splitItem","affinityHelpText","newKey","arrCp","assign","v","mapDispatchToProps","setErrorSnackMessage","wrapText","wordWrap","deleteDialogStyles","namespace","addNamespaceOpen","closeAddNamespaceModalAndRefresh","addNamespaceLoading","setAddNamespaceLoading","ConfirmDialog","confirmText","confirmButtonProps","isOpen","isLoading","onConfirm","confirmationContent","LinearProgress","DialogContentText","volumeSize","tenantSize","sizeFactor","drivesPerServer","nodes","memoryNode","resourcesMemoryRequest","ecParity","ecParityChoices","cleanECChoices","resourcesSize","distribution","ecParityCalc","limitSize","cpuToUse","resourcesCPURequest","integrationSelection","root","table","usableInformation","storageFactors","find","erasureCode","Divider","Table","TableBody","TableRow","TableCell","scope","align","typeSelection","storageClass","disks","niceBytes","pvSize","persistentVolumes","rawCapacity","maxCapacity","Math","floor","maxFailureTolerations","CPU","memory","driveSize","sizeUnit","maxAllocatableResources","maxCPUsUse","maxMemorySize","resourcesSpecifyLimit","resourcesCPURequestError","resourcesCPULimitError","resourcesCPULimit","resourcesMemoryRequestError","resourcesMemoryLimitError","resourcesMemoryLimit","compositeFieldContainer","compositeAddOn","memoryExists","cpuExists","maxMemory","mem_priority","max_allocatable_mem","cpu_priority","max_allocatable_cpu","maxAllocatableCPU","baseCpuUse","max","baseMemoryUse","isNaN","validity","log","errorFlag","setErrorFlag","nodeError","setNodeError","ecCodeValidated","erasureCodeCalc","includes","defaultEC","factor","getBytes","clusterCapacity","unit","distrCalculate","calculateDistribution","parsedSize","commonValidation","trim","ecList","ecListTransform","newValue","k8sScalarUnitsExcluding","selectedStorageType","formToRender","updateMainField","undefined","setConfigs","mkPanelConfigurations","mainSelection","resourcesConfigurations","aws","azure","gcp","variantSelectorLabel","variantSelectorValues","configurations","sizingComponent","default","tenantName","setStorageClassesList","setLimitSize","sizePreview","emptyNamespace","setEmptyNamespace","loadingNamespaceInfo","setLoadingNamespaceInfo","showCreateButton","setShowCreateButton","openAddNSConfirm","setOpenAddNSConfirm","getNamespaceInformation","tenantsList","elements","getLimitSizes","newStorage","stExists","findIndex","detailedError","debounceNamespace","useMemo","debounce","cancel","customNamespaceError","isValid","frmValidationCleanup","refresh","md","sx","minHeight","overlayIcon","features","session","formRender","setFormRender","setConfiguration","validPages","resetAddTenantForm","pageBox","settingsCommon","showNewCredentials","setShowNewCredentials","createdAccount","setCreatedAccount","addSending","setAddSending","consoleCaCertificates","consoleCertificate","affinityType","kesReplicas","poolName","generatePoolName","affinityObject","getDefaultAffinity","getNodeSelector","dataSend","access_keys","secret_keys","enable_tls","enable_console","enable_prometheus","service_name","image","expose_minio","expose_console","pools","servers","volumes_per_server","volume_configuration","storage_class_name","securityContext","erasureCodingParity","resources","requests","cpu","limits","image_registry","registry","username","password","logSearchConfiguration","storageSize","postgres_image","postgres_init_image","postgres_securityContext","prometheusConfiguration","sidecar_image","init_image","tenantCerts","consoleCerts","caCerts","consoleCaCerts","ca_certificates","console_ca_certificates","minio","crt","tls","insertEncrypt","gemaltoCAIntroduce","ca","gemalto","keysecure","endpoint","credentials","token","domain","retry","secretsmanager","region","kmskey","accesskey","secretkey","keyvault","tenant_id","client_id","client_secret","secretmanager","project_id","client_email","private_key_id","private_key","vaultKeyPair","vaultCAInsert","vaultTLS","vault","engine","prefix","approle","secret","status","ping","encryptionServerKeyPair","encryptionClientKeyPair","client","server","dataIDP","keyarray","oidc","configuration_url","secret_id","claim_name","callback_url","scopes","active_directory","skip_tls_verification","server_insecure","username_format","username_search_filter","group_search_base_dn","group_search_filter","group_name_attribute","user_dns","lookup_bind_dn","lookup_bind_password","user_dn_search_base_dn","user_dn_search_filter","server_start_tls","consoleSAList","newSrvAcc","consoleItem","consoleKey","cancelButton","enabled","action","history","createButton","every","filteredWizardSteps","componentRender","buttons","advancedOnly","CredentialsPrompt","PageHeader","BackLink","PageLayout","GenericWizard","wizardSteps","resourceQuotas","quotas","returnQuotas","rsQuota","stCName","hard","used","tenantIsOnline","tenant","currentState","health_status","podAntiAffinity","requiredDuringSchedulingIgnoredDuringExecution","labelSelector","matchExpressions","operator","values","topologyKey","labels","splitKeyValue","nodeSelector","nodeAffinity","nodeSelectorTerms","def","pageName","ADD_TENANT_UPDATE_FIELD","ADD_TENANT_SET_PAGE_VALID","ADD_TENANT_SET_STORAGE_CLASSES_LIST","ADD_TENANT_SET_LIMIT_SIZE","ADD_TENANT_ADD_CA_KEYPAIR","ADD_TENANT_DELETE_CA_KEYPAIR","ADD_TENANT_ADD_FILE_TO_CA_KEYPAIR","ADD_TENANT_ADD_MINIO_KEYPAIR","ADD_TENANT_DELETE_MINIO_KEYPAIR","ADD_TENANT_ADD_FILE_TO_MINIO_KEYPAIR","ADD_TENANT_ENCRYPTION_SERVER_CERT","ADD_TENANT_ENCRYPTION_CLIENT_CERT","ADD_TENANT_ENCRYPTION_VAULT_CERT","ADD_TENANT_ENCRYPTION_VAULT_CA","ADD_TENANT_ENCRYPTION_GEMALTO_CA","ADD_TENANT_RESET_FORM","setTenantDetailsLoad","TENANT_DETAILS_SET_LOADING","setTenantName","tenantNamespace","TENANT_DETAILS_SET_CURRENT_TENANT","setTenantInfo","TENANT_DETAILS_SET_TENANT","setTenantTab","tab","TENANT_DETAILS_SET_TAB","newArray","ADD_TENANT_SET_KEY_PAIR_VALUE","errorBlock","main","withBreak"],"sourceRoot":""} \ No newline at end of file diff --git a/portal-ui/build/static/js/1056.40bdeca6.chunk.js b/portal-ui/build/static/js/1056.40bdeca6.chunk.js deleted file mode 100644 index e9618ab07..000000000 --- a/portal-ui/build/static/js/1056.40bdeca6.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1056,1140],{29316:function(e,t,n){n(50390);var r=n(6369),a=n(86509),s=n(4285),i=n(98280),o=n(62559);t.Z=(0,s.Z)((function(e){return(0,a.Z)({link:{display:"flex",alignItems:"center",textDecoration:"none",maxWidth:"300px",padding:"2rem 2rem 0rem 2rem",color:e.palette.primary.light,fontSize:".8rem","&:hover":{textDecoration:"underline"}},icon:{marginRight:".3rem",display:"flex",alignItems:"center",justifyContent:"center","& svg.min-icon":{width:12}}})}))((function(e){var t=e.to,n=e.label,a=e.classes,s=e.className,l=e.executeOnClick;return(0,o.jsxs)(r.rU,{to:t,className:"".concat(a.link," ").concat(s||""),onClick:function(){l&&l()},children:[(0,o.jsx)("div",{className:a.icon,children:(0,o.jsx)(i.xN,{})}),(0,o.jsx)("div",{className:a.label,children:n})]})}))},39080:function(e,t,n){n.r(t),n.d(t,{default:function(){return _}});var r=n(18489),a=n(35531),s=n(50390),i=n(38342),o=n.n(i),l=n(86509),c=n(4285),u=n(66946),d=n(76352),m=n(25594),g=n(58217),p=n(65771),f=n(70758),h=n(33034),x=n.n(h),v=n(98280),y=n(72462),S=n(62559),C=(0,c.Z)((function(e){return(0,l.Z)({container:{display:"flex",flexFlow:"column",padding:"20px 0 8px 0"},inputWithCopy:{"& .MuiInputBase-root ":{width:"100%",background:"#FBFAFA","& .MuiInputBase-input":{height:".8rem"},"& .MuiInputAdornment-positionEnd":{marginRight:".5rem","& .MuiButtonBase-root":{height:"2rem"}}},"& .MuiButtonBase-root .min-icon":{width:".8rem",height:".8rem"}},inputLabel:(0,r.Z)((0,r.Z)({},y.YI.inputLabel),{},{fontSize:".8rem"})})}))((function(e){var t=e.label,n=void 0===t?"":t,r=e.value,a=void 0===r?"":r,s=e.classes,i=void 0===s?{}:s;return(0,S.jsxs)("div",{className:i.container,children:[(0,S.jsxs)("div",{className:i.inputLabel,children:[n,":"]}),(0,S.jsx)("div",{className:i.inputWithCopy,children:(0,S.jsx)(g.Z,{value:a,readOnly:!0,endAdornment:(0,S.jsx)(p.Z,{position:"end",children:(0,S.jsx)(x(),{text:a,children:(0,S.jsx)(f.Z,{"aria-label":"copy",tooltip:"Copy",onClick:function(){},onMouseDown:function(){},edge:"end",children:(0,S.jsx)(v.TI,{})})})})})})]})})),j=n(47424),_=(0,c.Z)((function(e){return(0,l.Z)({warningBlock:{color:"red",fontSize:".85rem",margin:".5rem 0 .5rem 0",display:"flex",alignItems:"center","& svg ":{marginRight:".3rem",height:16,width:16}},credentialTitle:{padding:".8rem 0 0 0",fontWeight:600,fontSize:".9rem"},buttonContainer:{textAlign:"right",marginTop:"1rem"},credentialsPanel:{overflowY:"auto",maxHeight:350},promptTitle:{display:"flex",alignItems:"center"},buttonSpacer:{marginRight:".9rem"},promptIcon:{marginRight:".1rem",display:"flex",alignItems:"center",height:"2rem",width:"2rem"}})}))((function(e){var t=e.classes,n=e.newServiceAccount,i=e.open,l=e.closeModal,c=e.entity;if(!n)return null;var g=o()(n,"console",null),p=o()(n,"idp",!1);return(0,S.jsx)(d.Z,{modalOpen:i,onClose:function(){l()},title:(0,S.jsx)("div",{className:t.promptTitle,children:(0,S.jsxs)("div",{children:["New ",c," Created"]})}),titleIcon:(0,S.jsx)(v.tV,{}),children:(0,S.jsxs)(m.ZP,{container:!0,children:[(0,S.jsxs)(m.ZP,{item:!0,xs:12,className:t.formScrollable,children:["A new ",c," has been created with the following details:",!p&&g&&(0,S.jsx)(s.Fragment,{children:(0,S.jsxs)(m.ZP,{item:!0,xs:12,className:t.credentialsPanel,children:[(0,S.jsx)("div",{className:t.credentialTitle,children:"Console Credentials"}),Array.isArray(g)&&g.map((function(e,t){return(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(C,{label:"Access Key",value:e.accessKey}),(0,S.jsx)(C,{label:"Secret Key",value:e.secretKey})]})})),!Array.isArray(g)&&(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(C,{label:"Access Key",value:g.accessKey}),(0,S.jsx)(C,{label:"Secret Key",value:g.secretKey})]})]})}),p?(0,S.jsx)("div",{className:t.warningBlock,children:"Please Login via the configured external identity provider."}):(0,S.jsxs)("div",{className:t.warningBlock,children:[(0,S.jsx)(j.Z,{}),(0,S.jsx)("span",{children:"Write these down, as this is the only time the secret will be displayed."})]})]}),(0,S.jsxs)(m.ZP,{item:!0,xs:12,className:t.buttonContainer,children:[(0,S.jsx)(u.Z,{variant:"outlined",className:t.buttonSpacer,onClick:function(){l()},color:"primary",children:"Done"}),!p&&(0,S.jsx)(u.Z,{onClick:function(){var e={};if(g)if(Array.isArray(g)){var t=g.map((function(e){return{url:e.url,access_key:e.accessKey,secret_key:e.secretKey,api:"s3v4",path:"auto"}}));e={console:(0,a.Z)(t)}}else e={console:[{url:g.url,access_key:g.accessKey,secret_key:g.secretKey,api:"s3v4",path:"auto"}]};!function(e,t){var n=document.createElement("a");n.setAttribute("href","data:text/plain;charset=utf-8,"+encodeURIComponent(t)),n.setAttribute("download",e),n.style.display="none",document.body.appendChild(n),n.click(),document.body.removeChild(n)}("credentials.json",JSON.stringify((0,r.Z)({},e)))},endIcon:(0,S.jsx)(v._8,{}),variant:"contained",color:"primary",children:"Download"})]})]})})}))},82461:function(e,t,n){n.d(t,{Z:function(){return S}});var r=n(23430),a=n(18489),s=n(50390),i=n(38342),o=n.n(i),l=n(25594),c=n(36554),u=n(94187),d=n(95467),m=n(46529),g=n(94258),p=n(86509),f=n(4285),h=n(72462),x=n(97538),v=n(82981),y=n(62559),S=(0,f.Z)((function(e){return(0,p.Z)((0,a.Z)((0,a.Z)((0,a.Z)((0,a.Z)({},h.YI),h.Hr),{},{valueString:{maxWidth:350,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",marginTop:2},fileInputField:{margin:"13px 0","@media (max-width: 900px)":{flexFlow:"column"}}},h.bV),{},{inputLabel:(0,a.Z)((0,a.Z)({},h.YI.inputLabel),{},{fontWeight:"normal"}),textBoxContainer:(0,a.Z)((0,a.Z)({},h.YI.textBoxContainer),{},{maxWidth:"100%",border:"1px solid #eaeaea",paddingLeft:"15px"})}))}))((function(e){var t=e.label,n=e.classes,a=e.onChange,i=e.id,p=e.name,f=e.disabled,h=void 0!==f&&f,S=e.tooltip,C=void 0===S?"":S,j=e.required,_=e.error,Z=void 0===_?"":_,b=e.accept,P=void 0===b?"":b,N=e.value,I=void 0===N?"":N,A=(0,s.useState)(!1),T=(0,r.Z)(A,2),k=T[0],R=T[1];return(0,y.jsx)(s.Fragment,{children:(0,y.jsxs)(l.ZP,{item:!0,xs:12,className:"".concat(n.fileInputField," ").concat(n.fieldBottom," ").concat(n.fieldContainer," ").concat(""!==Z?n.errorInField:""),children:[""!==t&&(0,y.jsxs)(c.Z,{htmlFor:i,className:"".concat(""!==Z?n.fieldLabelError:""," ").concat(n.inputLabel),children:[(0,y.jsxs)("span",{children:[t,j?"*":""]}),""!==C&&(0,y.jsx)("div",{className:n.tooltipContainer,children:(0,y.jsx)(u.Z,{title:C,placement:"top-start",children:(0,y.jsx)("div",{className:n.tooltip,children:(0,y.jsx)(x.Z,{})})})})]}),k||""===I?(0,y.jsxs)("div",{className:n.textBoxContainer,children:[(0,y.jsx)("input",{type:"file",name:p,onChange:function(e){var t=o()(e,"target.files[0].name","");!function(e,t){var n=e.target.files[0],r=new FileReader;r.readAsDataURL(n),r.onload=function(){var e=r.result;if(e){var n=e.toString().split("base64,");2===n.length&&t(n[1])}}}(e,(function(e){a(e,t)}))},accept:P,required:j,disabled:h,className:n.fileInputField}),""!==I&&(0,y.jsx)(d.Z,{color:"primary","aria-label":"upload picture",component:"span",onClick:function(){R(!1)},disableRipple:!1,disableFocusRipple:!1,size:"small",children:(0,y.jsx)(g.Z,{})}),""!==Z&&(0,y.jsx)(v.Z,{errorMessage:Z})]}):(0,y.jsxs)("div",{className:n.fileReselect,children:[(0,y.jsx)("div",{className:n.valueString,children:I}),(0,y.jsx)(d.Z,{color:"primary","aria-label":"upload picture",component:"span",onClick:function(){R(!0)},disableRipple:!1,disableFocusRipple:!1,size:"small",children:(0,y.jsx)(m.Z,{})})]})]})})}))},25534:function(e,t,n){var r=n(18489),a=(n(50390),n(25594)),s=n(86509),i=n(4285),o=n(72462),l=n(62559);t.Z=(0,i.Z)((function(e){return(0,s.Z)((0,r.Z)({},o.Bw))}))((function(e){var t=e.classes,n=e.className,r=void 0===n?"":n,s=e.children;return(0,l.jsx)("div",{className:t.contentSpacer,children:(0,l.jsx)(a.ZP,{container:!0,children:(0,l.jsx)(a.ZP,{item:!0,xs:12,className:r,children:s})})})}))},1056:function(e,t,n){n.r(t),n.d(t,{default:function(){return ze}});var r,a,s=n(23430),i=n(18489),o=n(50390),l=n(38342),c=n.n(l),u=n(34424),d=n(25594),m=n(81378),g=n(86509),p=n(4285),f=n(72462),h=n(30324),x=n(28948),v=n(76295),y=n(44149),S=n(93127),C=n(39080),j=n(46864),_=n(35531),Z=n(46981),b=n(10369),P=n(84201),N=n(92440),I=n(66964),A=n(67754),T=n(62559),k=(0,u.$j)((function(e){return{storageClasses:e.tenants.createTenant.storageClasses,customImage:e.tenants.createTenant.fields.configure.customImage,imageName:e.tenants.createTenant.fields.configure.imageName,customDockerhub:e.tenants.createTenant.fields.configure.customDockerhub,imageRegistry:e.tenants.createTenant.fields.configure.imageRegistry,imageRegistryUsername:e.tenants.createTenant.fields.configure.imageRegistryUsername,imageRegistryPassword:e.tenants.createTenant.fields.configure.imageRegistryPassword,exposeMinIO:e.tenants.createTenant.fields.configure.exposeMinIO,exposeConsole:e.tenants.createTenant.fields.configure.exposeConsole,prometheusCustom:e.tenants.createTenant.fields.configure.prometheusCustom,tenantCustom:e.tenants.createTenant.fields.configure.tenantCustom,logSearchCustom:e.tenants.createTenant.fields.configure.logSearchCustom,logSearchVolumeSize:e.tenants.createTenant.fields.configure.logSearchVolumeSize,logSearchSizeFactor:e.tenants.createTenant.fields.configure.logSearchSizeFactor,prometheusVolumeSize:e.tenants.createTenant.fields.configure.prometheusVolumeSize,prometheusSizeFactor:e.tenants.createTenant.fields.configure.prometheusSizeFactor,logSearchSelectedStorageClass:e.tenants.createTenant.fields.configure.logSearchSelectedStorageClass,logSearchImage:e.tenants.createTenant.fields.configure.logSearchImage,kesImage:e.tenants.createTenant.fields.configure.kesImage,logSearchPostgresImage:e.tenants.createTenant.fields.configure.logSearchPostgresImage,logSearchPostgresInitImage:e.tenants.createTenant.fields.configure.logSearchPostgresInitImage,prometheusSelectedStorageClass:e.tenants.createTenant.fields.configure.prometheusSelectedStorageClass,prometheusImage:e.tenants.createTenant.fields.configure.prometheusImage,prometheusSidecarImage:e.tenants.createTenant.fields.configure.prometheusSidecarImage,prometheusInitImage:e.tenants.createTenant.fields.configure.prometheusInitImage,selectedStorageClass:e.tenants.createTenant.fields.nameTenant.selectedStorageClass,tenantSecurityContext:e.tenants.createTenant.fields.configure.tenantSecurityContext,logSearchSecurityContext:e.tenants.createTenant.fields.configure.logSearchSecurityContext,logSearchPostgresSecurityContext:e.tenants.createTenant.fields.configure.logSearchPostgresSecurityContext,prometheusSecurityContext:e.tenants.createTenant.fields.configure.prometheusSecurityContext}}),{updateAddField:j.HM,isPageValid:j.NO}),R=(0,p.Z)((function(e){return(0,g.Z)((0,i.Z)((0,i.Z)({configSectionItem:{marginRight:15,"& .multiContainer":{border:"1px solid red"}},tenantCustomizationFields:{marginLeft:30,width:"88%",margin:"auto"},containerItem:{marginRight:15},fieldGroup:(0,i.Z)((0,i.Z)({},f.QV.fieldGroup),{},{paddingTop:15,marginBottom:25}),responsiveSectionItem:{"@media (max-width: 900px)":{flexFlow:"column",alignItems:"flex-start","& div > div":{marginBottom:5,marginRight:0}}},logSearchCustomFields:{marginLeft:20,padding:10,width:"90%",margin:"auto"},fieldSpaceTop:{marginTop:15},prometheusCustomFields:{marginLeft:20,padding:10,width:"90%",margin:"auto"}},f.oO),f.AK))}))(k((function(e){var t=e.classes,n=e.storageClasses,r=e.customImage,a=e.imageName,l=e.customDockerhub,c=e.imageRegistry,u=e.imageRegistryUsername,m=e.imageRegistryPassword,g=e.exposeMinIO,p=e.exposeConsole,f=e.prometheusCustom,h=e.tenantCustom,x=e.logSearchCustom,v=e.logSearchVolumeSize,y=(e.logSearchSizeFactor,e.logSearchImage),S=e.kesImage,C=e.logSearchPostgresImage,j=e.logSearchPostgresInitImage,k=e.prometheusVolumeSize,R=(e.prometheusSizeFactor,e.logSearchSelectedStorageClass),z=e.prometheusSelectedStorageClass,D=e.prometheusImage,w=e.prometheusSidecarImage,F=e.prometheusInitImage,E=e.updateAddField,U=e.isPageValid,K=e.selectedStorageClass,q=e.tenantSecurityContext,G=e.logSearchSecurityContext,L=e.logSearchPostgresSecurityContext,M=e.prometheusSecurityContext,V=(0,o.useState)({}),O=(0,s.Z)(V,2),B=O[0],$=O[1],W=[{label:"Default",value:"default"}].concat((0,_.Z)(n)),H=(0,o.useCallback)((function(e,t){E("configure",e,t)}),[E]);(0,o.useEffect)((function(){var e=[];h&&(e=[].concat((0,_.Z)(e),[{fieldKey:"tenant_securityContext_runAsUser",required:!0,value:q.runAsUser,customValidation:""===q.runAsUser||parseInt(q.runAsUser)<0,customValidationMessage:"runAsUser must be present and be 0 or more"},{fieldKey:"tenant_securityContext_runAsGroup",required:!0,value:q.runAsGroup,customValidation:""===q.runAsGroup||parseInt(q.runAsGroup)<0,customValidationMessage:"runAsGroup must be present and be 0 or more"},{fieldKey:"tenant_securityContext_fsGroup",required:!0,value:q.fsGroup,customValidation:""===q.fsGroup||parseInt(q.fsGroup)<0,customValidationMessage:"fsGroup must be present and be 0 or more"}])),f&&(e=[].concat((0,_.Z)(e),[{fieldKey:"prometheus_storage_class",required:!0,value:z,customValidation:""===z,customValidationMessage:"Field cannot be empty"},{fieldKey:"prometheus_volume_size",required:!0,value:k,customValidation:""===k||parseInt(k)<=0,customValidationMessage:"Volume size must be present and be greater than 0"},{fieldKey:"prometheus_securityContext_runAsUser",required:!0,value:M.runAsUser,customValidation:""===M.runAsUser||parseInt(M.runAsUser)<0,customValidationMessage:"runAsUser must be present and be 0 or more"},{fieldKey:"prometheus_securityContext_runAsGroup",required:!0,value:M.runAsGroup,customValidation:""===M.runAsGroup||parseInt(M.runAsGroup)<0,customValidationMessage:"runAsGroup must be present and be 0 or more"},{fieldKey:"prometheus_securityContext_fsGroup",required:!0,value:M.fsGroup,customValidation:""===M.fsGroup||parseInt(M.fsGroup)<0,customValidationMessage:"fsGroup must be present and be 0 or more"}])),x&&(e=[].concat((0,_.Z)(e),[{fieldKey:"log_search_storage_class",required:!0,value:R,customValidation:""===R,customValidationMessage:"Field cannot be empty"},{fieldKey:"log_search_volume_size",required:!0,value:v,customValidation:""===v||parseInt(v)<=0,customValidationMessage:"Volume size must be present and be greatter than 0"},{fieldKey:"logSearch_securityContext_runAsUser",required:!0,value:G.runAsUser,customValidation:""===G.runAsUser||parseInt(G.runAsUser)<0,customValidationMessage:"runAsUser must be present and be 0 or more"},{fieldKey:"logSearch_securityContext_runAsGroup",required:!0,value:G.runAsGroup,customValidation:""===G.runAsGroup||parseInt(G.runAsGroup)<0,customValidationMessage:"runAsGroup must be present and be 0 or more"},{fieldKey:"logSearch_securityContext_fsGroup",required:!0,value:G.fsGroup,customValidation:""===G.fsGroup||parseInt(G.fsGroup)<0,customValidationMessage:"fsGroup must be present and be 0 or more"},{fieldKey:"postgres_securityContext_runAsUser",required:!0,value:L.runAsUser,customValidation:""===L.runAsUser||parseInt(L.runAsUser)<0,customValidationMessage:"runAsUser must be present and be 0 or more"},{fieldKey:"postgres_securityContext_runAsGroup",required:!0,value:M.runAsGroup,customValidation:""===L.runAsGroup||parseInt(L.runAsGroup)<0,customValidationMessage:"runAsGroup must be present and be 0 or more"},{fieldKey:"postgres_securityContext_fsGroup",required:!0,value:L.fsGroup,customValidation:""===L.fsGroup||parseInt(L.fsGroup)<0,customValidationMessage:"fsGroup must be present and be 0 or more"}])),r&&(e=[].concat((0,_.Z)(e),[{fieldKey:"image",required:!1,value:a,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'minio/minio:VERSION'"},{fieldKey:"logSearchImage",required:!1,value:y,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'minio/logsearchapi:VERSION'"},{fieldKey:"kesImage",required:!1,value:S,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'minio/kes:VERSION'"},{fieldKey:"logSearchPostgresImage",required:!1,value:C,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'library/postgres:VERSION'"},{fieldKey:"logSearchPostgresInitImage",required:!1,value:j,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'library/busybox:VERSION'"},{fieldKey:"prometheusImage",required:!1,value:D,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'minio/prometheus:VERSION'"},{fieldKey:"prometheusSidecarImage",required:!1,value:w,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'project/container:VERSION'"},{fieldKey:"prometheusInitImage",required:!1,value:F,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'library/busybox:VERSION'"}]),l&&(e=[].concat((0,_.Z)(e),[{fieldKey:"registry",required:!0,value:c},{fieldKey:"registryUsername",required:!0,value:u},{fieldKey:"registryPassword",required:!0,value:m}])));var t=(0,P.R)(e);U("configure",0===Object.keys(t).length),$(t)}),[r,a,y,S,C,j,D,w,F,l,c,u,m,U,f,h,x,z,k,R,v,q,G,L,M]),(0,o.useEffect)((function(){n.length>0&&(0===n.filter((function(e){return e.value===z})).length&&H("prometheusSelectedStorageClass","default"),0===n.filter((function(e){return e.value===R})).length&&H("logSearchSelectedStorageClass","default"))}),[R,z,K,n,H]);var Y=function(e){$((0,b.h)(B,e))};return(0,T.jsxs)(Z.Z,{className:t.paperWrapper,children:[(0,T.jsxs)("div",{className:t.headerElement,children:[(0,T.jsx)("h3",{className:t.h3Section,children:"Configure"}),(0,T.jsx)("span",{className:t.descriptionText,children:"Basic configurations for tenant management"})]}),(0,T.jsxs)("div",{className:t.headerElement,children:[(0,T.jsx)("h3",{className:t.h3Section,children:"Expose Services"}),(0,T.jsx)("span",{className:t.descriptionText,children:"Whether the tenant's services should request an external IP."})]}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.configSectionItem,children:(0,T.jsx)(N.Z,{value:"expose_minio",id:"expose_minio",name:"expose_minio",checked:g,onChange:function(e){var t=e.target.checked;H("exposeMinIO",t)},label:"Expose MiniO Service"})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.configSectionItem,children:(0,T.jsx)(N.Z,{value:"expose_console",id:"expose_console",name:"expose_console",checked:p,onChange:function(e){var t=e.target.checked;H("exposeConsole",t)},label:"Expose Console Service"})}),(0,T.jsxs)("div",{className:t.headerElement,children:[(0,T.jsx)("h3",{className:t.h3Section,children:"Additional Configurations"}),(0,T.jsx)("span",{className:t.descriptionText,children:"Configure SecurityContext, Storage Classes & Storage size for Log Search, Prometheus add-ons and your Tenant"})]}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.configSectionItem,children:(0,T.jsx)(N.Z,{value:"tenantConfig",id:"tenant_configuration",name:"tenant_configuration",checked:h,onChange:function(e){var t=e.target.checked;H("tenantCustom",t)},label:"Override Tenant defaults"})}),h&&(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.tenantCustomizationFields,children:(0,T.jsxs)("fieldset",{className:t.fieldGroup,children:[(0,T.jsx)("legend",{className:t.descriptionText,children:"SecurityContext for MinIO"}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:"".concat(t.configSectionItem),children:(0,T.jsxs)("div",{className:"".concat(t.multiContainer," ").concat(t.responsiveSectionItem),children:[(0,T.jsx)("div",{className:t.containerItem,children:(0,T.jsx)(I.Z,{type:"number",id:"tenant_securityContext_runAsUser",name:"tenant_securityContext_runAsUser",onChange:function(e){H("tenantSecurityContext",(0,i.Z)((0,i.Z)({},q),{},{runAsUser:e.target.value})),Y("tenant_securityContext_runAsUser")},label:"Run As User",value:q.runAsUser,required:!0,error:B.tenant_securityContext_runAsUser||"",min:"0"})}),(0,T.jsx)("div",{className:t.containerItem,children:(0,T.jsx)(I.Z,{type:"number",id:"tenant_securityContext_runAsGroup",name:"tenant_securityContext_runAsGroup",onChange:function(e){H("tenantSecurityContext",(0,i.Z)((0,i.Z)({},q),{},{runAsGroup:e.target.value})),Y("tenant_securityContext_runAsGroup")},label:"Run As Group",value:q.runAsGroup,required:!0,error:B.tenant_securityContext_runAsGroup||"",min:"0"})}),(0,T.jsx)("div",{className:t.containerItem,children:(0,T.jsx)(I.Z,{type:"number",id:"tenant_securityContext_fsGroup",name:"tenant_securityContext_fsGroup",onChange:function(e){H("tenantSecurityContext",(0,i.Z)((0,i.Z)({},q),{},{fsGroup:e.target.value})),Y("tenant_securityContext_fsGroup")},label:"FsGroup",value:q.fsGroup,required:!0,error:B.tenant_securityContext_fsGroup||"",min:"0"})})]})}),(0,T.jsx)("br",{}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.configSectionItem,children:(0,T.jsx)("div",{className:t.multiContainer,children:(0,T.jsx)(N.Z,{value:"tenantSecurityContextRunAsNonRoot",id:"tenant_securityContext_runAsNonRoot",name:"tenant_securityContext_runAsNonRoot",checked:q.runAsNonRoot,onChange:function(e){var t=e.target.checked;H("tenantSecurityContext",(0,i.Z)((0,i.Z)({},q),{},{runAsNonRoot:t}))},label:"Do not run as Root"})})})]})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.configSectionItem,children:(0,T.jsx)(N.Z,{value:"logSearchConfig",id:"log_search_configuration",name:"log_search_configuration",checked:x,onChange:function(e){var t=e.target.checked;H("logSearchCustom",t)},label:"Override Log Search defaults"})}),x&&(0,T.jsxs)(d.ZP,{xs:12,className:t.logSearchCustomFields,children:[(0,T.jsx)(d.ZP,{item:!0,xs:12,children:(0,T.jsx)(A.Z,{id:"log_search_storage_class",name:"log_search_storage_class",onChange:function(e){H("logSearchSelectedStorageClass",e.target.value)},label:"Log Search Storage Class",value:R,options:W,disabled:W.length<1})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,children:(0,T.jsx)("div",{className:t.multiContainer,children:(0,T.jsx)(I.Z,{type:"number",id:"log_search_volume_size",name:"log_search_volume_size",onChange:function(e){H("logSearchVolumeSize",e.target.value),Y("log_search_volume_size")},label:"Storage Size [Gi]",value:v,required:!0,error:B.log_search_volume_size||"",min:"0"})})}),(0,T.jsxs)("fieldset",{className:"".concat(t.fieldGroup," ").concat(t.fieldSpaceTop),children:[(0,T.jsx)("legend",{className:t.descriptionText,children:"SecurityContext for LogSearch"}),(0,T.jsx)(d.ZP,{item:!0,xs:12,children:(0,T.jsxs)("div",{className:"".concat(t.multiContainer," ").concat(t.responsiveSectionItem),children:[(0,T.jsx)("div",{className:t.configSectionItem,children:(0,T.jsx)(I.Z,{type:"number",id:"logSearch_securityContext_runAsUser",name:"logSearch_securityContext_runAsUser",onChange:function(e){H("logSearchSecurityContext",(0,i.Z)((0,i.Z)({},G),{},{runAsUser:e.target.value})),Y("logSearch_securityContext_runAsUser")},label:"Run As User",value:G.runAsUser,required:!0,error:B.logSearch_securityContext_runAsUser||"",min:"0"})}),(0,T.jsx)("div",{className:t.configSectionItem,children:(0,T.jsx)(I.Z,{type:"number",id:"logSearch_securityContext_runAsGroup",name:"logSearch_securityContext_runAsGroup",onChange:function(e){H("logSearchSecurityContext",(0,i.Z)((0,i.Z)({},G),{},{runAsGroup:e.target.value})),Y("logSearch_securityContext_runAsGroup")},label:"Run As Group",value:G.runAsGroup,required:!0,error:B.logSearch_securityContext_runAsGroup||"",min:"0"})}),(0,T.jsx)("div",{className:t.configSectionItem,children:(0,T.jsx)(I.Z,{type:"number",id:"logSearch_securityContext_fsGroup",name:"logSearch_securityContext_fsGroup",onChange:function(e){H("logSearchSecurityContext",(0,i.Z)((0,i.Z)({},G),{},{fsGroup:e.target.value})),Y("logSearch_securityContext_fsGroup")},label:"FsGroup",value:G.fsGroup,required:!0,error:B.logSearch_securityContext_fsGroup||"",min:"0"})})]})}),(0,T.jsx)("br",{}),(0,T.jsx)(d.ZP,{item:!0,xs:12,children:(0,T.jsx)("div",{className:t.multiContainer,children:(0,T.jsx)(N.Z,{value:"logSearchSecurityContextRunAsNonRoot",id:"logSearch_securityContext_runAsNonRoot",name:"logSearch_securityContext_runAsNonRoot",checked:G.runAsNonRoot,onChange:function(e){var t=e.target.checked;H("logSearchSecurityContext",(0,i.Z)((0,i.Z)({},G),{},{runAsNonRoot:t}))},label:"Do not run as Root"})})})]}),(0,T.jsxs)("fieldset",{className:t.fieldGroup,children:[(0,T.jsx)("legend",{className:t.descriptionText,children:"SecurityContext for PostgreSQL"}),(0,T.jsx)(d.ZP,{item:!0,xs:12,children:(0,T.jsxs)("div",{className:"".concat(t.multiContainer," ").concat(t.responsiveSectionItem),children:[(0,T.jsx)("div",{className:t.configSectionItem,children:(0,T.jsx)(I.Z,{type:"number",id:"postgres_securityContext_runAsUser",name:"postgres_securityContext_runAsUser",onChange:function(e){H("logSearchPostgresSecurityContext",(0,i.Z)((0,i.Z)({},L),{},{runAsUser:e.target.value})),Y("postgres_securityContext_runAsUser")},label:"Run As User",value:L.runAsUser,required:!0,error:B.postgres_securityContext_runAsUser||"",min:"0"})}),(0,T.jsx)("div",{className:t.configSectionItem,children:(0,T.jsx)(I.Z,{type:"number",id:"postgres_securityContext_runAsGroup",name:"postgres_securityContext_runAsGroup",onChange:function(e){H("logSearchPostgresSecurityContext",(0,i.Z)((0,i.Z)({},L),{},{runAsGroup:e.target.value})),Y("postgres_securityContext_runAsGroup")},label:"Run As Group",value:L.runAsGroup,required:!0,error:B.postgres_securityContext_runAsGroup||"",min:"0"})}),(0,T.jsx)("div",{className:t.configSectionItem,children:(0,T.jsx)(I.Z,{type:"number",id:"postgres_securityContext_fsGroup",name:"postgres_securityContext_fsGroup",onChange:function(e){H("logSearchPostgresSecurityContext",(0,i.Z)((0,i.Z)({},L),{},{fsGroup:e.target.value})),Y("postgres_securityContext_fsGroup")},label:"FsGroup",value:L.fsGroup,required:!0,error:B.postgres_securityContext_fsGroup||"",min:"0"})})]})}),(0,T.jsx)("br",{}),(0,T.jsx)(d.ZP,{item:!0,xs:12,children:(0,T.jsx)("div",{className:t.multiContainer,children:(0,T.jsx)(N.Z,{value:"postgresSecurityContextRunAsNonRoot",id:"postgres_securityContext_runAsNonRoot",name:"postgres_securityContext_runAsNonRoot",checked:L.runAsNonRoot,onChange:function(e){var t=e.target.checked;H("logSearchPostgresSecurityContext",(0,i.Z)((0,i.Z)({},L),{},{runAsNonRoot:t}))},label:"Do not run as Root"})})})]})]}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.configSectionItem,children:(0,T.jsx)(N.Z,{value:"prometheusConfig",id:"prometheus_configuration",name:"prometheus_configuration",checked:f,onChange:function(e){var t=e.target.checked;H("prometheusCustom",t)},label:"Override Prometheus defaults"})}),f&&(0,T.jsxs)(d.ZP,{xs:12,className:t.prometheusCustomFields,children:[(0,T.jsx)(d.ZP,{item:!0,xs:12,children:(0,T.jsx)(A.Z,{id:"prometheus_storage_class",name:"prometheus_storage_class",onChange:function(e){H("prometheusSelectedStorageClass",e.target.value)},label:"Prometheus Storage Class",value:z,options:W,disabled:W.length<1})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,children:(0,T.jsx)("div",{className:t.multiContainer,children:(0,T.jsx)(I.Z,{type:"number",id:"prometheus_volume_size",name:"prometheus_volume_size",onChange:function(e){H("prometheusVolumeSize",e.target.value),Y("prometheus_volume_size")},label:"Storage Size [Gi]",value:k,required:!0,error:B.prometheus_volume_size||"",min:"0"})})}),(0,T.jsxs)("fieldset",{className:"".concat(t.fieldGroup," ").concat(t.fieldSpaceTop),children:[(0,T.jsx)("legend",{className:t.descriptionText,children:"SecurityContext for Prometheus"}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.configSectionItem,children:(0,T.jsxs)("div",{className:"".concat(t.multiContainer," ").concat(t.responsiveSectionItem),children:[(0,T.jsx)("div",{className:t.configSectionItem,children:(0,T.jsx)(I.Z,{type:"number",id:"prometheus_securityContext_runAsUser",name:"prometheus_securityContext_runAsUser",onChange:function(e){H("prometheusSecurityContext",(0,i.Z)((0,i.Z)({},M),{},{runAsUser:e.target.value})),Y("prometheus_securityContext_runAsUser")},label:"Run As User",value:M.runAsUser,required:!0,error:B.prometheus_securityContext_runAsUser||"",min:"0"})}),(0,T.jsx)("div",{className:t.configSectionItem,children:(0,T.jsx)(I.Z,{type:"number",id:"prometheus_securityContext_runAsGroup",name:"prometheus_securityContext_runAsGroup",onChange:function(e){H("prometheusSecurityContext",(0,i.Z)((0,i.Z)({},M),{},{runAsGroup:e.target.value})),Y("prometheus_securityContext_runAsGroup")},label:"Run As Group",value:M.runAsGroup,required:!0,error:B.prometheus_securityContext_runAsGroup||"",min:"0"})}),(0,T.jsx)("div",{className:t.configSectionItem,children:(0,T.jsx)(I.Z,{type:"number",id:"prometheus_securityContext_fsGroup",name:"prometheus_securityContext_fsGroup",onChange:function(e){H("prometheusSecurityContext",(0,i.Z)((0,i.Z)({},M),{},{fsGroup:e.target.value})),Y("prometheus_securityContext_fsGroup")},label:"FsGroup",value:M.fsGroup,required:!0,error:B.prometheus_securityContext_fsGroup||"",min:"0"})})]})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.configSectionItem,children:(0,T.jsx)("div",{className:"".concat(t.multiContainer," ").concat(t.fieldSpaceTop),children:(0,T.jsx)(N.Z,{value:"prometheusSecurityContextRunAsNonRoot",id:"prometheus_securityContext_runAsNonRoot",name:"prometheus_securityContext_runAsNonRoot",checked:M.runAsNonRoot,onChange:function(e){var t=e.target.checked;H("prometheusSecurityContext",(0,i.Z)((0,i.Z)({},M),{},{runAsNonRoot:t}))},label:"Do not run as Root"})})})]})]})]})}))),z=n(94187),D=n(95467),w=n(35477),F=n(94759),E=n(43615),U=n(27207),K=n(96152),q=n(35150),G=(0,u.$j)((function(e){return{idpSelection:e.tenants.createTenant.fields.identityProvider.idpSelection,accessKeys:e.tenants.createTenant.fields.identityProvider.accessKeys,secretKeys:e.tenants.createTenant.fields.identityProvider.secretKeys,openIDConfigurationURL:e.tenants.createTenant.fields.identityProvider.openIDConfigurationURL,openIDClientID:e.tenants.createTenant.fields.identityProvider.openIDClientID,openIDSecretID:e.tenants.createTenant.fields.identityProvider.openIDSecretID,openIDCallbackURL:e.tenants.createTenant.fields.identityProvider.openIDCallbackURL,openIDClaimName:e.tenants.createTenant.fields.identityProvider.openIDClaimName,openIDScopes:e.tenants.createTenant.fields.identityProvider.openIDScopes,ADURL:e.tenants.createTenant.fields.identityProvider.ADURL,ADSkipTLS:e.tenants.createTenant.fields.identityProvider.ADSkipTLS,ADServerInsecure:e.tenants.createTenant.fields.identityProvider.ADServerInsecure,ADUserNameSearchFilter:e.tenants.createTenant.fields.identityProvider.ADUserNameSearchFilter,ADGroupSearchBaseDN:e.tenants.createTenant.fields.identityProvider.ADGroupSearchBaseDN,ADGroupSearchFilter:e.tenants.createTenant.fields.identityProvider.ADGroupSearchFilter,ADGroupNameAttribute:e.tenants.createTenant.fields.identityProvider.ADGroupNameAttribute,ADUserDNs:e.tenants.createTenant.fields.identityProvider.ADUserDNs,ADUserNameFormat:e.tenants.createTenant.fields.identityProvider.ADUserNameFormat,ADLookupBindDN:e.tenants.createTenant.fields.identityProvider.ADLookupBindDN,ADLookupBindPassword:e.tenants.createTenant.fields.identityProvider.ADLookupBindPassword,ADUserDNSearchBaseDN:e.tenants.createTenant.fields.identityProvider.ADUserDNSearchBaseDN,ADUserDNSearchFilter:e.tenants.createTenant.fields.identityProvider.ADUserDNSearchFilter,ADServerStartTLS:e.tenants.createTenant.fields.identityProvider.ADServerStartTLS}}),{updateAddField:j.HM,isPageValid:j.NO}),L=(0,p.Z)((function(e){return(0,g.Z)((0,i.Z)((0,i.Z)((0,i.Z)((0,i.Z)({shortened:{gridTemplateColumns:"auto auto 50px 50px",display:"grid",gridGap:15,marginBottom:10,"& input":{fontWeight:400}},buttonTray:{marginLeft:10,display:"flex",height:38,"& button":{background:"#EAEAEA"}},overlayAction:{marginLeft:10,"& svg":{maxWidth:15,maxHeight:15},"& button":{background:"#EAEAEA"}},protocolRadioOptions:{display:"flex",flexFlow:"column",marginBottom:10,"& label":{fontSize:14},"& div":{display:"flex",flexFlow:"column",alignItems:"baseline"}},adUserDnRows:{display:"flex"}},f.QV),f.DF),f.oO),f.AK))}))(G((function(e){var t=e.classes,n=e.idpSelection,r=e.accessKeys,a=e.secretKeys,i=e.openIDConfigurationURL,l=e.openIDClientID,c=e.openIDSecretID,u=e.openIDCallbackURL,m=e.openIDClaimName,g=e.openIDScopes,p=e.ADURL,f=e.ADSkipTLS,h=e.ADServerInsecure,x=e.ADUserNameSearchFilter,v=e.ADGroupSearchBaseDN,y=e.ADGroupSearchFilter,S=e.ADGroupNameAttribute,C=e.ADUserDNs,j=e.ADUserNameFormat,A=e.ADLookupBindDN,k=e.ADLookupBindPassword,R=e.ADUserDNSearchBaseDN,G=e.ADUserDNSearchFilter,L=e.ADServerStartTLS,M=e.updateAddField,V=e.isPageValid,O=(0,o.useState)({}),B=(0,s.Z)(O,2),$=B[0],W=B[1],H=(0,o.useCallback)((function(e,t){M("identityProvider",e,t)}),[M]),Y=function(e,t){var n=(0,_.Z)(r);n[e]=t,H("accessKeys",n)},Q=function(e,t){var n=(0,_.Z)(a);n[e]=t,H("secretKeys",n)},X=function(e,t){var n=(0,_.Z)(C);n[e]=t,H("ADUserDNs",n)},J=function(e){W((0,b.h)($,e))};(0,o.useEffect)((function(){var e=[];if("Built-in"===n){e=(0,_.Z)(e);for(var t=0;t1&&(r.splice(n,1),a.splice(n,1),Y(r.length-1,r[r.length-1]))},children:(0,T.jsx)(q.Z,{})})})}),(0,T.jsx)(z.Z,{title:"Randomize Credentials","aria-label":"add",children:(0,T.jsx)("div",{className:t.overlayAction,children:(0,T.jsx)(D.Z,{onClick:function(){Y(n,(0,b.z)(16)),Q(n,(0,b.z)(32))},size:"small",children:(0,T.jsx)(F.Z,{})})})})]})]})},"identityField-".concat(n.toString()))}))),"AD"===n&&(ee=C.map((function(e,n){return(0,T.jsx)(o.Fragment,{children:(0,T.jsxs)("div",{className:t.adUserDnRows,children:[(0,T.jsx)(I.Z,{id:"ad-userdn-".concat(n.toString()),label:"",placeholder:"",name:"ad-userdn-".concat(n.toString()),value:C[n],onChange:function(e){X(n,e.target.value),J("ad-userdn-".concat(n.toString()))},index:n,error:$["ad-userdn-".concat(n.toString())]||""},"csv-ad-userdn-".concat(n.toString())),(0,T.jsxs)("div",{className:t.buttonTray,children:[(0,T.jsx)(z.Z,{title:"Add User","aria-label":"add",children:(0,T.jsx)(D.Z,{size:"small",onClick:function(){C.push(""),X(C.length-1,"")},children:(0,T.jsx)(K.Z,{})})}),(0,T.jsx)(z.Z,{title:"Remove","aria-label":"add",children:(0,T.jsx)(D.Z,{size:"small",style:{marginLeft:16},onClick:function(){C.length>1&&(C.splice(n,1),Y(C.length-1,C[C.length-1]))},children:(0,T.jsx)(E.Z,{})})})]})]})},"identityField-".concat(n.toString()))}))),(0,T.jsxs)(Z.Z,{className:t.paperWrapper,children:[(0,T.jsxs)("div",{className:t.headerElement,children:[(0,T.jsx)("h3",{className:t.h3Section,children:"Identity Provider"}),(0,T.jsx)("span",{className:t.descriptionText,children:"Access to the tenant can be controlled via an external Identity Manager."})]}),(0,T.jsxs)(d.ZP,{item:!0,xs:12,className:t.protocolRadioOptions,children:[(0,T.jsx)("label",{children:"Protocol"}),(0,T.jsx)(U.Z,{currentSelection:n,id:"idp-options",name:"idp-options",label:" ",onChange:function(e){H("idpSelection",e.target.value)},selectorOptions:[{label:"Built-in",value:"Built-in"},{label:"OpenID",value:"OpenID"},{label:"Active Directory",value:"AD"}]})]}),"Built-in"===n&&(0,T.jsxs)(o.Fragment,{children:["Add additional users",ee]}),"OpenID"===n&&(0,T.jsxs)(o.Fragment,{children:[(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"openID_CONFIGURATION_URL",name:"openID_CONFIGURATION_URL",onChange:function(e){H("openIDConfigurationURL",e.target.value),J("openID_CONFIGURATION_URL")},label:"Configuration URL",value:i,placeholder:"https://your-identity-provider.com/.well-known/openid-configuration",error:$.openID_CONFIGURATION_URL||"",required:!0})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"openID_clientID",name:"openID_clientID",onChange:function(e){H("openIDClientID",e.target.value),J("openID_clientID")},label:"Client ID",value:l,error:$.openID_clientID||"",required:!0})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"openID_secretID",name:"openID_secretID",onChange:function(e){H("openIDSecretID",e.target.value),J("openID_secretID")},label:"Secret ID",value:c,error:$.openID_secretID||"",required:!0})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"openID_callbackURL",name:"openID_callbackURL",onChange:function(e){H("openIDCallbackURL",e.target.value),J("openID_callbackURL")},label:"Callback URL",value:u,placeholder:"https://your-console-endpoint:9443/oauth_callback",error:$.openID_callbackURL||""})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"openID_claimName",name:"openID_claimName",onChange:function(e){H("openIDClaimName",e.target.value),J("openID_claimName")},label:"Claim Name",value:m,error:$.openID_claimName||"",required:!0})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"openID_scopes",name:"openID_scopes",onChange:function(e){H("openIDScopes",e.target.value),J("openID_scopes")},label:"Scopes",value:g})})]}),"AD"===n&&(0,T.jsxs)(o.Fragment,{children:[(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"AD_URL",name:"AD_URL",onChange:function(e){H("ADURL",e.target.value),J("AD_URL")},label:"LDAP Server Address",value:p,placeholder:"ldap-server:636",error:$.AD_URL||"",required:!0})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(N.Z,{value:"ad_skipTLS",id:"ad_skipTLS",name:"ad_skipTLS",checked:f,onChange:function(e){var t=e.target.checked;H("ADSkipTLS",t)},label:"Skip TLS Verification"})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(N.Z,{value:"ad_serverInsecure",id:"ad_serverInsecure",name:"ad_serverInsecure",checked:h,onChange:function(e){var t=e.target.checked;H("ADServerInsecure",t)},label:"Server Insecure"})}),h?(0,T.jsxs)(d.ZP,{item:!0,xs:12,children:[(0,T.jsx)(w.Z,{className:t.error,variant:"caption",display:"block",gutterBottom:!0,children:"Warning: All traffic with Active Directory will be unencrypted"}),(0,T.jsx)("br",{})]}):null,(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(N.Z,{value:"ad_serverStartTLS",id:"ad_serverStartTLS",name:"ad_serverStartTLS",checked:L,onChange:function(e){var t=e.target.checked;H("ADServerStartTLS",t)},label:"Start TLS connection to AD/LDAP server"})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"ad_userNameFormat",name:"ad_userNameFormat",onChange:function(e){H("ADUserNameFormat",e.target.value)},label:"Username Format",value:j,placeholder:"uid=%s,cn=accounts,dc=myldapserver,dc=com"})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"ad_userNameFilter",name:"ad_userNameFilter",onChange:function(e){H("ADUserNameSearchFilter",e.target.value)},label:"Username Search Filter",value:x,placeholder:"(|(objectclass=posixAccount)(uid=%s))"})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"ad_groupSearchBaseDN",name:"ad_groupSearchBaseDN",onChange:function(e){H("ADGroupSearchBaseDN",e.target.value)},label:"Group Search Base DN",value:v,placeholder:"ou=hwengg,dc=min,dc=io;ou=swengg,dc=min,dc=io"})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"ad_groupSearchFilter",name:"ad_groupSearchFilter",onChange:function(e){H("ADGroupSearchFilter",e.target.value)},label:"Group Search Filter",value:y,placeholder:"(&(objectclass=groupOfNames)(member=%s))"})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"ad_groupNameAttribute",name:"ad_groupNameAttribute",onChange:function(e){H("ADGroupNameAttribute",e.target.value)},label:"Group Name Attribute",value:S,placeholder:"cn"})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"ad_lookupBindDN",name:"ad_lookupBindDN",onChange:function(e){H("ADLookupBindDN",e.target.value)},label:"Lookup Bind DN",value:A,placeholder:"cn=admin,dc=min,dc=io"})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"ad_lookupBindPassword",name:"ad_lookupBindPassword",onChange:function(e){H("ADLookupBindPassword",e.target.value)},label:"Lookup Bind Password",value:k,placeholder:"admin"})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"ad_userDNSearchBaseDN",name:"ad_userDNSearchBaseDN",onChange:function(e){H("ADUserDNSearchBaseDN",e.target.value)},label:"User DN Search Base DN",value:R,placeholder:"dc=min,dc=io"})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"ad_userDNSearchFilter",name:"ad_userDNSearchFilter",onChange:function(e){H("ADUserDNSearchFilter",e.target.value)},label:"User DN Search Filter",value:G,placeholder:"(uid=%s)"})}),(0,T.jsxs)("fieldset",{className:t.fieldGroup,children:[(0,T.jsx)("legend",{className:t.descriptionText,children:"List of user DNs (Distinguished Names) to be Tenant Administrators"}),(0,T.jsx)(d.ZP,{item:!0,xs:12,children:ee})]})]})]})}))),M=n(82461),V=n(14792),O=(0,u.$j)((function(e){return{enableTLS:e.tenants.createTenant.fields.security.enableTLS,enableAutoCert:e.tenants.createTenant.fields.security.enableAutoCert,enableCustomCerts:e.tenants.createTenant.fields.security.enableCustomCerts,minioCertificates:e.tenants.createTenant.certificates.minioCertificates,caCertificates:e.tenants.createTenant.certificates.caCertificates}}),{updateAddField:j.HM,isPageValid:j.NO,addFileToCaCertificates:j.Eq,deleteCaCertificate:j.IG,addCaCertificate:j.fK,addKeyPair:j.Mg,addFileToKeyPair:j.aN,deleteKeyPair:j.XX}),B=(0,p.Z)((function(e){return(0,g.Z)((0,i.Z)((0,i.Z)((0,i.Z)({minioCertificateRows:{display:"flex",alignItems:"center",justifyContent:"flex-start",borderBottom:"1px solid #EAEAEA","&:last-child":{borderBottom:0},"@media (max-width: 900px)":{flex:1}},fileItem:{marginRight:10,display:"flex","& div label":{minWidth:50},"@media (max-width: 900px)":{flexFlow:"column"}},minioCertsContainer:{marginBottom:15},minioCACertsRow:{display:"flex",alignItems:"center",justifyContent:"flex-start",borderBottom:"1px solid #EAEAEA","&:last-child":{borderBottom:0},"@media (max-width: 900px)":{flex:1,"& div label":{minWidth:50}}},rowActions:{display:"flex",justifyContent:"flex-end","@media (max-width: 900px)":{flex:1}},overlayAction:{marginLeft:10,"& svg":{maxWidth:15,maxHeight:15},"& button":{background:"#EAEAEA"}}},f.QV),f.oO),f.AK))}))(O((function(e){var t=e.classes,n=e.enableTLS,r=e.enableAutoCert,a=e.enableCustomCerts,s=e.minioCertificates,i=e.caCertificates,l=e.updateAddField,c=e.isPageValid,u=e.addFileToCaCertificates,m=e.deleteCaCertificate,g=e.addCaCertificate,p=e.addKeyPair,f=e.addFileToKeyPair,h=e.deleteKeyPair,x=(0,o.useCallback)((function(e,t){l("security",e,t)}),[l]);return(0,o.useEffect)((function(){c("security",!n||(!!r||!!a))}),[n,r,a,c]),(0,T.jsxs)(Z.Z,{className:t.paperWrapper,children:[(0,T.jsx)("div",{className:t.headerElement,children:(0,T.jsx)("h3",{className:t.h3Section,children:"Security"})}),(0,T.jsxs)(d.ZP,{item:!0,xs:12,children:[(0,T.jsx)(N.Z,{value:"enableTLS",id:"enableTLS",name:"enableTLS",checked:n,onChange:function(e){var t=e.target.checked;x("enableTLS",t)},label:"Enable TLS"}),"Enable TLS for the tenant, this is required for Encryption Configuration",n&&(0,T.jsxs)(o.Fragment,{children:[(0,T.jsx)("br",{}),(0,T.jsx)("br",{}),(0,T.jsx)(w.Z,{variant:"caption",display:"block",gutterBottom:!0,children:"AutoCert: MinIO Operator will generate all TLS certificates automatically"}),(0,T.jsx)(w.Z,{variant:"caption",display:"block",gutterBottom:!0,children:"Custom certificates: Allow user to provide your own certificates"}),(0,T.jsx)("br",{})]})]}),n&&(0,T.jsxs)(o.Fragment,{children:[(0,T.jsxs)(d.ZP,{item:!0,xs:12,children:[(0,T.jsx)(N.Z,{value:"enableAutoCert",id:"enableAutoCert",name:"enableAutoCert",checked:r,onChange:function(e){var t=e.target.checked;x("enableAutoCert",t)},label:"Enable AutoCert"}),(0,T.jsx)(N.Z,{value:"enableCustomCerts",id:"enableCustomCerts",name:"enableCustomCerts",checked:a,onChange:function(e){var t=e.target.checked;x("enableCustomCerts",t)},label:"Custom Certificates"})]}),a&&(0,T.jsxs)(o.Fragment,{children:[(0,T.jsx)(d.ZP,{container:!0,children:(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.minioCertsContainer,children:(0,T.jsxs)("fieldset",{className:t.fieldGroup,children:[(0,T.jsx)("legend",{className:t.descriptionText,children:"MinIO Certificates"}),s.map((function(e){return(0,T.jsxs)(d.ZP,{item:!0,xs:12,className:t.minioCertificateRows,children:[(0,T.jsxs)(d.ZP,{item:!0,xs:10,className:t.fileItem,children:[(0,T.jsx)(M.Z,{onChange:function(t,n){f(e.id,"cert",n,t)},accept:".cer,.crt,.cert,.pem",id:"tlsCert",name:"tlsCert",label:"Cert",value:e.cert}),(0,T.jsx)(M.Z,{onChange:function(t,n){f(e.id,"key",n,t)},accept:".key,.pem",id:"tlsKey",name:"tlsKey",label:"Key",value:e.key})]}),(0,T.jsxs)(d.ZP,{item:!0,xs:2,className:t.rowActions,children:[(0,T.jsx)("div",{className:t.overlayAction,children:(0,T.jsx)(D.Z,{size:"small",onClick:p,children:(0,T.jsx)(V.Z,{})})}),(0,T.jsx)("div",{className:t.overlayAction,children:(0,T.jsx)(D.Z,{size:"small",onClick:function(){h(e.id)},children:(0,T.jsx)(q.Z,{})})})]})]},e.id)}))]})})}),(0,T.jsx)(d.ZP,{container:!0,children:(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.minioCertsContainer,children:(0,T.jsxs)("fieldset",{className:t.fieldGroup,children:[(0,T.jsx)("legend",{className:t.descriptionText,children:"MinIO CA Certificates"}),i.map((function(e){return(0,T.jsxs)(d.ZP,{item:!0,xs:12,className:t.minioCACertsRow,children:[(0,T.jsx)(d.ZP,{item:!0,xs:6,children:(0,T.jsx)(M.Z,{onChange:function(t,n){u(e.id,"cert",n,t)},accept:".cer,.crt,.cert,.pem",id:"tlsCert",name:"tlsCert",label:"Cert",value:e.cert})}),(0,T.jsx)(d.ZP,{item:!0,xs:6,children:(0,T.jsxs)("div",{className:t.rowActions,children:[(0,T.jsx)("div",{className:t.overlayAction,children:(0,T.jsx)(D.Z,{size:"small",onClick:g,children:(0,T.jsx)(V.Z,{})})}),(0,T.jsx)("div",{className:t.overlayAction,children:(0,T.jsx)(D.Z,{size:"small",onClick:function(){m(e.id)},children:(0,T.jsx)(q.Z,{})})})]})})]},e.id)}))]})})})]})]})]})}))),$=(0,u.$j)((function(e){return{replicas:e.tenants.createTenant.fields.encryption.replicas,enableEncryption:e.tenants.createTenant.fields.encryption.enableEncryption,encryptionType:e.tenants.createTenant.fields.encryption.encryptionType,gemaltoEndpoint:e.tenants.createTenant.fields.encryption.gemaltoEndpoint,gemaltoToken:e.tenants.createTenant.fields.encryption.gemaltoToken,gemaltoDomain:e.tenants.createTenant.fields.encryption.gemaltoDomain,gemaltoRetry:e.tenants.createTenant.fields.encryption.gemaltoRetry,awsEndpoint:e.tenants.createTenant.fields.encryption.awsEndpoint,awsRegion:e.tenants.createTenant.fields.encryption.awsRegion,awsKMSKey:e.tenants.createTenant.fields.encryption.awsKMSKey,awsAccessKey:e.tenants.createTenant.fields.encryption.awsAccessKey,awsSecretKey:e.tenants.createTenant.fields.encryption.awsSecretKey,awsToken:e.tenants.createTenant.fields.encryption.awsToken,vaultEndpoint:e.tenants.createTenant.fields.encryption.vaultEndpoint,vaultEngine:e.tenants.createTenant.fields.encryption.vaultEngine,vaultNamespace:e.tenants.createTenant.fields.encryption.vaultNamespace,vaultPrefix:e.tenants.createTenant.fields.encryption.vaultPrefix,vaultAppRoleEngine:e.tenants.createTenant.fields.encryption.vaultAppRoleEngine,vaultId:e.tenants.createTenant.fields.encryption.vaultId,vaultSecret:e.tenants.createTenant.fields.encryption.vaultSecret,vaultRetry:e.tenants.createTenant.fields.encryption.vaultRetry,vaultPing:e.tenants.createTenant.fields.encryption.vaultPing,azureEndpoint:e.tenants.createTenant.fields.encryption.azureEndpoint,azureTenantID:e.tenants.createTenant.fields.encryption.azureTenantID,azureClientID:e.tenants.createTenant.fields.encryption.azureClientID,azureClientSecret:e.tenants.createTenant.fields.encryption.azureClientSecret,gcpProjectID:e.tenants.createTenant.fields.encryption.gcpProjectID,gcpEndpoint:e.tenants.createTenant.fields.encryption.gcpEndpoint,gcpClientEmail:e.tenants.createTenant.fields.encryption.gcpClientEmail,gcpClientID:e.tenants.createTenant.fields.encryption.gcpClientID,gcpPrivateKeyID:e.tenants.createTenant.fields.encryption.gcpPrivateKeyID,gcpPrivateKey:e.tenants.createTenant.fields.encryption.gcpPrivateKey,enableCustomCertsForKES:e.tenants.createTenant.fields.encryption.enableCustomCertsForKES,enableAutoCert:e.tenants.createTenant.fields.security.enableAutoCert,enableTLS:e.tenants.createTenant.fields.security.enableTLS,minioCertificates:e.tenants.createTenant.certificates.minioCertificates,serverCertificate:e.tenants.createTenant.certificates.serverCertificate,clientCertificate:e.tenants.createTenant.certificates.clientCertificate,vaultCertificate:e.tenants.createTenant.certificates.vaultCertificate,vaultCA:e.tenants.createTenant.certificates.vaultCA,gemaltoCA:e.tenants.createTenant.certificates.gemaltoCA,enableCustomCerts:e.tenants.createTenant.fields.security.enableCustomCerts,kesSecurityContext:e.tenants.createTenant.fields.encryption.kesSecurityContext}}),{updateAddField:j.HM,isPageValid:j.NO,addFileServerCert:j.$1,addFileClientCert:j.BI,addFileVaultCert:j.cl,addFileVaultCa:j.fk,addFileGemaltoCa:j.MX}),W=(0,p.Z)((function(e){return(0,g.Z)((0,i.Z)((0,i.Z)((0,i.Z)((0,i.Z)({encryptionTypeOptions:{marginBottom:15},mutualTlsConfig:{marginTop:15,"& fieldset":{flex:1}},rightSpacer:{marginRight:15},responsiveContainer:{"@media (max-width: 900px)":{display:"flex",flexFlow:"column"}}},f.QV),f.DF),f.oO),f.AK))}))($((function(e){var t=e.classes,n=e.updateAddField,r=e.isPageValid,a=e.addFileServerCert,l=e.addFileClientCert,c=e.addFileVaultCert,u=e.addFileVaultCa,m=e.addFileGemaltoCa,g=e.enableEncryption,p=e.enableCustomCerts,f=e.encryptionType,h=e.gemaltoEndpoint,x=e.gemaltoToken,v=e.gemaltoDomain,y=e.gemaltoRetry,S=e.awsEndpoint,C=e.awsRegion,j=e.awsKMSKey,A=e.awsAccessKey,k=e.awsSecretKey,R=e.awsToken,z=e.vaultEndpoint,D=e.vaultEngine,w=e.vaultNamespace,F=e.vaultPrefix,E=e.vaultAppRoleEngine,K=e.vaultId,q=e.vaultSecret,G=e.vaultRetry,L=e.vaultPing,V=e.azureEndpoint,O=e.azureTenantID,B=e.azureClientID,$=e.azureClientSecret,W=e.gcpProjectID,H=e.gcpEndpoint,Y=e.gcpClientEmail,Q=e.gcpClientID,X=e.gcpPrivateKeyID,J=e.gcpPrivateKey,ee=e.enableCustomCertsForKES,te=e.enableAutoCert,ne=e.enableTLS,re=e.minioCertificates,ae=e.serverCertificate,se=e.clientCertificate,ie=e.vaultCertificate,oe=e.vaultCA,le=e.gemaltoCA,ce=e.kesSecurityContext,ue=e.replicas,de=(0,o.useState)({}),me=(0,s.Z)(de,2),ge=me[0],pe=me[1],fe=!1;ne&&(te||re&&re.filter((function(e){return e.encoded_key&&e.encoded_cert})).length>0)&&(fe=!0);var he=(0,o.useCallback)((function(e,t){n("encryption",e,t)}),[n]),xe=function(e){pe((0,b.h)(ge,e))};return(0,o.useEffect)((function(){var e=[];g&&(e=[].concat((0,_.Z)(e),[{fieldKey:"replicas",required:!0,value:ue,customValidation:parseInt(ue)<1,customValidationMessage:"Replicas needs to be 1 or greater"},{fieldKey:"kes_securityContext_runAsUser",required:!0,value:ce.runAsUser,customValidation:""===ce.runAsUser||parseInt(ce.runAsUser)<0,customValidationMessage:"runAsUser must be present and be 0 or more"},{fieldKey:"kes_securityContext_runAsGroup",required:!0,value:ce.runAsGroup,customValidation:""===ce.runAsGroup||parseInt(ce.runAsGroup)<0,customValidationMessage:"runAsGroup must be present and be 0 or more"},{fieldKey:"kes_securityContext_fsGroup",required:!0,value:ce.fsGroup,customValidation:""===ce.fsGroup||parseInt(ce.fsGroup)<0,customValidationMessage:"fsGroup must be present and be 0 or more"}]),p&&(e=[].concat((0,_.Z)(e),[{fieldKey:"serverKey",required:!te,value:ae.encoded_key},{fieldKey:"serverCert",required:!te,value:ae.encoded_cert},{fieldKey:"clientKey",required:!te,value:se.encoded_key},{fieldKey:"clientCert",required:!te,value:se.encoded_cert}])),"vault"===f&&(e=[].concat((0,_.Z)(e),[{fieldKey:"vault_endpoint",required:!0,value:z},{fieldKey:"vault_id",required:!0,value:K},{fieldKey:"vault_secret",required:!0,value:q},{fieldKey:"vault_ping",required:!1,value:L,customValidation:parseInt(L)<0,customValidationMessage:"Value needs to be 0 or greater"},{fieldKey:"vault_retry",required:!1,value:G,customValidation:parseInt(G)<0,customValidationMessage:"Value needs to be 0 or greater"}])),"aws"===f&&(e=[].concat((0,_.Z)(e),[{fieldKey:"aws_endpoint",required:!0,value:S},{fieldKey:"aws_region",required:!0,value:C},{fieldKey:"aws_accessKey",required:!0,value:A},{fieldKey:"aws_secretKey",required:!0,value:k}])),"gemalto"===f&&(e=[].concat((0,_.Z)(e),[{fieldKey:"gemalto_endpoint",required:!0,value:h},{fieldKey:"gemalto_token",required:!0,value:x},{fieldKey:"gemalto_domain",required:!0,value:v},{fieldKey:"gemalto_retry",required:!1,value:y,customValidation:parseInt(y)<0,customValidationMessage:"Value needs to be 0 or greater"}])),"azure"===f&&(e=[].concat((0,_.Z)(e),[{fieldKey:"azure_endpoint",required:!0,value:V},{fieldKey:"azure_tenant_id",required:!0,value:O},{fieldKey:"azure_client_id",required:!0,value:B},{fieldKey:"azure_client_secret",required:!0,value:$}])));var t=(0,P.R)(e);r("encryption",0===Object.keys(t).length),pe(t)}),[g,f,z,D,K,q,L,G,S,C,k,A,h,x,v,y,W,H,Y,Q,X,J,V,O,B,$,r,te,p,ae.encoded_key,ae.encoded_cert,se.encoded_key,se.encoded_cert,ce,ue]),(0,T.jsxs)(Z.Z,{className:t.paperWrapper,children:[(0,T.jsxs)("div",{className:t.headerElement,children:[(0,T.jsx)("h3",{className:t.h3Section,children:"Encryption"}),(0,T.jsx)("span",{className:t.descriptionText,children:"How would you like to encrypt the information at rest."})]}),(0,T.jsx)(d.ZP,{item:!0,xs:12,children:(0,T.jsx)(N.Z,{value:"enableEncryption",id:"enableEncryption",name:"enableEncryption",checked:g,onChange:function(e){var t=e.target.checked;he("enableEncryption",t)},label:"Enable Server Side Encryption",disabled:!fe})}),g&&(0,T.jsxs)(o.Fragment,{children:[(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.encryptionTypeOptions,children:(0,T.jsx)(U.Z,{currentSelection:f,id:"encryptionType",name:"encryptionType",label:"Encryption Options",onChange:function(e){he("encryptionType",e.target.value)},selectorOptions:[{label:"Vault",value:"vault"},{label:"AWS",value:"aws"},{label:"Gemalto",value:"gemalto"},{label:"GCP",value:"gcp"},{label:"Azure",value:"azure"}]})}),"vault"===f&&(0,T.jsxs)(o.Fragment,{children:[(0,T.jsx)(d.ZP,{item:!0,xs:12,children:(0,T.jsx)(N.Z,{value:"enableCustomCertsForKES",id:"enableCustomCertsForKES",name:"enableCustomCertsForKES",checked:ee||!te,onChange:function(e){var t=e.target.checked;he("enableCustomCertsForKES",t)},label:"Custom Certificates",disabled:!te})}),(ee||!te)&&(0,T.jsxs)(o.Fragment,{children:[(0,T.jsx)(d.ZP,{container:!0,children:(0,T.jsx)(d.ZP,{item:!0,xs:12,style:{marginBottom:15},children:(0,T.jsxs)("fieldset",{className:t.fieldGroup,children:[(0,T.jsx)("legend",{className:t.descriptionText,children:"Encryption Service Certificates"}),(0,T.jsx)(M.Z,{onChange:function(e,t){a("key",t,e),xe("serverKey")},accept:".key,.pem",id:"serverKey",name:"serverKey",label:"Key",error:ge.serverKey||"",value:ae.key,required:!te}),(0,T.jsx)(M.Z,{onChange:function(e,t){a("cert",t,e),xe("serverCert")},accept:".cer,.crt,.cert,.pem",id:"serverCert",name:"serverCert",label:"Cert",error:ge.serverCert||"",value:ae.cert,required:!te})]})})}),(0,T.jsx)(d.ZP,{container:!0,style:{marginBottom:15},children:(0,T.jsx)(d.ZP,{item:!0,xs:12,children:(0,T.jsxs)("fieldset",{className:t.fieldGroup,children:[(0,T.jsx)("legend",{className:t.descriptionText,children:"Mutual TLS authentication"}),(0,T.jsx)(M.Z,{onChange:function(e,t){l("key",t,e),xe("clientKey")},accept:".key,.pem",id:"clientKey",name:"clientKey",label:"Key",error:ge.clientKey||"",value:se.key,required:!te}),(0,T.jsx)(M.Z,{onChange:function(e,t){l("cert",t,e),xe("clientCert")},accept:".cer,.crt,.cert,.pem",id:"clientCert",name:"clientCert",label:"Cert",error:ge.clientCert||"",value:se.cert,required:!te})]})})})]}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"vault_endpoint",name:"vault_endpoint",onChange:function(e){he("vaultEndpoint",e.target.value),xe("vault_endpoint")},label:"Endpoint",value:z,error:ge.vault_endpoint||"",required:!0})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"vault_engine",name:"vault_engine",onChange:function(e){he("vaultEngine",e.target.value),xe("vault_engine")},label:"Engine",value:D})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"vault_namespace",name:"vault_namespace",onChange:function(e){he("vaultNamespace",e.target.value)},label:"Namespace",value:w})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"vault_prefix",name:"vault_prefix",onChange:function(e){he("vaultPrefix",e.target.value)},label:"Prefix",value:F})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,children:(0,T.jsxs)("fieldset",{className:t.fieldGroup,children:[(0,T.jsx)("legend",{className:t.descriptionText,children:"App Role"}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"vault_approle_engine",name:"vault_approle_engine",onChange:function(e){he("vaultAppRoleEngine",e.target.value)},label:"Engine",value:E})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"vault_id",name:"vault_id",onChange:function(e){he("vaultId",e.target.value),xe("vault_id")},label:"AppRole ID",value:K,error:ge.vault_id||"",required:!0})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"vault_secret",name:"vault_secret",onChange:function(e){he("vaultSecret",e.target.value),xe("vault_secret")},label:"AppRole Secret",value:q,error:ge.vault_secret||"",required:!0})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{type:"number",min:"0",id:"vault_retry",name:"vault_retry",onChange:function(e){he("vaultRetry",e.target.value),xe("vault_retry")},label:"Retry (Seconds)",value:G,error:ge.vault_retry||""})})]})}),(0,T.jsx)(d.ZP,{container:!0,className:t.mutualTlsConfig,children:(0,T.jsxs)("fieldset",{className:t.fieldGroup,children:[(0,T.jsx)("legend",{className:t.descriptionText,children:"Mutual TLS authentication (optional)"}),(0,T.jsx)(M.Z,{onChange:function(e,t){c("key",t,e),xe("vault_key")},accept:".key,.pem",id:"vault_key",name:"vault_key",label:"Key",value:ie.key}),(0,T.jsx)(M.Z,{onChange:function(e,t){c("cert",t,e),xe("vault_cert")},accept:".cer,.crt,.cert,.pem",id:"vault_cert",name:"vault_cert",label:"Cert",value:ie.cert}),(0,T.jsx)(M.Z,{onChange:function(e,t){u(t,e),xe("vault_ca")},accept:".cer,.crt,.cert,.pem",id:"vault_ca",name:"vault_ca",label:"CA",value:oe.cert})]})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,style:{marginTop:15},children:(0,T.jsxs)("fieldset",{className:t.fieldGroup,children:[(0,T.jsx)("legend",{className:t.descriptionText,children:"Status"}),(0,T.jsx)(I.Z,{type:"number",min:"0",id:"vault_ping",name:"vault_ping",onChange:function(e){he("vaultPing",e.target.value),xe("vault_ping")},label:"Ping (Seconds)",value:L,error:ge.vault_ping||""})]})})]}),"azure"===f&&(0,T.jsxs)(o.Fragment,{children:[(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"azure_endpoint",name:"azure_endpoint",onChange:function(e){he("azureEndpoint",e.target.value),xe("azure_endpoint")},label:"Endpoint",value:V,error:ge.azure_endpoint||""})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,children:(0,T.jsxs)("fieldset",{className:t.fieldGroup,children:[(0,T.jsx)("legend",{className:t.descriptionText,children:"Credentials"}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"azure_tenant_id",name:"azure_tenant_id",onChange:function(e){he("azureTenantID",e.target.value),xe("azure_tenant_id")},label:"Tenant ID",value:O,error:ge.azure_tenant_id||""})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"azure_client_id",name:"azure_client_id",onChange:function(e){he("azureClientID",e.target.value),xe("azure_client_id")},label:"Client ID",value:B,error:ge.azure_client_id||""})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"azure_client_secret",name:"azure_client_secret",onChange:function(e){he("azureClientSecret",e.target.value),xe("azure_client_secret")},label:"Client Secret",value:$,error:ge.azure_client_secret||""})})]})})]}),"gcp"===f&&(0,T.jsxs)(o.Fragment,{children:[(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"gcp_project_id",name:"gcp_project_id",onChange:function(e){he("gcpProjectID",e.target.value)},label:"Project ID",value:W})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"gcp_endpoint",name:"gcp_endpoint",onChange:function(e){he("gcpEndpoint",e.target.value)},label:"Endpoint",value:H})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,children:(0,T.jsxs)("fieldset",{className:t.fieldGroup,children:[(0,T.jsx)("legend",{className:t.descriptionText,children:"Credentials"}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"gcp_client_email",name:"gcp_client_email",onChange:function(e){he("gcpClientEmail",e.target.value)},label:"Client Email",value:Y})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"gcp_client_id",name:"gcp_client_id",onChange:function(e){he("gcpClientID",e.target.value)},label:"Client ID",value:Q})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"gcp_private_key_id",name:"gcp_private_key_id",onChange:function(e){he("gcpPrivateKeyID",e.target.value)},label:"Private Key ID",value:X})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"gcp_private_key",name:"gcp_private_key",onChange:function(e){he("gcpPrivateKey",e.target.value)},label:"Private Key",value:J})})]})})]}),"aws"===f&&(0,T.jsxs)(o.Fragment,{children:[(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"aws_endpoint",name:"aws_endpoint",onChange:function(e){he("awsEndpoint",e.target.value),xe("aws_endpoint")},label:"Endpoint",value:S,error:ge.aws_endpoint||"",required:!0})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"aws_region",name:"aws_region",onChange:function(e){he("awsRegion",e.target.value),xe("aws_region")},label:"Region",value:C,error:ge.aws_region||"",required:!0})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"aws_kmsKey",name:"aws_kmsKey",onChange:function(e){he("awsKMSKey",e.target.value)},label:"KMS Key",value:j})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,children:(0,T.jsxs)("fieldset",{className:t.fieldGroup,children:[(0,T.jsx)("legend",{className:t.descriptionText,children:"Credentials"}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"aws_accessKey",name:"aws_accessKey",onChange:function(e){he("awsAccessKey",e.target.value),xe("aws_accessKey")},label:"Access Key",value:A,error:ge.aws_accessKey||"",required:!0})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"aws_secretKey",name:"aws_secretKey",onChange:function(e){he("awsSecretKey",e.target.value),xe("aws_secretKey")},label:"Secret Key",value:k,error:ge.aws_secretKey||"",required:!0})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"aws_token",name:"aws_token",onChange:function(e){he("awsToken",e.target.value)},label:"Token",value:R})})]})})]}),"gemalto"===f&&(0,T.jsxs)(o.Fragment,{children:[(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"gemalto_endpoint",name:"gemalto_endpoint",onChange:function(e){he("gemaltoEndpoint",e.target.value),xe("gemalto_endpoint")},label:"Endpoint",value:h,error:ge.gemalto_endpoint||"",required:!0})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,style:{marginBottom:15},children:(0,T.jsxs)("fieldset",{className:t.fieldGroup,children:[(0,T.jsx)("legend",{className:t.descriptionText,children:"Credentials"}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"gemalto_token",name:"gemalto_token",onChange:function(e){he("gemaltoToken",e.target.value),xe("gemalto_token")},label:"Token",value:x,error:ge.gemalto_token||"",required:!0})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"gemalto_domain",name:"gemalto_domain",onChange:function(e){he("gemaltoDomain",e.target.value),xe("gemalto_domain")},label:"Domain",value:v,error:ge.gemalto_domain||"",required:!0})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{type:"number",min:"0",id:"gemalto_retry",name:"gemalto_retry",onChange:function(e){he("gemaltoRetry",e.target.value),xe("gemalto_retry")},label:"Retry (seconds)",value:y,error:ge.gemalto_retry||""})})]})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,style:{marginBottom:15},children:(0,T.jsxs)("fieldset",{className:t.fieldGroup,children:[(0,T.jsx)("legend",{className:t.descriptionText,children:"Custom CA Root certificate verification"}),(0,T.jsx)(M.Z,{onChange:function(e,t){m(t,e),xe("gemalto_ca")},accept:".cer,.crt,.cert,.pem",id:"gemalto_ca",name:"gemalto_ca",label:"CA",value:le.cert})]})})]}),(0,T.jsx)("div",{className:t.headerElement,children:(0,T.jsx)("h4",{className:t.h3Section,children:"Additional Configurations"})}),(0,T.jsxs)(d.ZP,{item:!0,xs:12,children:[(0,T.jsx)(d.ZP,{item:!0,xs:12,classes:t.formFieldRow,children:(0,T.jsx)(I.Z,{type:"number",min:"1",id:"replicas",name:"replicas",onChange:function(e){he("replicas",e.target.value),xe("replicas")},label:"Replicas",value:ue,required:!0,error:ge.replicas||""})}),(0,T.jsxs)("fieldset",{className:t.fieldGroup,style:{marginTop:15},children:[(0,T.jsx)("legend",{className:t.descriptionText,children:"SecurityContext for KES pods"}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.kesSecurityContext,children:(0,T.jsxs)("div",{className:"".concat(t.multiContainer," ").concat(t.responsiveContainer),children:[(0,T.jsx)("div",{className:"".concat(t.formFieldRow," ").concat(t.rightSpacer),children:(0,T.jsx)(I.Z,{type:"number",id:"kes_securityContext_runAsUser",name:"kes_securityContext_runAsUser",onChange:function(e){he("kesSecurityContext",(0,i.Z)((0,i.Z)({},ce),{},{runAsUser:e.target.value})),xe("kes_securityContext_runAsUser")},label:"Run As User",value:ce.runAsUser,required:!0,error:ge.kes_securityContext_runAsUser||"",min:"0"})}),(0,T.jsx)("div",{className:"".concat(t.formFieldRow," ").concat(t.rightSpacer),children:(0,T.jsx)(I.Z,{type:"number",id:"kes_securityContext_runAsGroup",name:"kes_securityContext_runAsGroup",onChange:function(e){he("kesSecurityContext",(0,i.Z)((0,i.Z)({},ce),{},{runAsGroup:e.target.value})),xe("kes_securityContext_runAsGroup")},label:"Run As Group",value:ce.runAsGroup,required:!0,error:ge.kes_securityContext_runAsGroup||"",min:"0"})}),(0,T.jsx)("div",{className:"".concat(t.formFieldRow," ").concat(t.rightSpacer),children:(0,T.jsx)(I.Z,{type:"number",id:"kes_securityContext_fsGroup",name:"kes_securityContext_fsGroup",onChange:function(e){he("kesSecurityContext",(0,i.Z)((0,i.Z)({},ce),{},{fsGroup:e.target.value})),xe("kes_securityContext_fsGroup")},label:"FsGroup",value:ce.fsGroup,required:!0,error:ge.kes_securityContext_fsGroup||"",min:"0"})})]})}),(0,T.jsx)("br",{}),(0,T.jsx)(d.ZP,{item:!0,xs:12,children:(0,T.jsx)("div",{className:t.multiContainer,children:(0,T.jsx)(N.Z,{value:"kesSecurityContextRunAsNonRoot",id:"kes_securityContext_runAsNonRoot",name:"kes_securityContext_runAsNonRoot",checked:ce.runAsNonRoot,onChange:function(e){var t=e.target.checked;he("kesSecurityContext",(0,i.Z)((0,i.Z)({},ce),{},{runAsNonRoot:t}))},label:"Do not run as Root"})})})]})]})]})]})}))),H=(0,u.$j)((function(e){var t=e.tenants.createTenant;return{podAffinity:t.fields.affinity.podAffinity,nodeSelectorLabels:t.fields.affinity.nodeSelectorLabels,withPodAntiAffinity:t.fields.affinity.withPodAntiAffinity,keyValuePairs:t.nodeSelectorPairs}}),{setModalErrorSnackMessage:y.zb,updateAddField:j.HM,isPageValid:j.NO,setKeyValuePairs:j.i$}),Y=(0,p.Z)((function(e){return(0,g.Z)((0,i.Z)((0,i.Z)({overlayAction:{marginLeft:10,"& svg":{maxWidth:15,maxHeight:15},"& button":{background:"#EAEAEA"}},affinityConfigField:{display:"flex"},affinityFieldLabel:{display:"flex",flexFlow:"column",flex:1},radioField:{display:"flex",alignItems:"flex-start",marginTop:10,"& div:first-child":{display:"flex",flexFlow:"column",alignItems:"baseline",textAlign:"left !important"}},affinityLabelKey:{"& div:first-child":{marginBottom:0}},affinityLabelValue:{marginLeft:10,"& div:first-child":{marginBottom:0}},rowActions:{display:"flex",alignItems:"center"},fieldContainer:{marginBottom:0},affinityRow:{marginBottom:10,display:"flex"}},f.oO),f.AK))}))(H((function(e){var t=e.classes,n=e.podAffinity,r=e.nodeSelectorLabels,a=e.withPodAntiAffinity,i=e.setModalErrorSnackMessage,l=e.updateAddField,c=e.keyValuePairs,u=e.setKeyValuePairs,m=e.isPageValid,g=(0,o.useState)({}),p=(0,s.Z)(g,2),f=p[0],x=p[1],v=(0,o.useState)(!0),y=(0,s.Z)(v,2),S=y[0],C=y[1],j=(0,o.useState)({}),b=(0,s.Z)(j,2),k=b[0],R=b[1],z=(0,o.useState)([]),w=(0,s.Z)(z,2),F=w[0],E=w[1],K=(0,o.useCallback)((function(e,t){l("affinity",e,t)}),[l]);return(0,o.useEffect)((function(){S&&h.Z.invoke("GET","/api/v1/nodes/labels").then((function(e){C(!1),R(e);var t=[];for(var n in e)t.push({label:n,value:n});E(t)})).catch((function(e){C(!1),i(e),R({})}))}),[i,S]),(0,o.useEffect)((function(){if(c){var e=c.filter((function(e){return""!==e.key})).map((function(e){return"".concat(e.key,"=").concat(e.value)})).filter((function(e,t,n){return n.indexOf(e)===t})).join("&");K("nodeSelectorLabels",e)}}),[c,K]),(0,o.useEffect)((function(){var e=[];if("nodeSelector"===n){var t=!0,a=r.split("&");1===a.length&&""===a[0]&&(t=!1),a.forEach((function(e,n){var r=e.split("=");2!==r.length&&(t=!1),n+1!==a.length&&(""!==r[0]&&""!==r[1]||(t=!1))})),e=[].concat((0,_.Z)(e),[{fieldKey:"labels",required:!0,value:r,customValidation:!t,customValidationMessage:"You need to add at least one label key-pair"}])}var s=(0,P.R)(e);m("affinity",0===Object.keys(s).length),x(s)}),[m,n,r]),(0,T.jsxs)(Z.Z,{className:t.paperWrapper,children:[(0,T.jsxs)("div",{className:t.headerElement,children:[(0,T.jsx)("h3",{className:t.h3Section,children:"Pod Placement"}),(0,T.jsx)("span",{className:t.descriptionText,children:"Configure how pods will be assigned to nodes"})]}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.affinityConfigField,children:(0,T.jsxs)(d.ZP,{item:!0,className:t.affinityFieldLabel,children:[(0,T.jsx)("div",{className:t.label,children:"Type"}),(0,T.jsx)("div",{className:"".concat(t.descriptionText," ").concat(t.affinityHelpText),children:"MinIO supports multiple configurations for Pod Affinity"}),(0,T.jsx)(d.ZP,{item:!0,className:t.radioField,children:(0,T.jsx)(U.Z,{currentSelection:n,id:"affinity-options",name:"affinity-options",label:" ",onChange:function(e){K("podAffinity",e.target.value)},selectorOptions:[{label:"None",value:"none"},{label:"Default (Pod Anti-Affinnity)",value:"default"},{label:"Node Selector",value:"nodeSelector"}]})})]})}),"nodeSelector"===n&&(0,T.jsxs)(o.Fragment,{children:[(0,T.jsx)("br",{}),(0,T.jsx)(d.ZP,{item:!0,xs:12,children:(0,T.jsx)(N.Z,{value:"with_pod_anti_affinity",id:"with_pod_anti_affinity",name:"with_pod_anti_affinity",checked:a,onChange:function(e){var t=e.target.checked;K("withPodAntiAffinity",t)},label:"With Pod Anti-Affinity"})}),(0,T.jsxs)(d.ZP,{item:!0,xs:12,children:[(0,T.jsx)("h3",{children:"Labels"}),(0,T.jsx)("span",{className:t.error,children:f.labels}),(0,T.jsx)(d.ZP,{container:!0,children:c&&c.map((function(e,n){return(0,T.jsxs)(d.ZP,{item:!0,xs:12,className:t.affinityRow,children:[(0,T.jsxs)(d.ZP,{item:!0,xs:5,className:t.affinityLabelKey,children:[F.length>0&&(0,T.jsx)(A.Z,{onChange:function(e){var t=e.target.value,r=Object.assign([],c);r[n].key=e.target.value,r[n].value=k[t][0],u(r)},id:"select-access-policy",name:"select-access-policy",label:"",value:e.key,options:F}),0===F.length&&(0,T.jsx)(I.Z,{id:"nodeselector-key-".concat(n.toString()),label:"",name:"nodeselector-".concat(n.toString()),value:e.key,onChange:function(e){var t=Object.assign([],c);t[n].key=e.target.value,u(t)},index:n,placeholder:"Key"})]}),(0,T.jsxs)(d.ZP,{item:!0,xs:5,className:t.affinityLabelValue,children:[F.length>0&&(0,T.jsx)(A.Z,{onChange:function(e){var t=Object.assign([],c);t[n].value=e.target.value,u(t)},id:"select-access-policy",name:"select-access-policy",label:"",value:e.value,options:k[e.key]?k[e.key].map((function(e){return{label:e,value:e}})):[]}),0===F.length&&(0,T.jsx)(I.Z,{id:"nodeselector-value-".concat(n.toString()),label:"",name:"nodeselector-".concat(n.toString()),value:e.value,onChange:function(e){var t=Object.assign([],c);t[n].value=e.target.value,u(t)},index:n,placeholder:"value"})]}),(0,T.jsxs)(d.ZP,{item:!0,xs:2,className:t.rowActions,children:[(0,T.jsx)("div",{className:t.overlayAction,children:(0,T.jsx)(D.Z,{size:"small",onClick:function(){var e=Object.assign([],c);F.length>0?e.push({key:F[0].value,value:k[F[0].value][0]}):e.push({key:"",value:""}),u(e)},children:(0,T.jsx)(V.Z,{})})}),c.length>1&&(0,T.jsx)("div",{className:t.overlayAction,children:(0,T.jsx)(D.Z,{size:"small",onClick:function(){var e=c.filter((function(e,t){return t!==n}));u(e)},children:(0,T.jsx)(q.Z,{})})})]})]},"affinity-keyVal-".concat(n.toString()))}))})]})]})]})}))),Q=n(35721),X=n(24442),J=(0,u.$j)((function(e){return{storageClasses:e.tenants.createTenant.storageClasses,customImage:e.tenants.createTenant.fields.configure.customImage,imageName:e.tenants.createTenant.fields.configure.imageName,customDockerhub:e.tenants.createTenant.fields.configure.customDockerhub,imageRegistry:e.tenants.createTenant.fields.configure.imageRegistry,imageRegistryUsername:e.tenants.createTenant.fields.configure.imageRegistryUsername,imageRegistryPassword:e.tenants.createTenant.fields.configure.imageRegistryPassword,exposeMinIO:e.tenants.createTenant.fields.configure.exposeMinIO,exposeConsole:e.tenants.createTenant.fields.configure.exposeConsole,prometheusCustom:e.tenants.createTenant.fields.configure.prometheusCustom,tenantCustom:e.tenants.createTenant.fields.configure.tenantCustom,logSearchCustom:e.tenants.createTenant.fields.configure.logSearchCustom,logSearchVolumeSize:e.tenants.createTenant.fields.configure.logSearchVolumeSize,logSearchSizeFactor:e.tenants.createTenant.fields.configure.logSearchSizeFactor,prometheusVolumeSize:e.tenants.createTenant.fields.configure.prometheusVolumeSize,prometheusSizeFactor:e.tenants.createTenant.fields.configure.prometheusSizeFactor,logSearchSelectedStorageClass:e.tenants.createTenant.fields.configure.logSearchSelectedStorageClass,logSearchImage:e.tenants.createTenant.fields.configure.logSearchImage,kesImage:e.tenants.createTenant.fields.configure.kesImage,logSearchPostgresImage:e.tenants.createTenant.fields.configure.logSearchPostgresImage,logSearchPostgresInitImage:e.tenants.createTenant.fields.configure.logSearchPostgresInitImage,prometheusSelectedStorageClass:e.tenants.createTenant.fields.configure.prometheusSelectedStorageClass,prometheusImage:e.tenants.createTenant.fields.configure.prometheusImage,prometheusSidecarImage:e.tenants.createTenant.fields.configure.prometheusSidecarImage,prometheusInitImage:e.tenants.createTenant.fields.configure.prometheusInitImage,selectedStorageClass:e.tenants.createTenant.fields.nameTenant.selectedStorageClass}}),{updateAddField:j.HM,isPageValid:j.NO}),ee=(0,p.Z)((function(e){return(0,g.Z)((0,i.Z)((0,i.Z)((0,i.Z)({},f.DF),f.oO),f.AK))}))(J((function(e){var t=e.classes,n=(e.storageClasses,e.customImage),r=e.imageName,a=e.customDockerhub,i=e.imageRegistry,l=e.imageRegistryUsername,c=e.imageRegistryPassword,u=(e.exposeMinIO,e.exposeConsole,e.prometheusCustom),m=e.tenantCustom,g=e.logSearchCustom,p=e.logSearchVolumeSize,f=(e.logSearchSizeFactor,e.logSearchImage),h=e.kesImage,x=e.logSearchPostgresImage,v=e.logSearchPostgresInitImage,y=e.prometheusVolumeSize,S=(e.prometheusSizeFactor,e.logSearchSelectedStorageClass),C=e.prometheusSelectedStorageClass,j=e.prometheusImage,A=e.prometheusSidecarImage,k=e.prometheusInitImage,R=e.updateAddField,z=e.isPageValid,D=(e.selectedStorageClass,(0,o.useState)({})),w=(0,s.Z)(D,2),F=w[0],E=w[1],U=(0,o.useCallback)((function(e,t){R("configure",e,t)}),[R]);(0,o.useEffect)((function(){var e=[];u&&(e=[].concat((0,_.Z)(e),[{fieldKey:"prometheus_storage_class",required:!0,value:C,customValidation:""===C,customValidationMessage:"Field cannot be empty"},{fieldKey:"prometheus_volume_size",required:!0,value:y,customValidation:""===y||parseInt(y)<=0,customValidationMessage:"Volume size must be present and be greatter than 0"}])),g&&(e=[].concat((0,_.Z)(e),[{fieldKey:"log_search_storage_class",required:!0,value:S,customValidation:""===S,customValidationMessage:"Field cannot be empty"},{fieldKey:"log_search_volume_size",required:!0,value:p,customValidation:""===p||parseInt(p)<=0,customValidationMessage:"Volume size must be present and be greatter than 0"}])),n&&(e=[].concat((0,_.Z)(e),[{fieldKey:"image",required:!1,value:r,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'minio/minio:VERSION'"},{fieldKey:"logSearchImage",required:!1,value:f,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'minio/logsearchapi:VERSION'"},{fieldKey:"kesImage",required:!1,value:h,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'minio/kes:VERSION'"},{fieldKey:"logSearchPostgresImage",required:!1,value:x,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'library/postgres:VERSION'"},{fieldKey:"logSearchPostgresInitImage",required:!1,value:v,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'library/busybox:VERSION'"},{fieldKey:"prometheusImage",required:!1,value:j,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'minio/prometheus:VERSION'"},{fieldKey:"prometheusSidecarImage",required:!1,value:A,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'project/container:VERSION'"},{fieldKey:"prometheusInitImage",required:!1,value:k,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'library/busybox:VERSION'"}]),a&&(e=[].concat((0,_.Z)(e),[{fieldKey:"registry",required:!0,value:i},{fieldKey:"registryUsername",required:!0,value:l},{fieldKey:"registryPassword",required:!0,value:c}])));var t=(0,P.R)(e);z("configure",0===Object.keys(t).length),E(t)}),[n,r,f,h,x,v,j,A,k,a,i,l,c,z,u,m,g,C,y,S,p]);var K=function(e){E((0,b.h)(F,e))};return(0,T.jsxs)(Z.Z,{className:t.paperWrapper,children:[(0,T.jsxs)("div",{className:t.headerElement,children:[(0,T.jsx)("h3",{className:t.h3Section,children:"Container Images"}),(0,T.jsx)("span",{className:t.descriptionText,children:"Images used by the Tenant Deployment"})]}),(0,T.jsxs)(o.Fragment,{children:[(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"image",name:"image",onChange:function(e){U("imageName",e.target.value),K("image")},label:"MinIO's Image",value:r,error:F.image||"",placeholder:"E.g. minio/minio:RELEASE.2022-01-08T03-11-54Z"})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"logSearchImage",name:"logSearchImage",onChange:function(e){U("logSearchImage",e.target.value),K("logSearchImage")},label:"Log Search API's Image",value:f,error:F.logSearchImage||"",placeholder:"E.g. minio/logsearchapi:v4.1.1"})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"kesImage",name:"kesImage",onChange:function(e){U("kesImage",e.target.value),K("kesImage")},label:"KES Image",value:h,error:F.kesImage||"",placeholder:"E.g. minio/kes:v0.14.0"})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"logSearchPostgresImage",name:"logSearchPostgresImage",onChange:function(e){U("logSearchPostgresImage",e.target.value),K("logSearchPostgresImage")},label:"Log Search Postgres's Image",value:x,error:F.logSearchPostgresImage||"",placeholder:"E.g. library/postgres:13"})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"logSearchPostgresInitImage",name:"logSearchPostgresInitImage",onChange:function(e){U("logSearchPostgresInitImage",e.target.value),K("logSearchPostgresInitImage")},label:"Log Search Postgres's Init Image",value:v,error:F.logSearchPostgresInitImage||"",placeholder:"E.g. library/busybox:1.33.1"})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"prometheusImage",name:"prometheusImage",onChange:function(e){U("prometheusImage",e.target.value),K("prometheusImage")},label:"Prometheus Image",value:j,error:F.prometheusImage||"",placeholder:"E.g. quay.io/prometheus/prometheus:latest"})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"prometheusSidecarImage",name:"prometheusSidecarImage",onChange:function(e){U("prometheusSidecarImage",e.target.value),K("prometheusSidecarImage")},label:"Prometheus Sidecar Image",value:A,error:F.prometheusSidecarImage||"",placeholder:"E.g. quay.io/prometheus/prometheus:latest"})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"prometheusInitImage",name:"prometheusInitImage",onChange:function(e){U("prometheusInitImage",e.target.value),K("prometheusInitImage")},label:"Prometheus Init Image",value:k,error:F.prometheusInitImage||"",placeholder:"E.g. quay.io/prometheus/prometheus:latest"})})]}),n&&(0,T.jsx)(o.Fragment,{children:(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(N.Z,{value:"custom_docker_hub",id:"custom_docker_hub",name:"custom_docker_hub",checked:a,onChange:function(e){var t=e.target.checked;U("customDockerhub",t)},label:"Set/Update Image Registry"})})}),a&&(0,T.jsxs)(o.Fragment,{children:[(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"registry",name:"registry",onChange:function(e){U("imageRegistry",e.target.value)},label:"Endpoint",value:i,error:F.registry||"",placeholder:"E.g. https://index.docker.io/v1/",required:!0})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"registryUsername",name:"registryUsername",onChange:function(e){U("imageRegistryUsername",e.target.value)},label:"Username",value:l,error:F.registryUsername||"",required:!0})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"registryPassword",name:"registryPassword",onChange:function(e){U("imageRegistryPassword",e.target.value)},label:"Password",value:c,error:F.registryPassword||"",required:!0})})]})]})}))),te=n(25534),ne=n(29316),re=n(3143),ae=n.n(re),se=n(32120),ie=n(23473),oe=n(60656),le=n(98280),ce={setErrorSnackMessage:y.Ih},ue=(0,u.$j)(null,ce),de=(0,p.Z)((function(e){return(0,g.Z)((0,i.Z)((0,i.Z)({wrapText:{maxWidth:"200px",whiteSpace:"normal",wordWrap:"break-word"}},f.oO),f.Qw))}))(ue((function(e){var t=e.classes,n=e.namespace,r=e.addNamespaceOpen,a=e.closeAddNamespaceModalAndRefresh,i=e.setErrorSnackMessage,l=(0,o.useState)(!1),c=(0,s.Z)(l,2),u=c[0],d=c[1];(0,o.useEffect)((function(){u&&h.Z.invoke("POST","/api/v1/namespace",{name:n}).then((function(e){d(!1),a(!0)})).catch((function(e){d(!1),i(e)}))}),[u,a,n,i]);return(0,T.jsx)(oe.Z,{title:"New namespace",confirmText:"Create",confirmButtonProps:{color:"primary",variant:"contained"},isOpen:r,titleIcon:(0,T.jsx)(le.Ej,{}),isLoading:u,onConfirm:function(){d(!0)},onClose:function(){a(!1)},confirmationContent:(0,T.jsxs)(o.Fragment,{children:[u&&(0,T.jsx)(m.Z,{}),(0,T.jsxs)(ie.Z,{children:["Are you sure you want to add a namespace called",(0,T.jsx)("br",{}),(0,T.jsx)("b",{className:t.wrapText,children:n}),"?"]})]})})}))),me=n(4182),ge=n(35044),pe=n(73481),fe=n(29399),he=n(95995),xe=(0,u.$j)((function(e){return{volumeSize:e.tenants.createTenant.fields.tenantSize.volumeSize,sizeFactor:e.tenants.createTenant.fields.tenantSize.sizeFactor,drivesPerServer:e.tenants.createTenant.fields.tenantSize.drivesPerServer,nodes:e.tenants.createTenant.fields.tenantSize.nodes,memoryNode:e.tenants.createTenant.fields.tenantSize.resourcesMemoryRequest,ecParity:e.tenants.createTenant.fields.tenantSize.ecParity,ecParityChoices:e.tenants.createTenant.fields.tenantSize.ecParityChoices,cleanECChoices:e.tenants.createTenant.fields.tenantSize.cleanECChoices,resourcesSize:e.tenants.createTenant.fields.tenantSize.resourcesSize,distribution:e.tenants.createTenant.fields.tenantSize.distribution,ecParityCalc:e.tenants.createTenant.fields.tenantSize.ecParityCalc,limitSize:e.tenants.createTenant.fields.tenantSize.limitSize,selectedStorageClass:e.tenants.createTenant.fields.nameTenant.selectedStorageClass,cpuToUse:e.tenants.createTenant.fields.tenantSize.resourcesCPURequest,integrationSelection:e.tenants.createTenant.fields.tenantSize.integrationSelection}}),{updateAddField:j.HM,isPageValid:j.NO}),ve=(0,p.Z)((function(e){return(0,g.Z)((0,i.Z)((0,i.Z)({root:{margin:4},table:{"& .MuiTableCell-root":{fontSize:13}}},f.oO),f.AK))}))(xe((function(e){var t=e.classes,n=e.nodes,r=e.memoryNode,a=e.ecParity,s=e.distribution,i=e.ecParityCalc,l=e.cpuToUse,c=e.integrationSelection,u=i.storageFactors.find((function(e){return e.erasureCode===a}));return(0,T.jsxs)("div",{className:t.root,children:[(0,T.jsx)("h4",{children:"Resource Allocation"}),(0,T.jsx)(he.Z,{}),(0,T.jsx)(me.Z,{className:t.table,"aria-label":"simple table",size:"small",children:(0,T.jsxs)(ge.Z,{children:[(0,T.jsxs)(fe.Z,{children:[(0,T.jsx)(pe.Z,{scope:"row",children:"Number of Servers"}),(0,T.jsx)(pe.Z,{align:"right",children:parseInt(n)>0?n:"-"})]}),""===c.typeSelection&&""===c.storageClass&&(0,T.jsxs)(o.Fragment,{children:[(0,T.jsxs)(fe.Z,{children:[(0,T.jsx)(pe.Z,{scope:"row",children:"Drives per Server"}),(0,T.jsx)(pe.Z,{align:"right",children:s?s.disks:"-"})]}),(0,T.jsxs)(fe.Z,{children:[(0,T.jsx)(pe.Z,{scope:"row",children:"Drive Capacity"}),(0,T.jsx)(pe.Z,{align:"right",children:s?(0,x.ae)(s.pvSize):"-"})]})]}),(0,T.jsxs)(fe.Z,{children:[(0,T.jsx)(pe.Z,{scope:"row",children:"Total Volumes"}),(0,T.jsx)(pe.Z,{align:"right",children:s?s.persistentVolumes:"-"})]}),""===c.typeSelection&&""===c.storageClass&&(0,T.jsxs)(o.Fragment,{children:[(0,T.jsxs)(fe.Z,{children:[(0,T.jsx)(pe.Z,{scope:"row",children:"Memory per Node"}),(0,T.jsxs)(pe.Z,{align:"right",children:[r," Gi"]})]}),(0,T.jsxs)(fe.Z,{children:[(0,T.jsx)(pe.Z,{style:{borderBottom:0},scope:"row",children:"CPU Selection"}),(0,T.jsx)(pe.Z,{style:{borderBottom:0},align:"right",children:l})]})]})]})}),0===i.error&&u&&(0,T.jsxs)(o.Fragment,{children:[(0,T.jsx)("h4",{children:"Erasure Code Configuration"}),(0,T.jsx)(he.Z,{}),(0,T.jsx)(me.Z,{className:t.table,"aria-label":"simple table",size:"small",children:(0,T.jsxs)(ge.Z,{children:[(0,T.jsxs)(fe.Z,{children:[(0,T.jsx)(pe.Z,{scope:"row",children:"EC Parity"}),(0,T.jsx)(pe.Z,{align:"right",children:""!==a?a:"-"})]}),(0,T.jsxs)(fe.Z,{children:[(0,T.jsx)(pe.Z,{scope:"row",children:"Raw Capacity"}),(0,T.jsx)(pe.Z,{align:"right",children:(0,x.ae)(i.rawCapacity)})]}),(0,T.jsxs)(fe.Z,{children:[(0,T.jsx)(pe.Z,{scope:"row",children:"Usable Capacity"}),(0,T.jsx)(pe.Z,{align:"right",children:(0,x.ae)(u.maxCapacity)})]}),(0,T.jsxs)(fe.Z,{children:[(0,T.jsx)(pe.Z,{style:{borderBottom:0},scope:"row",children:"Server Failures Tolerated"}),(0,T.jsx)(pe.Z,{style:{borderBottom:0},align:"right",children:s?Math.floor(u.maxFailureTolerations/s.disks):"-"})]})]})})]}),""!==c.typeSelection&&""!==c.storageClass&&(0,T.jsxs)(o.Fragment,{children:[(0,T.jsx)("h4",{children:"Single Instance Configuration"}),(0,T.jsx)(he.Z,{}),(0,T.jsx)(me.Z,{className:t.table,"aria-label":"simple table",size:"small",children:(0,T.jsxs)(ge.Z,{children:[(0,T.jsxs)(fe.Z,{children:[(0,T.jsx)(pe.Z,{scope:"row",children:"CPU"}),(0,T.jsx)(pe.Z,{align:"right",children:0!==c.CPU?c.CPU:"-"})]}),(0,T.jsxs)(fe.Z,{children:[(0,T.jsx)(pe.Z,{scope:"row",children:"Memory"}),(0,T.jsx)(pe.Z,{align:"right",children:0!==c.memory?"".concat(c.memory," Gi"):"-"})]}),(0,T.jsxs)(fe.Z,{children:[(0,T.jsx)(pe.Z,{scope:"row",children:"Drives per Server"}),(0,T.jsx)(pe.Z,{align:"right",children:0!==c.drivesPerServer?"".concat(c.drivesPerServer):"-"})]}),(0,T.jsxs)(fe.Z,{children:[(0,T.jsx)(pe.Z,{style:{borderBottom:0},scope:"row",children:"Drive Size"}),(0,T.jsxs)(pe.Z,{style:{borderBottom:0},align:"right",children:[c.driveSize.driveSize,c.driveSize.sizeUnit]})]})]})})]})]})}))),ye=n(7262),Se=(0,u.$j)((function(e){return{nodes:e.tenants.createTenant.fields.tenantSize.nodes,resourcesSize:e.tenants.createTenant.fields.tenantSize.resourcesSize,selectedStorageClass:e.tenants.createTenant.fields.nameTenant.selectedStorageClass,maxAllocatableResources:e.tenants.createTenant.fields.tenantSize.maxAllocatableResources,maxCPUsUse:e.tenants.createTenant.fields.tenantSize.maxCPUsUse,maxMemorySize:e.tenants.createTenant.fields.tenantSize.maxMemorySize,resourcesSpecifyLimit:e.tenants.createTenant.fields.tenantSize.resourcesSpecifyLimit,resourcesCPURequestError:e.tenants.createTenant.fields.tenantSize.resourcesCPURequestError,resourcesCPURequest:e.tenants.createTenant.fields.tenantSize.resourcesCPURequest,resourcesCPULimitError:e.tenants.createTenant.fields.tenantSize.resourcesCPULimitError,resourcesCPULimit:e.tenants.createTenant.fields.tenantSize.resourcesCPULimit,resourcesMemoryRequestError:e.tenants.createTenant.fields.tenantSize.resourcesMemoryRequestError,resourcesMemoryRequest:e.tenants.createTenant.fields.tenantSize.resourcesMemoryRequest,resourcesMemoryLimitError:e.tenants.createTenant.fields.tenantSize.resourcesMemoryLimitError,resourcesMemoryLimit:e.tenants.createTenant.fields.tenantSize.resourcesMemoryLimit}}),{updateAddField:j.HM,isPageValid:j.NO}),Ce=(0,p.Z)((function(e){return(0,g.Z)((0,i.Z)((0,i.Z)((0,i.Z)({compositeFieldContainer:{display:"flex",alignItems:"center"},compositeAddOn:{marginLeft:10,"& div":{marginBottom:0},"@media (max-width: 900px)":{"& div":{marginTop:5}}}},f.DF),f.oO),f.AK))}))(Se((function(e){var t=e.classes,n=e.updateAddField,r=e.isPageValid,a=e.nodes,s=e.resourcesSize,i=e.selectedStorageClass,l=(e.maxAllocatableResources,e.maxCPUsUse),u=e.maxMemorySize,m=e.resourcesSpecifyLimit,g=e.resourcesCPURequestError,p=e.resourcesCPURequest,f=e.resourcesCPULimitError,x=e.resourcesCPULimit,v=e.resourcesMemoryRequestError,y=e.resourcesMemoryRequest,S=e.resourcesMemoryLimitError,C=e.resourcesMemoryLimit,j=(0,o.useCallback)((function(e,t){n("tenantSize",e,t)}),[n]);return(0,o.useEffect)((function(){r("tenantSize",""===v&&""===S&&""===g&&""===f)}),[r,v,S,g,f]),(0,o.useEffect)((function(){h.Z.invoke("GET","api/v1/cluster/allocatable-resources?num_nodes=".concat(a)).then((function(e){j("maxAllocatableResources",e);var t=e,n=c()(t,"min_allocatable_mem",!1),r=c()(t,"min_allocatable_cpu",!1);if(!1===n||!1===r)return j("cpuToUse",0),j("maxMemorySize",""),void j("maxCPUsUse","");var a=(0,ye.floor)(e.mem_priority.max_allocatable_mem/1024/1024/1024);j("maxMemorySize",a.toString()),j("maxCPUsUse",e.cpu_priority.max_allocatable_cpu.toString());var s=c()(t,"cpu_priority.max_allocatable_cpu",0),i=Math.max(1,(0,ye.floor)(s/2));""===p&&j("resourcesCPURequest",i);var o=Math.max(2,(0,ye.floor)(a/2));""===y&&j("resourcesMemoryRequest",o)})).catch((function(e){j("maxMemorySize",0),j("resourcesCPURequest",""),j("resourcesMemoryRequest",""),console.error(e)}))}),[a,j]),(0,T.jsxs)(o.Fragment,{children:[(0,T.jsx)(d.ZP,{item:!0,xs:12,children:(0,T.jsxs)("div",{className:t.headerElement,children:[(0,T.jsx)("h3",{className:t.h3Section,children:"Resources"}),(0,T.jsx)("span",{className:t.descriptionText,children:"You may specify the amount of CPU and Memory that MinIO servers should reserve on each node."})]})}),""!==s.error&&(0,T.jsx)(d.ZP,{item:!0,xs:12,children:(0,T.jsx)("div",{className:t.error,children:s.error})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{label:"CPU Request",id:"resourcesCPURequest",name:"resourcesCPURequest",onChange:function(e){var t=parseInt(e.target.value);""===e.target.value?j("resourcesCPURequestError",""):isNaN(t)?j("resourcesCPURequestError","Invalid number"):t>parseInt(l)?j("resourcesCPURequestError","Request exceeds available cores (".concat(l,")")):e.target.validity.valid?j("resourcesCPURequestError",""):j("resourcesCPURequestError","Invalid configuration"),j("resourcesCPURequest",e.target.value)},value:p,disabled:""===i,max:l,error:g,pattern:"[0-9]*"})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"resourcesMemoryRequest",name:"resourcesMemoryRequest",onChange:function(e){var t=parseInt(e.target.value);""===e.target.value?j("resourcesMemoryRequestError",""):isNaN(t)?j("resourcesMemoryRequestError","Invalid number"):t>parseInt(u)?j("resourcesMemoryRequestError","Request exceeds available memory across ".concat(a," nodes (").concat(u,"Gi)")):t<2?j("resourcesMemoryRequestError","At least 2Gi must be requested"):e.target.validity.valid?j("resourcesMemoryRequestError",""):j("resourcesMemoryRequestError","Invalid configuration"),j("resourcesMemoryRequest",e.target.value)},label:"Memory Request [Gi]",value:y,disabled:""===i,error:v,pattern:"[0-9]*"})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,children:(0,T.jsx)(N.Z,{value:"resourcesSpecifyLimit",id:"resourcesSpecifyLimit",name:"resourcesSpecifyLimit",checked:m,onChange:function(e){var t=e.target.checked;j("resourcesSpecifyLimit",t)},label:"Specify Limit"})}),m&&(0,T.jsxs)(o.Fragment,{children:[(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{label:"CPU Limit",id:"resourcesCPULimit",name:"resourcesCPULimit",onChange:function(e){var t=parseInt(e.target.value);""===e.target.value?j("resourcesCPULimitError",""):isNaN(t)?j("resourcesCPULimitError","Invalid number"):e.target.validity.valid?j("resourcesCPULimitError",""):j("resourcesCPULimitError","Invalid configuration"),j("resourcesCPULimit",e.target.value)},value:x,disabled:""===i,max:l,error:f,pattern:"[0-9]*"})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"resourcesMemoryLimit",name:"resourcesMemoryLimit",onChange:function(e){var t=parseInt(e.target.value);console.log("value",t),""===e.target.value?j("resourcesMemoryLimitError",""):isNaN(t)?j("resourcesMemoryLimitError","Invalid number"):e.target.validity.valid?j("resourcesMemoryLimitError",""):j("resourcesMemoryLimitError","Invalid configuration"),j("resourcesMemoryLimit",e.target.value)},label:"Memory Limit [Gi]",value:C,disabled:""===i,error:S,pattern:"[0-9]*"})})]})]})}))),je=(0,u.$j)((function(e){return{volumeSize:e.tenants.createTenant.fields.tenantSize.volumeSize,sizeFactor:e.tenants.createTenant.fields.tenantSize.sizeFactor,drivesPerServer:e.tenants.createTenant.fields.tenantSize.drivesPerServer,nodes:e.tenants.createTenant.fields.tenantSize.nodes,memoryNode:e.tenants.createTenant.fields.tenantSize.memoryNode,ecParity:e.tenants.createTenant.fields.tenantSize.ecParity,ecParityChoices:e.tenants.createTenant.fields.tenantSize.ecParityChoices,cleanECChoices:e.tenants.createTenant.fields.tenantSize.cleanECChoices,resourcesSize:e.tenants.createTenant.fields.tenantSize.resourcesSize,distribution:e.tenants.createTenant.fields.tenantSize.distribution,ecParityCalc:e.tenants.createTenant.fields.tenantSize.ecParityCalc,limitSize:e.tenants.createTenant.limitSize,selectedStorageClass:e.tenants.createTenant.fields.nameTenant.selectedStorageClass}}),{updateAddField:j.HM,isPageValid:j.NO}),_e=(0,p.Z)((function(e){return(0,g.Z)((0,i.Z)((0,i.Z)((0,i.Z)({compositeFieldContainer:{display:"flex",alignItems:"center"},compositeAddOn:{marginLeft:10,"& div":{marginBottom:0},"@media (max-width: 900px)":{"& div":{marginTop:5}}}},f.DF),f.oO),f.AK))}))(je((function(e){var t=e.classes,n=e.updateAddField,r=e.isPageValid,a=e.volumeSize,i=e.sizeFactor,l=e.drivesPerServer,c=e.nodes,u=e.memoryNode,m=e.ecParity,g=e.ecParityChoices,p=e.cleanECChoices,f=e.resourcesSize,v=e.distribution,y=e.ecParityCalc,S=e.limitSize,C=e.selectedStorageClass,j=(0,o.useState)({}),_=(0,s.Z)(j,2),Z=_[0],N=_[1],k=(0,o.useState)(!1),R=(0,s.Z)(k,2),z=R[0],D=R[1],w=(0,o.useState)(""),F=(0,s.Z)(w,2),E=F[0],U=F[1],K=(0,o.useCallback)((function(e,t){n("tenantSize",e,t)}),[n]),q=function(e){N((0,b.h)(Z,e))};return(0,o.useEffect)((function(){if(g.length>0&&""===v.error){var e=(0,x.ES)(p,v.persistentVolumes,v.pvSize,v.nodes);K("ecParityCalc",e),p.includes(m)&&""!==m||K("ecParity",e.defaultEC)}}),[m,g.length,v,p,K]),(0,o.useEffect)((function(){var e=a,t=i,n=(0,x.Pw)("12","Ti",!0),r={unit:t,value:e.toString()},s=(0,x.zg)(r,parseInt(c),parseInt(n),parseInt(l));K("distribution",s),D(!1),U("")}),[c,a,i,K,l]),(0,o.useEffect)((function(){var e=(0,x.Pw)(a,i,!0),t=(0,P.R)([{fieldKey:"nodes",required:!0,value:c,customValidation:z,customValidationMessage:E},{fieldKey:"volume_size",required:!0,value:a,customValidation:parseInt(e)<1073741824||parseInt(e)>S[C],customValidationMessage:"Volume size must be greater than 1Gi and less than ".concat((0,x.ae)(S[C],!0))},{fieldKey:"drivesps",required:!0,value:l,customValidation:parseInt(l)<1,customValidationMessage:"There must be at least one drive"}]);r("tenantSize",!("nodes"in t)&&!("volume_size"in t)&&!("drivesps"in t)&&""===v.error&&0===y.error&&""!==m),N(t)}),[c,a,i,u,v,y,f,S,C,r,z,E,l,m]),(0,o.useEffect)((function(){""===v.error&&""!==c.trim()&&0!==v.disks&&h.Z.invoke("GET","api/v1/get-parity/".concat(c,"/").concat(v.disks)).then((function(e){K("ecParityChoices",(0,se.dv)(e)),K("cleanECChoices",e)})).catch((function(e){K("ecparityChoices",[]),r("tenantSize",!1),K("ecParity","")}))}),[v,r,K,c]),(0,T.jsxs)(o.Fragment,{children:[(0,T.jsx)(d.ZP,{item:!0,xs:12,children:(0,T.jsxs)("div",{className:t.headerElement,children:[(0,T.jsx)("h3",{className:t.h3Section,children:"Capacity"}),(0,T.jsx)("span",{className:t.descriptionText,children:"Please select the desired capacity"})]})}),""!==v.error&&(0,T.jsx)(d.ZP,{item:!0,xs:12,children:(0,T.jsx)("div",{className:t.error,children:v.error})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"nodes",name:"nodes",onChange:function(e){e.target.validity.valid&&(K("nodes",e.target.value),q("nodes"))},label:"Number of Servers",disabled:""===C,value:c,min:"4",required:!0,error:Z.nodes||"",pattern:"[0-9]*"})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"drivesps",name:"drivesps",onChange:function(e){e.target.validity.valid&&(K("drivesPerServer",e.target.value),q("drivesps"))},label:"Drives per Server",value:l,disabled:""===C,min:"1",required:!0,error:Z.drivesps||"",pattern:"[0-9]*"})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,children:(0,T.jsx)("div",{className:t.multiContainer,children:(0,T.jsx)("div",{className:t.formFieldRow,children:(0,T.jsxs)("div",{className:t.compositeFieldContainer,children:[(0,T.jsx)(I.Z,{type:"number",id:"volume_size",name:"volume_size",onChange:function(e){K("volumeSize",e.target.value),q("volume_size")},label:"Total Size",value:a,disabled:""===C,required:!0,error:Z.volume_size||"",min:"0"}),(0,T.jsx)("div",{className:t.compositeAddOn,children:(0,T.jsx)(A.Z,{label:"",id:"size_factor",name:"size_factor",value:i,disabled:""===C,onChange:function(e){K("sizeFactor",e.target.value)},options:(0,x.QU)()})})]})})})}),(0,T.jsxs)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:[(0,T.jsx)(A.Z,{id:"ec_parity",name:"ec_parity",onChange:function(e){K("ecParity",e.target.value)},label:"Erasure Code Parity",disabled:""===C,value:m,options:g}),(0,T.jsx)("span",{className:t.descriptionText,children:"Please select the desired parity. This setting will change the max usable capacity in the cluster"})]}),(0,T.jsx)(Ce,{})]})}))),Ze=n(36222),be=(0,u.$j)((function(e){return function(){var t=e.tenants.createTenant,n=t.fields.tenantSize,r=n.memoryNode,a=n.ecParityChoices,s=n.distribution,i=n.cleanECChoices,o=n.sizeFactor,l=n.ecParity,c=n.cpuToUse,u=n.integrationSelection,d=n.resourcesSize,m=n.drivesPerServer,g=n.maxCPUsUse,p=n.ecParityCalc;return{volumeSize:n.volumeSize,sizeFactor:o,drivesPerServer:m,nodes:n.nodes,memoryNode:r,ecParity:l,ecParityChoices:a,cleanECChoices:i,resourcesSize:d,distribution:s,ecParityCalc:p,cpuToUse:c,maxCPUsUse:g,integrationSelection:u,limitSize:t.limitSize,selectedStorageType:t.fields.nameTenant.selectedStorageType}}}),{updateAddField:j.HM,isPageValid:j.NO}),Pe=(0,p.Z)((function(e){return(0,g.Z)((0,i.Z)((0,i.Z)((0,i.Z)({compositeFieldContainer:{display:"flex",alignItems:"center"},compositeAddOn:{marginLeft:10,"& div":{marginBottom:0},"@media (max-width: 900px)":{"& div":{marginTop:5}}}},f.DF),f.oO),f.AK))}))(be((function(e){var t=e.classes,n=e.updateAddField,r=e.isPageValid,a=e.volumeSize,i=e.sizeFactor,l=e.drivesPerServer,u=e.nodes,m=e.memoryNode,g=e.ecParity,p=e.ecParityChoices,f=e.cleanECChoices,v=e.resourcesSize,y=e.distribution,S=e.ecParityCalc,C=e.limitSize,j=e.cpuToUse,_=e.selectedStorageType,Z=e.maxCPUsUse,N=e.formToRender,k=e.integrationSelection,R=(0,o.useState)({}),z=(0,s.Z)(R,2),D=z[0],w=z[1],F=(0,o.useCallback)((function(e,t){n("tenantSize",e,t)}),[n]),E=(0,o.useCallback)((function(e,t){n("nameTenant",e,t)}),[n]);return(0,o.useEffect)((function(){if(p.length>0&&""===y.error){var e=(0,x.ES)(f,y.persistentVolumes,y.pvSize,y.nodes);F("ecParityCalc",e),f.includes(g)&&""!==g||F("ecParity",e.defaultEC)}}),[g,p,y,f,F]),(0,o.useEffect)((function(){if(void 0!==N&&parseInt(u)>=4){var e=Ie[N];if(Object.keys(e).length>0){var t=c()(e,"configurations",[]).find((function(e){return e.typeSelection===_}));if(t){F("integrationSelection",t),E("selectedStorageClass",t.storageClass);var n={pvSize:parseInt((0,x.Pw)(t.driveSize.driveSize,t.driveSize.sizeUnit,!0),10),nodes:parseInt(u),disks:t.drivesPerServer,persistentVolumes:t.drivesPerServer*parseInt(u),error:""};F("distribution",n),F("resourcesCPURequest",Math.max(1,t.CPU/2)),F("resourcesMemoryRequest",Math.max(2,t.memory/2))}}}}),[u,_,N,F,E]),(0,o.useEffect)((function(){var e=(0,P.R)([{fieldKey:"nodes",required:!0,value:u,customValidation:parseInt(u)<4,customValidationMessage:"Al least 4 servers must be selected"}]);r("tenantSize",!("nodes"in e)&&""===y.error&&0===S.error&&""===v.error&&""!==g&&parseInt(u)>=4),w(e)}),[u,a,i,m,y,S,v,C,_,j,Z,r,l,g]),(0,o.useEffect)((function(){0!==k.drivesPerServer&&""!==u.trim()&&h.Z.invoke("GET","api/v1/get-parity/".concat(u,"/").concat(k.drivesPerServer)).then((function(e){F("ecParityChoices",(0,se.dv)(e)),F("cleanECChoices",e)})).catch((function(e){F("ecparityChoices",[]),r("tenantSize",!1),F("ecParity","")}))}),[k,u,r,F]),(0,T.jsxs)(o.Fragment,{children:[(0,T.jsx)(d.ZP,{item:!0,xs:12,children:(0,T.jsxs)("div",{className:t.headerElement,children:[(0,T.jsx)("h3",{className:t.h3Section,children:"Tenant Size"}),(0,T.jsx)("span",{className:t.descriptionText,children:"Please select the desired capacity"})]})}),""!==y.error&&(0,T.jsx)(d.ZP,{item:!0,xs:12,children:(0,T.jsx)("div",{className:t.error,children:y.error})}),""!==v.error&&(0,T.jsx)(d.ZP,{item:!0,xs:12,children:(0,T.jsx)("div",{className:t.error,children:v.error})}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"nodes",name:"nodes",onChange:function(e){var t;e.target.validity.valid&&(F("nodes",e.target.value),t="nodes",w((0,b.h)(D,t)))},label:"Number of Servers",disabled:""===_,value:u,min:"4",required:!0,error:D.nodes||"",pattern:"[0-9]*"})}),(0,T.jsxs)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:[(0,T.jsx)(A.Z,{id:"ec_parity",name:"ec_parity",onChange:function(e){F("ecParity",e.target.value)},label:"Erasure Code Parity",disabled:""===_,value:g,options:p}),(0,T.jsx)("span",{className:t.descriptionText,children:"Please select the desired parity. This setting will change the max usable capacity in the cluster"})]})]})})));!function(e){e[e.aws=0]="aws",e[e.azure=1]="azure",e[e.gcp=2]="gcp",e[e.default=3]="default",e[e[void 0]=4]="undefined"}(a||(a={}));var Ne={"mp-mode-aws":a.aws,"mp-mode-azure":a.azure,"mp-mode-gcp":a.gcp},Ie=(r={},(0,Ze.Z)(r,a.aws,{variantSelectorLabel:"Storage Type",variantSelectorValues:[{label:"NVME",value:"nvme"},{label:"HDD",value:"hdd"}],configurations:[{typeSelection:"nvme",storageClass:"nvme-i3en-12xlarge",CPU:48,memory:384,driveSize:{driveSize:"7500",sizeUnit:"Gi"},drivesPerServer:4},{typeSelection:"hdd",storageClass:"hdd-d3en-12xlarge",CPU:8,memory:32,driveSize:{driveSize:"12.7",sizeUnit:"Ti"},drivesPerServer:4}],sizingComponent:(0,T.jsx)(Pe,{formToRender:a.aws})}),(0,Ze.Z)(r,a.azure,{variantSelectorLabel:"VM Size",variantSelectorValues:[{label:"Standard_L32s_v2",value:"Standard_L32s_v2"},{label:"Standard_L48s_v2",value:"Standard_L48s_v2"},{label:"Standard_L64s_v2",value:"Standard_L64s_v2"}],configurations:[{typeSelection:"Standard_L8s_v2",storageClass:"local-nvme",CPU:8,memory:64,driveSize:{driveSize:"1787",sizeUnit:"Gi"},drivesPerServer:1},{typeSelection:"Standard_L16s_v2",storageClass:"local-nvme",CPU:16,memory:128,driveSize:{driveSize:"1787",sizeUnit:"Gi"},drivesPerServer:2},{typeSelection:"Standard_L32s_v2",storageClass:"local-nvme",CPU:32,memory:256,driveSize:{driveSize:"1787",sizeUnit:"Gi"},drivesPerServer:4},{typeSelection:"Standard_L48s_v2",storageClass:"local-nvme",CPU:48,memory:384,driveSize:{driveSize:"1787",sizeUnit:"Gi"},drivesPerServer:6},{typeSelection:"Standard_L64s_v2",storageClass:"local-nvme",CPU:64,memory:512,driveSize:{driveSize:"1787",sizeUnit:"Gi"},drivesPerServer:8}],sizingComponent:(0,T.jsx)(Pe,{formToRender:a.azure})}),(0,Ze.Z)(r,a.gcp,{variantSelectorLabel:"Storage Type",variantSelectorValues:[{label:"SSD",value:"ssd"}],configurations:[{typeSelection:"ssd",storageClass:"local-ssd",CPU:32,memory:128,driveSize:{driveSize:"368",sizeUnit:"Gi"},drivesPerServer:24}],sizingComponent:(0,T.jsx)(Pe,{formToRender:a.gcp})}),(0,Ze.Z)(r,a.default,{}),(0,Ze.Z)(r,a.undefined,{}),r),Ae=(0,u.$j)((function(e){return{tenantName:e.tenants.createTenant.fields.nameTenant.tenantName,namespace:e.tenants.createTenant.fields.nameTenant.namespace,selectedStorageClass:e.tenants.createTenant.fields.nameTenant.selectedStorageClass,selectedStorageType:e.tenants.createTenant.fields.nameTenant.selectedStorageType,storageClasses:e.tenants.createTenant.storageClasses}}),{setModalErrorSnackMessage:y.zb,updateAddField:j.HM,setStorageClassesList:j.wZ,setLimitSize:j.DH,isPageValid:j.NO}),Te=(0,p.Z)((function(e){return(0,g.Z)((0,i.Z)((0,i.Z)((0,i.Z)({sizePreview:{position:"fixed",marginLeft:10,background:"#FFFFFF",border:"1px solid #EAEAEA",padding:2}},f.DF),f.oO),f.AK))}))(Ae((function(e){var t=e.classes,n=e.storageClasses,r=e.tenantName,i=e.namespace,l=e.selectedStorageClass,u=e.selectedStorageType,m=e.formToRender,g=void 0===m?a.default:m,p=e.updateAddField,f=e.setStorageClassesList,x=e.setLimitSize,v=e.isPageValid,y=e.setModalErrorSnackMessage,S=(0,o.useState)({}),C=(0,s.Z)(S,2),j=C[0],_=C[1],N=(0,o.useState)(!0),k=(0,s.Z)(N,2),R=k[0],z=k[1],D=(0,o.useState)(!1),w=(0,s.Z)(D,2),F=w[0],E=w[1],U=(0,o.useState)(!1),K=(0,s.Z)(U,2),q=K[0],G=K[1],L=(0,o.useState)(!1),M=(0,s.Z)(L,2),O=M[0],B=M[1],$=(0,o.useCallback)((function(e,t){p("nameTenant",e,t)}),[p]),W=(0,o.useCallback)((function(){G(!1),h.Z.invoke("GET","/api/v1/namespaces/".concat(i,"/tenants")).then((function(e){var t=c()(e,"tenants",[]);if(t&&t.length>0)return z(!1),void E(!1);z(!0),h.Z.invoke("GET","/api/v1/namespaces/".concat(i,"/resourcequotas/").concat(i,"-storagequota")).then((function(e){var t=c()(e,"elements",[]);x((0,se.OU)(e));var n=t.map((function(e){var t=c()(e,"name","").split(".storageclass.storage.k8s.io/requests.storage")[0];return{label:t,value:t}}));f(n);var r=n.findIndex((function(e){return e.value===l}));n.length>0&&-1===r?$("selectedStorageClass",n[0].value):0===n.length&&($("selectedStorageClass",""),f([])),E(!1)})).catch((function(e){E(!1),G(!0),$("selectedStorageClass",""),f([]),console.error("Namespace error: ",e)}))})).catch((function(e){y({errorMessage:"Error validating if namespace already has tenants",detailedError:e.detailedError})}))}),[i,x,y,f,$,l]),H=(0,o.useMemo)((function(){return ae()(W,500)}),[W]);(0,o.useEffect)((function(){if(""!==i)return H(),E(!0),H.cancel}),[H,i]),(0,o.useEffect)((function(){var e=!1,t="";R||F?n.length<1&&R&&!F&&(e=!0,t="Please enter a valid namespace"):(e=!0,t="You can only create one tenant per namespace");var s=(0,P.R)([{fieldKey:"tenant-name",required:!0,pattern:/^[a-z0-9-]{3,63}$/,customPatternMessage:"Name only can contain lowercase letters, numbers and '-'. Min. Length: 3",value:r},{fieldKey:"namespace",required:!0,value:i,customValidation:e,customValidationMessage:t}]),o=!("tenant-name"in s)&&!("namespace"in s)&&(g===a.default&&n.length>0||g!==a.default&&""!==u);v("nameTenant",o),_(s)}),[n,i,r,v,R,F,u,g]);var Y=function(e){_((0,b.h)(j,e))};return(0,T.jsxs)(o.Fragment,{children:[O&&(0,T.jsx)(de,{addNamespaceOpen:O,closeAddNamespaceModalAndRefresh:function(e){B(!1),e&&H()},namespace:i}),(0,T.jsxs)(d.ZP,{container:!0,children:[(0,T.jsx)(d.ZP,{item:!0,xs:8,md:9,children:(0,T.jsx)(Z.Z,{className:t.paperWrapper,sx:{minHeight:550},children:(0,T.jsxs)(d.ZP,{container:!0,children:[(0,T.jsxs)(d.ZP,{item:!0,xs:12,children:[(0,T.jsxs)("div",{className:t.headerElement,children:[(0,T.jsx)("h3",{className:t.h3Section,children:"Name"}),(0,T.jsx)("span",{className:t.descriptionText,children:"How would you like to name this new tenant?"})]}),(0,T.jsx)("div",{className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"tenant-name",name:"tenant-name",onChange:function(e){$("tenantName",e.target.value),Y("tenant-name")},label:"Name",value:r,required:!0,error:j["tenant-name"]||""})})]}),(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(I.Z,{id:"namespace",name:"namespace",onChange:function(e){$("namespace",e.target.value),Y("namespace")},label:"Namespace",value:i,error:j.namespace||"",overlayIcon:q?(0,T.jsx)(V.Z,{}):null,overlayAction:function(){B(!0)},required:!0})}),g===a.default?(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(A.Z,{id:"storage_class",name:"storage_class",onChange:function(e){$("selectedStorageClass",e.target.value)},label:"Storage Class",value:l,options:n,disabled:n.length<1})}):(0,T.jsx)(d.ZP,{item:!0,xs:12,className:t.formFieldRow,children:(0,T.jsx)(A.Z,{id:"storage_type",name:"storage_type",onChange:function(e){$("selectedStorageType",e.target.value)},label:c()(Ie,"".concat(g,".variantSelectorLabel"),"Storage Type"),value:u,options:c()(Ie,"".concat(g,".variantSelectorValues"),[])})}),g===a.default?(0,T.jsx)(_e,{}):c()(Ie,"".concat(g,".sizingComponent"),null)]})})}),(0,T.jsx)(d.ZP,{item:!0,xs:4,md:3,children:(0,T.jsx)("div",{className:t.sizePreview,children:(0,T.jsx)(ve,{})})})]})]})}))),ke=(0,u.$j)((function(e){return{features:e.console.session.features}}),null)((function(e){var t=e.features,n=(0,o.useState)(null),r=(0,s.Z)(n,2),i=r[0],l=r[1];return(0,o.useEffect)((function(){var e=a.default;t&&0!==t.length&&Object.keys(Ne).forEach((function(n){t.includes(n)&&(e=c()(Ne,n,a.default))}));l(e)}),[t]),null===i?null:(0,T.jsx)(Te,{formToRender:i})})),Re=(0,u.$j)((function(e){return{namespace:e.tenants.createTenant.fields.nameTenant.namespace,validPages:e.tenants.createTenant.validPages,fields:e.tenants.createTenant.fields,certificates:e.tenants.createTenant.certificates,selectedStorageClass:e.tenants.createTenant.fields.nameTenant.selectedStorageClass}}),{setErrorSnackMessage:y.Ih,updateAddField:j.HM,resetAddTenantForm:j.dS}),ze=(0,p.Z)((function(e){return(0,g.Z)((0,i.Z)((0,i.Z)((0,i.Z)({pageBox:{border:"1px solid #EAEAEA"}},f.oO),f.AK),f.Je))}))(Re((function(e){var t=e.classes,n=e.fields,r=e.certificates,a=e.selectedStorageClass,l=e.namespace,u=e.validPages,g=e.setErrorSnackMessage,p=e.resetAddTenantForm,f=(0,o.useState)(!1),y=(0,s.Z)(f,2),j=y[0],_=y[1],Z=(0,o.useState)(null),b=(0,s.Z)(Z,2),P=b[0],N=b[1],I=(0,o.useState)(!1),A=(0,s.Z)(I,2),k=A[0],z=A[1];(0,o.useEffect)((function(){var e=n.nameTenant.tenantName,t=n.nameTenant.selectedStorageClass,a=n.configure.imageName,s=n.configure.customDockerhub,o=n.configure.imageRegistry,u=n.configure.imageRegistryUsername,d=n.configure.imageRegistryPassword,m=n.configure.exposeMinIO,p=n.configure.exposeConsole,f=n.identityProvider.idpSelection,v=n.identityProvider.openIDConfigurationURL,y=n.identityProvider.openIDClientID,C=n.identityProvider.openIDClaimName,j=n.identityProvider.openIDCallbackURL,Z=n.identityProvider.openIDScopes,b=n.identityProvider.openIDSecretID,P=n.identityProvider.ADURL,I=n.identityProvider.ADSkipTLS,A=n.identityProvider.ADServerInsecure,T=n.identityProvider.ADUserNameSearchFilter,R=n.identityProvider.ADGroupSearchBaseDN,D=n.identityProvider.ADGroupSearchFilter,w=n.identityProvider.ADGroupNameAttribute,F=n.identityProvider.ADUserDNs,E=n.identityProvider.ADUserNameFormat,U=n.identityProvider.ADLookupBindDN,K=n.identityProvider.ADLookupBindPassword,q=n.identityProvider.ADUserDNSearchBaseDN,G=n.identityProvider.ADUserDNSearchFilter,L=n.identityProvider.ADServerStartTLS,M=n.identityProvider.accessKeys,V=n.identityProvider.secretKeys,O=r.minioCertificates,B=r.caCertificates,$=r.consoleCaCertificates,W=r.consoleCertificate,H=r.serverCertificate,Y=r.clientCertificate,Q=r.vaultCertificate,X=r.vaultCA,J=r.gemaltoCA,ee=n.encryption.enableEncryption,te=n.encryption.encryptionType,ne=n.encryption.gemaltoEndpoint,re=n.encryption.gemaltoToken,ae=n.encryption.gemaltoDomain,se=n.encryption.gemaltoRetry,ie=n.encryption.awsEndpoint,oe=n.encryption.awsRegion,le=n.encryption.awsKMSKey,ce=n.encryption.awsAccessKey,ue=n.encryption.awsSecretKey,de=n.encryption.awsToken,me=n.encryption.vaultEndpoint,ge=n.encryption.vaultEngine,pe=n.encryption.vaultNamespace,fe=n.encryption.vaultPrefix,he=n.encryption.vaultAppRoleEngine,xe=n.encryption.vaultId,ve=n.encryption.vaultSecret,ye=n.encryption.vaultRetry,Se=n.encryption.vaultPing,Ce=n.encryption.azureEndpoint,je=n.encryption.azureTenantID,_e=n.encryption.azureClientID,Ze=n.encryption.azureClientSecret,be=n.encryption.gcpProjectID,Pe=n.encryption.gcpEndpoint,Ne=n.encryption.gcpClientEmail,Ie=n.encryption.gcpClientID,Ae=n.encryption.gcpPrivateKeyID,Te=n.encryption.gcpPrivateKey,ke=n.security.enableAutoCert,Re=n.security.enableTLS,ze=n.tenantSize.ecParity,De=n.tenantSize.distribution,we=n.configure.tenantCustom,Fe=n.configure.logSearchCustom,Ee=n.configure.prometheusCustom,Ue=n.configure.logSearchVolumeSize,Ke=n.configure.logSearchSelectedStorageClass,qe=n.configure.logSearchImage,Ge=n.configure.kesImage,Le=n.configure.logSearchPostgresImage,Me=n.configure.logSearchPostgresInitImage,Ve=n.configure.prometheusImage,Oe=n.configure.prometheusSidecarImage,Be=n.configure.prometheusInitImage,$e=n.configure.prometheusSelectedStorageClass,We=n.configure.prometheusVolumeSize,He=n.affinity.podAffinity,Ye=n.affinity.nodeSelectorLabels,Qe=n.affinity.withPodAntiAffinity,Xe=n.configure.tenantSecurityContext,Je=n.configure.logSearchSecurityContext,et=n.configure.logSearchPostgresSecurityContext,tt=n.configure.prometheusSecurityContext,nt=n.encryption.kesSecurityContext,rt=n.encryption.replicas;if(k){var at=(0,x.en)([]),st={};switch(He){case"default":st={affinity:(0,S.P)(e,at)};break;case"nodeSelector":st={affinity:(0,S.q)(Ye,Qe,e,at)}}var it=ze.split(":")[1],ot={name:e,namespace:l,access_key:"",secret_key:"",access_keys:[],secret_keys:[],enable_tls:Re&&ke,enable_console:!0,enable_prometheus:!0,service_name:"",image:a,expose_minio:m,expose_console:p,pools:[(0,i.Z)({name:at,servers:De.nodes,volumes_per_server:De.disks,volume_configuration:{size:De.pvSize,storage_class_name:t},securityContext:we?Xe:null},st)],erasureCodingParity:parseInt(it,10)};""===n.tenantSize.resourcesCPURequest&&""===n.tenantSize.resourcesCPULimit&&""===n.tenantSize.resourcesMemoryRequest&&""===n.tenantSize.resourcesMemoryLimit||(ot.pools[0].resources={},""===n.tenantSize.resourcesCPURequest&&""===n.tenantSize.resourcesMemoryRequest||(ot.pools[0].resources.requests={},""!==n.tenantSize.resourcesCPURequest&&(ot.pools[0].resources.requests.cpu=parseInt(n.tenantSize.resourcesCPURequest)),""!==n.tenantSize.resourcesMemoryRequest&&(ot.pools[0].resources.requests.memory=parseInt((0,x.Pw)(n.tenantSize.resourcesMemoryRequest,"Gi",!0)))),""===n.tenantSize.resourcesCPULimit&&""===n.tenantSize.resourcesMemoryLimit||(ot.pools[0].resources.limits={},""!==n.tenantSize.resourcesCPULimit&&(ot.pools[0].resources.limits.cpu=parseInt(n.tenantSize.resourcesCPULimit)),""!==n.tenantSize.resourcesMemoryLimit&&(ot.pools[0].resources.limits.memory=parseInt((0,x.Pw)(n.tenantSize.resourcesMemoryLimit,"Gi",!0))))),s&&(ot=(0,i.Z)((0,i.Z)({},ot),{},{image_registry:{registry:o,username:u,password:d}})),ot=Fe?(0,i.Z)((0,i.Z)({},ot),{},{logSearchConfiguration:{storageClass:"default"===Ke?"":Ke,storageSize:parseInt(Ue),image:qe,postgres_image:Le,postgres_init_image:Me,securityContext:Je,postgres_securityContext:et}}):(0,i.Z)((0,i.Z)({},ot),{},{logSearchConfiguration:{image:qe,postgres_image:Le,postgres_init_image:Me}}),ot=Ee?(0,i.Z)((0,i.Z)({},ot),{},{prometheusConfiguration:{storageClass:"default"===$e?"":$e,storageSize:parseInt(We),image:Ve,sidecar_image:Oe,init_image:Be,securityContext:tt}}):(0,i.Z)((0,i.Z)({},ot),{},{prometheusConfiguration:{image:Ve,sidecar_image:Oe,init_image:Be}});var lt=null,ct=null,ut=null,dt=null;if(B.length>0&&(ut={ca_certificates:B.map((function(e){return e.encoded_cert})).filter((function(e){return e}))}),$.length>0&&(dt={console_ca_certificates:$.map((function(e){return e.encoded_cert})).filter((function(e){return e}))}),Re&&O.length>0&&(lt={minio:O.map((function(e){return{crt:e.encoded_cert,key:e.encoded_key}})).filter((function(e){return e.crt&&e.key}))}),Re&&""!==W.encoded_cert&&""!==W.encoded_key&&(ct={console:{crt:W.encoded_cert,key:W.encoded_key}}),(lt||ct||ut||dt)&&(ot=(0,i.Z)((0,i.Z)({},ot),{},{tls:(0,i.Z)((0,i.Z)((0,i.Z)((0,i.Z)({},lt),ct),ut),dt)})),ee){var mt={};switch(te){case"gemalto":var gt={};""!==J.encoded_cert&&(gt={ca:J.encoded_cert}),mt={gemalto:{keysecure:{endpoint:ne,credentials:{token:re,domain:ae,retry:parseInt(se)},tls:(0,i.Z)({},gt)}}};break;case"aws":mt={aws:{secretsmanager:{endpoint:ie,region:oe,kmskey:le,credentials:{accesskey:ce,secretkey:ue,token:de}}}};break;case"azure":mt={azure:{keyvault:{endpoint:Ce,credentials:{tenant_id:je,client_id:_e,client_secret:Ze}}}};break;case"gcp":mt={gcp:{secretmanager:{project_id:be,endpoint:Pe,credentials:{client_email:Ne,client_id:Ie,private_key_id:Ae,private_key:Te}}}};break;case"vault":var pt=null,ft=null;""!==Q.encoded_key&&""!==Q.encoded_cert&&(pt={key:Q.encoded_key,crt:Q.encoded_cert}),""!==X.encoded_cert&&(ft={ca:X.encoded_cert});var ht=null;(pt||X)&&(ht={tls:(0,i.Z)((0,i.Z)({},pt),ft)}),mt={vault:(0,i.Z)((0,i.Z)({endpoint:me,engine:ge,namespace:pe,prefix:fe,approle:{engine:he,id:xe,secret:ve,retry:parseInt(ye)}},ht),{},{status:{ping:parseInt(Se)}})}}var xt={},vt={};""!==Y.encoded_key&&""!==Y.encoded_cert&&(vt={client:{key:Y.encoded_key,crt:Y.encoded_cert}}),""!==H.encoded_key&&""!==H.encoded_cert&&(xt={server:{key:H.encoded_key,crt:H.encoded_cert}}),ot=(0,i.Z)((0,i.Z)({},ot),{},{encryption:(0,i.Z)((0,i.Z)((0,i.Z)({replicas:rt,securityContext:nt,image:Ge},vt),xt),mt)})}var yt={};switch(f){case"Built-in":for(var St=[],Ct=0;Ct.\n\nimport React from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { BackSettingsIcon } from \"../icons\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n link: {\n display: \"flex\",\n alignItems: \"center\",\n textDecoration: \"none\",\n maxWidth: \"300px\",\n padding: \"2rem 2rem 0rem 2rem\",\n color: theme.palette.primary.light,\n fontSize: \".8rem\",\n \"&:hover\": {\n textDecoration: \"underline\",\n },\n },\n icon: {\n marginRight: \".3rem\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n \"& svg.min-icon\": {\n width: 12,\n },\n },\n });\n\ninterface IBackLink {\n classes: any;\n to: string;\n label: string;\n className?: any;\n executeOnClick?: () => void;\n}\n\nconst BackLink = ({\n to,\n label,\n classes,\n className,\n executeOnClick,\n}: IBackLink) => {\n return (\n {\n if (executeOnClick) {\n executeOnClick();\n }\n }}\n >\n
\n \n
\n
{label}
\n \n );\n};\n\nexport default withStyles(styles)(BackLink);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { InputAdornment, OutlinedInput } from \"@mui/material\";\nimport BoxIconButton from \"../BoxIconButton/BoxIconButton\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport CopyToClipboard from \"react-copy-to-clipboard\";\nimport { CopyIcon } from \"../../../../icons\";\nimport { fieldBasic } from \"../FormComponents/common/styleLibrary\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n container: {\n display: \"flex\",\n flexFlow: \"column\",\n padding: \"20px 0 8px 0\",\n },\n inputWithCopy: {\n \"& .MuiInputBase-root \": {\n width: \"100%\",\n background: \"#FBFAFA\",\n \"& .MuiInputBase-input\": {\n height: \".8rem\",\n },\n \"& .MuiInputAdornment-positionEnd\": {\n marginRight: \".5rem\",\n \"& .MuiButtonBase-root\": {\n height: \"2rem\",\n },\n },\n },\n \"& .MuiButtonBase-root .min-icon\": {\n width: \".8rem\",\n height: \".8rem\",\n },\n },\n inputLabel: {\n ...fieldBasic.inputLabel,\n fontSize: \".8rem\",\n },\n });\n\nconst CredentialItem = ({\n label = \"\",\n value = \"\",\n classes = {},\n}: {\n label: string;\n value: string;\n classes: any;\n}) => {\n return (\n
\n
{label}:
\n
\n \n \n {}}\n onMouseDown={() => {}}\n edge=\"end\"\n >\n \n \n \n \n }\n />\n
\n
\n );\n};\n\nexport default withStyles(styles)(CredentialItem);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport get from \"lodash/get\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { NewServiceAccount } from \"./types\";\nimport { Button } from \"@mui/material\";\nimport ModalWrapper from \"../ModalWrapper/ModalWrapper\";\nimport Grid from \"@mui/material/Grid\";\nimport CredentialItem from \"./CredentialItem\";\nimport WarnIcon from \"../../../../icons/WarnIcon\";\nimport { DownloadIcon, ServiceAccountCredentialsIcon } from \"../../../../icons\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n warningBlock: {\n color: \"red\",\n fontSize: \".85rem\",\n margin: \".5rem 0 .5rem 0\",\n display: \"flex\",\n alignItems: \"center\",\n \"& svg \": {\n marginRight: \".3rem\",\n height: 16,\n width: 16,\n },\n },\n credentialTitle: {\n padding: \".8rem 0 0 0\",\n fontWeight: 600,\n fontSize: \".9rem\",\n },\n buttonContainer: {\n textAlign: \"right\",\n marginTop: \"1rem\",\n },\n credentialsPanel: {\n overflowY: \"auto\",\n maxHeight: 350,\n },\n promptTitle: {\n display: \"flex\",\n alignItems: \"center\",\n },\n buttonSpacer: {\n marginRight: \".9rem\",\n },\n promptIcon: {\n marginRight: \".1rem\",\n display: \"flex\",\n alignItems: \"center\",\n height: \"2rem\",\n width: \"2rem\",\n },\n });\n\ninterface ICredentialsPromptProps {\n classes: any;\n newServiceAccount: NewServiceAccount | null;\n open: boolean;\n entity: string;\n closeModal: () => void;\n}\n\nconst download = (filename: string, text: string) => {\n let element = document.createElement(\"a\");\n element.setAttribute(\n \"href\",\n \"data:text/plain;charset=utf-8,\" + encodeURIComponent(text)\n );\n element.setAttribute(\"download\", filename);\n\n element.style.display = \"none\";\n document.body.appendChild(element);\n\n element.click();\n document.body.removeChild(element);\n};\n\nconst CredentialsPrompt = ({\n classes,\n newServiceAccount,\n open,\n closeModal,\n entity,\n}: ICredentialsPromptProps) => {\n if (!newServiceAccount) {\n return null;\n }\n const consoleCreds = get(newServiceAccount, \"console\", null);\n const idp = get(newServiceAccount, \"idp\", false);\n\n return (\n {\n closeModal();\n }}\n title={\n
\n
New {entity} Created
\n
\n }\n titleIcon={}\n >\n \n \n A new {entity} has been created with the following details:\n {!idp && consoleCreds && (\n \n \n
\n Console Credentials\n
\n {Array.isArray(consoleCreds) &&\n consoleCreds.map((credentialsPair, index) => {\n return (\n <>\n \n \n \n );\n })}\n {!Array.isArray(consoleCreds) && (\n <>\n \n \n \n )}\n
\n
\n )}\n {idp ? (\n
\n Please Login via the configured external identity provider.\n
\n ) : (\n
\n \n \n Write these down, as this is the only time the secret will be\n displayed.\n \n
\n )}\n
\n \n {\n closeModal();\n }}\n color=\"primary\"\n >\n Done\n \n\n {!idp && (\n {\n let consoleExtras = {};\n\n if (consoleCreds) {\n if (!Array.isArray(consoleCreds)) {\n consoleExtras = {\n console: [\n {\n url: consoleCreds.url,\n access_key: consoleCreds.accessKey,\n secret_key: consoleCreds.secretKey,\n api: \"s3v4\",\n path: \"auto\",\n },\n ],\n };\n } else {\n const cCreds = consoleCreds.map((itemMap) => {\n return {\n url: itemMap.url,\n access_key: itemMap.accessKey,\n secret_key: itemMap.secretKey,\n api: \"s3v4\",\n path: \"auto\",\n };\n });\n\n consoleExtras = {\n console: [...cCreds],\n };\n }\n }\n\n download(\n \"credentials.json\",\n JSON.stringify({\n ...consoleExtras,\n })\n );\n }}\n endIcon={}\n variant=\"contained\"\n color=\"primary\"\n >\n Download\n \n )}\n \n
\n \n );\n};\n\nexport default withStyles(styles)(CredentialsPrompt);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport get from \"lodash/get\";\nimport { Grid, InputLabel, Tooltip } from \"@mui/material\";\nimport IconButton from \"@mui/material/IconButton\";\nimport AttachFileIcon from \"@mui/icons-material/AttachFile\";\nimport CancelIcon from \"@mui/icons-material/Cancel\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n fieldBasic,\n fileInputStyles,\n tooltipHelper,\n} from \"../common/styleLibrary\";\nimport { fileProcess } from \"./utils\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\nimport ErrorBlock from \"../../../../shared/ErrorBlock\";\n\ninterface InputBoxProps {\n label: string;\n classes: any;\n onChange: (e: string, i: string) => void;\n id: string;\n name: string;\n disabled?: boolean;\n tooltip?: string;\n required?: boolean;\n error?: string;\n accept?: string;\n value?: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n valueString: {\n maxWidth: 350,\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n marginTop: 2,\n },\n fileInputField: {\n margin: \"13px 0\",\n \"@media (max-width: 900px)\": {\n flexFlow: \"column\",\n },\n },\n ...fileInputStyles,\n inputLabel: {\n ...fieldBasic.inputLabel,\n fontWeight: \"normal\",\n },\n textBoxContainer: {\n ...fieldBasic.textBoxContainer,\n maxWidth: \"100%\",\n border: \"1px solid #eaeaea\",\n paddingLeft: \"15px\",\n },\n });\n\nconst FileSelector = ({\n label,\n classes,\n onChange,\n id,\n name,\n disabled = false,\n tooltip = \"\",\n required,\n error = \"\",\n accept = \"\",\n value = \"\",\n}: InputBoxProps) => {\n const [showFileSelector, setShowSelector] = useState(false);\n\n return (\n \n \n {label !== \"\" && (\n \n \n {label}\n {required ? \"*\" : \"\"}\n \n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n \n )}\n\n {showFileSelector || value === \"\" ? (\n
\n {\n const fileName = get(e, \"target.files[0].name\", \"\");\n fileProcess(e, (data: any) => {\n onChange(data, fileName);\n });\n }}\n accept={accept}\n required={required}\n disabled={disabled}\n className={classes.fileInputField}\n />\n\n {value !== \"\" && (\n {\n setShowSelector(false);\n }}\n disableRipple={false}\n disableFocusRipple={false}\n size=\"small\"\n >\n \n \n )}\n\n {error !== \"\" && }\n
\n ) : (\n
\n
{value}
\n {\n setShowSelector(true);\n }}\n disableRipple={false}\n disableFocusRipple={false}\n size=\"small\"\n >\n \n \n
\n )}\n \n
\n );\n};\n\nexport default withStyles(styles)(FileSelector);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nexport const fileProcess = (evt: any, callback: any) => {\n const file = evt.target.files[0];\n const reader = new FileReader();\n reader.readAsDataURL(file);\n\n reader.onload = () => {\n // reader.readAsDataURL(file) output will be something like: data:application/x-x509-ca-cert;base64,LS0tLS1CRUdJTiBDRVJUSU\n // we care only about the actual base64 part (everything after \"data:application/x-x509-ca-cert;base64,\")\n const fileBase64 = reader.result;\n if (fileBase64) {\n const fileArray = fileBase64.toString().split(\"base64,\");\n\n if (fileArray.length === 2) {\n callback(fileArray[1]);\n }\n }\n };\n};\n","import React from \"react\";\nimport { Grid } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { pageContentStyles } from \"../FormComponents/common/styleLibrary\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...pageContentStyles,\n });\n\ntype PageLayoutProps = {\n className?: string;\n classes?: any;\n children: any;\n};\n\nconst PageLayout = ({ classes, className = \"\", children }: PageLayoutProps) => {\n return (\n
\n \n \n {children}\n \n \n
\n );\n};\n\nexport default withStyles(styles)(PageLayout);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { Opts } from \"../../../ListTenants/utils\";\nimport TenantSizeMK from \"./TenantSizeMK\";\n\nexport enum IMkEnvs {\n \"aws\",\n \"azure\",\n \"gcp\",\n \"default\",\n undefined,\n}\n\nexport interface IDriveSizing {\n driveSize: string;\n sizeUnit: string;\n}\n\nexport interface IntegrationConfiguration {\n typeSelection: string;\n storageClass: string;\n CPU: number;\n memory: number;\n drivesPerServer: number;\n driveSize: IDriveSizing;\n}\n\nexport const AWSStorageTypes: Opts[] = [\n { label: \"NVME\", value: \"nvme\" },\n { label: \"HDD\", value: \"hdd\" },\n];\n\nexport const AzureStorageTypes: Opts[] = [\n { label: \"Standard_L32s_v2\", value: \"Standard_L32s_v2\" },\n { label: \"Standard_L48s_v2\", value: \"Standard_L48s_v2\" },\n { label: \"Standard_L64s_v2\", value: \"Standard_L64s_v2\" },\n];\n\nexport const resourcesConfigurations = {\n \"mp-mode-aws\": IMkEnvs.aws,\n \"mp-mode-azure\": IMkEnvs.azure,\n \"mp-mode-gcp\": IMkEnvs.gcp,\n};\n\nexport const AWSConfigurations: IntegrationConfiguration[] = [\n {\n typeSelection: \"nvme\",\n storageClass: \"nvme-i3en-12xlarge\",\n CPU: 48,\n memory: 384,\n driveSize: { driveSize: \"7500\", sizeUnit: \"Gi\" },\n drivesPerServer: 4,\n },\n {\n typeSelection: \"hdd\",\n storageClass: \"hdd-d3en-12xlarge\",\n CPU: 8,\n memory: 32,\n driveSize: { driveSize: \"12.7\", sizeUnit: \"Ti\" },\n drivesPerServer: 4,\n },\n];\n\nexport const AzureConfigurations: IntegrationConfiguration[] = [\n {\n typeSelection: \"Standard_L8s_v2\",\n storageClass: \"local-nvme\",\n CPU: 8,\n memory: 64,\n driveSize: { driveSize: \"1787\", sizeUnit: \"Gi\" },\n drivesPerServer: 1,\n },\n {\n typeSelection: \"Standard_L16s_v2\",\n storageClass: \"local-nvme\",\n CPU: 16,\n memory: 128,\n driveSize: { driveSize: \"1787\", sizeUnit: \"Gi\" },\n drivesPerServer: 2,\n },\n {\n typeSelection: \"Standard_L32s_v2\",\n storageClass: \"local-nvme\",\n CPU: 32,\n memory: 256,\n driveSize: { driveSize: \"1787\", sizeUnit: \"Gi\" },\n drivesPerServer: 4,\n },\n {\n typeSelection: \"Standard_L48s_v2\",\n storageClass: \"local-nvme\",\n CPU: 48,\n memory: 384,\n driveSize: { driveSize: \"1787\", sizeUnit: \"Gi\" },\n drivesPerServer: 6,\n },\n {\n typeSelection: \"Standard_L64s_v2\",\n storageClass: \"local-nvme\",\n CPU: 64,\n memory: 512,\n driveSize: { driveSize: \"1787\", sizeUnit: \"Gi\" },\n drivesPerServer: 8,\n },\n];\n\nexport const GCPStorageTypes: Opts[] = [{ label: \"SSD\", value: \"ssd\" }];\n\nexport const GCPConfigurations: IntegrationConfiguration[] = [\n {\n typeSelection: \"ssd\",\n storageClass: \"local-ssd\",\n CPU: 32,\n memory: 128,\n driveSize: { driveSize: \"368\", sizeUnit: \"Gi\" },\n drivesPerServer: 24,\n },\n];\n\nexport const mkPanelConfigurations = {\n [IMkEnvs.aws]: {\n variantSelectorLabel: \"Storage Type\",\n variantSelectorValues: AWSStorageTypes,\n configurations: AWSConfigurations,\n sizingComponent: ,\n },\n [IMkEnvs.azure]: {\n variantSelectorLabel: \"VM Size\",\n variantSelectorValues: AzureStorageTypes,\n configurations: AzureConfigurations,\n sizingComponent: ,\n },\n [IMkEnvs.gcp]: {\n variantSelectorLabel: \"Storage Type\",\n variantSelectorValues: GCPStorageTypes,\n configurations: GCPConfigurations,\n sizingComponent: ,\n },\n [IMkEnvs.default]: {},\n [IMkEnvs.undefined]: {},\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Grid, Paper, SelectChangeEvent } from \"@mui/material\";\nimport {\n createTenantCommon,\n modalBasic,\n wizardCommon,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\nimport { isPageValid, updateAddField } from \"../../actions\";\nimport { AppState } from \"../../../../../store\";\nimport { clearValidationError } from \"../../utils\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../utils/validationFunctions\";\nimport FormSwitchWrapper from \"../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport InputBoxWrapper from \"../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport SelectWrapper from \"../../../Common/FormComponents/SelectWrapper/SelectWrapper\";\nimport { ISecurityContext } from \"../../types\";\n\ninterface IConfigureProps {\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n storageClasses: any;\n classes: any;\n customImage: boolean;\n imageName: string;\n customDockerhub: boolean;\n imageRegistry: string;\n imageRegistryUsername: string;\n imageRegistryPassword: string;\n exposeMinIO: boolean;\n exposeConsole: boolean;\n prometheusCustom: boolean;\n tenantCustom: boolean;\n logSearchCustom: boolean;\n logSearchVolumeSize: string;\n logSearchSizeFactor: string;\n prometheusVolumeSize: string;\n prometheusSizeFactor: string;\n logSearchSelectedStorageClass: string;\n logSearchImage: string;\n kesImage: string;\n logSearchPostgresImage: string;\n logSearchPostgresInitImage: string;\n prometheusSelectedStorageClass: string;\n prometheusImage: string;\n prometheusSidecarImage: string;\n prometheusInitImage: string;\n selectedStorageClass: string;\n tenantSecurityContext: ISecurityContext;\n logSearchSecurityContext: ISecurityContext;\n logSearchPostgresSecurityContext: ISecurityContext;\n prometheusSecurityContext: ISecurityContext;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n configSectionItem: {\n marginRight: 15,\n\n \"& .multiContainer\": {\n border: \"1px solid red\",\n },\n },\n tenantCustomizationFields: {\n marginLeft: 30, // 2nd Level(15+15)\n width: \"88%\",\n margin: \"auto\",\n },\n containerItem: {\n marginRight: 15,\n },\n fieldGroup: {\n ...createTenantCommon.fieldGroup,\n paddingTop: 15,\n marginBottom: 25,\n },\n responsiveSectionItem: {\n \"@media (max-width: 900px)\": {\n flexFlow: \"column\",\n alignItems: \"flex-start\",\n\n \"& div > div\": {\n marginBottom: 5,\n marginRight: 0,\n },\n },\n },\n\n logSearchCustomFields: {\n marginLeft: 20, // 2nd Level(15+15)\n padding: 10,\n width: \"90%\",\n margin: \"auto\",\n },\n fieldSpaceTop: {\n marginTop: 15,\n },\n prometheusCustomFields: {\n marginLeft: 20, // 2nd Level(15+15)\n padding: 10,\n width: \"90%\",\n margin: \"auto\",\n },\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst Configure = ({\n classes,\n storageClasses,\n customImage,\n imageName,\n customDockerhub,\n imageRegistry,\n imageRegistryUsername,\n imageRegistryPassword,\n exposeMinIO,\n exposeConsole,\n prometheusCustom,\n tenantCustom,\n logSearchCustom,\n logSearchVolumeSize,\n logSearchSizeFactor,\n logSearchImage,\n kesImage,\n logSearchPostgresImage,\n logSearchPostgresInitImage,\n prometheusVolumeSize,\n prometheusSizeFactor,\n logSearchSelectedStorageClass,\n prometheusSelectedStorageClass,\n prometheusImage,\n prometheusSidecarImage,\n prometheusInitImage,\n updateAddField,\n isPageValid,\n selectedStorageClass,\n tenantSecurityContext,\n logSearchSecurityContext,\n logSearchPostgresSecurityContext,\n prometheusSecurityContext,\n}: IConfigureProps) => {\n const [validationErrors, setValidationErrors] = useState({});\n\n const configureSTClasses = [\n { label: \"Default\", value: \"default\" },\n ...storageClasses,\n ];\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n updateAddField(\"configure\", field, value);\n },\n [updateAddField]\n );\n\n // Validation\n useEffect(() => {\n let customAccountValidation: IValidation[] = [];\n if (tenantCustom) {\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"tenant_securityContext_runAsUser\",\n required: true,\n value: tenantSecurityContext.runAsUser,\n customValidation:\n tenantSecurityContext.runAsUser === \"\" ||\n parseInt(tenantSecurityContext.runAsUser) < 0,\n customValidationMessage: `runAsUser must be present and be 0 or more`,\n },\n {\n fieldKey: \"tenant_securityContext_runAsGroup\",\n required: true,\n value: tenantSecurityContext.runAsGroup,\n customValidation:\n tenantSecurityContext.runAsGroup === \"\" ||\n parseInt(tenantSecurityContext.runAsGroup) < 0,\n customValidationMessage: `runAsGroup must be present and be 0 or more`,\n },\n {\n fieldKey: \"tenant_securityContext_fsGroup\",\n required: true,\n value: tenantSecurityContext.fsGroup,\n customValidation:\n tenantSecurityContext.fsGroup === \"\" ||\n parseInt(tenantSecurityContext.fsGroup) < 0,\n customValidationMessage: `fsGroup must be present and be 0 or more`,\n },\n ];\n }\n if (prometheusCustom) {\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"prometheus_storage_class\",\n required: true,\n value: prometheusSelectedStorageClass,\n customValidation: prometheusSelectedStorageClass === \"\",\n customValidationMessage: \"Field cannot be empty\",\n },\n {\n fieldKey: \"prometheus_volume_size\",\n required: true,\n value: prometheusVolumeSize,\n customValidation:\n prometheusVolumeSize === \"\" || parseInt(prometheusVolumeSize) <= 0,\n customValidationMessage: `Volume size must be present and be greater than 0`,\n },\n {\n fieldKey: \"prometheus_securityContext_runAsUser\",\n required: true,\n value: prometheusSecurityContext.runAsUser,\n customValidation:\n prometheusSecurityContext.runAsUser === \"\" ||\n parseInt(prometheusSecurityContext.runAsUser) < 0,\n customValidationMessage: `runAsUser must be present and be 0 or more`,\n },\n {\n fieldKey: \"prometheus_securityContext_runAsGroup\",\n required: true,\n value: prometheusSecurityContext.runAsGroup,\n customValidation:\n prometheusSecurityContext.runAsGroup === \"\" ||\n parseInt(prometheusSecurityContext.runAsGroup) < 0,\n customValidationMessage: `runAsGroup must be present and be 0 or more`,\n },\n {\n fieldKey: \"prometheus_securityContext_fsGroup\",\n required: true,\n value: prometheusSecurityContext.fsGroup,\n customValidation:\n prometheusSecurityContext.fsGroup === \"\" ||\n parseInt(prometheusSecurityContext.fsGroup) < 0,\n customValidationMessage: `fsGroup must be present and be 0 or more`,\n },\n ];\n }\n if (logSearchCustom) {\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"log_search_storage_class\",\n required: true,\n value: logSearchSelectedStorageClass,\n customValidation: logSearchSelectedStorageClass === \"\",\n customValidationMessage: \"Field cannot be empty\",\n },\n {\n fieldKey: \"log_search_volume_size\",\n required: true,\n value: logSearchVolumeSize,\n customValidation:\n logSearchVolumeSize === \"\" || parseInt(logSearchVolumeSize) <= 0,\n customValidationMessage: `Volume size must be present and be greatter than 0`,\n },\n {\n fieldKey: \"logSearch_securityContext_runAsUser\",\n required: true,\n value: logSearchSecurityContext.runAsUser,\n customValidation:\n logSearchSecurityContext.runAsUser === \"\" ||\n parseInt(logSearchSecurityContext.runAsUser) < 0,\n customValidationMessage: `runAsUser must be present and be 0 or more`,\n },\n {\n fieldKey: \"logSearch_securityContext_runAsGroup\",\n required: true,\n value: logSearchSecurityContext.runAsGroup,\n customValidation:\n logSearchSecurityContext.runAsGroup === \"\" ||\n parseInt(logSearchSecurityContext.runAsGroup) < 0,\n customValidationMessage: `runAsGroup must be present and be 0 or more`,\n },\n {\n fieldKey: \"logSearch_securityContext_fsGroup\",\n required: true,\n value: logSearchSecurityContext.fsGroup,\n customValidation:\n logSearchSecurityContext.fsGroup === \"\" ||\n parseInt(logSearchSecurityContext.fsGroup) < 0,\n customValidationMessage: `fsGroup must be present and be 0 or more`,\n },\n {\n fieldKey: \"postgres_securityContext_runAsUser\",\n required: true,\n value: logSearchPostgresSecurityContext.runAsUser,\n customValidation:\n logSearchPostgresSecurityContext.runAsUser === \"\" ||\n parseInt(logSearchPostgresSecurityContext.runAsUser) < 0,\n customValidationMessage: `runAsUser must be present and be 0 or more`,\n },\n {\n fieldKey: \"postgres_securityContext_runAsGroup\",\n required: true,\n value: prometheusSecurityContext.runAsGroup,\n customValidation:\n logSearchPostgresSecurityContext.runAsGroup === \"\" ||\n parseInt(logSearchPostgresSecurityContext.runAsGroup) < 0,\n customValidationMessage: `runAsGroup must be present and be 0 or more`,\n },\n {\n fieldKey: \"postgres_securityContext_fsGroup\",\n required: true,\n value: logSearchPostgresSecurityContext.fsGroup,\n customValidation:\n logSearchPostgresSecurityContext.fsGroup === \"\" ||\n parseInt(logSearchPostgresSecurityContext.fsGroup) < 0,\n customValidationMessage: `fsGroup must be present and be 0 or more`,\n },\n ];\n }\n\n if (customImage) {\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"image\",\n required: false,\n value: imageName,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage: \"Format must be of form: 'minio/minio:VERSION'\",\n },\n {\n fieldKey: \"logSearchImage\",\n required: false,\n value: logSearchImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage:\n \"Format must be of form: 'minio/logsearchapi:VERSION'\",\n },\n {\n fieldKey: \"kesImage\",\n required: false,\n value: kesImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage: \"Format must be of form: 'minio/kes:VERSION'\",\n },\n {\n fieldKey: \"logSearchPostgresImage\",\n required: false,\n value: logSearchPostgresImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage:\n \"Format must be of form: 'library/postgres:VERSION'\",\n },\n {\n fieldKey: \"logSearchPostgresInitImage\",\n required: false,\n value: logSearchPostgresInitImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage:\n \"Format must be of form: 'library/busybox:VERSION'\",\n },\n {\n fieldKey: \"prometheusImage\",\n required: false,\n value: prometheusImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage:\n \"Format must be of form: 'minio/prometheus:VERSION'\",\n },\n {\n fieldKey: \"prometheusSidecarImage\",\n required: false,\n value: prometheusSidecarImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage:\n \"Format must be of form: 'project/container:VERSION'\",\n },\n {\n fieldKey: \"prometheusInitImage\",\n required: false,\n value: prometheusInitImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage:\n \"Format must be of form: 'library/busybox:VERSION'\",\n },\n ];\n if (customDockerhub) {\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"registry\",\n required: true,\n value: imageRegistry,\n },\n {\n fieldKey: \"registryUsername\",\n required: true,\n value: imageRegistryUsername,\n },\n {\n fieldKey: \"registryPassword\",\n required: true,\n value: imageRegistryPassword,\n },\n ];\n }\n }\n\n const commonVal = commonFormValidation(customAccountValidation);\n\n isPageValid(\"configure\", Object.keys(commonVal).length === 0);\n\n setValidationErrors(commonVal);\n }, [\n customImage,\n imageName,\n logSearchImage,\n kesImage,\n logSearchPostgresImage,\n logSearchPostgresInitImage,\n prometheusImage,\n prometheusSidecarImage,\n prometheusInitImage,\n customDockerhub,\n imageRegistry,\n imageRegistryUsername,\n imageRegistryPassword,\n isPageValid,\n prometheusCustom,\n tenantCustom,\n logSearchCustom,\n prometheusSelectedStorageClass,\n prometheusVolumeSize,\n logSearchSelectedStorageClass,\n logSearchVolumeSize,\n tenantSecurityContext,\n logSearchSecurityContext,\n logSearchPostgresSecurityContext,\n prometheusSecurityContext,\n ]);\n\n useEffect(() => {\n // New default values in current selection is invalid\n if (storageClasses.length > 0) {\n const filterPrometheus = storageClasses.filter(\n (item: any) => item.value === prometheusSelectedStorageClass\n );\n if (filterPrometheus.length === 0) {\n updateField(\"prometheusSelectedStorageClass\", \"default\");\n }\n\n const filterLogSearch = storageClasses.filter(\n (item: any) => item.value === logSearchSelectedStorageClass\n );\n if (filterLogSearch.length === 0) {\n updateField(\"logSearchSelectedStorageClass\", \"default\");\n }\n }\n }, [\n logSearchSelectedStorageClass,\n prometheusSelectedStorageClass,\n selectedStorageClass,\n storageClasses,\n updateField,\n ]);\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n return (\n \n
\n

Configure

\n \n Basic configurations for tenant management\n \n
\n
\n

Expose Services

\n \n Whether the tenant's services should request an external IP.\n \n
\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"exposeMinIO\", checked);\n }}\n label={\"Expose MiniO Service\"}\n />\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"exposeConsole\", checked);\n }}\n label={\"Expose Console Service\"}\n />\n \n\n
\n

Additional Configurations

\n \n Configure SecurityContext, Storage Classes & Storage size for Log\n Search, Prometheus add-ons and your Tenant\n \n
\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"tenantCustom\", checked);\n }}\n label={\"Override Tenant defaults\"}\n />\n \n {tenantCustom && (\n \n
\n \n SecurityContext for MinIO\n \n \n \n
\n ) => {\n updateField(\"tenantSecurityContext\", {\n ...tenantSecurityContext,\n runAsUser: e.target.value,\n });\n cleanValidation(\"tenant_securityContext_runAsUser\");\n }}\n label=\"Run As User\"\n value={tenantSecurityContext.runAsUser}\n required\n error={\n validationErrors[\"tenant_securityContext_runAsUser\"] || \"\"\n }\n min=\"0\"\n />\n
\n
\n ) => {\n updateField(\"tenantSecurityContext\", {\n ...tenantSecurityContext,\n runAsGroup: e.target.value,\n });\n cleanValidation(\"tenant_securityContext_runAsGroup\");\n }}\n label=\"Run As Group\"\n value={tenantSecurityContext.runAsGroup}\n required\n error={\n validationErrors[\"tenant_securityContext_runAsGroup\"] ||\n \"\"\n }\n min=\"0\"\n />\n
\n
\n ) => {\n updateField(\"tenantSecurityContext\", {\n ...tenantSecurityContext,\n fsGroup: e.target.value,\n });\n cleanValidation(\"tenant_securityContext_fsGroup\");\n }}\n label=\"FsGroup\"\n value={tenantSecurityContext.fsGroup}\n required\n error={\n validationErrors[\"tenant_securityContext_fsGroup\"] || \"\"\n }\n min=\"0\"\n />\n
\n \n
\n
\n \n
\n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"tenantSecurityContext\", {\n ...tenantSecurityContext,\n runAsNonRoot: checked,\n });\n }}\n label={\"Do not run as Root\"}\n />\n
\n
\n
\n
\n )}\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"logSearchCustom\", checked);\n }}\n label={\"Override Log Search defaults\"}\n />\n \n {logSearchCustom && (\n \n \n ) => {\n updateField(\n \"logSearchSelectedStorageClass\",\n e.target.value as string\n );\n }}\n label=\"Log Search Storage Class\"\n value={logSearchSelectedStorageClass}\n options={configureSTClasses}\n disabled={configureSTClasses.length < 1}\n />\n \n \n
\n ) => {\n updateField(\"logSearchVolumeSize\", e.target.value);\n cleanValidation(\"log_search_volume_size\");\n }}\n label=\"Storage Size [Gi]\"\n value={logSearchVolumeSize}\n required\n error={validationErrors[\"log_search_volume_size\"] || \"\"}\n min=\"0\"\n />\n
\n
\n\n \n \n SecurityContext for LogSearch\n \n\n \n \n
\n ) => {\n updateField(\"logSearchSecurityContext\", {\n ...logSearchSecurityContext,\n runAsUser: e.target.value,\n });\n cleanValidation(\"logSearch_securityContext_runAsUser\");\n }}\n label=\"Run As User\"\n value={logSearchSecurityContext.runAsUser}\n required\n error={\n validationErrors[\"logSearch_securityContext_runAsUser\"] ||\n \"\"\n }\n min=\"0\"\n />\n
\n
\n ) => {\n updateField(\"logSearchSecurityContext\", {\n ...logSearchSecurityContext,\n runAsGroup: e.target.value,\n });\n cleanValidation(\"logSearch_securityContext_runAsGroup\");\n }}\n label=\"Run As Group\"\n value={logSearchSecurityContext.runAsGroup}\n required\n error={\n validationErrors[\n \"logSearch_securityContext_runAsGroup\"\n ] || \"\"\n }\n min=\"0\"\n />\n
\n
\n ) => {\n updateField(\"logSearchSecurityContext\", {\n ...logSearchSecurityContext,\n fsGroup: e.target.value,\n });\n cleanValidation(\"logSearch_securityContext_fsGroup\");\n }}\n label=\"FsGroup\"\n value={logSearchSecurityContext.fsGroup}\n required\n error={\n validationErrors[\"logSearch_securityContext_fsGroup\"] ||\n \"\"\n }\n min=\"0\"\n />\n
\n \n
\n
\n \n
\n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"logSearchSecurityContext\", {\n ...logSearchSecurityContext,\n runAsNonRoot: checked,\n });\n }}\n label={\"Do not run as Root\"}\n />\n
\n
\n \n
\n \n SecurityContext for PostgreSQL\n \n\n \n \n
\n ) => {\n updateField(\"logSearchPostgresSecurityContext\", {\n ...logSearchPostgresSecurityContext,\n runAsUser: e.target.value,\n });\n cleanValidation(\"postgres_securityContext_runAsUser\");\n }}\n label=\"Run As User\"\n value={logSearchPostgresSecurityContext.runAsUser}\n required\n error={\n validationErrors[\"postgres_securityContext_runAsUser\"] ||\n \"\"\n }\n min=\"0\"\n />\n
\n
\n ) => {\n updateField(\"logSearchPostgresSecurityContext\", {\n ...logSearchPostgresSecurityContext,\n runAsGroup: e.target.value,\n });\n cleanValidation(\"postgres_securityContext_runAsGroup\");\n }}\n label=\"Run As Group\"\n value={logSearchPostgresSecurityContext.runAsGroup}\n required\n error={\n validationErrors[\"postgres_securityContext_runAsGroup\"] ||\n \"\"\n }\n min=\"0\"\n />\n
\n
\n ) => {\n updateField(\"logSearchPostgresSecurityContext\", {\n ...logSearchPostgresSecurityContext,\n fsGroup: e.target.value,\n });\n cleanValidation(\"postgres_securityContext_fsGroup\");\n }}\n label=\"FsGroup\"\n value={logSearchPostgresSecurityContext.fsGroup}\n required\n error={\n validationErrors[\"postgres_securityContext_fsGroup\"] || \"\"\n }\n min=\"0\"\n />\n
\n \n
\n
\n \n
\n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"logSearchPostgresSecurityContext\", {\n ...logSearchPostgresSecurityContext,\n runAsNonRoot: checked,\n });\n }}\n label={\"Do not run as Root\"}\n />\n
\n
\n
\n
\n )}\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"prometheusCustom\", checked);\n }}\n label={\"Override Prometheus defaults\"}\n />\n \n {prometheusCustom && (\n \n \n ) => {\n updateField(\n \"prometheusSelectedStorageClass\",\n e.target.value as string\n );\n }}\n label=\"Prometheus Storage Class\"\n value={prometheusSelectedStorageClass}\n options={configureSTClasses}\n disabled={configureSTClasses.length < 1}\n />\n \n \n
\n ) => {\n updateField(\"prometheusVolumeSize\", e.target.value);\n cleanValidation(\"prometheus_volume_size\");\n }}\n label=\"Storage Size [Gi]\"\n value={prometheusVolumeSize}\n required\n error={validationErrors[\"prometheus_volume_size\"] || \"\"}\n min=\"0\"\n />\n
\n
\n \n \n SecurityContext for Prometheus\n \n \n \n
\n ) => {\n updateField(\"prometheusSecurityContext\", {\n ...prometheusSecurityContext,\n runAsUser: e.target.value,\n });\n cleanValidation(\"prometheus_securityContext_runAsUser\");\n }}\n label=\"Run As User\"\n value={prometheusSecurityContext.runAsUser}\n required\n error={\n validationErrors[\n \"prometheus_securityContext_runAsUser\"\n ] || \"\"\n }\n min=\"0\"\n />\n
\n
\n ) => {\n updateField(\"prometheusSecurityContext\", {\n ...prometheusSecurityContext,\n runAsGroup: e.target.value,\n });\n cleanValidation(\"prometheus_securityContext_runAsGroup\");\n }}\n label=\"Run As Group\"\n value={prometheusSecurityContext.runAsGroup}\n required\n error={\n validationErrors[\n \"prometheus_securityContext_runAsGroup\"\n ] || \"\"\n }\n min=\"0\"\n />\n
\n
\n ) => {\n updateField(\"prometheusSecurityContext\", {\n ...prometheusSecurityContext,\n fsGroup: e.target.value,\n });\n cleanValidation(\"prometheus_securityContext_fsGroup\");\n }}\n label=\"FsGroup\"\n value={prometheusSecurityContext.fsGroup}\n required\n error={\n validationErrors[\"prometheus_securityContext_fsGroup\"] ||\n \"\"\n }\n min=\"0\"\n />\n
\n \n
\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"prometheusSecurityContext\", {\n ...prometheusSecurityContext,\n runAsNonRoot: checked,\n });\n }}\n label={\"Do not run as Root\"}\n />\n \n \n \n
\n )}\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n storageClasses: state.tenants.createTenant.storageClasses,\n customImage: state.tenants.createTenant.fields.configure.customImage,\n imageName: state.tenants.createTenant.fields.configure.imageName,\n customDockerhub: state.tenants.createTenant.fields.configure.customDockerhub,\n imageRegistry: state.tenants.createTenant.fields.configure.imageRegistry,\n imageRegistryUsername:\n state.tenants.createTenant.fields.configure.imageRegistryUsername,\n imageRegistryPassword:\n state.tenants.createTenant.fields.configure.imageRegistryPassword,\n exposeMinIO: state.tenants.createTenant.fields.configure.exposeMinIO,\n exposeConsole: state.tenants.createTenant.fields.configure.exposeConsole,\n prometheusCustom:\n state.tenants.createTenant.fields.configure.prometheusCustom,\n tenantCustom: state.tenants.createTenant.fields.configure.tenantCustom,\n logSearchCustom: state.tenants.createTenant.fields.configure.logSearchCustom,\n logSearchVolumeSize:\n state.tenants.createTenant.fields.configure.logSearchVolumeSize,\n logSearchSizeFactor:\n state.tenants.createTenant.fields.configure.logSearchSizeFactor,\n prometheusVolumeSize:\n state.tenants.createTenant.fields.configure.prometheusVolumeSize,\n prometheusSizeFactor:\n state.tenants.createTenant.fields.configure.prometheusSizeFactor,\n logSearchSelectedStorageClass:\n state.tenants.createTenant.fields.configure.logSearchSelectedStorageClass,\n logSearchImage: state.tenants.createTenant.fields.configure.logSearchImage,\n kesImage: state.tenants.createTenant.fields.configure.kesImage,\n logSearchPostgresImage:\n state.tenants.createTenant.fields.configure.logSearchPostgresImage,\n logSearchPostgresInitImage:\n state.tenants.createTenant.fields.configure.logSearchPostgresInitImage,\n prometheusSelectedStorageClass:\n state.tenants.createTenant.fields.configure.prometheusSelectedStorageClass,\n prometheusImage: state.tenants.createTenant.fields.configure.prometheusImage,\n prometheusSidecarImage:\n state.tenants.createTenant.fields.configure.prometheusSidecarImage,\n prometheusInitImage:\n state.tenants.createTenant.fields.configure.prometheusInitImage,\n selectedStorageClass:\n state.tenants.createTenant.fields.nameTenant.selectedStorageClass,\n tenantSecurityContext:\n state.tenants.createTenant.fields.configure.tenantSecurityContext,\n logSearchSecurityContext:\n state.tenants.createTenant.fields.configure.logSearchSecurityContext,\n logSearchPostgresSecurityContext:\n state.tenants.createTenant.fields.configure\n .logSearchPostgresSecurityContext,\n prometheusSecurityContext:\n state.tenants.createTenant.fields.configure.prometheusSecurityContext,\n});\n\nconst connector = connect(mapState, {\n updateAddField,\n isPageValid,\n});\n\nexport default withStyles(styles)(connector(Configure));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Grid, IconButton, Paper, Tooltip, Typography } from \"@mui/material\";\nimport CasinoIcon from \"@mui/icons-material/Casino\";\nimport DeleteIcon from \"@mui/icons-material/Delete\";\nimport {\n createTenantCommon,\n formFieldStyles,\n modalBasic,\n wizardCommon,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\nimport { isPageValid, updateAddField } from \"../../actions\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../utils/validationFunctions\";\nimport { AppState } from \"../../../../../store\";\nimport { clearValidationError, getRandomString } from \"../../utils\";\nimport RadioGroupSelector from \"../../../Common/FormComponents/RadioGroupSelector/RadioGroupSelector\";\nimport InputBoxWrapper from \"../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport FormSwitchWrapper from \"../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport AddIcon from \"@mui/icons-material/Add\";\nimport RemoveIcon from \"../../../../../icons/RemoveIcon\";\n\ninterface IIdentityProviderProps {\n classes: any;\n idpSelection: string;\n accessKeys: string[];\n secretKeys: string[];\n openIDConfigurationURL: string;\n openIDClientID: string;\n openIDSecretID: string;\n openIDCallbackURL: string;\n openIDClaimName: string;\n openIDScopes: string;\n ADURL: string;\n ADSkipTLS: boolean;\n ADServerInsecure: boolean;\n ADUserNameSearchFilter: string;\n ADGroupSearchBaseDN: string;\n ADGroupSearchFilter: string;\n ADGroupNameAttribute: string;\n ADUserDNs: string[];\n ADUserNameFormat: string;\n ADLookupBindDN: string;\n ADLookupBindPassword: string;\n ADUserDNSearchBaseDN: string;\n ADUserDNSearchFilter: string;\n ADServerStartTLS: boolean;\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n shortened: {\n gridTemplateColumns: \"auto auto 50px 50px\",\n display: \"grid\",\n gridGap: 15,\n marginBottom: 10,\n \"& input\": {\n fontWeight: 400,\n },\n },\n buttonTray: {\n marginLeft: 10,\n display: \"flex\",\n height: 38,\n \"& button\": {\n background: \"#EAEAEA\",\n },\n },\n overlayAction: {\n marginLeft: 10,\n \"& svg\": {\n maxWidth: 15,\n maxHeight: 15,\n },\n \"& button\": {\n background: \"#EAEAEA\",\n },\n },\n protocolRadioOptions: {\n display: \"flex\",\n flexFlow: \"column\",\n marginBottom: 10,\n\n \"& label\": {\n fontSize: 14,\n },\n \"& div\": {\n display: \"flex\",\n flexFlow: \"column\",\n alignItems: \"baseline\",\n },\n },\n adUserDnRows: {\n display: \"flex\",\n },\n ...createTenantCommon,\n ...formFieldStyles,\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst IdentityProvider = ({\n classes,\n idpSelection,\n accessKeys,\n secretKeys,\n openIDConfigurationURL,\n openIDClientID,\n openIDSecretID,\n openIDCallbackURL,\n openIDClaimName,\n openIDScopes,\n ADURL,\n ADSkipTLS,\n ADServerInsecure,\n ADUserNameSearchFilter,\n ADGroupSearchBaseDN,\n ADGroupSearchFilter,\n ADGroupNameAttribute,\n ADUserDNs,\n ADUserNameFormat,\n ADLookupBindDN,\n ADLookupBindPassword,\n ADUserDNSearchBaseDN,\n ADUserDNSearchFilter,\n ADServerStartTLS,\n updateAddField,\n isPageValid,\n}: IIdentityProviderProps) => {\n const [validationErrors, setValidationErrors] = useState({});\n\n const updateField = useCallback(\n (field: string, value: any) => {\n updateAddField(\"identityProvider\", field, value);\n },\n [updateAddField]\n );\n const updateUserField = (index: number, value: string) => {\n const newUserField = [...accessKeys];\n newUserField[index] = value;\n updateField(\"accessKeys\", newUserField);\n };\n const updatePwordField = (index: number, value: string) => {\n const newUserField = [...secretKeys];\n newUserField[index] = value;\n updateField(\"secretKeys\", newUserField);\n };\n const updateADUserField = (index: number, value: string) => {\n const newADUserDNsField = [...ADUserDNs];\n newADUserDNsField[index] = value;\n updateField(\"ADUserDNs\", newADUserDNsField);\n };\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n // Validation\n\n useEffect(() => {\n let customIDPValidation: IValidation[] = [];\n\n if (idpSelection === \"Built-in\") {\n customIDPValidation = [...customIDPValidation];\n for (var i = 0; i < accessKeys.length; i++) {\n customIDPValidation.push({\n fieldKey: `accesskey-${i.toString()}`,\n required: true,\n value: accessKeys[i],\n pattern: /^[a-zA-Z0-9-]{8,63}$/,\n customPatternMessage: \"Keys must be at least length 8\",\n });\n customIDPValidation.push({\n fieldKey: `secretkey-${i.toString()}`,\n required: true,\n value: secretKeys[i],\n pattern: /^[a-zA-Z0-9-]{8,63}$/,\n customPatternMessage: \"Keys must be at least length 8\",\n });\n }\n }\n\n if (idpSelection === \"OpenID\") {\n customIDPValidation = [\n ...customIDPValidation,\n {\n fieldKey: \"openID_CONFIGURATION_URL\",\n required: true,\n value: openIDConfigurationURL,\n },\n {\n fieldKey: \"openID_clientID\",\n required: true,\n value: openIDClientID,\n },\n {\n fieldKey: \"openID_secretID\",\n required: true,\n value: openIDSecretID,\n },\n {\n fieldKey: \"openID_claimName\",\n required: true,\n value: openIDClaimName,\n },\n ];\n }\n\n if (idpSelection === \"AD\") {\n customIDPValidation = [\n ...customIDPValidation,\n {\n fieldKey: \"AD_URL\",\n required: true,\n value: ADURL,\n },\n ];\n // validate user DNs\n for (let i = 0; i < ADUserDNs.length; i++) {\n customIDPValidation.push({\n fieldKey: `ad-userdn-${i.toString()}`,\n required: true,\n value: ADUserDNs[i],\n });\n }\n }\n\n const commonVal = commonFormValidation(customIDPValidation);\n\n isPageValid(\"identityProvider\", Object.keys(commonVal).length === 0);\n\n setValidationErrors(commonVal);\n }, [\n idpSelection,\n accessKeys,\n secretKeys,\n openIDClientID,\n openIDSecretID,\n ADURL,\n ADUserNameSearchFilter,\n ADGroupSearchBaseDN,\n ADGroupSearchFilter,\n ADGroupNameAttribute,\n ADUserDNs,\n isPageValid,\n openIDConfigurationURL,\n openIDClaimName,\n ]);\n let inputs = null;\n if (idpSelection === \"Built-in\") {\n inputs = accessKeys.map((_, index) => {\n return (\n \n
\n ) => {\n updateUserField(index, e.target.value);\n cleanValidation(`accesskey-${index.toString()}`);\n }}\n index={index}\n key={`csv-accesskey-${index.toString()}`}\n error={validationErrors[`accesskey-${index.toString()}`] || \"\"}\n />\n ) => {\n updatePwordField(index, e.target.value);\n cleanValidation(`secretkey-${index.toString()}`);\n }}\n index={index}\n key={`csv-secretkey-${index.toString()}`}\n error={validationErrors[`secretkey-${index.toString()}`] || \"\"}\n />\n
\n \n
\n {\n accessKeys.push(\"\");\n secretKeys.push(\"\");\n updateUserField(accessKeys.length - 1, \"\");\n updatePwordField(secretKeys.length - 1, \"\");\n }}\n >\n \n \n
\n
\n \n
\n {\n if (accessKeys.length > 1) {\n accessKeys.splice(index, 1);\n secretKeys.splice(index, 1);\n updateUserField(\n accessKeys.length - 1,\n accessKeys[accessKeys.length - 1]\n );\n }\n }}\n >\n \n \n
\n
\n \n
\n {\n updateUserField(index, getRandomString(16));\n updatePwordField(index, getRandomString(32));\n }}\n size={\"small\"}\n >\n \n \n
\n
\n
\n
\n
\n );\n });\n }\n if (idpSelection === \"AD\") {\n inputs = ADUserDNs.map((_, index) => {\n return (\n \n
\n ) => {\n updateADUserField(index, e.target.value);\n cleanValidation(`ad-userdn-${index.toString()}`);\n }}\n index={index}\n key={`csv-ad-userdn-${index.toString()}`}\n error={validationErrors[`ad-userdn-${index.toString()}`] || \"\"}\n />\n
\n \n {\n ADUserDNs.push(\"\");\n updateADUserField(ADUserDNs.length - 1, \"\");\n }}\n >\n \n \n \n \n {\n if (ADUserDNs.length > 1) {\n ADUserDNs.splice(index, 1);\n updateUserField(\n ADUserDNs.length - 1,\n ADUserDNs[ADUserDNs.length - 1]\n );\n }\n }}\n >\n \n \n \n
\n
\n
\n );\n });\n }\n return (\n \n
\n

Identity Provider

\n \n Access to the tenant can be controlled via an external Identity\n Manager.\n \n
\n \n \n {\n updateField(\"idpSelection\", e.target.value);\n }}\n selectorOptions={[\n { label: \"Built-in\", value: \"Built-in\" },\n { label: \"OpenID\", value: \"OpenID\" },\n { label: \"Active Directory\", value: \"AD\" },\n ]}\n />\n \n {idpSelection === \"Built-in\" && (\n \n Add additional users\n {inputs}\n \n )}\n {idpSelection === \"OpenID\" && (\n \n \n ) => {\n updateField(\"openIDConfigurationURL\", e.target.value);\n cleanValidation(\"openID_CONFIGURATION_URL\");\n }}\n label=\"Configuration URL\"\n value={openIDConfigurationURL}\n placeholder=\"https://your-identity-provider.com/.well-known/openid-configuration\"\n error={validationErrors[\"openID_CONFIGURATION_URL\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"openIDClientID\", e.target.value);\n cleanValidation(\"openID_clientID\");\n }}\n label=\"Client ID\"\n value={openIDClientID}\n error={validationErrors[\"openID_clientID\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"openIDSecretID\", e.target.value);\n cleanValidation(\"openID_secretID\");\n }}\n label=\"Secret ID\"\n value={openIDSecretID}\n error={validationErrors[\"openID_secretID\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"openIDCallbackURL\", e.target.value);\n cleanValidation(\"openID_callbackURL\");\n }}\n label=\"Callback URL\"\n value={openIDCallbackURL}\n placeholder=\"https://your-console-endpoint:9443/oauth_callback\"\n error={validationErrors[\"openID_callbackURL\"] || \"\"}\n />\n \n \n ) => {\n updateField(\"openIDClaimName\", e.target.value);\n cleanValidation(\"openID_claimName\");\n }}\n label=\"Claim Name\"\n value={openIDClaimName}\n error={validationErrors[\"openID_claimName\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"openIDScopes\", e.target.value);\n cleanValidation(\"openID_scopes\");\n }}\n label=\"Scopes\"\n value={openIDScopes}\n />\n \n \n )}\n {idpSelection === \"AD\" && (\n \n \n ) => {\n updateField(\"ADURL\", e.target.value);\n cleanValidation(\"AD_URL\");\n }}\n label=\"LDAP Server Address\"\n value={ADURL}\n placeholder=\"ldap-server:636\"\n error={validationErrors[\"AD_URL\"] || \"\"}\n required\n />\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"ADSkipTLS\", checked);\n }}\n label={\"Skip TLS Verification\"}\n />\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"ADServerInsecure\", checked);\n }}\n label={\"Server Insecure\"}\n />\n \n {ADServerInsecure ? (\n \n \n Warning: All traffic with Active Directory will be unencrypted\n \n
\n
\n ) : null}\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"ADServerStartTLS\", checked);\n }}\n label={\"Start TLS connection to AD/LDAP server\"}\n />\n \n \n ) => {\n updateField(\"ADUserNameFormat\", e.target.value);\n }}\n label=\"Username Format\"\n value={ADUserNameFormat}\n placeholder=\"uid=%s,cn=accounts,dc=myldapserver,dc=com\"\n />\n \n \n ) => {\n updateField(\"ADUserNameSearchFilter\", e.target.value);\n }}\n label=\"Username Search Filter\"\n value={ADUserNameSearchFilter}\n placeholder=\"(|(objectclass=posixAccount)(uid=%s))\"\n />\n \n \n ) => {\n updateField(\"ADGroupSearchBaseDN\", e.target.value);\n }}\n label=\"Group Search Base DN\"\n value={ADGroupSearchBaseDN}\n placeholder=\"ou=hwengg,dc=min,dc=io;ou=swengg,dc=min,dc=io\"\n />\n \n \n ) => {\n updateField(\"ADGroupSearchFilter\", e.target.value);\n }}\n label=\"Group Search Filter\"\n value={ADGroupSearchFilter}\n placeholder=\"(&(objectclass=groupOfNames)(member=%s))\"\n />\n \n \n ) => {\n updateField(\"ADGroupNameAttribute\", e.target.value);\n }}\n label=\"Group Name Attribute\"\n value={ADGroupNameAttribute}\n placeholder=\"cn\"\n />\n \n \n ) => {\n updateField(\"ADLookupBindDN\", e.target.value);\n }}\n label=\"Lookup Bind DN\"\n value={ADLookupBindDN}\n placeholder=\"cn=admin,dc=min,dc=io\"\n />\n \n \n ) => {\n updateField(\"ADLookupBindPassword\", e.target.value);\n }}\n label=\"Lookup Bind Password\"\n value={ADLookupBindPassword}\n placeholder=\"admin\"\n />\n \n \n ) => {\n updateField(\"ADUserDNSearchBaseDN\", e.target.value);\n }}\n label=\"User DN Search Base DN\"\n value={ADUserDNSearchBaseDN}\n placeholder=\"dc=min,dc=io\"\n />\n \n \n ) => {\n updateField(\"ADUserDNSearchFilter\", e.target.value);\n }}\n label=\"User DN Search Filter\"\n value={ADUserDNSearchFilter}\n placeholder=\"(uid=%s)\"\n />\n \n
\n \n List of user DNs (Distinguished Names) to be Tenant Administrators\n \n \n {inputs}\n \n
\n
\n )}\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n idpSelection: state.tenants.createTenant.fields.identityProvider.idpSelection,\n accessKeys: state.tenants.createTenant.fields.identityProvider.accessKeys,\n secretKeys: state.tenants.createTenant.fields.identityProvider.secretKeys,\n openIDConfigurationURL:\n state.tenants.createTenant.fields.identityProvider.openIDConfigurationURL,\n openIDClientID:\n state.tenants.createTenant.fields.identityProvider.openIDClientID,\n openIDSecretID:\n state.tenants.createTenant.fields.identityProvider.openIDSecretID,\n openIDCallbackURL:\n state.tenants.createTenant.fields.identityProvider.openIDCallbackURL,\n openIDClaimName:\n state.tenants.createTenant.fields.identityProvider.openIDClaimName,\n openIDScopes: state.tenants.createTenant.fields.identityProvider.openIDScopes,\n ADURL: state.tenants.createTenant.fields.identityProvider.ADURL,\n ADSkipTLS: state.tenants.createTenant.fields.identityProvider.ADSkipTLS,\n ADServerInsecure:\n state.tenants.createTenant.fields.identityProvider.ADServerInsecure,\n ADUserNameSearchFilter:\n state.tenants.createTenant.fields.identityProvider.ADUserNameSearchFilter,\n ADGroupSearchBaseDN:\n state.tenants.createTenant.fields.identityProvider.ADGroupSearchBaseDN,\n ADGroupSearchFilter:\n state.tenants.createTenant.fields.identityProvider.ADGroupSearchFilter,\n ADGroupNameAttribute:\n state.tenants.createTenant.fields.identityProvider.ADGroupNameAttribute,\n ADUserDNs: state.tenants.createTenant.fields.identityProvider.ADUserDNs,\n ADUserNameFormat:\n state.tenants.createTenant.fields.identityProvider.ADUserNameFormat,\n ADLookupBindDN:\n state.tenants.createTenant.fields.identityProvider.ADLookupBindDN,\n ADLookupBindPassword:\n state.tenants.createTenant.fields.identityProvider.ADLookupBindPassword,\n ADUserDNSearchBaseDN:\n state.tenants.createTenant.fields.identityProvider.ADUserDNSearchBaseDN,\n ADUserDNSearchFilter:\n state.tenants.createTenant.fields.identityProvider.ADUserDNSearchFilter,\n ADServerStartTLS:\n state.tenants.createTenant.fields.identityProvider.ADServerStartTLS,\n});\n\nconst connector = connect(mapState, {\n updateAddField,\n isPageValid,\n});\n\nexport default withStyles(styles)(connector(IdentityProvider));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Grid, IconButton, Paper, Typography } from \"@mui/material\";\nimport {\n createTenantCommon,\n modalBasic,\n wizardCommon,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\nimport {\n addCaCertificate,\n addFileToCaCertificates,\n addFileToKeyPair,\n addKeyPair,\n deleteCaCertificate,\n deleteKeyPair,\n isPageValid,\n updateAddField,\n} from \"../../actions\";\nimport { AppState } from \"../../../../../store\";\nimport { KeyPair } from \"../../ListTenants/utils\";\nimport FormSwitchWrapper from \"../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport FileSelector from \"../../../Common/FormComponents/FileSelector/FileSelector\";\nimport AddIcon from \"../../../../../icons/AddIcon\";\nimport RemoveIcon from \"../../../../../icons/RemoveIcon\";\n\ninterface ISecurityProps {\n classes: any;\n enableTLS: boolean;\n enableAutoCert: boolean;\n enableCustomCerts: boolean;\n minioCertificates: KeyPair[];\n caCertificates: KeyPair[];\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n addFileToCaCertificates: typeof addFileToCaCertificates;\n deleteCaCertificate: typeof deleteCaCertificate;\n addCaCertificate: typeof addCaCertificate;\n addKeyPair: typeof addKeyPair;\n addFileToKeyPair: typeof addFileToKeyPair;\n deleteKeyPair: typeof deleteKeyPair;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n minioCertificateRows: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n borderBottom: \"1px solid #EAEAEA\",\n \"&:last-child\": {\n borderBottom: 0,\n },\n \"@media (max-width: 900px)\": {\n flex: 1,\n },\n },\n fileItem: {\n marginRight: 10,\n display: \"flex\",\n \"& div label\": {\n minWidth: 50,\n },\n\n \"@media (max-width: 900px)\": {\n flexFlow: \"column\",\n },\n },\n minioCertsContainer: {\n marginBottom: 15,\n },\n minioCACertsRow: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n\n borderBottom: \"1px solid #EAEAEA\",\n \"&:last-child\": {\n borderBottom: 0,\n },\n \"@media (max-width: 900px)\": {\n flex: 1,\n\n \"& div label\": {\n minWidth: 50,\n },\n },\n },\n rowActions: {\n display: \"flex\",\n justifyContent: \"flex-end\",\n \"@media (max-width: 900px)\": {\n flex: 1,\n },\n },\n overlayAction: {\n marginLeft: 10,\n \"& svg\": {\n maxWidth: 15,\n maxHeight: 15,\n },\n \"& button\": {\n background: \"#EAEAEA\",\n },\n },\n\n ...createTenantCommon,\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst Security = ({\n classes,\n enableTLS,\n enableAutoCert,\n enableCustomCerts,\n minioCertificates,\n caCertificates,\n updateAddField,\n isPageValid,\n addFileToCaCertificates,\n deleteCaCertificate,\n addCaCertificate,\n addKeyPair,\n addFileToKeyPair,\n deleteKeyPair,\n}: ISecurityProps) => {\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n updateAddField(\"security\", field, value);\n },\n [updateAddField]\n );\n\n // Validation\n\n useEffect(() => {\n if (!enableTLS) {\n isPageValid(\"security\", true);\n return;\n }\n if (enableAutoCert) {\n isPageValid(\"security\", true);\n return;\n }\n if (enableCustomCerts) {\n isPageValid(\"security\", true);\n return;\n }\n isPageValid(\"security\", false);\n }, [enableTLS, enableAutoCert, enableCustomCerts, isPageValid]);\n\n return (\n \n
\n

Security

\n
\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"enableTLS\", checked);\n }}\n label={\"Enable TLS\"}\n />\n Enable TLS for the tenant, this is required for Encryption Configuration\n {enableTLS && (\n \n
\n
\n \n AutoCert: MinIO Operator will generate all TLS certificates\n automatically\n \n \n Custom certificates: Allow user to provide your own certificates\n \n
\n
\n )}\n
\n {enableTLS && (\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"enableAutoCert\", checked);\n }}\n label={\"Enable AutoCert\"}\n />\n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"enableCustomCerts\", checked);\n }}\n label={\"Custom Certificates\"}\n />\n \n {enableCustomCerts && (\n \n \n \n
\n \n MinIO Certificates\n \n {minioCertificates.map((keyPair: KeyPair) => (\n \n \n {\n addFileToKeyPair(\n keyPair.id,\n \"cert\",\n fileName,\n encodedValue\n );\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"tlsCert\"\n name=\"tlsCert\"\n label=\"Cert\"\n value={keyPair.cert}\n />\n {\n addFileToKeyPair(\n keyPair.id,\n \"key\",\n fileName,\n encodedValue\n );\n }}\n accept=\".key,.pem\"\n id=\"tlsKey\"\n name=\"tlsKey\"\n label=\"Key\"\n value={keyPair.key}\n />\n \n\n \n
\n \n \n \n
\n
\n {\n deleteKeyPair(keyPair.id);\n }}\n >\n \n \n
\n
\n \n ))}\n
\n
\n
\n\n \n \n
\n \n MinIO CA Certificates\n \n\n {caCertificates.map((keyPair: KeyPair) => (\n \n \n {\n addFileToCaCertificates(\n keyPair.id,\n \"cert\",\n fileName,\n encodedValue\n );\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"tlsCert\"\n name=\"tlsCert\"\n label=\"Cert\"\n value={keyPair.cert}\n />\n \n \n
\n
\n \n \n \n
\n
\n {\n deleteCaCertificate(keyPair.id);\n }}\n >\n \n \n
\n
\n
\n \n ))}\n
\n
\n
\n
\n )}\n
\n )}\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n enableTLS: state.tenants.createTenant.fields.security.enableTLS,\n enableAutoCert: state.tenants.createTenant.fields.security.enableAutoCert,\n enableCustomCerts:\n state.tenants.createTenant.fields.security.enableCustomCerts,\n minioCertificates: state.tenants.createTenant.certificates.minioCertificates,\n caCertificates: state.tenants.createTenant.certificates.caCertificates,\n});\n\nconst connector = connect(mapState, {\n updateAddField,\n isPageValid,\n addFileToCaCertificates,\n deleteCaCertificate,\n addCaCertificate,\n addKeyPair,\n addFileToKeyPair,\n deleteKeyPair,\n});\n\nexport default withStyles(styles)(connector(Security));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Paper } from \"@mui/material\";\nimport Grid from \"@mui/material/Grid\";\nimport {\n addFileClientCert,\n addFileGemaltoCa,\n addFileServerCert,\n addFileVaultCa,\n addFileVaultCert,\n isPageValid,\n updateAddField,\n} from \"../../actions\";\nimport {\n createTenantCommon,\n formFieldStyles,\n modalBasic,\n wizardCommon,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\nimport { AppState } from \"../../../../../store\";\nimport { clearValidationError } from \"../../utils\";\nimport InputBoxWrapper from \"../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport FormSwitchWrapper from \"../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport FileSelector from \"../../../Common/FormComponents/FileSelector/FileSelector\";\nimport RadioGroupSelector from \"../../../Common/FormComponents/RadioGroupSelector/RadioGroupSelector\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../utils/validationFunctions\";\nimport { KeyPair } from \"../../ListTenants/utils\";\nimport { ISecurityContext } from \"../../types\";\n\ninterface IEncryptionProps {\n classes: any;\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n addFileServerCert: typeof addFileServerCert;\n addFileClientCert: typeof addFileClientCert;\n addFileVaultCert: typeof addFileVaultCert;\n addFileVaultCa: typeof addFileVaultCa;\n addFileGemaltoCa: typeof addFileGemaltoCa;\n enableEncryption: boolean;\n encryptionType: string;\n gemaltoEndpoint: string;\n gemaltoToken: string;\n gemaltoDomain: string;\n gemaltoRetry: string;\n awsEndpoint: string;\n awsRegion: string;\n awsKMSKey: string;\n awsAccessKey: string;\n awsSecretKey: string;\n awsToken: string;\n vaultEndpoint: string;\n vaultEngine: string;\n vaultNamespace: string;\n vaultPrefix: string;\n vaultAppRoleEngine: string;\n vaultId: string;\n vaultSecret: string;\n vaultRetry: string;\n vaultPing: string;\n azureEndpoint: string;\n azureTenantID: string;\n azureClientID: string;\n azureClientSecret: string;\n gcpProjectID: string;\n gcpEndpoint: string;\n gcpClientEmail: string;\n gcpClientID: string;\n gcpPrivateKeyID: string;\n gcpPrivateKey: string;\n enableCustomCertsForKES: boolean;\n enableAutoCert: boolean;\n enableTLS: boolean;\n enableCustomCerts: boolean;\n minioCertificates: KeyPair[];\n serverCertificate: KeyPair;\n clientCertificate: KeyPair;\n vaultCertificate: KeyPair;\n vaultCA: KeyPair;\n gemaltoCA: KeyPair;\n kesSecurityContext: ISecurityContext;\n replicas: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n encryptionTypeOptions: {\n marginBottom: 15,\n },\n mutualTlsConfig: {\n marginTop: 15,\n \"& fieldset\": {\n flex: 1,\n },\n },\n rightSpacer: {\n marginRight: 15,\n },\n responsiveContainer: {\n \"@media (max-width: 900px)\": {\n display: \"flex\",\n flexFlow: \"column\",\n },\n },\n ...createTenantCommon,\n ...formFieldStyles,\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst Encryption = ({\n classes,\n updateAddField,\n isPageValid,\n addFileServerCert,\n addFileClientCert,\n addFileVaultCert,\n addFileVaultCa,\n addFileGemaltoCa,\n enableEncryption,\n enableCustomCerts,\n encryptionType,\n gemaltoEndpoint,\n gemaltoToken,\n gemaltoDomain,\n gemaltoRetry,\n awsEndpoint,\n awsRegion,\n awsKMSKey,\n awsAccessKey,\n awsSecretKey,\n awsToken,\n vaultEndpoint,\n vaultEngine,\n vaultNamespace,\n vaultPrefix,\n vaultAppRoleEngine,\n vaultId,\n vaultSecret,\n vaultRetry,\n vaultPing,\n azureEndpoint,\n azureTenantID,\n azureClientID,\n azureClientSecret,\n gcpProjectID,\n gcpEndpoint,\n gcpClientEmail,\n gcpClientID,\n gcpPrivateKeyID,\n gcpPrivateKey,\n enableCustomCertsForKES,\n enableAutoCert,\n enableTLS,\n minioCertificates,\n serverCertificate,\n clientCertificate,\n vaultCertificate,\n vaultCA,\n gemaltoCA,\n kesSecurityContext,\n replicas,\n}: IEncryptionProps) => {\n const [validationErrors, setValidationErrors] = useState({});\n\n let encryptionAvailable = false;\n if (\n enableTLS &&\n (enableAutoCert ||\n (minioCertificates &&\n minioCertificates.filter(\n (item) => item.encoded_key && item.encoded_cert\n ).length > 0))\n ) {\n encryptionAvailable = true;\n }\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n updateAddField(\"encryption\", field, value);\n },\n [updateAddField]\n );\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n // Validation\n useEffect(() => {\n let encryptionValidation: IValidation[] = [];\n\n if (enableEncryption) {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"replicas\",\n required: true,\n value: replicas,\n customValidation: parseInt(replicas) < 1,\n customValidationMessage: \"Replicas needs to be 1 or greater\",\n },\n {\n fieldKey: \"kes_securityContext_runAsUser\",\n required: true,\n value: kesSecurityContext.runAsUser,\n customValidation:\n kesSecurityContext.runAsUser === \"\" ||\n parseInt(kesSecurityContext.runAsUser) < 0,\n customValidationMessage: `runAsUser must be present and be 0 or more`,\n },\n {\n fieldKey: \"kes_securityContext_runAsGroup\",\n required: true,\n value: kesSecurityContext.runAsGroup,\n customValidation:\n kesSecurityContext.runAsGroup === \"\" ||\n parseInt(kesSecurityContext.runAsGroup) < 0,\n customValidationMessage: `runAsGroup must be present and be 0 or more`,\n },\n {\n fieldKey: \"kes_securityContext_fsGroup\",\n required: true,\n value: kesSecurityContext.fsGroup,\n customValidation:\n kesSecurityContext.fsGroup === \"\" ||\n parseInt(kesSecurityContext.fsGroup) < 0,\n customValidationMessage: `fsGroup must be present and be 0 or more`,\n },\n ];\n\n if (enableCustomCerts) {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"serverKey\",\n required: !enableAutoCert,\n value: serverCertificate.encoded_key,\n },\n {\n fieldKey: \"serverCert\",\n required: !enableAutoCert,\n value: serverCertificate.encoded_cert,\n },\n {\n fieldKey: \"clientKey\",\n required: !enableAutoCert,\n value: clientCertificate.encoded_key,\n },\n {\n fieldKey: \"clientCert\",\n required: !enableAutoCert,\n value: clientCertificate.encoded_cert,\n },\n ];\n }\n\n if (encryptionType === \"vault\") {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"vault_endpoint\",\n required: true,\n value: vaultEndpoint,\n },\n {\n fieldKey: \"vault_id\",\n required: true,\n value: vaultId,\n },\n {\n fieldKey: \"vault_secret\",\n required: true,\n value: vaultSecret,\n },\n {\n fieldKey: \"vault_ping\",\n required: false,\n value: vaultPing,\n customValidation: parseInt(vaultPing) < 0,\n customValidationMessage: \"Value needs to be 0 or greater\",\n },\n {\n fieldKey: \"vault_retry\",\n required: false,\n value: vaultRetry,\n customValidation: parseInt(vaultRetry) < 0,\n customValidationMessage: \"Value needs to be 0 or greater\",\n },\n ];\n }\n\n if (encryptionType === \"aws\") {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"aws_endpoint\",\n required: true,\n value: awsEndpoint,\n },\n {\n fieldKey: \"aws_region\",\n required: true,\n value: awsRegion,\n },\n {\n fieldKey: \"aws_accessKey\",\n required: true,\n value: awsAccessKey,\n },\n {\n fieldKey: \"aws_secretKey\",\n required: true,\n value: awsSecretKey,\n },\n ];\n }\n\n if (encryptionType === \"gemalto\") {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"gemalto_endpoint\",\n required: true,\n value: gemaltoEndpoint,\n },\n {\n fieldKey: \"gemalto_token\",\n required: true,\n value: gemaltoToken,\n },\n {\n fieldKey: \"gemalto_domain\",\n required: true,\n value: gemaltoDomain,\n },\n {\n fieldKey: \"gemalto_retry\",\n required: false,\n value: gemaltoRetry,\n customValidation: parseInt(gemaltoRetry) < 0,\n customValidationMessage: \"Value needs to be 0 or greater\",\n },\n ];\n }\n\n if (encryptionType === \"azure\") {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"azure_endpoint\",\n required: true,\n value: azureEndpoint,\n },\n {\n fieldKey: \"azure_tenant_id\",\n required: true,\n value: azureTenantID,\n },\n {\n fieldKey: \"azure_client_id\",\n required: true,\n value: azureClientID,\n },\n {\n fieldKey: \"azure_client_secret\",\n required: true,\n value: azureClientSecret,\n },\n ];\n }\n }\n\n const commonVal = commonFormValidation(encryptionValidation);\n\n isPageValid(\"encryption\", Object.keys(commonVal).length === 0);\n\n setValidationErrors(commonVal);\n }, [\n enableEncryption,\n encryptionType,\n vaultEndpoint,\n vaultEngine,\n vaultId,\n vaultSecret,\n vaultPing,\n vaultRetry,\n awsEndpoint,\n awsRegion,\n awsSecretKey,\n awsAccessKey,\n gemaltoEndpoint,\n gemaltoToken,\n gemaltoDomain,\n gemaltoRetry,\n gcpProjectID,\n gcpEndpoint,\n gcpClientEmail,\n gcpClientID,\n gcpPrivateKeyID,\n gcpPrivateKey,\n azureEndpoint,\n azureTenantID,\n azureClientID,\n azureClientSecret,\n isPageValid,\n enableAutoCert,\n enableCustomCerts,\n serverCertificate.encoded_key,\n serverCertificate.encoded_cert,\n clientCertificate.encoded_key,\n clientCertificate.encoded_cert,\n kesSecurityContext,\n replicas,\n ]);\n\n return (\n \n
\n

Encryption

\n \n How would you like to encrypt the information at rest.\n \n
\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"enableEncryption\", checked);\n }}\n label={\"Enable Server Side Encryption\"}\n disabled={!encryptionAvailable}\n />\n \n {enableEncryption && (\n \n \n {\n updateField(\"encryptionType\", e.target.value);\n }}\n selectorOptions={[\n { label: \"Vault\", value: \"vault\" },\n { label: \"AWS\", value: \"aws\" },\n { label: \"Gemalto\", value: \"gemalto\" },\n { label: \"GCP\", value: \"gcp\" },\n { label: \"Azure\", value: \"azure\" },\n ]}\n />\n \n {encryptionType === \"vault\" && (\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"enableCustomCertsForKES\", checked);\n }}\n label={\"Custom Certificates\"}\n disabled={!enableAutoCert}\n />\n \n {(enableCustomCertsForKES || !enableAutoCert) && (\n \n \n \n
\n \n Encryption Service Certificates\n \n {\n addFileServerCert(\"key\", fileName, encodedValue);\n cleanValidation(\"serverKey\");\n }}\n accept=\".key,.pem\"\n id=\"serverKey\"\n name=\"serverKey\"\n label=\"Key\"\n error={validationErrors[\"serverKey\"] || \"\"}\n value={serverCertificate.key}\n required={!enableAutoCert}\n />\n {\n addFileServerCert(\"cert\", fileName, encodedValue);\n cleanValidation(\"serverCert\");\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"serverCert\"\n name=\"serverCert\"\n label=\"Cert\"\n error={validationErrors[\"serverCert\"] || \"\"}\n value={serverCertificate.cert}\n required={!enableAutoCert}\n />\n
\n
\n
\n\n \n \n
\n \n Mutual TLS authentication\n \n {\n addFileClientCert(\"key\", fileName, encodedValue);\n cleanValidation(\"clientKey\");\n }}\n accept=\".key,.pem\"\n id=\"clientKey\"\n name=\"clientKey\"\n label=\"Key\"\n error={validationErrors[\"clientKey\"] || \"\"}\n value={clientCertificate.key}\n required={!enableAutoCert}\n />\n {\n addFileClientCert(\"cert\", fileName, encodedValue);\n cleanValidation(\"clientCert\");\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"clientCert\"\n name=\"clientCert\"\n label=\"Cert\"\n error={validationErrors[\"clientCert\"] || \"\"}\n value={clientCertificate.cert}\n required={!enableAutoCert}\n />\n
\n
\n
\n
\n )}\n \n ) => {\n updateField(\"vaultEndpoint\", e.target.value);\n cleanValidation(\"vault_endpoint\");\n }}\n label=\"Endpoint\"\n value={vaultEndpoint}\n error={validationErrors[\"vault_endpoint\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"vaultEngine\", e.target.value);\n cleanValidation(\"vault_engine\");\n }}\n label=\"Engine\"\n value={vaultEngine}\n />\n \n \n ) => {\n updateField(\"vaultNamespace\", e.target.value);\n }}\n label=\"Namespace\"\n value={vaultNamespace}\n />\n \n \n ) => {\n updateField(\"vaultPrefix\", e.target.value);\n }}\n label=\"Prefix\"\n value={vaultPrefix}\n />\n \n\n \n
\n App Role\n \n ) => {\n updateField(\"vaultAppRoleEngine\", e.target.value);\n }}\n label=\"Engine\"\n value={vaultAppRoleEngine}\n />\n \n \n ) => {\n updateField(\"vaultId\", e.target.value);\n cleanValidation(\"vault_id\");\n }}\n label=\"AppRole ID\"\n value={vaultId}\n error={validationErrors[\"vault_id\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"vaultSecret\", e.target.value);\n cleanValidation(\"vault_secret\");\n }}\n label=\"AppRole Secret\"\n value={vaultSecret}\n error={validationErrors[\"vault_secret\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"vaultRetry\", e.target.value);\n cleanValidation(\"vault_retry\");\n }}\n label=\"Retry (Seconds)\"\n value={vaultRetry}\n error={validationErrors[\"vault_retry\"] || \"\"}\n />\n \n
\n
\n\n \n
\n \n Mutual TLS authentication (optional)\n \n {\n addFileVaultCert(\"key\", fileName, encodedValue);\n cleanValidation(\"vault_key\");\n }}\n accept=\".key,.pem\"\n id=\"vault_key\"\n name=\"vault_key\"\n label=\"Key\"\n value={vaultCertificate.key}\n />\n {\n addFileVaultCert(\"cert\", fileName, encodedValue);\n cleanValidation(\"vault_cert\");\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"vault_cert\"\n name=\"vault_cert\"\n label=\"Cert\"\n value={vaultCertificate.cert}\n />\n {\n addFileVaultCa(fileName, encodedValue);\n cleanValidation(\"vault_ca\");\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"vault_ca\"\n name=\"vault_ca\"\n label=\"CA\"\n value={vaultCA.cert}\n />\n
\n
\n \n
\n Status\n ) => {\n updateField(\"vaultPing\", e.target.value);\n cleanValidation(\"vault_ping\");\n }}\n label=\"Ping (Seconds)\"\n value={vaultPing}\n error={validationErrors[\"vault_ping\"] || \"\"}\n />\n
\n \n
\n )}\n {encryptionType === \"azure\" && (\n \n \n ) => {\n updateField(\"azureEndpoint\", e.target.value);\n cleanValidation(\"azure_endpoint\");\n }}\n label=\"Endpoint\"\n value={azureEndpoint}\n error={validationErrors[\"azure_endpoint\"] || \"\"}\n />\n \n \n
\n \n Credentials\n \n \n ) => {\n updateField(\"azureTenantID\", e.target.value);\n cleanValidation(\"azure_tenant_id\");\n }}\n label=\"Tenant ID\"\n value={azureTenantID}\n error={validationErrors[\"azure_tenant_id\"] || \"\"}\n />\n \n \n ) => {\n updateField(\"azureClientID\", e.target.value);\n cleanValidation(\"azure_client_id\");\n }}\n label=\"Client ID\"\n value={azureClientID}\n error={validationErrors[\"azure_client_id\"] || \"\"}\n />\n \n \n ) => {\n updateField(\"azureClientSecret\", e.target.value);\n cleanValidation(\"azure_client_secret\");\n }}\n label=\"Client Secret\"\n value={azureClientSecret}\n error={validationErrors[\"azure_client_secret\"] || \"\"}\n />\n \n
\n
\n
\n )}\n {encryptionType === \"gcp\" && (\n \n \n ) => {\n updateField(\"gcpProjectID\", e.target.value);\n }}\n label=\"Project ID\"\n value={gcpProjectID}\n />\n \n \n ) => {\n updateField(\"gcpEndpoint\", e.target.value);\n }}\n label=\"Endpoint\"\n value={gcpEndpoint}\n />\n \n \n
\n \n Credentials\n \n \n ) => {\n updateField(\"gcpClientEmail\", e.target.value);\n }}\n label=\"Client Email\"\n value={gcpClientEmail}\n />\n \n \n ) => {\n updateField(\"gcpClientID\", e.target.value);\n }}\n label=\"Client ID\"\n value={gcpClientID}\n />\n \n \n ) => {\n updateField(\"gcpPrivateKeyID\", e.target.value);\n }}\n label=\"Private Key ID\"\n value={gcpPrivateKeyID}\n />\n \n \n ) => {\n updateField(\"gcpPrivateKey\", e.target.value);\n }}\n label=\"Private Key\"\n value={gcpPrivateKey}\n />\n \n
\n
\n
\n )}\n {encryptionType === \"aws\" && (\n \n \n ) => {\n updateField(\"awsEndpoint\", e.target.value);\n cleanValidation(\"aws_endpoint\");\n }}\n label=\"Endpoint\"\n value={awsEndpoint}\n error={validationErrors[\"aws_endpoint\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"awsRegion\", e.target.value);\n cleanValidation(\"aws_region\");\n }}\n label=\"Region\"\n value={awsRegion}\n error={validationErrors[\"aws_region\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"awsKMSKey\", e.target.value);\n }}\n label=\"KMS Key\"\n value={awsKMSKey}\n />\n \n \n
\n \n Credentials\n \n \n ) => {\n updateField(\"awsAccessKey\", e.target.value);\n cleanValidation(\"aws_accessKey\");\n }}\n label=\"Access Key\"\n value={awsAccessKey}\n error={validationErrors[\"aws_accessKey\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"awsSecretKey\", e.target.value);\n cleanValidation(\"aws_secretKey\");\n }}\n label=\"Secret Key\"\n value={awsSecretKey}\n error={validationErrors[\"aws_secretKey\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"awsToken\", e.target.value);\n }}\n label=\"Token\"\n value={awsToken}\n />\n \n
\n
\n
\n )}\n {encryptionType === \"gemalto\" && (\n \n \n ) => {\n updateField(\"gemaltoEndpoint\", e.target.value);\n cleanValidation(\"gemalto_endpoint\");\n }}\n label=\"Endpoint\"\n value={gemaltoEndpoint}\n error={validationErrors[\"gemalto_endpoint\"] || \"\"}\n required\n />\n \n \n
\n \n Credentials\n \n \n ) => {\n updateField(\"gemaltoToken\", e.target.value);\n cleanValidation(\"gemalto_token\");\n }}\n label=\"Token\"\n value={gemaltoToken}\n error={validationErrors[\"gemalto_token\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"gemaltoDomain\", e.target.value);\n cleanValidation(\"gemalto_domain\");\n }}\n label=\"Domain\"\n value={gemaltoDomain}\n error={validationErrors[\"gemalto_domain\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"gemaltoRetry\", e.target.value);\n cleanValidation(\"gemalto_retry\");\n }}\n label=\"Retry (seconds)\"\n value={gemaltoRetry}\n error={validationErrors[\"gemalto_retry\"] || \"\"}\n />\n \n
\n \n \n
\n \n Custom CA Root certificate verification\n \n\n {\n addFileGemaltoCa(fileName, encodedValue);\n cleanValidation(\"gemalto_ca\");\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"gemalto_ca\"\n name=\"gemalto_ca\"\n label=\"CA\"\n value={gemaltoCA.cert}\n />\n
\n \n
\n )}\n
\n

Additional Configurations

\n
\n \n \n ) => {\n updateField(\"replicas\", e.target.value);\n cleanValidation(\"replicas\");\n }}\n label=\"Replicas\"\n value={replicas}\n required\n error={validationErrors[\"replicas\"] || \"\"}\n />\n \n\n
\n \n SecurityContext for KES pods\n \n \n \n \n ) => {\n updateField(\"kesSecurityContext\", {\n ...kesSecurityContext,\n runAsUser: e.target.value,\n });\n cleanValidation(\"kes_securityContext_runAsUser\");\n }}\n label=\"Run As User\"\n value={kesSecurityContext.runAsUser}\n required\n error={\n validationErrors[\"kes_securityContext_runAsUser\"] || \"\"\n }\n min=\"0\"\n />\n \n \n ) => {\n updateField(\"kesSecurityContext\", {\n ...kesSecurityContext,\n runAsGroup: e.target.value,\n });\n cleanValidation(\"kes_securityContext_runAsGroup\");\n }}\n label=\"Run As Group\"\n value={kesSecurityContext.runAsGroup}\n required\n error={\n validationErrors[\"kes_securityContext_runAsGroup\"] || \"\"\n }\n min=\"0\"\n />\n \n \n ) => {\n updateField(\"kesSecurityContext\", {\n ...kesSecurityContext,\n fsGroup: e.target.value,\n });\n cleanValidation(\"kes_securityContext_fsGroup\");\n }}\n label=\"FsGroup\"\n value={kesSecurityContext.fsGroup}\n required\n error={\n validationErrors[\"kes_securityContext_fsGroup\"] || \"\"\n }\n min=\"0\"\n />\n \n \n \n
\n \n
\n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"kesSecurityContext\", {\n ...kesSecurityContext,\n runAsNonRoot: checked,\n });\n }}\n label={\"Do not run as Root\"}\n />\n
\n
\n
\n
\n
\n )}\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n replicas: state.tenants.createTenant.fields.encryption.replicas,\n enableEncryption:\n state.tenants.createTenant.fields.encryption.enableEncryption,\n encryptionType: state.tenants.createTenant.fields.encryption.encryptionType,\n gemaltoEndpoint: state.tenants.createTenant.fields.encryption.gemaltoEndpoint,\n gemaltoToken: state.tenants.createTenant.fields.encryption.gemaltoToken,\n gemaltoDomain: state.tenants.createTenant.fields.encryption.gemaltoDomain,\n gemaltoRetry: state.tenants.createTenant.fields.encryption.gemaltoRetry,\n awsEndpoint: state.tenants.createTenant.fields.encryption.awsEndpoint,\n awsRegion: state.tenants.createTenant.fields.encryption.awsRegion,\n awsKMSKey: state.tenants.createTenant.fields.encryption.awsKMSKey,\n awsAccessKey: state.tenants.createTenant.fields.encryption.awsAccessKey,\n awsSecretKey: state.tenants.createTenant.fields.encryption.awsSecretKey,\n awsToken: state.tenants.createTenant.fields.encryption.awsToken,\n vaultEndpoint: state.tenants.createTenant.fields.encryption.vaultEndpoint,\n vaultEngine: state.tenants.createTenant.fields.encryption.vaultEngine,\n vaultNamespace: state.tenants.createTenant.fields.encryption.vaultNamespace,\n vaultPrefix: state.tenants.createTenant.fields.encryption.vaultPrefix,\n vaultAppRoleEngine:\n state.tenants.createTenant.fields.encryption.vaultAppRoleEngine,\n vaultId: state.tenants.createTenant.fields.encryption.vaultId,\n vaultSecret: state.tenants.createTenant.fields.encryption.vaultSecret,\n vaultRetry: state.tenants.createTenant.fields.encryption.vaultRetry,\n vaultPing: state.tenants.createTenant.fields.encryption.vaultPing,\n azureEndpoint: state.tenants.createTenant.fields.encryption.azureEndpoint,\n azureTenantID: state.tenants.createTenant.fields.encryption.azureTenantID,\n azureClientID: state.tenants.createTenant.fields.encryption.azureClientID,\n azureClientSecret:\n state.tenants.createTenant.fields.encryption.azureClientSecret,\n gcpProjectID: state.tenants.createTenant.fields.encryption.gcpProjectID,\n gcpEndpoint: state.tenants.createTenant.fields.encryption.gcpEndpoint,\n gcpClientEmail: state.tenants.createTenant.fields.encryption.gcpClientEmail,\n gcpClientID: state.tenants.createTenant.fields.encryption.gcpClientID,\n gcpPrivateKeyID: state.tenants.createTenant.fields.encryption.gcpPrivateKeyID,\n gcpPrivateKey: state.tenants.createTenant.fields.encryption.gcpPrivateKey,\n enableCustomCertsForKES:\n state.tenants.createTenant.fields.encryption.enableCustomCertsForKES,\n enableAutoCert: state.tenants.createTenant.fields.security.enableAutoCert,\n enableTLS: state.tenants.createTenant.fields.security.enableTLS,\n minioCertificates: state.tenants.createTenant.certificates.minioCertificates,\n serverCertificate: state.tenants.createTenant.certificates.serverCertificate,\n clientCertificate: state.tenants.createTenant.certificates.clientCertificate,\n vaultCertificate: state.tenants.createTenant.certificates.vaultCertificate,\n vaultCA: state.tenants.createTenant.certificates.vaultCA,\n gemaltoCA: state.tenants.createTenant.certificates.gemaltoCA,\n enableCustomCerts:\n state.tenants.createTenant.fields.security.enableCustomCerts,\n kesSecurityContext:\n state.tenants.createTenant.fields.encryption.kesSecurityContext,\n});\n\nconst connector = connect(mapState, {\n updateAddField,\n isPageValid,\n addFileServerCert,\n addFileClientCert,\n addFileVaultCert,\n addFileVaultCa,\n addFileGemaltoCa,\n});\n\nexport default withStyles(styles)(connector(Encryption));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Grid, IconButton, Paper, SelectChangeEvent } from \"@mui/material\";\nimport { AppState } from \"../../../../../store\";\nimport { isPageValid, setKeyValuePairs, updateAddField } from \"../../actions\";\nimport { setModalErrorSnackMessage } from \"../../../../../actions\";\nimport {\n modalBasic,\n wizardCommon,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../utils/validationFunctions\";\nimport { ErrorResponseHandler } from \"../../../../../common/types\";\nimport { LabelKeyPair } from \"../../types\";\nimport RadioGroupSelector from \"../../../Common/FormComponents/RadioGroupSelector/RadioGroupSelector\";\nimport FormSwitchWrapper from \"../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport api from \"../../../../../common/api\";\nimport InputBoxWrapper from \"../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport AddIcon from \"../../../../../icons/AddIcon\";\nimport RemoveIcon from \"../../../../../icons/RemoveIcon\";\nimport SelectWrapper from \"../../../Common/FormComponents/SelectWrapper/SelectWrapper\";\n\ninterface IAffinityProps {\n classes: any;\n podAffinity: string;\n nodeSelectorLabels: string;\n withPodAntiAffinity: boolean;\n keyValuePairs: LabelKeyPair[];\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n setKeyValuePairs: typeof setKeyValuePairs;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n overlayAction: {\n marginLeft: 10,\n \"& svg\": {\n maxWidth: 15,\n maxHeight: 15,\n },\n \"& button\": {\n background: \"#EAEAEA\",\n },\n },\n affinityConfigField: {\n display: \"flex\",\n },\n affinityFieldLabel: {\n display: \"flex\",\n flexFlow: \"column\",\n flex: 1,\n },\n radioField: {\n display: \"flex\",\n alignItems: \"flex-start\",\n marginTop: 10,\n \"& div:first-child\": {\n display: \"flex\",\n flexFlow: \"column\",\n alignItems: \"baseline\",\n textAlign: \"left !important\",\n },\n },\n affinityLabelKey: {\n \"& div:first-child\": {\n marginBottom: 0,\n },\n },\n affinityLabelValue: {\n marginLeft: 10,\n \"& div:first-child\": {\n marginBottom: 0,\n },\n },\n rowActions: {\n display: \"flex\",\n alignItems: \"center\",\n },\n fieldContainer: {\n marginBottom: 0,\n },\n affinityRow: {\n marginBottom: 10,\n display: \"flex\",\n },\n ...modalBasic,\n ...wizardCommon,\n });\n\ninterface OptionPair {\n label: string;\n value: string;\n}\n\nconst Affinity = ({\n classes,\n podAffinity,\n nodeSelectorLabels,\n withPodAntiAffinity,\n setModalErrorSnackMessage,\n updateAddField,\n keyValuePairs,\n setKeyValuePairs,\n isPageValid,\n}: IAffinityProps) => {\n const [validationErrors, setValidationErrors] = useState({});\n const [loading, setLoading] = useState(true);\n const [keyValueMap, setKeyValueMap] = useState<{ [key: string]: string[] }>(\n {}\n );\n const [keyOptions, setKeyOptions] = useState([]);\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n updateAddField(\"affinity\", field, value);\n },\n [updateAddField]\n );\n\n useEffect(() => {\n if (loading) {\n api\n .invoke(\"GET\", `/api/v1/nodes/labels`)\n .then((res: { [key: string]: string[] }) => {\n setLoading(false);\n setKeyValueMap(res);\n let keys: OptionPair[] = [];\n for (let k in res) {\n keys.push({\n label: k,\n value: k,\n });\n }\n setKeyOptions(keys);\n })\n .catch((err: ErrorResponseHandler) => {\n setLoading(false);\n setModalErrorSnackMessage(err);\n setKeyValueMap({});\n });\n }\n }, [setModalErrorSnackMessage, loading]);\n\n useEffect(() => {\n if (keyValuePairs) {\n const vlr = keyValuePairs\n .filter((kvp) => kvp.key !== \"\")\n .map((kvp) => `${kvp.key}=${kvp.value}`)\n .filter((kvs, i, a) => a.indexOf(kvs) === i);\n const vl = vlr.join(\"&\");\n updateField(\"nodeSelectorLabels\", vl);\n }\n }, [keyValuePairs, updateField]);\n\n // Validation\n useEffect(() => {\n let customAccountValidation: IValidation[] = [];\n\n if (podAffinity === \"nodeSelector\") {\n let valid = true;\n\n const splittedLabels = nodeSelectorLabels.split(\"&\");\n\n if (splittedLabels.length === 1 && splittedLabels[0] === \"\") {\n valid = false;\n }\n\n splittedLabels.forEach((item: string, index: number) => {\n const splitItem = item.split(\"=\");\n\n if (splitItem.length !== 2) {\n valid = false;\n }\n\n if (index + 1 !== splittedLabels.length) {\n if (splitItem[0] === \"\" || splitItem[1] === \"\") {\n valid = false;\n }\n }\n });\n\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"labels\",\n required: true,\n value: nodeSelectorLabels,\n customValidation: !valid,\n customValidationMessage:\n \"You need to add at least one label key-pair\",\n },\n ];\n }\n\n const commonVal = commonFormValidation(customAccountValidation);\n\n isPageValid(\"affinity\", Object.keys(commonVal).length === 0);\n\n setValidationErrors(commonVal);\n }, [isPageValid, podAffinity, nodeSelectorLabels]);\n\n return (\n \n
\n

Pod Placement

\n \n Configure how pods will be assigned to nodes\n \n
\n \n \n
Type
\n \n MinIO supports multiple configurations for Pod Affinity\n \n \n {\n updateField(\"podAffinity\", e.target.value);\n }}\n selectorOptions={[\n { label: \"None\", value: \"none\" },\n { label: \"Default (Pod Anti-Affinnity)\", value: \"default\" },\n { label: \"Node Selector\", value: \"nodeSelector\" },\n ]}\n />\n \n
\n
\n {podAffinity === \"nodeSelector\" && (\n \n
\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"withPodAntiAffinity\", checked);\n }}\n label={\"With Pod Anti-Affinity\"}\n />\n \n \n

Labels

\n {validationErrors[\"labels\"]}\n \n {keyValuePairs &&\n keyValuePairs.map((kvp, i) => {\n return (\n \n \n {keyOptions.length > 0 && (\n ) => {\n const newKey = e.target.value as string;\n const arrCp: LabelKeyPair[] = Object.assign(\n [],\n keyValuePairs\n );\n\n arrCp[i].key = e.target.value as string;\n arrCp[i].value = keyValueMap[newKey][0];\n setKeyValuePairs(arrCp);\n }}\n id=\"select-access-policy\"\n name=\"select-access-policy\"\n label={\"\"}\n value={kvp.key}\n options={keyOptions}\n />\n )}\n {keyOptions.length === 0 && (\n {\n const arrCp: LabelKeyPair[] = Object.assign(\n [],\n keyValuePairs\n );\n arrCp[i].key = e.target.value;\n setKeyValuePairs(arrCp);\n }}\n index={i}\n placeholder={\"Key\"}\n />\n )}\n \n \n {keyOptions.length > 0 && (\n ) => {\n const arrCp: LabelKeyPair[] = Object.assign(\n [],\n keyValuePairs\n );\n arrCp[i].value = e.target.value as string;\n setKeyValuePairs(arrCp);\n }}\n id=\"select-access-policy\"\n name=\"select-access-policy\"\n label={\"\"}\n value={kvp.value}\n options={\n keyValueMap[kvp.key]\n ? keyValueMap[kvp.key].map((v) => {\n return { label: v, value: v };\n })\n : []\n }\n />\n )}\n {keyOptions.length === 0 && (\n {\n const arrCp: LabelKeyPair[] = Object.assign(\n [],\n keyValuePairs\n );\n arrCp[i].value = e.target.value;\n setKeyValuePairs(arrCp);\n }}\n index={i}\n placeholder={\"value\"}\n />\n )}\n \n \n
\n {\n const arrCp = Object.assign([], keyValuePairs);\n if (keyOptions.length > 0) {\n arrCp.push({\n key: keyOptions[0].value,\n value: keyValueMap[keyOptions[0].value][0],\n });\n } else {\n arrCp.push({ key: \"\", value: \"\" });\n }\n\n setKeyValuePairs(arrCp);\n }}\n >\n \n \n
\n {keyValuePairs.length > 1 && (\n
\n {\n const arrCp = keyValuePairs.filter(\n (item, index) => index !== i\n );\n setKeyValuePairs(arrCp);\n }}\n >\n \n \n
\n )}\n
\n
\n );\n })}\n
\n \n
\n )}\n
\n );\n};\n\nconst mapState = (state: AppState) => {\n const createTenant = state.tenants.createTenant;\n\n return {\n podAffinity: createTenant.fields.affinity.podAffinity,\n nodeSelectorLabels: createTenant.fields.affinity.nodeSelectorLabels,\n withPodAntiAffinity: createTenant.fields.affinity.withPodAntiAffinity,\n keyValuePairs: createTenant.nodeSelectorPairs,\n };\n};\n\nconst connector = connect(mapState, {\n setModalErrorSnackMessage,\n updateAddField,\n isPageValid,\n setKeyValuePairs,\n});\n\nexport default withStyles(styles)(connector(Affinity));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Grid, Paper } from \"@mui/material\";\nimport {\n formFieldStyles,\n modalBasic,\n wizardCommon,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\nimport { isPageValid, updateAddField } from \"../../actions\";\nimport { AppState } from \"../../../../../store\";\nimport { clearValidationError } from \"../../utils\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../utils/validationFunctions\";\nimport FormSwitchWrapper from \"../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport InputBoxWrapper from \"../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\n\ninterface IImagesProps {\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n storageClasses: any;\n classes: any;\n customImage: boolean;\n imageName: string;\n customDockerhub: boolean;\n imageRegistry: string;\n imageRegistryUsername: string;\n imageRegistryPassword: string;\n exposeMinIO: boolean;\n exposeConsole: boolean;\n prometheusCustom: boolean;\n tenantCustom: boolean;\n logSearchCustom: boolean;\n logSearchVolumeSize: string;\n logSearchSizeFactor: string;\n prometheusVolumeSize: string;\n prometheusSizeFactor: string;\n logSearchSelectedStorageClass: string;\n logSearchImage: string;\n kesImage: string;\n logSearchPostgresImage: string;\n logSearchPostgresInitImage: string;\n prometheusSelectedStorageClass: string;\n prometheusImage: string;\n prometheusSidecarImage: string;\n prometheusInitImage: string;\n selectedStorageClass: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...formFieldStyles,\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst Images = ({\n classes,\n storageClasses,\n customImage,\n imageName,\n customDockerhub,\n imageRegistry,\n imageRegistryUsername,\n imageRegistryPassword,\n exposeMinIO,\n exposeConsole,\n prometheusCustom,\n tenantCustom,\n logSearchCustom,\n logSearchVolumeSize,\n logSearchSizeFactor,\n logSearchImage,\n kesImage,\n logSearchPostgresImage,\n logSearchPostgresInitImage,\n prometheusVolumeSize,\n prometheusSizeFactor,\n logSearchSelectedStorageClass,\n prometheusSelectedStorageClass,\n prometheusImage,\n prometheusSidecarImage,\n prometheusInitImage,\n updateAddField,\n isPageValid,\n selectedStorageClass,\n}: IImagesProps) => {\n const [validationErrors, setValidationErrors] = useState({});\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n updateAddField(\"configure\", field, value);\n },\n [updateAddField]\n );\n\n // Validation\n useEffect(() => {\n let customAccountValidation: IValidation[] = [];\n\n if (prometheusCustom) {\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"prometheus_storage_class\",\n required: true,\n value: prometheusSelectedStorageClass,\n customValidation: prometheusSelectedStorageClass === \"\",\n customValidationMessage: \"Field cannot be empty\",\n },\n {\n fieldKey: \"prometheus_volume_size\",\n required: true,\n value: prometheusVolumeSize,\n customValidation:\n prometheusVolumeSize === \"\" || parseInt(prometheusVolumeSize) <= 0,\n customValidationMessage: `Volume size must be present and be greatter than 0`,\n },\n ];\n }\n if (logSearchCustom) {\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"log_search_storage_class\",\n required: true,\n value: logSearchSelectedStorageClass,\n customValidation: logSearchSelectedStorageClass === \"\",\n customValidationMessage: \"Field cannot be empty\",\n },\n {\n fieldKey: \"log_search_volume_size\",\n required: true,\n value: logSearchVolumeSize,\n customValidation:\n logSearchVolumeSize === \"\" || parseInt(logSearchVolumeSize) <= 0,\n customValidationMessage: `Volume size must be present and be greatter than 0`,\n },\n ];\n }\n\n if (customImage) {\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"image\",\n required: false,\n value: imageName,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage: \"Format must be of form: 'minio/minio:VERSION'\",\n },\n {\n fieldKey: \"logSearchImage\",\n required: false,\n value: logSearchImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage:\n \"Format must be of form: 'minio/logsearchapi:VERSION'\",\n },\n {\n fieldKey: \"kesImage\",\n required: false,\n value: kesImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage: \"Format must be of form: 'minio/kes:VERSION'\",\n },\n {\n fieldKey: \"logSearchPostgresImage\",\n required: false,\n value: logSearchPostgresImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage:\n \"Format must be of form: 'library/postgres:VERSION'\",\n },\n {\n fieldKey: \"logSearchPostgresInitImage\",\n required: false,\n value: logSearchPostgresInitImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage:\n \"Format must be of form: 'library/busybox:VERSION'\",\n },\n {\n fieldKey: \"prometheusImage\",\n required: false,\n value: prometheusImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage:\n \"Format must be of form: 'minio/prometheus:VERSION'\",\n },\n {\n fieldKey: \"prometheusSidecarImage\",\n required: false,\n value: prometheusSidecarImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage:\n \"Format must be of form: 'project/container:VERSION'\",\n },\n {\n fieldKey: \"prometheusInitImage\",\n required: false,\n value: prometheusInitImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage:\n \"Format must be of form: 'library/busybox:VERSION'\",\n },\n ];\n if (customDockerhub) {\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"registry\",\n required: true,\n value: imageRegistry,\n },\n {\n fieldKey: \"registryUsername\",\n required: true,\n value: imageRegistryUsername,\n },\n {\n fieldKey: \"registryPassword\",\n required: true,\n value: imageRegistryPassword,\n },\n ];\n }\n }\n\n const commonVal = commonFormValidation(customAccountValidation);\n\n isPageValid(\"configure\", Object.keys(commonVal).length === 0);\n\n setValidationErrors(commonVal);\n }, [\n customImage,\n imageName,\n logSearchImage,\n kesImage,\n logSearchPostgresImage,\n logSearchPostgresInitImage,\n prometheusImage,\n prometheusSidecarImage,\n prometheusInitImage,\n customDockerhub,\n imageRegistry,\n imageRegistryUsername,\n imageRegistryPassword,\n isPageValid,\n prometheusCustom,\n tenantCustom,\n logSearchCustom,\n prometheusSelectedStorageClass,\n prometheusVolumeSize,\n logSearchSelectedStorageClass,\n logSearchVolumeSize,\n ]);\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n return (\n \n
\n

Container Images

\n \n Images used by the Tenant Deployment\n \n
\n\n \n \n ) => {\n updateField(\"imageName\", e.target.value);\n cleanValidation(\"image\");\n }}\n label=\"MinIO's Image\"\n value={imageName}\n error={validationErrors[\"image\"] || \"\"}\n placeholder=\"E.g. minio/minio:RELEASE.2022-01-08T03-11-54Z\"\n />\n \n \n ) => {\n updateField(\"logSearchImage\", e.target.value);\n cleanValidation(\"logSearchImage\");\n }}\n label=\"Log Search API's Image\"\n value={logSearchImage}\n error={validationErrors[\"logSearchImage\"] || \"\"}\n placeholder=\"E.g. minio/logsearchapi:v4.1.1\"\n />\n \n \n ) => {\n updateField(\"kesImage\", e.target.value);\n cleanValidation(\"kesImage\");\n }}\n label=\"KES Image\"\n value={kesImage}\n error={validationErrors[\"kesImage\"] || \"\"}\n placeholder=\"E.g. minio/kes:v0.14.0\"\n />\n \n \n ) => {\n updateField(\"logSearchPostgresImage\", e.target.value);\n cleanValidation(\"logSearchPostgresImage\");\n }}\n label=\"Log Search Postgres's Image\"\n value={logSearchPostgresImage}\n error={validationErrors[\"logSearchPostgresImage\"] || \"\"}\n placeholder=\"E.g. library/postgres:13\"\n />\n \n \n ) => {\n updateField(\"logSearchPostgresInitImage\", e.target.value);\n cleanValidation(\"logSearchPostgresInitImage\");\n }}\n label=\"Log Search Postgres's Init Image\"\n value={logSearchPostgresInitImage}\n error={validationErrors[\"logSearchPostgresInitImage\"] || \"\"}\n placeholder=\"E.g. library/busybox:1.33.1\"\n />\n \n \n ) => {\n updateField(\"prometheusImage\", e.target.value);\n cleanValidation(\"prometheusImage\");\n }}\n label=\"Prometheus Image\"\n value={prometheusImage}\n error={validationErrors[\"prometheusImage\"] || \"\"}\n placeholder=\"E.g. quay.io/prometheus/prometheus:latest\"\n />\n \n \n ) => {\n updateField(\"prometheusSidecarImage\", e.target.value);\n cleanValidation(\"prometheusSidecarImage\");\n }}\n label=\"Prometheus Sidecar Image\"\n value={prometheusSidecarImage}\n error={validationErrors[\"prometheusSidecarImage\"] || \"\"}\n placeholder=\"E.g. quay.io/prometheus/prometheus:latest\"\n />\n \n \n ) => {\n updateField(\"prometheusInitImage\", e.target.value);\n cleanValidation(\"prometheusInitImage\");\n }}\n label=\"Prometheus Init Image\"\n value={prometheusInitImage}\n error={validationErrors[\"prometheusInitImage\"] || \"\"}\n placeholder=\"E.g. quay.io/prometheus/prometheus:latest\"\n />\n \n \n\n {customImage && (\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"customDockerhub\", checked);\n }}\n label={\"Set/Update Image Registry\"}\n />\n \n \n )}\n {customDockerhub && (\n \n \n ) => {\n updateField(\"imageRegistry\", e.target.value);\n }}\n label=\"Endpoint\"\n value={imageRegistry}\n error={validationErrors[\"registry\"] || \"\"}\n placeholder=\"E.g. https://index.docker.io/v1/\"\n required\n />\n \n \n ) => {\n updateField(\"imageRegistryUsername\", e.target.value);\n }}\n label=\"Username\"\n value={imageRegistryUsername}\n error={validationErrors[\"registryUsername\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"imageRegistryPassword\", e.target.value);\n }}\n label=\"Password\"\n value={imageRegistryPassword}\n error={validationErrors[\"registryPassword\"] || \"\"}\n required\n />\n \n \n )}\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n storageClasses: state.tenants.createTenant.storageClasses,\n customImage: state.tenants.createTenant.fields.configure.customImage,\n imageName: state.tenants.createTenant.fields.configure.imageName,\n customDockerhub: state.tenants.createTenant.fields.configure.customDockerhub,\n imageRegistry: state.tenants.createTenant.fields.configure.imageRegistry,\n imageRegistryUsername:\n state.tenants.createTenant.fields.configure.imageRegistryUsername,\n imageRegistryPassword:\n state.tenants.createTenant.fields.configure.imageRegistryPassword,\n exposeMinIO: state.tenants.createTenant.fields.configure.exposeMinIO,\n exposeConsole: state.tenants.createTenant.fields.configure.exposeConsole,\n prometheusCustom:\n state.tenants.createTenant.fields.configure.prometheusCustom,\n tenantCustom: state.tenants.createTenant.fields.configure.tenantCustom,\n logSearchCustom: state.tenants.createTenant.fields.configure.logSearchCustom,\n logSearchVolumeSize:\n state.tenants.createTenant.fields.configure.logSearchVolumeSize,\n logSearchSizeFactor:\n state.tenants.createTenant.fields.configure.logSearchSizeFactor,\n prometheusVolumeSize:\n state.tenants.createTenant.fields.configure.prometheusVolumeSize,\n prometheusSizeFactor:\n state.tenants.createTenant.fields.configure.prometheusSizeFactor,\n logSearchSelectedStorageClass:\n state.tenants.createTenant.fields.configure.logSearchSelectedStorageClass,\n logSearchImage: state.tenants.createTenant.fields.configure.logSearchImage,\n kesImage: state.tenants.createTenant.fields.configure.kesImage,\n logSearchPostgresImage:\n state.tenants.createTenant.fields.configure.logSearchPostgresImage,\n logSearchPostgresInitImage:\n state.tenants.createTenant.fields.configure.logSearchPostgresInitImage,\n prometheusSelectedStorageClass:\n state.tenants.createTenant.fields.configure.prometheusSelectedStorageClass,\n prometheusImage: state.tenants.createTenant.fields.configure.prometheusImage,\n prometheusSidecarImage:\n state.tenants.createTenant.fields.configure.prometheusSidecarImage,\n prometheusInitImage:\n state.tenants.createTenant.fields.configure.prometheusInitImage,\n selectedStorageClass:\n state.tenants.createTenant.fields.nameTenant.selectedStorageClass,\n});\n\nconst connector = connect(mapState, {\n updateAddField,\n isPageValid,\n});\n\nexport default withStyles(styles)(connector(Images));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { DialogContentText, LinearProgress } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n deleteDialogStyles,\n modalBasic,\n} from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport { setErrorSnackMessage } from \"../../../../../../actions\";\nimport { ErrorResponseHandler } from \"../../../../../../common/types\";\nimport api from \"../../../../../../common/api\";\nimport ConfirmDialog from \"../../../../Common/ModalWrapper/ConfirmDialog\";\nimport { ConfirmModalIcon } from \"../../../../../../icons\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n wrapText: {\n maxWidth: \"200px\",\n whiteSpace: \"normal\",\n wordWrap: \"break-word\",\n },\n ...modalBasic,\n ...deleteDialogStyles,\n });\n\ninterface IAddNamespace {\n classes: any;\n namespace: string;\n addNamespaceOpen: boolean;\n closeAddNamespaceModalAndRefresh: (reloadNamespaceData: boolean) => void;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst AddNamespaceModal = ({\n classes,\n namespace,\n addNamespaceOpen,\n closeAddNamespaceModalAndRefresh,\n setErrorSnackMessage,\n}: IAddNamespace) => {\n const [addNamespaceLoading, setAddNamespaceLoading] =\n useState(false);\n\n useEffect(() => {\n if (addNamespaceLoading) {\n api\n .invoke(\"POST\", \"/api/v1/namespace\", {\n name: namespace,\n })\n .then((res) => {\n setAddNamespaceLoading(false);\n closeAddNamespaceModalAndRefresh(true);\n })\n .catch((err: ErrorResponseHandler) => {\n setAddNamespaceLoading(false);\n setErrorSnackMessage(err);\n });\n }\n }, [\n addNamespaceLoading,\n closeAddNamespaceModalAndRefresh,\n namespace,\n setErrorSnackMessage,\n ]);\n\n const addNamespace = () => {\n setAddNamespaceLoading(true);\n };\n\n return (\n }\n isLoading={addNamespaceLoading}\n onConfirm={addNamespace}\n onClose={() => {\n closeAddNamespaceModalAndRefresh(false);\n }}\n confirmationContent={\n \n {addNamespaceLoading && }\n \n Are you sure you want to add a namespace called\n
\n {namespace}?\n
\n
\n }\n />\n );\n};\n\nconst mapDispatchToProps = {\n setErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(AddNamespaceModal));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { AppState } from \"../../../../../store\";\nimport { isPageValid, updateAddField } from \"../../actions\";\nimport {\n modalBasic,\n wizardCommon,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\nimport Table from \"@mui/material/Table\";\nimport TableBody from \"@mui/material/TableBody\";\nimport TableCell from \"@mui/material/TableCell\";\nimport TableRow from \"@mui/material/TableRow\";\nimport { niceBytes } from \"../../../../../common/utils\";\nimport { Opts } from \"../../ListTenants/utils\";\nimport { IResourcesSize } from \"../../ListTenants/types\";\nimport { IErasureCodeCalc } from \"../../../../../common/types\";\n\nimport { Divider } from \"@mui/material\";\nimport { IntegrationConfiguration } from \"./TenantResources/utils\";\n\ninterface ISizePreviewProps {\n classes: any;\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n volumeSize: string;\n sizeFactor: string;\n drivesPerServer: string;\n nodes: string;\n memoryNode: string;\n ecParity: string;\n ecParityChoices: Opts[];\n cleanECChoices: string[];\n resourcesSize: IResourcesSize;\n distribution: any;\n ecParityCalc: IErasureCodeCalc;\n limitSize: any;\n selectedStorageClass: string;\n cpuToUse: string;\n integrationSelection: IntegrationConfiguration;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n margin: 4,\n },\n table: {\n \"& .MuiTableCell-root\": {\n fontSize: 13,\n },\n },\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst SizePreview = ({\n classes,\n nodes,\n memoryNode,\n ecParity,\n distribution,\n ecParityCalc,\n cpuToUse,\n integrationSelection,\n}: ISizePreviewProps) => {\n const usableInformation = ecParityCalc.storageFactors.find(\n (element) => element.erasureCode === ecParity\n );\n\n return (\n
\n

Resource Allocation

\n \n \n \n \n Number of Servers\n \n {parseInt(nodes) > 0 ? nodes : \"-\"}\n \n \n {integrationSelection.typeSelection === \"\" &&\n integrationSelection.storageClass === \"\" && (\n \n \n Drives per Server\n \n {distribution ? distribution.disks : \"-\"}\n \n \n \n Drive Capacity\n \n {distribution ? niceBytes(distribution.pvSize) : \"-\"}\n \n \n \n )}\n\n \n Total Volumes\n \n {distribution ? distribution.persistentVolumes : \"-\"}\n \n \n {integrationSelection.typeSelection === \"\" &&\n integrationSelection.storageClass === \"\" && (\n \n \n Memory per Node\n {memoryNode} Gi\n \n \n \n CPU Selection\n \n \n {cpuToUse}\n \n \n \n )}\n \n
\n {ecParityCalc.error === 0 && usableInformation && (\n \n

Erasure Code Configuration

\n \n \n \n \n EC Parity\n \n {ecParity !== \"\" ? ecParity : \"-\"}\n \n \n \n Raw Capacity\n \n {niceBytes(ecParityCalc.rawCapacity)}\n \n \n \n Usable Capacity\n \n {niceBytes(usableInformation.maxCapacity)}\n \n \n \n \n Server Failures Tolerated\n \n \n {distribution\n ? Math.floor(\n usableInformation.maxFailureTolerations /\n distribution.disks\n )\n : \"-\"}\n \n \n \n \n
\n )}\n {integrationSelection.typeSelection !== \"\" &&\n integrationSelection.storageClass !== \"\" && (\n \n

Single Instance Configuration

\n \n \n \n \n CPU\n \n {integrationSelection.CPU !== 0\n ? integrationSelection.CPU\n : \"-\"}\n \n \n \n Memory\n \n {integrationSelection.memory !== 0\n ? `${integrationSelection.memory} Gi`\n : \"-\"}\n \n \n \n Drives per Server\n \n {integrationSelection.drivesPerServer !== 0\n ? `${integrationSelection.drivesPerServer}`\n : \"-\"}\n \n \n \n \n Drive Size\n \n \n {integrationSelection.driveSize.driveSize}\n {integrationSelection.driveSize.sizeUnit}\n \n \n \n \n
\n )}\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n volumeSize: state.tenants.createTenant.fields.tenantSize.volumeSize,\n sizeFactor: state.tenants.createTenant.fields.tenantSize.sizeFactor,\n drivesPerServer: state.tenants.createTenant.fields.tenantSize.drivesPerServer,\n nodes: state.tenants.createTenant.fields.tenantSize.nodes,\n memoryNode:\n state.tenants.createTenant.fields.tenantSize.resourcesMemoryRequest,\n ecParity: state.tenants.createTenant.fields.tenantSize.ecParity,\n ecParityChoices: state.tenants.createTenant.fields.tenantSize.ecParityChoices,\n cleanECChoices: state.tenants.createTenant.fields.tenantSize.cleanECChoices,\n resourcesSize: state.tenants.createTenant.fields.tenantSize.resourcesSize,\n distribution: state.tenants.createTenant.fields.tenantSize.distribution,\n ecParityCalc: state.tenants.createTenant.fields.tenantSize.ecParityCalc,\n limitSize: state.tenants.createTenant.fields.tenantSize.limitSize,\n selectedStorageClass:\n state.tenants.createTenant.fields.nameTenant.selectedStorageClass,\n cpuToUse: state.tenants.createTenant.fields.tenantSize.resourcesCPURequest,\n integrationSelection:\n state.tenants.createTenant.fields.tenantSize.integrationSelection,\n});\n\nconst connector = connect(mapState, {\n updateAddField,\n isPageValid,\n});\n\nexport default withStyles(styles)(connector(SizePreview));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport get from \"lodash/get\";\nimport { AppState } from \"../../../../../../store\";\nimport { isPageValid, updateAddField } from \"../../../actions\";\nimport {\n formFieldStyles,\n modalBasic,\n wizardCommon,\n} from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport Grid from \"@mui/material/Grid\";\nimport { IResourcesSize } from \"../../../ListTenants/types\";\nimport { AllocableResourcesResponse } from \"../../../types\";\nimport api from \"../../../../../../common/api\";\nimport InputBoxWrapper from \"../../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport FormSwitchWrapper from \"../../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport { floor } from \"lodash\";\n\ninterface ITenantSizeResourcesProps {\n classes: any;\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n nodes: string;\n resourcesSize: IResourcesSize;\n selectedStorageClass: string;\n maxAllocatableResources: AllocableResourcesResponse;\n maxCPUsUse: string;\n maxMemorySize: string;\n\n resourcesSpecifyLimit: boolean;\n resourcesCPURequestError: string;\n resourcesCPURequest: string;\n resourcesCPULimitError: string;\n resourcesCPULimit: string;\n resourcesMemoryRequestError: string;\n resourcesMemoryRequest: string;\n resourcesMemoryLimitError: string;\n resourcesMemoryLimit: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n compositeFieldContainer: {\n display: \"flex\",\n alignItems: \"center\",\n },\n compositeAddOn: {\n marginLeft: 10,\n \"& div\": {\n marginBottom: 0,\n },\n \"@media (max-width: 900px)\": {\n \"& div\": {\n marginTop: 5,\n },\n },\n },\n ...formFieldStyles,\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst TenantSizeResources = ({\n classes,\n updateAddField,\n isPageValid,\n nodes,\n\n resourcesSize,\n selectedStorageClass,\n maxAllocatableResources,\n maxCPUsUse,\n maxMemorySize,\n resourcesSpecifyLimit,\n resourcesCPURequestError,\n resourcesCPURequest,\n resourcesCPULimitError,\n resourcesCPULimit,\n resourcesMemoryRequestError,\n resourcesMemoryRequest,\n resourcesMemoryLimitError,\n resourcesMemoryLimit,\n}: ITenantSizeResourcesProps) => {\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n updateAddField(\"tenantSize\", field, value);\n },\n [updateAddField]\n );\n\n /*Debounce functions*/\n\n useEffect(() => {\n isPageValid(\n \"tenantSize\",\n resourcesMemoryRequestError === \"\" &&\n resourcesMemoryLimitError === \"\" &&\n resourcesCPURequestError === \"\" &&\n resourcesCPULimitError === \"\"\n );\n }, [\n isPageValid,\n resourcesMemoryRequestError,\n resourcesMemoryLimitError,\n resourcesCPURequestError,\n resourcesCPULimitError,\n ]);\n\n /*End debounce functions*/\n\n /*Calculate Allocation*/\n useEffect(() => {\n // Get allocatable Resources\n api\n .invoke(\"GET\", `api/v1/cluster/allocatable-resources?num_nodes=${nodes}`)\n .then((res: AllocableResourcesResponse) => {\n updateField(\"maxAllocatableResources\", res);\n\n const maxAllocatableResources = res;\n\n const memoryExists = get(\n maxAllocatableResources,\n \"min_allocatable_mem\",\n false\n );\n\n const cpuExists = get(\n maxAllocatableResources,\n \"min_allocatable_cpu\",\n false\n );\n\n if (memoryExists === false || cpuExists === false) {\n updateField(\"cpuToUse\", 0);\n\n updateField(\"maxMemorySize\", \"\");\n updateField(\"maxCPUsUse\", \"\");\n\n return;\n }\n\n const maxMemory = floor(\n res.mem_priority.max_allocatable_mem / 1024 / 1024 / 1024\n );\n // We default to Best CPU Configuration\n updateField(\"maxMemorySize\", maxMemory.toString());\n updateField(\n \"maxCPUsUse\",\n res.cpu_priority.max_allocatable_cpu.toString()\n );\n\n const maxAllocatableCPU = get(\n maxAllocatableResources,\n \"cpu_priority.max_allocatable_cpu\",\n 0\n );\n\n const baseCpuUse = Math.max(1, floor(maxAllocatableCPU / 2));\n if (resourcesCPURequest === \"\") {\n updateField(\"resourcesCPURequest\", baseCpuUse);\n }\n\n const baseMemoryUse = Math.max(2, floor(maxMemory / 2));\n if (resourcesMemoryRequest === \"\") {\n updateField(\"resourcesMemoryRequest\", baseMemoryUse);\n }\n })\n .catch((err: any) => {\n updateField(\"maxMemorySize\", 0);\n updateField(\"resourcesCPURequest\", \"\");\n updateField(\"resourcesMemoryRequest\", \"\");\n\n console.error(err);\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [nodes, updateField]);\n\n /*Calculate Allocation End*/\n\n return (\n \n \n
\n

Resources

\n \n You may specify the amount of CPU and Memory that MinIO servers\n should reserve on each node.\n \n
\n
\n {resourcesSize.error !== \"\" && (\n \n
{resourcesSize.error}
\n
\n )}\n\n \n {\n let value = parseInt(e.target.value);\n if (e.target.value === \"\") {\n updateField(\"resourcesCPURequestError\", \"\");\n } else if (isNaN(value)) {\n updateField(\"resourcesCPURequestError\", \"Invalid number\");\n } else if (value > parseInt(maxCPUsUse)) {\n updateField(\n \"resourcesCPURequestError\",\n `Request exceeds available cores (${maxCPUsUse})`\n );\n } else if (e.target.validity.valid) {\n updateField(\"resourcesCPURequestError\", \"\");\n } else {\n updateField(\"resourcesCPURequestError\", \"Invalid configuration\");\n }\n updateField(\"resourcesCPURequest\", e.target.value);\n }}\n value={resourcesCPURequest}\n disabled={selectedStorageClass === \"\"}\n max={maxCPUsUse}\n error={resourcesCPURequestError}\n pattern={\"[0-9]*\"}\n />\n \n\n \n ) => {\n let value = parseInt(e.target.value);\n if (e.target.value === \"\") {\n updateField(\"resourcesMemoryRequestError\", \"\");\n } else if (isNaN(value)) {\n updateField(\"resourcesMemoryRequestError\", \"Invalid number\");\n } else if (value > parseInt(maxMemorySize)) {\n updateField(\n \"resourcesMemoryRequestError\",\n `Request exceeds available memory across ${nodes} nodes (${maxMemorySize}Gi)`\n );\n } else if (value < 2) {\n updateField(\n \"resourcesMemoryRequestError\",\n \"At least 2Gi must be requested\"\n );\n } else if (e.target.validity.valid) {\n updateField(\"resourcesMemoryRequestError\", \"\");\n } else {\n updateField(\n \"resourcesMemoryRequestError\",\n \"Invalid configuration\"\n );\n }\n updateField(\"resourcesMemoryRequest\", e.target.value);\n }}\n label=\"Memory Request [Gi]\"\n value={resourcesMemoryRequest}\n disabled={selectedStorageClass === \"\"}\n error={resourcesMemoryRequestError}\n pattern={\"[0-9]*\"}\n />\n \n\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"resourcesSpecifyLimit\", checked);\n }}\n label={\"Specify Limit\"}\n />\n \n\n {resourcesSpecifyLimit && (\n \n \n {\n let value = parseInt(e.target.value);\n if (e.target.value === \"\") {\n updateField(\"resourcesCPULimitError\", \"\");\n } else if (isNaN(value)) {\n updateField(\"resourcesCPULimitError\", \"Invalid number\");\n } else if (e.target.validity.valid) {\n updateField(\"resourcesCPULimitError\", \"\");\n } else {\n updateField(\n \"resourcesCPULimitError\",\n \"Invalid configuration\"\n );\n }\n updateField(\"resourcesCPULimit\", e.target.value);\n }}\n value={resourcesCPULimit}\n disabled={selectedStorageClass === \"\"}\n max={maxCPUsUse}\n error={resourcesCPULimitError}\n pattern={\"[0-9]*\"}\n />\n \n\n \n ) => {\n let value = parseInt(e.target.value);\n console.log(\"value\", value);\n if (e.target.value === \"\") {\n updateField(\"resourcesMemoryLimitError\", \"\");\n } else if (isNaN(value)) {\n updateField(\"resourcesMemoryLimitError\", \"Invalid number\");\n } else if (e.target.validity.valid) {\n updateField(\"resourcesMemoryLimitError\", \"\");\n } else {\n updateField(\n \"resourcesMemoryLimitError\",\n \"Invalid configuration\"\n );\n }\n updateField(\"resourcesMemoryLimit\", e.target.value);\n }}\n label=\"Memory Limit [Gi]\"\n value={resourcesMemoryLimit}\n disabled={selectedStorageClass === \"\"}\n error={resourcesMemoryLimitError}\n pattern={\"[0-9]*\"}\n />\n \n \n )}\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n nodes: state.tenants.createTenant.fields.tenantSize.nodes,\n\n resourcesSize: state.tenants.createTenant.fields.tenantSize.resourcesSize,\n selectedStorageClass:\n state.tenants.createTenant.fields.nameTenant.selectedStorageClass,\n maxAllocatableResources:\n state.tenants.createTenant.fields.tenantSize.maxAllocatableResources,\n maxCPUsUse: state.tenants.createTenant.fields.tenantSize.maxCPUsUse,\n maxMemorySize: state.tenants.createTenant.fields.tenantSize.maxMemorySize,\n\n resourcesSpecifyLimit:\n state.tenants.createTenant.fields.tenantSize.resourcesSpecifyLimit,\n\n resourcesCPURequestError:\n state.tenants.createTenant.fields.tenantSize.resourcesCPURequestError,\n resourcesCPURequest:\n state.tenants.createTenant.fields.tenantSize.resourcesCPURequest,\n resourcesCPULimitError:\n state.tenants.createTenant.fields.tenantSize.resourcesCPULimitError,\n resourcesCPULimit:\n state.tenants.createTenant.fields.tenantSize.resourcesCPULimit,\n\n resourcesMemoryRequestError:\n state.tenants.createTenant.fields.tenantSize.resourcesMemoryRequestError,\n resourcesMemoryRequest:\n state.tenants.createTenant.fields.tenantSize.resourcesMemoryRequest,\n resourcesMemoryLimitError:\n state.tenants.createTenant.fields.tenantSize.resourcesMemoryLimitError,\n resourcesMemoryLimit:\n state.tenants.createTenant.fields.tenantSize.resourcesMemoryLimit,\n});\n\nconst connector = connect(mapState, {\n updateAddField,\n isPageValid,\n});\n\nexport default withStyles(styles)(connector(TenantSizeResources));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport { SelectChangeEvent } from \"@mui/material\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { AppState } from \"../../../../../../store\";\nimport { isPageValid, updateAddField } from \"../../../actions\";\nimport {\n formFieldStyles,\n modalBasic,\n wizardCommon,\n} from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport Grid from \"@mui/material/Grid\";\nimport {\n calculateDistribution,\n erasureCodeCalc,\n getBytes,\n k8sfactorForDropdown,\n niceBytes,\n} from \"../../../../../../common/utils\";\nimport { clearValidationError } from \"../../../utils\";\nimport { ecListTransform, Opts } from \"../../../ListTenants/utils\";\nimport { IResourcesSize } from \"../../../ListTenants/types\";\nimport { ICapacity, IErasureCodeCalc } from \"../../../../../../common/types\";\nimport { commonFormValidation } from \"../../../../../../utils/validationFunctions\";\nimport api from \"../../../../../../common/api\";\nimport InputBoxWrapper from \"../../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport SelectWrapper from \"../../../../Common/FormComponents/SelectWrapper/SelectWrapper\";\nimport TenantSizeResources from \"./TenantSizeResources\";\n\ninterface ITenantSizeProps {\n classes: any;\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n volumeSize: string;\n sizeFactor: string;\n drivesPerServer: string;\n nodes: string;\n memoryNode: string;\n ecParity: string;\n ecParityChoices: Opts[];\n cleanECChoices: string[];\n resourcesSize: IResourcesSize;\n distribution: any;\n ecParityCalc: IErasureCodeCalc;\n limitSize: any;\n selectedStorageClass: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n compositeFieldContainer: {\n display: \"flex\",\n alignItems: \"center\",\n },\n compositeAddOn: {\n marginLeft: 10,\n \"& div\": {\n marginBottom: 0,\n },\n \"@media (max-width: 900px)\": {\n \"& div\": {\n marginTop: 5,\n },\n },\n },\n ...formFieldStyles,\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst TenantSize = ({\n classes,\n updateAddField,\n isPageValid,\n volumeSize,\n sizeFactor,\n drivesPerServer,\n nodes,\n memoryNode,\n ecParity,\n ecParityChoices,\n cleanECChoices,\n resourcesSize,\n distribution,\n ecParityCalc,\n limitSize,\n selectedStorageClass,\n}: ITenantSizeProps) => {\n const [validationErrors, setValidationErrors] = useState({});\n const [errorFlag, setErrorFlag] = useState(false);\n const [nodeError, setNodeError] = useState(\"\");\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n updateAddField(\"tenantSize\", field, value);\n },\n [updateAddField]\n );\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n /*Debounce functions*/\n\n // Storage Quotas\n\n useEffect(() => {\n if (ecParityChoices.length > 0 && distribution.error === \"\") {\n const ecCodeValidated = erasureCodeCalc(\n cleanECChoices,\n distribution.persistentVolumes,\n distribution.pvSize,\n distribution.nodes\n );\n\n updateField(\"ecParityCalc\", ecCodeValidated);\n if (!cleanECChoices.includes(ecParity) || ecParity === \"\") {\n updateField(\"ecParity\", ecCodeValidated.defaultEC);\n }\n }\n }, [\n ecParity,\n ecParityChoices.length,\n distribution,\n cleanECChoices,\n updateField,\n ]);\n /*End debounce functions*/\n\n /*Calculate Allocation*/\n useEffect(() => {\n //Validate Cluster Size\n const size = volumeSize;\n const factor = sizeFactor;\n const limitSize = getBytes(\"12\", \"Ti\", true);\n\n const clusterCapacity: ICapacity = {\n unit: factor,\n value: size.toString(),\n };\n\n const distrCalculate = calculateDistribution(\n clusterCapacity,\n parseInt(nodes),\n parseInt(limitSize),\n parseInt(drivesPerServer)\n );\n\n updateField(\"distribution\", distrCalculate);\n setErrorFlag(false);\n setNodeError(\"\");\n }, [nodes, volumeSize, sizeFactor, updateField, drivesPerServer]);\n\n /*Calculate Allocation End*/\n\n /* Validations of pages */\n\n useEffect(() => {\n const parsedSize = getBytes(volumeSize, sizeFactor, true);\n\n const commonValidation = commonFormValidation([\n {\n fieldKey: \"nodes\",\n required: true,\n value: nodes,\n customValidation: errorFlag,\n customValidationMessage: nodeError,\n },\n {\n fieldKey: \"volume_size\",\n required: true,\n value: volumeSize,\n customValidation:\n parseInt(parsedSize) < 1073741824 ||\n parseInt(parsedSize) > limitSize[selectedStorageClass],\n customValidationMessage: `Volume size must be greater than 1Gi and less than ${niceBytes(\n limitSize[selectedStorageClass],\n true\n )}`,\n },\n {\n fieldKey: \"drivesps\",\n required: true,\n value: drivesPerServer,\n customValidation: parseInt(drivesPerServer) < 1,\n customValidationMessage: \"There must be at least one drive\",\n },\n ]);\n\n isPageValid(\n \"tenantSize\",\n !(\"nodes\" in commonValidation) &&\n !(\"volume_size\" in commonValidation) &&\n !(\"drivesps\" in commonValidation) &&\n distribution.error === \"\" &&\n ecParityCalc.error === 0 &&\n ecParity !== \"\"\n );\n\n setValidationErrors(commonValidation);\n }, [\n nodes,\n volumeSize,\n sizeFactor,\n memoryNode,\n distribution,\n ecParityCalc,\n resourcesSize,\n limitSize,\n selectedStorageClass,\n isPageValid,\n errorFlag,\n nodeError,\n drivesPerServer,\n ecParity,\n ]);\n\n useEffect(() => {\n if (distribution.error === \"\") {\n // Get EC Value\n if (nodes.trim() !== \"\" && distribution.disks !== 0) {\n api\n .invoke(\"GET\", `api/v1/get-parity/${nodes}/${distribution.disks}`)\n .then((ecList: string[]) => {\n updateField(\"ecParityChoices\", ecListTransform(ecList));\n updateField(\"cleanECChoices\", ecList);\n })\n .catch((err: any) => {\n updateField(\"ecparityChoices\", []);\n isPageValid(\"tenantSize\", false);\n updateField(\"ecParity\", \"\");\n });\n }\n }\n }, [distribution, isPageValid, updateField, nodes]);\n\n /* End Validation of pages */\n\n return (\n \n \n
\n

Capacity

\n \n Please select the desired capacity\n \n
\n
\n {distribution.error !== \"\" && (\n \n
{distribution.error}
\n
\n )}\n \n ) => {\n if (e.target.validity.valid) {\n updateField(\"nodes\", e.target.value);\n cleanValidation(\"nodes\");\n }\n }}\n label=\"Number of Servers\"\n disabled={selectedStorageClass === \"\"}\n value={nodes}\n min=\"4\"\n required\n error={validationErrors[\"nodes\"] || \"\"}\n pattern={\"[0-9]*\"}\n />\n \n \n ) => {\n if (e.target.validity.valid) {\n updateField(\"drivesPerServer\", e.target.value);\n cleanValidation(\"drivesps\");\n }\n }}\n label=\"Drives per Server\"\n value={drivesPerServer}\n disabled={selectedStorageClass === \"\"}\n min=\"1\"\n required\n error={validationErrors[\"drivesps\"] || \"\"}\n pattern={\"[0-9]*\"}\n />\n \n \n
\n
\n
\n ) => {\n updateField(\"volumeSize\", e.target.value);\n cleanValidation(\"volume_size\");\n }}\n label=\"Total Size\"\n value={volumeSize}\n disabled={selectedStorageClass === \"\"}\n required\n error={validationErrors[\"volume_size\"] || \"\"}\n min=\"0\"\n />\n
\n ) => {\n updateField(\"sizeFactor\", e.target.value as string);\n }}\n options={k8sfactorForDropdown()}\n />\n
\n
\n
\n
\n
\n\n \n ) => {\n updateField(\"ecParity\", e.target.value as string);\n }}\n label=\"Erasure Code Parity\"\n disabled={selectedStorageClass === \"\"}\n value={ecParity}\n options={ecParityChoices}\n />\n \n Please select the desired parity. This setting will change the max\n usable capacity in the cluster\n \n \n\n \n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n volumeSize: state.tenants.createTenant.fields.tenantSize.volumeSize,\n sizeFactor: state.tenants.createTenant.fields.tenantSize.sizeFactor,\n drivesPerServer: state.tenants.createTenant.fields.tenantSize.drivesPerServer,\n nodes: state.tenants.createTenant.fields.tenantSize.nodes,\n memoryNode: state.tenants.createTenant.fields.tenantSize.memoryNode,\n ecParity: state.tenants.createTenant.fields.tenantSize.ecParity,\n ecParityChoices: state.tenants.createTenant.fields.tenantSize.ecParityChoices,\n cleanECChoices: state.tenants.createTenant.fields.tenantSize.cleanECChoices,\n\n resourcesSize: state.tenants.createTenant.fields.tenantSize.resourcesSize,\n distribution: state.tenants.createTenant.fields.tenantSize.distribution,\n ecParityCalc: state.tenants.createTenant.fields.tenantSize.ecParityCalc,\n limitSize: state.tenants.createTenant.limitSize,\n selectedStorageClass:\n state.tenants.createTenant.fields.nameTenant.selectedStorageClass,\n});\n\nconst connector = connect(mapState, {\n updateAddField,\n isPageValid,\n});\n\nexport default withStyles(styles)(connector(TenantSize));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport { SelectChangeEvent } from \"@mui/material\";\nimport get from \"lodash/get\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { AppState } from \"../../../../../../store\";\nimport { isPageValid, updateAddField } from \"../../../actions\";\nimport {\n formFieldStyles,\n modalBasic,\n wizardCommon,\n} from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport Grid from \"@mui/material/Grid\";\nimport { erasureCodeCalc, getBytes } from \"../../../../../../common/utils\";\nimport { clearValidationError } from \"../../../utils\";\nimport { ecListTransform, Opts } from \"../../../ListTenants/utils\";\nimport { IResourcesSize } from \"../../../ListTenants/types\";\nimport {\n IErasureCodeCalc,\n IStorageDistribution,\n} from \"../../../../../../common/types\";\nimport { commonFormValidation } from \"../../../../../../utils/validationFunctions\";\nimport api from \"../../../../../../common/api\";\nimport InputBoxWrapper from \"../../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport SelectWrapper from \"../../../../Common/FormComponents/SelectWrapper/SelectWrapper\";\nimport {\n IMkEnvs,\n IntegrationConfiguration,\n mkPanelConfigurations,\n} from \"./utils\";\n\ninterface ITenantSizeAWSProps {\n classes: any;\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n volumeSize: string;\n sizeFactor: string;\n drivesPerServer: string;\n nodes: string;\n memoryNode: string;\n ecParity: string;\n ecParityChoices: Opts[];\n cleanECChoices: string[];\n resourcesSize: IResourcesSize;\n distribution: any;\n ecParityCalc: IErasureCodeCalc;\n limitSize: any;\n selectedStorageType: string;\n cpuToUse: string;\n maxCPUsUse: string;\n formToRender?: IMkEnvs;\n integrationSelection: IntegrationConfiguration;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n compositeFieldContainer: {\n display: \"flex\",\n alignItems: \"center\",\n },\n compositeAddOn: {\n marginLeft: 10,\n \"& div\": {\n marginBottom: 0,\n },\n \"@media (max-width: 900px)\": {\n \"& div\": {\n marginTop: 5,\n },\n },\n },\n ...formFieldStyles,\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst TenantSizeMK = ({\n classes,\n updateAddField,\n isPageValid,\n volumeSize,\n sizeFactor,\n drivesPerServer,\n nodes,\n memoryNode,\n ecParity,\n ecParityChoices,\n cleanECChoices,\n resourcesSize,\n distribution,\n ecParityCalc,\n limitSize,\n cpuToUse,\n selectedStorageType,\n maxCPUsUse,\n formToRender,\n integrationSelection,\n}: ITenantSizeAWSProps) => {\n const [validationErrors, setValidationErrors] = useState({});\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n updateAddField(\"tenantSize\", field, value);\n },\n [updateAddField]\n );\n\n const updateMainField = useCallback(\n (field: string, value: string) => {\n updateAddField(\"nameTenant\", field, value);\n },\n [updateAddField]\n );\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n /*Debounce functions*/\n\n // Storage Quotas\n useEffect(() => {\n if (ecParityChoices.length > 0 && distribution.error === \"\") {\n const ecCodeValidated = erasureCodeCalc(\n cleanECChoices,\n distribution.persistentVolumes,\n distribution.pvSize,\n distribution.nodes\n );\n\n updateField(\"ecParityCalc\", ecCodeValidated);\n\n if (!cleanECChoices.includes(ecParity) || ecParity === \"\") {\n updateField(\"ecParity\", ecCodeValidated.defaultEC);\n }\n }\n }, [ecParity, ecParityChoices, distribution, cleanECChoices, updateField]);\n /*End debounce functions*/\n\n /*Set location Storage Types*/\n useEffect(() => {\n if (formToRender !== undefined && parseInt(nodes) >= 4) {\n const setConfigs = mkPanelConfigurations[formToRender];\n const keyCount = Object.keys(setConfigs).length;\n\n //Configuration is filled\n if (keyCount > 0) {\n const configs: IntegrationConfiguration[] = get(\n setConfigs,\n \"configurations\",\n []\n );\n\n const mainSelection = configs.find(\n (item) => item.typeSelection === selectedStorageType\n );\n\n if (mainSelection) {\n updateField(\"integrationSelection\", mainSelection);\n updateMainField(\"selectedStorageClass\", mainSelection.storageClass);\n\n let pvSize = parseInt(\n getBytes(\n mainSelection.driveSize.driveSize,\n mainSelection.driveSize.sizeUnit,\n true\n ),\n 10\n );\n\n const distrCalculate: IStorageDistribution = {\n pvSize,\n nodes: parseInt(nodes),\n disks: mainSelection.drivesPerServer,\n persistentVolumes: mainSelection.drivesPerServer * parseInt(nodes),\n error: \"\",\n };\n\n updateField(\"distribution\", distrCalculate);\n // apply requests, half of the available resources\n updateField(\n \"resourcesCPURequest\",\n Math.max(1, mainSelection.CPU / 2)\n );\n updateField(\n \"resourcesMemoryRequest\",\n Math.max(2, mainSelection.memory / 2)\n );\n }\n }\n }\n }, [nodes, selectedStorageType, formToRender, updateField, updateMainField]);\n\n /*Calculate Allocation End*/\n\n /* Validations of pages */\n\n useEffect(() => {\n const commonValidation = commonFormValidation([\n {\n fieldKey: \"nodes\",\n required: true,\n value: nodes,\n customValidation: parseInt(nodes) < 4,\n customValidationMessage: \"Al least 4 servers must be selected\",\n },\n ]);\n\n isPageValid(\n \"tenantSize\",\n !(\"nodes\" in commonValidation) &&\n distribution.error === \"\" &&\n ecParityCalc.error === 0 &&\n resourcesSize.error === \"\" &&\n ecParity !== \"\" &&\n parseInt(nodes) >= 4\n );\n\n setValidationErrors(commonValidation);\n }, [\n nodes,\n volumeSize,\n sizeFactor,\n memoryNode,\n distribution,\n ecParityCalc,\n resourcesSize,\n limitSize,\n selectedStorageType,\n cpuToUse,\n maxCPUsUse,\n isPageValid,\n drivesPerServer,\n ecParity,\n ]);\n\n useEffect(() => {\n if (integrationSelection.drivesPerServer !== 0) {\n // Get EC Value\n if (nodes.trim() !== \"\") {\n api\n .invoke(\n \"GET\",\n `api/v1/get-parity/${nodes}/${integrationSelection.drivesPerServer}`\n )\n .then((ecList: string[]) => {\n updateField(\"ecParityChoices\", ecListTransform(ecList));\n updateField(\"cleanECChoices\", ecList);\n })\n .catch((err: any) => {\n updateField(\"ecparityChoices\", []);\n isPageValid(\"tenantSize\", false);\n updateField(\"ecParity\", \"\");\n });\n }\n }\n }, [integrationSelection, nodes, isPageValid, updateField]);\n\n /* End Validation of pages */\n\n return (\n \n \n
\n

Tenant Size

\n \n Please select the desired capacity\n \n
\n
\n {distribution.error !== \"\" && (\n \n
{distribution.error}
\n
\n )}\n {resourcesSize.error !== \"\" && (\n \n
{resourcesSize.error}
\n
\n )}\n \n ) => {\n if (e.target.validity.valid) {\n updateField(\"nodes\", e.target.value);\n cleanValidation(\"nodes\");\n }\n }}\n label=\"Number of Servers\"\n disabled={selectedStorageType === \"\"}\n value={nodes}\n min=\"4\"\n required\n error={validationErrors[\"nodes\"] || \"\"}\n pattern={\"[0-9]*\"}\n />\n \n \n ) => {\n updateField(\"ecParity\", e.target.value as string);\n }}\n label=\"Erasure Code Parity\"\n disabled={selectedStorageType === \"\"}\n value={ecParity}\n options={ecParityChoices}\n />\n \n Please select the desired parity. This setting will change the max\n usable capacity in the cluster\n \n \n
\n );\n};\n\nconst mapState = (state: AppState) => () => {\n const createTenant = state.tenants.createTenant;\n\n const {\n memoryNode,\n ecParityChoices,\n distribution,\n cleanECChoices,\n sizeFactor,\n ecParity,\n cpuToUse,\n integrationSelection,\n resourcesSize,\n drivesPerServer,\n maxCPUsUse,\n ecParityCalc,\n volumeSize,\n nodes,\n } = createTenant.fields.tenantSize;\n\n return {\n volumeSize,\n sizeFactor,\n drivesPerServer,\n nodes,\n memoryNode,\n ecParity,\n ecParityChoices,\n cleanECChoices,\n resourcesSize,\n distribution,\n ecParityCalc,\n cpuToUse,\n maxCPUsUse,\n integrationSelection,\n limitSize: createTenant.limitSize,\n selectedStorageType: createTenant.fields.nameTenant.selectedStorageType,\n };\n};\n\nconst connector = connect(mapState, {\n updateAddField,\n isPageValid,\n});\n\nexport default withStyles(styles)(connector(TenantSizeMK));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, {\n Fragment,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { connect } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport get from \"lodash/get\";\nimport debounce from \"lodash/debounce\";\nimport Grid from \"@mui/material/Grid\";\nimport {\n formFieldStyles,\n modalBasic,\n wizardCommon,\n} from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport { setModalErrorSnackMessage } from \"../../../../../../actions\";\nimport {\n isPageValid,\n setLimitSize,\n setStorageClassesList,\n updateAddField,\n} from \"../../../actions\";\nimport {\n getLimitSizes,\n IQuotaElement,\n IQuotas,\n Opts,\n} from \"../../../ListTenants/utils\";\nimport { AppState } from \"../../../../../../store\";\nimport { commonFormValidation } from \"../../../../../../utils/validationFunctions\";\nimport { clearValidationError } from \"../../../utils\";\nimport { ErrorResponseHandler } from \"../../../../../../common/types\";\nimport api from \"../../../../../../common/api\";\nimport InputBoxWrapper from \"../../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport SelectWrapper from \"../../../../Common/FormComponents/SelectWrapper/SelectWrapper\";\nimport AddIcon from \"../../../../../../icons/AddIcon\";\nimport AddNamespaceModal from \"../helpers/AddNamespaceModal\";\nimport SizePreview from \"../SizePreview\";\nimport TenantSize from \"./TenantSize\";\nimport { Paper, SelectChangeEvent } from \"@mui/material\";\nimport { IMkEnvs, mkPanelConfigurations } from \"./utils\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n sizePreview: {\n position: \"fixed\",\n marginLeft: 10,\n background: \"#FFFFFF\",\n border: \"1px solid #EAEAEA\",\n padding: 2,\n },\n ...formFieldStyles,\n ...modalBasic,\n ...wizardCommon,\n });\n\ninterface INameTenantMainScreen {\n classes: any;\n storageClasses: Opts[];\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n setStorageClassesList: typeof setStorageClassesList;\n setLimitSize: typeof setLimitSize;\n tenantName: string;\n namespace: string;\n selectedStorageClass: string;\n selectedStorageType: string;\n formToRender?: IMkEnvs;\n}\n\nconst NameTenantMain = ({\n classes,\n storageClasses,\n tenantName,\n namespace,\n selectedStorageClass,\n selectedStorageType,\n formToRender = IMkEnvs.default,\n updateAddField,\n setStorageClassesList,\n setLimitSize,\n isPageValid,\n setModalErrorSnackMessage,\n}: INameTenantMainScreen) => {\n const [validationErrors, setValidationErrors] = useState({});\n const [emptyNamespace, setEmptyNamespace] = useState(true);\n const [loadingNamespaceInfo, setLoadingNamespaceInfo] =\n useState(false);\n const [showCreateButton, setShowCreateButton] = useState(false);\n const [openAddNSConfirm, setOpenAddNSConfirm] = useState(false);\n\n // Common\n const updateField = useCallback(\n (field: string, value: string) => {\n updateAddField(\"nameTenant\", field, value);\n },\n [updateAddField]\n );\n\n // Storage classes retrieval\n const getNamespaceInformation = useCallback(() => {\n setShowCreateButton(false);\n // Empty tenantValidation\n api\n .invoke(\"GET\", `/api/v1/namespaces/${namespace}/tenants`)\n .then((res: any[]) => {\n const tenantsList = get(res, \"tenants\", []);\n\n if (tenantsList && tenantsList.length > 0) {\n setEmptyNamespace(false);\n setLoadingNamespaceInfo(false);\n return;\n }\n setEmptyNamespace(true);\n\n // Storagequotas retrieval\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${namespace}/resourcequotas/${namespace}-storagequota`\n )\n .then((res: IQuotas) => {\n const elements: IQuotaElement[] = get(res, \"elements\", []);\n setLimitSize(getLimitSizes(res));\n\n const newStorage = elements.map((storageClass: any) => {\n const name = get(storageClass, \"name\", \"\").split(\n \".storageclass.storage.k8s.io/requests.storage\"\n )[0];\n\n return { label: name, value: name };\n });\n\n setStorageClassesList(newStorage);\n\n const stExists = newStorage.findIndex(\n (storageClass) => storageClass.value === selectedStorageClass\n );\n\n if (newStorage.length > 0 && stExists === -1) {\n updateField(\"selectedStorageClass\", newStorage[0].value);\n } else if (newStorage.length === 0) {\n updateField(\"selectedStorageClass\", \"\");\n setStorageClassesList([]);\n }\n setLoadingNamespaceInfo(false);\n })\n .catch((err: ErrorResponseHandler) => {\n setLoadingNamespaceInfo(false);\n setShowCreateButton(true);\n updateField(\"selectedStorageClass\", \"\");\n setStorageClassesList([]);\n console.error(\"Namespace error: \", err);\n });\n })\n .catch((err: ErrorResponseHandler) => {\n setModalErrorSnackMessage({\n errorMessage: \"Error validating if namespace already has tenants\",\n detailedError: err.detailedError,\n });\n });\n }, [\n namespace,\n setLimitSize,\n setModalErrorSnackMessage,\n setStorageClassesList,\n updateField,\n selectedStorageClass,\n ]);\n\n const debounceNamespace = useMemo(\n () => debounce(getNamespaceInformation, 500),\n [getNamespaceInformation]\n );\n\n useEffect(() => {\n if (namespace !== \"\") {\n debounceNamespace();\n setLoadingNamespaceInfo(true);\n\n // Cancel previous debounce calls during useEffect cleanup.\n return debounceNamespace.cancel;\n }\n }, [debounceNamespace, namespace]);\n\n // Validation\n useEffect(() => {\n let customNamespaceError = false;\n let errorMessage = \"\";\n\n if (!emptyNamespace && !loadingNamespaceInfo) {\n customNamespaceError = true;\n errorMessage = \"You can only create one tenant per namespace\";\n } else if (\n storageClasses.length < 1 &&\n emptyNamespace &&\n !loadingNamespaceInfo\n ) {\n customNamespaceError = true;\n errorMessage = \"Please enter a valid namespace\";\n }\n\n const commonValidation = commonFormValidation([\n {\n fieldKey: \"tenant-name\",\n required: true,\n pattern: /^[a-z0-9-]{3,63}$/,\n customPatternMessage:\n \"Name only can contain lowercase letters, numbers and '-'. Min. Length: 3\",\n value: tenantName,\n },\n {\n fieldKey: \"namespace\",\n required: true,\n value: namespace,\n customValidation: customNamespaceError,\n customValidationMessage: errorMessage,\n },\n ]);\n\n const isValid =\n !(\"tenant-name\" in commonValidation) &&\n !(\"namespace\" in commonValidation) &&\n ((formToRender === IMkEnvs.default && storageClasses.length > 0) ||\n (formToRender !== IMkEnvs.default && selectedStorageType !== \"\"));\n\n isPageValid(\"nameTenant\", isValid);\n\n setValidationErrors(commonValidation);\n }, [\n storageClasses,\n namespace,\n tenantName,\n isPageValid,\n emptyNamespace,\n loadingNamespaceInfo,\n selectedStorageType,\n formToRender,\n ]);\n\n const frmValidationCleanup = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n const addNamespace = () => {\n setOpenAddNSConfirm(true);\n };\n\n const closeAddNamespace = (refresh: boolean) => {\n setOpenAddNSConfirm(false);\n\n if (refresh) {\n debounceNamespace();\n }\n };\n\n return (\n \n {openAddNSConfirm && (\n \n )}\n \n \n \n \n \n
\n

Name

\n \n How would you like to name this new tenant?\n \n
\n
\n ) => {\n updateField(\"tenantName\", e.target.value);\n frmValidationCleanup(\"tenant-name\");\n }}\n label=\"Name\"\n value={tenantName}\n required\n error={validationErrors[\"tenant-name\"] || \"\"}\n />\n
\n
\n \n ) => {\n updateField(\"namespace\", e.target.value);\n frmValidationCleanup(\"namespace\");\n }}\n label=\"Namespace\"\n value={namespace}\n error={validationErrors[\"namespace\"] || \"\"}\n overlayIcon={showCreateButton ? : null}\n overlayAction={addNamespace}\n required\n />\n \n {formToRender === IMkEnvs.default ? (\n \n ) => {\n updateField(\n \"selectedStorageClass\",\n e.target.value as string\n );\n }}\n label=\"Storage Class\"\n value={selectedStorageClass}\n options={storageClasses}\n disabled={storageClasses.length < 1}\n />\n \n ) : (\n \n ) => {\n updateField(\n \"selectedStorageType\",\n e.target.value as string\n );\n }}\n label={get(\n mkPanelConfigurations,\n `${formToRender}.variantSelectorLabel`,\n \"Storage Type\"\n )}\n value={selectedStorageType}\n options={get(\n mkPanelConfigurations,\n `${formToRender}.variantSelectorValues`,\n []\n )}\n />\n \n )}\n {formToRender === IMkEnvs.default ? (\n \n ) : (\n get(\n mkPanelConfigurations,\n `${formToRender}.sizingComponent`,\n null\n )\n )}\n
\n
\n
\n \n
\n \n
\n
\n
\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n tenantName: state.tenants.createTenant.fields.nameTenant.tenantName,\n namespace: state.tenants.createTenant.fields.nameTenant.namespace,\n selectedStorageClass:\n state.tenants.createTenant.fields.nameTenant.selectedStorageClass,\n selectedStorageType:\n state.tenants.createTenant.fields.nameTenant.selectedStorageType,\n storageClasses: state.tenants.createTenant.storageClasses,\n});\n\nconst connector = connect(mapState, {\n setModalErrorSnackMessage,\n updateAddField,\n setStorageClassesList,\n setLimitSize,\n isPageValid,\n});\n\nexport default withStyles(styles)(connector(NameTenantMain));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport get from \"lodash/get\";\nimport NameTenantMain from \"./NameTenantMain\";\nimport { IMkEnvs, resourcesConfigurations } from \"./utils\";\nimport { AppState } from \"../../../../../../store\";\n\ninterface ITenantResources {\n features?: string[];\n}\n\nconst TenantResources = ({ features }: ITenantResources) => {\n const [formRender, setFormRender] = useState(null);\n\n useEffect(() => {\n let setConfiguration = IMkEnvs.default;\n\n if (features && features.length !== 0) {\n const possibleVariables = Object.keys(resourcesConfigurations);\n\n possibleVariables.forEach((element) => {\n if (features.includes(element)) {\n setConfiguration = get(\n resourcesConfigurations,\n element,\n IMkEnvs.default\n );\n }\n });\n }\n\n setFormRender(setConfiguration);\n }, [features]);\n\n if (formRender === null) {\n return null;\n }\n\n return ;\n};\n\nconst mapState = (state: AppState) => ({\n features: state.console.session.features,\n});\n\nconst connector = connect(mapState, null);\n\nexport default connector(TenantResources);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport get from \"lodash/get\";\nimport { connect } from \"react-redux\";\nimport Grid from \"@mui/material/Grid\";\nimport { LinearProgress } from \"@mui/material\";\n\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n modalBasic,\n settingsCommon,\n wizardCommon,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport api from \"../../../../common/api\";\nimport { generatePoolName, getBytes } from \"../../../../common/utils\";\nimport GenericWizard from \"../../Common/GenericWizard/GenericWizard\";\nimport { IWizardElement } from \"../../Common/GenericWizard/types\";\nimport { NewServiceAccount } from \"../../Common/CredentialsPrompt/types\";\nimport { ErrorResponseHandler, ITenantCreator } from \"../../../../common/types\";\nimport { KeyPair } from \"../ListTenants/utils\";\n\nimport { setErrorSnackMessage } from \"../../../../actions\";\nimport { getDefaultAffinity, getNodeSelector } from \"../TenantDetails/utils\";\nimport CredentialsPrompt from \"../../Common/CredentialsPrompt/CredentialsPrompt\";\nimport { AppState } from \"../../../../store\";\nimport { ICertificatesItems, IFieldStore } from \"../types\";\nimport { resetAddTenantForm, updateAddField } from \"../actions\";\nimport Configure from \"./Steps/Configure\";\nimport IdentityProvider from \"./Steps/IdentityProvider\";\nimport Security from \"./Steps/Security\";\nimport Encryption from \"./Steps/Encryption\";\nimport Affinity from \"./Steps/Affinity\";\nimport PageHeader from \"../../Common/PageHeader/PageHeader\";\nimport history from \"../../../../history\";\nimport Images from \"./Steps/Images\";\nimport PageLayout from \"../../Common/Layout/PageLayout\";\nimport BackLink from \"../../../../common/BackLink\";\nimport TenantResources from \"./Steps/TenantResources/TenantResources\";\n\ninterface IAddTenantProps {\n setErrorSnackMessage: typeof setErrorSnackMessage;\n resetAddTenantForm: typeof resetAddTenantForm;\n updateAddField: typeof updateAddField;\n fields: IFieldStore;\n certificates: ICertificatesItems;\n selectedStorageClass: string;\n namespace: string;\n validPages: string[];\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n pageBox: {\n border: \"1px solid #EAEAEA\",\n },\n ...modalBasic,\n ...wizardCommon,\n ...settingsCommon,\n });\n\nconst AddTenant = ({\n classes,\n fields,\n certificates,\n selectedStorageClass,\n namespace,\n validPages,\n setErrorSnackMessage,\n resetAddTenantForm,\n}: IAddTenantProps) => {\n // Modals\n const [showNewCredentials, setShowNewCredentials] = useState(false);\n const [createdAccount, setCreatedAccount] =\n useState(null);\n\n // Fields\n const [addSending, setAddSending] = useState(false);\n\n /* Send Information to backend */\n useEffect(() => {\n const tenantName = fields.nameTenant.tenantName;\n const selectedStorageClass = fields.nameTenant.selectedStorageClass;\n const imageName = fields.configure.imageName;\n const customDockerhub = fields.configure.customDockerhub;\n const imageRegistry = fields.configure.imageRegistry;\n const imageRegistryUsername = fields.configure.imageRegistryUsername;\n const imageRegistryPassword = fields.configure.imageRegistryPassword;\n const exposeMinIO = fields.configure.exposeMinIO;\n const exposeConsole = fields.configure.exposeConsole;\n const idpSelection = fields.identityProvider.idpSelection;\n const openIDConfigurationURL =\n fields.identityProvider.openIDConfigurationURL;\n const openIDClientID = fields.identityProvider.openIDClientID;\n const openIDClaimName = fields.identityProvider.openIDClaimName;\n const openIDCallbackURL = fields.identityProvider.openIDCallbackURL;\n const openIDScopes = fields.identityProvider.openIDScopes;\n const openIDSecretID = fields.identityProvider.openIDSecretID;\n const ADURL = fields.identityProvider.ADURL;\n const ADSkipTLS = fields.identityProvider.ADSkipTLS;\n const ADServerInsecure = fields.identityProvider.ADServerInsecure;\n const ADUserNameSearchFilter =\n fields.identityProvider.ADUserNameSearchFilter;\n const ADGroupSearchBaseDN = fields.identityProvider.ADGroupSearchBaseDN;\n const ADGroupSearchFilter = fields.identityProvider.ADGroupSearchFilter;\n const ADGroupNameAttribute = fields.identityProvider.ADGroupNameAttribute;\n const ADUserDNs = fields.identityProvider.ADUserDNs;\n const ADUserNameFormat = fields.identityProvider.ADUserNameFormat;\n const ADLookupBindDN = fields.identityProvider.ADLookupBindDN;\n const ADLookupBindPassword = fields.identityProvider.ADLookupBindPassword;\n const ADUserDNSearchBaseDN = fields.identityProvider.ADUserDNSearchBaseDN;\n const ADUserDNSearchFilter = fields.identityProvider.ADUserDNSearchFilter;\n const ADServerStartTLS = fields.identityProvider.ADServerStartTLS;\n const accessKeys = fields.identityProvider.accessKeys;\n const secretKeys = fields.identityProvider.secretKeys;\n const minioCertificates = certificates.minioCertificates;\n const caCertificates = certificates.caCertificates;\n const consoleCaCertificates = certificates.consoleCaCertificates;\n const consoleCertificate = certificates.consoleCertificate;\n const serverCertificate = certificates.serverCertificate;\n const clientCertificate = certificates.clientCertificate;\n const vaultCertificate = certificates.vaultCertificate;\n const vaultCA = certificates.vaultCA;\n const gemaltoCA = certificates.gemaltoCA;\n const enableEncryption = fields.encryption.enableEncryption;\n const encryptionType = fields.encryption.encryptionType;\n const gemaltoEndpoint = fields.encryption.gemaltoEndpoint;\n const gemaltoToken = fields.encryption.gemaltoToken;\n const gemaltoDomain = fields.encryption.gemaltoDomain;\n const gemaltoRetry = fields.encryption.gemaltoRetry;\n const awsEndpoint = fields.encryption.awsEndpoint;\n const awsRegion = fields.encryption.awsRegion;\n const awsKMSKey = fields.encryption.awsKMSKey;\n const awsAccessKey = fields.encryption.awsAccessKey;\n const awsSecretKey = fields.encryption.awsSecretKey;\n const awsToken = fields.encryption.awsToken;\n const vaultEndpoint = fields.encryption.vaultEndpoint;\n const vaultEngine = fields.encryption.vaultEngine;\n const vaultNamespace = fields.encryption.vaultNamespace;\n const vaultPrefix = fields.encryption.vaultPrefix;\n const vaultAppRoleEngine = fields.encryption.vaultAppRoleEngine;\n const vaultId = fields.encryption.vaultId;\n const vaultSecret = fields.encryption.vaultSecret;\n const vaultRetry = fields.encryption.vaultRetry;\n const vaultPing = fields.encryption.vaultPing;\n const azureEndpoint = fields.encryption.azureEndpoint;\n const azureTenantID = fields.encryption.azureTenantID;\n const azureClientID = fields.encryption.azureClientID;\n const azureClientSecret = fields.encryption.azureClientSecret;\n const gcpProjectID = fields.encryption.gcpProjectID;\n const gcpEndpoint = fields.encryption.gcpEndpoint;\n const gcpClientEmail = fields.encryption.gcpClientEmail;\n const gcpClientID = fields.encryption.gcpClientID;\n const gcpPrivateKeyID = fields.encryption.gcpPrivateKeyID;\n const gcpPrivateKey = fields.encryption.gcpPrivateKey;\n const enableAutoCert = fields.security.enableAutoCert;\n const enableTLS = fields.security.enableTLS;\n const ecParity = fields.tenantSize.ecParity;\n const distribution = fields.tenantSize.distribution;\n const tenantCustom = fields.configure.tenantCustom;\n const logSearchCustom = fields.configure.logSearchCustom;\n const prometheusCustom = fields.configure.prometheusCustom;\n const logSearchVolumeSize = fields.configure.logSearchVolumeSize;\n const logSearchSelectedStorageClass =\n fields.configure.logSearchSelectedStorageClass;\n const logSearchImage = fields.configure.logSearchImage;\n const kesImage = fields.configure.kesImage;\n const logSearchPostgresImage = fields.configure.logSearchPostgresImage;\n const logSearchPostgresInitImage =\n fields.configure.logSearchPostgresInitImage;\n const prometheusImage = fields.configure.prometheusImage;\n const prometheusSidecarImage = fields.configure.prometheusSidecarImage;\n const prometheusInitImage = fields.configure.prometheusInitImage;\n const prometheusSelectedStorageClass =\n fields.configure.prometheusSelectedStorageClass;\n const prometheusVolumeSize = fields.configure.prometheusVolumeSize;\n const affinityType = fields.affinity.podAffinity;\n const nodeSelectorLabels = fields.affinity.nodeSelectorLabels;\n const withPodAntiAffinity = fields.affinity.withPodAntiAffinity;\n\n const tenantSecurityContext = fields.configure.tenantSecurityContext;\n const logSearchSecurityContext = fields.configure.logSearchSecurityContext;\n const logSearchPostgresSecurityContext =\n fields.configure.logSearchPostgresSecurityContext;\n const prometheusSecurityContext =\n fields.configure.prometheusSecurityContext;\n const kesSecurityContext = fields.encryption.kesSecurityContext;\n const kesReplicas = fields.encryption.replicas;\n\n if (addSending) {\n const poolName = generatePoolName([]);\n\n let affinityObject = {};\n\n switch (affinityType) {\n case \"default\":\n affinityObject = {\n affinity: getDefaultAffinity(tenantName, poolName),\n };\n break;\n case \"nodeSelector\":\n affinityObject = {\n affinity: getNodeSelector(\n nodeSelectorLabels,\n withPodAntiAffinity,\n tenantName,\n poolName\n ),\n };\n break;\n }\n\n const erasureCode = ecParity.split(\":\")[1];\n\n let dataSend: ITenantCreator = {\n name: tenantName,\n namespace: namespace,\n access_key: \"\",\n secret_key: \"\",\n access_keys: [],\n secret_keys: [],\n enable_tls: enableTLS && enableAutoCert,\n enable_console: true,\n enable_prometheus: true,\n service_name: \"\",\n image: imageName,\n expose_minio: exposeMinIO,\n expose_console: exposeConsole,\n pools: [\n {\n name: poolName,\n servers: distribution.nodes,\n volumes_per_server: distribution.disks,\n volume_configuration: {\n size: distribution.pvSize,\n storage_class_name: selectedStorageClass,\n },\n securityContext: tenantCustom ? tenantSecurityContext : null,\n ...affinityObject,\n },\n ],\n erasureCodingParity: parseInt(erasureCode, 10),\n };\n\n // Set Resources\n if (\n fields.tenantSize.resourcesCPURequest !== \"\" ||\n fields.tenantSize.resourcesCPULimit !== \"\" ||\n fields.tenantSize.resourcesMemoryRequest !== \"\" ||\n fields.tenantSize.resourcesMemoryLimit !== \"\"\n ) {\n dataSend.pools[0].resources = {};\n // requests\n if (\n fields.tenantSize.resourcesCPURequest !== \"\" ||\n fields.tenantSize.resourcesMemoryRequest !== \"\"\n ) {\n dataSend.pools[0].resources.requests = {};\n if (fields.tenantSize.resourcesCPURequest !== \"\") {\n dataSend.pools[0].resources.requests.cpu = parseInt(\n fields.tenantSize.resourcesCPURequest\n );\n }\n if (fields.tenantSize.resourcesMemoryRequest !== \"\") {\n dataSend.pools[0].resources.requests.memory = parseInt(\n getBytes(fields.tenantSize.resourcesMemoryRequest, \"Gi\", true)\n );\n }\n }\n // limits\n if (\n fields.tenantSize.resourcesCPULimit !== \"\" ||\n fields.tenantSize.resourcesMemoryLimit !== \"\"\n ) {\n dataSend.pools[0].resources.limits = {};\n if (fields.tenantSize.resourcesCPULimit !== \"\") {\n dataSend.pools[0].resources.limits.cpu = parseInt(\n fields.tenantSize.resourcesCPULimit\n );\n }\n if (fields.tenantSize.resourcesMemoryLimit !== \"\") {\n dataSend.pools[0].resources.limits.memory = parseInt(\n getBytes(fields.tenantSize.resourcesMemoryLimit, \"Gi\", true)\n );\n }\n }\n }\n if (customDockerhub) {\n dataSend = {\n ...dataSend,\n image_registry: {\n registry: imageRegistry,\n username: imageRegistryUsername,\n password: imageRegistryPassword,\n },\n };\n }\n\n if (logSearchCustom) {\n dataSend = {\n ...dataSend,\n logSearchConfiguration: {\n storageClass:\n logSearchSelectedStorageClass === \"default\"\n ? \"\"\n : logSearchSelectedStorageClass,\n storageSize: parseInt(logSearchVolumeSize),\n image: logSearchImage,\n postgres_image: logSearchPostgresImage,\n postgres_init_image: logSearchPostgresInitImage,\n securityContext: logSearchSecurityContext,\n postgres_securityContext: logSearchPostgresSecurityContext,\n },\n };\n } else {\n dataSend = {\n ...dataSend,\n logSearchConfiguration: {\n image: logSearchImage,\n postgres_image: logSearchPostgresImage,\n postgres_init_image: logSearchPostgresInitImage,\n },\n };\n }\n\n if (prometheusCustom) {\n dataSend = {\n ...dataSend,\n prometheusConfiguration: {\n storageClass:\n prometheusSelectedStorageClass === \"default\"\n ? \"\"\n : prometheusSelectedStorageClass,\n storageSize: parseInt(prometheusVolumeSize),\n image: prometheusImage,\n sidecar_image: prometheusSidecarImage,\n init_image: prometheusInitImage,\n securityContext: prometheusSecurityContext,\n },\n };\n } else {\n dataSend = {\n ...dataSend,\n prometheusConfiguration: {\n image: prometheusImage,\n sidecar_image: prometheusSidecarImage,\n init_image: prometheusInitImage,\n },\n };\n }\n\n let tenantCerts: any = null;\n let consoleCerts: any = null;\n let caCerts: any = null;\n let consoleCaCerts: any = null;\n\n if (caCertificates.length > 0) {\n caCerts = {\n ca_certificates: caCertificates\n .map((keyPair: KeyPair) => keyPair.encoded_cert)\n .filter((keyPair) => keyPair),\n };\n }\n\n if (consoleCaCertificates.length > 0) {\n consoleCaCerts = {\n console_ca_certificates: consoleCaCertificates\n .map((keyPair: KeyPair) => keyPair.encoded_cert)\n .filter((keyPair) => keyPair),\n };\n }\n\n if (enableTLS && minioCertificates.length > 0) {\n tenantCerts = {\n minio: minioCertificates\n .map((keyPair: KeyPair) => ({\n crt: keyPair.encoded_cert,\n key: keyPair.encoded_key,\n }))\n .filter((keyPair) => keyPair.crt && keyPair.key),\n };\n }\n\n if (\n enableTLS &&\n consoleCertificate.encoded_cert !== \"\" &&\n consoleCertificate.encoded_key !== \"\"\n ) {\n consoleCerts = {\n console: {\n crt: consoleCertificate.encoded_cert,\n key: consoleCertificate.encoded_key,\n },\n };\n }\n\n if (tenantCerts || consoleCerts || caCerts || consoleCaCerts) {\n dataSend = {\n ...dataSend,\n tls: {\n ...tenantCerts,\n ...consoleCerts,\n ...caCerts,\n ...consoleCaCerts,\n },\n };\n }\n\n if (enableEncryption) {\n let insertEncrypt = {};\n\n switch (encryptionType) {\n case \"gemalto\":\n let gemaltoCAIntroduce = {};\n\n if (gemaltoCA.encoded_cert !== \"\") {\n gemaltoCAIntroduce = {\n ca: gemaltoCA.encoded_cert,\n };\n }\n insertEncrypt = {\n gemalto: {\n keysecure: {\n endpoint: gemaltoEndpoint,\n credentials: {\n token: gemaltoToken,\n domain: gemaltoDomain,\n retry: parseInt(gemaltoRetry),\n },\n tls: {\n ...gemaltoCAIntroduce,\n },\n },\n },\n };\n break;\n case \"aws\":\n insertEncrypt = {\n aws: {\n secretsmanager: {\n endpoint: awsEndpoint,\n region: awsRegion,\n kmskey: awsKMSKey,\n credentials: {\n accesskey: awsAccessKey,\n secretkey: awsSecretKey,\n token: awsToken,\n },\n },\n },\n };\n break;\n case \"azure\":\n insertEncrypt = {\n azure: {\n keyvault: {\n endpoint: azureEndpoint,\n credentials: {\n tenant_id: azureTenantID,\n client_id: azureClientID,\n client_secret: azureClientSecret,\n },\n },\n },\n };\n break;\n case \"gcp\":\n insertEncrypt = {\n gcp: {\n secretmanager: {\n project_id: gcpProjectID,\n endpoint: gcpEndpoint,\n credentials: {\n client_email: gcpClientEmail,\n client_id: gcpClientID,\n private_key_id: gcpPrivateKeyID,\n private_key: gcpPrivateKey,\n },\n },\n },\n };\n break;\n case \"vault\":\n let vaultKeyPair = null;\n let vaultCAInsert = null;\n if (\n vaultCertificate.encoded_key !== \"\" &&\n vaultCertificate.encoded_cert !== \"\"\n ) {\n vaultKeyPair = {\n key: vaultCertificate.encoded_key,\n crt: vaultCertificate.encoded_cert,\n };\n }\n if (vaultCA.encoded_cert !== \"\") {\n vaultCAInsert = {\n ca: vaultCA.encoded_cert,\n };\n }\n let vaultTLS = null;\n if (vaultKeyPair || vaultCA) {\n vaultTLS = {\n tls: {\n ...vaultKeyPair,\n ...vaultCAInsert,\n },\n };\n }\n insertEncrypt = {\n vault: {\n endpoint: vaultEndpoint,\n engine: vaultEngine,\n namespace: vaultNamespace,\n prefix: vaultPrefix,\n approle: {\n engine: vaultAppRoleEngine,\n id: vaultId,\n secret: vaultSecret,\n retry: parseInt(vaultRetry),\n },\n ...vaultTLS,\n status: {\n ping: parseInt(vaultPing),\n },\n },\n };\n break;\n }\n\n let encryptionServerKeyPair: any = {};\n let encryptionClientKeyPair: any = {};\n\n if (\n clientCertificate.encoded_key !== \"\" &&\n clientCertificate.encoded_cert !== \"\"\n ) {\n encryptionClientKeyPair = {\n client: {\n key: clientCertificate.encoded_key,\n crt: clientCertificate.encoded_cert,\n },\n };\n }\n\n if (\n serverCertificate.encoded_key !== \"\" &&\n serverCertificate.encoded_cert !== \"\"\n ) {\n encryptionServerKeyPair = {\n server: {\n key: serverCertificate.encoded_key,\n crt: serverCertificate.encoded_cert,\n },\n };\n }\n\n dataSend = {\n ...dataSend,\n encryption: {\n replicas: kesReplicas,\n securityContext: kesSecurityContext,\n image: kesImage,\n ...encryptionClientKeyPair,\n ...encryptionServerKeyPair,\n ...insertEncrypt,\n },\n };\n }\n\n let dataIDP: any = {};\n switch (idpSelection) {\n case \"Built-in\":\n let keyarray = [];\n for (let i = 0; i < accessKeys.length; i++) {\n keyarray.push({\n access_key: accessKeys[i],\n secret_key: secretKeys[i],\n });\n }\n dataIDP = {\n keys: keyarray,\n };\n break;\n case \"OpenID\":\n dataIDP = {\n oidc: {\n configuration_url: openIDConfigurationURL,\n client_id: openIDClientID,\n secret_id: openIDSecretID,\n claim_name: openIDClaimName,\n callback_url: openIDCallbackURL,\n scopes: openIDScopes,\n },\n };\n break;\n case \"AD\":\n dataIDP = {\n active_directory: {\n url: ADURL,\n skip_tls_verification: ADSkipTLS,\n server_insecure: ADServerInsecure,\n username_format: ADUserNameFormat,\n username_search_filter: ADUserNameSearchFilter,\n group_search_base_dn: ADGroupSearchBaseDN,\n group_search_filter: ADGroupSearchFilter,\n group_name_attribute: ADGroupNameAttribute,\n user_dns: ADUserDNs,\n lookup_bind_dn: ADLookupBindDN,\n lookup_bind_password: ADLookupBindPassword,\n user_dn_search_base_dn: ADUserDNSearchBaseDN,\n user_dn_search_filter: ADUserDNSearchFilter,\n server_start_tls: ADServerStartTLS,\n },\n };\n break;\n }\n\n dataSend = {\n ...dataSend,\n idp: { ...dataIDP },\n };\n api\n .invoke(\"POST\", `/api/v1/tenants`, dataSend)\n .then((res) => {\n const consoleSAList = get(res, \"console\", []);\n\n let newSrvAcc: NewServiceAccount = {\n idp: get(res, \"externalIDP\", false),\n console: [],\n };\n\n if (consoleSAList) {\n if (Array.isArray(consoleSAList)) {\n const consoleItem = consoleSAList.map((consoleKey) => {\n return {\n accessKey: consoleKey.access_key,\n secretKey: consoleKey.secret_key,\n api: \"s3v4\",\n path: \"auto\",\n url: consoleKey.url,\n };\n });\n\n newSrvAcc.console = consoleItem;\n } else {\n newSrvAcc = {\n console: {\n accessKey: res.console.access_key,\n secretKey: res.console.secret_key,\n url: res.console.url,\n },\n };\n }\n }\n setAddSending(false);\n setShowNewCredentials(true);\n setCreatedAccount(newSrvAcc);\n })\n .catch((err: ErrorResponseHandler) => {\n setAddSending(false);\n setErrorSnackMessage(err);\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [addSending]);\n\n const cancelButton = {\n label: \"Cancel\",\n type: \"other\",\n enabled: true,\n action: () => {\n resetAddTenantForm();\n history.push(\"/tenants\");\n },\n };\n const requiredPages = [\n \"nameTenant\",\n \"tenantSize\",\n \"configure\",\n \"affinity\",\n \"identityProvider\",\n \"security\",\n \"encryption\",\n ];\n const createButton = {\n label: \"Create\",\n type: \"submit\",\n enabled:\n !addSending &&\n selectedStorageClass !== \"\" &&\n requiredPages.every((v) => validPages.includes(v)),\n action: () => {\n setAddSending(true);\n },\n };\n\n const wizardSteps: IWizardElement[] = [\n {\n label: \"Setup\",\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n {\n label: \"Configure\",\n advancedOnly: true,\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n {\n label: \"Images\",\n advancedOnly: true,\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n {\n label: \"Pod Placement\",\n advancedOnly: true,\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n {\n label: \"Identity Provider\",\n advancedOnly: true,\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n {\n label: \"Security\",\n advancedOnly: true,\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n {\n label: \"Encryption\",\n advancedOnly: true,\n componentRender: ,\n buttons: [cancelButton, createButton],\n },\n ];\n\n let filteredWizardSteps = wizardSteps;\n\n const closeCredentialsModal = () => {\n resetAddTenantForm();\n history.push(\"/tenants\");\n };\n\n return (\n \n {showNewCredentials && (\n {\n closeCredentialsModal();\n }}\n entity=\"Tenant\"\n />\n )}\n \n \n \n {addSending && (\n \n \n \n )}\n \n \n \n \n \n );\n};\n\nconst mapState = (state: AppState) => ({\n namespace: state.tenants.createTenant.fields.nameTenant.namespace,\n validPages: state.tenants.createTenant.validPages,\n fields: state.tenants.createTenant.fields,\n certificates: state.tenants.createTenant.certificates,\n selectedStorageClass:\n state.tenants.createTenant.fields.nameTenant.selectedStorageClass,\n});\n\nconst connector = connect(mapState, {\n setErrorSnackMessage,\n updateAddField,\n resetAddTenantForm,\n});\n\nexport default withStyles(styles)(connector(AddTenant));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport get from \"lodash/get\";\nimport { ITenant } from \"./types\";\n\nexport interface Opts {\n label: string;\n value: string;\n}\n\nexport interface IQuotaElement {\n hard: number;\n name: string;\n}\n\nexport interface IQuotas {\n elements?: IQuotaElement[];\n name: string;\n}\n\nexport const minMemReq = 2147483648;\n\nexport interface KeyPair {\n id: string;\n encoded_cert: string;\n encoded_key: string;\n cert: string;\n key: string;\n}\n\nexport const ecListTransform = (ecList: string[]): Opts[] => {\n return ecList.map((value) => {\n return { label: value, value };\n });\n};\n\nexport const getLimitSizes = (resourceQuotas: IQuotas) => {\n const quotas: IQuotaElement[] = get(resourceQuotas, \"elements\", []);\n\n const returnQuotas: any = {};\n\n quotas.forEach((rsQuota) => {\n const stCName = rsQuota.name.split(\n \".storageclass.storage.k8s.io/requests.storage\"\n )[0];\n const hard = get(rsQuota, \"hard\", 0);\n const used = get(rsQuota, \"used\", 0);\n\n returnQuotas[stCName] = hard - used;\n });\n\n return returnQuotas;\n};\n\nexport const tenantIsOnline = (tenant: ITenant): boolean => {\n if (tenant.currentState === \"\") {\n return false;\n }\n if (\n !tenant.status &&\n tenant.health_status !== \"green\" &&\n tenant.health_status !== \"yellow\"\n ) {\n return false;\n }\n if (\n tenant.status &&\n tenant.status.health_status !== \"green\" &&\n tenant.status.health_status !== \"yellow\"\n ) {\n return false;\n }\n return true;\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport { IAffinityModel } from \"../../../../common/types\";\n\nexport const getDefaultAffinity = (tenantName: string, poolName: string) => {\n const defaultAffinity: IAffinityModel = {\n podAntiAffinity: {\n requiredDuringSchedulingIgnoredDuringExecution: [\n {\n labelSelector: {\n matchExpressions: [\n {\n key: \"v1.min.io/tenant\",\n operator: \"In\",\n values: [tenantName],\n },\n {\n key: \"v1.min.io/pool\",\n operator: \"In\",\n values: [poolName],\n },\n ],\n },\n topologyKey: \"kubernetes.io/hostname\",\n },\n ],\n },\n };\n return defaultAffinity;\n};\n\nexport const getNodeSelector = (\n labels: string,\n withPodAntiAffinity: boolean,\n tenantName: string,\n poolName: string\n) => {\n // Labels in the form of key1=value1&key2=value2&key3=value3...\n const splittedLabels = labels.split(\"&\");\n let matchExpressions: any = [];\n\n splittedLabels.forEach((label: string) => {\n const splitKeyValue = label.split(\"=\");\n if (splitKeyValue.length === 2) {\n matchExpressions.push({\n key: splitKeyValue[0],\n operator: \"In\",\n values: [splitKeyValue[1]],\n });\n }\n });\n\n const nodeSelector: IAffinityModel = {\n nodeAffinity: {\n requiredDuringSchedulingIgnoredDuringExecution: {\n nodeSelectorTerms: [\n {\n matchExpressions: matchExpressions,\n },\n ],\n },\n },\n };\n if (withPodAntiAffinity) {\n const def = getDefaultAffinity(tenantName, poolName);\n nodeSelector.podAntiAffinity = def.podAntiAffinity;\n }\n console.log(nodeSelector);\n return nodeSelector;\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { ITenant } from \"./ListTenants/types\";\nimport { Opts } from \"./ListTenants/utils\";\nimport {\n ADD_TENANT_ADD_CA_KEYPAIR,\n ADD_TENANT_ADD_CONSOLE_CA_KEYPAIR,\n ADD_TENANT_ADD_CONSOLE_CERT,\n ADD_TENANT_ADD_FILE_TO_CA_KEYPAIR,\n ADD_TENANT_ADD_FILE_TO_CONSOLE_CA_KEYPAIR,\n ADD_TENANT_ADD_FILE_TO_MINIO_KEYPAIR,\n ADD_TENANT_ADD_MINIO_KEYPAIR,\n ADD_TENANT_DELETE_CA_KEYPAIR,\n ADD_TENANT_DELETE_CONSOLE_CA_KEYPAIR,\n ADD_TENANT_DELETE_MINIO_KEYPAIR,\n ADD_TENANT_ENCRYPTION_CLIENT_CERT,\n ADD_TENANT_ENCRYPTION_GEMALTO_CA,\n ADD_TENANT_ENCRYPTION_SERVER_CERT,\n ADD_TENANT_ENCRYPTION_VAULT_CA,\n ADD_TENANT_ENCRYPTION_VAULT_CERT,\n ADD_TENANT_RESET_FORM,\n ADD_TENANT_SET_CURRENT_PAGE,\n ADD_TENANT_SET_LIMIT_SIZE,\n ADD_TENANT_SET_PAGE_VALID,\n ADD_TENANT_SET_STORAGE_CLASSES_LIST,\n ADD_TENANT_UPDATE_FIELD,\n TENANT_DETAILS_SET_CURRENT_TENANT,\n TENANT_DETAILS_SET_LOADING,\n TENANT_DETAILS_SET_TAB,\n TENANT_DETAILS_SET_TENANT,\n ADD_TENANT_SET_KEY_PAIR_VALUE,\n LabelKeyPair,\n} from \"./types\";\n\n// Basic actions\nexport const setWizardPage = (page: number) => {\n return {\n type: ADD_TENANT_SET_CURRENT_PAGE,\n page,\n };\n};\n\nexport const updateAddField = (\n pageName: string,\n fieldName: string,\n value: any\n) => {\n return {\n type: ADD_TENANT_UPDATE_FIELD,\n pageName,\n field: fieldName,\n value,\n };\n};\n\nexport const isPageValid = (pageName: string, valid: boolean) => {\n return {\n type: ADD_TENANT_SET_PAGE_VALID,\n pageName,\n valid,\n };\n};\n\n// Name Tenant actions\n\nexport const setStorageClassesList = (storageClasses: Opts[]) => {\n return {\n type: ADD_TENANT_SET_STORAGE_CLASSES_LIST,\n storageClasses,\n };\n};\n\nexport const setLimitSize = (limitSize: any) => {\n return {\n type: ADD_TENANT_SET_LIMIT_SIZE,\n limitSize,\n };\n};\n\n// Security actions\n\nexport const addCaCertificate = () => {\n return {\n type: ADD_TENANT_ADD_CA_KEYPAIR,\n };\n};\n\nexport const deleteCaCertificate = (id: string) => {\n return {\n type: ADD_TENANT_DELETE_CA_KEYPAIR,\n id,\n };\n};\n\nexport const addFileToCaCertificates = (\n id: string,\n key: string,\n fileName: string,\n value: string\n) => {\n return {\n type: ADD_TENANT_ADD_FILE_TO_CA_KEYPAIR,\n id,\n key,\n fileName,\n value,\n };\n};\n\nexport const addConsoleCaCertificate = () => {\n return {\n type: ADD_TENANT_ADD_CONSOLE_CA_KEYPAIR,\n };\n};\n\nexport const deleteConsoleCaCertificate = (id: string) => {\n return {\n type: ADD_TENANT_DELETE_CONSOLE_CA_KEYPAIR,\n id,\n };\n};\n\nexport const addFileToConsoleCaCertificates = (\n id: string,\n key: string,\n fileName: string,\n value: string\n) => {\n return {\n type: ADD_TENANT_ADD_FILE_TO_CONSOLE_CA_KEYPAIR,\n id,\n key,\n fileName,\n value,\n };\n};\n\nexport const addKeyPair = () => {\n return {\n type: ADD_TENANT_ADD_MINIO_KEYPAIR,\n };\n};\n\nexport const deleteKeyPair = (id: string) => {\n return {\n type: ADD_TENANT_DELETE_MINIO_KEYPAIR,\n id,\n };\n};\n\nexport const addFileToKeyPair = (\n id: string,\n key: string,\n fileName: string,\n value: string\n) => {\n return {\n type: ADD_TENANT_ADD_FILE_TO_MINIO_KEYPAIR,\n id,\n key,\n fileName,\n value,\n };\n};\n\nexport const addConsoleCertificate = (\n key: string,\n fileName: string,\n value: string\n) => {\n return {\n type: ADD_TENANT_ADD_CONSOLE_CERT,\n key,\n fileName,\n value,\n };\n};\n\nexport const addFileServerCert = (\n key: string,\n fileName: string,\n value: string\n) => {\n return {\n type: ADD_TENANT_ENCRYPTION_SERVER_CERT,\n key,\n fileName,\n value,\n };\n};\n\nexport const addFileClientCert = (\n key: string,\n fileName: string,\n value: string\n) => {\n return {\n type: ADD_TENANT_ENCRYPTION_CLIENT_CERT,\n key,\n fileName,\n value,\n };\n};\n\nexport const addFileVaultCert = (\n key: string,\n fileName: string,\n value: string\n) => {\n return {\n type: ADD_TENANT_ENCRYPTION_VAULT_CERT,\n key,\n fileName,\n value,\n };\n};\n\nexport const addFileVaultCa = (fileName: string, value: string) => {\n return {\n type: ADD_TENANT_ENCRYPTION_VAULT_CA,\n fileName,\n value,\n };\n};\n\nexport const addFileGemaltoCa = (fileName: string, value: string) => {\n return {\n type: ADD_TENANT_ENCRYPTION_GEMALTO_CA,\n fileName,\n value,\n };\n};\n\nexport const resetAddTenantForm = () => {\n return {\n type: ADD_TENANT_RESET_FORM,\n };\n};\n\nexport const setTenantDetailsLoad = (loading: boolean) => {\n return {\n type: TENANT_DETAILS_SET_LOADING,\n state: loading,\n };\n};\n\nexport const setTenantName = (tenantName: string, tenantNamespace: string) => {\n return {\n type: TENANT_DETAILS_SET_CURRENT_TENANT,\n name: tenantName,\n namespace: tenantNamespace,\n };\n};\n\nexport const setTenantInfo = (tenant: ITenant | null) => {\n return {\n type: TENANT_DETAILS_SET_TENANT,\n tenant,\n };\n};\n\nexport const setTenantTab = (tab: string) => {\n return {\n type: TENANT_DETAILS_SET_TAB,\n tab,\n };\n};\n\nexport const setKeyValuePairs = (newArray: LabelKeyPair[]) => {\n return {\n type: ADD_TENANT_SET_KEY_PAIR_VALUE,\n newArray,\n };\n};\n","import React from \"react\";\nimport Typography from \"@mui/material/Typography\";\nimport { Theme } from \"@mui/material/styles\";\n\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n errorBlock: {\n color: theme.palette?.error.main || \"#C83B51\",\n },\n });\n\ninterface IErrorBlockProps {\n classes: any;\n errorMessage: string;\n withBreak?: boolean;\n}\n\nconst ErrorBlock = ({\n classes,\n errorMessage,\n withBreak = true,\n}: IErrorBlockProps) => {\n return (\n \n {withBreak &&
}\n \n {errorMessage}\n \n
\n );\n};\n\nexport default withStyles(styles)(ErrorBlock);\n"],"names":["withStyles","theme","createStyles","link","display","alignItems","textDecoration","maxWidth","padding","color","palette","primary","light","fontSize","icon","marginRight","justifyContent","width","to","label","classes","className","executeOnClick","onClick","container","flexFlow","inputWithCopy","background","height","inputLabel","fieldBasic","value","OutlinedInput","readOnly","endAdornment","InputAdornment","position","text","BoxIconButton","tooltip","onMouseDown","edge","warningBlock","margin","credentialTitle","fontWeight","buttonContainer","textAlign","marginTop","credentialsPanel","overflowY","maxHeight","promptTitle","buttonSpacer","promptIcon","newServiceAccount","open","closeModal","entity","consoleCreds","get","idp","ModalWrapper","modalOpen","onClose","title","titleIcon","Grid","item","xs","formScrollable","Array","isArray","map","credentialsPair","index","accessKey","secretKey","WarnIcon","Button","variant","consoleExtras","cCreds","itemMap","url","access_key","secret_key","api","path","console","filename","element","document","createElement","setAttribute","encodeURIComponent","style","body","appendChild","click","removeChild","download","JSON","stringify","endIcon","tooltipHelper","valueString","whiteSpace","overflow","textOverflow","fileInputField","fileInputStyles","textBoxContainer","border","paddingLeft","onChange","id","name","disabled","required","error","accept","useState","showFileSelector","setShowSelector","fieldBottom","fieldContainer","errorInField","InputLabel","htmlFor","fieldLabelError","tooltipContainer","Tooltip","placement","HelpIcon","type","e","fileName","evt","callback","file","target","files","reader","FileReader","readAsDataURL","onload","fileBase64","result","fileArray","toString","split","length","fileProcess","data","IconButton","component","disableRipple","disableFocusRipple","size","Cancel","ErrorBlock","errorMessage","fileReselect","AttachFile","pageContentStyles","children","contentSpacer","IMkEnvs","connector","connect","state","storageClasses","tenants","createTenant","customImage","fields","configure","imageName","customDockerhub","imageRegistry","imageRegistryUsername","imageRegistryPassword","exposeMinIO","exposeConsole","prometheusCustom","tenantCustom","logSearchCustom","logSearchVolumeSize","logSearchSizeFactor","prometheusVolumeSize","prometheusSizeFactor","logSearchSelectedStorageClass","logSearchImage","kesImage","logSearchPostgresImage","logSearchPostgresInitImage","prometheusSelectedStorageClass","prometheusImage","prometheusSidecarImage","prometheusInitImage","selectedStorageClass","nameTenant","tenantSecurityContext","logSearchSecurityContext","logSearchPostgresSecurityContext","prometheusSecurityContext","updateAddField","isPageValid","configSectionItem","tenantCustomizationFields","marginLeft","containerItem","fieldGroup","createTenantCommon","paddingTop","marginBottom","responsiveSectionItem","logSearchCustomFields","fieldSpaceTop","prometheusCustomFields","modalBasic","wizardCommon","validationErrors","setValidationErrors","configureSTClasses","updateField","useCallback","field","useEffect","customAccountValidation","fieldKey","runAsUser","customValidation","parseInt","customValidationMessage","runAsGroup","fsGroup","pattern","customPatternMessage","commonVal","commonFormValidation","Object","keys","filter","cleanValidation","fieldName","clearValidationError","Paper","paperWrapper","headerElement","h3Section","descriptionText","FormSwitchWrapper","checked","multiContainer","InputBoxWrapper","min","runAsNonRoot","SelectWrapper","options","idpSelection","identityProvider","accessKeys","secretKeys","openIDConfigurationURL","openIDClientID","openIDSecretID","openIDCallbackURL","openIDClaimName","openIDScopes","ADURL","ADSkipTLS","ADServerInsecure","ADUserNameSearchFilter","ADGroupSearchBaseDN","ADGroupSearchFilter","ADGroupNameAttribute","ADUserDNs","ADUserNameFormat","ADLookupBindDN","ADLookupBindPassword","ADUserDNSearchBaseDN","ADUserDNSearchFilter","ADServerStartTLS","shortened","gridTemplateColumns","gridGap","buttonTray","overlayAction","protocolRadioOptions","adUserDnRows","formFieldStyles","updateUserField","newUserField","updatePwordField","updateADUserField","newADUserDNsField","customIDPValidation","i","push","inputs","_","Fragment","placeholder","Add","splice","RemoveIcon","getRandomString","Casino","Delete","RadioGroupSelector","currentSelection","selectorOptions","formFieldRow","Typography","gutterBottom","enableTLS","security","enableAutoCert","enableCustomCerts","minioCertificates","certificates","caCertificates","addFileToCaCertificates","deleteCaCertificate","addCaCertificate","addKeyPair","addFileToKeyPair","deleteKeyPair","minioCertificateRows","borderBottom","flex","fileItem","minWidth","minioCertsContainer","minioCACertsRow","rowActions","keyPair","FileSelector","encodedValue","cert","key","AddIcon","replicas","encryption","enableEncryption","encryptionType","gemaltoEndpoint","gemaltoToken","gemaltoDomain","gemaltoRetry","awsEndpoint","awsRegion","awsKMSKey","awsAccessKey","awsSecretKey","awsToken","vaultEndpoint","vaultEngine","vaultNamespace","vaultPrefix","vaultAppRoleEngine","vaultId","vaultSecret","vaultRetry","vaultPing","azureEndpoint","azureTenantID","azureClientID","azureClientSecret","gcpProjectID","gcpEndpoint","gcpClientEmail","gcpClientID","gcpPrivateKeyID","gcpPrivateKey","enableCustomCertsForKES","serverCertificate","clientCertificate","vaultCertificate","vaultCA","gemaltoCA","kesSecurityContext","addFileServerCert","addFileClientCert","addFileVaultCert","addFileVaultCa","addFileGemaltoCa","encryptionTypeOptions","mutualTlsConfig","rightSpacer","responsiveContainer","encryptionAvailable","encoded_key","encoded_cert","encryptionValidation","podAffinity","affinity","nodeSelectorLabels","withPodAntiAffinity","keyValuePairs","nodeSelectorPairs","setModalErrorSnackMessage","setKeyValuePairs","affinityConfigField","affinityFieldLabel","radioField","affinityLabelKey","affinityLabelValue","affinityRow","loading","setLoading","keyValueMap","setKeyValueMap","keyOptions","setKeyOptions","then","res","k","catch","err","vl","kvp","kvs","a","indexOf","join","valid","splittedLabels","forEach","splitItem","affinityHelpText","newKey","arrCp","assign","v","mapDispatchToProps","setErrorSnackMessage","wrapText","wordWrap","deleteDialogStyles","namespace","addNamespaceOpen","closeAddNamespaceModalAndRefresh","addNamespaceLoading","setAddNamespaceLoading","ConfirmDialog","confirmText","confirmButtonProps","isOpen","isLoading","onConfirm","confirmationContent","LinearProgress","DialogContentText","volumeSize","tenantSize","sizeFactor","drivesPerServer","nodes","memoryNode","resourcesMemoryRequest","ecParity","ecParityChoices","cleanECChoices","resourcesSize","distribution","ecParityCalc","limitSize","cpuToUse","resourcesCPURequest","integrationSelection","root","table","usableInformation","storageFactors","find","erasureCode","Divider","Table","TableBody","TableRow","TableCell","scope","align","typeSelection","storageClass","disks","niceBytes","pvSize","persistentVolumes","rawCapacity","maxCapacity","Math","floor","maxFailureTolerations","CPU","memory","driveSize","sizeUnit","maxAllocatableResources","maxCPUsUse","maxMemorySize","resourcesSpecifyLimit","resourcesCPURequestError","resourcesCPULimitError","resourcesCPULimit","resourcesMemoryRequestError","resourcesMemoryLimitError","resourcesMemoryLimit","compositeFieldContainer","compositeAddOn","memoryExists","cpuExists","maxMemory","mem_priority","max_allocatable_mem","cpu_priority","max_allocatable_cpu","maxAllocatableCPU","baseCpuUse","max","baseMemoryUse","isNaN","validity","log","errorFlag","setErrorFlag","nodeError","setNodeError","ecCodeValidated","erasureCodeCalc","includes","defaultEC","factor","getBytes","clusterCapacity","unit","distrCalculate","calculateDistribution","parsedSize","commonValidation","trim","ecList","ecListTransform","k8sfactorForDropdown","selectedStorageType","formToRender","updateMainField","undefined","setConfigs","mkPanelConfigurations","mainSelection","resourcesConfigurations","aws","azure","gcp","variantSelectorLabel","variantSelectorValues","configurations","sizingComponent","default","tenantName","setStorageClassesList","setLimitSize","sizePreview","emptyNamespace","setEmptyNamespace","loadingNamespaceInfo","setLoadingNamespaceInfo","showCreateButton","setShowCreateButton","openAddNSConfirm","setOpenAddNSConfirm","getNamespaceInformation","tenantsList","elements","getLimitSizes","newStorage","stExists","findIndex","detailedError","debounceNamespace","useMemo","debounce","cancel","customNamespaceError","isValid","frmValidationCleanup","refresh","md","sx","minHeight","overlayIcon","features","session","formRender","setFormRender","setConfiguration","validPages","resetAddTenantForm","pageBox","settingsCommon","showNewCredentials","setShowNewCredentials","createdAccount","setCreatedAccount","addSending","setAddSending","consoleCaCertificates","consoleCertificate","affinityType","kesReplicas","poolName","generatePoolName","affinityObject","getDefaultAffinity","getNodeSelector","dataSend","access_keys","secret_keys","enable_tls","enable_console","enable_prometheus","service_name","image","expose_minio","expose_console","pools","servers","volumes_per_server","volume_configuration","storage_class_name","securityContext","erasureCodingParity","resources","requests","cpu","limits","image_registry","registry","username","password","logSearchConfiguration","storageSize","postgres_image","postgres_init_image","postgres_securityContext","prometheusConfiguration","sidecar_image","init_image","tenantCerts","consoleCerts","caCerts","consoleCaCerts","ca_certificates","console_ca_certificates","minio","crt","tls","insertEncrypt","gemaltoCAIntroduce","ca","gemalto","keysecure","endpoint","credentials","token","domain","retry","secretsmanager","region","kmskey","accesskey","secretkey","keyvault","tenant_id","client_id","client_secret","secretmanager","project_id","client_email","private_key_id","private_key","vaultKeyPair","vaultCAInsert","vaultTLS","vault","engine","prefix","approle","secret","status","ping","encryptionServerKeyPair","encryptionClientKeyPair","client","server","dataIDP","keyarray","oidc","configuration_url","secret_id","claim_name","callback_url","scopes","active_directory","skip_tls_verification","server_insecure","username_format","username_search_filter","group_search_base_dn","group_search_filter","group_name_attribute","user_dns","lookup_bind_dn","lookup_bind_password","user_dn_search_base_dn","user_dn_search_filter","server_start_tls","consoleSAList","newSrvAcc","consoleItem","consoleKey","cancelButton","enabled","action","history","createButton","every","filteredWizardSteps","componentRender","buttons","advancedOnly","CredentialsPrompt","PageHeader","BackLink","PageLayout","GenericWizard","wizardSteps","resourceQuotas","quotas","returnQuotas","rsQuota","stCName","hard","used","tenantIsOnline","tenant","currentState","health_status","podAntiAffinity","requiredDuringSchedulingIgnoredDuringExecution","labelSelector","matchExpressions","operator","values","topologyKey","labels","splitKeyValue","nodeSelector","nodeAffinity","nodeSelectorTerms","def","pageName","ADD_TENANT_UPDATE_FIELD","ADD_TENANT_SET_PAGE_VALID","ADD_TENANT_SET_STORAGE_CLASSES_LIST","ADD_TENANT_SET_LIMIT_SIZE","ADD_TENANT_ADD_CA_KEYPAIR","ADD_TENANT_DELETE_CA_KEYPAIR","ADD_TENANT_ADD_FILE_TO_CA_KEYPAIR","ADD_TENANT_ADD_MINIO_KEYPAIR","ADD_TENANT_DELETE_MINIO_KEYPAIR","ADD_TENANT_ADD_FILE_TO_MINIO_KEYPAIR","ADD_TENANT_ENCRYPTION_SERVER_CERT","ADD_TENANT_ENCRYPTION_CLIENT_CERT","ADD_TENANT_ENCRYPTION_VAULT_CERT","ADD_TENANT_ENCRYPTION_VAULT_CA","ADD_TENANT_ENCRYPTION_GEMALTO_CA","ADD_TENANT_RESET_FORM","setTenantDetailsLoad","TENANT_DETAILS_SET_LOADING","setTenantName","tenantNamespace","TENANT_DETAILS_SET_CURRENT_TENANT","setTenantInfo","TENANT_DETAILS_SET_TENANT","setTenantTab","tab","TENANT_DETAILS_SET_TAB","newArray","ADD_TENANT_SET_KEY_PAIR_VALUE","errorBlock","main","withBreak"],"sourceRoot":""} \ No newline at end of file diff --git a/portal-ui/build/static/js/1069.57853a28.chunk.js b/portal-ui/build/static/js/1069.57853a28.chunk.js deleted file mode 100644 index 8a338d901..000000000 --- a/portal-ui/build/static/js/1069.57853a28.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1069],{82461:function(e,a,n){n.d(a,{Z:function(){return j}});var t=n(23430),r=n(18489),o=n(50390),i=n(38342),s=n.n(i),l=n(25594),c=n(36554),d=n(94187),u=n(95467),m=n(46529),p=n(94258),x=n(86509),f=n(4285),h=n(72462),v=n(97538),g=n(82981),Z=n(62559),j=(0,f.Z)((function(e){return(0,x.Z)((0,r.Z)((0,r.Z)((0,r.Z)((0,r.Z)({},h.YI),h.Hr),{},{valueString:{maxWidth:350,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",marginTop:2},fileInputField:{margin:"13px 0","@media (max-width: 900px)":{flexFlow:"column"}}},h.bV),{},{inputLabel:(0,r.Z)((0,r.Z)({},h.YI.inputLabel),{},{fontWeight:"normal"}),textBoxContainer:(0,r.Z)((0,r.Z)({},h.YI.textBoxContainer),{},{maxWidth:"100%",border:"1px solid #eaeaea",paddingLeft:"15px"})}))}))((function(e){var a=e.label,n=e.classes,r=e.onChange,i=e.id,x=e.name,f=e.disabled,h=void 0!==f&&f,j=e.tooltip,b=void 0===j?"":j,C=e.required,y=e.error,N=void 0===y?"":y,S=e.accept,k=void 0===S?"":S,M=e.value,w=void 0===M?"":M,F=(0,o.useState)(!1),E=(0,t.Z)(F,2),L=E[0],B=E[1];return(0,Z.jsx)(o.Fragment,{children:(0,Z.jsxs)(l.ZP,{item:!0,xs:12,className:"".concat(n.fileInputField," ").concat(n.fieldBottom," ").concat(n.fieldContainer," ").concat(""!==N?n.errorInField:""),children:[""!==a&&(0,Z.jsxs)(c.Z,{htmlFor:i,className:"".concat(""!==N?n.fieldLabelError:""," ").concat(n.inputLabel),children:[(0,Z.jsxs)("span",{children:[a,C?"*":""]}),""!==b&&(0,Z.jsx)("div",{className:n.tooltipContainer,children:(0,Z.jsx)(d.Z,{title:b,placement:"top-start",children:(0,Z.jsx)("div",{className:n.tooltip,children:(0,Z.jsx)(v.Z,{})})})})]}),L||""===w?(0,Z.jsxs)("div",{className:n.textBoxContainer,children:[(0,Z.jsx)("input",{type:"file",name:x,onChange:function(e){var a=s()(e,"target.files[0].name","");!function(e,a){var n=e.target.files[0],t=new FileReader;t.readAsDataURL(n),t.onload=function(){var e=t.result;if(e){var n=e.toString().split("base64,");2===n.length&&a(n[1])}}}(e,(function(e){r(e,a)}))},accept:k,required:C,disabled:h,className:n.fileInputField}),""!==w&&(0,Z.jsx)(u.Z,{color:"primary","aria-label":"upload picture",component:"span",onClick:function(){B(!1)},disableRipple:!1,disableFocusRipple:!1,size:"small",children:(0,Z.jsx)(p.Z,{})}),""!==N&&(0,Z.jsx)(g.Z,{errorMessage:N})]}):(0,Z.jsxs)("div",{className:n.fileReselect,children:[(0,Z.jsx)("div",{className:n.valueString,children:w}),(0,Z.jsx)(u.Z,{color:"primary","aria-label":"upload picture",component:"span",onClick:function(){B(!0)},disableRipple:!1,disableFocusRipple:!1,size:"small",children:(0,Z.jsx)(m.Z,{})})]})]})})}))},66964:function(e,a,n){var t=n(18489),r=n(50390),o=n(12066),i=n(25594),s=n(36554),l=n(94187),c=n(95467),d=n(86509),u=n(62449),m=n(4285),p=n(72462),x=n(97538),f=n(44977),h=n(62559),v=(0,u.Z)((function(e){return(0,d.Z)((0,t.Z)({},p.gM))}));function g(e){var a=v();return(0,h.jsx)(o.Z,(0,t.Z)({InputProps:{classes:a}},e))}a.Z=(0,m.Z)((function(e){return(0,d.Z)((0,t.Z)((0,t.Z)((0,t.Z)({},p.YI),p.Hr),{},{textBoxContainer:{flexGrow:1,position:"relative"},overlayAction:{position:"absolute",right:5,top:6,"& svg":{maxWidth:15,maxHeight:15},"&.withLabel":{top:5}},inputLabel:(0,t.Z)((0,t.Z)({},p.YI.inputLabel),{},{fontWeight:"normal"})}))}))((function(e){var a=e.label,n=e.onChange,o=e.value,d=e.id,u=e.name,m=e.type,p=void 0===m?"text":m,v=e.autoComplete,Z=void 0===v?"off":v,j=e.disabled,b=void 0!==j&&j,C=e.multiline,y=void 0!==C&&C,N=e.tooltip,S=void 0===N?"":N,k=e.index,M=void 0===k?0:k,w=e.error,F=void 0===w?"":w,E=e.required,L=void 0!==E&&E,B=e.placeholder,I=void 0===B?"":B,R=e.min,z=e.max,D=e.overlayIcon,A=void 0===D?null:D,K=e.overlayObject,P=void 0===K?null:K,W=e.extraInputProps,O=void 0===W?{}:W,T=e.overlayAction,H=e.noLabelMinWidth,V=void 0!==H&&H,Y=e.pattern,_=void 0===Y?"":Y,q=e.autoFocus,U=void 0!==q&&q,$=e.classes,G=e.className,Q=void 0===G?"":G,X=(0,t.Z)({"data-index":M},O);return"number"===p&&R&&(X.min=R),"number"===p&&z&&(X.max=z),""!==_&&(X.pattern=_),(0,h.jsx)(r.Fragment,{children:(0,h.jsxs)(i.ZP,{container:!0,className:(0,f.Z)(""!==Q?Q:"",""!==F?$.errorInField:$.inputBoxContainer),children:[""!==a&&(0,h.jsxs)(s.Z,{htmlFor:d,className:V?$.noMinWidthLabel:$.inputLabel,children:[(0,h.jsxs)("span",{children:[a,L?"*":""]}),""!==S&&(0,h.jsx)("div",{className:$.tooltipContainer,children:(0,h.jsx)(l.Z,{title:S,placement:"top-start",children:(0,h.jsx)("div",{className:$.tooltip,children:(0,h.jsx)(x.Z,{})})})})]}),(0,h.jsxs)("div",{className:$.textBoxContainer,children:[(0,h.jsx)(g,{id:d,name:u,fullWidth:!0,value:o,autoFocus:U,disabled:b,onChange:n,type:p,multiline:y,autoComplete:Z,inputProps:X,error:""!==F,helperText:F,placeholder:I,className:$.inputRebase}),A&&(0,h.jsx)("div",{className:"".concat($.overlayAction," ").concat(""!==a?"withLabel":""),children:(0,h.jsx)(c.Z,{onClick:T?function(){T()}:function(){return null},size:"small",disableFocusRipple:!1,disableRipple:!1,disableTouchRipple:!1,children:A})}),P&&(0,h.jsx)("div",{className:"".concat($.overlayAction," ").concat(""!==a?"withLabel":""),children:P})]})]})})}))},76352:function(e,a,n){n.d(a,{Z:function(){return M}});var t,r=n(23430),o=n(18489),i=n(50390),s=n(34424),l=n(95467),c=n(97771),d=n(84402),u=n(78426),m=n(93085),p=n(86509),x=n(4285),f=n(72462),h=n(44149),v=n(38342),g=n.n(v),Z=n(92125),j=n(19538),b=n(21278),C=n(62559),y=function(){clearInterval(t)},N={displayErrorMessage:h.zb},S=(0,s.$j)((function(e){return{modalSnackMessage:e.system.modalSnackBar}}),N)((0,x.Z)((function(e){return(0,p.Z)({modalErrorContainer:{position:"absolute",marginTop:10,width:"80%",backgroundColor:"#fff",border:"#C72C48 1px solid",borderLeftWidth:12,borderRadius:3,zIndex:1e3,padding:"10px 15px",left:"50%",transform:"translateX(-50%)",opacity:0,transitionDuration:"0.2s"},modalErrorShow:{opacity:1},closeButton:{position:"absolute",right:5,fontSize:"small",border:0,backgroundColor:"#fff",cursor:"pointer"},errorTitle:{display:"flex",alignItems:"center"},errorLabel:{color:"#000",fontSize:18,fontWeight:500,marginLeft:5,marginRight:25},messageIcon:{color:"#C72C48",display:"flex","& svg":{width:32,height:32}},detailsButton:{color:"#9C9C9C",display:"flex",alignItems:"center",border:0,backgroundColor:"transparent",paddingLeft:5,fontSize:14,transformDuration:"0.3s",cursor:"pointer"},extraDetailsContainer:{fontStyle:"italic",color:"#9C9C9C",lineHeight:0,padding:"0 10px",transition:"all .2s ease-in-out",overflow:"hidden"},extraDetailsOpen:{lineHeight:1,padding:"3px 10px"},arrowElement:{marginLeft:-5},arrowOpen:{transform:"rotateZ(90deg)",transformDuration:"0.3s"}})}))((function(e){var a=e.classes,n=e.modalSnackMessage,o=e.displayErrorMessage,s=e.customStyle,l=(0,i.useState)(!1),c=(0,r.Z)(l,2),d=c[0],u=c[1],m=(0,i.useState)(!1),p=(0,r.Z)(m,2),x=p[0],f=p[1],h=(0,i.useCallback)((function(){f(!1)}),[]);(0,i.useEffect)((function(){x||(o({detailedError:"",errorMessage:""}),u(!1))}),[o,x]),(0,i.useEffect)((function(){""!==n.message&&"error"===n.type&&f(!0)}),[h,n.message,n.type]);var v=g()(n,"message",""),N=g()(n,"detailedErrorMsg","");return"error"!==n.type||""===v?null:(0,C.jsx)(i.Fragment,{children:(0,C.jsxs)("div",{className:"".concat(a.modalErrorContainer," ").concat(x?a.modalErrorShow:""),style:s,onMouseOver:y,onMouseLeave:function(){t=setInterval(h,1e4)},children:[(0,C.jsx)("button",{className:a.closeButton,onClick:h,children:(0,C.jsx)(b.Z,{})}),(0,C.jsxs)("div",{className:a.errorTitle,children:[(0,C.jsx)("span",{className:a.messageIcon,children:(0,C.jsx)(j.Z,{})}),(0,C.jsx)("span",{className:a.errorLabel,children:v})]}),""!==N&&(0,C.jsxs)(i.Fragment,{children:[(0,C.jsx)("div",{className:a.detailsContainerLink,children:(0,C.jsxs)("button",{className:a.detailsButton,onClick:function(){u(!d)},children:["Details",(0,C.jsx)(Z.Z,{className:"".concat(a.arrowElement," ").concat(d?a.arrowOpen:"")})]})}),(0,C.jsx)("div",{className:"".concat(a.extraDetailsContainer," ").concat(d?a.extraDetailsOpen:""),children:N})]})]})})}))),k=(0,s.$j)((function(e){return{modalSnackMessage:e.system.modalSnackBar}}),{setModalSnackMessage:h.MK}),M=(0,x.Z)((function(e){return(0,p.Z)((0,o.Z)((0,o.Z)({},f.Qw),{},{root:{"& .MuiPaper-root":{padding:"1rem 2rem 2rem 1rem"}},content:{padding:25,paddingBottom:0},customDialogSize:{width:"100%",maxWidth:765}},f.sN))}))(k((function(e){var a=e.onClose,n=e.modalOpen,t=e.title,s=e.children,p=e.classes,x=e.wideLimit,f=void 0===x||x,h=e.modalSnackMessage,v=e.noContentPadding,g=e.setModalSnackMessage,Z=e.titleIcon,j=void 0===Z?null:Z,y=(0,i.useState)(!1),N=(0,r.Z)(y,2),k=N[0],M=N[1];(0,i.useEffect)((function(){g("")}),[g]),(0,i.useEffect)((function(){if(h){if(""===h.message)return void M(!1);"error"!==h.type&&M(!0)}}),[h]);var w=f?{classes:{paper:p.customDialogSize}}:{maxWidth:"lg",fullWidth:!0},F="";return h&&(F=h.detailedErrorMsg,(""===h.detailedErrorMsg||h.detailedErrorMsg.length<5)&&(F=h.message)),(0,C.jsxs)(d.Z,(0,o.Z)((0,o.Z)({open:n,classes:p},w),{},{scroll:"paper",onClose:function(e,n){"backdropClick"!==n&&a()},className:p.root,children:[(0,C.jsxs)(u.Z,{className:p.title,children:[(0,C.jsxs)("div",{className:p.titleText,children:[j," ",t]}),(0,C.jsx)("div",{className:p.closeContainer,children:(0,C.jsx)(l.Z,{"aria-label":"close",className:p.closeButton,onClick:a,disableRipple:!0,size:"small",children:(0,C.jsx)(b.Z,{})})})]}),(0,C.jsx)(S,{}),(0,C.jsx)(c.Z,{open:k,className:p.snackBarModal,onClose:function(){M(!1),g("")},message:F,ContentProps:{className:"".concat(p.snackBar," ").concat(h&&"error"===h.type?p.errorSnackBar:"")},autoHideDuration:h&&"error"===h.type?1e4:5e3}),(0,C.jsx)(m.Z,{className:v?"":p.content,children:s})]}))})))},81069:function(e,a,n){n.r(a);var t=n(23430),r=n(18489),o=n(50390),i=n(38342),s=n.n(i),l=n(34424),c=n(86509),d=n(4285),u=n(66946),m=n(81378),p=n(25594),x=n(72462),f=n(44149),h=n(66964),v=n(82461),g=n(30324),Z=n(76352),j=n(98280),b=n(62559),C=(0,l.$j)(null,{setModalErrorSnackMessage:f.zb});a.default=(0,d.Z)((function(e){return(0,c.Z)((0,r.Z)((0,r.Z)({buttonContainer:{textAlign:"right"}},x.oO),x.DF))}))(C((function(e){var a=e.open,n=e.closeModalAndRefresh,r=e.classes,i=e.tierData,l=e.setModalErrorSnackMessage,c=(0,o.useState)(!1),d=(0,t.Z)(c,2),x=d[0],f=d[1],C=(0,o.useState)(""),y=(0,t.Z)(C,2),N=y[0],S=y[1],k=(0,o.useState)(""),M=(0,t.Z)(k,2),w=M[0],F=M[1],E=(0,o.useState)(""),L=(0,t.Z)(E,2),B=L[0],I=L[1],R=(0,o.useState)(""),z=(0,t.Z)(R,2),D=z[0],A=z[1],K=(0,o.useState)(""),P=(0,t.Z)(K,2),W=P[0],O=P[1],T=(0,o.useState)(""),H=(0,t.Z)(T,2),V=H[0],Y=H[1],_=(0,o.useState)(!0),q=(0,t.Z)(_,2),U=q[0],$=q[1],G=s()(i,"type",""),Q=s()(i,"".concat(G,".name"),"");(0,o.useEffect)((function(){var e=!0;"s3"===G||"azure"===G?""!==W&&""!==V||(e=!1):"gcs"===G&&""===D&&(e=!1),$(e)}),[V,W,D,G]);return(0,b.jsx)(Z.Z,{modalOpen:a,titleIcon:(0,b.jsx)(j.mB,{}),onClose:function(){n(!1)},title:"Update Credentials - ".concat(G," / ").concat(Q),children:(0,b.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){e.preventDefault(),f(!0),function(){var e={};"s3"===G||"azure"===G?e={access_key:W,secret_key:V}:"gcs"===G&&(e={creds:D}),""!==Q?g.Z.invoke("PUT","/api/v1/admin/tiers/".concat(G,"/").concat(Q,"/credentials"),e).then((function(){f(!1),n(!0)})).catch((function(e){f(!1),l(e)})):l({errorMessage:"There was an error retrieving tier information",detailedError:""})}()},children:(0,b.jsxs)(p.ZP,{container:!0,children:[(0,b.jsxs)(p.ZP,{item:!0,xs:12,children:["s3"===G&&(0,b.jsxs)(o.Fragment,{children:[(0,b.jsx)("div",{className:r.formFieldRow,children:(0,b.jsx)(h.Z,{id:"accessKey",name:"accessKey",label:"Access Key",placeholder:"Enter Access Key",value:N,onChange:function(e){S(e.target.value)}})}),(0,b.jsx)("div",{className:r.formFieldRow,children:(0,b.jsx)(h.Z,{id:"secretKey",name:"secretKey",label:"Secret Key",placeholder:"Enter Secret Key",value:w,onChange:function(e){F(e.target.value)}})})]}),"gcs"===G&&(0,b.jsx)(o.Fragment,{children:(0,b.jsx)(v.Z,{accept:".json",id:"creds",label:"Credentials",name:"creds",onChange:function(e,a){A(e),I(a)},value:B})}),"azure"===G&&(0,b.jsxs)(o.Fragment,{children:[(0,b.jsx)("div",{className:r.formFieldRow,children:(0,b.jsx)(h.Z,{id:"accountName",name:"accountName",label:"Account Name",placeholder:"Enter Account Name",value:W,onChange:function(e){O(e.target.value)}})}),(0,b.jsx)("div",{className:r.formFieldRow,children:(0,b.jsx)(h.Z,{id:"accountKey",name:"accountKey",label:"Account Key",placeholder:"Enter Account Key",value:V,onChange:function(e){Y(e.target.value)}})})]})]}),(0,b.jsx)(p.ZP,{item:!0,xs:12,className:r.buttonContainer,children:(0,b.jsx)(u.Z,{type:"submit",variant:"contained",color:"primary",disabled:x||!U,children:"Save"})}),x&&(0,b.jsx)(p.ZP,{item:!0,xs:12,children:(0,b.jsx)(m.Z,{})})]})})})})))},82981:function(e,a,n){var t=n(50390),r=n(35477),o=n(86509),i=n(4285),s=n(62559);a.Z=(0,i.Z)((function(e){var a;return(0,o.Z)({errorBlock:{color:(null===(a=e.palette)||void 0===a?void 0:a.error.main)||"#C83B51"}})}))((function(e){var a=e.classes,n=e.errorMessage,o=e.withBreak,i=void 0===o||o;return(0,s.jsxs)(t.Fragment,{children:[i&&(0,s.jsx)("br",{}),(0,s.jsx)(r.Z,{component:"p",variant:"body1",className:a.errorBlock,children:n})]})}))},46529:function(e,a,n){var t=n(64119);a.Z=void 0;var r=t(n(66830)),o=n(62559),i=(0,r.default)((0,o.jsx)("path",{d:"M16.5 6v11.5c0 2.21-1.79 4-4 4s-4-1.79-4-4V5c0-1.38 1.12-2.5 2.5-2.5s2.5 1.12 2.5 2.5v10.5c0 .55-.45 1-1 1s-1-.45-1-1V6H10v9.5c0 1.38 1.12 2.5 2.5 2.5s2.5-1.12 2.5-2.5V5c0-2.21-1.79-4-4-4S7 2.79 7 5v12.5c0 3.04 2.46 5.5 5.5 5.5s5.5-2.46 5.5-5.5V6h-1.5z"}),"AttachFile");a.Z=i},94258:function(e,a,n){var t=n(64119);a.Z=void 0;var r=t(n(66830)),o=n(62559),i=(0,r.default)((0,o.jsx)("path",{d:"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z"}),"Cancel");a.Z=i}}]); -//# sourceMappingURL=1069.57853a28.chunk.js.map \ No newline at end of file diff --git a/portal-ui/build/static/js/1069.57853a28.chunk.js.map b/portal-ui/build/static/js/1069.57853a28.chunk.js.map deleted file mode 100644 index 2de5618e4..000000000 --- a/portal-ui/build/static/js/1069.57853a28.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/1069.57853a28.chunk.js","mappings":"yUAuLA,GAAeA,EAAAA,EAAAA,IAvIA,SAACC,GAAD,OACbC,EAAAA,EAAAA,IAAa,kCACRC,EAAAA,IACAC,EAAAA,IAFO,IAGVC,YAAa,CACXC,SAAU,IACVC,WAAY,SACZC,SAAU,SACVC,aAAc,WACdC,UAAW,GAEbC,eAAgB,CACdC,OAAQ,SACR,4BAA6B,CAC3BC,SAAU,YAGXC,EAAAA,IAhBO,IAiBVC,YAAW,kBACNZ,EAAAA,GAAAA,YADK,IAERa,WAAY,WAEdC,kBAAiB,kBACZd,EAAAA,GAAAA,kBADW,IAEdG,SAAU,OACVY,OAAQ,oBACRC,YAAa,cA6GnB,EAzGqB,SAAC,GAYA,IAXpBC,EAWmB,EAXnBA,MACAC,EAUmB,EAVnBA,QACAC,EASmB,EATnBA,SACAC,EAQmB,EARnBA,GACAC,EAOmB,EAPnBA,KAOmB,IANnBC,SAAAA,OAMmB,aALnBC,QAAAA,OAKmB,MALT,GAKS,EAJnBC,EAImB,EAJnBA,SAImB,IAHnBC,MAAAA,OAGmB,MAHX,GAGW,MAFnBC,OAAAA,OAEmB,MAFV,GAEU,MADnBC,MAAAA,OACmB,MADX,GACW,EACnB,GAA4CC,EAAAA,EAAAA,WAAS,GAArD,eAAOC,EAAP,KAAyBC,EAAzB,KAEA,OACE,SAAC,WAAD,WACE,UAACC,EAAA,GAAD,CACEC,MAAI,EACJC,GAAI,GACJC,UAAS,UAAKhB,EAAQV,eAAb,YAA+BU,EAAQiB,YAAvC,YACPjB,EAAQkB,eADD,YAEK,KAAVX,EAAeP,EAAQmB,aAAe,IAL5C,UAOa,KAAVpB,IACC,UAACqB,EAAA,EAAD,CACEC,QAASnB,EACTc,UAAS,UAAe,KAAVT,EAAeP,EAAQsB,gBAAkB,GAA9C,YACPtB,EAAQN,YAHZ,WAME,4BACGK,EACAO,EAAW,IAAM,MAEP,KAAZD,IACC,gBAAKW,UAAWhB,EAAQuB,iBAAxB,UACE,SAACC,EAAA,EAAD,CAASC,MAAOpB,EAASqB,UAAU,YAAnC,UACE,gBAAKV,UAAWhB,EAAQK,QAAxB,UACE,SAACsB,EAAA,EAAD,aAQXhB,GAA8B,KAAVF,GACnB,iBAAKO,UAAWhB,EAAQJ,iBAAxB,WACE,kBACEgC,KAAK,OACLzB,KAAMA,EACNF,SAAU,SAAC4B,GACT,IAAMC,EAAWC,GAAAA,CAAIF,EAAG,uBAAwB,KCnHrC,SAACG,EAAUC,GACpC,IAAMC,EAAOF,EAAIG,OAAOC,MAAM,GACxBC,EAAS,IAAIC,WACnBD,EAAOE,cAAcL,GAErBG,EAAOG,OAAS,WAGd,IAAMC,EAAaJ,EAAOK,OAC1B,GAAID,EAAY,CACd,IAAME,EAAYF,EAAWG,WAAWC,MAAM,WAErB,IAArBF,EAAUG,QACZb,EAASU,EAAU,MDuGXI,CAAYlB,GAAG,SAACmB,GACd/C,EAAS+C,EAAMlB,OAGnBtB,OAAQA,EACRF,SAAUA,EACVF,SAAUA,EACVY,UAAWhB,EAAQV,iBAGV,KAAVmB,IACC,SAACwC,EAAA,EAAD,CACEC,MAAM,UACN,aAAW,iBACXC,UAAU,OACVC,QAAS,WACPxC,GAAgB,IAElByC,eAAe,EACfC,oBAAoB,EACpBC,KAAK,QATP,UAWE,SAACC,EAAA,EAAD,MAIO,KAAVjD,IAAgB,SAACkD,EAAA,EAAD,CAAYC,aAAcnD,QAG7C,iBAAKS,UAAWhB,EAAQ2D,aAAxB,WACE,gBAAK3C,UAAWhB,EAAQhB,YAAxB,SAAsCyB,KACtC,SAACwC,EAAA,EAAD,CACEC,MAAM,UACN,aAAW,iBACXC,UAAU,OACVC,QAAS,WACPxC,GAAgB,IAElByC,eAAe,EACfC,oBAAoB,EACpBC,KAAK,QATP,UAWE,SAACK,EAAA,EAAD,kB,mLElFRC,GAAcC,EAAAA,EAAAA,IAAW,SAAClF,GAAD,OAC7BC,EAAAA,EAAAA,IAAa,UACRkF,EAAAA,QAIP,SAASC,EAAWC,GAClB,IAAMjE,EAAU6D,IAEhB,OACE,SAAC,KAAD,QACEK,WAAY,CAAElE,QAAAA,IACViE,IAsIV,KAAetF,EAAAA,EAAAA,IA5KA,SAACC,GAAD,OACbC,EAAAA,EAAAA,IAAa,0BACRC,EAAAA,IACAC,EAAAA,IAFO,IAGVa,iBAAkB,CAChBuE,SAAU,EACVC,SAAU,YAEZC,cAAe,CACbD,SAAU,WACVE,MAAO,EACPC,IAAK,EACL,QAAS,CACPtF,SAAU,GACVuF,UAAW,IAEb,cAAe,CACbD,IAAK,IAGT7E,YAAW,kBACNZ,EAAAA,GAAAA,YADK,IAERa,WAAY,gBAsJlB,EAjIwB,SAAC,GA0BH,IAzBpBI,EAyBmB,EAzBnBA,MACAE,EAwBmB,EAxBnBA,SACAQ,EAuBmB,EAvBnBA,MACAP,EAsBmB,EAtBnBA,GACAC,EAqBmB,EArBnBA,KAqBmB,IApBnByB,KAAAA,OAoBmB,MApBZ,OAoBY,MAnBnB6C,aAAAA,OAmBmB,MAnBJ,MAmBI,MAlBnBrE,SAAAA,OAkBmB,aAjBnBsE,UAAAA,OAiBmB,aAhBnBrE,QAAAA,OAgBmB,MAhBT,GAgBS,MAfnBsE,MAAAA,OAemB,MAfX,EAeW,MAdnBpE,MAAAA,OAcmB,MAdX,GAcW,MAbnBD,SAAAA,OAamB,aAZnBsE,YAAAA,OAYmB,MAZL,GAYK,EAXnBC,EAWmB,EAXnBA,IACAC,EAUmB,EAVnBA,IAUmB,IATnBC,YAAAA,OASmB,MATL,KASK,MARnBC,cAAAA,OAQmB,MARH,KAQG,MAPnBC,gBAAAA,OAOmB,MAPD,GAOC,EANnBZ,EAMmB,EANnBA,cAMmB,IALnBa,gBAAAA,OAKmB,aAJnBC,QAAAA,OAImB,MAJT,GAIS,MAHnBC,UAAAA,OAGmB,SAFnBpF,EAEmB,EAFnBA,QAEmB,IADnBgB,UAAAA,OACmB,MADP,GACO,EACfqE,GAAe,QAAK,aAAcV,GAAUM,GAchD,MAZa,WAATrD,GAAqBiD,IACvBQ,EAAU,IAAUR,GAGT,WAATjD,GAAqBkD,IACvBO,EAAU,IAAUP,GAGN,KAAZK,IACFE,EAAU,QAAcF,IAIxB,SAAC,WAAD,WACE,UAAC,KAAD,CACEG,WAAS,EACTtE,WAAWuE,EAAAA,EAAAA,GACK,KAAdvE,EAAmBA,EAAY,GACrB,KAAVT,EAAeP,EAAQmB,aAAenB,EAAQwF,mBAJlD,UAOa,KAAVzF,IACC,UAAC,IAAD,CACEsB,QAASnB,EACTc,UACEkE,EAAkBlF,EAAQyF,gBAAkBzF,EAAQN,WAHxD,WAME,4BACGK,EACAO,EAAW,IAAM,MAEP,KAAZD,IACC,gBAAKW,UAAWhB,EAAQuB,iBAAxB,UACE,SAAC,IAAD,CAASE,MAAOpB,EAASqB,UAAU,YAAnC,UACE,gBAAKV,UAAWhB,EAAQK,QAAxB,UACE,SAAC,IAAD,cAQZ,iBAAKW,UAAWhB,EAAQJ,iBAAxB,WACE,SAACoE,EAAD,CACE9D,GAAIA,EACJC,KAAMA,EACNuF,WAAS,EACTjF,MAAOA,EACP2E,UAAWA,EACXhF,SAAUA,EACVH,SAAUA,EACV2B,KAAMA,EACN8C,UAAWA,EACXD,aAAcA,EACdY,WAAYA,EACZ9E,MAAiB,KAAVA,EACPoF,WAAYpF,EACZqE,YAAaA,EACb5D,UAAWhB,EAAQ4F,cAEpBb,IACC,gBACE/D,UAAS,UAAKhB,EAAQqE,cAAb,YACG,KAAVtE,EAAe,YAAc,IAFjC,UAKE,SAAC,IAAD,CACEqD,QACEiB,EACI,WACEA,KAEF,kBAAM,MAEZd,KAAM,QACND,oBAAoB,EACpBD,eAAe,EACfwC,oBAAoB,EAXtB,SAaGd,MAINC,IACC,gBACEhE,UAAS,UAAKhB,EAAQqE,cAAb,YACG,KAAVtE,EAAe,YAAc,IAFjC,SAKGiF,gB,0DC/FXc,E,8MAMEC,EAAgB,WACpBC,cAAcF,IA+FVG,EAAqB,CACzBC,oBAAqBC,EAAAA,IAKvB,GAFkBC,EAAAA,EAAAA,KARD,SAACC,GAAD,MAAsB,CACrCC,kBAAmBD,EAAME,OAAOC,iBAOEP,EAEpC,EAAyBtH,EAAAA,EAAAA,IA3LV,SAACC,GAAD,OACbC,EAAAA,EAAAA,GAAa,CACX4H,oBAAqB,CACnBrC,SAAU,WACV/E,UAAW,GACXqH,MAAO,MACPC,gBAAiB,OACjB9G,OAAQ,oBACR+G,gBAAiB,GACjBC,aAAc,EACdC,OAAQ,IACRC,QAAS,YACTC,KAAM,MACNC,UAAW,mBACXC,QAAS,EACTC,mBAAoB,QAEtBC,eAAgB,CACdF,QAAS,GAEXG,YAAa,CACXjD,SAAU,WACVE,MAAO,EACPgD,SAAU,QACVzH,OAAQ,EACR8G,gBAAiB,OACjBY,OAAQ,WAEVC,WAAY,CACVC,QAAS,OACTC,WAAY,UAEdC,WAAY,CACVzE,MAAO,OACPoE,SAAU,GACV3H,WAAY,IACZiI,WAAY,EACZC,YAAa,IAEfC,YAAa,CACX5E,MAAO,UACPuE,QAAS,OACT,QAAS,CACPf,MAAO,GACPqB,OAAQ,KAGZC,cAAe,CACb9E,MAAO,UACPuE,QAAS,OACTC,WAAY,SACZ7H,OAAQ,EACR8G,gBAAiB,cACjB7G,YAAa,EACbwH,SAAU,GACVW,kBAAmB,OACnBV,OAAQ,WAEVW,sBAAuB,CACrBC,UAAW,SACXjF,MAAO,UACPkF,WAAY,EACZrB,QAAS,SACTsB,WAAY,sBACZlJ,SAAU,UAEZmJ,iBAAkB,CAChBF,WAAY,EACZrB,QAAS,YAEXwB,aAAc,CACZX,YAAa,GAEfY,UAAW,CACTvB,UAAW,iBACXgB,kBAAmB,YAgHAtJ,EAlGN,SAAC,GAKK,IAJvBqB,EAIsB,EAJtBA,QACAsG,EAGsB,EAHtBA,kBACAJ,EAEsB,EAFtBA,oBACAuC,EACsB,EADtBA,YAEA,GAAsC/H,EAAAA,EAAAA,WAAkB,GAAxD,eAAOgI,EAAP,KAAoBC,EAApB,KACA,GAA8CjI,EAAAA,EAAAA,WAAkB,GAAhE,eAAOkI,EAAP,KAAwBC,EAAxB,KAEMC,GAAoBC,EAAAA,EAAAA,cAAY,WACpCF,GAAmB,KAClB,KAEHG,EAAAA,EAAAA,YAAU,WACHJ,IACH1C,EAAoB,CAAE+C,cAAe,GAAIvF,aAAc,KACvDiF,GAAe,MAGhB,CAACzC,EAAqB0C,KAEzBI,EAAAA,EAAAA,YAAU,WAEwB,KAA9B1C,EAAkB4C,SACS,UAA3B5C,EAAkB1E,MAGlBiH,GAAmB,KAGpB,CAACC,EAAmBxC,EAAkB4C,QAAS5C,EAAkB1E,OAEpE,IAIMsH,EAAUnH,GAAAA,CAAIuE,EAAmB,UAAW,IAC5C6C,EAAiBpH,GAAAA,CAAIuE,EAAmB,mBAAoB,IAElE,MAA+B,UAA3BA,EAAkB1E,MAAgC,KAAZsH,EACjC,MAIP,SAAC,EAAAE,SAAD,WACE,iBACEpI,UAAS,UAAKhB,EAAQyG,oBAAb,YACPmC,EAAkB5I,EAAQoH,eAAiB,IAE7CiC,MAAOZ,EACPa,YAAavD,EACbwD,aAAc,WA1DpBzD,EAAS0D,YA0DgCV,EA1DF,MAoDnC,WAQE,mBAAQ9H,UAAWhB,EAAQqH,YAAajE,QAAS0F,EAAjD,UACE,SAACW,EAAA,EAAD,OAEF,iBAAKzI,UAAWhB,EAAQwH,WAAxB,WACE,iBAAMxG,UAAWhB,EAAQ8H,YAAzB,UACE,SAAC4B,EAAA,EAAD,OAEF,iBAAM1I,UAAWhB,EAAQ2H,WAAzB,SAAsCuB,OAEpB,KAAnBC,IACC,UAAC,EAAAC,SAAD,YACE,gBAAKpI,UAAWhB,EAAQ2J,qBAAxB,UACE,oBAAQ3I,UAAWhB,EAAQgI,cAAe5E,QAjChC,WACpBuF,GAAgBD,IAgCN,qBAEE,SAACkB,EAAA,EAAD,CACE5I,UAAS,UAAKhB,EAAQuI,aAAb,YACPG,EAAc1I,EAAQwI,UAAY,YAK1C,gBACExH,UAAS,UAAKhB,EAAQkI,sBAAb,YACPQ,EAAc1I,EAAQsI,iBAAmB,IAF7C,SAKGa,gBC1CTU,GAAYzD,EAAAA,EAAAA,KAJD,SAACC,GAAD,MAAsB,CACrCC,kBAAmBD,EAAME,OAAOC,iBAGE,CAClCsD,qBAAAA,EAAAA,KAGF,GAAenL,EAAAA,EAAAA,IA3IA,SAACC,GAAD,OACbC,EAAAA,EAAAA,IAAa,kBACRkL,EAAAA,IADO,IAEVC,KAAM,CACJ,mBAAoB,CAClBjD,QAAS,wBAGbkD,QAAS,CACPlD,QAAS,GACTmD,cAAe,GAEjBC,iBAAkB,CAChBzD,MAAO,OACPzH,SAAU,MAETmL,EAAAA,OA2HP,CAAkCP,GAxHb,SAAC,GAWF,IAVlBQ,EAUiB,EAVjBA,QACAC,EASiB,EATjBA,UACA7I,EAQiB,EARjBA,MACA8I,EAOiB,EAPjBA,SACAvK,EAMiB,EANjBA,QAMiB,IALjBwK,UAAAA,OAKiB,SAJjBlE,EAIiB,EAJjBA,kBACAmE,EAGiB,EAHjBA,iBACAX,EAEiB,EAFjBA,qBAEiB,IADjBY,UAAAA,OACiB,MADL,KACK,EACjB,GAAwChK,EAAAA,EAAAA,WAAkB,GAA1D,eAAOiK,EAAP,KAAqBC,EAArB,MAEA5B,EAAAA,EAAAA,YAAU,WACRc,EAAqB,MACpB,CAACA,KAEJd,EAAAA,EAAAA,YAAU,WACR,GAAI1C,EAAmB,CACrB,GAAkC,KAA9BA,EAAkB4C,QAEpB,YADA0B,GAAgB,GAIa,UAA3BtE,EAAkB1E,MACpBgJ,GAAgB,MAGnB,CAACtE,IAEJ,IAKMuE,EAAaL,EACf,CACExK,QAAS,CACP8K,MAAO9K,EAAQmK,mBAGnB,CAAElL,SAAU,KAAeyG,WAAW,GAEtCwD,EAAU,GAYd,OAVI5C,IACF4C,EAAU5C,EAAkByE,kBAEa,KAAvCzE,EAAkByE,kBAClBzE,EAAkByE,iBAAiBjI,OAAS,KAE5CoG,EAAU5C,EAAkB4C,WAK9B,UAAC8B,EAAA,GAAD,gBACEC,KAAMX,EACNtK,QAASA,GACL6K,GAHN,IAIEK,OAAQ,QACRb,QAAS,SAACc,EAAOC,GACA,kBAAXA,GACFf,KAGJrJ,UAAWhB,EAAQgK,KAVrB,WAYE,UAACqB,EAAA,EAAD,CAAarK,UAAWhB,EAAQyB,MAAhC,WACE,iBAAKT,UAAWhB,EAAQsL,UAAxB,UACGZ,EADH,IACejJ,MAEf,gBAAKT,UAAWhB,EAAQuL,eAAxB,UACE,SAACtI,EAAA,EAAD,CACE,aAAW,QACXjC,UAAWhB,EAAQqH,YACnBjE,QAASiH,EACThH,eAAa,EACbE,KAAK,QALP,UAOE,SAACkG,EAAA,EAAD,YAKN,SAAC,EAAD,KACA,SAAC+B,EAAA,EAAD,CACEP,KAAMN,EACN3J,UAAWhB,EAAQyL,cACnBpB,QAAS,WA1DbO,GAAgB,GAChBd,EAAqB,KA4DjBZ,QAASA,EACTwC,aAAc,CACZ1K,UAAU,GAAD,OAAKhB,EAAQ2L,SAAb,YACPrF,GAAgD,UAA3BA,EAAkB1E,KACnC5B,EAAQ4L,cACR,KAGRC,iBACEvF,GAAgD,UAA3BA,EAAkB1E,KAAmB,IAAQ,OAGtE,SAACkK,EAAA,EAAD,CAAe9K,UAAWyJ,EAAmB,GAAKzK,EAAQiK,QAA1D,SACGM,a,+OCkEHV,GAAYzD,EAAAA,EAAAA,IAAQ,KAAM,CAC9BD,0BAAAA,EAAAA,KAGF,WAAexH,EAAAA,EAAAA,IApMA,SAACC,GAAD,OACbC,EAAAA,EAAAA,IAAa,gBACXkN,gBAAiB,CACfC,UAAW,UAEVC,EAAAA,IACAC,EAAAA,OA8LP,CAAkCrC,GA3LC,SAAC,GAMN,IAL5BoB,EAK2B,EAL3BA,KACAkB,EAI2B,EAJ3BA,qBACAnM,EAG2B,EAH3BA,QACAoM,EAE2B,EAF3BA,SACAjG,EAC2B,EAD3BA,0BAEA,GAAsCzF,EAAAA,EAAAA,WAAkB,GAAxD,eAAO2L,EAAP,KAAoBC,EAApB,KACA,GAAkC5L,EAAAA,EAAAA,UAAiB,IAAnD,eAAO6L,EAAP,KAAkBC,EAAlB,KACA,GAAkC9L,EAAAA,EAAAA,UAAiB,IAAnD,eAAO+L,EAAP,KAAkBC,EAAlB,KAEA,GAA0BhM,EAAAA,EAAAA,UAAiB,IAA3C,eAAOiM,EAAP,KAAcC,EAAd,KACA,GAAwClM,EAAAA,EAAAA,UAAiB,IAAzD,eAAOmM,EAAP,KAAqBC,EAArB,KAEA,GAAsCpM,EAAAA,EAAAA,UAAiB,IAAvD,eAAOqM,EAAP,KAAoBC,EAApB,KACA,GAAoCtM,EAAAA,EAAAA,UAAiB,IAArD,eAAOuM,EAAP,KAAmBC,EAAnB,KAGA,GAAsCxM,EAAAA,EAAAA,WAAkB,GAAxD,eAAOyM,EAAP,KAAoBC,EAApB,KAEMxL,EAAOG,GAAAA,CAAIqK,EAAU,OAAQ,IAC7BjM,EAAO4B,GAAAA,CAAIqK,EAAD,UAAcxK,EAAd,SAA2B,KAE3CoH,EAAAA,EAAAA,YAAU,WACR,IAAIqE,GAAQ,EAEC,OAATzL,GAA0B,UAATA,EACC,KAAhBmL,GAAqC,KAAfE,IACxBI,GAAQ,GAEQ,QAATzL,GACY,KAAjBiL,IACFQ,GAAQ,GAGZD,EAAeC,KACd,CAACJ,EAAYF,EAAaF,EAAcjL,IAkC3C,OACE,SAAC,IAAD,CACE0I,UAAWW,EACXP,WAAW,SAAC,KAAD,IACXL,QAAS,WACP8B,GAAqB,IAEvB1K,MAAK,+BAA0BG,EAA1B,cAAoCzB,GAN3C,UAQE,iBACEmN,YAAU,EACV7I,aAAa,MACb8I,SAAU,SAAC1L,GACTA,EAAE2L,iBACFlB,GAAe,GA9CL,WAChB,IAAImB,EAAQ,GAEC,OAAT7L,GAA0B,UAATA,EACnB6L,EAAQ,CACNC,WAAYX,EACZY,WAAYV,GAEI,QAATrL,IACT6L,EAAQ,CACNd,MAAOE,IAGE,KAAT1M,EACFyN,EAAAA,EAAAA,OACU,MADV,8BACwChM,EADxC,YACgDzB,EADhD,gBACoEsN,GACjEI,MAAK,WACJvB,GAAe,GACfH,GAAqB,MAEtB2B,OAAM,SAACC,GACNzB,GAAe,GACfnG,EAA0B4H,MAG9B5H,EAA0B,CACxBzC,aAAc,iDACduF,cAAe,KAoBb+E,IANJ,UASE,UAAC,KAAD,CAAM1I,WAAS,EAAf,WACE,UAAC,KAAD,CAAMxE,MAAI,EAACC,GAAI,GAAf,UACY,OAATa,IACC,UAAC,EAAAwH,SAAD,YACE,gBAAKpI,UAAWhB,EAAQiO,aAAxB,UACE,SAAC,IAAD,CACE/N,GAAG,YACHC,KAAK,YACLJ,MAAM,aACN6E,YAAY,mBACZnE,MAAO8L,EACPtM,SAAU,SAAC4B,GACT2K,EAAa3K,EAAEM,OAAO1B,aAI5B,gBAAKO,UAAWhB,EAAQiO,aAAxB,UACE,SAAC,IAAD,CACE/N,GAAG,YACHC,KAAK,YACLJ,MAAM,aACN6E,YAAY,mBACZnE,MAAOgM,EACPxM,SAAU,SAAC4B,GACT6K,EAAa7K,EAAEM,OAAO1B,eAMtB,QAATmB,IACC,SAAC,EAAAwH,SAAD,WACE,SAAC,IAAD,CACE5I,OAAO,QACPN,GAAG,QACHH,MAAM,cACNI,KAAK,QACLF,SAAU,SAACiO,EAAcpM,GACvBgL,EAAgBoB,GAChBtB,EAAS9K,IAEXrB,MAAOkM,MAIH,UAAT/K,IACC,UAAC,EAAAwH,SAAD,YACE,gBAAKpI,UAAWhB,EAAQiO,aAAxB,UACE,SAAC,IAAD,CACE/N,GAAG,cACHC,KAAK,cACLJ,MAAM,eACN6E,YAAY,qBACZnE,MAAOsM,EACP9M,SAAU,SAAC4B,GACTmL,EAAenL,EAAEM,OAAO1B,aAI9B,gBAAKO,UAAWhB,EAAQiO,aAAxB,UACE,SAAC,IAAD,CACE/N,GAAG,aACHC,KAAK,aACLJ,MAAM,cACN6E,YAAY,oBACZnE,MAAOwM,EACPhN,SAAU,SAAC4B,GACTqL,EAAcrL,EAAEM,OAAO1B,mBAOnC,SAAC,KAAD,CAAMK,MAAI,EAACC,GAAI,GAAIC,UAAWhB,EAAQ+L,gBAAtC,UACE,SAAC,IAAD,CACEnK,KAAK,SACLuM,QAAQ,YACRjL,MAAM,UACN9C,SAAUiM,IAAgBc,EAJ5B,oBASDd,IACC,SAAC,KAAD,CAAMvL,MAAI,EAACC,GAAI,GAAf,UACE,SAAC,IAAD,kB,gFCjMd,KAAepC,EAAAA,EAAAA,IA5BA,SAACC,GAAD,aACbC,EAAAA,EAAAA,GAAa,CACXuP,WAAY,CACVlL,OAAO,UAAAtE,EAAMyP,eAAN,eAAe9N,MAAM+N,OAAQ,eAyB1C,EAfmB,SAAC,GAIK,IAHvBtO,EAGsB,EAHtBA,QACA0D,EAEsB,EAFtBA,aAEsB,IADtB6K,UAAAA,OACsB,SACtB,OACE,UAAC,WAAD,WACGA,IAAa,mBACd,SAAC,IAAD,CAAYpL,UAAU,IAAIgL,QAAQ,QAAQnN,UAAWhB,EAAQoO,WAA7D,SACG1K,W,0BC3BL8K,EAAyBC,EAAQ,OAKrCC,EAAQ,OAAU,EAElB,IAAIC,EAAiBH,EAAuBC,EAAQ,QAEhDG,EAAcH,EAAQ,OAEtBI,GAAW,EAAIF,EAAeG,UAAuB,EAAIF,EAAYG,KAAK,OAAQ,CACpFC,EAAG,iQACD,cAEJN,EAAQ,EAAUG,G,0BCfdL,EAAyBC,EAAQ,OAKrCC,EAAQ,OAAU,EAElB,IAAIC,EAAiBH,EAAuBC,EAAQ,QAEhDG,EAAcH,EAAQ,OAEtBI,GAAW,EAAIF,EAAeG,UAAuB,EAAIF,EAAYG,KAAK,OAAQ,CACpFC,EAAG,oLACD,UAEJN,EAAQ,EAAUG","sources":["screens/Console/Common/FormComponents/FileSelector/FileSelector.tsx","screens/Console/Common/FormComponents/FileSelector/utils.ts","screens/Console/Common/FormComponents/InputBoxWrapper/InputBoxWrapper.tsx","screens/Console/Common/FormComponents/ModalError/ModalError.tsx","screens/Console/Common/ModalWrapper/ModalWrapper.tsx","screens/Console/Configurations/TiersConfiguration/UpdateTierCredentialsModal.tsx","screens/shared/ErrorBlock.tsx","../node_modules/@mui/icons-material/AttachFile.js","../node_modules/@mui/icons-material/Cancel.js"],"sourcesContent":["// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport get from \"lodash/get\";\nimport { Grid, InputLabel, Tooltip } from \"@mui/material\";\nimport IconButton from \"@mui/material/IconButton\";\nimport AttachFileIcon from \"@mui/icons-material/AttachFile\";\nimport CancelIcon from \"@mui/icons-material/Cancel\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n fieldBasic,\n fileInputStyles,\n tooltipHelper,\n} from \"../common/styleLibrary\";\nimport { fileProcess } from \"./utils\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\nimport ErrorBlock from \"../../../../shared/ErrorBlock\";\n\ninterface InputBoxProps {\n label: string;\n classes: any;\n onChange: (e: string, i: string) => void;\n id: string;\n name: string;\n disabled?: boolean;\n tooltip?: string;\n required?: boolean;\n error?: string;\n accept?: string;\n value?: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n valueString: {\n maxWidth: 350,\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n marginTop: 2,\n },\n fileInputField: {\n margin: \"13px 0\",\n \"@media (max-width: 900px)\": {\n flexFlow: \"column\",\n },\n },\n ...fileInputStyles,\n inputLabel: {\n ...fieldBasic.inputLabel,\n fontWeight: \"normal\",\n },\n textBoxContainer: {\n ...fieldBasic.textBoxContainer,\n maxWidth: \"100%\",\n border: \"1px solid #eaeaea\",\n paddingLeft: \"15px\",\n },\n });\n\nconst FileSelector = ({\n label,\n classes,\n onChange,\n id,\n name,\n disabled = false,\n tooltip = \"\",\n required,\n error = \"\",\n accept = \"\",\n value = \"\",\n}: InputBoxProps) => {\n const [showFileSelector, setShowSelector] = useState(false);\n\n return (\n \n \n {label !== \"\" && (\n \n \n {label}\n {required ? \"*\" : \"\"}\n \n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n \n )}\n\n {showFileSelector || value === \"\" ? (\n
\n {\n const fileName = get(e, \"target.files[0].name\", \"\");\n fileProcess(e, (data: any) => {\n onChange(data, fileName);\n });\n }}\n accept={accept}\n required={required}\n disabled={disabled}\n className={classes.fileInputField}\n />\n\n {value !== \"\" && (\n {\n setShowSelector(false);\n }}\n disableRipple={false}\n disableFocusRipple={false}\n size=\"small\"\n >\n \n \n )}\n\n {error !== \"\" && }\n
\n ) : (\n
\n
{value}
\n {\n setShowSelector(true);\n }}\n disableRipple={false}\n disableFocusRipple={false}\n size=\"small\"\n >\n \n \n
\n )}\n \n
\n );\n};\n\nexport default withStyles(styles)(FileSelector);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nexport const fileProcess = (evt: any, callback: any) => {\n const file = evt.target.files[0];\n const reader = new FileReader();\n reader.readAsDataURL(file);\n\n reader.onload = () => {\n // reader.readAsDataURL(file) output will be something like: data:application/x-x509-ca-cert;base64,LS0tLS1CRUdJTiBDRVJUSU\n // we care only about the actual base64 part (everything after \"data:application/x-x509-ca-cert;base64,\")\n const fileBase64 = reader.result;\n if (fileBase64) {\n const fileArray = fileBase64.toString().split(\"base64,\");\n\n if (fileArray.length === 2) {\n callback(fileArray[1]);\n }\n }\n };\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React from \"react\";\nimport {\n Grid,\n IconButton,\n InputLabel,\n TextField,\n TextFieldProps,\n Tooltip,\n} from \"@mui/material\";\nimport { OutlinedInputProps } from \"@mui/material/OutlinedInput\";\nimport { InputProps as StandardInputProps } from \"@mui/material/Input\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n fieldBasic,\n inputFieldStyles,\n tooltipHelper,\n} from \"../common/styleLibrary\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\nimport clsx from \"clsx\";\n\ninterface InputBoxProps {\n label: string;\n classes: any;\n onChange: (e: React.ChangeEvent) => void;\n value: string | boolean;\n id: string;\n name: string;\n disabled?: boolean;\n multiline?: boolean;\n type?: string;\n tooltip?: string;\n autoComplete?: string;\n index?: number;\n error?: string;\n required?: boolean;\n placeholder?: string;\n min?: string;\n max?: string;\n overlayIcon?: any;\n overlayAction?: () => void;\n overlayObject?: any;\n extraInputProps?: StandardInputProps[\"inputProps\"];\n noLabelMinWidth?: boolean;\n pattern?: string;\n autoFocus?: boolean;\n className?: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n textBoxContainer: {\n flexGrow: 1,\n position: \"relative\",\n },\n overlayAction: {\n position: \"absolute\",\n right: 5,\n top: 6,\n \"& svg\": {\n maxWidth: 15,\n maxHeight: 15,\n },\n \"&.withLabel\": {\n top: 5,\n },\n },\n inputLabel: {\n ...fieldBasic.inputLabel,\n fontWeight: \"normal\",\n },\n });\n\nconst inputStyles = makeStyles((theme: Theme) =>\n createStyles({\n ...inputFieldStyles,\n })\n);\n\nfunction InputField(props: TextFieldProps) {\n const classes = inputStyles();\n\n return (\n }\n {...props}\n />\n );\n}\n\nconst InputBoxWrapper = ({\n label,\n onChange,\n value,\n id,\n name,\n type = \"text\",\n autoComplete = \"off\",\n disabled = false,\n multiline = false,\n tooltip = \"\",\n index = 0,\n error = \"\",\n required = false,\n placeholder = \"\",\n min,\n max,\n overlayIcon = null,\n overlayObject = null,\n extraInputProps = {},\n overlayAction,\n noLabelMinWidth = false,\n pattern = \"\",\n autoFocus = false,\n classes,\n className = \"\",\n}: InputBoxProps) => {\n let inputProps: any = { \"data-index\": index, ...extraInputProps };\n\n if (type === \"number\" && min) {\n inputProps[\"min\"] = min;\n }\n\n if (type === \"number\" && max) {\n inputProps[\"max\"] = max;\n }\n\n if (pattern !== \"\") {\n inputProps[\"pattern\"] = pattern;\n }\n\n return (\n \n \n {label !== \"\" && (\n \n \n {label}\n {required ? \"*\" : \"\"}\n \n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n \n )}\n\n
\n \n {overlayIcon && (\n \n {\n overlayAction();\n }\n : () => null\n }\n size={\"small\"}\n disableFocusRipple={false}\n disableRipple={false}\n disableTouchRipple={false}\n >\n {overlayIcon}\n \n
\n )}\n {overlayObject && (\n \n {overlayObject}\n \n )}\n \n \n
\n );\n};\n\nexport default withStyles(styles)(InputBoxWrapper);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\n// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport get from \"lodash/get\";\nimport ArrowRightIcon from \"@mui/icons-material/ArrowRight\";\nimport ErrorOutlineIcon from \"@mui/icons-material/ErrorOutline\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { AppState } from \"../../../../../store\";\nimport {\n setErrorSnackMessage,\n setModalErrorSnackMessage,\n} from \"../../../../../actions\";\nimport { snackBarMessage } from \"../../../../../types\";\n\ninterface ImodalErrorProps {\n customStyle?: any;\n classes: any;\n modalSnackMessage: snackBarMessage;\n displayErrorMessage: typeof setErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n modalErrorContainer: {\n position: \"absolute\",\n marginTop: 10,\n width: \"80%\",\n backgroundColor: \"#fff\",\n border: \"#C72C48 1px solid\",\n borderLeftWidth: 12,\n borderRadius: 3,\n zIndex: 1000,\n padding: \"10px 15px\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n opacity: 0,\n transitionDuration: \"0.2s\",\n },\n modalErrorShow: {\n opacity: 1,\n },\n closeButton: {\n position: \"absolute\",\n right: 5,\n fontSize: \"small\",\n border: 0,\n backgroundColor: \"#fff\",\n cursor: \"pointer\",\n },\n errorTitle: {\n display: \"flex\",\n alignItems: \"center\",\n },\n errorLabel: {\n color: \"#000\",\n fontSize: 18,\n fontWeight: 500,\n marginLeft: 5,\n marginRight: 25,\n },\n messageIcon: {\n color: \"#C72C48\",\n display: \"flex\",\n \"& svg\": {\n width: 32,\n height: 32,\n },\n },\n detailsButton: {\n color: \"#9C9C9C\",\n display: \"flex\",\n alignItems: \"center\",\n border: 0,\n backgroundColor: \"transparent\",\n paddingLeft: 5,\n fontSize: 14,\n transformDuration: \"0.3s\",\n cursor: \"pointer\",\n },\n extraDetailsContainer: {\n fontStyle: \"italic\",\n color: \"#9C9C9C\",\n lineHeight: 0,\n padding: \"0 10px\",\n transition: \"all .2s ease-in-out\",\n overflow: \"hidden\",\n },\n extraDetailsOpen: {\n lineHeight: 1,\n padding: \"3px 10px\",\n },\n arrowElement: {\n marginLeft: -5,\n },\n arrowOpen: {\n transform: \"rotateZ(90deg)\",\n transformDuration: \"0.3s\",\n },\n });\n\nvar timerI: any;\n\nconst startHideTimer = (callbackFunction: () => void) => {\n timerI = setInterval(callbackFunction, 10000);\n};\n\nconst stopHideTimer = () => {\n clearInterval(timerI);\n};\n\nconst ModalError = ({\n classes,\n modalSnackMessage,\n displayErrorMessage,\n customStyle,\n}: ImodalErrorProps) => {\n const [detailsOpen, setDetailsOpen] = useState(false);\n const [displayErrorMsg, setDisplayErrorMsg] = useState(false);\n\n const closeErrorMessage = useCallback(() => {\n setDisplayErrorMsg(false);\n }, []);\n\n useEffect(() => {\n if (!displayErrorMsg) {\n displayErrorMessage({ detailedError: \"\", errorMessage: \"\" });\n setDetailsOpen(false);\n //clearInterval(timerI);\n }\n }, [displayErrorMessage, displayErrorMsg]);\n\n useEffect(() => {\n if (\n modalSnackMessage.message !== \"\" &&\n modalSnackMessage.type === \"error\"\n ) {\n //Error message received, we trigger the animation\n setDisplayErrorMsg(true);\n //startHideTimer(closeErrorMessage);\n }\n }, [closeErrorMessage, modalSnackMessage.message, modalSnackMessage.type]);\n\n const detailsToggle = () => {\n setDetailsOpen(!detailsOpen);\n };\n\n const message = get(modalSnackMessage, \"message\", \"\");\n const messageDetails = get(modalSnackMessage, \"detailedErrorMsg\", \"\");\n\n if (modalSnackMessage.type !== \"error\" || message === \"\") {\n return null;\n }\n\n return (\n \n startHideTimer(closeErrorMessage)}\n >\n \n
\n \n \n \n {message}\n
\n {messageDetails !== \"\" && (\n \n
\n \n
\n \n {messageDetails}\n \n
\n )}\n \n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n modalSnackMessage: state.system.modalSnackBar,\n});\n\nconst mapDispatchToProps = {\n displayErrorMessage: setModalErrorSnackMessage,\n};\n\nconst connector = connect(mapState, mapDispatchToProps);\n\nexport default connector(withStyles(styles)(ModalError));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport IconButton from \"@mui/material/IconButton\";\nimport Snackbar from \"@mui/material/Snackbar\";\nimport { Dialog, DialogContent, DialogTitle } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n deleteDialogStyles,\n snackBarCommon,\n} from \"../FormComponents/common/styleLibrary\";\nimport { AppState } from \"../../../../store\";\nimport { snackBarMessage } from \"../../../../types\";\nimport { setModalSnackMessage } from \"../../../../actions\";\nimport ModalError from \"../FormComponents/ModalError/ModalError\";\nimport CloseIcon from \"@mui/icons-material/Close\";\n\ninterface IModalProps {\n classes: any;\n onClose: () => void;\n modalOpen: boolean;\n title: string | React.ReactNode;\n children: any;\n wideLimit?: boolean;\n modalSnackMessage?: snackBarMessage;\n noContentPadding?: boolean;\n setModalSnackMessage: typeof setModalSnackMessage;\n titleIcon?: React.ReactNode;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...deleteDialogStyles,\n root: {\n \"& .MuiPaper-root\": {\n padding: \"1rem 2rem 2rem 1rem\",\n },\n },\n content: {\n padding: 25,\n paddingBottom: 0,\n },\n customDialogSize: {\n width: \"100%\",\n maxWidth: 765,\n },\n ...snackBarCommon,\n });\n\nconst ModalWrapper = ({\n onClose,\n modalOpen,\n title,\n children,\n classes,\n wideLimit = true,\n modalSnackMessage,\n noContentPadding,\n setModalSnackMessage,\n titleIcon = null,\n}: IModalProps) => {\n const [openSnackbar, setOpenSnackbar] = useState(false);\n\n useEffect(() => {\n setModalSnackMessage(\"\");\n }, [setModalSnackMessage]);\n\n useEffect(() => {\n if (modalSnackMessage) {\n if (modalSnackMessage.message === \"\") {\n setOpenSnackbar(false);\n return;\n }\n // Open SnackBar\n if (modalSnackMessage.type !== \"error\") {\n setOpenSnackbar(true);\n }\n }\n }, [modalSnackMessage]);\n\n const closeSnackBar = () => {\n setOpenSnackbar(false);\n setModalSnackMessage(\"\");\n };\n\n const customSize = wideLimit\n ? {\n classes: {\n paper: classes.customDialogSize,\n },\n }\n : { maxWidth: \"lg\" as const, fullWidth: true };\n\n let message = \"\";\n\n if (modalSnackMessage) {\n message = modalSnackMessage.detailedErrorMsg;\n if (\n modalSnackMessage.detailedErrorMsg === \"\" ||\n modalSnackMessage.detailedErrorMsg.length < 5\n ) {\n message = modalSnackMessage.message;\n }\n }\n\n return (\n {\n if (reason !== \"backdropClick\") {\n onClose(); // close on Esc but not on click outside\n }\n }}\n className={classes.root}\n >\n \n
\n {titleIcon} {title}\n
\n
\n \n \n \n
\n
\n\n \n {\n closeSnackBar();\n }}\n message={message}\n ContentProps={{\n className: `${classes.snackBar} ${\n modalSnackMessage && modalSnackMessage.type === \"error\"\n ? classes.errorSnackBar\n : \"\"\n }`,\n }}\n autoHideDuration={\n modalSnackMessage && modalSnackMessage.type === \"error\" ? 10000 : 5000\n }\n />\n \n {children}\n \n \n );\n};\n\nconst mapState = (state: AppState) => ({\n modalSnackMessage: state.system.modalSnackBar,\n});\n\nconst connector = connect(mapState, {\n setModalSnackMessage,\n});\n\nexport default withStyles(styles)(connector(ModalWrapper));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport get from \"lodash/get\";\nimport { connect } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Button, LinearProgress } from \"@mui/material\";\nimport Grid from \"@mui/material/Grid\";\nimport {\n formFieldStyles,\n modalBasic,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport { setModalErrorSnackMessage } from \"../../../../actions\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport FileSelector from \"../../Common/FormComponents/FileSelector/FileSelector\";\nimport api from \"../../../../common/api\";\nimport { ITierElement } from \"./types\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\nimport { LockIcon } from \"../../../../icons\";\n\ninterface ITierCredentialsModal {\n open: boolean;\n closeModalAndRefresh: (refresh: boolean) => any;\n classes: any;\n tierData: ITierElement;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n ...formFieldStyles,\n });\n\nconst UpdateTierCredentialsModal = ({\n open,\n closeModalAndRefresh,\n classes,\n tierData,\n setModalErrorSnackMessage,\n}: ITierCredentialsModal) => {\n const [savingTiers, setSavingTiers] = useState(false);\n const [accessKey, setAccessKey] = useState(\"\");\n const [secretKey, setSecretKey] = useState(\"\");\n\n const [creds, setCreds] = useState(\"\");\n const [encodedCreds, setEncodedCreds] = useState(\"\");\n\n const [accountName, setAccountName] = useState(\"\");\n const [accountKey, setAccountKey] = useState(\"\");\n\n // Validations\n const [isFormValid, setIsFormValid] = useState(true);\n\n const type = get(tierData, \"type\", \"\");\n const name = get(tierData, `${type}.name`, \"\");\n\n useEffect(() => {\n let valid = true;\n\n if (type === \"s3\" || type === \"azure\") {\n if (accountName === \"\" || accountKey === \"\") {\n valid = false;\n }\n } else if (type === \"gcs\") {\n if (encodedCreds === \"\") {\n valid = false;\n }\n }\n setIsFormValid(valid);\n }, [accountKey, accountName, encodedCreds, type]);\n\n const addRecord = () => {\n let rules = {};\n\n if (type === \"s3\" || type === \"azure\") {\n rules = {\n access_key: accountName,\n secret_key: accountKey,\n };\n } else if (type === \"gcs\") {\n rules = {\n creds: encodedCreds,\n };\n }\n if (name !== \"\") {\n api\n .invoke(\"PUT\", `/api/v1/admin/tiers/${type}/${name}/credentials`, rules)\n .then(() => {\n setSavingTiers(false);\n closeModalAndRefresh(true);\n })\n .catch((err: ErrorResponseHandler) => {\n setSavingTiers(false);\n setModalErrorSnackMessage(err);\n });\n } else {\n setModalErrorSnackMessage({\n errorMessage: \"There was an error retrieving tier information\",\n detailedError: \"\",\n });\n }\n };\n\n return (\n }\n onClose={() => {\n closeModalAndRefresh(false);\n }}\n title={`Update Credentials - ${type} / ${name}`}\n >\n ) => {\n e.preventDefault();\n setSavingTiers(true);\n addRecord();\n }}\n >\n \n \n {type === \"s3\" && (\n \n
\n ) => {\n setAccessKey(e.target.value);\n }}\n />\n
\n
\n ) => {\n setSecretKey(e.target.value);\n }}\n />\n
\n
\n )}\n {type === \"gcs\" && (\n \n {\n setEncodedCreds(encodedValue);\n setCreds(fileName);\n }}\n value={creds}\n />\n \n )}\n {type === \"azure\" && (\n \n
\n ) => {\n setAccountName(e.target.value);\n }}\n />\n
\n
\n ) => {\n setAccountKey(e.target.value);\n }}\n />\n
\n
\n )}\n
\n \n \n Save\n \n \n {savingTiers && (\n \n \n \n )}\n
\n \n \n );\n};\n\nconst connector = connect(null, {\n setModalErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(UpdateTierCredentialsModal));\n","import React from \"react\";\nimport Typography from \"@mui/material/Typography\";\nimport { Theme } from \"@mui/material/styles\";\n\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n errorBlock: {\n color: theme.palette?.error.main || \"#C83B51\",\n },\n });\n\ninterface IErrorBlockProps {\n classes: any;\n errorMessage: string;\n withBreak?: boolean;\n}\n\nconst ErrorBlock = ({\n classes,\n errorMessage,\n withBreak = true,\n}: IErrorBlockProps) => {\n return (\n \n {withBreak &&
}\n \n {errorMessage}\n \n
\n );\n};\n\nexport default withStyles(styles)(ErrorBlock);\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _jsxRuntime = require(\"react/jsx-runtime\");\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M16.5 6v11.5c0 2.21-1.79 4-4 4s-4-1.79-4-4V5c0-1.38 1.12-2.5 2.5-2.5s2.5 1.12 2.5 2.5v10.5c0 .55-.45 1-1 1s-1-.45-1-1V6H10v9.5c0 1.38 1.12 2.5 2.5 2.5s2.5-1.12 2.5-2.5V5c0-2.21-1.79-4-4-4S7 2.79 7 5v12.5c0 3.04 2.46 5.5 5.5 5.5s5.5-2.46 5.5-5.5V6h-1.5z\"\n}), 'AttachFile');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _jsxRuntime = require(\"react/jsx-runtime\");\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z\"\n}), 'Cancel');\n\nexports.default = _default;"],"names":["withStyles","theme","createStyles","fieldBasic","tooltipHelper","valueString","maxWidth","whiteSpace","overflow","textOverflow","marginTop","fileInputField","margin","flexFlow","fileInputStyles","inputLabel","fontWeight","textBoxContainer","border","paddingLeft","label","classes","onChange","id","name","disabled","tooltip","required","error","accept","value","useState","showFileSelector","setShowSelector","Grid","item","xs","className","fieldBottom","fieldContainer","errorInField","InputLabel","htmlFor","fieldLabelError","tooltipContainer","Tooltip","title","placement","HelpIcon","type","e","fileName","get","evt","callback","file","target","files","reader","FileReader","readAsDataURL","onload","fileBase64","result","fileArray","toString","split","length","fileProcess","data","IconButton","color","component","onClick","disableRipple","disableFocusRipple","size","Cancel","ErrorBlock","errorMessage","fileReselect","AttachFile","inputStyles","makeStyles","inputFieldStyles","InputField","props","InputProps","flexGrow","position","overlayAction","right","top","maxHeight","autoComplete","multiline","index","placeholder","min","max","overlayIcon","overlayObject","extraInputProps","noLabelMinWidth","pattern","autoFocus","inputProps","container","clsx","inputBoxContainer","noMinWidthLabel","fullWidth","helperText","inputRebase","disableTouchRipple","timerI","stopHideTimer","clearInterval","mapDispatchToProps","displayErrorMessage","setModalErrorSnackMessage","connect","state","modalSnackMessage","system","modalSnackBar","modalErrorContainer","width","backgroundColor","borderLeftWidth","borderRadius","zIndex","padding","left","transform","opacity","transitionDuration","modalErrorShow","closeButton","fontSize","cursor","errorTitle","display","alignItems","errorLabel","marginLeft","marginRight","messageIcon","height","detailsButton","transformDuration","extraDetailsContainer","fontStyle","lineHeight","transition","extraDetailsOpen","arrowElement","arrowOpen","customStyle","detailsOpen","setDetailsOpen","displayErrorMsg","setDisplayErrorMsg","closeErrorMessage","useCallback","useEffect","detailedError","message","messageDetails","Fragment","style","onMouseOver","onMouseLeave","setInterval","Close","ErrorOutline","detailsContainerLink","ArrowRight","connector","setModalSnackMessage","deleteDialogStyles","root","content","paddingBottom","customDialogSize","snackBarCommon","onClose","modalOpen","children","wideLimit","noContentPadding","titleIcon","openSnackbar","setOpenSnackbar","customSize","paper","detailedErrorMsg","Dialog","open","scroll","event","reason","DialogTitle","titleText","closeContainer","Snackbar","snackBarModal","ContentProps","snackBar","errorSnackBar","autoHideDuration","DialogContent","buttonContainer","textAlign","modalBasic","formFieldStyles","closeModalAndRefresh","tierData","savingTiers","setSavingTiers","accessKey","setAccessKey","secretKey","setSecretKey","creds","setCreds","encodedCreds","setEncodedCreds","accountName","setAccountName","accountKey","setAccountKey","isFormValid","setIsFormValid","valid","noValidate","onSubmit","preventDefault","rules","access_key","secret_key","api","then","catch","err","addRecord","formFieldRow","encodedValue","variant","errorBlock","palette","main","withBreak","_interopRequireDefault","require","exports","_createSvgIcon","_jsxRuntime","_default","default","jsx","d"],"sourceRoot":""} \ No newline at end of file diff --git a/portal-ui/build/static/js/1069.771a8a37.chunk.js b/portal-ui/build/static/js/1069.771a8a37.chunk.js new file mode 100644 index 000000000..eae337633 --- /dev/null +++ b/portal-ui/build/static/js/1069.771a8a37.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1069],{82461:function(e,a,n){n.d(a,{Z:function(){return j}});var t=n(23430),r=n(18489),o=n(50390),s=n(38342),i=n.n(s),l=n(25594),c=n(36554),d=n(94187),u=n(95467),m=n(46529),p=n(94258),x=n(86509),f=n(4285),h=n(72462),v=n(97538),g=n(82981),Z=n(62559),j=(0,f.Z)((function(e){return(0,x.Z)((0,r.Z)((0,r.Z)((0,r.Z)((0,r.Z)({},h.YI),h.Hr),{},{valueString:{maxWidth:350,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",marginTop:2},fileInputField:{margin:"13px 0","@media (max-width: 900px)":{flexFlow:"column"}}},h.bV),{},{inputLabel:(0,r.Z)((0,r.Z)({},h.YI.inputLabel),{},{fontWeight:"normal"}),textBoxContainer:(0,r.Z)((0,r.Z)({},h.YI.textBoxContainer),{},{maxWidth:"100%",border:"1px solid #eaeaea",paddingLeft:"15px"})}))}))((function(e){var a=e.label,n=e.classes,r=e.onChange,s=e.id,x=e.name,f=e.disabled,h=void 0!==f&&f,j=e.tooltip,b=void 0===j?"":j,C=e.required,y=e.error,N=void 0===y?"":y,S=e.accept,k=void 0===S?"":S,M=e.value,w=void 0===M?"":M,F=(0,o.useState)(!1),E=(0,t.Z)(F,2),L=E[0],B=E[1];return(0,Z.jsx)(o.Fragment,{children:(0,Z.jsxs)(l.ZP,{item:!0,xs:12,className:"".concat(n.fileInputField," ").concat(n.fieldBottom," ").concat(n.fieldContainer," ").concat(""!==N?n.errorInField:""),children:[""!==a&&(0,Z.jsxs)(c.Z,{htmlFor:s,className:"".concat(""!==N?n.fieldLabelError:""," ").concat(n.inputLabel),children:[(0,Z.jsxs)("span",{children:[a,C?"*":""]}),""!==b&&(0,Z.jsx)("div",{className:n.tooltipContainer,children:(0,Z.jsx)(d.Z,{title:b,placement:"top-start",children:(0,Z.jsx)("div",{className:n.tooltip,children:(0,Z.jsx)(v.Z,{})})})})]}),L||""===w?(0,Z.jsxs)("div",{className:n.textBoxContainer,children:[(0,Z.jsx)("input",{type:"file",name:x,onChange:function(e){var a=i()(e,"target.files[0].name","");!function(e,a){var n=e.target.files[0],t=new FileReader;t.readAsDataURL(n),t.onload=function(){var e=t.result;if(e){var n=e.toString().split("base64,");2===n.length&&a(n[1])}}}(e,(function(e){r(e,a)}))},accept:k,required:C,disabled:h,className:n.fileInputField}),""!==w&&(0,Z.jsx)(u.Z,{color:"primary","aria-label":"upload picture",component:"span",onClick:function(){B(!1)},disableRipple:!1,disableFocusRipple:!1,size:"small",children:(0,Z.jsx)(p.Z,{})}),""!==N&&(0,Z.jsx)(g.Z,{errorMessage:N})]}):(0,Z.jsxs)("div",{className:n.fileReselect,children:[(0,Z.jsx)("div",{className:n.valueString,children:w}),(0,Z.jsx)(u.Z,{color:"primary","aria-label":"upload picture",component:"span",onClick:function(){B(!0)},disableRipple:!1,disableFocusRipple:!1,size:"small",children:(0,Z.jsx)(m.Z,{})})]})]})})}))},66964:function(e,a,n){var t=n(18489),r=n(50390),o=n(12066),s=n(25594),i=n(36554),l=n(94187),c=n(95467),d=n(86509),u=n(62449),m=n(4285),p=n(72462),x=n(97538),f=n(44977),h=n(62559),v=(0,u.Z)((function(e){return(0,d.Z)((0,t.Z)({},p.gM))}));function g(e){var a=v();return(0,h.jsx)(o.Z,(0,t.Z)({InputProps:{classes:a}},e))}a.Z=(0,m.Z)((function(e){return(0,d.Z)((0,t.Z)((0,t.Z)((0,t.Z)({},p.YI),p.Hr),{},{textBoxContainer:{flexGrow:1,position:"relative"},overlayAction:{position:"absolute",right:5,top:6,"& svg":{maxWidth:15,maxHeight:15},"&.withLabel":{top:5}},inputLabel:(0,t.Z)((0,t.Z)({},p.YI.inputLabel),{},{fontWeight:"normal"})}))}))((function(e){var a=e.label,n=e.onChange,o=e.value,d=e.id,u=e.name,m=e.type,p=void 0===m?"text":m,v=e.autoComplete,Z=void 0===v?"off":v,j=e.disabled,b=void 0!==j&&j,C=e.multiline,y=void 0!==C&&C,N=e.tooltip,S=void 0===N?"":N,k=e.index,M=void 0===k?0:k,w=e.error,F=void 0===w?"":w,E=e.required,L=void 0!==E&&E,B=e.placeholder,I=void 0===B?"":B,R=e.min,z=e.max,D=e.overlayIcon,K=void 0===D?null:D,P=e.overlayObject,A=void 0===P?null:P,W=e.extraInputProps,O=void 0===W?{}:W,T=e.overlayAction,H=e.noLabelMinWidth,V=void 0!==H&&H,Y=e.pattern,_=void 0===Y?"":Y,q=e.autoFocus,U=void 0!==q&&q,$=e.classes,G=e.className,Q=void 0===G?"":G,X=e.onKeyPress,J=(0,t.Z)({"data-index":M},O);return"number"===p&&R&&(J.min=R),"number"===p&&z&&(J.max=z),""!==_&&(J.pattern=_),(0,h.jsx)(r.Fragment,{children:(0,h.jsxs)(s.ZP,{container:!0,className:(0,f.Z)(""!==Q?Q:"",""!==F?$.errorInField:$.inputBoxContainer),children:[""!==a&&(0,h.jsxs)(i.Z,{htmlFor:d,className:V?$.noMinWidthLabel:$.inputLabel,children:[(0,h.jsxs)("span",{children:[a,L?"*":""]}),""!==S&&(0,h.jsx)("div",{className:$.tooltipContainer,children:(0,h.jsx)(l.Z,{title:S,placement:"top-start",children:(0,h.jsx)("div",{className:$.tooltip,children:(0,h.jsx)(x.Z,{})})})})]}),(0,h.jsxs)("div",{className:$.textBoxContainer,children:[(0,h.jsx)(g,{id:d,name:u,fullWidth:!0,value:o,autoFocus:U,disabled:b,onChange:n,type:p,multiline:y,autoComplete:Z,inputProps:J,error:""!==F,helperText:F,placeholder:I,className:$.inputRebase,onKeyPress:X}),K&&(0,h.jsx)("div",{className:"".concat($.overlayAction," ").concat(""!==a?"withLabel":""),children:(0,h.jsx)(c.Z,{onClick:T?function(){T()}:function(){return null},size:"small",disableFocusRipple:!1,disableRipple:!1,disableTouchRipple:!1,children:K})}),A&&(0,h.jsx)("div",{className:"".concat($.overlayAction," ").concat(""!==a?"withLabel":""),children:A})]})]})})}))},76352:function(e,a,n){n.d(a,{Z:function(){return M}});var t,r=n(23430),o=n(18489),s=n(50390),i=n(34424),l=n(95467),c=n(97771),d=n(84402),u=n(78426),m=n(93085),p=n(86509),x=n(4285),f=n(72462),h=n(44149),v=n(38342),g=n.n(v),Z=n(92125),j=n(19538),b=n(21278),C=n(62559),y=function(){clearInterval(t)},N={displayErrorMessage:h.zb},S=(0,i.$j)((function(e){return{modalSnackMessage:e.system.modalSnackBar}}),N)((0,x.Z)((function(e){return(0,p.Z)({modalErrorContainer:{position:"absolute",marginTop:10,width:"80%",backgroundColor:"#fff",border:"#C72C48 1px solid",borderLeftWidth:12,borderRadius:3,zIndex:1e3,padding:"10px 15px",left:"50%",transform:"translateX(-50%)",opacity:0,transitionDuration:"0.2s"},modalErrorShow:{opacity:1},closeButton:{position:"absolute",right:5,fontSize:"small",border:0,backgroundColor:"#fff",cursor:"pointer"},errorTitle:{display:"flex",alignItems:"center"},errorLabel:{color:"#000",fontSize:18,fontWeight:500,marginLeft:5,marginRight:25},messageIcon:{color:"#C72C48",display:"flex","& svg":{width:32,height:32}},detailsButton:{color:"#9C9C9C",display:"flex",alignItems:"center",border:0,backgroundColor:"transparent",paddingLeft:5,fontSize:14,transformDuration:"0.3s",cursor:"pointer"},extraDetailsContainer:{fontStyle:"italic",color:"#9C9C9C",lineHeight:0,padding:"0 10px",transition:"all .2s ease-in-out",overflow:"hidden"},extraDetailsOpen:{lineHeight:1,padding:"3px 10px"},arrowElement:{marginLeft:-5},arrowOpen:{transform:"rotateZ(90deg)",transformDuration:"0.3s"}})}))((function(e){var a=e.classes,n=e.modalSnackMessage,o=e.displayErrorMessage,i=e.customStyle,l=(0,s.useState)(!1),c=(0,r.Z)(l,2),d=c[0],u=c[1],m=(0,s.useState)(!1),p=(0,r.Z)(m,2),x=p[0],f=p[1],h=(0,s.useCallback)((function(){f(!1)}),[]);(0,s.useEffect)((function(){x||(o({detailedError:"",errorMessage:""}),u(!1))}),[o,x]),(0,s.useEffect)((function(){""!==n.message&&"error"===n.type&&f(!0)}),[h,n.message,n.type]);var v=g()(n,"message",""),N=g()(n,"detailedErrorMsg","");return"error"!==n.type||""===v?null:(0,C.jsx)(s.Fragment,{children:(0,C.jsxs)("div",{className:"".concat(a.modalErrorContainer," ").concat(x?a.modalErrorShow:""),style:i,onMouseOver:y,onMouseLeave:function(){t=setInterval(h,1e4)},children:[(0,C.jsx)("button",{className:a.closeButton,onClick:h,children:(0,C.jsx)(b.Z,{})}),(0,C.jsxs)("div",{className:a.errorTitle,children:[(0,C.jsx)("span",{className:a.messageIcon,children:(0,C.jsx)(j.Z,{})}),(0,C.jsx)("span",{className:a.errorLabel,children:v})]}),""!==N&&(0,C.jsxs)(s.Fragment,{children:[(0,C.jsx)("div",{className:a.detailsContainerLink,children:(0,C.jsxs)("button",{className:a.detailsButton,onClick:function(){u(!d)},children:["Details",(0,C.jsx)(Z.Z,{className:"".concat(a.arrowElement," ").concat(d?a.arrowOpen:"")})]})}),(0,C.jsx)("div",{className:"".concat(a.extraDetailsContainer," ").concat(d?a.extraDetailsOpen:""),children:N})]})]})})}))),k=(0,i.$j)((function(e){return{modalSnackMessage:e.system.modalSnackBar}}),{setModalSnackMessage:h.MK}),M=(0,x.Z)((function(e){return(0,p.Z)((0,o.Z)((0,o.Z)({},f.Qw),{},{root:{"& .MuiPaper-root":{padding:"0 2rem 2rem 1rem"}},content:{padding:25,paddingBottom:0},customDialogSize:{width:"100%",maxWidth:765}},f.sN))}))(k((function(e){var a=e.onClose,n=e.modalOpen,t=e.title,i=e.children,p=e.classes,x=e.wideLimit,f=void 0===x||x,h=e.modalSnackMessage,v=e.noContentPadding,g=e.setModalSnackMessage,Z=e.titleIcon,j=void 0===Z?null:Z,y=(0,s.useState)(!1),N=(0,r.Z)(y,2),k=N[0],M=N[1];(0,s.useEffect)((function(){g("")}),[g]),(0,s.useEffect)((function(){if(h){if(""===h.message)return void M(!1);"error"!==h.type&&M(!0)}}),[h]);var w=f?{classes:{paper:p.customDialogSize}}:{maxWidth:"lg",fullWidth:!0},F="";return h&&(F=h.detailedErrorMsg,(""===h.detailedErrorMsg||h.detailedErrorMsg.length<5)&&(F=h.message)),(0,C.jsxs)(d.Z,(0,o.Z)((0,o.Z)({open:n,classes:p},w),{},{scroll:"paper",onClose:function(e,n){"backdropClick"!==n&&a()},className:p.root,children:[(0,C.jsxs)(u.Z,{className:p.title,children:[(0,C.jsxs)("div",{className:p.titleText,children:[j," ",t]}),(0,C.jsx)("div",{className:p.closeContainer,children:(0,C.jsx)(l.Z,{"aria-label":"close",className:p.closeButton,onClick:a,disableRipple:!0,size:"small",children:(0,C.jsx)(b.Z,{})})})]}),(0,C.jsx)(S,{}),(0,C.jsx)(c.Z,{open:k,className:p.snackBarModal,onClose:function(){M(!1),g("")},message:F,ContentProps:{className:"".concat(p.snackBar," ").concat(h&&"error"===h.type?p.errorSnackBar:"")},autoHideDuration:h&&"error"===h.type?1e4:5e3}),(0,C.jsx)(m.Z,{className:v?"":p.content,children:i})]}))})))},81069:function(e,a,n){n.r(a);var t=n(23430),r=n(18489),o=n(50390),s=n(38342),i=n.n(s),l=n(34424),c=n(86509),d=n(4285),u=n(66946),m=n(81378),p=n(25594),x=n(72462),f=n(44149),h=n(66964),v=n(82461),g=n(30324),Z=n(76352),j=n(85615),b=n(62559),C=(0,l.$j)(null,{setModalErrorSnackMessage:f.zb});a.default=(0,d.Z)((function(e){return(0,c.Z)((0,r.Z)((0,r.Z)({buttonContainer:{textAlign:"right"}},x.oO),x.DF))}))(C((function(e){var a=e.open,n=e.closeModalAndRefresh,r=e.classes,s=e.tierData,l=e.setModalErrorSnackMessage,c=(0,o.useState)(!1),d=(0,t.Z)(c,2),x=d[0],f=d[1],C=(0,o.useState)(""),y=(0,t.Z)(C,2),N=y[0],S=y[1],k=(0,o.useState)(""),M=(0,t.Z)(k,2),w=M[0],F=M[1],E=(0,o.useState)(""),L=(0,t.Z)(E,2),B=L[0],I=L[1],R=(0,o.useState)(""),z=(0,t.Z)(R,2),D=z[0],K=z[1],P=(0,o.useState)(""),A=(0,t.Z)(P,2),W=A[0],O=A[1],T=(0,o.useState)(""),H=(0,t.Z)(T,2),V=H[0],Y=H[1],_=(0,o.useState)(!0),q=(0,t.Z)(_,2),U=q[0],$=q[1],G=i()(s,"type",""),Q=i()(s,"".concat(G,".name"),"");(0,o.useEffect)((function(){var e=!0;"s3"===G||"azure"===G?""!==W&&""!==V||(e=!1):"gcs"===G&&""===D&&(e=!1),$(e)}),[V,W,D,G]);return(0,b.jsx)(Z.Z,{modalOpen:a,titleIcon:(0,b.jsx)(j.mB,{}),onClose:function(){n(!1)},title:"Update Credentials - ".concat(G," / ").concat(Q),children:(0,b.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){e.preventDefault(),f(!0),function(){var e={};"s3"===G||"azure"===G?e={access_key:W,secret_key:V}:"gcs"===G&&(e={creds:D}),""!==Q?g.Z.invoke("PUT","/api/v1/admin/tiers/".concat(G,"/").concat(Q,"/credentials"),e).then((function(){f(!1),n(!0)})).catch((function(e){f(!1),l(e)})):l({errorMessage:"There was an error retrieving tier information",detailedError:""})}()},children:(0,b.jsxs)(p.ZP,{container:!0,children:[(0,b.jsxs)(p.ZP,{item:!0,xs:12,children:["s3"===G&&(0,b.jsxs)(o.Fragment,{children:[(0,b.jsx)("div",{className:r.formFieldRow,children:(0,b.jsx)(h.Z,{id:"accessKey",name:"accessKey",label:"Access Key",placeholder:"Enter Access Key",value:N,onChange:function(e){S(e.target.value)}})}),(0,b.jsx)("div",{className:r.formFieldRow,children:(0,b.jsx)(h.Z,{id:"secretKey",name:"secretKey",label:"Secret Key",placeholder:"Enter Secret Key",value:w,onChange:function(e){F(e.target.value)}})})]}),"gcs"===G&&(0,b.jsx)(o.Fragment,{children:(0,b.jsx)(v.Z,{accept:".json",id:"creds",label:"Credentials",name:"creds",onChange:function(e,a){K(e),I(a)},value:B})}),"azure"===G&&(0,b.jsxs)(o.Fragment,{children:[(0,b.jsx)("div",{className:r.formFieldRow,children:(0,b.jsx)(h.Z,{id:"accountName",name:"accountName",label:"Account Name",placeholder:"Enter Account Name",value:W,onChange:function(e){O(e.target.value)}})}),(0,b.jsx)("div",{className:r.formFieldRow,children:(0,b.jsx)(h.Z,{id:"accountKey",name:"accountKey",label:"Account Key",placeholder:"Enter Account Key",value:V,onChange:function(e){Y(e.target.value)}})})]})]}),(0,b.jsx)(p.ZP,{item:!0,xs:12,className:r.buttonContainer,children:(0,b.jsx)(u.Z,{type:"submit",variant:"contained",color:"primary",disabled:x||!U,children:"Save"})}),x&&(0,b.jsx)(p.ZP,{item:!0,xs:12,children:(0,b.jsx)(m.Z,{})})]})})})})))},82981:function(e,a,n){var t=n(50390),r=n(35477),o=n(86509),s=n(4285),i=n(62559);a.Z=(0,s.Z)((function(e){var a;return(0,o.Z)({errorBlock:{color:(null===(a=e.palette)||void 0===a?void 0:a.error.main)||"#C83B51"}})}))((function(e){var a=e.classes,n=e.errorMessage,o=e.withBreak,s=void 0===o||o;return(0,i.jsxs)(t.Fragment,{children:[s&&(0,i.jsx)("br",{}),(0,i.jsx)(r.Z,{component:"p",variant:"body1",className:a.errorBlock,children:n})]})}))},46529:function(e,a,n){var t=n(64119);a.Z=void 0;var r=t(n(66830)),o=n(62559),s=(0,r.default)((0,o.jsx)("path",{d:"M16.5 6v11.5c0 2.21-1.79 4-4 4s-4-1.79-4-4V5c0-1.38 1.12-2.5 2.5-2.5s2.5 1.12 2.5 2.5v10.5c0 .55-.45 1-1 1s-1-.45-1-1V6H10v9.5c0 1.38 1.12 2.5 2.5 2.5s2.5-1.12 2.5-2.5V5c0-2.21-1.79-4-4-4S7 2.79 7 5v12.5c0 3.04 2.46 5.5 5.5 5.5s5.5-2.46 5.5-5.5V6h-1.5z"}),"AttachFile");a.Z=s},94258:function(e,a,n){var t=n(64119);a.Z=void 0;var r=t(n(66830)),o=n(62559),s=(0,r.default)((0,o.jsx)("path",{d:"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z"}),"Cancel");a.Z=s}}]); +//# sourceMappingURL=1069.771a8a37.chunk.js.map \ No newline at end of file diff --git a/portal-ui/build/static/js/1069.771a8a37.chunk.js.map b/portal-ui/build/static/js/1069.771a8a37.chunk.js.map new file mode 100644 index 000000000..43f3a1670 --- /dev/null +++ b/portal-ui/build/static/js/1069.771a8a37.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/1069.771a8a37.chunk.js","mappings":"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","sources":["screens/Console/Common/FormComponents/FileSelector/FileSelector.tsx","screens/Console/Common/FormComponents/FileSelector/utils.ts","screens/Console/Common/FormComponents/InputBoxWrapper/InputBoxWrapper.tsx","screens/Console/Common/FormComponents/ModalError/ModalError.tsx","screens/Console/Common/ModalWrapper/ModalWrapper.tsx","screens/Console/Configurations/TiersConfiguration/UpdateTierCredentialsModal.tsx","screens/shared/ErrorBlock.tsx","../node_modules/@mui/icons-material/AttachFile.js","../node_modules/@mui/icons-material/Cancel.js"],"sourcesContent":["// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport get from \"lodash/get\";\nimport { Grid, InputLabel, Tooltip } from \"@mui/material\";\nimport IconButton from \"@mui/material/IconButton\";\nimport AttachFileIcon from \"@mui/icons-material/AttachFile\";\nimport CancelIcon from \"@mui/icons-material/Cancel\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n fieldBasic,\n fileInputStyles,\n tooltipHelper,\n} from \"../common/styleLibrary\";\nimport { fileProcess } from \"./utils\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\nimport ErrorBlock from \"../../../../shared/ErrorBlock\";\n\ninterface InputBoxProps {\n label: string;\n classes: any;\n onChange: (e: string, i: string) => void;\n id: string;\n name: string;\n disabled?: boolean;\n tooltip?: string;\n required?: boolean;\n error?: string;\n accept?: string;\n value?: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n valueString: {\n maxWidth: 350,\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n marginTop: 2,\n },\n fileInputField: {\n margin: \"13px 0\",\n \"@media (max-width: 900px)\": {\n flexFlow: \"column\",\n },\n },\n ...fileInputStyles,\n inputLabel: {\n ...fieldBasic.inputLabel,\n fontWeight: \"normal\",\n },\n textBoxContainer: {\n ...fieldBasic.textBoxContainer,\n maxWidth: \"100%\",\n border: \"1px solid #eaeaea\",\n paddingLeft: \"15px\",\n },\n });\n\nconst FileSelector = ({\n label,\n classes,\n onChange,\n id,\n name,\n disabled = false,\n tooltip = \"\",\n required,\n error = \"\",\n accept = \"\",\n value = \"\",\n}: InputBoxProps) => {\n const [showFileSelector, setShowSelector] = useState(false);\n\n return (\n \n \n {label !== \"\" && (\n \n \n {label}\n {required ? \"*\" : \"\"}\n \n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n \n )}\n\n {showFileSelector || value === \"\" ? (\n
\n {\n const fileName = get(e, \"target.files[0].name\", \"\");\n fileProcess(e, (data: any) => {\n onChange(data, fileName);\n });\n }}\n accept={accept}\n required={required}\n disabled={disabled}\n className={classes.fileInputField}\n />\n\n {value !== \"\" && (\n {\n setShowSelector(false);\n }}\n disableRipple={false}\n disableFocusRipple={false}\n size=\"small\"\n >\n \n \n )}\n\n {error !== \"\" && }\n
\n ) : (\n
\n
{value}
\n {\n setShowSelector(true);\n }}\n disableRipple={false}\n disableFocusRipple={false}\n size=\"small\"\n >\n \n \n
\n )}\n \n
\n );\n};\n\nexport default withStyles(styles)(FileSelector);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nexport const fileProcess = (evt: any, callback: any) => {\n const file = evt.target.files[0];\n const reader = new FileReader();\n reader.readAsDataURL(file);\n\n reader.onload = () => {\n // reader.readAsDataURL(file) output will be something like: data:application/x-x509-ca-cert;base64,LS0tLS1CRUdJTiBDRVJUSU\n // we care only about the actual base64 part (everything after \"data:application/x-x509-ca-cert;base64,\")\n const fileBase64 = reader.result;\n if (fileBase64) {\n const fileArray = fileBase64.toString().split(\"base64,\");\n\n if (fileArray.length === 2) {\n callback(fileArray[1]);\n }\n }\n };\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React from \"react\";\nimport {\n Grid,\n IconButton,\n InputLabel,\n TextField,\n TextFieldProps,\n Tooltip,\n} from \"@mui/material\";\nimport { OutlinedInputProps } from \"@mui/material/OutlinedInput\";\nimport { InputProps as StandardInputProps } from \"@mui/material/Input\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n fieldBasic,\n inputFieldStyles,\n tooltipHelper,\n} from \"../common/styleLibrary\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\nimport clsx from \"clsx\";\n\ninterface InputBoxProps {\n label: string;\n classes: any;\n onChange: (e: React.ChangeEvent) => void;\n onKeyPress?: (e: any) => void;\n value: string | boolean;\n id: string;\n name: string;\n disabled?: boolean;\n multiline?: boolean;\n type?: string;\n tooltip?: string;\n autoComplete?: string;\n index?: number;\n error?: string;\n required?: boolean;\n placeholder?: string;\n min?: string;\n max?: string;\n overlayIcon?: any;\n overlayAction?: () => void;\n overlayObject?: any;\n extraInputProps?: StandardInputProps[\"inputProps\"];\n noLabelMinWidth?: boolean;\n pattern?: string;\n autoFocus?: boolean;\n className?: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n textBoxContainer: {\n flexGrow: 1,\n position: \"relative\",\n },\n overlayAction: {\n position: \"absolute\",\n right: 5,\n top: 6,\n \"& svg\": {\n maxWidth: 15,\n maxHeight: 15,\n },\n \"&.withLabel\": {\n top: 5,\n },\n },\n inputLabel: {\n ...fieldBasic.inputLabel,\n fontWeight: \"normal\",\n },\n });\n\nconst inputStyles = makeStyles((theme: Theme) =>\n createStyles({\n ...inputFieldStyles,\n })\n);\n\nfunction InputField(props: TextFieldProps) {\n const classes = inputStyles();\n\n return (\n }\n {...props}\n />\n );\n}\n\nconst InputBoxWrapper = ({\n label,\n onChange,\n value,\n id,\n name,\n type = \"text\",\n autoComplete = \"off\",\n disabled = false,\n multiline = false,\n tooltip = \"\",\n index = 0,\n error = \"\",\n required = false,\n placeholder = \"\",\n min,\n max,\n overlayIcon = null,\n overlayObject = null,\n extraInputProps = {},\n overlayAction,\n noLabelMinWidth = false,\n pattern = \"\",\n autoFocus = false,\n classes,\n className = \"\",\n onKeyPress,\n}: InputBoxProps) => {\n let inputProps: any = { \"data-index\": index, ...extraInputProps };\n\n if (type === \"number\" && min) {\n inputProps[\"min\"] = min;\n }\n\n if (type === \"number\" && max) {\n inputProps[\"max\"] = max;\n }\n\n if (pattern !== \"\") {\n inputProps[\"pattern\"] = pattern;\n }\n\n return (\n \n \n {label !== \"\" && (\n \n \n {label}\n {required ? \"*\" : \"\"}\n \n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n \n )}\n\n
\n \n {overlayIcon && (\n \n {\n overlayAction();\n }\n : () => null\n }\n size={\"small\"}\n disableFocusRipple={false}\n disableRipple={false}\n disableTouchRipple={false}\n >\n {overlayIcon}\n \n
\n )}\n {overlayObject && (\n \n {overlayObject}\n \n )}\n \n \n
\n );\n};\n\nexport default withStyles(styles)(InputBoxWrapper);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\n// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport get from \"lodash/get\";\nimport ArrowRightIcon from \"@mui/icons-material/ArrowRight\";\nimport ErrorOutlineIcon from \"@mui/icons-material/ErrorOutline\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { AppState } from \"../../../../../store\";\nimport {\n setErrorSnackMessage,\n setModalErrorSnackMessage,\n} from \"../../../../../actions\";\nimport { snackBarMessage } from \"../../../../../types\";\n\ninterface ImodalErrorProps {\n customStyle?: any;\n classes: any;\n modalSnackMessage: snackBarMessage;\n displayErrorMessage: typeof setErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n modalErrorContainer: {\n position: \"absolute\",\n marginTop: 10,\n width: \"80%\",\n backgroundColor: \"#fff\",\n border: \"#C72C48 1px solid\",\n borderLeftWidth: 12,\n borderRadius: 3,\n zIndex: 1000,\n padding: \"10px 15px\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n opacity: 0,\n transitionDuration: \"0.2s\",\n },\n modalErrorShow: {\n opacity: 1,\n },\n closeButton: {\n position: \"absolute\",\n right: 5,\n fontSize: \"small\",\n border: 0,\n backgroundColor: \"#fff\",\n cursor: \"pointer\",\n },\n errorTitle: {\n display: \"flex\",\n alignItems: \"center\",\n },\n errorLabel: {\n color: \"#000\",\n fontSize: 18,\n fontWeight: 500,\n marginLeft: 5,\n marginRight: 25,\n },\n messageIcon: {\n color: \"#C72C48\",\n display: \"flex\",\n \"& svg\": {\n width: 32,\n height: 32,\n },\n },\n detailsButton: {\n color: \"#9C9C9C\",\n display: \"flex\",\n alignItems: \"center\",\n border: 0,\n backgroundColor: \"transparent\",\n paddingLeft: 5,\n fontSize: 14,\n transformDuration: \"0.3s\",\n cursor: \"pointer\",\n },\n extraDetailsContainer: {\n fontStyle: \"italic\",\n color: \"#9C9C9C\",\n lineHeight: 0,\n padding: \"0 10px\",\n transition: \"all .2s ease-in-out\",\n overflow: \"hidden\",\n },\n extraDetailsOpen: {\n lineHeight: 1,\n padding: \"3px 10px\",\n },\n arrowElement: {\n marginLeft: -5,\n },\n arrowOpen: {\n transform: \"rotateZ(90deg)\",\n transformDuration: \"0.3s\",\n },\n });\n\nvar timerI: any;\n\nconst startHideTimer = (callbackFunction: () => void) => {\n timerI = setInterval(callbackFunction, 10000);\n};\n\nconst stopHideTimer = () => {\n clearInterval(timerI);\n};\n\nconst ModalError = ({\n classes,\n modalSnackMessage,\n displayErrorMessage,\n customStyle,\n}: ImodalErrorProps) => {\n const [detailsOpen, setDetailsOpen] = useState(false);\n const [displayErrorMsg, setDisplayErrorMsg] = useState(false);\n\n const closeErrorMessage = useCallback(() => {\n setDisplayErrorMsg(false);\n }, []);\n\n useEffect(() => {\n if (!displayErrorMsg) {\n displayErrorMessage({ detailedError: \"\", errorMessage: \"\" });\n setDetailsOpen(false);\n //clearInterval(timerI);\n }\n }, [displayErrorMessage, displayErrorMsg]);\n\n useEffect(() => {\n if (\n modalSnackMessage.message !== \"\" &&\n modalSnackMessage.type === \"error\"\n ) {\n //Error message received, we trigger the animation\n setDisplayErrorMsg(true);\n //startHideTimer(closeErrorMessage);\n }\n }, [closeErrorMessage, modalSnackMessage.message, modalSnackMessage.type]);\n\n const detailsToggle = () => {\n setDetailsOpen(!detailsOpen);\n };\n\n const message = get(modalSnackMessage, \"message\", \"\");\n const messageDetails = get(modalSnackMessage, \"detailedErrorMsg\", \"\");\n\n if (modalSnackMessage.type !== \"error\" || message === \"\") {\n return null;\n }\n\n return (\n \n startHideTimer(closeErrorMessage)}\n >\n \n
\n \n \n \n {message}\n
\n {messageDetails !== \"\" && (\n \n
\n \n
\n \n {messageDetails}\n \n
\n )}\n \n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n modalSnackMessage: state.system.modalSnackBar,\n});\n\nconst mapDispatchToProps = {\n displayErrorMessage: setModalErrorSnackMessage,\n};\n\nconst connector = connect(mapState, mapDispatchToProps);\n\nexport default connector(withStyles(styles)(ModalError));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport IconButton from \"@mui/material/IconButton\";\nimport Snackbar from \"@mui/material/Snackbar\";\nimport { Dialog, DialogContent, DialogTitle } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n deleteDialogStyles,\n snackBarCommon,\n} from \"../FormComponents/common/styleLibrary\";\nimport { AppState } from \"../../../../store\";\nimport { snackBarMessage } from \"../../../../types\";\nimport { setModalSnackMessage } from \"../../../../actions\";\nimport ModalError from \"../FormComponents/ModalError/ModalError\";\nimport CloseIcon from \"@mui/icons-material/Close\";\n\ninterface IModalProps {\n classes: any;\n onClose: () => void;\n modalOpen: boolean;\n title: string | React.ReactNode;\n children: any;\n wideLimit?: boolean;\n modalSnackMessage?: snackBarMessage;\n noContentPadding?: boolean;\n setModalSnackMessage: typeof setModalSnackMessage;\n titleIcon?: React.ReactNode;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...deleteDialogStyles,\n root: {\n \"& .MuiPaper-root\": {\n padding: \"0 2rem 2rem 1rem\",\n },\n },\n content: {\n padding: 25,\n paddingBottom: 0,\n },\n customDialogSize: {\n width: \"100%\",\n maxWidth: 765,\n },\n ...snackBarCommon,\n });\n\nconst ModalWrapper = ({\n onClose,\n modalOpen,\n title,\n children,\n classes,\n wideLimit = true,\n modalSnackMessage,\n noContentPadding,\n setModalSnackMessage,\n titleIcon = null,\n}: IModalProps) => {\n const [openSnackbar, setOpenSnackbar] = useState(false);\n\n useEffect(() => {\n setModalSnackMessage(\"\");\n }, [setModalSnackMessage]);\n\n useEffect(() => {\n if (modalSnackMessage) {\n if (modalSnackMessage.message === \"\") {\n setOpenSnackbar(false);\n return;\n }\n // Open SnackBar\n if (modalSnackMessage.type !== \"error\") {\n setOpenSnackbar(true);\n }\n }\n }, [modalSnackMessage]);\n\n const closeSnackBar = () => {\n setOpenSnackbar(false);\n setModalSnackMessage(\"\");\n };\n\n const customSize = wideLimit\n ? {\n classes: {\n paper: classes.customDialogSize,\n },\n }\n : { maxWidth: \"lg\" as const, fullWidth: true };\n\n let message = \"\";\n\n if (modalSnackMessage) {\n message = modalSnackMessage.detailedErrorMsg;\n if (\n modalSnackMessage.detailedErrorMsg === \"\" ||\n modalSnackMessage.detailedErrorMsg.length < 5\n ) {\n message = modalSnackMessage.message;\n }\n }\n\n return (\n {\n if (reason !== \"backdropClick\") {\n onClose(); // close on Esc but not on click outside\n }\n }}\n className={classes.root}\n >\n \n
\n {titleIcon} {title}\n
\n
\n \n \n \n
\n
\n\n \n {\n closeSnackBar();\n }}\n message={message}\n ContentProps={{\n className: `${classes.snackBar} ${\n modalSnackMessage && modalSnackMessage.type === \"error\"\n ? classes.errorSnackBar\n : \"\"\n }`,\n }}\n autoHideDuration={\n modalSnackMessage && modalSnackMessage.type === \"error\" ? 10000 : 5000\n }\n />\n \n {children}\n \n \n );\n};\n\nconst mapState = (state: AppState) => ({\n modalSnackMessage: state.system.modalSnackBar,\n});\n\nconst connector = connect(mapState, {\n setModalSnackMessage,\n});\n\nexport default withStyles(styles)(connector(ModalWrapper));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport get from \"lodash/get\";\nimport { connect } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Button, LinearProgress } from \"@mui/material\";\nimport Grid from \"@mui/material/Grid\";\nimport {\n formFieldStyles,\n modalBasic,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport { setModalErrorSnackMessage } from \"../../../../actions\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport FileSelector from \"../../Common/FormComponents/FileSelector/FileSelector\";\nimport api from \"../../../../common/api\";\nimport { ITierElement } from \"./types\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\nimport { LockIcon } from \"../../../../icons\";\n\ninterface ITierCredentialsModal {\n open: boolean;\n closeModalAndRefresh: (refresh: boolean) => any;\n classes: any;\n tierData: ITierElement;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n ...formFieldStyles,\n });\n\nconst UpdateTierCredentialsModal = ({\n open,\n closeModalAndRefresh,\n classes,\n tierData,\n setModalErrorSnackMessage,\n}: ITierCredentialsModal) => {\n const [savingTiers, setSavingTiers] = useState(false);\n const [accessKey, setAccessKey] = useState(\"\");\n const [secretKey, setSecretKey] = useState(\"\");\n\n const [creds, setCreds] = useState(\"\");\n const [encodedCreds, setEncodedCreds] = useState(\"\");\n\n const [accountName, setAccountName] = useState(\"\");\n const [accountKey, setAccountKey] = useState(\"\");\n\n // Validations\n const [isFormValid, setIsFormValid] = useState(true);\n\n const type = get(tierData, \"type\", \"\");\n const name = get(tierData, `${type}.name`, \"\");\n\n useEffect(() => {\n let valid = true;\n\n if (type === \"s3\" || type === \"azure\") {\n if (accountName === \"\" || accountKey === \"\") {\n valid = false;\n }\n } else if (type === \"gcs\") {\n if (encodedCreds === \"\") {\n valid = false;\n }\n }\n setIsFormValid(valid);\n }, [accountKey, accountName, encodedCreds, type]);\n\n const addRecord = () => {\n let rules = {};\n\n if (type === \"s3\" || type === \"azure\") {\n rules = {\n access_key: accountName,\n secret_key: accountKey,\n };\n } else if (type === \"gcs\") {\n rules = {\n creds: encodedCreds,\n };\n }\n if (name !== \"\") {\n api\n .invoke(\"PUT\", `/api/v1/admin/tiers/${type}/${name}/credentials`, rules)\n .then(() => {\n setSavingTiers(false);\n closeModalAndRefresh(true);\n })\n .catch((err: ErrorResponseHandler) => {\n setSavingTiers(false);\n setModalErrorSnackMessage(err);\n });\n } else {\n setModalErrorSnackMessage({\n errorMessage: \"There was an error retrieving tier information\",\n detailedError: \"\",\n });\n }\n };\n\n return (\n }\n onClose={() => {\n closeModalAndRefresh(false);\n }}\n title={`Update Credentials - ${type} / ${name}`}\n >\n ) => {\n e.preventDefault();\n setSavingTiers(true);\n addRecord();\n }}\n >\n \n \n {type === \"s3\" && (\n \n
\n ) => {\n setAccessKey(e.target.value);\n }}\n />\n
\n
\n ) => {\n setSecretKey(e.target.value);\n }}\n />\n
\n
\n )}\n {type === \"gcs\" && (\n \n {\n setEncodedCreds(encodedValue);\n setCreds(fileName);\n }}\n value={creds}\n />\n \n )}\n {type === \"azure\" && (\n \n
\n ) => {\n setAccountName(e.target.value);\n }}\n />\n
\n
\n ) => {\n setAccountKey(e.target.value);\n }}\n />\n
\n
\n )}\n
\n \n \n Save\n \n \n {savingTiers && (\n \n \n \n )}\n
\n \n \n );\n};\n\nconst connector = connect(null, {\n setModalErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(UpdateTierCredentialsModal));\n","import React from \"react\";\nimport Typography from \"@mui/material/Typography\";\nimport { Theme } from \"@mui/material/styles\";\n\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n errorBlock: {\n color: theme.palette?.error.main || \"#C83B51\",\n },\n });\n\ninterface IErrorBlockProps {\n classes: any;\n errorMessage: string;\n withBreak?: boolean;\n}\n\nconst ErrorBlock = ({\n classes,\n errorMessage,\n withBreak = true,\n}: IErrorBlockProps) => {\n return (\n \n {withBreak &&
}\n \n {errorMessage}\n \n
\n );\n};\n\nexport default withStyles(styles)(ErrorBlock);\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _jsxRuntime = require(\"react/jsx-runtime\");\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M16.5 6v11.5c0 2.21-1.79 4-4 4s-4-1.79-4-4V5c0-1.38 1.12-2.5 2.5-2.5s2.5 1.12 2.5 2.5v10.5c0 .55-.45 1-1 1s-1-.45-1-1V6H10v9.5c0 1.38 1.12 2.5 2.5 2.5s2.5-1.12 2.5-2.5V5c0-2.21-1.79-4-4-4S7 2.79 7 5v12.5c0 3.04 2.46 5.5 5.5 5.5s5.5-2.46 5.5-5.5V6h-1.5z\"\n}), 'AttachFile');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _jsxRuntime = require(\"react/jsx-runtime\");\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z\"\n}), 'Cancel');\n\nexports.default = _default;"],"names":["withStyles","theme","createStyles","fieldBasic","tooltipHelper","valueString","maxWidth","whiteSpace","overflow","textOverflow","marginTop","fileInputField","margin","flexFlow","fileInputStyles","inputLabel","fontWeight","textBoxContainer","border","paddingLeft","label","classes","onChange","id","name","disabled","tooltip","required","error","accept","value","useState","showFileSelector","setShowSelector","Grid","item","xs","className","fieldBottom","fieldContainer","errorInField","InputLabel","htmlFor","fieldLabelError","tooltipContainer","Tooltip","title","placement","HelpIcon","type","e","fileName","get","evt","callback","file","target","files","reader","FileReader","readAsDataURL","onload","fileBase64","result","fileArray","toString","split","length","fileProcess","data","IconButton","color","component","onClick","disableRipple","disableFocusRipple","size","Cancel","ErrorBlock","errorMessage","fileReselect","AttachFile","inputStyles","makeStyles","inputFieldStyles","InputField","props","InputProps","flexGrow","position","overlayAction","right","top","maxHeight","autoComplete","multiline","index","placeholder","min","max","overlayIcon","overlayObject","extraInputProps","noLabelMinWidth","pattern","autoFocus","onKeyPress","inputProps","container","clsx","inputBoxContainer","noMinWidthLabel","fullWidth","helperText","inputRebase","disableTouchRipple","timerI","stopHideTimer","clearInterval","mapDispatchToProps","displayErrorMessage","setModalErrorSnackMessage","connect","state","modalSnackMessage","system","modalSnackBar","modalErrorContainer","width","backgroundColor","borderLeftWidth","borderRadius","zIndex","padding","left","transform","opacity","transitionDuration","modalErrorShow","closeButton","fontSize","cursor","errorTitle","display","alignItems","errorLabel","marginLeft","marginRight","messageIcon","height","detailsButton","transformDuration","extraDetailsContainer","fontStyle","lineHeight","transition","extraDetailsOpen","arrowElement","arrowOpen","customStyle","detailsOpen","setDetailsOpen","displayErrorMsg","setDisplayErrorMsg","closeErrorMessage","useCallback","useEffect","detailedError","message","messageDetails","Fragment","style","onMouseOver","onMouseLeave","setInterval","Close","ErrorOutline","detailsContainerLink","ArrowRight","connector","setModalSnackMessage","deleteDialogStyles","root","content","paddingBottom","customDialogSize","snackBarCommon","onClose","modalOpen","children","wideLimit","noContentPadding","titleIcon","openSnackbar","setOpenSnackbar","customSize","paper","detailedErrorMsg","Dialog","open","scroll","event","reason","DialogTitle","titleText","closeContainer","Snackbar","snackBarModal","ContentProps","snackBar","errorSnackBar","autoHideDuration","DialogContent","buttonContainer","textAlign","modalBasic","formFieldStyles","closeModalAndRefresh","tierData","savingTiers","setSavingTiers","accessKey","setAccessKey","secretKey","setSecretKey","creds","setCreds","encodedCreds","setEncodedCreds","accountName","setAccountName","accountKey","setAccountKey","isFormValid","setIsFormValid","valid","noValidate","onSubmit","preventDefault","rules","access_key","secret_key","api","then","catch","err","addRecord","formFieldRow","encodedValue","variant","errorBlock","palette","main","withBreak","_interopRequireDefault","require","exports","_createSvgIcon","_jsxRuntime","_default","default","jsx","d"],"sourceRoot":""} \ No newline at end of file diff --git a/portal-ui/build/static/js/1140.5e370d17.chunk.js b/portal-ui/build/static/js/1140.35a12cb4.chunk.js similarity index 66% rename from portal-ui/build/static/js/1140.5e370d17.chunk.js rename to portal-ui/build/static/js/1140.35a12cb4.chunk.js index a777c629e..992e6c7e1 100644 --- a/portal-ui/build/static/js/1140.5e370d17.chunk.js +++ b/portal-ui/build/static/js/1140.35a12cb4.chunk.js @@ -1,2 +1,2 @@ -"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1140],{39080:function(e,n,t){t.r(n),t.d(n,{default:function(){return Z}});var i=t(18489),r=t(35531),a=t(50390),s=t(38342),l=t.n(s),c=t(86509),o=t(4285),d=t(66946),u=t(76352),m=t(25594),h=t(58217),p=t(65771),x=t(70758),y=t(33034),g=t.n(y),f=t(98280),v=t(72462),j=t(62559),b=(0,o.Z)((function(e){return(0,c.Z)({container:{display:"flex",flexFlow:"column",padding:"20px 0 8px 0"},inputWithCopy:{"& .MuiInputBase-root ":{width:"100%",background:"#FBFAFA","& .MuiInputBase-input":{height:".8rem"},"& .MuiInputAdornment-positionEnd":{marginRight:".5rem","& .MuiButtonBase-root":{height:"2rem"}}},"& .MuiButtonBase-root .min-icon":{width:".8rem",height:".8rem"}},inputLabel:(0,i.Z)((0,i.Z)({},v.YI.inputLabel),{},{fontSize:".8rem"})})}))((function(e){var n=e.label,t=void 0===n?"":n,i=e.value,r=void 0===i?"":i,a=e.classes,s=void 0===a?{}:a;return(0,j.jsxs)("div",{className:s.container,children:[(0,j.jsxs)("div",{className:s.inputLabel,children:[t,":"]}),(0,j.jsx)("div",{className:s.inputWithCopy,children:(0,j.jsx)(h.Z,{value:r,readOnly:!0,endAdornment:(0,j.jsx)(p.Z,{position:"end",children:(0,j.jsx)(g(),{text:r,children:(0,j.jsx)(x.Z,{"aria-label":"copy",tooltip:"Copy",onClick:function(){},onMouseDown:function(){},edge:"end",children:(0,j.jsx)(f.TI,{})})})})})})]})})),w=t(47424),Z=(0,o.Z)((function(e){return(0,c.Z)({warningBlock:{color:"red",fontSize:".85rem",margin:".5rem 0 .5rem 0",display:"flex",alignItems:"center","& svg ":{marginRight:".3rem",height:16,width:16}},credentialTitle:{padding:".8rem 0 0 0",fontWeight:600,fontSize:".9rem"},buttonContainer:{textAlign:"right",marginTop:"1rem"},credentialsPanel:{overflowY:"auto",maxHeight:350},promptTitle:{display:"flex",alignItems:"center"},buttonSpacer:{marginRight:".9rem"},promptIcon:{marginRight:".1rem",display:"flex",alignItems:"center",height:"2rem",width:"2rem"}})}))((function(e){var n=e.classes,t=e.newServiceAccount,s=e.open,c=e.closeModal,o=e.entity;if(!t)return null;var h=l()(t,"console",null),p=l()(t,"idp",!1);return(0,j.jsx)(u.Z,{modalOpen:s,onClose:function(){c()},title:(0,j.jsx)("div",{className:n.promptTitle,children:(0,j.jsxs)("div",{children:["New ",o," Created"]})}),titleIcon:(0,j.jsx)(f.tV,{}),children:(0,j.jsxs)(m.ZP,{container:!0,children:[(0,j.jsxs)(m.ZP,{item:!0,xs:12,className:n.formScrollable,children:["A new ",o," has been created with the following details:",!p&&h&&(0,j.jsx)(a.Fragment,{children:(0,j.jsxs)(m.ZP,{item:!0,xs:12,className:n.credentialsPanel,children:[(0,j.jsx)("div",{className:n.credentialTitle,children:"Console Credentials"}),Array.isArray(h)&&h.map((function(e,n){return(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(b,{label:"Access Key",value:e.accessKey}),(0,j.jsx)(b,{label:"Secret Key",value:e.secretKey})]})})),!Array.isArray(h)&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(b,{label:"Access Key",value:h.accessKey}),(0,j.jsx)(b,{label:"Secret Key",value:h.secretKey})]})]})}),p?(0,j.jsx)("div",{className:n.warningBlock,children:"Please Login via the configured external identity provider."}):(0,j.jsxs)("div",{className:n.warningBlock,children:[(0,j.jsx)(w.Z,{}),(0,j.jsx)("span",{children:"Write these down, as this is the only time the secret will be displayed."})]})]}),(0,j.jsxs)(m.ZP,{item:!0,xs:12,className:n.buttonContainer,children:[(0,j.jsx)(d.Z,{variant:"outlined",className:n.buttonSpacer,onClick:function(){c()},color:"primary",children:"Done"}),!p&&(0,j.jsx)(d.Z,{onClick:function(){var e={};if(h)if(Array.isArray(h)){var n=h.map((function(e){return{url:e.url,access_key:e.accessKey,secret_key:e.secretKey,api:"s3v4",path:"auto"}}));e={console:(0,r.Z)(n)}}else e={console:[{url:h.url,access_key:h.accessKey,secret_key:h.secretKey,api:"s3v4",path:"auto"}]};!function(e,n){var t=document.createElement("a");t.setAttribute("href","data:text/plain;charset=utf-8,"+encodeURIComponent(n)),t.setAttribute("download",e),t.style.display="none",document.body.appendChild(t),t.click(),document.body.removeChild(t)}("credentials.json",JSON.stringify((0,i.Z)({},e)))},endIcon:(0,j.jsx)(f._8,{}),variant:"contained",color:"primary",children:"Download"})]})]})})}))}}]); -//# sourceMappingURL=1140.5e370d17.chunk.js.map \ No newline at end of file +"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1140],{39080:function(e,n,t){t.r(n),t.d(n,{default:function(){return Z}});var i=t(18489),r=t(35531),a=t(50390),s=t(38342),l=t.n(s),o=t(86509),c=t(4285),d=t(66946),u=t(76352),m=t(25594),h=t(58217),p=t(65771),x=t(70758),y=t(33034),g=t.n(y),f=t(85615),v=t(72462),j=t(62559),b=(0,c.Z)((function(e){return(0,o.Z)({container:{display:"flex",flexFlow:"column",padding:"20px 0 8px 0"},inputWithCopy:{"& .MuiInputBase-root ":{width:"100%",background:"#FBFAFA","& .MuiInputBase-input":{height:".8rem"},"& .MuiInputAdornment-positionEnd":{marginRight:".5rem","& .MuiButtonBase-root":{height:"2rem"}}},"& .MuiButtonBase-root .min-icon":{width:".8rem",height:".8rem"}},inputLabel:(0,i.Z)((0,i.Z)({},v.YI.inputLabel),{},{fontSize:".8rem"})})}))((function(e){var n=e.label,t=void 0===n?"":n,i=e.value,r=void 0===i?"":i,a=e.classes,s=void 0===a?{}:a;return(0,j.jsxs)("div",{className:s.container,children:[(0,j.jsxs)("div",{className:s.inputLabel,children:[t,":"]}),(0,j.jsx)("div",{className:s.inputWithCopy,children:(0,j.jsx)(h.Z,{value:r,readOnly:!0,endAdornment:(0,j.jsx)(p.Z,{position:"end",children:(0,j.jsx)(g(),{text:r,children:(0,j.jsx)(x.Z,{"aria-label":"copy",tooltip:"Copy",onClick:function(){},onMouseDown:function(){},edge:"end",children:(0,j.jsx)(f.TI,{})})})})})})]})})),w=t(47424),Z=(0,c.Z)((function(e){return(0,o.Z)({warningBlock:{color:"red",fontSize:".85rem",margin:".5rem 0 .5rem 0",display:"flex",alignItems:"center","& svg ":{marginRight:".3rem",height:16,width:16}},credentialTitle:{padding:".8rem 0 0 0",fontWeight:600,fontSize:".9rem"},buttonContainer:{textAlign:"right",marginTop:"1rem"},credentialsPanel:{overflowY:"auto",maxHeight:350},promptTitle:{display:"flex",alignItems:"center"},buttonSpacer:{marginRight:".9rem"},promptIcon:{marginRight:".1rem",display:"flex",alignItems:"center",height:"2rem",width:"2rem"}})}))((function(e){var n=e.classes,t=e.newServiceAccount,s=e.open,o=e.closeModal,c=e.entity;if(!t)return null;var h=l()(t,"console",null),p=l()(t,"idp",!1);return(0,j.jsx)(u.Z,{modalOpen:s,onClose:function(){o()},title:(0,j.jsx)("div",{className:n.promptTitle,children:(0,j.jsxs)("div",{children:["New ",c," Created"]})}),titleIcon:(0,j.jsx)(f.tV,{}),children:(0,j.jsxs)(m.ZP,{container:!0,children:[(0,j.jsxs)(m.ZP,{item:!0,xs:12,className:n.formScrollable,children:["A new ",c," has been created with the following details:",!p&&h&&(0,j.jsx)(a.Fragment,{children:(0,j.jsxs)(m.ZP,{item:!0,xs:12,className:n.credentialsPanel,children:[(0,j.jsx)("div",{className:n.credentialTitle,children:"Console Credentials"}),Array.isArray(h)&&h.map((function(e,n){return(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(b,{label:"Access Key",value:e.accessKey}),(0,j.jsx)(b,{label:"Secret Key",value:e.secretKey})]})})),!Array.isArray(h)&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(b,{label:"Access Key",value:h.accessKey}),(0,j.jsx)(b,{label:"Secret Key",value:h.secretKey})]})]})}),p?(0,j.jsx)("div",{className:n.warningBlock,children:"Please Login via the configured external identity provider."}):(0,j.jsxs)("div",{className:n.warningBlock,children:[(0,j.jsx)(w.Z,{}),(0,j.jsx)("span",{children:"Write these down, as this is the only time the secret will be displayed."})]})]}),(0,j.jsxs)(m.ZP,{item:!0,xs:12,className:n.buttonContainer,children:[(0,j.jsx)(d.Z,{id:"done-button",variant:"outlined",className:n.buttonSpacer,onClick:function(){o()},color:"primary",children:"Done"}),!p&&(0,j.jsx)(d.Z,{id:"download-button",onClick:function(){var e={};if(h)if(Array.isArray(h)){var n=h.map((function(e){return{url:e.url,access_key:e.accessKey,secret_key:e.secretKey,api:"s3v4",path:"auto"}}));e={console:(0,r.Z)(n)}}else e={console:[{url:h.url,access_key:h.accessKey,secret_key:h.secretKey,api:"s3v4",path:"auto"}]};!function(e,n){var t=document.createElement("a");t.setAttribute("href","data:text/plain;charset=utf-8,"+encodeURIComponent(n)),t.setAttribute("download",e),t.style.display="none",document.body.appendChild(t),t.click(),document.body.removeChild(t)}("credentials.json",JSON.stringify((0,i.Z)({},e)))},endIcon:(0,j.jsx)(f._8,{}),variant:"contained",color:"primary",children:"Download"})]})]})})}))}}]); +//# sourceMappingURL=1140.35a12cb4.chunk.js.map \ No newline at end of file diff --git a/portal-ui/build/static/js/1140.35a12cb4.chunk.js.map b/portal-ui/build/static/js/1140.35a12cb4.chunk.js.map new file mode 100644 index 000000000..b9246bd07 --- /dev/null +++ b/portal-ui/build/static/js/1140.35a12cb4.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/1140.35a12cb4.chunk.js","mappings":"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","sources":["screens/Console/Common/CredentialsPrompt/CredentialItem.tsx","screens/Console/Common/CredentialsPrompt/CredentialsPrompt.tsx"],"sourcesContent":["// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { InputAdornment, OutlinedInput } from \"@mui/material\";\nimport BoxIconButton from \"../BoxIconButton/BoxIconButton\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport CopyToClipboard from \"react-copy-to-clipboard\";\nimport { CopyIcon } from \"../../../../icons\";\nimport { fieldBasic } from \"../FormComponents/common/styleLibrary\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n container: {\n display: \"flex\",\n flexFlow: \"column\",\n padding: \"20px 0 8px 0\",\n },\n inputWithCopy: {\n \"& .MuiInputBase-root \": {\n width: \"100%\",\n background: \"#FBFAFA\",\n \"& .MuiInputBase-input\": {\n height: \".8rem\",\n },\n \"& .MuiInputAdornment-positionEnd\": {\n marginRight: \".5rem\",\n \"& .MuiButtonBase-root\": {\n height: \"2rem\",\n },\n },\n },\n \"& .MuiButtonBase-root .min-icon\": {\n width: \".8rem\",\n height: \".8rem\",\n },\n },\n inputLabel: {\n ...fieldBasic.inputLabel,\n fontSize: \".8rem\",\n },\n });\n\nconst CredentialItem = ({\n label = \"\",\n value = \"\",\n classes = {},\n}: {\n label: string;\n value: string;\n classes: any;\n}) => {\n return (\n
\n
{label}:
\n
\n \n \n {}}\n onMouseDown={() => {}}\n edge=\"end\"\n >\n \n \n \n \n }\n />\n
\n
\n );\n};\n\nexport default withStyles(styles)(CredentialItem);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport get from \"lodash/get\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { NewServiceAccount } from \"./types\";\nimport { Button } from \"@mui/material\";\nimport ModalWrapper from \"../ModalWrapper/ModalWrapper\";\nimport Grid from \"@mui/material/Grid\";\nimport CredentialItem from \"./CredentialItem\";\nimport WarnIcon from \"../../../../icons/WarnIcon\";\nimport { DownloadIcon, ServiceAccountCredentialsIcon } from \"../../../../icons\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n warningBlock: {\n color: \"red\",\n fontSize: \".85rem\",\n margin: \".5rem 0 .5rem 0\",\n display: \"flex\",\n alignItems: \"center\",\n \"& svg \": {\n marginRight: \".3rem\",\n height: 16,\n width: 16,\n },\n },\n credentialTitle: {\n padding: \".8rem 0 0 0\",\n fontWeight: 600,\n fontSize: \".9rem\",\n },\n buttonContainer: {\n textAlign: \"right\",\n marginTop: \"1rem\",\n },\n credentialsPanel: {\n overflowY: \"auto\",\n maxHeight: 350,\n },\n promptTitle: {\n display: \"flex\",\n alignItems: \"center\",\n },\n buttonSpacer: {\n marginRight: \".9rem\",\n },\n promptIcon: {\n marginRight: \".1rem\",\n display: \"flex\",\n alignItems: \"center\",\n height: \"2rem\",\n width: \"2rem\",\n },\n });\n\ninterface ICredentialsPromptProps {\n classes: any;\n newServiceAccount: NewServiceAccount | null;\n open: boolean;\n entity: string;\n closeModal: () => void;\n}\n\nconst download = (filename: string, text: string) => {\n let element = document.createElement(\"a\");\n element.setAttribute(\n \"href\",\n \"data:text/plain;charset=utf-8,\" + encodeURIComponent(text)\n );\n element.setAttribute(\"download\", filename);\n\n element.style.display = \"none\";\n document.body.appendChild(element);\n\n element.click();\n document.body.removeChild(element);\n};\n\nconst CredentialsPrompt = ({\n classes,\n newServiceAccount,\n open,\n closeModal,\n entity,\n}: ICredentialsPromptProps) => {\n if (!newServiceAccount) {\n return null;\n }\n const consoleCreds = get(newServiceAccount, \"console\", null);\n const idp = get(newServiceAccount, \"idp\", false);\n\n return (\n {\n closeModal();\n }}\n title={\n
\n
New {entity} Created
\n
\n }\n titleIcon={}\n >\n \n \n A new {entity} has been created with the following details:\n {!idp && consoleCreds && (\n \n \n
\n Console Credentials\n
\n {Array.isArray(consoleCreds) &&\n consoleCreds.map((credentialsPair, index) => {\n return (\n <>\n \n \n \n );\n })}\n {!Array.isArray(consoleCreds) && (\n <>\n \n \n \n )}\n
\n
\n )}\n {idp ? (\n
\n Please Login via the configured external identity provider.\n
\n ) : (\n
\n \n \n Write these down, as this is the only time the secret will be\n displayed.\n \n
\n )}\n
\n \n {\n closeModal();\n }}\n color=\"primary\"\n >\n Done\n \n\n {!idp && (\n {\n let consoleExtras = {};\n\n if (consoleCreds) {\n if (!Array.isArray(consoleCreds)) {\n consoleExtras = {\n console: [\n {\n url: consoleCreds.url,\n access_key: consoleCreds.accessKey,\n secret_key: consoleCreds.secretKey,\n api: \"s3v4\",\n path: \"auto\",\n },\n ],\n };\n } else {\n const cCreds = consoleCreds.map((itemMap) => {\n return {\n url: itemMap.url,\n access_key: itemMap.accessKey,\n secret_key: itemMap.secretKey,\n api: \"s3v4\",\n path: \"auto\",\n };\n });\n\n consoleExtras = {\n console: [...cCreds],\n };\n }\n }\n\n download(\n \"credentials.json\",\n JSON.stringify({\n ...consoleExtras,\n })\n );\n }}\n endIcon={}\n variant=\"contained\"\n color=\"primary\"\n >\n Download\n \n )}\n \n
\n \n );\n};\n\nexport default withStyles(styles)(CredentialsPrompt);\n"],"names":["withStyles","theme","createStyles","container","display","flexFlow","padding","inputWithCopy","width","background","height","marginRight","inputLabel","fieldBasic","fontSize","label","value","classes","className","OutlinedInput","readOnly","endAdornment","InputAdornment","position","text","BoxIconButton","tooltip","onClick","onMouseDown","edge","warningBlock","color","margin","alignItems","credentialTitle","fontWeight","buttonContainer","textAlign","marginTop","credentialsPanel","overflowY","maxHeight","promptTitle","buttonSpacer","promptIcon","newServiceAccount","open","closeModal","entity","consoleCreds","get","idp","ModalWrapper","modalOpen","onClose","title","titleIcon","Grid","item","xs","formScrollable","Array","isArray","map","credentialsPair","index","accessKey","secretKey","WarnIcon","Button","id","variant","consoleExtras","cCreds","itemMap","url","access_key","secret_key","api","path","console","filename","element","document","createElement","setAttribute","encodeURIComponent","style","body","appendChild","click","removeChild","download","JSON","stringify","endIcon"],"sourceRoot":""} \ No newline at end of file diff --git a/portal-ui/build/static/js/1140.5e370d17.chunk.js.map b/portal-ui/build/static/js/1140.5e370d17.chunk.js.map deleted file mode 100644 index 04568b984..000000000 --- a/portal-ui/build/static/js/1140.5e370d17.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/1140.5e370d17.chunk.js","mappings":"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","sources":["screens/Console/Common/CredentialsPrompt/CredentialItem.tsx","screens/Console/Common/CredentialsPrompt/CredentialsPrompt.tsx"],"sourcesContent":["// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { InputAdornment, OutlinedInput } from \"@mui/material\";\nimport BoxIconButton from \"../BoxIconButton/BoxIconButton\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport CopyToClipboard from \"react-copy-to-clipboard\";\nimport { CopyIcon } from \"../../../../icons\";\nimport { fieldBasic } from \"../FormComponents/common/styleLibrary\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n container: {\n display: \"flex\",\n flexFlow: \"column\",\n padding: \"20px 0 8px 0\",\n },\n inputWithCopy: {\n \"& .MuiInputBase-root \": {\n width: \"100%\",\n background: \"#FBFAFA\",\n \"& .MuiInputBase-input\": {\n height: \".8rem\",\n },\n \"& .MuiInputAdornment-positionEnd\": {\n marginRight: \".5rem\",\n \"& .MuiButtonBase-root\": {\n height: \"2rem\",\n },\n },\n },\n \"& .MuiButtonBase-root .min-icon\": {\n width: \".8rem\",\n height: \".8rem\",\n },\n },\n inputLabel: {\n ...fieldBasic.inputLabel,\n fontSize: \".8rem\",\n },\n });\n\nconst CredentialItem = ({\n label = \"\",\n value = \"\",\n classes = {},\n}: {\n label: string;\n value: string;\n classes: any;\n}) => {\n return (\n
\n
{label}:
\n
\n \n \n {}}\n onMouseDown={() => {}}\n edge=\"end\"\n >\n \n \n \n \n }\n />\n
\n
\n );\n};\n\nexport default withStyles(styles)(CredentialItem);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport get from \"lodash/get\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { NewServiceAccount } from \"./types\";\nimport { Button } from \"@mui/material\";\nimport ModalWrapper from \"../ModalWrapper/ModalWrapper\";\nimport Grid from \"@mui/material/Grid\";\nimport CredentialItem from \"./CredentialItem\";\nimport WarnIcon from \"../../../../icons/WarnIcon\";\nimport { DownloadIcon, ServiceAccountCredentialsIcon } from \"../../../../icons\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n warningBlock: {\n color: \"red\",\n fontSize: \".85rem\",\n margin: \".5rem 0 .5rem 0\",\n display: \"flex\",\n alignItems: \"center\",\n \"& svg \": {\n marginRight: \".3rem\",\n height: 16,\n width: 16,\n },\n },\n credentialTitle: {\n padding: \".8rem 0 0 0\",\n fontWeight: 600,\n fontSize: \".9rem\",\n },\n buttonContainer: {\n textAlign: \"right\",\n marginTop: \"1rem\",\n },\n credentialsPanel: {\n overflowY: \"auto\",\n maxHeight: 350,\n },\n promptTitle: {\n display: \"flex\",\n alignItems: \"center\",\n },\n buttonSpacer: {\n marginRight: \".9rem\",\n },\n promptIcon: {\n marginRight: \".1rem\",\n display: \"flex\",\n alignItems: \"center\",\n height: \"2rem\",\n width: \"2rem\",\n },\n });\n\ninterface ICredentialsPromptProps {\n classes: any;\n newServiceAccount: NewServiceAccount | null;\n open: boolean;\n entity: string;\n closeModal: () => void;\n}\n\nconst download = (filename: string, text: string) => {\n let element = document.createElement(\"a\");\n element.setAttribute(\n \"href\",\n \"data:text/plain;charset=utf-8,\" + encodeURIComponent(text)\n );\n element.setAttribute(\"download\", filename);\n\n element.style.display = \"none\";\n document.body.appendChild(element);\n\n element.click();\n document.body.removeChild(element);\n};\n\nconst CredentialsPrompt = ({\n classes,\n newServiceAccount,\n open,\n closeModal,\n entity,\n}: ICredentialsPromptProps) => {\n if (!newServiceAccount) {\n return null;\n }\n const consoleCreds = get(newServiceAccount, \"console\", null);\n const idp = get(newServiceAccount, \"idp\", false);\n\n return (\n {\n closeModal();\n }}\n title={\n
\n
New {entity} Created
\n
\n }\n titleIcon={}\n >\n \n \n A new {entity} has been created with the following details:\n {!idp && consoleCreds && (\n \n \n
\n Console Credentials\n
\n {Array.isArray(consoleCreds) &&\n consoleCreds.map((credentialsPair, index) => {\n return (\n <>\n \n \n \n );\n })}\n {!Array.isArray(consoleCreds) && (\n <>\n \n \n \n )}\n
\n
\n )}\n {idp ? (\n
\n Please Login via the configured external identity provider.\n
\n ) : (\n
\n \n \n Write these down, as this is the only time the secret will be\n displayed.\n \n
\n )}\n
\n \n {\n closeModal();\n }}\n color=\"primary\"\n >\n Done\n \n\n {!idp && (\n {\n let consoleExtras = {};\n\n if (consoleCreds) {\n if (!Array.isArray(consoleCreds)) {\n consoleExtras = {\n console: [\n {\n url: consoleCreds.url,\n access_key: consoleCreds.accessKey,\n secret_key: consoleCreds.secretKey,\n api: \"s3v4\",\n path: \"auto\",\n },\n ],\n };\n } else {\n const cCreds = consoleCreds.map((itemMap) => {\n return {\n url: itemMap.url,\n access_key: itemMap.accessKey,\n secret_key: itemMap.secretKey,\n api: \"s3v4\",\n path: \"auto\",\n };\n });\n\n consoleExtras = {\n console: [...cCreds],\n };\n }\n }\n\n download(\n \"credentials.json\",\n JSON.stringify({\n ...consoleExtras,\n })\n );\n }}\n endIcon={}\n variant=\"contained\"\n color=\"primary\"\n >\n Download\n \n )}\n \n
\n \n );\n};\n\nexport default withStyles(styles)(CredentialsPrompt);\n"],"names":["withStyles","theme","createStyles","container","display","flexFlow","padding","inputWithCopy","width","background","height","marginRight","inputLabel","fieldBasic","fontSize","label","value","classes","className","OutlinedInput","readOnly","endAdornment","InputAdornment","position","text","BoxIconButton","tooltip","onClick","onMouseDown","edge","warningBlock","color","margin","alignItems","credentialTitle","fontWeight","buttonContainer","textAlign","marginTop","credentialsPanel","overflowY","maxHeight","promptTitle","buttonSpacer","promptIcon","newServiceAccount","open","closeModal","entity","consoleCreds","get","idp","ModalWrapper","modalOpen","onClose","title","titleIcon","Grid","item","xs","formScrollable","Array","isArray","map","credentialsPair","index","accessKey","secretKey","WarnIcon","Button","variant","consoleExtras","cCreds","itemMap","url","access_key","secret_key","api","path","console","filename","element","document","createElement","setAttribute","encodeURIComponent","style","body","appendChild","click","removeChild","download","JSON","stringify","endIcon"],"sourceRoot":""} \ No newline at end of file diff --git a/portal-ui/build/static/js/1237.5cfe4b14.chunk.js b/portal-ui/build/static/js/1237.dbb13c2b.chunk.js similarity index 95% rename from portal-ui/build/static/js/1237.5cfe4b14.chunk.js rename to portal-ui/build/static/js/1237.dbb13c2b.chunk.js index ebe9e3cf9..6731e6d12 100644 --- a/portal-ui/build/static/js/1237.5cfe4b14.chunk.js +++ b/portal-ui/build/static/js/1237.dbb13c2b.chunk.js @@ -1,2 +1,2 @@ -"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1237],{37882:function(n,e,r){var o=r(18489),t=r(50390),i=r(62559);e.Z=function(n){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;function r(r){return(0,i.jsx)(t.Suspense,{fallback:e,children:(0,i.jsx)(n,(0,o.Z)({},r))})}return r}},25534:function(n,e,r){var o=r(18489),t=(r(50390),r(25594)),i=r(86509),a=r(4285),c=r(72462),l=r(62559);e.Z=(0,a.Z)((function(n){return(0,i.Z)((0,o.Z)({},c.Bw))}))((function(n){var e=n.classes,r=n.className,o=void 0===r?"":r,i=n.children;return(0,l.jsx)("div",{className:e.contentSpacer,children:(0,l.jsx)(t.ZP,{container:!0,children:(0,l.jsx)(t.ZP,{item:!0,xs:12,className:o,children:i})})})}))},31237:function(n,e,r){r.r(e);var o=r(50390),t=r(24442),i=r(70971),a=r(34424),c=r(44149),l=r(36176),u=r(37882),s=r(49495),d=r(62559),f=(0,u.Z)(o.lazy((function(){return Promise.all([r.e(14),r.e(3152),r.e(2066),r.e(3690),r.e(5399),r.e(7777),r.e(3967)]).then(r.bind(r,63967))}))),p=(0,u.Z)(o.lazy((function(){return Promise.all([r.e(14),r.e(3152),r.e(2066),r.e(3690),r.e(5399),r.e(9998),r.e(8954),r.e(7777),r.e(4084)]).then(r.bind(r,5604))}))),m=(0,a.$j)((function(n){return{open:n.system.sidebarOpen}}),{setMenuOpen:c.gG});e.default=(0,i.EN)(m((function(){return(0,d.jsx)(i.F0,{history:t.Z,children:(0,d.jsxs)(i.rs,{children:[(0,d.jsx)(i.AW,{path:s.gA.POLICIES,exact:!0,component:f}),(0,d.jsx)(i.AW,{path:"".concat(s.gA.POLICIES,"/*"),component:p}),(0,d.jsx)(i.AW,{path:"/",component:f}),(0,d.jsx)(i.AW,{component:l.Z})]})})})))},36176:function(n,e,r){r.d(e,{Z:function(){return u}});r(50390);var o=r(56805),t=r(35477),i=r(10567),a=r(62559);function c(){return(0,a.jsxs)(t.Z,{variant:"body2",color:"textSecondary",align:"center",children:["Copyright \xa9 ",(0,a.jsx)(i.Z,{color:"inherit",href:"https://min.io/?ref=con",children:"MinIO"})," ",(new Date).getFullYear(),"."]})}var l=r(25534),u=function(){return(0,a.jsx)(l.Z,{children:(0,a.jsxs)(o.Z,{sx:{display:"flex",alignItems:"center",justifyContent:"center",height:"100%",textAlign:"center",margin:"auto",flexFlow:"column"},children:[(0,a.jsx)(o.Z,{sx:{fontSize:"110%",margin:"0 0 0.25rem",color:"#909090"},children:"404 Error"}),(0,a.jsx)(o.Z,{sx:{fontStyle:"normal",fontSize:"clamp(2rem,calc(2rem + 1.2vw),3rem)",fontWeight:700},children:"Sorry, the page could not be found."}),(0,a.jsx)(o.Z,{mt:5,children:(0,a.jsx)(c,{})})]})})}},10567:function(n,e,r){r.d(e,{Z:function(){return k}});var o=r(23430),t=r(36222),i=r(1048),a=r(32793),c=r(50390),l=r(44977),u=r(50076),s=r(29001),d=r(36128),f=r(91442),p=r(8208),m=r(15573),h=r(42081),x=r(3299),Z=r(35477),v=r(10594);function y(n){return(0,v.Z)("MuiLink",n)}var b=(0,r(43349).Z)("MuiLink",["root","underlineNone","underlineHover","underlineAlways","button","focusVisible"]),g=r(62559),j=["className","color","component","onBlur","onFocus","TypographyClasses","underline","variant"],S={primary:"primary.main",textPrimary:"text.primary",secondary:"secondary.main",textSecondary:"text.secondary",error:"error.main"},w=(0,p.ZP)(Z.Z,{name:"MuiLink",slot:"Root",overridesResolver:function(n,e){var r=n.ownerState;return[e.root,e["underline".concat((0,f.Z)(r.underline))],"button"===r.component&&e.button]}})((function(n){var e=n.theme,r=n.ownerState,o=(0,s.D)(e,"palette.".concat(function(n){return S[n]||n}(r.color)))||r.color;return(0,a.Z)({},"none"===r.underline&&{textDecoration:"none"},"hover"===r.underline&&{textDecoration:"none","&:hover":{textDecoration:"underline"}},"always"===r.underline&&{textDecoration:"underline",textDecorationColor:"inherit"!==o?(0,d.Fq)(o,.4):void 0,"&:hover":{textDecorationColor:"inherit"}},"button"===r.component&&(0,t.Z)({position:"relative",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle",MozAppearance:"none",WebkitAppearance:"none","&::-moz-focus-inner":{borderStyle:"none"}},"&.".concat(b.focusVisible),{outline:"auto"}))})),k=c.forwardRef((function(n,e){var r=(0,m.Z)({props:n,name:"MuiLink"}),t=r.className,s=r.color,d=void 0===s?"primary":s,p=r.component,Z=void 0===p?"a":p,v=r.onBlur,b=r.onFocus,S=r.TypographyClasses,k=r.underline,C=void 0===k?"always":k,A=r.variant,F=void 0===A?"inherit":A,D=(0,i.Z)(r,j),N=(0,h.Z)(),P=N.isFocusVisibleRef,M=N.onBlur,W=N.onFocus,z=N.ref,I=c.useState(!1),L=(0,o.Z)(I,2),V=L[0],B=L[1],O=(0,x.Z)(e,z),R=(0,a.Z)({},r,{color:d,component:Z,focusVisible:V,underline:C,variant:F}),E=function(n){var e=n.classes,r=n.component,o=n.focusVisible,t=n.underline,i={root:["root","underline".concat((0,f.Z)(t)),"button"===r&&"button",o&&"focusVisible"]};return(0,u.Z)(i,y,e)}(R);return(0,g.jsx)(w,(0,a.Z)({className:(0,l.Z)(E.root,t),classes:S,color:d,component:Z,onBlur:function(n){M(n),!1===P.current&&B(!1),v&&v(n)},onFocus:function(n){W(n),!0===P.current&&B(!0),b&&b(n)},ref:O,ownerState:R,variant:F},D))}))}}]); -//# sourceMappingURL=1237.5cfe4b14.chunk.js.map \ No newline at end of file +"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1237],{37882:function(n,e,r){var o=r(18489),t=r(50390),i=r(62559);e.Z=function(n){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;function r(r){return(0,i.jsx)(t.Suspense,{fallback:e,children:(0,i.jsx)(n,(0,o.Z)({},r))})}return r}},25534:function(n,e,r){var o=r(18489),t=(r(50390),r(25594)),i=r(86509),a=r(4285),c=r(72462),l=r(62559);e.Z=(0,a.Z)((function(n){return(0,i.Z)((0,o.Z)({},c.Bw))}))((function(n){var e=n.classes,r=n.className,o=void 0===r?"":r,i=n.children;return(0,l.jsx)("div",{className:e.contentSpacer,children:(0,l.jsx)(t.ZP,{container:!0,children:(0,l.jsx)(t.ZP,{item:!0,xs:12,className:o,children:i})})})}))},31237:function(n,e,r){r.r(e);var o=r(50390),t=r(24442),i=r(70971),a=r(34424),c=r(44149),l=r(36176),u=r(37882),s=r(49495),d=r(62559),f=(0,u.Z)(o.lazy((function(){return Promise.all([r.e(14),r.e(3152),r.e(2066),r.e(3690),r.e(5399),r.e(8174),r.e(3967)]).then(r.bind(r,63967))}))),p=(0,u.Z)(o.lazy((function(){return Promise.all([r.e(14),r.e(3152),r.e(2066),r.e(3690),r.e(5399),r.e(9998),r.e(8954),r.e(8174),r.e(4084)]).then(r.bind(r,5604))}))),m=(0,a.$j)((function(n){return{open:n.system.sidebarOpen}}),{setMenuOpen:c.gG});e.default=(0,i.EN)(m((function(){return(0,d.jsx)(i.F0,{history:t.Z,children:(0,d.jsxs)(i.rs,{children:[(0,d.jsx)(i.AW,{path:s.gA.POLICIES,exact:!0,component:f}),(0,d.jsx)(i.AW,{path:"".concat(s.gA.POLICIES,"/*"),component:p}),(0,d.jsx)(i.AW,{path:"/",component:f}),(0,d.jsx)(i.AW,{component:l.Z})]})})})))},36176:function(n,e,r){r.d(e,{Z:function(){return u}});r(50390);var o=r(56805),t=r(35477),i=r(10567),a=r(62559);function c(){return(0,a.jsxs)(t.Z,{variant:"body2",color:"textSecondary",align:"center",children:["Copyright \xa9 ",(0,a.jsx)(i.Z,{color:"inherit",href:"https://min.io/?ref=con",children:"MinIO"})," ",(new Date).getFullYear(),"."]})}var l=r(25534),u=function(){return(0,a.jsx)(l.Z,{children:(0,a.jsxs)(o.Z,{sx:{display:"flex",alignItems:"center",justifyContent:"center",height:"100%",textAlign:"center",margin:"auto",flexFlow:"column"},children:[(0,a.jsx)(o.Z,{sx:{fontSize:"110%",margin:"0 0 0.25rem",color:"#909090"},children:"404 Error"}),(0,a.jsx)(o.Z,{sx:{fontStyle:"normal",fontSize:"clamp(2rem,calc(2rem + 1.2vw),3rem)",fontWeight:700},children:"Sorry, the page could not be found."}),(0,a.jsx)(o.Z,{mt:5,children:(0,a.jsx)(c,{})})]})})}},10567:function(n,e,r){r.d(e,{Z:function(){return k}});var o=r(23430),t=r(36222),i=r(1048),a=r(32793),c=r(50390),l=r(44977),u=r(50076),s=r(29001),d=r(36128),f=r(91442),p=r(8208),m=r(15573),h=r(42081),x=r(3299),Z=r(35477),v=r(10594);function y(n){return(0,v.Z)("MuiLink",n)}var b=(0,r(43349).Z)("MuiLink",["root","underlineNone","underlineHover","underlineAlways","button","focusVisible"]),g=r(62559),j=["className","color","component","onBlur","onFocus","TypographyClasses","underline","variant"],S={primary:"primary.main",textPrimary:"text.primary",secondary:"secondary.main",textSecondary:"text.secondary",error:"error.main"},w=(0,p.ZP)(Z.Z,{name:"MuiLink",slot:"Root",overridesResolver:function(n,e){var r=n.ownerState;return[e.root,e["underline".concat((0,f.Z)(r.underline))],"button"===r.component&&e.button]}})((function(n){var e=n.theme,r=n.ownerState,o=(0,s.D)(e,"palette.".concat(function(n){return S[n]||n}(r.color)))||r.color;return(0,a.Z)({},"none"===r.underline&&{textDecoration:"none"},"hover"===r.underline&&{textDecoration:"none","&:hover":{textDecoration:"underline"}},"always"===r.underline&&{textDecoration:"underline",textDecorationColor:"inherit"!==o?(0,d.Fq)(o,.4):void 0,"&:hover":{textDecorationColor:"inherit"}},"button"===r.component&&(0,t.Z)({position:"relative",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle",MozAppearance:"none",WebkitAppearance:"none","&::-moz-focus-inner":{borderStyle:"none"}},"&.".concat(b.focusVisible),{outline:"auto"}))})),k=c.forwardRef((function(n,e){var r=(0,m.Z)({props:n,name:"MuiLink"}),t=r.className,s=r.color,d=void 0===s?"primary":s,p=r.component,Z=void 0===p?"a":p,v=r.onBlur,b=r.onFocus,S=r.TypographyClasses,k=r.underline,C=void 0===k?"always":k,A=r.variant,F=void 0===A?"inherit":A,D=(0,i.Z)(r,j),N=(0,h.Z)(),P=N.isFocusVisibleRef,M=N.onBlur,W=N.onFocus,z=N.ref,I=c.useState(!1),L=(0,o.Z)(I,2),V=L[0],B=L[1],O=(0,x.Z)(e,z),R=(0,a.Z)({},r,{color:d,component:Z,focusVisible:V,underline:C,variant:F}),E=function(n){var e=n.classes,r=n.component,o=n.focusVisible,t=n.underline,i={root:["root","underline".concat((0,f.Z)(t)),"button"===r&&"button",o&&"focusVisible"]};return(0,u.Z)(i,y,e)}(R);return(0,g.jsx)(w,(0,a.Z)({className:(0,l.Z)(E.root,t),classes:S,color:d,component:Z,onBlur:function(n){M(n),!1===P.current&&B(!1),v&&v(n)},onFocus:function(n){W(n),!0===P.current&&B(!0),b&&b(n)},ref:O,ownerState:R,variant:F},D))}))}}]); +//# sourceMappingURL=1237.dbb13c2b.chunk.js.map \ No newline at end of file diff --git a/portal-ui/build/static/js/1237.5cfe4b14.chunk.js.map b/portal-ui/build/static/js/1237.dbb13c2b.chunk.js.map similarity index 99% rename from portal-ui/build/static/js/1237.5cfe4b14.chunk.js.map rename to portal-ui/build/static/js/1237.dbb13c2b.chunk.js.map index 452526a93..b57b8e0e3 100644 --- a/portal-ui/build/static/js/1237.5cfe4b14.chunk.js.map +++ b/portal-ui/build/static/js/1237.dbb13c2b.chunk.js.map @@ -1 +1 @@ -{"version":3,"file":"static/js/1237.5cfe4b14.chunk.js","mappings":"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","sources":["screens/Console/Common/Components/withSuspense.tsx","screens/Console/Common/Layout/PageLayout.tsx","screens/Console/Policies/Policies.tsx","common/Copyright.tsx","screens/NotFoundPage.tsx","../node_modules/@mui/material/Link/linkClasses.js","../node_modules/@mui/material/Link/Link.js"],"sourcesContent":["// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { ComponentType, Suspense, SuspenseProps } from \"react\";\n\nfunction withSuspense

(\n WrappedComponent: ComponentType

,\n fallback: SuspenseProps[\"fallback\"] = null\n) {\n function ComponentWithSuspense(props: P) {\n return (\n \n \n \n );\n }\n\n return ComponentWithSuspense;\n}\n\nexport default withSuspense;\n","import React from \"react\";\nimport { Grid } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { pageContentStyles } from \"../FormComponents/common/styleLibrary\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...pageContentStyles,\n });\n\ntype PageLayoutProps = {\n className?: string;\n classes?: any;\n children: any;\n};\n\nconst PageLayout = ({ classes, className = \"\", children }: PageLayoutProps) => {\n return (\n

\n \n \n {children}\n \n \n
\n );\n};\n\nexport default withStyles(styles)(PageLayout);\n","// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport history from \"../../../history\";\nimport { Route, Router, Switch, withRouter } from \"react-router-dom\";\nimport { connect } from \"react-redux\";\nimport { AppState } from \"../../../store\";\nimport { setMenuOpen } from \"../../../actions\";\nimport NotFoundPage from \"../../NotFoundPage\";\nimport withSuspense from \"../Common/Components/withSuspense\";\nimport { IAM_PAGES } from \"../../../common/SecureComponent/permissions\";\nconst ListPolicies = withSuspense(React.lazy(() => import(\"./ListPolicies\")));\nconst PolicyDetails = withSuspense(React.lazy(() => import(\"./PolicyDetails\")));\n\nconst mapState = (state: AppState) => ({\n open: state.system.sidebarOpen,\n});\n\nconst connector = connect(mapState, { setMenuOpen });\n\nconst Policies = () => {\n return (\n \n \n \n \n \n \n \n \n );\n};\n\nexport default withRouter(connector(Policies));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport Typography from \"@mui/material/Typography\";\nimport Link from \"@mui/material/Link\";\n\nexport default function Copyright() {\n return (\n \n {\"Copyright © \"}\n \n MinIO\n {\" \"}\n {new Date().getFullYear()}\n {\".\"}\n \n );\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport Box from \"@mui/material/Box\";\nimport Copyright from \"../common/Copyright\";\nimport PageLayout from \"./Console/Common/Layout/PageLayout\";\n\nconst NotFound: React.FC = () => {\n return (\n \n \n \n 404 Error\n \n \n Sorry, the page could not be found.\n \n \n \n \n \n \n );\n};\n\nexport default NotFound;\n","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getLinkUtilityClass(slot) {\n return generateUtilityClass('MuiLink', slot);\n}\nconst linkClasses = generateUtilityClasses('MuiLink', ['root', 'underlineNone', 'underlineHover', 'underlineAlways', 'button', 'focusVisible']);\nexport default linkClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"className\", \"color\", \"component\", \"onBlur\", \"onFocus\", \"TypographyClasses\", \"underline\", \"variant\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { elementTypeAcceptingRef } from '@mui/utils';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport { alpha, getPath } from '@mui/system';\nimport capitalize from '../utils/capitalize';\nimport styled from '../styles/styled';\nimport useThemeProps from '../styles/useThemeProps';\nimport useIsFocusVisible from '../utils/useIsFocusVisible';\nimport useForkRef from '../utils/useForkRef';\nimport Typography from '../Typography';\nimport linkClasses, { getLinkUtilityClass } from './linkClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst colorTransformations = {\n primary: 'primary.main',\n textPrimary: 'text.primary',\n secondary: 'secondary.main',\n textSecondary: 'text.secondary',\n error: 'error.main'\n};\n\nconst transformDeprecatedColors = color => {\n return colorTransformations[color] || color;\n};\n\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n component,\n focusVisible,\n underline\n } = ownerState;\n const slots = {\n root: ['root', `underline${capitalize(underline)}`, component === 'button' && 'button', focusVisible && 'focusVisible']\n };\n return composeClasses(slots, getLinkUtilityClass, classes);\n};\n\nconst LinkRoot = styled(Typography, {\n name: 'MuiLink',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, styles[`underline${capitalize(ownerState.underline)}`], ownerState.component === 'button' && styles.button];\n }\n})(({\n theme,\n ownerState\n}) => {\n const color = getPath(theme, `palette.${transformDeprecatedColors(ownerState.color)}`) || ownerState.color;\n return _extends({}, ownerState.underline === 'none' && {\n textDecoration: 'none'\n }, ownerState.underline === 'hover' && {\n textDecoration: 'none',\n '&:hover': {\n textDecoration: 'underline'\n }\n }, ownerState.underline === 'always' && {\n textDecoration: 'underline',\n textDecorationColor: color !== 'inherit' ? alpha(color, 0.4) : undefined,\n '&:hover': {\n textDecorationColor: 'inherit'\n }\n }, ownerState.component === 'button' && {\n position: 'relative',\n WebkitTapHighlightColor: 'transparent',\n backgroundColor: 'transparent',\n // Reset default value\n // We disable the focus ring for mouse, touch and keyboard users.\n outline: 0,\n border: 0,\n margin: 0,\n // Remove the margin in Safari\n borderRadius: 0,\n padding: 0,\n // Remove the padding in Firefox\n cursor: 'pointer',\n userSelect: 'none',\n verticalAlign: 'middle',\n MozAppearance: 'none',\n // Reset\n WebkitAppearance: 'none',\n // Reset\n '&::-moz-focus-inner': {\n borderStyle: 'none' // Remove Firefox dotted outline.\n\n },\n [`&.${linkClasses.focusVisible}`]: {\n outline: 'auto'\n }\n });\n});\nconst Link = /*#__PURE__*/React.forwardRef(function Link(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiLink'\n });\n\n const {\n className,\n color = 'primary',\n component = 'a',\n onBlur,\n onFocus,\n TypographyClasses,\n underline = 'always',\n variant = 'inherit'\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n const {\n isFocusVisibleRef,\n onBlur: handleBlurVisible,\n onFocus: handleFocusVisible,\n ref: focusVisibleRef\n } = useIsFocusVisible();\n const [focusVisible, setFocusVisible] = React.useState(false);\n const handlerRef = useForkRef(ref, focusVisibleRef);\n\n const handleBlur = event => {\n handleBlurVisible(event);\n\n if (isFocusVisibleRef.current === false) {\n setFocusVisible(false);\n }\n\n if (onBlur) {\n onBlur(event);\n }\n };\n\n const handleFocus = event => {\n handleFocusVisible(event);\n\n if (isFocusVisibleRef.current === true) {\n setFocusVisible(true);\n }\n\n if (onFocus) {\n onFocus(event);\n }\n };\n\n const ownerState = _extends({}, props, {\n color,\n component,\n focusVisible,\n underline,\n variant\n });\n\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsx(LinkRoot, _extends({\n className: clsx(classes.root, className),\n classes: TypographyClasses,\n color: color,\n component: component,\n onBlur: handleBlur,\n onFocus: handleFocus,\n ref: handlerRef,\n ownerState: ownerState,\n variant: variant\n }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? Link.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * The color of the link.\n * @default 'primary'\n */\n color: PropTypes\n /* @typescript-to-proptypes-ignore */\n .any,\n\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: elementTypeAcceptingRef,\n\n /**\n * @ignore\n */\n onBlur: PropTypes.func,\n\n /**\n * @ignore\n */\n onFocus: PropTypes.func,\n\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n\n /**\n * `classes` prop applied to the [`Typography`](/api/typography/) element.\n */\n TypographyClasses: PropTypes.object,\n\n /**\n * Controls when the link should have an underline.\n * @default 'always'\n */\n underline: PropTypes.oneOf(['always', 'hover', 'none']),\n\n /**\n * Applies the theme typography styles.\n * @default 'inherit'\n */\n variant: PropTypes\n /* @typescript-to-proptypes-ignore */\n .oneOfType([PropTypes.oneOf(['body1', 'body2', 'button', 'caption', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'inherit', 'overline', 'subtitle1', 'subtitle2']), PropTypes.string])\n} : void 0;\nexport default Link;"],"names":["WrappedComponent","fallback","ComponentWithSuspense","props","Suspense","withStyles","theme","createStyles","pageContentStyles","classes","className","children","contentSpacer","container","item","xs","ListPolicies","withSuspense","React","PolicyDetails","connector","connect","state","open","system","sidebarOpen","setMenuOpen","withRouter","history","path","IAM_PAGES","exact","component","NotFoundPage","Copyright","Typography","variant","color","align","Link","href","Date","getFullYear","PageLayout","Box","sx","display","alignItems","justifyContent","height","textAlign","margin","flexFlow","fontSize","fontStyle","fontWeight","mt","getLinkUtilityClass","slot","generateUtilityClass","generateUtilityClasses","_excluded","colorTransformations","primary","textPrimary","secondary","textSecondary","error","LinkRoot","styled","name","overridesResolver","styles","ownerState","root","capitalize","underline","button","getPath","transformDeprecatedColors","_extends","textDecoration","textDecorationColor","alpha","undefined","position","WebkitTapHighlightColor","backgroundColor","outline","border","borderRadius","padding","cursor","userSelect","verticalAlign","MozAppearance","WebkitAppearance","borderStyle","linkClasses","inProps","ref","useThemeProps","onBlur","onFocus","TypographyClasses","other","_objectWithoutPropertiesLoose","useIsFocusVisible","isFocusVisibleRef","handleBlurVisible","handleFocusVisible","focusVisibleRef","focusVisible","setFocusVisible","handlerRef","useForkRef","slots","composeClasses","useUtilityClasses","_jsx","clsx","event","current"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"static/js/1237.dbb13c2b.chunk.js","mappings":"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","sources":["screens/Console/Common/Components/withSuspense.tsx","screens/Console/Common/Layout/PageLayout.tsx","screens/Console/Policies/Policies.tsx","common/Copyright.tsx","screens/NotFoundPage.tsx","../node_modules/@mui/material/Link/linkClasses.js","../node_modules/@mui/material/Link/Link.js"],"sourcesContent":["// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { ComponentType, Suspense, SuspenseProps } from \"react\";\n\nfunction withSuspense

(\n WrappedComponent: ComponentType

,\n fallback: SuspenseProps[\"fallback\"] = null\n) {\n function ComponentWithSuspense(props: P) {\n return (\n \n \n \n );\n }\n\n return ComponentWithSuspense;\n}\n\nexport default withSuspense;\n","import React from \"react\";\nimport { Grid } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { pageContentStyles } from \"../FormComponents/common/styleLibrary\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...pageContentStyles,\n });\n\ntype PageLayoutProps = {\n className?: string;\n classes?: any;\n children: any;\n};\n\nconst PageLayout = ({ classes, className = \"\", children }: PageLayoutProps) => {\n return (\n

\n \n \n {children}\n \n \n
\n );\n};\n\nexport default withStyles(styles)(PageLayout);\n","// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport history from \"../../../history\";\nimport { Route, Router, Switch, withRouter } from \"react-router-dom\";\nimport { connect } from \"react-redux\";\nimport { AppState } from \"../../../store\";\nimport { setMenuOpen } from \"../../../actions\";\nimport NotFoundPage from \"../../NotFoundPage\";\nimport withSuspense from \"../Common/Components/withSuspense\";\nimport { IAM_PAGES } from \"../../../common/SecureComponent/permissions\";\nconst ListPolicies = withSuspense(React.lazy(() => import(\"./ListPolicies\")));\nconst PolicyDetails = withSuspense(React.lazy(() => import(\"./PolicyDetails\")));\n\nconst mapState = (state: AppState) => ({\n open: state.system.sidebarOpen,\n});\n\nconst connector = connect(mapState, { setMenuOpen });\n\nconst Policies = () => {\n return (\n \n \n \n \n \n \n \n \n );\n};\n\nexport default withRouter(connector(Policies));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport Typography from \"@mui/material/Typography\";\nimport Link from \"@mui/material/Link\";\n\nexport default function Copyright() {\n return (\n \n {\"Copyright © \"}\n \n MinIO\n {\" \"}\n {new Date().getFullYear()}\n {\".\"}\n \n );\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport Box from \"@mui/material/Box\";\nimport Copyright from \"../common/Copyright\";\nimport PageLayout from \"./Console/Common/Layout/PageLayout\";\n\nconst NotFound: React.FC = () => {\n return (\n \n \n \n 404 Error\n \n \n Sorry, the page could not be found.\n \n \n \n \n \n \n );\n};\n\nexport default NotFound;\n","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getLinkUtilityClass(slot) {\n return generateUtilityClass('MuiLink', slot);\n}\nconst linkClasses = generateUtilityClasses('MuiLink', ['root', 'underlineNone', 'underlineHover', 'underlineAlways', 'button', 'focusVisible']);\nexport default linkClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"className\", \"color\", \"component\", \"onBlur\", \"onFocus\", \"TypographyClasses\", \"underline\", \"variant\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { elementTypeAcceptingRef } from '@mui/utils';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport { alpha, getPath } from '@mui/system';\nimport capitalize from '../utils/capitalize';\nimport styled from '../styles/styled';\nimport useThemeProps from '../styles/useThemeProps';\nimport useIsFocusVisible from '../utils/useIsFocusVisible';\nimport useForkRef from '../utils/useForkRef';\nimport Typography from '../Typography';\nimport linkClasses, { getLinkUtilityClass } from './linkClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst colorTransformations = {\n primary: 'primary.main',\n textPrimary: 'text.primary',\n secondary: 'secondary.main',\n textSecondary: 'text.secondary',\n error: 'error.main'\n};\n\nconst transformDeprecatedColors = color => {\n return colorTransformations[color] || color;\n};\n\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n component,\n focusVisible,\n underline\n } = ownerState;\n const slots = {\n root: ['root', `underline${capitalize(underline)}`, component === 'button' && 'button', focusVisible && 'focusVisible']\n };\n return composeClasses(slots, getLinkUtilityClass, classes);\n};\n\nconst LinkRoot = styled(Typography, {\n name: 'MuiLink',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, styles[`underline${capitalize(ownerState.underline)}`], ownerState.component === 'button' && styles.button];\n }\n})(({\n theme,\n ownerState\n}) => {\n const color = getPath(theme, `palette.${transformDeprecatedColors(ownerState.color)}`) || ownerState.color;\n return _extends({}, ownerState.underline === 'none' && {\n textDecoration: 'none'\n }, ownerState.underline === 'hover' && {\n textDecoration: 'none',\n '&:hover': {\n textDecoration: 'underline'\n }\n }, ownerState.underline === 'always' && {\n textDecoration: 'underline',\n textDecorationColor: color !== 'inherit' ? alpha(color, 0.4) : undefined,\n '&:hover': {\n textDecorationColor: 'inherit'\n }\n }, ownerState.component === 'button' && {\n position: 'relative',\n WebkitTapHighlightColor: 'transparent',\n backgroundColor: 'transparent',\n // Reset default value\n // We disable the focus ring for mouse, touch and keyboard users.\n outline: 0,\n border: 0,\n margin: 0,\n // Remove the margin in Safari\n borderRadius: 0,\n padding: 0,\n // Remove the padding in Firefox\n cursor: 'pointer',\n userSelect: 'none',\n verticalAlign: 'middle',\n MozAppearance: 'none',\n // Reset\n WebkitAppearance: 'none',\n // Reset\n '&::-moz-focus-inner': {\n borderStyle: 'none' // Remove Firefox dotted outline.\n\n },\n [`&.${linkClasses.focusVisible}`]: {\n outline: 'auto'\n }\n });\n});\nconst Link = /*#__PURE__*/React.forwardRef(function Link(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiLink'\n });\n\n const {\n className,\n color = 'primary',\n component = 'a',\n onBlur,\n onFocus,\n TypographyClasses,\n underline = 'always',\n variant = 'inherit'\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n const {\n isFocusVisibleRef,\n onBlur: handleBlurVisible,\n onFocus: handleFocusVisible,\n ref: focusVisibleRef\n } = useIsFocusVisible();\n const [focusVisible, setFocusVisible] = React.useState(false);\n const handlerRef = useForkRef(ref, focusVisibleRef);\n\n const handleBlur = event => {\n handleBlurVisible(event);\n\n if (isFocusVisibleRef.current === false) {\n setFocusVisible(false);\n }\n\n if (onBlur) {\n onBlur(event);\n }\n };\n\n const handleFocus = event => {\n handleFocusVisible(event);\n\n if (isFocusVisibleRef.current === true) {\n setFocusVisible(true);\n }\n\n if (onFocus) {\n onFocus(event);\n }\n };\n\n const ownerState = _extends({}, props, {\n color,\n component,\n focusVisible,\n underline,\n variant\n });\n\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsx(LinkRoot, _extends({\n className: clsx(classes.root, className),\n classes: TypographyClasses,\n color: color,\n component: component,\n onBlur: handleBlur,\n onFocus: handleFocus,\n ref: handlerRef,\n ownerState: ownerState,\n variant: variant\n }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? Link.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * The color of the link.\n * @default 'primary'\n */\n color: PropTypes\n /* @typescript-to-proptypes-ignore */\n .any,\n\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: elementTypeAcceptingRef,\n\n /**\n * @ignore\n */\n onBlur: PropTypes.func,\n\n /**\n * @ignore\n */\n onFocus: PropTypes.func,\n\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n\n /**\n * `classes` prop applied to the [`Typography`](/api/typography/) element.\n */\n TypographyClasses: PropTypes.object,\n\n /**\n * Controls when the link should have an underline.\n * @default 'always'\n */\n underline: PropTypes.oneOf(['always', 'hover', 'none']),\n\n /**\n * Applies the theme typography styles.\n * @default 'inherit'\n */\n variant: PropTypes\n /* @typescript-to-proptypes-ignore */\n .oneOfType([PropTypes.oneOf(['body1', 'body2', 'button', 'caption', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'inherit', 'overline', 'subtitle1', 'subtitle2']), PropTypes.string])\n} : void 0;\nexport default Link;"],"names":["WrappedComponent","fallback","ComponentWithSuspense","props","Suspense","withStyles","theme","createStyles","pageContentStyles","classes","className","children","contentSpacer","container","item","xs","ListPolicies","withSuspense","React","PolicyDetails","connector","connect","state","open","system","sidebarOpen","setMenuOpen","withRouter","history","path","IAM_PAGES","exact","component","NotFoundPage","Copyright","Typography","variant","color","align","Link","href","Date","getFullYear","PageLayout","Box","sx","display","alignItems","justifyContent","height","textAlign","margin","flexFlow","fontSize","fontStyle","fontWeight","mt","getLinkUtilityClass","slot","generateUtilityClass","generateUtilityClasses","_excluded","colorTransformations","primary","textPrimary","secondary","textSecondary","error","LinkRoot","styled","name","overridesResolver","styles","ownerState","root","capitalize","underline","button","getPath","transformDeprecatedColors","_extends","textDecoration","textDecorationColor","alpha","undefined","position","WebkitTapHighlightColor","backgroundColor","outline","border","borderRadius","padding","cursor","userSelect","verticalAlign","MozAppearance","WebkitAppearance","borderStyle","linkClasses","inProps","ref","useThemeProps","onBlur","onFocus","TypographyClasses","other","_objectWithoutPropertiesLoose","useIsFocusVisible","isFocusVisibleRef","handleBlurVisible","handleFocusVisible","focusVisibleRef","focusVisible","setFocusVisible","handlerRef","useForkRef","slots","composeClasses","useUtilityClasses","_jsx","clsx","event","current"],"sourceRoot":""} \ No newline at end of file diff --git a/portal-ui/build/static/js/1409.a1f80372.chunk.js b/portal-ui/build/static/js/1409.a1f80372.chunk.js deleted file mode 100644 index f50de89a5..000000000 --- a/portal-ui/build/static/js/1409.a1f80372.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1409],{25534:function(e,t,n){"use strict";var a=n(18489),s=(n(50390),n(25594)),r=n(86509),l=n(4285),o=n(72462),i=n(62559);t.Z=(0,l.Z)((function(e){return(0,r.Z)((0,a.Z)({},o.Bw))}))((function(e){var t=e.classes,n=e.className,a=void 0===n?"":n,r=e.children;return(0,i.jsx)("div",{className:t.contentSpacer,children:(0,i.jsx)(s.ZP,{container:!0,children:(0,i.jsx)(s.ZP,{item:!0,xs:12,className:a,children:r})})})}))},35721:function(e,t,n){"use strict";n(50390);var a=n(34424),s=n(25594),r=n(86509),l=n(4285),o=n(35477),i=n(95467),c=n(26805),d=n(44078),u=n(5265),m=n(98280),h=n(62559),f={toggleList:u.kQ},g=(0,a.$j)((function(e){return{sidebarOpen:e.system.sidebarOpen,operatorMode:e.system.operatorMode,managerObjects:e.objectBrowser.objectManager.objectsToManage}}),f);t.Z=g((0,l.Z)((function(e){return(0,r.Z)({headerContainer:{width:"100%",minHeight:79,display:"flex",backgroundColor:"#fff",left:0,boxShadow:"rgba(0,0,0,.08) 0 3px 10px"},label:{display:"flex",justifyContent:"flex-start",alignItems:"center"},labelStyle:{color:"#000",fontSize:18,fontWeight:700,marginLeft:34,marginTop:8},rightMenu:{textAlign:"right"},logo:{marginLeft:34,fill:e.palette.primary.main,"& .min-icon":{width:120}},middleComponent:{display:"flex",justifyContent:"center",alignItems:"center"}})}))((function(e){var t=e.classes,n=e.label,a=e.actions,r=e.sidebarOpen,l=e.operatorMode,u=e.managerObjects,f=e.toggleList,g=e.middleComponent;return(0,h.jsxs)(s.ZP,{container:!0,className:"".concat(t.headerContainer," page-header"),direction:"row",alignItems:"center",children:[(0,h.jsxs)(s.ZP,{item:!0,xs:12,sm:12,md:g?3:6,className:t.label,sx:{paddingTop:["15px","15px","0","0"]},children:[!r&&(0,h.jsx)("div",{className:t.logo,children:l?(0,h.jsx)(c.Z,{}):(0,h.jsx)(d.Z,{})}),(0,h.jsx)(o.Z,{variant:"h4",className:t.labelStyle,children:n})]}),g&&(0,h.jsx)(s.ZP,{item:!0,xs:12,sm:12,md:6,className:t.middleComponent,sx:{marginTop:["10px","10px","0","0"]},children:g}),(0,h.jsxs)(s.ZP,{item:!0,xs:12,sm:12,md:g?3:6,className:t.rightMenu,children:[a&&a,u&&u.length>0&&(0,h.jsx)(i.Z,{color:"primary","aria-label":"Refresh List",component:"span",onClick:function(){f()},size:"large",children:(0,h.jsx)(m.gx,{})})]})]})})))},12818:function(e,t,n){"use strict";n.r(t);var a=n(23430),s=n(18489),r=n(50390),l=n(25594),o=n(12066),i=n(66946),c=n(69686),d=n(34424),u=n(97687),m=n(86509),h=n(4285),f=n(28948),g=n(51774),p=n(72462),b=n(17777),x=n(35721),y=n(54950),j=n(60606),v=n.n(j),Z=n(25534),S=n(62559),C=null,w=(0,d.$j)((function(e){return{messages:e.trace.messages,traceStarted:e.trace.traceStarted}}),{traceMessageReceived:u.ho,traceResetMessages:u.At,setTraceStarted:u.qv});t.default=w((0,h.Z)((function(e){return(0,m.Z)((0,s.Z)((0,s.Z)((0,s.Z)((0,s.Z)((0,s.Z)({sizeItem:{width:150},timeItem:{width:100},startButton:{textAlign:"right"}},p.OR),p.qg),p.bp),p.VX),{},{searchField:(0,s.Z)((0,s.Z)({},p.qg.searchField),{},{margin:"0 5px","&:first-of-type":{marginLeft:0},"&:last-of-type":{marginRight:0}}),tableWrapper:{height:"calc(100vh - 292px)"},inlineCheckboxes:(0,s.Z)((0,s.Z)({},p.IX.inlineCheckboxes),{},{alignItems:"center","@media (max-width: 900px)":{flexFlow:"column",alignItems:"flex-start"}}),checkBoxLabel:{marginTop:10,fontSize:16,fontWeight:500},formBox:{border:"1px solid #EAEAEA",padding:15,marginBottom:15},midColumnCheckboxes:{display:"flex"},separatorBar:{fontSize:16,fontWeight:700,paddingTop:19,"@media (max-width: 900px)":{display:"none"}}},(0,p.Bz)(e.spacing(4))))}))((function(e){var t=e.classes,n=e.traceMessageReceived,s=e.traceResetMessages,d=e.setTraceStarted,u=e.traceStarted,m=e.messages,h=(0,r.useState)(""),p=(0,a.Z)(h,2),j=p[0],w=p[1],k=(0,r.useState)(""),N=(0,a.Z)(k,2),_=N[0],O=N[1],I=(0,r.useState)(""),P=(0,a.Z)(I,2),T=P[0],F=P[1],M=(0,r.useState)(""),B=(0,a.Z)(M,2),E=B[0],L=B[1],z=(0,r.useState)(0),R=(0,a.Z)(z,2),U=R[0],A=R[1],W=(0,r.useState)(!1),D=(0,a.Z)(W,2),K=D[0],H=D[1],Y=(0,r.useState)(!0),q=(0,a.Z)(Y,2),G=q[0],V=q[1],X=(0,r.useState)(!1),$=(0,a.Z)(X,2),J=$[0],Q=$[1],ee=(0,r.useState)(!1),te=(0,a.Z)(ee,2),ne=te[0],ae=te[1],se=(0,r.useState)(!1),re=(0,a.Z)(se,2),le=re[0],oe=re[1],ie=(0,r.useState)(!1),ce=(0,a.Z)(ie,2),de=ce[0],ue=ce[1];return(0,S.jsxs)(r.Fragment,{children:[(0,S.jsx)(x.Z,{label:"Trace"}),(0,S.jsxs)(Z.Z,{children:[(0,S.jsxs)(l.ZP,{xs:12,className:t.formBox,children:[(0,S.jsxs)(l.ZP,{item:!0,xs:12,className:t.actionsTray,children:[(0,S.jsx)(o.Z,{className:t.searchField,id:"status-code",label:"Status Code",InputProps:{disableUnderline:!0},value:j,onChange:function(e){w(e.target.value)},disabled:u,variant:"standard"}),(0,S.jsx)(o.Z,{className:t.searchField,id:"method",label:"Method",InputProps:{disableUnderline:!0},value:_,onChange:function(e){O(e.target.value)},disabled:u,variant:"standard"}),(0,S.jsx)(o.Z,{label:"Function Name",className:t.searchField,id:"func-name",disabled:u,InputProps:{disableUnderline:!0},value:T,onChange:function(e){F(e.target.value)},variant:"standard"}),(0,S.jsx)(o.Z,{className:t.searchField,id:"path",label:"Path",disabled:u,InputProps:{disableUnderline:!0},value:E,onChange:function(e){L(e.target.value)},variant:"standard"}),(0,S.jsx)(o.Z,{type:"number",className:t.searchField,id:"fthreshold",label:"Response Threshold",disabled:u,InputProps:{disableUnderline:!0},inputProps:{min:0},value:U,onChange:function(e){A(parseInt(e.target.value))},variant:"standard"})]}),(0,S.jsxs)(l.ZP,{item:!0,xs:12,className:t.inlineCheckboxes,children:[(0,S.jsx)("div",{className:t.checkBoxLabel,children:"Calls to trace:"}),(0,S.jsxs)("div",{className:t.midColumnCheckboxes,children:[(0,S.jsx)(y.Z,{checked:K,id:"all_calls",name:"all_calls",label:"All",onChange:function(e){H(e.target.checked)},value:"all",disabled:u}),(0,S.jsx)(y.Z,{checked:G||K,id:"s3_calls",name:"s3_calls",label:"S3",onChange:function(e){V(e.target.checked)},value:"s3",disabled:K||u}),(0,S.jsx)(y.Z,{checked:J||K,id:"internal_calls",name:"internal_calls",label:"Internal",onChange:function(e){Q(e.target.checked)},value:"internal",disabled:K||u}),(0,S.jsx)(y.Z,{checked:ne||K,id:"storage_calls",name:"storage_calls",label:"Storage",onChange:function(e){ae(e.target.checked)},value:"storage",disabled:K||u}),(0,S.jsx)(y.Z,{checked:le||K,id:"os_calls",name:"os_calls",label:"OS",onChange:function(e){oe(e.target.checked)},value:"os",disabled:K||u}),(0,S.jsx)("span",{className:t.separatorBar,children:"\xa0 \xa0 \xa0 | \xa0 \xa0 \xa0"})]}),(0,S.jsx)(y.Z,{checked:de,id:"only_errors",name:"only_errors",label:"Display only Errors",onChange:function(e){ue(e.target.checked)},value:"only_errors",disabled:u})]}),(0,S.jsxs)(l.ZP,{item:!0,xs:12,className:t.startButton,children:[!u&&(0,S.jsx)(i.Z,{type:"submit",variant:"contained",color:"primary",disabled:u,onClick:function(){s();var e=new URL(window.location.toString()),t=e.port,a="".concat(G?"s3,":"").concat(J?"internal,":"").concat(ne?"storage,":"").concat(le?"os,":"");K&&(a="all");var r=(0,g.x2)(e.protocol);C=new c.w3cwebsocket("".concat(r,"://").concat(e.hostname,":").concat(t,"/ws/trace?calls=").concat(a,"&threshold=").concat(U,"&onlyErrors=").concat(de?"yes":"no","&statusCode=").concat(j,"&method=").concat(_,"&funcname=").concat(T,"&path=").concat(E));var l=null;if(null!==C)return C.onopen=function(){console.log("WebSocket Client Connected"),d(!0),C.send("ok"),l=setInterval((function(){C.send("ok")}),1e4)},C.onmessage=function(e){var t=JSON.parse(e.data.toString());t.ptime=v()(t.time,"YYYY-MM-DD HH:mm:s.SSSS +0000 UTC").toDate(),t.key=Math.random(),n(t)},C.onclose=function(){clearInterval(l),console.log("connection closed by server"),d(!1)},function(){C.close(1e3),clearInterval(l),console.log("closing websockets"),d(!1)}},children:"Start"}),u&&(0,S.jsx)(i.Z,{type:"button",variant:"contained",color:"primary",onClick:function(){C.close(1e3),d(!1)},children:"Stop"})]})]}),(0,S.jsx)(l.ZP,{item:!0,xs:12,className:t.tableBlock,children:(0,S.jsx)(b.Z,{itemActions:[],columns:[{label:"Time",elementKey:"ptime",renderFunction:function(e){var t=new Date(e);return(0,f.zk)(t)},globalClass:t.timeItem},{label:"Name",elementKey:"api"},{label:"Status",elementKey:"",renderFunction:function(e){return"".concat(e.statusCode," ").concat(e.statusMsg)},renderFullObject:!0},{label:"Location",elementKey:"configuration_id",renderFunction:function(e){return"".concat(e.host," ").concat(e.client)},renderFullObject:!0},{label:"Load Time",elementKey:"callStats.duration",globalClass:t.timeItem},{label:"Upload",elementKey:"callStats.rx",renderFunction:f.ae,globalClass:t.sizeItem},{label:"Download",elementKey:"callStats.tx",renderFunction:f.ae,globalClass:t.sizeItem}],isLoading:!1,records:m,entityName:"Traces",idField:"api",customEmptyMessage:u?"No Traced elements received yet":"Trace is not started yet",customPaperHeight:t.tableWrapper,autoScrollToBottom:!0})})]})]})})))},51774:function(e,t,n){"use strict";n.d(t,{V9:function(){return a},ci:function(){return s},HE:function(){return r},x2:function(){return l}});var a=1006,s=1008,r=1011,l=function(e){var t="ws";return"https:"===e&&(t="wss"),t}},3930:function(e){var t=function(){if("object"===typeof self&&self)return self;if("object"===typeof window&&window)return window;throw new Error("Unable to resolve global `this`")};e.exports=function(){if(this)return this;if("object"===typeof globalThis&&globalThis)return globalThis;try{Object.defineProperty(Object.prototype,"__global__",{get:function(){return this},configurable:!0})}catch(e){return t()}try{return __global__||t()}finally{delete Object.prototype.__global__}}()},69686:function(e,t,n){var a;if("object"===typeof globalThis)a=globalThis;else try{a=n(3930)}catch(o){}finally{if(a||"undefined"===typeof window||(a=window),!a)throw new Error("Could not determine global this")}var s=a.WebSocket||a.MozWebSocket,r=n(84994);function l(e,t){return t?new s(e,t):new s(e)}s&&["CONNECTING","OPEN","CLOSING","CLOSED"].forEach((function(e){Object.defineProperty(l,e,{get:function(){return s[e]}})})),e.exports={w3cwebsocket:s?l:null,version:r}},84994:function(e,t,n){e.exports=n(19794).version},83738:function(e,t,n){"use strict";function a(e,t){if(null==e)return{};var n,a,s=function(e,t){if(null==e)return{};var n,a,s={},r=Object.keys(e);for(a=0;a=0||(s[n]=e[n]);return s}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(s[n]=e[n])}return s}n.d(t,{Z:function(){return a}})},19794:function(e){"use strict";e.exports={version:"1.0.34"}}}]); -//# sourceMappingURL=1409.a1f80372.chunk.js.map \ No newline at end of file diff --git a/portal-ui/build/static/js/1409.a1f80372.chunk.js.map b/portal-ui/build/static/js/1409.a1f80372.chunk.js.map deleted file mode 100644 index af14cbca8..000000000 --- a/portal-ui/build/static/js/1409.a1f80372.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/1409.a1f80372.chunk.js","mappings":"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","sources":["screens/Console/Common/Layout/PageLayout.tsx","screens/Console/Common/PageHeader/PageHeader.tsx","screens/Console/Trace/Trace.tsx","utils/wsUtils.ts","../node_modules/es5-ext/global.js","../node_modules/websocket/lib/browser.js","../node_modules/websocket/lib/version.js","../javascript/esm|/Users/dvaldivia/go/src/github.com/minio/console/portal-ui/node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../javascript/esm|/Users/dvaldivia/go/src/github.com/minio/console/portal-ui/node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js"],"sourcesContent":["import React from \"react\";\nimport { Grid } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { pageContentStyles } from \"../FormComponents/common/styleLibrary\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...pageContentStyles,\n });\n\ntype PageLayoutProps = {\n className?: string;\n classes?: any;\n children: any;\n};\n\nconst PageLayout = ({ classes, className = \"\", children }: PageLayoutProps) => {\n return (\n
\n \n \n {children}\n \n \n
\n );\n};\n\nexport default withStyles(styles)(PageLayout);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { Theme } from \"@mui/material/styles\";\nimport { connect } from \"react-redux\";\nimport Grid from \"@mui/material/Grid\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport Typography from \"@mui/material/Typography\";\nimport IconButton from \"@mui/material/IconButton\";\nimport { AppState } from \"../../../../store\";\nimport OperatorLogo from \"../../../../icons/OperatorLogo\";\nimport ConsoleLogo from \"../../../../icons/ConsoleLogo\";\nimport { IFileItem } from \"../../ObjectBrowser/reducers\";\nimport { toggleList } from \"../../ObjectBrowser/actions\";\nimport { ObjectManagerIcon } from \"../../../../icons\";\n\ninterface IPageHeader {\n classes: any;\n sidebarOpen?: boolean;\n operatorMode?: boolean;\n label: any;\n actions?: any;\n managerObjects?: IFileItem[];\n toggleList: typeof toggleList;\n middleComponent?: React.ReactNode;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n headerContainer: {\n width: \"100%\",\n minHeight: 79,\n display: \"flex\",\n backgroundColor: \"#fff\",\n left: 0,\n boxShadow: \"rgba(0,0,0,.08) 0 3px 10px\",\n },\n label: {\n display: \"flex\",\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n },\n labelStyle: {\n color: \"#000\",\n fontSize: 18,\n fontWeight: 700,\n marginLeft: 34,\n marginTop: 8,\n },\n rightMenu: {\n textAlign: \"right\",\n },\n logo: {\n marginLeft: 34,\n fill: theme.palette.primary.main,\n \"& .min-icon\": {\n width: 120,\n },\n },\n middleComponent: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n });\n\nconst PageHeader = ({\n classes,\n label,\n actions,\n sidebarOpen,\n operatorMode,\n managerObjects,\n toggleList,\n middleComponent,\n}: IPageHeader) => {\n return (\n \n \n {!sidebarOpen && (\n
\n {operatorMode ? : }\n
\n )}\n \n {label}\n \n \n {middleComponent && (\n \n {middleComponent}\n \n )}\n \n {actions && actions}\n {managerObjects && managerObjects.length > 0 && (\n {\n toggleList();\n }}\n size=\"large\"\n >\n \n \n )}\n \n \n );\n};\n\nconst mapState = (state: AppState) => ({\n sidebarOpen: state.system.sidebarOpen,\n operatorMode: state.system.operatorMode,\n managerObjects: state.objectBrowser.objectManager.objectsToManage,\n});\n\nconst mapDispatchToProps = {\n toggleList,\n};\n\nconst connector = connect(mapState, mapDispatchToProps);\n\nexport default connector(withStyles(styles)(PageHeader));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useState } from \"react\";\nimport { Button, Grid, TextField } from \"@mui/material\";\nimport { IMessageEvent, w3cwebsocket as W3CWebSocket } from \"websocket\";\nimport { AppState } from \"../../../store\";\nimport { connect } from \"react-redux\";\nimport {\n setTraceStarted,\n traceMessageReceived,\n traceResetMessages,\n} from \"./actions\";\nimport { TraceMessage } from \"./types\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { niceBytes, timeFromDate } from \"../../../common/utils\";\nimport { wsProtocol } from \"../../../utils/wsUtils\";\nimport {\n actionsTray,\n containerForHeader,\n hrClass,\n inlineCheckboxes,\n searchField,\n tableStyles,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport TableWrapper from \"../Common/TableWrapper/TableWrapper\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\nimport CheckboxWrapper from \"../Common/FormComponents/CheckboxWrapper/CheckboxWrapper\";\nimport moment from \"moment/moment\";\nimport PageLayout from \"../Common/Layout/PageLayout\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n sizeItem: {\n width: 150,\n },\n timeItem: {\n width: 100,\n },\n startButton: {\n textAlign: \"right\",\n },\n ...actionsTray,\n ...searchField,\n ...hrClass,\n\n ...tableStyles,\n searchField: {\n ...searchField.searchField,\n margin: \"0 5px\",\n \"&:first-of-type\": {\n marginLeft: 0,\n },\n \"&:last-of-type\": {\n marginRight: 0,\n },\n },\n tableWrapper: {\n height: \"calc(100vh - 292px)\",\n },\n inlineCheckboxes: {\n ...inlineCheckboxes.inlineCheckboxes,\n alignItems: \"center\",\n\n \"@media (max-width: 900px)\": {\n flexFlow: \"column\",\n alignItems: \"flex-start\",\n },\n },\n checkBoxLabel: {\n marginTop: 10,\n fontSize: 16,\n fontWeight: 500,\n },\n formBox: {\n border: \"1px solid #EAEAEA\",\n padding: 15,\n marginBottom: 15,\n },\n midColumnCheckboxes: {\n display: \"flex\",\n },\n separatorBar: {\n fontSize: 16,\n fontWeight: 700,\n paddingTop: 19,\n \"@media (max-width: 900px)\": {\n display: \"none\",\n },\n },\n ...containerForHeader(theme.spacing(4)),\n });\n\ninterface ITrace {\n classes: any;\n traceMessageReceived: typeof traceMessageReceived;\n traceResetMessages: typeof traceResetMessages;\n setTraceStarted: typeof setTraceStarted;\n messages: TraceMessage[];\n namespace: string;\n tenant: string;\n traceStarted: boolean;\n}\n\nvar c: any = null;\n\nconst Trace = ({\n classes,\n traceMessageReceived,\n traceResetMessages,\n setTraceStarted,\n traceStarted,\n messages,\n}: ITrace) => {\n const [statusCode, setStatusCode] = useState(\"\");\n const [method, setMethod] = useState(\"\");\n const [func, setFunc] = useState(\"\");\n const [path, setPath] = useState(\"\");\n const [threshold, setThreshold] = useState(0);\n const [all, setAll] = useState(false);\n const [s3, setS3] = useState(true);\n const [internal, setInternal] = useState(false);\n const [storage, setStorage] = useState(false);\n const [os, setOS] = useState(false);\n const [errors, setErrors] = useState(false);\n\n const startTrace = () => {\n traceResetMessages();\n const url = new URL(window.location.toString());\n const isDev = process.env.NODE_ENV === \"development\";\n const port = isDev ? \"9090\" : url.port;\n\n let calls = `${s3 ? \"s3,\" : \"\"}${internal ? \"internal,\" : \"\"}${\n storage ? \"storage,\" : \"\"\n }${os ? \"os,\" : \"\"}`;\n\n if (all) {\n calls = \"all\";\n }\n\n const wsProt = wsProtocol(url.protocol);\n c = new W3CWebSocket(\n `${wsProt}://${\n url.hostname\n }:${port}/ws/trace?calls=${calls}&threshold=${threshold}&onlyErrors=${\n errors ? \"yes\" : \"no\"\n }&statusCode=${statusCode}&method=${method}&funcname=${func}&path=${path}`\n );\n\n let interval: any | null = null;\n if (c !== null) {\n c.onopen = () => {\n console.log(\"WebSocket Client Connected\");\n setTraceStarted(true);\n c.send(\"ok\");\n interval = setInterval(() => {\n c.send(\"ok\");\n }, 10 * 1000);\n };\n c.onmessage = (message: IMessageEvent) => {\n let m: TraceMessage = JSON.parse(message.data.toString());\n m.ptime = moment(m.time, \"YYYY-MM-DD HH:mm:s.SSSS +0000 UTC\").toDate();\n m.key = Math.random();\n traceMessageReceived(m);\n };\n c.onclose = () => {\n clearInterval(interval);\n console.log(\"connection closed by server\");\n setTraceStarted(false);\n };\n return () => {\n c.close(1000);\n clearInterval(interval);\n console.log(\"closing websockets\");\n setTraceStarted(false);\n };\n }\n };\n\n const stopTrace = () => {\n c.close(1000);\n setTraceStarted(false);\n };\n\n return (\n \n \n \n \n \n {\n setStatusCode(e.target.value);\n }}\n disabled={traceStarted}\n variant=\"standard\"\n />\n {\n setMethod(e.target.value);\n }}\n disabled={traceStarted}\n variant=\"standard\"\n />\n {\n setFunc(e.target.value);\n }}\n variant=\"standard\"\n />\n {\n setPath(e.target.value);\n }}\n variant=\"standard\"\n />\n {\n setThreshold(parseInt(e.target.value));\n }}\n variant=\"standard\"\n />\n \n \n
Calls to trace:
\n
\n {\n setAll(item.target.checked);\n }}\n value={\"all\"}\n disabled={traceStarted}\n />\n {\n setS3(item.target.checked);\n }}\n value={\"s3\"}\n disabled={all || traceStarted}\n />\n {\n setInternal(item.target.checked);\n }}\n value={\"internal\"}\n disabled={all || traceStarted}\n />\n {\n setStorage(item.target.checked);\n }}\n value={\"storage\"}\n disabled={all || traceStarted}\n />\n {\n setOS(item.target.checked);\n }}\n value={\"os\"}\n disabled={all || traceStarted}\n />\n \n       |      \n \n
\n {\n setErrors(item.target.checked);\n }}\n value={\"only_errors\"}\n disabled={traceStarted}\n />\n
\n \n {!traceStarted && (\n \n Start\n \n )}\n {traceStarted && (\n \n Stop\n \n )}\n \n
\n\n \n {\n const timeParse = new Date(time);\n return timeFromDate(timeParse);\n },\n globalClass: classes.timeItem,\n },\n { label: \"Name\", elementKey: \"api\" },\n {\n label: \"Status\",\n elementKey: \"\",\n renderFunction: (fullElement: TraceMessage) =>\n `${fullElement.statusCode} ${fullElement.statusMsg}`,\n renderFullObject: true,\n },\n {\n label: \"Location\",\n elementKey: \"configuration_id\",\n renderFunction: (fullElement: TraceMessage) =>\n `${fullElement.host} ${fullElement.client}`,\n renderFullObject: true,\n },\n {\n label: \"Load Time\",\n elementKey: \"callStats.duration\",\n globalClass: classes.timeItem,\n },\n {\n label: \"Upload\",\n elementKey: \"callStats.rx\",\n renderFunction: niceBytes,\n globalClass: classes.sizeItem,\n },\n {\n label: \"Download\",\n elementKey: \"callStats.tx\",\n renderFunction: niceBytes,\n globalClass: classes.sizeItem,\n },\n ]}\n isLoading={false}\n records={messages}\n entityName=\"Traces\"\n idField=\"api\"\n customEmptyMessage={\n traceStarted\n ? \"No Traced elements received yet\"\n : \"Trace is not started yet\"\n }\n customPaperHeight={classes.tableWrapper}\n autoScrollToBottom\n />\n \n
\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n messages: state.trace.messages,\n traceStarted: state.trace.traceStarted,\n});\n\nconst connector = connect(mapState, {\n traceMessageReceived: traceMessageReceived,\n traceResetMessages: traceResetMessages,\n setTraceStarted,\n});\n\nexport default connector(withStyles(styles)(Trace));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\n// Close codes for websockets defined in RFC 6455\nexport const WSCloseNormalClosure = 1000;\nexport const WSCloseCloseGoingAway = 1001;\nexport const WSCloseAbnormalClosure = 1006;\nexport const WSClosePolicyViolation = 1008;\nexport const WSCloseInternalServerErr = 1011;\n\nexport const wsProtocol = (protocol: string): string => {\n let wsProtocol = \"ws\";\n if (protocol === \"https:\") {\n wsProtocol = \"wss\";\n }\n return wsProtocol;\n};\n","var naiveFallback = function () {\n\tif (typeof self === \"object\" && self) return self;\n\tif (typeof window === \"object\" && window) return window;\n\tthrow new Error(\"Unable to resolve global `this`\");\n};\n\nmodule.exports = (function () {\n\tif (this) return this;\n\n\t// Unexpected strict mode (may happen if e.g. bundled into ESM module)\n\n\t// Fallback to standard globalThis if available\n\tif (typeof globalThis === \"object\" && globalThis) return globalThis;\n\n\t// Thanks @mathiasbynens -> https://mathiasbynens.be/notes/globalthis\n\t// In all ES5+ engines global object inherits from Object.prototype\n\t// (if you approached one that doesn't please report)\n\ttry {\n\t\tObject.defineProperty(Object.prototype, \"__global__\", {\n\t\t\tget: function () { return this; },\n\t\t\tconfigurable: true\n\t\t});\n\t} catch (error) {\n\t\t// Unfortunate case of updates to Object.prototype being restricted\n\t\t// via preventExtensions, seal or freeze\n\t\treturn naiveFallback();\n\t}\n\ttry {\n\t\t// Safari case (window.__global__ works, but __global__ does not)\n\t\tif (!__global__) return naiveFallback();\n\t\treturn __global__;\n\t} finally {\n\t\tdelete Object.prototype.__global__;\n\t}\n})();\n","var _globalThis;\nif (typeof globalThis === 'object') {\n\t_globalThis = globalThis;\n} else {\n\ttry {\n\t\t_globalThis = require('es5-ext/global');\n\t} catch (error) {\n\t} finally {\n\t\tif (!_globalThis && typeof window !== 'undefined') { _globalThis = window; }\n\t\tif (!_globalThis) { throw new Error('Could not determine global this'); }\n\t}\n}\n\nvar NativeWebSocket = _globalThis.WebSocket || _globalThis.MozWebSocket;\nvar websocket_version = require('./version');\n\n\n/**\n * Expose a W3C WebSocket class with just one or two arguments.\n */\nfunction W3CWebSocket(uri, protocols) {\n\tvar native_instance;\n\n\tif (protocols) {\n\t\tnative_instance = new NativeWebSocket(uri, protocols);\n\t}\n\telse {\n\t\tnative_instance = new NativeWebSocket(uri);\n\t}\n\n\t/**\n\t * 'native_instance' is an instance of nativeWebSocket (the browser's WebSocket\n\t * class). Since it is an Object it will be returned as it is when creating an\n\t * instance of W3CWebSocket via 'new W3CWebSocket()'.\n\t *\n\t * ECMAScript 5: http://bclary.com/2004/11/07/#a-13.2.2\n\t */\n\treturn native_instance;\n}\nif (NativeWebSocket) {\n\t['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'].forEach(function(prop) {\n\t\tObject.defineProperty(W3CWebSocket, prop, {\n\t\t\tget: function() { return NativeWebSocket[prop]; }\n\t\t});\n\t});\n}\n\n/**\n * Module exports.\n */\nmodule.exports = {\n 'w3cwebsocket' : NativeWebSocket ? W3CWebSocket : null,\n 'version' : websocket_version\n};\n","module.exports = require('../package.json').version;\n","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nexport default function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}"],"names":["withStyles","theme","createStyles","pageContentStyles","classes","className","children","contentSpacer","container","item","xs","mapDispatchToProps","toggleList","connector","connect","state","sidebarOpen","system","operatorMode","managerObjects","objectBrowser","objectManager","objectsToManage","headerContainer","width","minHeight","display","backgroundColor","left","boxShadow","label","justifyContent","alignItems","labelStyle","color","fontSize","fontWeight","marginLeft","marginTop","rightMenu","textAlign","logo","fill","palette","primary","main","middleComponent","actions","direction","sm","md","sx","paddingTop","variant","length","component","onClick","size","c","messages","trace","traceStarted","traceMessageReceived","traceResetMessages","setTraceStarted","sizeItem","timeItem","startButton","actionsTray","searchField","hrClass","tableStyles","margin","marginRight","tableWrapper","height","inlineCheckboxes","flexFlow","checkBoxLabel","formBox","border","padding","marginBottom","midColumnCheckboxes","separatorBar","containerForHeader","spacing","useState","statusCode","setStatusCode","method","setMethod","func","setFunc","path","setPath","threshold","setThreshold","all","setAll","s3","setS3","internal","setInternal","storage","setStorage","os","setOS","errors","setErrors","Fragment","id","InputProps","disableUnderline","value","onChange","e","target","disabled","type","inputProps","min","parseInt","checked","name","url","URL","window","location","toString","port","calls","wsProt","wsProtocol","protocol","W3CWebSocket","hostname","interval","onopen","console","log","send","setInterval","onmessage","message","m","JSON","parse","data","ptime","moment","time","toDate","key","Math","random","onclose","clearInterval","close","tableBlock","itemActions","columns","elementKey","renderFunction","timeParse","Date","timeFromDate","globalClass","fullElement","statusMsg","renderFullObject","host","client","niceBytes","isLoading","records","entityName","idField","customEmptyMessage","customPaperHeight","autoScrollToBottom","WSCloseAbnormalClosure","WSClosePolicyViolation","WSCloseInternalServerErr","naiveFallback","self","Error","module","exports","this","globalThis","Object","defineProperty","prototype","get","configurable","error","__global__","_globalThis","require","NativeWebSocket","WebSocket","MozWebSocket","websocket_version","uri","protocols","forEach","prop","_objectWithoutProperties","source","excluded","i","sourceKeys","keys","indexOf","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","call"],"sourceRoot":""} \ No newline at end of file diff --git a/portal-ui/build/static/js/1420.517f0e88.chunk.js b/portal-ui/build/static/js/1420.517f0e88.chunk.js deleted file mode 100644 index 73af45bec..000000000 --- a/portal-ui/build/static/js/1420.517f0e88.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1420],{96152:function(t,o,n){var a=n(64119);o.Z=void 0;var e=a(n(66830)),i=n(62559),r=(0,e.default)((0,i.jsx)("path",{d:"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"}),"Add");o.Z=r},43615:function(t,o,n){var a=n(64119);o.Z=void 0;var e=a(n(66830)),i=n(62559),r=(0,e.default)((0,i.jsx)("path",{d:"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z"}),"Delete");o.Z=r},14476:function(t,o,n){n.d(o,{Z:function(){return S}});var a=n(36222),e=n(46633),i=n(18207),r=n(50390),c=n(91442),d=n(4733),s=n(50076),l=n(8208),u=n(15573),g=n(66946),h=n(18201),p=n(10594);function v(t){return(0,p.Z)("MuiLoadingButton",t)}var f=(0,n(43349).Z)("MuiLoadingButton",["root","loading","loadingIndicator","loadingIndicatorCenter","loadingIndicatorStart","loadingIndicatorEnd","endIconLoadingEnd","startIconLoadingStart"]),Z=n(62559),m=["children","disabled","id","loading","loadingIndicator","loadingPosition","variant"],w=(0,l.ZP)(g.Z,{shouldForwardProp:function(t){return function(t){return"ownerState"!==t&&"theme"!==t&&"sx"!==t&&"as"!==t&&"classes"!==t}(t)||"classes"===t},name:"MuiLoadingButton",slot:"Root",overridesResolver:function(t,o){return[o.root,o.startIconLoadingStart&&(0,a.Z)({},"& .".concat(f.startIconLoadingStart),o.startIconLoadingStart),o.endIconLoadingEnd&&(0,a.Z)({},"& .".concat(f.endIconLoadingEnd),o.endIconLoadingEnd)]}})((function(t){var o=t.ownerState,n=t.theme;return(0,i.Z)((0,a.Z)({},"& .".concat(f.startIconLoadingStart,", & .").concat(f.endIconLoadingEnd),{transition:n.transitions.create(["opacity"],{duration:n.transitions.duration.short}),opacity:0}),"center"===o.loadingPosition&&(0,a.Z)({transition:n.transitions.create(["background-color","box-shadow","border-color"],{duration:n.transitions.duration.short})},"&.".concat(f.loading),{color:"transparent"}),"start"===o.loadingPosition&&o.fullWidth&&(0,a.Z)({},"& .".concat(f.startIconLoadingStart,", & .").concat(f.endIconLoadingEnd),{transition:n.transitions.create(["opacity"],{duration:n.transitions.duration.short}),opacity:0,marginRight:-8}),"end"===o.loadingPosition&&o.fullWidth&&(0,a.Z)({},"& .".concat(f.startIconLoadingStart,", & .").concat(f.endIconLoadingEnd),{transition:n.transitions.create(["opacity"],{duration:n.transitions.duration.short}),opacity:0,marginLeft:-8}))})),b=(0,l.ZP)("div",{name:"MuiLoadingButton",slot:"LoadingIndicator",overridesResolver:function(t,o){var n=t.ownerState;return[o.loadingIndicator,o["loadingIndicator".concat((0,c.Z)(n.loadingPosition))]]}})((function(t){var o=t.theme,n=t.ownerState;return(0,i.Z)({position:"absolute",visibility:"visible",display:"flex"},"start"===n.loadingPosition&&("outlined"===n.variant||"contained"===n.variant)&&{left:14},"start"===n.loadingPosition&&"text"===n.variant&&{left:6},"center"===n.loadingPosition&&{left:"50%",transform:"translate(-50%)",color:o.palette.action.disabled},"end"===n.loadingPosition&&("outlined"===n.variant||"contained"===n.variant)&&{right:14},"end"===n.loadingPosition&&"text"===n.variant&&{right:6},"start"===n.loadingPosition&&n.fullWidth&&{position:"relative",left:-10},"end"===n.loadingPosition&&n.fullWidth&&{position:"relative",right:-10})})),S=r.forwardRef((function(t,o){var n=(0,u.Z)({props:t,name:"MuiLoadingButton"}),a=n.children,l=n.disabled,g=void 0!==l&&l,p=n.id,f=n.loading,S=void 0!==f&&f,x=n.loadingIndicator,I=n.loadingPosition,k=void 0===I?"center":I,y=n.variant,P=void 0===y?"text":y,L=(0,e.Z)(n,m),M=(0,d.Z)(p),R=null!=x?x:(0,Z.jsx)(h.Z,{"aria-labelledby":M,color:"inherit",size:16}),z=(0,i.Z)({},n,{disabled:g,loading:S,loadingIndicator:R,loadingPosition:k,variant:P}),j=function(t){var o=t.loading,n=t.loadingPosition,a=t.classes,e={root:["root",o&&"loading"],startIcon:[o&&"startIconLoading".concat((0,c.Z)(n))],endIcon:[o&&"endIconLoading".concat((0,c.Z)(n))],loadingIndicator:["loadingIndicator",o&&"loadingIndicator".concat((0,c.Z)(n))]},r=(0,s.Z)(e,v,a);return(0,i.Z)({},a,r)}(z);return(0,Z.jsx)(w,(0,i.Z)({disabled:g||S,id:M,ref:o},L,{variant:P,classes:j,ownerState:z,children:"end"===z.loadingPosition?(0,Z.jsxs)(r.Fragment,{children:[a,S&&(0,Z.jsx)(b,{className:j.loadingIndicator,ownerState:z,children:R})]}):(0,Z.jsxs)(r.Fragment,{children:[S&&(0,Z.jsx)(b,{className:j.loadingIndicator,ownerState:z,children:R}),a]})}))}))},7887:function(t,o,n){n.d(o,{Z:function(){return v}});var a=n(1048),e=n(32793),i=n(50390),r=n(44977),c=n(50076),d=n(8208),s=n(15573),l=n(10594);function u(t){return(0,l.Z)("MuiDialogActions",t)}(0,n(43349).Z)("MuiDialogActions",["root","spacing"]);var g=n(62559),h=["className","disableSpacing"],p=(0,d.ZP)("div",{name:"MuiDialogActions",slot:"Root",overridesResolver:function(t,o){var n=t.ownerState;return[o.root,!n.disableSpacing&&o.spacing]}})((function(t){var o=t.ownerState;return(0,e.Z)({display:"flex",alignItems:"center",padding:8,justifyContent:"flex-end",flex:"0 0 auto"},!o.disableSpacing&&{"& > :not(:first-of-type)":{marginLeft:8}})})),v=i.forwardRef((function(t,o){var n=(0,s.Z)({props:t,name:"MuiDialogActions"}),i=n.className,d=n.disableSpacing,l=void 0!==d&&d,v=(0,a.Z)(n,h),f=(0,e.Z)({},n,{disableSpacing:l}),Z=function(t){var o=t.classes,n={root:["root",!t.disableSpacing&&"spacing"]};return(0,c.Z)(n,u,o)}(f);return(0,g.jsx)(p,(0,e.Z)({className:(0,r.Z)(Z.root,i),ownerState:f,ref:o},v))}))},23473:function(t,o,n){n.d(o,{Z:function(){return v}});var a=n(1048),e=n(32793),i=n(50390),r=n(50076),c=n(8208),d=n(15573),s=n(35477),l=n(10594);function u(t){return(0,l.Z)("MuiDialogContentText",t)}(0,n(43349).Z)("MuiDialogContentText",["root"]);var g=n(62559),h=["children"],p=(0,c.ZP)(s.Z,{shouldForwardProp:function(t){return(0,c.FO)(t)||"classes"===t},name:"MuiDialogContentText",slot:"Root",overridesResolver:function(t,o){return o.root}})({}),v=i.forwardRef((function(t,o){var n=(0,d.Z)({props:t,name:"MuiDialogContentText"}),i=(0,a.Z)(n,h),c=function(t){var o=t.classes,n=(0,r.Z)({root:["root"]},u,o);return(0,e.Z)({},o,n)}(i);return(0,g.jsx)(p,(0,e.Z)({component:"p",variant:"body1",color:"text.secondary",ref:o,ownerState:i},n,{classes:c}))}))},49056:function(t,o,n){n.d(o,{Z:function(){return I}});var a=n(36222),e=n(1048),i=n(32793),r=n(50390),c=n(44977),d=n(50076),s=n(36128),l=n(91442),u=n(16756),g=n(15573),h=n(8208),p=n(10594);function v(t){return(0,p.Z)("MuiSwitch",t)}var f=(0,n(43349).Z)("MuiSwitch",["root","edgeStart","edgeEnd","switchBase","colorPrimary","colorSecondary","sizeSmall","sizeMedium","checked","disabled","input","thumb","track"]),Z=n(62559),m=["className","color","edge","size","sx"],w=(0,h.ZP)("span",{name:"MuiSwitch",slot:"Root",overridesResolver:function(t,o){var n=t.ownerState;return[o.root,n.edge&&o["edge".concat((0,l.Z)(n.edge))],o["size".concat((0,l.Z)(n.size))]]}})((function(t){var o,n=t.ownerState;return(0,i.Z)({display:"inline-flex",width:58,height:38,overflow:"hidden",padding:12,boxSizing:"border-box",position:"relative",flexShrink:0,zIndex:0,verticalAlign:"middle","@media print":{colorAdjust:"exact"}},"start"===n.edge&&{marginLeft:-8},"end"===n.edge&&{marginRight:-8},"small"===n.size&&(o={width:40,height:24,padding:7},(0,a.Z)(o,"& .".concat(f.thumb),{width:16,height:16}),(0,a.Z)(o,"& .".concat(f.switchBase),(0,a.Z)({padding:4},"&.".concat(f.checked),{transform:"translateX(16px)"})),o))})),b=(0,h.ZP)(u.Z,{name:"MuiSwitch",slot:"SwitchBase",overridesResolver:function(t,o){var n=t.ownerState;return[o.switchBase,(0,a.Z)({},"& .".concat(f.input),o.input),"default"!==n.color&&o["color".concat((0,l.Z)(n.color))]]}})((function(t){var o,n=t.theme;return o={position:"absolute",top:0,left:0,zIndex:1,color:"light"===n.palette.mode?n.palette.common.white:n.palette.grey[300],transition:n.transitions.create(["left","transform"],{duration:n.transitions.duration.shortest})},(0,a.Z)(o,"&.".concat(f.checked),{transform:"translateX(20px)"}),(0,a.Z)(o,"&.".concat(f.disabled),{color:"light"===n.palette.mode?n.palette.grey[100]:n.palette.grey[600]}),(0,a.Z)(o,"&.".concat(f.checked," + .").concat(f.track),{opacity:.5}),(0,a.Z)(o,"&.".concat(f.disabled," + .").concat(f.track),{opacity:"light"===n.palette.mode?.12:.2}),(0,a.Z)(o,"& .".concat(f.input),{left:"-100%",width:"300%"}),o}),(function(t){var o,n=t.theme,e=t.ownerState;return(0,i.Z)({"&:hover":{backgroundColor:(0,s.Fq)(n.palette.action.active,n.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}}},"default"!==e.color&&(o={},(0,a.Z)(o,"&.".concat(f.checked),(0,a.Z)({color:n.palette[e.color].main,"&:hover":{backgroundColor:(0,s.Fq)(n.palette[e.color].main,n.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}}},"&.".concat(f.disabled),{color:"light"===n.palette.mode?(0,s.$n)(n.palette[e.color].main,.62):(0,s._j)(n.palette[e.color].main,.55)})),(0,a.Z)(o,"&.".concat(f.checked," + .").concat(f.track),{backgroundColor:n.palette[e.color].main}),o))})),S=(0,h.ZP)("span",{name:"MuiSwitch",slot:"Track",overridesResolver:function(t,o){return o.track}})((function(t){var o=t.theme;return{height:"100%",width:"100%",borderRadius:7,zIndex:-1,transition:o.transitions.create(["opacity","background-color"],{duration:o.transitions.duration.shortest}),backgroundColor:"light"===o.palette.mode?o.palette.common.black:o.palette.common.white,opacity:"light"===o.palette.mode?.38:.3}})),x=(0,h.ZP)("span",{name:"MuiSwitch",slot:"Thumb",overridesResolver:function(t,o){return o.thumb}})((function(t){return{boxShadow:t.theme.shadows[1],backgroundColor:"currentColor",width:20,height:20,borderRadius:"50%"}})),I=r.forwardRef((function(t,o){var n=(0,g.Z)({props:t,name:"MuiSwitch"}),a=n.className,r=n.color,s=void 0===r?"primary":r,u=n.edge,h=void 0!==u&&u,p=n.size,f=void 0===p?"medium":p,I=n.sx,k=(0,e.Z)(n,m),y=(0,i.Z)({},n,{color:s,edge:h,size:f}),P=function(t){var o=t.classes,n=t.edge,a=t.size,e=t.color,r=t.checked,c=t.disabled,s={root:["root",n&&"edge".concat((0,l.Z)(n)),"size".concat((0,l.Z)(a))],switchBase:["switchBase","color".concat((0,l.Z)(e)),r&&"checked",c&&"disabled"],thumb:["thumb"],track:["track"],input:["input"]},u=(0,d.Z)(s,v,o);return(0,i.Z)({},o,u)}(y),L=(0,Z.jsx)(x,{className:P.thumb,ownerState:y});return(0,Z.jsxs)(w,{className:(0,c.Z)(P.root,a),sx:I,ownerState:y,children:[(0,Z.jsx)(b,(0,i.Z)({type:"checkbox",icon:L,checkedIcon:L,ref:o,ownerState:y},k,{classes:(0,i.Z)({},P,{root:P.switchBase})})),(0,Z.jsx)(S,{className:P.track,ownerState:y})]})}))}}]); -//# sourceMappingURL=1420.517f0e88.chunk.js.map \ No newline at end of file diff --git a/portal-ui/build/static/js/1420.517f0e88.chunk.js.map b/portal-ui/build/static/js/1420.517f0e88.chunk.js.map deleted file mode 100644 index 9828ecb7b..000000000 --- a/portal-ui/build/static/js/1420.517f0e88.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/1420.517f0e88.chunk.js","mappings":"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","sources":["../node_modules/@mui/icons-material/Add.js","../node_modules/@mui/icons-material/Delete.js","../node_modules/@mui/lab/LoadingButton/loadingButtonClasses.js","../node_modules/@mui/lab/LoadingButton/LoadingButton.js","../node_modules/@mui/material/DialogActions/dialogActionsClasses.js","../node_modules/@mui/material/DialogActions/DialogActions.js","../node_modules/@mui/material/DialogContentText/dialogContentTextClasses.js","../node_modules/@mui/material/DialogContentText/DialogContentText.js","../node_modules/@mui/material/Switch/switchClasses.js","../node_modules/@mui/material/Switch/Switch.js"],"sourcesContent":["\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _jsxRuntime = require(\"react/jsx-runtime\");\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\"\n}), 'Add');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _jsxRuntime = require(\"react/jsx-runtime\");\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z\"\n}), 'Delete');\n\nexports.default = _default;","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getLoadingButtonUtilityClass(slot) {\n return generateUtilityClass('MuiLoadingButton', slot);\n}\nconst loadingButtonClasses = generateUtilityClasses('MuiLoadingButton', ['root', 'loading', 'loadingIndicator', 'loadingIndicatorCenter', 'loadingIndicatorStart', 'loadingIndicatorEnd', 'endIconLoadingEnd', 'startIconLoadingStart']);\nexport default loadingButtonClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"children\", \"disabled\", \"id\", \"loading\", \"loadingIndicator\", \"loadingPosition\", \"variant\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { chainPropTypes } from '@mui/utils';\nimport { capitalize, unstable_useId as useId } from '@mui/material/utils';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport { styled, useThemeProps } from '@mui/material/styles';\nimport Button from '@mui/material/Button';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport loadingButtonClasses, { getLoadingButtonUtilityClass } from './loadingButtonClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n\nconst useUtilityClasses = ownerState => {\n const {\n loading,\n loadingPosition,\n classes\n } = ownerState;\n const slots = {\n root: ['root', loading && 'loading'],\n startIcon: [loading && `startIconLoading${capitalize(loadingPosition)}`],\n endIcon: [loading && `endIconLoading${capitalize(loadingPosition)}`],\n loadingIndicator: ['loadingIndicator', loading && `loadingIndicator${capitalize(loadingPosition)}`]\n };\n const composedClasses = composeClasses(slots, getLoadingButtonUtilityClass, classes);\n return _extends({}, classes, composedClasses);\n}; // TODO use `import { rootShouldForwardProp } from '../styles/styled';` once move to core\n\n\nconst rootShouldForwardProp = prop => prop !== 'ownerState' && prop !== 'theme' && prop !== 'sx' && prop !== 'as' && prop !== 'classes';\n\nconst LoadingButtonRoot = styled(Button, {\n shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',\n name: 'MuiLoadingButton',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n return [styles.root, styles.startIconLoadingStart && {\n [`& .${loadingButtonClasses.startIconLoadingStart}`]: styles.startIconLoadingStart\n }, styles.endIconLoadingEnd && {\n [`& .${loadingButtonClasses.endIconLoadingEnd}`]: styles.endIconLoadingEnd\n }];\n }\n})(({\n ownerState,\n theme\n}) => _extends({\n [`& .${loadingButtonClasses.startIconLoadingStart}, & .${loadingButtonClasses.endIconLoadingEnd}`]: {\n transition: theme.transitions.create(['opacity'], {\n duration: theme.transitions.duration.short\n }),\n opacity: 0\n }\n}, ownerState.loadingPosition === 'center' && {\n transition: theme.transitions.create(['background-color', 'box-shadow', 'border-color'], {\n duration: theme.transitions.duration.short\n }),\n [`&.${loadingButtonClasses.loading}`]: {\n color: 'transparent'\n }\n}, ownerState.loadingPosition === 'start' && ownerState.fullWidth && {\n [`& .${loadingButtonClasses.startIconLoadingStart}, & .${loadingButtonClasses.endIconLoadingEnd}`]: {\n transition: theme.transitions.create(['opacity'], {\n duration: theme.transitions.duration.short\n }),\n opacity: 0,\n marginRight: -8\n }\n}, ownerState.loadingPosition === 'end' && ownerState.fullWidth && {\n [`& .${loadingButtonClasses.startIconLoadingStart}, & .${loadingButtonClasses.endIconLoadingEnd}`]: {\n transition: theme.transitions.create(['opacity'], {\n duration: theme.transitions.duration.short\n }),\n opacity: 0,\n marginLeft: -8\n }\n}));\nconst LoadingButtonLoadingIndicator = styled('div', {\n name: 'MuiLoadingButton',\n slot: 'LoadingIndicator',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.loadingIndicator, styles[`loadingIndicator${capitalize(ownerState.loadingPosition)}`]];\n }\n})(({\n theme,\n ownerState\n}) => _extends({\n position: 'absolute',\n visibility: 'visible',\n display: 'flex'\n}, ownerState.loadingPosition === 'start' && (ownerState.variant === 'outlined' || ownerState.variant === 'contained') && {\n left: 14\n}, ownerState.loadingPosition === 'start' && ownerState.variant === 'text' && {\n left: 6\n}, ownerState.loadingPosition === 'center' && {\n left: '50%',\n transform: 'translate(-50%)',\n color: theme.palette.action.disabled\n}, ownerState.loadingPosition === 'end' && (ownerState.variant === 'outlined' || ownerState.variant === 'contained') && {\n right: 14\n}, ownerState.loadingPosition === 'end' && ownerState.variant === 'text' && {\n right: 6\n}, ownerState.loadingPosition === 'start' && ownerState.fullWidth && {\n position: 'relative',\n left: -10\n}, ownerState.loadingPosition === 'end' && ownerState.fullWidth && {\n position: 'relative',\n right: -10\n}));\nconst LoadingButton = /*#__PURE__*/React.forwardRef(function LoadingButton(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiLoadingButton'\n });\n\n const {\n children,\n disabled = false,\n id: idProp,\n loading = false,\n loadingIndicator: loadingIndicatorProp,\n loadingPosition = 'center',\n variant = 'text'\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n const id = useId(idProp);\n const loadingIndicator = loadingIndicatorProp != null ? loadingIndicatorProp : /*#__PURE__*/_jsx(CircularProgress, {\n \"aria-labelledby\": id,\n color: \"inherit\",\n size: 16\n });\n\n const ownerState = _extends({}, props, {\n disabled,\n loading,\n loadingIndicator,\n loadingPosition,\n variant\n });\n\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsx(LoadingButtonRoot, _extends({\n disabled: disabled || loading,\n id: id,\n ref: ref\n }, other, {\n variant: variant,\n classes: classes,\n ownerState: ownerState,\n children: ownerState.loadingPosition === 'end' ? /*#__PURE__*/_jsxs(React.Fragment, {\n children: [children, loading && /*#__PURE__*/_jsx(LoadingButtonLoadingIndicator, {\n className: classes.loadingIndicator,\n ownerState: ownerState,\n children: loadingIndicator\n })]\n }) : /*#__PURE__*/_jsxs(React.Fragment, {\n children: [loading && /*#__PURE__*/_jsx(LoadingButtonLoadingIndicator, {\n className: classes.loadingIndicator,\n ownerState: ownerState,\n children: loadingIndicator\n }), children]\n })\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? LoadingButton.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n\n /**\n * If `true`, the component is disabled.\n * @default false\n */\n disabled: PropTypes.bool,\n\n /**\n * @ignore\n */\n id: PropTypes.string,\n\n /**\n * If `true`, the loading indicator is shown.\n * @default false\n */\n loading: PropTypes.bool,\n\n /**\n * Element placed before the children if the button is in loading state.\n * The node should contain an element with `role=\"progressbar\"` with an accessible name.\n * By default we render a `CircularProgress` that is labelled by the button itself.\n * @default \n */\n loadingIndicator: PropTypes.node,\n\n /**\n * The loading indicator can be positioned on the start, end, or the center of the button.\n * @default 'center'\n */\n loadingPosition: chainPropTypes(PropTypes.oneOf(['start', 'end', 'center']), props => {\n if (props.loadingPosition === 'start' && !props.startIcon) {\n return new Error(`MUI: The loadingPosition=\"start\" should be used in combination with startIcon.`);\n }\n\n if (props.loadingPosition === 'end' && !props.endIcon) {\n return new Error(`MUI: The loadingPosition=\"end\" should be used in combination with endIcon.`);\n }\n\n return null;\n }),\n\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n\n /**\n * The variant to use.\n * @default 'text'\n */\n variant: PropTypes.oneOf(['contained', 'outlined', 'text'])\n} : void 0;\nexport default LoadingButton;","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getDialogActionsUtilityClass(slot) {\n return generateUtilityClass('MuiDialogActions', slot);\n}\nconst dialogActionsClasses = generateUtilityClasses('MuiDialogActions', ['root', 'spacing']);\nexport default dialogActionsClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"className\", \"disableSpacing\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport styled from '../styles/styled';\nimport useThemeProps from '../styles/useThemeProps';\nimport { getDialogActionsUtilityClass } from './dialogActionsClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n disableSpacing\n } = ownerState;\n const slots = {\n root: ['root', !disableSpacing && 'spacing']\n };\n return composeClasses(slots, getDialogActionsUtilityClass, classes);\n};\n\nconst DialogActionsRoot = styled('div', {\n name: 'MuiDialogActions',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, !ownerState.disableSpacing && styles.spacing];\n }\n})(({\n ownerState\n}) => _extends({\n display: 'flex',\n alignItems: 'center',\n padding: 8,\n justifyContent: 'flex-end',\n flex: '0 0 auto'\n}, !ownerState.disableSpacing && {\n '& > :not(:first-of-type)': {\n marginLeft: 8\n }\n}));\nconst DialogActions = /*#__PURE__*/React.forwardRef(function DialogActions(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiDialogActions'\n });\n\n const {\n className,\n disableSpacing = false\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n const ownerState = _extends({}, props, {\n disableSpacing\n });\n\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsx(DialogActionsRoot, _extends({\n className: clsx(classes.root, className),\n ownerState: ownerState,\n ref: ref\n }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? DialogActions.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * If `true`, the actions do not have additional margin.\n * @default false\n */\n disableSpacing: PropTypes.bool,\n\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default DialogActions;","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getDialogContentTextUtilityClass(slot) {\n return generateUtilityClass('MuiDialogContentText', slot);\n}\nconst dialogContentTextClasses = generateUtilityClasses('MuiDialogContentText', ['root']);\nexport default dialogContentTextClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"children\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport styled, { rootShouldForwardProp } from '../styles/styled';\nimport useThemeProps from '../styles/useThemeProps';\nimport Typography from '../Typography';\nimport { getDialogContentTextUtilityClass } from './dialogContentTextClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n\nconst useUtilityClasses = ownerState => {\n const {\n classes\n } = ownerState;\n const slots = {\n root: ['root']\n };\n const composedClasses = composeClasses(slots, getDialogContentTextUtilityClass, classes);\n return _extends({}, classes, composedClasses);\n};\n\nconst DialogContentTextRoot = styled(Typography, {\n shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',\n name: 'MuiDialogContentText',\n slot: 'Root',\n overridesResolver: (props, styles) => styles.root\n})({});\nconst DialogContentText = /*#__PURE__*/React.forwardRef(function DialogContentText(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiDialogContentText'\n });\n\n const ownerState = _objectWithoutPropertiesLoose(props, _excluded);\n\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsx(DialogContentTextRoot, _extends({\n component: \"p\",\n variant: \"body1\",\n color: \"text.secondary\",\n ref: ref,\n ownerState: ownerState\n }, props, {\n classes: classes\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? DialogContentText.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default DialogContentText;","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getSwitchUtilityClass(slot) {\n return generateUtilityClass('MuiSwitch', slot);\n}\nconst switchClasses = generateUtilityClasses('MuiSwitch', ['root', 'edgeStart', 'edgeEnd', 'switchBase', 'colorPrimary', 'colorSecondary', 'sizeSmall', 'sizeMedium', 'checked', 'disabled', 'input', 'thumb', 'track']);\nexport default switchClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"className\", \"color\", \"edge\", \"size\", \"sx\"];\n// @inheritedComponent IconButton\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { refType } from '@mui/utils';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport { alpha, darken, lighten } from '@mui/system';\nimport capitalize from '../utils/capitalize';\nimport SwitchBase from '../internal/SwitchBase';\nimport useThemeProps from '../styles/useThemeProps';\nimport styled from '../styles/styled';\nimport switchClasses, { getSwitchUtilityClass } from './switchClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n edge,\n size,\n color,\n checked,\n disabled\n } = ownerState;\n const slots = {\n root: ['root', edge && `edge${capitalize(edge)}`, `size${capitalize(size)}`],\n switchBase: ['switchBase', `color${capitalize(color)}`, checked && 'checked', disabled && 'disabled'],\n thumb: ['thumb'],\n track: ['track'],\n input: ['input']\n };\n const composedClasses = composeClasses(slots, getSwitchUtilityClass, classes);\n return _extends({}, classes, composedClasses);\n};\n\nconst SwitchRoot = styled('span', {\n name: 'MuiSwitch',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, ownerState.edge && styles[`edge${capitalize(ownerState.edge)}`], styles[`size${capitalize(ownerState.size)}`]];\n }\n})(({\n ownerState\n}) => _extends({\n display: 'inline-flex',\n width: 34 + 12 * 2,\n height: 14 + 12 * 2,\n overflow: 'hidden',\n padding: 12,\n boxSizing: 'border-box',\n position: 'relative',\n flexShrink: 0,\n zIndex: 0,\n // Reset the stacking context.\n verticalAlign: 'middle',\n // For correct alignment with the text.\n '@media print': {\n colorAdjust: 'exact'\n }\n}, ownerState.edge === 'start' && {\n marginLeft: -8\n}, ownerState.edge === 'end' && {\n marginRight: -8\n}, ownerState.size === 'small' && {\n width: 40,\n height: 24,\n padding: 7,\n [`& .${switchClasses.thumb}`]: {\n width: 16,\n height: 16\n },\n [`& .${switchClasses.switchBase}`]: {\n padding: 4,\n [`&.${switchClasses.checked}`]: {\n transform: 'translateX(16px)'\n }\n }\n}));\nconst SwitchSwitchBase = styled(SwitchBase, {\n name: 'MuiSwitch',\n slot: 'SwitchBase',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.switchBase, {\n [`& .${switchClasses.input}`]: styles.input\n }, ownerState.color !== 'default' && styles[`color${capitalize(ownerState.color)}`]];\n }\n})(({\n theme\n}) => ({\n position: 'absolute',\n top: 0,\n left: 0,\n zIndex: 1,\n // Render above the focus ripple.\n color: theme.palette.mode === 'light' ? theme.palette.common.white : theme.palette.grey[300],\n transition: theme.transitions.create(['left', 'transform'], {\n duration: theme.transitions.duration.shortest\n }),\n [`&.${switchClasses.checked}`]: {\n transform: 'translateX(20px)'\n },\n [`&.${switchClasses.disabled}`]: {\n color: theme.palette.mode === 'light' ? theme.palette.grey[100] : theme.palette.grey[600]\n },\n [`&.${switchClasses.checked} + .${switchClasses.track}`]: {\n opacity: 0.5\n },\n [`&.${switchClasses.disabled} + .${switchClasses.track}`]: {\n opacity: theme.palette.mode === 'light' ? 0.12 : 0.2\n },\n [`& .${switchClasses.input}`]: {\n left: '-100%',\n width: '300%'\n }\n}), ({\n theme,\n ownerState\n}) => _extends({\n '&:hover': {\n backgroundColor: alpha(theme.palette.action.active, theme.palette.action.hoverOpacity),\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n }\n }\n}, ownerState.color !== 'default' && {\n [`&.${switchClasses.checked}`]: {\n color: theme.palette[ownerState.color].main,\n '&:hover': {\n backgroundColor: alpha(theme.palette[ownerState.color].main, theme.palette.action.hoverOpacity),\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n }\n },\n [`&.${switchClasses.disabled}`]: {\n color: theme.palette.mode === 'light' ? lighten(theme.palette[ownerState.color].main, 0.62) : darken(theme.palette[ownerState.color].main, 0.55)\n }\n },\n [`&.${switchClasses.checked} + .${switchClasses.track}`]: {\n backgroundColor: theme.palette[ownerState.color].main\n }\n}));\nconst SwitchTrack = styled('span', {\n name: 'MuiSwitch',\n slot: 'Track',\n overridesResolver: (props, styles) => styles.track\n})(({\n theme\n}) => ({\n height: '100%',\n width: '100%',\n borderRadius: 14 / 2,\n zIndex: -1,\n transition: theme.transitions.create(['opacity', 'background-color'], {\n duration: theme.transitions.duration.shortest\n }),\n backgroundColor: theme.palette.mode === 'light' ? theme.palette.common.black : theme.palette.common.white,\n opacity: theme.palette.mode === 'light' ? 0.38 : 0.3\n}));\nconst SwitchThumb = styled('span', {\n name: 'MuiSwitch',\n slot: 'Thumb',\n overridesResolver: (props, styles) => styles.thumb\n})(({\n theme\n}) => ({\n boxShadow: theme.shadows[1],\n backgroundColor: 'currentColor',\n width: 20,\n height: 20,\n borderRadius: '50%'\n}));\nconst Switch = /*#__PURE__*/React.forwardRef(function Switch(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiSwitch'\n });\n\n const {\n className,\n color = 'primary',\n edge = false,\n size = 'medium',\n sx\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n const ownerState = _extends({}, props, {\n color,\n edge,\n size\n });\n\n const classes = useUtilityClasses(ownerState);\n\n const icon = /*#__PURE__*/_jsx(SwitchThumb, {\n className: classes.thumb,\n ownerState: ownerState\n });\n\n return /*#__PURE__*/_jsxs(SwitchRoot, {\n className: clsx(classes.root, className),\n sx: sx,\n ownerState: ownerState,\n children: [/*#__PURE__*/_jsx(SwitchSwitchBase, _extends({\n type: \"checkbox\",\n icon: icon,\n checkedIcon: icon,\n ref: ref,\n ownerState: ownerState\n }, other, {\n classes: _extends({}, classes, {\n root: classes.switchBase\n })\n })), /*#__PURE__*/_jsx(SwitchTrack, {\n className: classes.track,\n ownerState: ownerState\n })]\n });\n});\nprocess.env.NODE_ENV !== \"production\" ? Switch.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * If `true`, the component is checked.\n */\n checked: PropTypes.bool,\n\n /**\n * The icon to display when the component is checked.\n */\n checkedIcon: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * The color of the component. It supports those theme colors that make sense for this component.\n * @default 'primary'\n */\n color: PropTypes\n /* @typescript-to-proptypes-ignore */\n .oneOfType([PropTypes.oneOf(['default', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n\n /**\n * The default checked state. Use when the component is not controlled.\n */\n defaultChecked: PropTypes.bool,\n\n /**\n * If `true`, the component is disabled.\n */\n disabled: PropTypes.bool,\n\n /**\n * If `true`, the ripple effect is disabled.\n */\n disableRipple: PropTypes.bool,\n\n /**\n * If given, uses a negative margin to counteract the padding on one\n * side (this is often helpful for aligning the left or right\n * side of the icon with content above or below, without ruining the border\n * size and shape).\n * @default false\n */\n edge: PropTypes.oneOf(['end', 'start', false]),\n\n /**\n * The icon to display when the component is unchecked.\n */\n icon: PropTypes.node,\n\n /**\n * The id of the `input` element.\n */\n id: PropTypes.string,\n\n /**\n * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n */\n inputProps: PropTypes.object,\n\n /**\n * Pass a ref to the `input` element.\n */\n inputRef: refType,\n\n /**\n * Callback fired when the state is changed.\n *\n * @param {React.ChangeEvent} event The event source of the callback.\n * You can pull out the new value by accessing `event.target.value` (string).\n * You can pull out the new checked state by accessing `event.target.checked` (boolean).\n */\n onChange: PropTypes.func,\n\n /**\n * If `true`, the `input` element is required.\n */\n required: PropTypes.bool,\n\n /**\n * The size of the component.\n * `small` is equivalent to the dense switch styling.\n * @default 'medium'\n */\n size: PropTypes\n /* @typescript-to-proptypes-ignore */\n .oneOfType([PropTypes.oneOf(['medium', 'small']), PropTypes.string]),\n\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n\n /**\n * The value of the component. The DOM API casts this to a string.\n * The browser uses \"on\" as the default value.\n */\n value: PropTypes.any\n} : void 0;\nexport default Switch;"],"names":["_interopRequireDefault","require","exports","_createSvgIcon","_jsxRuntime","_default","default","jsx","d","getLoadingButtonUtilityClass","slot","generateUtilityClass","generateUtilityClasses","_excluded","LoadingButtonRoot","styled","Button","shouldForwardProp","prop","rootShouldForwardProp","name","overridesResolver","props","styles","root","startIconLoadingStart","loadingButtonClasses","endIconLoadingEnd","ownerState","theme","_extends","transition","transitions","create","duration","short","opacity","loadingPosition","color","fullWidth","marginRight","marginLeft","LoadingButtonLoadingIndicator","loadingIndicator","capitalize","position","visibility","display","variant","left","transform","palette","action","disabled","right","React","inProps","ref","useThemeProps","children","idProp","id","loading","loadingIndicatorProp","other","_objectWithoutPropertiesLoose","useId","_jsx","CircularProgress","size","classes","slots","startIcon","endIcon","composedClasses","composeClasses","useUtilityClasses","_jsxs","className","getDialogActionsUtilityClass","DialogActionsRoot","disableSpacing","spacing","alignItems","padding","justifyContent","flex","clsx","getDialogContentTextUtilityClass","DialogContentTextRoot","Typography","component","getSwitchUtilityClass","SwitchRoot","edge","width","height","overflow","boxSizing","flexShrink","zIndex","verticalAlign","colorAdjust","switchClasses","SwitchSwitchBase","SwitchBase","switchBase","input","top","mode","common","white","grey","shortest","backgroundColor","alpha","active","hoverOpacity","main","lighten","darken","SwitchTrack","track","borderRadius","black","SwitchThumb","thumb","boxShadow","shadows","sx","checked","icon","type","checkedIcon"],"sourceRoot":""} \ No newline at end of file diff --git a/portal-ui/build/static/js/1666.29b376af.chunk.js b/portal-ui/build/static/js/1666.29b376af.chunk.js new file mode 100644 index 000000000..6edb02b0d --- /dev/null +++ b/portal-ui/build/static/js/1666.29b376af.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1666],{23152:function(e,a,n){n.r(a);var t=n(23430),o=n(18489),r=n(50390),s=n(38342),i=n.n(s),l=n(34424),c=n(25594),d=n(66946),u=n(86509),m=n(4285),p=n(72462),x=n(44149),f=n(66964),h=n(76352),g=n(30324),v=n(85615),Z=n(62559),b={setModalErrorSnackMessage:x.zb},j=(0,l.$j)((function(e){var a=e.system;return{distributedSetup:i()(a,"distributedSetup",!1)}}),b);a.default=(0,m.Z)((function(e){return(0,u.Z)((0,o.Z)((0,o.Z)((0,o.Z)({},p.DF),p.ID),p.bK))}))(j((function(e){var a=e.modalOpen,n=e.currentTags,s=e.onCloseAndUpdate,i=e.bucketName,l=e.setModalErrorSnackMessage,u=e.classes,m=(0,r.useState)(""),p=(0,t.Z)(m,2),x=p[0],b=p[1],j=(0,r.useState)(""),C=(0,t.Z)(j,2),y=C[0],N=C[1],k=(0,r.useState)(!1),w=(0,t.Z)(k,2),S=w[0],M=w[1];return(0,Z.jsx)(h.Z,{modalOpen:a,title:"Add New Tag ",onClose:function(){s(!1)},titleIcon:(0,Z.jsx)(v.OC,{}),children:(0,Z.jsxs)(c.ZP,{container:!0,children:[(0,Z.jsxs)("div",{className:u.spacerBottom,children:[(0,Z.jsx)("strong",{children:"Bucket"}),": ",i]}),(0,Z.jsx)(c.ZP,{item:!0,xs:12,className:u.formFieldRow,children:(0,Z.jsx)(f.Z,{value:x,label:"New Tag Key",id:"newTagKey",name:"newTagKey",placeholder:"Enter New Tag Key",onChange:function(e){b(e.target.value)}})}),(0,Z.jsx)(c.ZP,{item:!0,xs:12,className:u.formFieldRow,children:(0,Z.jsx)(f.Z,{value:y,label:"New Tag Label",id:"newTagLabel",name:"newTagLabel",placeholder:"Enter New Tag Label",onChange:function(e){N(e.target.value)}})}),(0,Z.jsxs)(c.ZP,{item:!0,xs:12,className:u.modalButtonBar,children:[(0,Z.jsx)(d.Z,{type:"button",variant:"outlined",color:"primary",onClick:function(){N(""),b("")},children:"Clear"}),(0,Z.jsx)(d.Z,{type:"submit",variant:"contained",color:"primary",disabled:""===y.trim()||""===x.trim()||S,onClick:function(){M(!0);var e={};e[x]=y;var a=(0,o.Z)((0,o.Z)({},n),e);g.Z.invoke("PUT","/api/v1/buckets/".concat(i,"/tags"),{tags:a}).then((function(e){M(!1),s(!0)})).catch((function(e){l(e),M(!1)}))},children:"Save"})]})]})})})))},66964:function(e,a,n){var t=n(18489),o=n(50390),r=n(12066),s=n(25594),i=n(36554),l=n(94187),c=n(95467),d=n(86509),u=n(62449),m=n(4285),p=n(72462),x=n(97538),f=n(44977),h=n(62559),g=(0,u.Z)((function(e){return(0,d.Z)((0,t.Z)({},p.gM))}));function v(e){var a=g();return(0,h.jsx)(r.Z,(0,t.Z)({InputProps:{classes:a}},e))}a.Z=(0,m.Z)((function(e){return(0,d.Z)((0,t.Z)((0,t.Z)((0,t.Z)({},p.YI),p.Hr),{},{textBoxContainer:{flexGrow:1,position:"relative"},overlayAction:{position:"absolute",right:5,top:6,"& svg":{maxWidth:15,maxHeight:15},"&.withLabel":{top:5}},inputLabel:(0,t.Z)((0,t.Z)({},p.YI.inputLabel),{},{fontWeight:"normal"})}))}))((function(e){var a=e.label,n=e.onChange,r=e.value,d=e.id,u=e.name,m=e.type,p=void 0===m?"text":m,g=e.autoComplete,Z=void 0===g?"off":g,b=e.disabled,j=void 0!==b&&b,C=e.multiline,y=void 0!==C&&C,N=e.tooltip,k=void 0===N?"":N,w=e.index,S=void 0===w?0:w,M=e.error,E=void 0===M?"":M,L=e.required,B=void 0!==L&&L,T=e.placeholder,I=void 0===T?"":T,P=e.min,D=e.max,F=e.overlayIcon,z=void 0===F?null:F,O=e.overlayObject,W=void 0===O?null:O,R=e.extraInputProps,K=void 0===R?{}:R,A=e.overlayAction,H=e.noLabelMinWidth,$=void 0!==H&&H,U=e.pattern,Y=void 0===U?"":U,_=e.autoFocus,q=void 0!==_&&_,G=e.classes,Q=e.className,X=void 0===Q?"":Q,J=e.onKeyPress,V=(0,t.Z)({"data-index":S},K);return"number"===p&&P&&(V.min=P),"number"===p&&D&&(V.max=D),""!==Y&&(V.pattern=Y),(0,h.jsx)(o.Fragment,{children:(0,h.jsxs)(s.ZP,{container:!0,className:(0,f.Z)(""!==X?X:"",""!==E?G.errorInField:G.inputBoxContainer),children:[""!==a&&(0,h.jsxs)(i.Z,{htmlFor:d,className:$?G.noMinWidthLabel:G.inputLabel,children:[(0,h.jsxs)("span",{children:[a,B?"*":""]}),""!==k&&(0,h.jsx)("div",{className:G.tooltipContainer,children:(0,h.jsx)(l.Z,{title:k,placement:"top-start",children:(0,h.jsx)("div",{className:G.tooltip,children:(0,h.jsx)(x.Z,{})})})})]}),(0,h.jsxs)("div",{className:G.textBoxContainer,children:[(0,h.jsx)(v,{id:d,name:u,fullWidth:!0,value:r,autoFocus:q,disabled:j,onChange:n,type:p,multiline:y,autoComplete:Z,inputProps:V,error:""!==E,helperText:E,placeholder:I,className:G.inputRebase,onKeyPress:J}),z&&(0,h.jsx)("div",{className:"".concat(G.overlayAction," ").concat(""!==a?"withLabel":""),children:(0,h.jsx)(c.Z,{onClick:A?function(){A()}:function(){return null},size:"small",disableFocusRipple:!1,disableRipple:!1,disableTouchRipple:!1,children:z})}),W&&(0,h.jsx)("div",{className:"".concat(G.overlayAction," ").concat(""!==a?"withLabel":""),children:W})]})]})})}))},76352:function(e,a,n){n.d(a,{Z:function(){return S}});var t,o=n(23430),r=n(18489),s=n(50390),i=n(34424),l=n(95467),c=n(97771),d=n(84402),u=n(78426),m=n(93085),p=n(86509),x=n(4285),f=n(72462),h=n(44149),g=n(38342),v=n.n(g),Z=n(92125),b=n(19538),j=n(21278),C=n(62559),y=function(){clearInterval(t)},N={displayErrorMessage:h.zb},k=(0,i.$j)((function(e){return{modalSnackMessage:e.system.modalSnackBar}}),N)((0,x.Z)((function(e){return(0,p.Z)({modalErrorContainer:{position:"absolute",marginTop:10,width:"80%",backgroundColor:"#fff",border:"#C72C48 1px solid",borderLeftWidth:12,borderRadius:3,zIndex:1e3,padding:"10px 15px",left:"50%",transform:"translateX(-50%)",opacity:0,transitionDuration:"0.2s"},modalErrorShow:{opacity:1},closeButton:{position:"absolute",right:5,fontSize:"small",border:0,backgroundColor:"#fff",cursor:"pointer"},errorTitle:{display:"flex",alignItems:"center"},errorLabel:{color:"#000",fontSize:18,fontWeight:500,marginLeft:5,marginRight:25},messageIcon:{color:"#C72C48",display:"flex","& svg":{width:32,height:32}},detailsButton:{color:"#9C9C9C",display:"flex",alignItems:"center",border:0,backgroundColor:"transparent",paddingLeft:5,fontSize:14,transformDuration:"0.3s",cursor:"pointer"},extraDetailsContainer:{fontStyle:"italic",color:"#9C9C9C",lineHeight:0,padding:"0 10px",transition:"all .2s ease-in-out",overflow:"hidden"},extraDetailsOpen:{lineHeight:1,padding:"3px 10px"},arrowElement:{marginLeft:-5},arrowOpen:{transform:"rotateZ(90deg)",transformDuration:"0.3s"}})}))((function(e){var a=e.classes,n=e.modalSnackMessage,r=e.displayErrorMessage,i=e.customStyle,l=(0,s.useState)(!1),c=(0,o.Z)(l,2),d=c[0],u=c[1],m=(0,s.useState)(!1),p=(0,o.Z)(m,2),x=p[0],f=p[1],h=(0,s.useCallback)((function(){f(!1)}),[]);(0,s.useEffect)((function(){x||(r({detailedError:"",errorMessage:""}),u(!1))}),[r,x]),(0,s.useEffect)((function(){""!==n.message&&"error"===n.type&&f(!0)}),[h,n.message,n.type]);var g=v()(n,"message",""),N=v()(n,"detailedErrorMsg","");return"error"!==n.type||""===g?null:(0,C.jsx)(s.Fragment,{children:(0,C.jsxs)("div",{className:"".concat(a.modalErrorContainer," ").concat(x?a.modalErrorShow:""),style:i,onMouseOver:y,onMouseLeave:function(){t=setInterval(h,1e4)},children:[(0,C.jsx)("button",{className:a.closeButton,onClick:h,children:(0,C.jsx)(j.Z,{})}),(0,C.jsxs)("div",{className:a.errorTitle,children:[(0,C.jsx)("span",{className:a.messageIcon,children:(0,C.jsx)(b.Z,{})}),(0,C.jsx)("span",{className:a.errorLabel,children:g})]}),""!==N&&(0,C.jsxs)(s.Fragment,{children:[(0,C.jsx)("div",{className:a.detailsContainerLink,children:(0,C.jsxs)("button",{className:a.detailsButton,onClick:function(){u(!d)},children:["Details",(0,C.jsx)(Z.Z,{className:"".concat(a.arrowElement," ").concat(d?a.arrowOpen:"")})]})}),(0,C.jsx)("div",{className:"".concat(a.extraDetailsContainer," ").concat(d?a.extraDetailsOpen:""),children:N})]})]})})}))),w=(0,i.$j)((function(e){return{modalSnackMessage:e.system.modalSnackBar}}),{setModalSnackMessage:h.MK}),S=(0,x.Z)((function(e){return(0,p.Z)((0,r.Z)((0,r.Z)({},f.Qw),{},{root:{"& .MuiPaper-root":{padding:"0 2rem 2rem 1rem"}},content:{padding:25,paddingBottom:0},customDialogSize:{width:"100%",maxWidth:765}},f.sN))}))(w((function(e){var a=e.onClose,n=e.modalOpen,t=e.title,i=e.children,p=e.classes,x=e.wideLimit,f=void 0===x||x,h=e.modalSnackMessage,g=e.noContentPadding,v=e.setModalSnackMessage,Z=e.titleIcon,b=void 0===Z?null:Z,y=(0,s.useState)(!1),N=(0,o.Z)(y,2),w=N[0],S=N[1];(0,s.useEffect)((function(){v("")}),[v]),(0,s.useEffect)((function(){if(h){if(""===h.message)return void S(!1);"error"!==h.type&&S(!0)}}),[h]);var M=f?{classes:{paper:p.customDialogSize}}:{maxWidth:"lg",fullWidth:!0},E="";return h&&(E=h.detailedErrorMsg,(""===h.detailedErrorMsg||h.detailedErrorMsg.length<5)&&(E=h.message)),(0,C.jsxs)(d.Z,(0,r.Z)((0,r.Z)({open:n,classes:p},M),{},{scroll:"paper",onClose:function(e,n){"backdropClick"!==n&&a()},className:p.root,children:[(0,C.jsxs)(u.Z,{className:p.title,children:[(0,C.jsxs)("div",{className:p.titleText,children:[b," ",t]}),(0,C.jsx)("div",{className:p.closeContainer,children:(0,C.jsx)(l.Z,{"aria-label":"close",className:p.closeButton,onClick:a,disableRipple:!0,size:"small",children:(0,C.jsx)(j.Z,{})})})]}),(0,C.jsx)(k,{}),(0,C.jsx)(c.Z,{open:w,className:p.snackBarModal,onClose:function(){S(!1),v("")},message:E,ContentProps:{className:"".concat(p.snackBar," ").concat(h&&"error"===h.type?p.errorSnackBar:"")},autoHideDuration:h&&"error"===h.type?1e4:5e3}),(0,C.jsx)(m.Z,{className:g?"":p.content,children:i})]}))})))}}]); +//# sourceMappingURL=1666.29b376af.chunk.js.map \ No newline at end of file diff --git a/portal-ui/build/static/js/1666.29b376af.chunk.js.map b/portal-ui/build/static/js/1666.29b376af.chunk.js.map new file mode 100644 index 000000000..5eb2aa30d --- /dev/null +++ b/portal-ui/build/static/js/1666.29b376af.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/1666.29b376af.chunk.js","mappings":"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","sources":["screens/Console/Buckets/BucketDetails/AddBucketTagModal.tsx","screens/Console/Common/FormComponents/InputBoxWrapper/InputBoxWrapper.tsx","screens/Console/Common/FormComponents/ModalError/ModalError.tsx","screens/Console/Common/ModalWrapper/ModalWrapper.tsx"],"sourcesContent":["// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport get from \"lodash/get\";\nimport { connect } from \"react-redux\";\nimport { Button, Grid } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n formFieldStyles,\n modalStyleUtils,\n spacingUtils,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport { setModalErrorSnackMessage } from \"../../../../actions\";\nimport { AppState } from \"../../../../store\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\nimport api from \"../../../../common/api\";\nimport { AddNewTagIcon } from \"../../../../icons\";\n\ninterface IBucketTagModal {\n modalOpen: boolean;\n currentTags: any;\n bucketName: string;\n onCloseAndUpdate: (refresh: boolean) => void;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...formFieldStyles,\n ...modalStyleUtils,\n ...spacingUtils,\n });\n\nconst AddBucketTagModal = ({\n modalOpen,\n currentTags,\n onCloseAndUpdate,\n bucketName,\n setModalErrorSnackMessage,\n classes,\n}: IBucketTagModal) => {\n const [newKey, setNewKey] = useState(\"\");\n const [newLabel, setNewLabel] = useState(\"\");\n const [isSending, setIsSending] = useState(false);\n\n const resetForm = () => {\n setNewLabel(\"\");\n setNewKey(\"\");\n };\n\n const addTagProcess = () => {\n setIsSending(true);\n const newTag: any = {};\n\n newTag[newKey] = newLabel;\n const newTagList = { ...currentTags, ...newTag };\n\n api\n .invoke(\"PUT\", `/api/v1/buckets/${bucketName}/tags`, {\n tags: newTagList,\n })\n .then((res: any) => {\n setIsSending(false);\n onCloseAndUpdate(true);\n })\n .catch((error: ErrorResponseHandler) => {\n setModalErrorSnackMessage(error);\n setIsSending(false);\n });\n };\n\n return (\n {\n onCloseAndUpdate(false);\n }}\n titleIcon={}\n >\n \n
\n Bucket: {bucketName}\n
\n \n {\n setNewKey(e.target.value);\n }}\n />\n \n \n {\n setNewLabel(e.target.value);\n }}\n />\n \n \n \n Clear\n \n \n Save\n \n \n
\n \n );\n};\n\nconst mapStateToProps = ({ system }: AppState) => ({\n distributedSetup: get(system, \"distributedSetup\", false),\n});\n\nconst mapDispatchToProps = {\n setModalErrorSnackMessage,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(AddBucketTagModal));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React from \"react\";\nimport {\n Grid,\n IconButton,\n InputLabel,\n TextField,\n TextFieldProps,\n Tooltip,\n} from \"@mui/material\";\nimport { OutlinedInputProps } from \"@mui/material/OutlinedInput\";\nimport { InputProps as StandardInputProps } from \"@mui/material/Input\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n fieldBasic,\n inputFieldStyles,\n tooltipHelper,\n} from \"../common/styleLibrary\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\nimport clsx from \"clsx\";\n\ninterface InputBoxProps {\n label: string;\n classes: any;\n onChange: (e: React.ChangeEvent) => void;\n onKeyPress?: (e: any) => void;\n value: string | boolean;\n id: string;\n name: string;\n disabled?: boolean;\n multiline?: boolean;\n type?: string;\n tooltip?: string;\n autoComplete?: string;\n index?: number;\n error?: string;\n required?: boolean;\n placeholder?: string;\n min?: string;\n max?: string;\n overlayIcon?: any;\n overlayAction?: () => void;\n overlayObject?: any;\n extraInputProps?: StandardInputProps[\"inputProps\"];\n noLabelMinWidth?: boolean;\n pattern?: string;\n autoFocus?: boolean;\n className?: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n textBoxContainer: {\n flexGrow: 1,\n position: \"relative\",\n },\n overlayAction: {\n position: \"absolute\",\n right: 5,\n top: 6,\n \"& svg\": {\n maxWidth: 15,\n maxHeight: 15,\n },\n \"&.withLabel\": {\n top: 5,\n },\n },\n inputLabel: {\n ...fieldBasic.inputLabel,\n fontWeight: \"normal\",\n },\n });\n\nconst inputStyles = makeStyles((theme: Theme) =>\n createStyles({\n ...inputFieldStyles,\n })\n);\n\nfunction InputField(props: TextFieldProps) {\n const classes = inputStyles();\n\n return (\n }\n {...props}\n />\n );\n}\n\nconst InputBoxWrapper = ({\n label,\n onChange,\n value,\n id,\n name,\n type = \"text\",\n autoComplete = \"off\",\n disabled = false,\n multiline = false,\n tooltip = \"\",\n index = 0,\n error = \"\",\n required = false,\n placeholder = \"\",\n min,\n max,\n overlayIcon = null,\n overlayObject = null,\n extraInputProps = {},\n overlayAction,\n noLabelMinWidth = false,\n pattern = \"\",\n autoFocus = false,\n classes,\n className = \"\",\n onKeyPress,\n}: InputBoxProps) => {\n let inputProps: any = { \"data-index\": index, ...extraInputProps };\n\n if (type === \"number\" && min) {\n inputProps[\"min\"] = min;\n }\n\n if (type === \"number\" && max) {\n inputProps[\"max\"] = max;\n }\n\n if (pattern !== \"\") {\n inputProps[\"pattern\"] = pattern;\n }\n\n return (\n \n \n {label !== \"\" && (\n \n \n {label}\n {required ? \"*\" : \"\"}\n \n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n \n )}\n\n
\n \n {overlayIcon && (\n \n {\n overlayAction();\n }\n : () => null\n }\n size={\"small\"}\n disableFocusRipple={false}\n disableRipple={false}\n disableTouchRipple={false}\n >\n {overlayIcon}\n \n
\n )}\n {overlayObject && (\n \n {overlayObject}\n \n )}\n \n \n
\n );\n};\n\nexport default withStyles(styles)(InputBoxWrapper);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\n// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport get from \"lodash/get\";\nimport ArrowRightIcon from \"@mui/icons-material/ArrowRight\";\nimport ErrorOutlineIcon from \"@mui/icons-material/ErrorOutline\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { AppState } from \"../../../../../store\";\nimport {\n setErrorSnackMessage,\n setModalErrorSnackMessage,\n} from \"../../../../../actions\";\nimport { snackBarMessage } from \"../../../../../types\";\n\ninterface ImodalErrorProps {\n customStyle?: any;\n classes: any;\n modalSnackMessage: snackBarMessage;\n displayErrorMessage: typeof setErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n modalErrorContainer: {\n position: \"absolute\",\n marginTop: 10,\n width: \"80%\",\n backgroundColor: \"#fff\",\n border: \"#C72C48 1px solid\",\n borderLeftWidth: 12,\n borderRadius: 3,\n zIndex: 1000,\n padding: \"10px 15px\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n opacity: 0,\n transitionDuration: \"0.2s\",\n },\n modalErrorShow: {\n opacity: 1,\n },\n closeButton: {\n position: \"absolute\",\n right: 5,\n fontSize: \"small\",\n border: 0,\n backgroundColor: \"#fff\",\n cursor: \"pointer\",\n },\n errorTitle: {\n display: \"flex\",\n alignItems: \"center\",\n },\n errorLabel: {\n color: \"#000\",\n fontSize: 18,\n fontWeight: 500,\n marginLeft: 5,\n marginRight: 25,\n },\n messageIcon: {\n color: \"#C72C48\",\n display: \"flex\",\n \"& svg\": {\n width: 32,\n height: 32,\n },\n },\n detailsButton: {\n color: \"#9C9C9C\",\n display: \"flex\",\n alignItems: \"center\",\n border: 0,\n backgroundColor: \"transparent\",\n paddingLeft: 5,\n fontSize: 14,\n transformDuration: \"0.3s\",\n cursor: \"pointer\",\n },\n extraDetailsContainer: {\n fontStyle: \"italic\",\n color: \"#9C9C9C\",\n lineHeight: 0,\n padding: \"0 10px\",\n transition: \"all .2s ease-in-out\",\n overflow: \"hidden\",\n },\n extraDetailsOpen: {\n lineHeight: 1,\n padding: \"3px 10px\",\n },\n arrowElement: {\n marginLeft: -5,\n },\n arrowOpen: {\n transform: \"rotateZ(90deg)\",\n transformDuration: \"0.3s\",\n },\n });\n\nvar timerI: any;\n\nconst startHideTimer = (callbackFunction: () => void) => {\n timerI = setInterval(callbackFunction, 10000);\n};\n\nconst stopHideTimer = () => {\n clearInterval(timerI);\n};\n\nconst ModalError = ({\n classes,\n modalSnackMessage,\n displayErrorMessage,\n customStyle,\n}: ImodalErrorProps) => {\n const [detailsOpen, setDetailsOpen] = useState(false);\n const [displayErrorMsg, setDisplayErrorMsg] = useState(false);\n\n const closeErrorMessage = useCallback(() => {\n setDisplayErrorMsg(false);\n }, []);\n\n useEffect(() => {\n if (!displayErrorMsg) {\n displayErrorMessage({ detailedError: \"\", errorMessage: \"\" });\n setDetailsOpen(false);\n //clearInterval(timerI);\n }\n }, [displayErrorMessage, displayErrorMsg]);\n\n useEffect(() => {\n if (\n modalSnackMessage.message !== \"\" &&\n modalSnackMessage.type === \"error\"\n ) {\n //Error message received, we trigger the animation\n setDisplayErrorMsg(true);\n //startHideTimer(closeErrorMessage);\n }\n }, [closeErrorMessage, modalSnackMessage.message, modalSnackMessage.type]);\n\n const detailsToggle = () => {\n setDetailsOpen(!detailsOpen);\n };\n\n const message = get(modalSnackMessage, \"message\", \"\");\n const messageDetails = get(modalSnackMessage, \"detailedErrorMsg\", \"\");\n\n if (modalSnackMessage.type !== \"error\" || message === \"\") {\n return null;\n }\n\n return (\n \n startHideTimer(closeErrorMessage)}\n >\n \n
\n \n \n \n {message}\n
\n {messageDetails !== \"\" && (\n \n
\n \n
\n \n {messageDetails}\n \n
\n )}\n \n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n modalSnackMessage: state.system.modalSnackBar,\n});\n\nconst mapDispatchToProps = {\n displayErrorMessage: setModalErrorSnackMessage,\n};\n\nconst connector = connect(mapState, mapDispatchToProps);\n\nexport default connector(withStyles(styles)(ModalError));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport IconButton from \"@mui/material/IconButton\";\nimport Snackbar from \"@mui/material/Snackbar\";\nimport { Dialog, DialogContent, DialogTitle } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n deleteDialogStyles,\n snackBarCommon,\n} from \"../FormComponents/common/styleLibrary\";\nimport { AppState } from \"../../../../store\";\nimport { snackBarMessage } from \"../../../../types\";\nimport { setModalSnackMessage } from \"../../../../actions\";\nimport ModalError from \"../FormComponents/ModalError/ModalError\";\nimport CloseIcon from \"@mui/icons-material/Close\";\n\ninterface IModalProps {\n classes: any;\n onClose: () => void;\n modalOpen: boolean;\n title: string | React.ReactNode;\n children: any;\n wideLimit?: boolean;\n modalSnackMessage?: snackBarMessage;\n noContentPadding?: boolean;\n setModalSnackMessage: typeof setModalSnackMessage;\n titleIcon?: React.ReactNode;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...deleteDialogStyles,\n root: {\n \"& .MuiPaper-root\": {\n padding: \"0 2rem 2rem 1rem\",\n },\n },\n content: {\n padding: 25,\n paddingBottom: 0,\n },\n customDialogSize: {\n width: \"100%\",\n maxWidth: 765,\n },\n ...snackBarCommon,\n });\n\nconst ModalWrapper = ({\n onClose,\n modalOpen,\n title,\n children,\n classes,\n wideLimit = true,\n modalSnackMessage,\n noContentPadding,\n setModalSnackMessage,\n titleIcon = null,\n}: IModalProps) => {\n const [openSnackbar, setOpenSnackbar] = useState(false);\n\n useEffect(() => {\n setModalSnackMessage(\"\");\n }, [setModalSnackMessage]);\n\n useEffect(() => {\n if (modalSnackMessage) {\n if (modalSnackMessage.message === \"\") {\n setOpenSnackbar(false);\n return;\n }\n // Open SnackBar\n if (modalSnackMessage.type !== \"error\") {\n setOpenSnackbar(true);\n }\n }\n }, [modalSnackMessage]);\n\n const closeSnackBar = () => {\n setOpenSnackbar(false);\n setModalSnackMessage(\"\");\n };\n\n const customSize = wideLimit\n ? {\n classes: {\n paper: classes.customDialogSize,\n },\n }\n : { maxWidth: \"lg\" as const, fullWidth: true };\n\n let message = \"\";\n\n if (modalSnackMessage) {\n message = modalSnackMessage.detailedErrorMsg;\n if (\n modalSnackMessage.detailedErrorMsg === \"\" ||\n modalSnackMessage.detailedErrorMsg.length < 5\n ) {\n message = modalSnackMessage.message;\n }\n }\n\n return (\n {\n if (reason !== \"backdropClick\") {\n onClose(); // close on Esc but not on click outside\n }\n }}\n className={classes.root}\n >\n \n
\n {titleIcon} {title}\n
\n
\n \n \n \n
\n
\n\n \n {\n closeSnackBar();\n }}\n message={message}\n ContentProps={{\n className: `${classes.snackBar} ${\n modalSnackMessage && modalSnackMessage.type === \"error\"\n ? classes.errorSnackBar\n : \"\"\n }`,\n }}\n autoHideDuration={\n modalSnackMessage && modalSnackMessage.type === \"error\" ? 10000 : 5000\n }\n />\n \n {children}\n \n \n );\n};\n\nconst mapState = (state: AppState) => ({\n modalSnackMessage: state.system.modalSnackBar,\n});\n\nconst connector = connect(mapState, {\n setModalSnackMessage,\n});\n\nexport default withStyles(styles)(connector(ModalWrapper));\n"],"names":["mapDispatchToProps","setModalErrorSnackMessage","connector","connect","system","distributedSetup","get","withStyles","theme","createStyles","formFieldStyles","modalStyleUtils","spacingUtils","modalOpen","currentTags","onCloseAndUpdate","bucketName","classes","useState","newKey","setNewKey","newLabel","setNewLabel","isSending","setIsSending","title","onClose","titleIcon","container","className","spacerBottom","item","xs","formFieldRow","value","label","id","name","placeholder","onChange","e","target","modalButtonBar","type","variant","color","onClick","disabled","trim","newTag","newTagList","api","tags","then","res","catch","error","inputStyles","makeStyles","inputFieldStyles","InputField","props","InputProps","fieldBasic","tooltipHelper","textBoxContainer","flexGrow","position","overlayAction","right","top","maxWidth","maxHeight","inputLabel","fontWeight","autoComplete","multiline","tooltip","index","required","min","max","overlayIcon","overlayObject","extraInputProps","noLabelMinWidth","pattern","autoFocus","onKeyPress","inputProps","clsx","errorInField","inputBoxContainer","htmlFor","noMinWidthLabel","tooltipContainer","placement","fullWidth","helperText","inputRebase","size","disableFocusRipple","disableRipple","disableTouchRipple","timerI","stopHideTimer","clearInterval","displayErrorMessage","state","modalSnackMessage","modalSnackBar","modalErrorContainer","marginTop","width","backgroundColor","border","borderLeftWidth","borderRadius","zIndex","padding","left","transform","opacity","transitionDuration","modalErrorShow","closeButton","fontSize","cursor","errorTitle","display","alignItems","errorLabel","marginLeft","marginRight","messageIcon","height","detailsButton","paddingLeft","transformDuration","extraDetailsContainer","fontStyle","lineHeight","transition","overflow","extraDetailsOpen","arrowElement","arrowOpen","customStyle","detailsOpen","setDetailsOpen","displayErrorMsg","setDisplayErrorMsg","closeErrorMessage","useCallback","useEffect","detailedError","errorMessage","message","messageDetails","Fragment","style","onMouseOver","onMouseLeave","setInterval","Close","ErrorOutline","detailsContainerLink","ArrowRight","setModalSnackMessage","deleteDialogStyles","root","content","paddingBottom","customDialogSize","snackBarCommon","children","wideLimit","noContentPadding","openSnackbar","setOpenSnackbar","customSize","paper","detailedErrorMsg","length","Dialog","open","scroll","event","reason","DialogTitle","titleText","closeContainer","IconButton","Snackbar","snackBarModal","ContentProps","snackBar","errorSnackBar","autoHideDuration","DialogContent"],"sourceRoot":""} \ No newline at end of file diff --git a/portal-ui/build/static/js/1666.d4e2b942.chunk.js b/portal-ui/build/static/js/1666.d4e2b942.chunk.js deleted file mode 100644 index d3029fde8..000000000 --- a/portal-ui/build/static/js/1666.d4e2b942.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1666],{23152:function(e,a,n){n.r(a);var t=n(23430),o=n(18489),r=n(50390),s=n(38342),i=n.n(s),l=n(34424),c=n(25594),d=n(66946),u=n(86509),m=n(4285),p=n(72462),x=n(44149),f=n(66964),h=n(76352),g=n(30324),v=n(98280),Z=n(62559),b={setModalErrorSnackMessage:x.zb},j=(0,l.$j)((function(e){var a=e.system;return{distributedSetup:i()(a,"distributedSetup",!1)}}),b);a.default=(0,m.Z)((function(e){return(0,u.Z)((0,o.Z)((0,o.Z)((0,o.Z)({},p.DF),p.ID),p.bK))}))(j((function(e){var a=e.modalOpen,n=e.currentTags,s=e.onCloseAndUpdate,i=e.bucketName,l=e.setModalErrorSnackMessage,u=e.classes,m=(0,r.useState)(""),p=(0,t.Z)(m,2),x=p[0],b=p[1],j=(0,r.useState)(""),C=(0,t.Z)(j,2),N=C[0],y=C[1],k=(0,r.useState)(!1),w=(0,t.Z)(k,2),S=w[0],M=w[1];return(0,Z.jsx)(h.Z,{modalOpen:a,title:"Add New Tag ",onClose:function(){s(!1)},titleIcon:(0,Z.jsx)(v.OC,{}),children:(0,Z.jsxs)(c.ZP,{container:!0,children:[(0,Z.jsxs)("div",{className:u.spacerBottom,children:[(0,Z.jsx)("strong",{children:"Bucket"}),": ",i]}),(0,Z.jsx)(c.ZP,{item:!0,xs:12,className:u.formFieldRow,children:(0,Z.jsx)(f.Z,{value:x,label:"New Tag Key",id:"newTagKey",name:"newTagKey",placeholder:"Enter New Tag Key",onChange:function(e){b(e.target.value)}})}),(0,Z.jsx)(c.ZP,{item:!0,xs:12,className:u.formFieldRow,children:(0,Z.jsx)(f.Z,{value:N,label:"New Tag Label",id:"newTagLabel",name:"newTagLabel",placeholder:"Enter New Tag Label",onChange:function(e){y(e.target.value)}})}),(0,Z.jsxs)(c.ZP,{item:!0,xs:12,className:u.modalButtonBar,children:[(0,Z.jsx)(d.Z,{type:"button",variant:"outlined",color:"primary",onClick:function(){y(""),b("")},children:"Clear"}),(0,Z.jsx)(d.Z,{type:"submit",variant:"contained",color:"primary",disabled:""===N.trim()||""===x.trim()||S,onClick:function(){M(!0);var e={};e[x]=N;var a=(0,o.Z)((0,o.Z)({},n),e);g.Z.invoke("PUT","/api/v1/buckets/".concat(i,"/tags"),{tags:a}).then((function(e){M(!1),s(!0)})).catch((function(e){l(e),M(!1)}))},children:"Save"})]})]})})})))},66964:function(e,a,n){var t=n(18489),o=n(50390),r=n(12066),s=n(25594),i=n(36554),l=n(94187),c=n(95467),d=n(86509),u=n(62449),m=n(4285),p=n(72462),x=n(97538),f=n(44977),h=n(62559),g=(0,u.Z)((function(e){return(0,d.Z)((0,t.Z)({},p.gM))}));function v(e){var a=g();return(0,h.jsx)(r.Z,(0,t.Z)({InputProps:{classes:a}},e))}a.Z=(0,m.Z)((function(e){return(0,d.Z)((0,t.Z)((0,t.Z)((0,t.Z)({},p.YI),p.Hr),{},{textBoxContainer:{flexGrow:1,position:"relative"},overlayAction:{position:"absolute",right:5,top:6,"& svg":{maxWidth:15,maxHeight:15},"&.withLabel":{top:5}},inputLabel:(0,t.Z)((0,t.Z)({},p.YI.inputLabel),{},{fontWeight:"normal"})}))}))((function(e){var a=e.label,n=e.onChange,r=e.value,d=e.id,u=e.name,m=e.type,p=void 0===m?"text":m,g=e.autoComplete,Z=void 0===g?"off":g,b=e.disabled,j=void 0!==b&&b,C=e.multiline,N=void 0!==C&&C,y=e.tooltip,k=void 0===y?"":y,w=e.index,S=void 0===w?0:w,M=e.error,E=void 0===M?"":M,L=e.required,B=void 0!==L&&L,T=e.placeholder,I=void 0===T?"":T,D=e.min,P=e.max,F=e.overlayIcon,z=void 0===F?null:F,O=e.overlayObject,W=void 0===O?null:O,R=e.extraInputProps,A=void 0===R?{}:R,K=e.overlayAction,H=e.noLabelMinWidth,$=void 0!==H&&H,U=e.pattern,Y=void 0===U?"":U,_=e.autoFocus,q=void 0!==_&&_,G=e.classes,Q=e.className,X=void 0===Q?"":Q,J=(0,t.Z)({"data-index":S},A);return"number"===p&&D&&(J.min=D),"number"===p&&P&&(J.max=P),""!==Y&&(J.pattern=Y),(0,h.jsx)(o.Fragment,{children:(0,h.jsxs)(s.ZP,{container:!0,className:(0,f.Z)(""!==X?X:"",""!==E?G.errorInField:G.inputBoxContainer),children:[""!==a&&(0,h.jsxs)(i.Z,{htmlFor:d,className:$?G.noMinWidthLabel:G.inputLabel,children:[(0,h.jsxs)("span",{children:[a,B?"*":""]}),""!==k&&(0,h.jsx)("div",{className:G.tooltipContainer,children:(0,h.jsx)(l.Z,{title:k,placement:"top-start",children:(0,h.jsx)("div",{className:G.tooltip,children:(0,h.jsx)(x.Z,{})})})})]}),(0,h.jsxs)("div",{className:G.textBoxContainer,children:[(0,h.jsx)(v,{id:d,name:u,fullWidth:!0,value:r,autoFocus:q,disabled:j,onChange:n,type:p,multiline:N,autoComplete:Z,inputProps:J,error:""!==E,helperText:E,placeholder:I,className:G.inputRebase}),z&&(0,h.jsx)("div",{className:"".concat(G.overlayAction," ").concat(""!==a?"withLabel":""),children:(0,h.jsx)(c.Z,{onClick:K?function(){K()}:function(){return null},size:"small",disableFocusRipple:!1,disableRipple:!1,disableTouchRipple:!1,children:z})}),W&&(0,h.jsx)("div",{className:"".concat(G.overlayAction," ").concat(""!==a?"withLabel":""),children:W})]})]})})}))},76352:function(e,a,n){n.d(a,{Z:function(){return S}});var t,o=n(23430),r=n(18489),s=n(50390),i=n(34424),l=n(95467),c=n(97771),d=n(84402),u=n(78426),m=n(93085),p=n(86509),x=n(4285),f=n(72462),h=n(44149),g=n(38342),v=n.n(g),Z=n(92125),b=n(19538),j=n(21278),C=n(62559),N=function(){clearInterval(t)},y={displayErrorMessage:h.zb},k=(0,i.$j)((function(e){return{modalSnackMessage:e.system.modalSnackBar}}),y)((0,x.Z)((function(e){return(0,p.Z)({modalErrorContainer:{position:"absolute",marginTop:10,width:"80%",backgroundColor:"#fff",border:"#C72C48 1px solid",borderLeftWidth:12,borderRadius:3,zIndex:1e3,padding:"10px 15px",left:"50%",transform:"translateX(-50%)",opacity:0,transitionDuration:"0.2s"},modalErrorShow:{opacity:1},closeButton:{position:"absolute",right:5,fontSize:"small",border:0,backgroundColor:"#fff",cursor:"pointer"},errorTitle:{display:"flex",alignItems:"center"},errorLabel:{color:"#000",fontSize:18,fontWeight:500,marginLeft:5,marginRight:25},messageIcon:{color:"#C72C48",display:"flex","& svg":{width:32,height:32}},detailsButton:{color:"#9C9C9C",display:"flex",alignItems:"center",border:0,backgroundColor:"transparent",paddingLeft:5,fontSize:14,transformDuration:"0.3s",cursor:"pointer"},extraDetailsContainer:{fontStyle:"italic",color:"#9C9C9C",lineHeight:0,padding:"0 10px",transition:"all .2s ease-in-out",overflow:"hidden"},extraDetailsOpen:{lineHeight:1,padding:"3px 10px"},arrowElement:{marginLeft:-5},arrowOpen:{transform:"rotateZ(90deg)",transformDuration:"0.3s"}})}))((function(e){var a=e.classes,n=e.modalSnackMessage,r=e.displayErrorMessage,i=e.customStyle,l=(0,s.useState)(!1),c=(0,o.Z)(l,2),d=c[0],u=c[1],m=(0,s.useState)(!1),p=(0,o.Z)(m,2),x=p[0],f=p[1],h=(0,s.useCallback)((function(){f(!1)}),[]);(0,s.useEffect)((function(){x||(r({detailedError:"",errorMessage:""}),u(!1))}),[r,x]),(0,s.useEffect)((function(){""!==n.message&&"error"===n.type&&f(!0)}),[h,n.message,n.type]);var g=v()(n,"message",""),y=v()(n,"detailedErrorMsg","");return"error"!==n.type||""===g?null:(0,C.jsx)(s.Fragment,{children:(0,C.jsxs)("div",{className:"".concat(a.modalErrorContainer," ").concat(x?a.modalErrorShow:""),style:i,onMouseOver:N,onMouseLeave:function(){t=setInterval(h,1e4)},children:[(0,C.jsx)("button",{className:a.closeButton,onClick:h,children:(0,C.jsx)(j.Z,{})}),(0,C.jsxs)("div",{className:a.errorTitle,children:[(0,C.jsx)("span",{className:a.messageIcon,children:(0,C.jsx)(b.Z,{})}),(0,C.jsx)("span",{className:a.errorLabel,children:g})]}),""!==y&&(0,C.jsxs)(s.Fragment,{children:[(0,C.jsx)("div",{className:a.detailsContainerLink,children:(0,C.jsxs)("button",{className:a.detailsButton,onClick:function(){u(!d)},children:["Details",(0,C.jsx)(Z.Z,{className:"".concat(a.arrowElement," ").concat(d?a.arrowOpen:"")})]})}),(0,C.jsx)("div",{className:"".concat(a.extraDetailsContainer," ").concat(d?a.extraDetailsOpen:""),children:y})]})]})})}))),w=(0,i.$j)((function(e){return{modalSnackMessage:e.system.modalSnackBar}}),{setModalSnackMessage:h.MK}),S=(0,x.Z)((function(e){return(0,p.Z)((0,r.Z)((0,r.Z)({},f.Qw),{},{root:{"& .MuiPaper-root":{padding:"1rem 2rem 2rem 1rem"}},content:{padding:25,paddingBottom:0},customDialogSize:{width:"100%",maxWidth:765}},f.sN))}))(w((function(e){var a=e.onClose,n=e.modalOpen,t=e.title,i=e.children,p=e.classes,x=e.wideLimit,f=void 0===x||x,h=e.modalSnackMessage,g=e.noContentPadding,v=e.setModalSnackMessage,Z=e.titleIcon,b=void 0===Z?null:Z,N=(0,s.useState)(!1),y=(0,o.Z)(N,2),w=y[0],S=y[1];(0,s.useEffect)((function(){v("")}),[v]),(0,s.useEffect)((function(){if(h){if(""===h.message)return void S(!1);"error"!==h.type&&S(!0)}}),[h]);var M=f?{classes:{paper:p.customDialogSize}}:{maxWidth:"lg",fullWidth:!0},E="";return h&&(E=h.detailedErrorMsg,(""===h.detailedErrorMsg||h.detailedErrorMsg.length<5)&&(E=h.message)),(0,C.jsxs)(d.Z,(0,r.Z)((0,r.Z)({open:n,classes:p},M),{},{scroll:"paper",onClose:function(e,n){"backdropClick"!==n&&a()},className:p.root,children:[(0,C.jsxs)(u.Z,{className:p.title,children:[(0,C.jsxs)("div",{className:p.titleText,children:[b," ",t]}),(0,C.jsx)("div",{className:p.closeContainer,children:(0,C.jsx)(l.Z,{"aria-label":"close",className:p.closeButton,onClick:a,disableRipple:!0,size:"small",children:(0,C.jsx)(j.Z,{})})})]}),(0,C.jsx)(k,{}),(0,C.jsx)(c.Z,{open:w,className:p.snackBarModal,onClose:function(){S(!1),v("")},message:E,ContentProps:{className:"".concat(p.snackBar," ").concat(h&&"error"===h.type?p.errorSnackBar:"")},autoHideDuration:h&&"error"===h.type?1e4:5e3}),(0,C.jsx)(m.Z,{className:g?"":p.content,children:i})]}))})))}}]); -//# sourceMappingURL=1666.d4e2b942.chunk.js.map \ No newline at end of file diff --git a/portal-ui/build/static/js/1666.d4e2b942.chunk.js.map b/portal-ui/build/static/js/1666.d4e2b942.chunk.js.map deleted file mode 100644 index 610cd431a..000000000 --- a/portal-ui/build/static/js/1666.d4e2b942.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/1666.d4e2b942.chunk.js","mappings":"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","sources":["screens/Console/Buckets/BucketDetails/AddBucketTagModal.tsx","screens/Console/Common/FormComponents/InputBoxWrapper/InputBoxWrapper.tsx","screens/Console/Common/FormComponents/ModalError/ModalError.tsx","screens/Console/Common/ModalWrapper/ModalWrapper.tsx"],"sourcesContent":["// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport get from \"lodash/get\";\nimport { connect } from \"react-redux\";\nimport { Button, Grid } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n formFieldStyles,\n modalStyleUtils,\n spacingUtils,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport { setModalErrorSnackMessage } from \"../../../../actions\";\nimport { AppState } from \"../../../../store\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\nimport api from \"../../../../common/api\";\nimport { AddNewTagIcon } from \"../../../../icons\";\n\ninterface IBucketTagModal {\n modalOpen: boolean;\n currentTags: any;\n bucketName: string;\n onCloseAndUpdate: (refresh: boolean) => void;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...formFieldStyles,\n ...modalStyleUtils,\n ...spacingUtils,\n });\n\nconst AddBucketTagModal = ({\n modalOpen,\n currentTags,\n onCloseAndUpdate,\n bucketName,\n setModalErrorSnackMessage,\n classes,\n}: IBucketTagModal) => {\n const [newKey, setNewKey] = useState(\"\");\n const [newLabel, setNewLabel] = useState(\"\");\n const [isSending, setIsSending] = useState(false);\n\n const resetForm = () => {\n setNewLabel(\"\");\n setNewKey(\"\");\n };\n\n const addTagProcess = () => {\n setIsSending(true);\n const newTag: any = {};\n\n newTag[newKey] = newLabel;\n const newTagList = { ...currentTags, ...newTag };\n\n api\n .invoke(\"PUT\", `/api/v1/buckets/${bucketName}/tags`, {\n tags: newTagList,\n })\n .then((res: any) => {\n setIsSending(false);\n onCloseAndUpdate(true);\n })\n .catch((error: ErrorResponseHandler) => {\n setModalErrorSnackMessage(error);\n setIsSending(false);\n });\n };\n\n return (\n {\n onCloseAndUpdate(false);\n }}\n titleIcon={}\n >\n \n
\n Bucket: {bucketName}\n
\n \n {\n setNewKey(e.target.value);\n }}\n />\n \n \n {\n setNewLabel(e.target.value);\n }}\n />\n \n \n \n Clear\n \n \n Save\n \n \n
\n \n );\n};\n\nconst mapStateToProps = ({ system }: AppState) => ({\n distributedSetup: get(system, \"distributedSetup\", false),\n});\n\nconst mapDispatchToProps = {\n setModalErrorSnackMessage,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(AddBucketTagModal));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React from \"react\";\nimport {\n Grid,\n IconButton,\n InputLabel,\n TextField,\n TextFieldProps,\n Tooltip,\n} from \"@mui/material\";\nimport { OutlinedInputProps } from \"@mui/material/OutlinedInput\";\nimport { InputProps as StandardInputProps } from \"@mui/material/Input\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n fieldBasic,\n inputFieldStyles,\n tooltipHelper,\n} from \"../common/styleLibrary\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\nimport clsx from \"clsx\";\n\ninterface InputBoxProps {\n label: string;\n classes: any;\n onChange: (e: React.ChangeEvent) => void;\n value: string | boolean;\n id: string;\n name: string;\n disabled?: boolean;\n multiline?: boolean;\n type?: string;\n tooltip?: string;\n autoComplete?: string;\n index?: number;\n error?: string;\n required?: boolean;\n placeholder?: string;\n min?: string;\n max?: string;\n overlayIcon?: any;\n overlayAction?: () => void;\n overlayObject?: any;\n extraInputProps?: StandardInputProps[\"inputProps\"];\n noLabelMinWidth?: boolean;\n pattern?: string;\n autoFocus?: boolean;\n className?: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n textBoxContainer: {\n flexGrow: 1,\n position: \"relative\",\n },\n overlayAction: {\n position: \"absolute\",\n right: 5,\n top: 6,\n \"& svg\": {\n maxWidth: 15,\n maxHeight: 15,\n },\n \"&.withLabel\": {\n top: 5,\n },\n },\n inputLabel: {\n ...fieldBasic.inputLabel,\n fontWeight: \"normal\",\n },\n });\n\nconst inputStyles = makeStyles((theme: Theme) =>\n createStyles({\n ...inputFieldStyles,\n })\n);\n\nfunction InputField(props: TextFieldProps) {\n const classes = inputStyles();\n\n return (\n }\n {...props}\n />\n );\n}\n\nconst InputBoxWrapper = ({\n label,\n onChange,\n value,\n id,\n name,\n type = \"text\",\n autoComplete = \"off\",\n disabled = false,\n multiline = false,\n tooltip = \"\",\n index = 0,\n error = \"\",\n required = false,\n placeholder = \"\",\n min,\n max,\n overlayIcon = null,\n overlayObject = null,\n extraInputProps = {},\n overlayAction,\n noLabelMinWidth = false,\n pattern = \"\",\n autoFocus = false,\n classes,\n className = \"\",\n}: InputBoxProps) => {\n let inputProps: any = { \"data-index\": index, ...extraInputProps };\n\n if (type === \"number\" && min) {\n inputProps[\"min\"] = min;\n }\n\n if (type === \"number\" && max) {\n inputProps[\"max\"] = max;\n }\n\n if (pattern !== \"\") {\n inputProps[\"pattern\"] = pattern;\n }\n\n return (\n \n \n {label !== \"\" && (\n \n \n {label}\n {required ? \"*\" : \"\"}\n \n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n \n )}\n\n
\n \n {overlayIcon && (\n \n {\n overlayAction();\n }\n : () => null\n }\n size={\"small\"}\n disableFocusRipple={false}\n disableRipple={false}\n disableTouchRipple={false}\n >\n {overlayIcon}\n \n
\n )}\n {overlayObject && (\n \n {overlayObject}\n \n )}\n \n \n
\n );\n};\n\nexport default withStyles(styles)(InputBoxWrapper);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\n// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport get from \"lodash/get\";\nimport ArrowRightIcon from \"@mui/icons-material/ArrowRight\";\nimport ErrorOutlineIcon from \"@mui/icons-material/ErrorOutline\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { AppState } from \"../../../../../store\";\nimport {\n setErrorSnackMessage,\n setModalErrorSnackMessage,\n} from \"../../../../../actions\";\nimport { snackBarMessage } from \"../../../../../types\";\n\ninterface ImodalErrorProps {\n customStyle?: any;\n classes: any;\n modalSnackMessage: snackBarMessage;\n displayErrorMessage: typeof setErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n modalErrorContainer: {\n position: \"absolute\",\n marginTop: 10,\n width: \"80%\",\n backgroundColor: \"#fff\",\n border: \"#C72C48 1px solid\",\n borderLeftWidth: 12,\n borderRadius: 3,\n zIndex: 1000,\n padding: \"10px 15px\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n opacity: 0,\n transitionDuration: \"0.2s\",\n },\n modalErrorShow: {\n opacity: 1,\n },\n closeButton: {\n position: \"absolute\",\n right: 5,\n fontSize: \"small\",\n border: 0,\n backgroundColor: \"#fff\",\n cursor: \"pointer\",\n },\n errorTitle: {\n display: \"flex\",\n alignItems: \"center\",\n },\n errorLabel: {\n color: \"#000\",\n fontSize: 18,\n fontWeight: 500,\n marginLeft: 5,\n marginRight: 25,\n },\n messageIcon: {\n color: \"#C72C48\",\n display: \"flex\",\n \"& svg\": {\n width: 32,\n height: 32,\n },\n },\n detailsButton: {\n color: \"#9C9C9C\",\n display: \"flex\",\n alignItems: \"center\",\n border: 0,\n backgroundColor: \"transparent\",\n paddingLeft: 5,\n fontSize: 14,\n transformDuration: \"0.3s\",\n cursor: \"pointer\",\n },\n extraDetailsContainer: {\n fontStyle: \"italic\",\n color: \"#9C9C9C\",\n lineHeight: 0,\n padding: \"0 10px\",\n transition: \"all .2s ease-in-out\",\n overflow: \"hidden\",\n },\n extraDetailsOpen: {\n lineHeight: 1,\n padding: \"3px 10px\",\n },\n arrowElement: {\n marginLeft: -5,\n },\n arrowOpen: {\n transform: \"rotateZ(90deg)\",\n transformDuration: \"0.3s\",\n },\n });\n\nvar timerI: any;\n\nconst startHideTimer = (callbackFunction: () => void) => {\n timerI = setInterval(callbackFunction, 10000);\n};\n\nconst stopHideTimer = () => {\n clearInterval(timerI);\n};\n\nconst ModalError = ({\n classes,\n modalSnackMessage,\n displayErrorMessage,\n customStyle,\n}: ImodalErrorProps) => {\n const [detailsOpen, setDetailsOpen] = useState(false);\n const [displayErrorMsg, setDisplayErrorMsg] = useState(false);\n\n const closeErrorMessage = useCallback(() => {\n setDisplayErrorMsg(false);\n }, []);\n\n useEffect(() => {\n if (!displayErrorMsg) {\n displayErrorMessage({ detailedError: \"\", errorMessage: \"\" });\n setDetailsOpen(false);\n //clearInterval(timerI);\n }\n }, [displayErrorMessage, displayErrorMsg]);\n\n useEffect(() => {\n if (\n modalSnackMessage.message !== \"\" &&\n modalSnackMessage.type === \"error\"\n ) {\n //Error message received, we trigger the animation\n setDisplayErrorMsg(true);\n //startHideTimer(closeErrorMessage);\n }\n }, [closeErrorMessage, modalSnackMessage.message, modalSnackMessage.type]);\n\n const detailsToggle = () => {\n setDetailsOpen(!detailsOpen);\n };\n\n const message = get(modalSnackMessage, \"message\", \"\");\n const messageDetails = get(modalSnackMessage, \"detailedErrorMsg\", \"\");\n\n if (modalSnackMessage.type !== \"error\" || message === \"\") {\n return null;\n }\n\n return (\n \n startHideTimer(closeErrorMessage)}\n >\n \n
\n \n \n \n {message}\n
\n {messageDetails !== \"\" && (\n \n
\n \n
\n \n {messageDetails}\n \n
\n )}\n \n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n modalSnackMessage: state.system.modalSnackBar,\n});\n\nconst mapDispatchToProps = {\n displayErrorMessage: setModalErrorSnackMessage,\n};\n\nconst connector = connect(mapState, mapDispatchToProps);\n\nexport default connector(withStyles(styles)(ModalError));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport IconButton from \"@mui/material/IconButton\";\nimport Snackbar from \"@mui/material/Snackbar\";\nimport { Dialog, DialogContent, DialogTitle } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n deleteDialogStyles,\n snackBarCommon,\n} from \"../FormComponents/common/styleLibrary\";\nimport { AppState } from \"../../../../store\";\nimport { snackBarMessage } from \"../../../../types\";\nimport { setModalSnackMessage } from \"../../../../actions\";\nimport ModalError from \"../FormComponents/ModalError/ModalError\";\nimport CloseIcon from \"@mui/icons-material/Close\";\n\ninterface IModalProps {\n classes: any;\n onClose: () => void;\n modalOpen: boolean;\n title: string | React.ReactNode;\n children: any;\n wideLimit?: boolean;\n modalSnackMessage?: snackBarMessage;\n noContentPadding?: boolean;\n setModalSnackMessage: typeof setModalSnackMessage;\n titleIcon?: React.ReactNode;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...deleteDialogStyles,\n root: {\n \"& .MuiPaper-root\": {\n padding: \"1rem 2rem 2rem 1rem\",\n },\n },\n content: {\n padding: 25,\n paddingBottom: 0,\n },\n customDialogSize: {\n width: \"100%\",\n maxWidth: 765,\n },\n ...snackBarCommon,\n });\n\nconst ModalWrapper = ({\n onClose,\n modalOpen,\n title,\n children,\n classes,\n wideLimit = true,\n modalSnackMessage,\n noContentPadding,\n setModalSnackMessage,\n titleIcon = null,\n}: IModalProps) => {\n const [openSnackbar, setOpenSnackbar] = useState(false);\n\n useEffect(() => {\n setModalSnackMessage(\"\");\n }, [setModalSnackMessage]);\n\n useEffect(() => {\n if (modalSnackMessage) {\n if (modalSnackMessage.message === \"\") {\n setOpenSnackbar(false);\n return;\n }\n // Open SnackBar\n if (modalSnackMessage.type !== \"error\") {\n setOpenSnackbar(true);\n }\n }\n }, [modalSnackMessage]);\n\n const closeSnackBar = () => {\n setOpenSnackbar(false);\n setModalSnackMessage(\"\");\n };\n\n const customSize = wideLimit\n ? {\n classes: {\n paper: classes.customDialogSize,\n },\n }\n : { maxWidth: \"lg\" as const, fullWidth: true };\n\n let message = \"\";\n\n if (modalSnackMessage) {\n message = modalSnackMessage.detailedErrorMsg;\n if (\n modalSnackMessage.detailedErrorMsg === \"\" ||\n modalSnackMessage.detailedErrorMsg.length < 5\n ) {\n message = modalSnackMessage.message;\n }\n }\n\n return (\n {\n if (reason !== \"backdropClick\") {\n onClose(); // close on Esc but not on click outside\n }\n }}\n className={classes.root}\n >\n \n
\n {titleIcon} {title}\n
\n
\n \n \n \n
\n
\n\n \n {\n closeSnackBar();\n }}\n message={message}\n ContentProps={{\n className: `${classes.snackBar} ${\n modalSnackMessage && modalSnackMessage.type === \"error\"\n ? classes.errorSnackBar\n : \"\"\n }`,\n }}\n autoHideDuration={\n modalSnackMessage && modalSnackMessage.type === \"error\" ? 10000 : 5000\n }\n />\n \n {children}\n \n \n );\n};\n\nconst mapState = (state: AppState) => ({\n modalSnackMessage: state.system.modalSnackBar,\n});\n\nconst connector = connect(mapState, {\n setModalSnackMessage,\n});\n\nexport default withStyles(styles)(connector(ModalWrapper));\n"],"names":["mapDispatchToProps","setModalErrorSnackMessage","connector","connect","system","distributedSetup","get","withStyles","theme","createStyles","formFieldStyles","modalStyleUtils","spacingUtils","modalOpen","currentTags","onCloseAndUpdate","bucketName","classes","useState","newKey","setNewKey","newLabel","setNewLabel","isSending","setIsSending","title","onClose","titleIcon","container","className","spacerBottom","item","xs","formFieldRow","value","label","id","name","placeholder","onChange","e","target","modalButtonBar","type","variant","color","onClick","disabled","trim","newTag","newTagList","api","tags","then","res","catch","error","inputStyles","makeStyles","inputFieldStyles","InputField","props","InputProps","fieldBasic","tooltipHelper","textBoxContainer","flexGrow","position","overlayAction","right","top","maxWidth","maxHeight","inputLabel","fontWeight","autoComplete","multiline","tooltip","index","required","min","max","overlayIcon","overlayObject","extraInputProps","noLabelMinWidth","pattern","autoFocus","inputProps","clsx","errorInField","inputBoxContainer","htmlFor","noMinWidthLabel","tooltipContainer","placement","fullWidth","helperText","inputRebase","size","disableFocusRipple","disableRipple","disableTouchRipple","timerI","stopHideTimer","clearInterval","displayErrorMessage","state","modalSnackMessage","modalSnackBar","modalErrorContainer","marginTop","width","backgroundColor","border","borderLeftWidth","borderRadius","zIndex","padding","left","transform","opacity","transitionDuration","modalErrorShow","closeButton","fontSize","cursor","errorTitle","display","alignItems","errorLabel","marginLeft","marginRight","messageIcon","height","detailsButton","paddingLeft","transformDuration","extraDetailsContainer","fontStyle","lineHeight","transition","overflow","extraDetailsOpen","arrowElement","arrowOpen","customStyle","detailsOpen","setDetailsOpen","displayErrorMsg","setDisplayErrorMsg","closeErrorMessage","useCallback","useEffect","detailedError","errorMessage","message","messageDetails","Fragment","style","onMouseOver","onMouseLeave","setInterval","Close","ErrorOutline","detailsContainerLink","ArrowRight","setModalSnackMessage","deleteDialogStyles","root","content","paddingBottom","customDialogSize","snackBarCommon","children","wideLimit","noContentPadding","openSnackbar","setOpenSnackbar","customSize","paper","detailedErrorMsg","length","Dialog","open","scroll","event","reason","DialogTitle","titleText","closeContainer","IconButton","Snackbar","snackBarModal","ContentProps","snackBar","errorSnackBar","autoHideDuration","DialogContent"],"sourceRoot":""} \ No newline at end of file diff --git a/portal-ui/build/static/js/1711.669b8be7.chunk.js b/portal-ui/build/static/js/1711.669b8be7.chunk.js deleted file mode 100644 index 80297da8c..000000000 --- a/portal-ui/build/static/js/1711.669b8be7.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1711],{31711:function(e,n,a){a.r(n);var t=a(23430),o=a(18489),i=a(50390),r=a(34424),l=a(66946),s=a(81378),c=a(86509),d=a(4285),u=a(25594),m=a(28948),p=a(44149),h=a(72462),x=a(92440),f=a(27207),Z=a(66964),b=a(76352),g=a(67754),v=a(30324),j=a(98280),C=a(62559),k=(0,r.$j)(null,{setModalErrorSnackMessage:p.zb});n.default=(0,d.Z)((function(e){return(0,c.Z)((0,o.Z)((0,o.Z)({},h.DF),h.ID))}))(k((function(e){var n=e.classes,a=e.open,o=e.enabled,r=e.cfg,c=e.selectedBucket,d=e.closeModalAndRefresh,p=e.setModalErrorSnackMessage,h=(0,i.useState)(!1),k=(0,t.Z)(h,2),N=k[0],y=k[1],S=(0,i.useState)(!1),w=(0,t.Z)(S,2),L=w[0],F=w[1],M=(0,i.useState)("hard"),P=(0,t.Z)(M,2),E=P[0],I=P[1],B=(0,i.useState)("1"),O=(0,t.Z)(B,2),R=O[0],q=O[1],D=(0,i.useState)("TiB"),z=(0,t.Z)(D,2),W=z[0],T=z[1];(0,i.useEffect)((function(){if(o&&(F(!0),r)){I(r.type),q("".concat(r.quota)),T("B");for(var e="B",n=r.quota,a=0;a1?L[1]:"OFF"}),(0,f.jsx)(Z,{checked:b,onChange:o,color:"primary",name:s,inputProps:{"aria-label":"primary checkbox"},disabled:v,disableRipple:!0,disableFocusRipple:!0,disableTouchRipple:!0,value:r}),!C&&(0,f.jsx)("span",{className:(0,x.Z)(w.indicatorLabel,(0,t.Z)({},w.indicatorLabelOn,b)),children:L?L[0]:"ON"})]});return C?F:(0,f.jsx)("div",{className:w.divContainer,children:(0,f.jsxs)(m.ZP,{container:!0,alignItems:"center",children:[(0,f.jsx)(m.ZP,{item:!0,xs:!0,children:(0,f.jsxs)(m.ZP,{container:!0,children:[(0,f.jsx)(m.ZP,{item:!0,xs:12,sm:4,md:3,children:""!==a&&(0,f.jsxs)(c.Z,{htmlFor:l,className:w.inputLabel,children:[(0,f.jsx)("span",{children:a}),""!==N&&(0,f.jsx)("div",{className:w.tooltipContainer,children:(0,f.jsx)(d.Z,{title:N,placement:"top-start",children:(0,f.jsx)("div",{className:w.tooltip,children:(0,f.jsx)(h.Z,{})})})})]})}),(0,f.jsx)(m.ZP,{item:!0,xs:12,sm:!0,textAlign:"left",children:""!==S&&(0,f.jsx)(u.Z,{component:"p",className:w.fieldDescription,children:S})})]})}),(0,f.jsx)(m.ZP,{item:!0,xs:12,sm:2,textAlign:"right",className:w.switchContainer,children:F})]})})}))},66964:function(e,n,a){var t=a(18489),o=a(50390),i=a(12066),r=a(25594),l=a(36554),s=a(94187),c=a(95467),d=a(86509),u=a(62449),m=a(4285),p=a(72462),h=a(97538),x=a(44977),f=a(62559),Z=(0,u.Z)((function(e){return(0,d.Z)((0,t.Z)({},p.gM))}));function b(e){var n=Z();return(0,f.jsx)(i.Z,(0,t.Z)({InputProps:{classes:n}},e))}n.Z=(0,m.Z)((function(e){return(0,d.Z)((0,t.Z)((0,t.Z)((0,t.Z)({},p.YI),p.Hr),{},{textBoxContainer:{flexGrow:1,position:"relative"},overlayAction:{position:"absolute",right:5,top:6,"& svg":{maxWidth:15,maxHeight:15},"&.withLabel":{top:5}},inputLabel:(0,t.Z)((0,t.Z)({},p.YI.inputLabel),{},{fontWeight:"normal"})}))}))((function(e){var n=e.label,a=e.onChange,i=e.value,d=e.id,u=e.name,m=e.type,p=void 0===m?"text":m,Z=e.autoComplete,g=void 0===Z?"off":Z,v=e.disabled,j=void 0!==v&&v,C=e.multiline,k=void 0!==C&&C,N=e.tooltip,y=void 0===N?"":N,S=e.index,w=void 0===S?0:S,L=e.error,F=void 0===L?"":L,M=e.required,P=void 0!==M&&M,E=e.placeholder,I=void 0===E?"":E,B=e.min,O=e.max,R=e.overlayIcon,q=void 0===R?null:R,D=e.overlayObject,z=void 0===D?null:D,W=e.extraInputProps,T=void 0===W?{}:W,_=e.overlayAction,A=e.noLabelMinWidth,H=void 0!==A&&A,$=e.pattern,Y=void 0===$?"":$,Q=e.autoFocus,U=void 0!==Q&&Q,V=e.classes,K=e.className,X=void 0===K?"":K,G=(0,t.Z)({"data-index":w},T);return"number"===p&&B&&(G.min=B),"number"===p&&O&&(G.max=O),""!==Y&&(G.pattern=Y),(0,f.jsx)(o.Fragment,{children:(0,f.jsxs)(r.ZP,{container:!0,className:(0,x.Z)(""!==X?X:"",""!==F?V.errorInField:V.inputBoxContainer),children:[""!==n&&(0,f.jsxs)(l.Z,{htmlFor:d,className:H?V.noMinWidthLabel:V.inputLabel,children:[(0,f.jsxs)("span",{children:[n,P?"*":""]}),""!==y&&(0,f.jsx)("div",{className:V.tooltipContainer,children:(0,f.jsx)(s.Z,{title:y,placement:"top-start",children:(0,f.jsx)("div",{className:V.tooltip,children:(0,f.jsx)(h.Z,{})})})})]}),(0,f.jsxs)("div",{className:V.textBoxContainer,children:[(0,f.jsx)(b,{id:d,name:u,fullWidth:!0,value:i,autoFocus:U,disabled:j,onChange:a,type:p,multiline:k,autoComplete:g,inputProps:G,error:""!==F,helperText:F,placeholder:I,className:V.inputRebase}),q&&(0,f.jsx)("div",{className:"".concat(V.overlayAction," ").concat(""!==n?"withLabel":""),children:(0,f.jsx)(c.Z,{onClick:_?function(){_()}:function(){return null},size:"small",disableFocusRipple:!1,disableRipple:!1,disableTouchRipple:!1,children:q})}),z&&(0,f.jsx)("div",{className:"".concat(V.overlayAction," ").concat(""!==n?"withLabel":""),children:z})]})]})})}))},27207:function(e,n,a){var t=a(36222),o=a(18489),i=(a(50390),a(44977)),r=a(25594),l=a(82420),s=a(66695),c=a(98893),d=a(36554),u=a(94187),m=a(86509),p=a(4285),h=a(62449),x=a(72462),f=a(97538),Z=a(62559),b=(0,h.Z)((0,o.Z)({root:{"&:hover":{backgroundColor:"transparent"}}},x.FU)),g=function(e){var n=b();return(0,Z.jsx)(c.Z,(0,o.Z)({className:n.root,disableRipple:!0,color:"default",checkedIcon:(0,Z.jsx)("span",{className:n.radioSelectedIcon}),icon:(0,Z.jsx)("span",{className:n.radioUnselectedIcon})},e))};n.Z=(0,p.Z)((function(e){return(0,m.Z)((0,o.Z)((0,o.Z)((0,o.Z)({},x.YI),x.Hr),{},{optionLabel:{"&.Mui-disabled":{"& .MuiFormControlLabel-label":{color:"#9c9c9c"}},"&:last-child":{marginRight:0},"& .MuiFormControlLabel-label":{fontSize:12,color:"#07193E"}},checkedOption:{"& .MuiFormControlLabel-label":{fontSize:12,color:"#07193E",fontWeight:700}}}))}))((function(e){var n=e.selectorOptions,a=void 0===n?[]:n,o=e.currentSelection,c=e.label,m=e.id,p=e.name,h=e.onChange,x=e.tooltip,b=void 0===x?"":x,v=e.disableOptions,j=void 0!==v&&v,C=e.classes,k=e.displayInColumn,N=void 0!==k&&k;return(0,Z.jsxs)(r.ZP,{container:!0,alignItems:"center",children:[(0,Z.jsx)(r.ZP,{item:!0,xs:!0,children:(0,Z.jsxs)(d.Z,{htmlFor:m,className:C.inputLabel,children:[(0,Z.jsx)("span",{children:c}),""!==b&&(0,Z.jsx)("div",{className:C.tooltipContainer,children:(0,Z.jsx)(u.Z,{title:b,placement:"top-start",children:(0,Z.jsx)("div",{children:(0,Z.jsx)(f.Z,{})})})})]})}),(0,Z.jsx)(r.ZP,{item:!0,xs:!0,className:C.radioOptionsLayout,children:(0,Z.jsx)(l.Z,{"aria-label":m,id:m,name:p,value:o,onChange:h,row:!N,style:{display:"block",textAlign:"right"},children:a.map((function(e){return(0,Z.jsx)(s.Z,{value:e.value,control:(0,Z.jsx)(g,{}),label:e.label,disabled:j,className:(0,i.Z)(C.optionLabel,(0,t.Z)({},C.checkedOption,e.value===o))},"rd-".concat(p,"-").concat(e.value))}))})})]})}))},67754:function(e,n,a){var t=a(18489),o=a(50390),i=a(25594),r=a(46413),l=a(36554),s=a(94187),c=a(47554),d=a(43965),u=a(31680),m=a(86509),p=a(4285),h=a(72462),x=a(97538),f=a(62559),Z=(0,p.Z)((function(e){return(0,m.Z)({root:{height:38,lineHeight:1,"label + &":{marginTop:e.spacing(3)}},input:{height:38,position:"relative",color:"#07193E",fontSize:13,fontWeight:600,padding:"8px 20px 10px 10px",border:"#e5e5e5 1px solid",borderRadius:4,display:"flex",alignItems:"center","&:hover":{borderColor:"#393939"},"&:focus":{backgroundColor:"#fff"}}})}))(r.ZP);n.Z=(0,p.Z)((function(e){return(0,m.Z)((0,t.Z)((0,t.Z)((0,t.Z)({},h.YI),h.Hr),{},{inputLabel:(0,t.Z)((0,t.Z)({},h.YI.inputLabel),{},{"& span":{fontWeight:"normal"}}),fieldContainer:{display:"flex","@media (max-width: 600px)":{flexFlow:"column"}}}))}))((function(e){var n=e.classes,a=e.id,t=e.name,r=e.onChange,m=e.options,p=e.label,h=e.tooltip,b=void 0===h?"":h,g=e.value,v=e.disabled,j=void 0!==v&&v;return(0,f.jsx)(o.Fragment,{children:(0,f.jsxs)(i.ZP,{item:!0,xs:12,className:n.fieldContainer,children:[""!==p&&(0,f.jsxs)(l.Z,{htmlFor:a,className:n.inputLabel,children:[(0,f.jsx)("span",{children:p}),""!==b&&(0,f.jsx)("div",{className:n.tooltipContainer,children:(0,f.jsx)(s.Z,{title:b,placement:"top-start",children:(0,f.jsx)("div",{className:n.tooltip,children:(0,f.jsx)(x.Z,{})})})})]}),(0,f.jsx)(c.Z,{fullWidth:!0,children:(0,f.jsx)(d.Z,{id:a,name:t,value:g,onChange:r,input:(0,f.jsx)(Z,{}),disabled:j,children:m.map((function(e){return(0,f.jsx)(u.Z,{value:e.value,children:e.label},"select-".concat(t,"-").concat(e.label))}))})})]})})}))},76352:function(e,n,a){a.d(n,{Z:function(){return w}});var t,o=a(23430),i=a(18489),r=a(50390),l=a(34424),s=a(95467),c=a(97771),d=a(84402),u=a(78426),m=a(93085),p=a(86509),h=a(4285),x=a(72462),f=a(44149),Z=a(38342),b=a.n(Z),g=a(92125),v=a(19538),j=a(21278),C=a(62559),k=function(){clearInterval(t)},N={displayErrorMessage:f.zb},y=(0,l.$j)((function(e){return{modalSnackMessage:e.system.modalSnackBar}}),N)((0,h.Z)((function(e){return(0,p.Z)({modalErrorContainer:{position:"absolute",marginTop:10,width:"80%",backgroundColor:"#fff",border:"#C72C48 1px solid",borderLeftWidth:12,borderRadius:3,zIndex:1e3,padding:"10px 15px",left:"50%",transform:"translateX(-50%)",opacity:0,transitionDuration:"0.2s"},modalErrorShow:{opacity:1},closeButton:{position:"absolute",right:5,fontSize:"small",border:0,backgroundColor:"#fff",cursor:"pointer"},errorTitle:{display:"flex",alignItems:"center"},errorLabel:{color:"#000",fontSize:18,fontWeight:500,marginLeft:5,marginRight:25},messageIcon:{color:"#C72C48",display:"flex","& svg":{width:32,height:32}},detailsButton:{color:"#9C9C9C",display:"flex",alignItems:"center",border:0,backgroundColor:"transparent",paddingLeft:5,fontSize:14,transformDuration:"0.3s",cursor:"pointer"},extraDetailsContainer:{fontStyle:"italic",color:"#9C9C9C",lineHeight:0,padding:"0 10px",transition:"all .2s ease-in-out",overflow:"hidden"},extraDetailsOpen:{lineHeight:1,padding:"3px 10px"},arrowElement:{marginLeft:-5},arrowOpen:{transform:"rotateZ(90deg)",transformDuration:"0.3s"}})}))((function(e){var n=e.classes,a=e.modalSnackMessage,i=e.displayErrorMessage,l=e.customStyle,s=(0,r.useState)(!1),c=(0,o.Z)(s,2),d=c[0],u=c[1],m=(0,r.useState)(!1),p=(0,o.Z)(m,2),h=p[0],x=p[1],f=(0,r.useCallback)((function(){x(!1)}),[]);(0,r.useEffect)((function(){h||(i({detailedError:"",errorMessage:""}),u(!1))}),[i,h]),(0,r.useEffect)((function(){""!==a.message&&"error"===a.type&&x(!0)}),[f,a.message,a.type]);var Z=b()(a,"message",""),N=b()(a,"detailedErrorMsg","");return"error"!==a.type||""===Z?null:(0,C.jsx)(r.Fragment,{children:(0,C.jsxs)("div",{className:"".concat(n.modalErrorContainer," ").concat(h?n.modalErrorShow:""),style:l,onMouseOver:k,onMouseLeave:function(){t=setInterval(f,1e4)},children:[(0,C.jsx)("button",{className:n.closeButton,onClick:f,children:(0,C.jsx)(j.Z,{})}),(0,C.jsxs)("div",{className:n.errorTitle,children:[(0,C.jsx)("span",{className:n.messageIcon,children:(0,C.jsx)(v.Z,{})}),(0,C.jsx)("span",{className:n.errorLabel,children:Z})]}),""!==N&&(0,C.jsxs)(r.Fragment,{children:[(0,C.jsx)("div",{className:n.detailsContainerLink,children:(0,C.jsxs)("button",{className:n.detailsButton,onClick:function(){u(!d)},children:["Details",(0,C.jsx)(g.Z,{className:"".concat(n.arrowElement," ").concat(d?n.arrowOpen:"")})]})}),(0,C.jsx)("div",{className:"".concat(n.extraDetailsContainer," ").concat(d?n.extraDetailsOpen:""),children:N})]})]})})}))),S=(0,l.$j)((function(e){return{modalSnackMessage:e.system.modalSnackBar}}),{setModalSnackMessage:f.MK}),w=(0,h.Z)((function(e){return(0,p.Z)((0,i.Z)((0,i.Z)({},x.Qw),{},{root:{"& .MuiPaper-root":{padding:"1rem 2rem 2rem 1rem"}},content:{padding:25,paddingBottom:0},customDialogSize:{width:"100%",maxWidth:765}},x.sN))}))(S((function(e){var n=e.onClose,a=e.modalOpen,t=e.title,l=e.children,p=e.classes,h=e.wideLimit,x=void 0===h||h,f=e.modalSnackMessage,Z=e.noContentPadding,b=e.setModalSnackMessage,g=e.titleIcon,v=void 0===g?null:g,k=(0,r.useState)(!1),N=(0,o.Z)(k,2),S=N[0],w=N[1];(0,r.useEffect)((function(){b("")}),[b]),(0,r.useEffect)((function(){if(f){if(""===f.message)return void w(!1);"error"!==f.type&&w(!0)}}),[f]);var L=x?{classes:{paper:p.customDialogSize}}:{maxWidth:"lg",fullWidth:!0},F="";return f&&(F=f.detailedErrorMsg,(""===f.detailedErrorMsg||f.detailedErrorMsg.length<5)&&(F=f.message)),(0,C.jsxs)(d.Z,(0,i.Z)((0,i.Z)({open:a,classes:p},L),{},{scroll:"paper",onClose:function(e,a){"backdropClick"!==a&&n()},className:p.root,children:[(0,C.jsxs)(u.Z,{className:p.title,children:[(0,C.jsxs)("div",{className:p.titleText,children:[v," ",t]}),(0,C.jsx)("div",{className:p.closeContainer,children:(0,C.jsx)(s.Z,{"aria-label":"close",className:p.closeButton,onClick:n,disableRipple:!0,size:"small",children:(0,C.jsx)(j.Z,{})})})]}),(0,C.jsx)(y,{}),(0,C.jsx)(c.Z,{open:S,className:p.snackBarModal,onClose:function(){w(!1),b("")},message:F,ContentProps:{className:"".concat(p.snackBar," ").concat(f&&"error"===f.type?p.errorSnackBar:"")},autoHideDuration:f&&"error"===f.type?1e4:5e3}),(0,C.jsx)(m.Z,{className:Z?"":p.content,children:l})]}))})))}}]); -//# sourceMappingURL=1711.669b8be7.chunk.js.map \ No newline at end of file diff --git a/portal-ui/build/static/js/1711.669b8be7.chunk.js.map b/portal-ui/build/static/js/1711.669b8be7.chunk.js.map deleted file mode 100644 index e97d42f41..000000000 --- a/portal-ui/build/static/js/1711.669b8be7.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/1711.669b8be7.chunk.js","mappings":"mVAsOMA,GAAYC,EAAAA,EAAAA,IAAQ,KAAM,CAC9BC,0BAAAA,EAAAA,KAGF,WAAeC,EAAAA,EAAAA,IAnMA,SAACC,GAAD,OACbC,EAAAA,EAAAA,IAAa,kBACRC,EAAAA,IACAC,EAAAA,OAgMP,CAAkCP,GAnLd,SAAC,GAQK,IAPxBQ,EAOuB,EAPvBA,QACAC,EAMuB,EANvBA,KACAC,EAKuB,EALvBA,QACAC,EAIuB,EAJvBA,IACAC,EAGuB,EAHvBA,eACAC,EAEuB,EAFvBA,qBACAX,EACuB,EADvBA,0BAEA,GAA8BY,EAAAA,EAAAA,WAAkB,GAAhD,eAAOC,EAAP,KAAgBC,EAAhB,KACA,GAAwCF,EAAAA,EAAAA,WAAkB,GAA1D,eAAOG,EAAP,KAAqBC,EAArB,KACA,GAAkCJ,EAAAA,EAAAA,UAAiB,QAAnD,eAAOK,EAAP,KAAkBC,EAAlB,KACA,GAAkCN,EAAAA,EAAAA,UAAiB,KAAnD,eAAOO,EAAP,KAAkBC,EAAlB,KACA,GAAkCR,EAAAA,EAAAA,UAAiB,OAAnD,eAAOS,EAAP,KAAkBC,EAAlB,MAEAC,EAAAA,EAAAA,YAAU,WACR,GAAIf,IACFQ,GAAgB,GACZP,GAAK,CACPS,EAAaT,EAAIe,MACjBJ,EAAa,GAAD,OAAIX,EAAIgB,QACpBH,EAAa,KAKb,IAHA,IAAII,EAAU,IACVC,EAAWlB,EAAIgB,MAEVG,EAAI,EAAGA,EAAIC,EAAAA,GAAAA,QACdpB,EAAIgB,MAAQK,KAAKC,IAAI,KAAMH,KAAO,EADNA,IAE9BD,EAAWlB,EAAIgB,MAAQK,KAAKC,IAAI,KAAMH,GACtCF,EAAUG,EAAAA,GAAMD,GAKpBR,EAAa,GAAD,OAAIO,IAChBL,EAAaI,MAGhB,CAAClB,EAASC,IAyBb,OACE,SAAC,IAAD,CACEuB,UAAWzB,EACX0B,QAAS,WACPtB,KAEFuB,MAAM,sBACNC,WAAW,SAAC,KAAD,IANb,UAQE,iBACEC,YAAU,EACVC,aAAa,MACbC,SAAU,SAACC,IAnCc,SAACC,GAE9B,GADAA,EAAMC,kBACF5B,EAAJ,CAGA,IAAI6B,EAAM,CACRlC,QAASO,EACT4B,OAAQC,UAASC,EAAAA,EAAAA,IAAS1B,EAAWE,GAAW,IAChDyB,WAAY7B,GAGd8B,EAAAA,EAAAA,OACU,MADV,0BACoCrC,EADpC,UAC4DgC,GACzDM,MAAK,WACJlC,GAAW,GACXH,OAEDsC,OAAM,SAACC,GACNpC,GAAW,GACXd,EAA0BkD,OAiBxBC,CAAuBZ,IAJ3B,UAOE,UAAC,KAAD,CAAMa,WAAS,EAAf,WACE,UAAC,KAAD,CAAMC,MAAI,EAACC,GAAI,GAAIC,UAAWjD,EAAQkD,eAAtC,WACE,SAAC,KAAD,CAAMH,MAAI,EAACC,GAAI,GAAIC,UAAWjD,EAAQmD,aAAtC,UACE,SAAC,IAAD,CACEC,MAAM,eACNC,GAAG,eACHC,KAAK,eACLC,QAAS9C,EACT+C,SAAU,SAACtB,GACTxB,EAAgBwB,EAAMuB,OAAOF,UAE/BG,MAAO,YAGVjD,IACC,UAAC,WAAD,YACE,SAAC,KAAD,CAAMsC,MAAI,EAACC,GAAI,GAAIC,UAAWjD,EAAQmD,aAAtC,UACE,SAAC,IAAD,CACEQ,iBAAkBhD,EAClB0C,GAAG,aACHC,KAAK,aACLI,MAAM,aACNF,SAAU,SAACvB,GACTrB,EAAaqB,EAAEwB,OAAOL,QAExBQ,gBAAiB,CAAC,CAAER,MAAO,OAAQM,MAAO,cAG9C,SAAC,KAAD,CAAMX,MAAI,EAACC,GAAI,GAAIC,UAAWjD,EAAQmD,aAAtC,UACE,UAAC,KAAD,CAAML,WAAS,EAAf,WACE,SAAC,KAAD,CAAMC,MAAI,EAACC,GAAI,GAAf,UACE,SAAC,IAAD,CACE9B,KAAK,SACLmC,GAAG,aACHC,KAAK,aACLE,SAAU,SAACvB,GACTnB,EAAamB,EAAEwB,OAAOL,QAExBM,MAAM,QACNN,MAAOvC,EACPgD,UAAQ,EACRC,IAAI,SAGR,SAAC,KAAD,CAAMf,MAAI,EAACC,GAAI,EAAf,UACE,gBAAKe,MAAO,CAAEC,MAAO,KAArB,UACE,SAAC,IAAD,CACEN,MAAM,GACNL,GAAG,aACHC,KAAK,aACLF,MAAOrC,EACPyC,SAAU,SAACvB,GACTjB,EAAaiB,EAAEwB,OAAOL,QAExBa,SAASC,EAAAA,EAAAA,wBASzB,UAAC,KAAD,CAAMnB,MAAI,EAACC,GAAI,GAAIC,UAAWjD,EAAQmE,eAAtC,WACE,SAAC,IAAD,CACEjD,KAAK,SACLkD,QAAQ,WACRC,MAAM,UACNC,SAAU/D,EACVgE,QAAS,WACPlE,KANJ,qBAYA,SAAC,IAAD,CACEa,KAAK,SACLkD,QAAQ,YACRC,MAAM,UACNC,SAAU/D,EAJZ,qBASDA,IACC,SAAC,KAAD,CAAMwC,MAAI,EAACC,GAAI,GAAf,UACE,SAAC,IAAD,kB,mLC1JRwB,GAAe7E,EAAAA,EAAAA,IAAW,SAACC,GAAD,MAAY,CAC1C6E,KAAM,CACJT,MAAO,GACPU,OAAQ,GACRC,QAAS,EACTC,OAAQ,GAEVC,WAAY,CACVF,QAAS,EACT,YAAa,CACXG,UAAW,mBACXT,MAAOzE,EAAMmF,QAAQC,OAAOC,MAC5B,aAAc,CACZC,gBAAiB,UACjBC,UAAW,oCACXC,QAAS,EACTC,OAAQ,SAGZ,wBAAyB,CACvBhB,MAAO,UACPgB,OAAQ,mBAGZC,MAAO,CACLtB,MAAO,GACPU,OAAQ,GACRQ,gBAAiB,UACjBG,OAAQ,oBACRE,WAAY,GAEdC,MAAO,CACLC,aAAc,GACdP,gBAAiB,UACjBC,UAAW,oCACXC,QAAS,EACTM,WAAY9F,EAAM+F,YAAYC,OAAO,CAAC,mBAAoB,YAE5DrC,QAAS,GACTsC,aAAc,GACdC,gBAAiB,CACfC,QAAS,OACTC,WAAY,SACZC,eAAgB,eA3CCtG,CA6CjBuG,EAAAA,GAsGJ,KAAevG,EAAAA,EAAAA,IA5KA,SAACC,GAAD,OACbC,EAAAA,EAAAA,IAAa,gBACXsG,aAAc,CACZC,aAAc,IAEhBC,iBAAkB,CAChBC,WAAY,OACZjC,MAAO,sBAETkC,eAAgB,CACdC,SAAU,GACVnC,MAAO,UACPO,OAAQ,gBAEV6B,iBAAkB,CAChBC,UAAW,EACXrC,MAAO,WAETsC,QAAS,CACPH,SAAU,KAETI,EAAAA,IACAC,EAAAA,OAsJP,EApG0B,SAAC,GAaP,IAAD,IAZjBnD,MAAAA,OAYiB,MAZT,GAYS,EAXjBF,EAWiB,EAXjBA,SACAJ,EAUiB,EAVjBA,MACAC,EASiB,EATjBA,GACAC,EAQiB,EARjBA,KAQiB,IAPjBC,QAAAA,OAOiB,aANjBe,SAAAA,OAMiB,aALjBwC,WAAAA,OAKiB,aAJjBH,QAAAA,OAIiB,MAJP,GAIO,MAHjBI,YAAAA,OAGiB,MAHH,GAGG,EAFjB/G,EAEiB,EAFjBA,QACAgH,EACiB,EADjBA,gBAEMC,GACJ,UAAC,WAAD,YACIH,IACA,iBACE7D,WAAWiE,EAAAA,EAAAA,GAAKlH,EAAQuG,gBAAT,UACZvG,EAAQqG,kBAAoB9C,IAFjC,SAKGyD,GAAmBA,EAAgBG,OAAS,EACzCH,EAAgB,GAChB,SAGR,SAACxC,EAAD,CACEjB,QAASA,EACTC,SAAUA,EACVa,MAAM,UACNf,KAAMA,EACN8D,WAAY,CAAE,aAAc,oBAC5B9C,SAAUA,EACV+C,eAAa,EACbC,oBAAkB,EAClBC,oBAAkB,EAClBnE,MAAOA,KAEP0D,IACA,iBACE7D,WAAWiE,EAAAA,EAAAA,GAAKlH,EAAQuG,gBAAT,UACZvG,EAAQqG,iBAAmB9C,IAFhC,SAKGyD,EAAkBA,EAAgB,GAAK,UAMhD,OAAIF,EACKG,GAIP,gBAAKhE,UAAWjD,EAAQmG,aAAxB,UACE,UAAC,KAAD,CAAMrD,WAAS,EAACkD,WAAY,SAA5B,WACE,SAAC,KAAD,CAAMjD,MAAI,EAACC,IAAE,EAAb,UACE,UAAC,KAAD,CAAMF,WAAS,EAAf,WACE,SAAC,KAAD,CAAMC,MAAI,EAACC,GAAI,GAAIwE,GAAI,EAAGC,GAAI,EAA9B,SACa,KAAV/D,IACC,UAAC,IAAD,CAAYgE,QAASrE,EAAIJ,UAAWjD,EAAQ2H,WAA5C,WACE,0BAAOjE,IACM,KAAZiD,IACC,gBAAK1D,UAAWjD,EAAQ4H,iBAAxB,UACE,SAAC,IAAD,CAAShG,MAAO+E,EAASkB,UAAU,YAAnC,UACE,gBAAK5E,UAAWjD,EAAQ2G,QAAxB,UACE,SAAC,IAAD,gBAQd,SAAC,KAAD,CAAM5D,MAAI,EAACC,GAAI,GAAIwE,IAAE,EAACM,UAAW,OAAjC,SACmB,KAAhBf,IACC,SAAC,IAAD,CAAYgB,UAAU,IAAI9E,UAAWjD,EAAQyG,iBAA7C,SACGM,YAOX,SAAC,KAAD,CACEhE,MAAI,EACJC,GAAI,GACJwE,GAAI,EACJM,UAAW,QACX7E,UAAWjD,EAAQ8F,gBALrB,SAOGmB,a,mLCnHLe,GAAcC,EAAAA,EAAAA,IAAW,SAACrI,GAAD,OAC7BC,EAAAA,EAAAA,IAAa,UACRqI,EAAAA,QAIP,SAASC,EAAWC,GAClB,IAAMpI,EAAUgI,IAEhB,OACE,SAAC,KAAD,QACEK,WAAY,CAAErI,QAAAA,IACVoI,IAsIV,KAAezI,EAAAA,EAAAA,IA5KA,SAACC,GAAD,OACbC,EAAAA,EAAAA,IAAa,0BACRgH,EAAAA,IACAyB,EAAAA,IAFO,IAGVC,iBAAkB,CAChBC,SAAU,EACVC,SAAU,YAEZC,cAAe,CACbD,SAAU,WACVE,MAAO,EACPC,IAAK,EACL,QAAS,CACPC,SAAU,GACVC,UAAW,IAEb,cAAe,CACbF,IAAK,IAGTjB,YAAW,kBACNd,EAAAA,GAAAA,YADK,IAERP,WAAY,gBAsJlB,EAjIwB,SAAC,GA0BH,IAzBpB5C,EAyBmB,EAzBnBA,MACAF,EAwBmB,EAxBnBA,SACAJ,EAuBmB,EAvBnBA,MACAC,EAsBmB,EAtBnBA,GACAC,EAqBmB,EArBnBA,KAqBmB,IApBnBpC,KAAAA,OAoBmB,MApBZ,OAoBY,MAnBnBa,aAAAA,OAmBmB,MAnBJ,MAmBI,MAlBnBuC,SAAAA,OAkBmB,aAjBnByE,UAAAA,OAiBmB,aAhBnBpC,QAAAA,OAgBmB,MAhBT,GAgBS,MAfnBqC,MAAAA,OAemB,MAfX,EAeW,MAdnBC,MAAAA,OAcmB,MAdX,GAcW,MAbnBpF,SAAAA,OAamB,aAZnBqF,YAAAA,OAYmB,MAZL,GAYK,EAXnBpF,EAWmB,EAXnBA,IACAqF,EAUmB,EAVnBA,IAUmB,IATnBC,YAAAA,OASmB,MATL,KASK,MARnBC,cAAAA,OAQmB,MARH,KAQG,MAPnBC,gBAAAA,OAOmB,MAPD,GAOC,EANnBZ,EAMmB,EANnBA,cAMmB,IALnBa,gBAAAA,OAKmB,aAJnBC,QAAAA,OAImB,MAJT,GAIS,MAHnBC,UAAAA,OAGmB,SAFnBzJ,EAEmB,EAFnBA,QAEmB,IADnBiD,UAAAA,OACmB,MADP,GACO,EACfmE,GAAe,QAAK,aAAc4B,GAAUM,GAchD,MAZa,WAATpI,GAAqB4C,IACvBsD,EAAU,IAAUtD,GAGT,WAAT5C,GAAqBiI,IACvB/B,EAAU,IAAU+B,GAGN,KAAZK,IACFpC,EAAU,QAAcoC,IAIxB,SAAC,WAAD,WACE,UAAC,KAAD,CACE1G,WAAS,EACTG,WAAWiE,EAAAA,EAAAA,GACK,KAAdjE,EAAmBA,EAAY,GACrB,KAAVgG,EAAejJ,EAAQ0J,aAAe1J,EAAQ2J,mBAJlD,UAOa,KAAVjG,IACC,UAAC,IAAD,CACEgE,QAASrE,EACTJ,UACEsG,EAAkBvJ,EAAQ4J,gBAAkB5J,EAAQ2H,WAHxD,WAME,4BACGjE,EACAG,EAAW,IAAM,MAEP,KAAZ8C,IACC,gBAAK1D,UAAWjD,EAAQ4H,iBAAxB,UACE,SAAC,IAAD,CAAShG,MAAO+E,EAASkB,UAAU,YAAnC,UACE,gBAAK5E,UAAWjD,EAAQ2G,QAAxB,UACE,SAAC,IAAD,cAQZ,iBAAK1D,UAAWjD,EAAQuI,iBAAxB,WACE,SAACJ,EAAD,CACE9E,GAAIA,EACJC,KAAMA,EACNuG,WAAS,EACTzG,MAAOA,EACPqG,UAAWA,EACXnF,SAAUA,EACVd,SAAUA,EACVtC,KAAMA,EACN6H,UAAWA,EACXhH,aAAcA,EACdqF,WAAYA,EACZ6B,MAAiB,KAAVA,EACPa,WAAYb,EACZC,YAAaA,EACbjG,UAAWjD,EAAQ+J,cAEpBX,IACC,gBACEnG,UAAS,UAAKjD,EAAQ0I,cAAb,YACG,KAAVhF,EAAe,YAAc,IAFjC,UAKE,SAAC,IAAD,CACEa,QACEmE,EACI,WACEA,KAEF,kBAAM,MAEZsB,KAAM,QACN1C,oBAAoB,EACpBD,eAAe,EACfE,oBAAoB,EAXtB,SAaG6B,MAINC,IACC,gBACEpG,UAAS,UAAKjD,EAAQ0I,cAAb,YACG,KAAVhF,EAAe,YAAc,IAFjC,SAKG2F,gB,yMC3JTY,GAAchC,EAAAA,EAAAA,IAAW,QAC7BxD,KAAM,CACJ,UAAW,CACTS,gBAAiB,iBAGlBgF,EAAAA,KAGCC,EAAc,SAAC/B,GACnB,IAAMpI,EAAUiK,IAEhB,OACE,SAAC,KAAD,QACEhH,UAAWjD,EAAQyE,KACnB4C,eAAa,EACbhD,MAAM,UACN+F,aAAa,iBAAMnH,UAAWjD,EAAQqK,oBACtCC,MAAM,iBAAMrH,UAAWjD,EAAQuK,uBAC3BnC,KAgEV,KAAezI,EAAAA,EAAAA,IA9GA,SAACC,GAAD,OACbC,EAAAA,EAAAA,IAAa,0BACRgH,EAAAA,IACAyB,EAAAA,IAFO,IAGVkC,YAAa,CACX,iBAAkB,CAChB,+BAAgC,CAC9BnG,MAAO,YAGX,eAAgB,CACdoG,YAAa,GAEf,+BAAgC,CAC9BjE,SAAU,GACVnC,MAAO,YAGXqG,cAAe,CACb,+BAAgC,CAC9BlE,SAAU,GACVnC,MAAO,UACPiC,WAAY,WAwFpB,EA3DkC,SAAC,GAWX,IAAD,IAVrB1C,gBAAAA,OAUqB,MAVH,GAUG,EATrBD,EASqB,EATrBA,iBACAD,EAQqB,EARrBA,MACAL,EAOqB,EAPrBA,GACAC,EAMqB,EANrBA,KACAE,EAKqB,EALrBA,SAKqB,IAJrBmD,QAAAA,OAIqB,MAJX,GAIW,MAHrBgE,eAAAA,OAGqB,SAFrB3K,EAEqB,EAFrBA,QAEqB,IADrB4K,gBAAAA,OACqB,SACrB,OACE,UAAC,KAAD,CAAM9H,WAAS,EAACkD,WAAY,SAA5B,WACE,SAAC,KAAD,CAAMjD,MAAI,EAACC,IAAE,EAAb,UACE,UAAC,IAAD,CAAY0E,QAASrE,EAAIJ,UAAWjD,EAAQ2H,WAA5C,WACE,0BAAOjE,IACM,KAAZiD,IACC,gBAAK1D,UAAWjD,EAAQ4H,iBAAxB,UACE,SAAC,IAAD,CAAShG,MAAO+E,EAASkB,UAAU,YAAnC,UACE,0BACE,SAAC,IAAD,gBAOZ,SAAC,KAAD,CAAM9E,MAAI,EAACC,IAAE,EAACC,UAAWjD,EAAQ6K,mBAAjC,UACE,SAAC,IAAD,CACE,aAAYxH,EACZA,GAAIA,EACJC,KAAMA,EACNF,MAAOO,EACPH,SAAUA,EACVsH,KAAMF,EACN7G,MAAO,CAAEgC,QAAS,QAAS+B,UAAW,SAPxC,SASGlE,EAAgBmH,KAAI,SAACC,GACpB,OACE,SAAC,IAAD,CAEE5H,MAAO4H,EAAe5H,MACtB6H,SAAS,SAACd,EAAD,IACTzG,MAAOsH,EAAetH,MACtBY,SAAUqG,EACV1H,WAAWiE,EAAAA,EAAAA,GAAKlH,EAAQwK,aAAT,UACZxK,EAAQ0K,cACPM,EAAe5H,QAAUO,KAR/B,aACaL,EADb,YACqB0H,EAAe5H,sB,mLCxE5C8H,GAAevL,EAAAA,EAAAA,IAAW,SAACC,GAAD,OAC9BC,EAAAA,EAAAA,GAAa,CACX4E,KAAM,CACJC,OAAQ,GACRyG,WAAY,EACZ,YAAa,CACXzE,UAAW9G,EAAMwL,QAAQ,KAG7BC,MAAO,CACL3G,OAAQ,GACR+D,SAAU,WACVpE,MAAO,UACPmC,SAAU,GACVF,WAAY,IACZ3B,QAAS,qBACTU,OAAQ,oBACRI,aAAc,EACdM,QAAS,OACTC,WAAY,SACZ,UAAW,CACTsF,YAAa,WAEf,UAAW,CACTpG,gBAAiB,aAxBJvF,CA4BnB4L,EAAAA,IAsDF,KAAe5L,EAAAA,EAAAA,IApGA,SAACC,GAAD,OACbC,EAAAA,EAAAA,IAAa,0BACRgH,EAAAA,IACAyB,EAAAA,IAFO,IAGVX,YAAW,kBACNd,EAAAA,GAAAA,YADK,IAER,SAAU,CACRP,WAAY,YAGhBkF,eAAgB,CACdzF,QAAS,OACT,4BAA6B,CAC3B0F,SAAU,gBAuFlB,EApDsB,SAAC,GAUH,IATlBzL,EASiB,EATjBA,QACAqD,EAQiB,EARjBA,GACAC,EAOiB,EAPjBA,KACAE,EAMiB,EANjBA,SACAS,EAKiB,EALjBA,QACAP,EAIiB,EAJjBA,MAIiB,IAHjBiD,QAAAA,OAGiB,MAHP,GAGO,EAFjBvD,EAEiB,EAFjBA,MAEiB,IADjBkB,SAAAA,OACiB,SACjB,OACE,SAAC,WAAD,WACE,UAAC,KAAD,CAAMvB,MAAI,EAACC,GAAI,GAAIC,UAAWjD,EAAQwL,eAAtC,UACa,KAAV9H,IACC,UAAC,IAAD,CAAYgE,QAASrE,EAAIJ,UAAWjD,EAAQ2H,WAA5C,WACE,0BAAOjE,IACM,KAAZiD,IACC,gBAAK1D,UAAWjD,EAAQ4H,iBAAxB,UACE,SAAC,IAAD,CAAShG,MAAO+E,EAASkB,UAAU,YAAnC,UACE,gBAAK5E,UAAWjD,EAAQ2G,QAAxB,UACE,SAAC,IAAD,cAOZ,SAAC,IAAD,CAAakD,WAAS,EAAtB,UACE,SAAC,IAAD,CACExG,GAAIA,EACJC,KAAMA,EACNF,MAAOA,EACPI,SAAUA,EACV6H,OAAO,SAACH,EAAD,IACP5G,SAAUA,EANZ,SAQGL,EAAQ8G,KAAI,SAACW,GAAD,OACX,SAAC,IAAD,CACEtI,MAAOsI,EAAOtI,MADhB,SAIGsI,EAAOhI,OAJV,iBAEiBJ,EAFjB,YAEyBoI,EAAOhI,wB,0DCH1CiI,E,8MAMEC,EAAgB,WACpBC,cAAcF,IA+FVG,EAAqB,CACzBC,oBAAqBrM,EAAAA,IAKvB,GAFkBD,EAAAA,EAAAA,KARD,SAACuM,GAAD,MAAsB,CACrCC,kBAAmBD,EAAME,OAAOC,iBAOEL,EAEpC,EAAyBnM,EAAAA,EAAAA,IA3LV,SAACC,GAAD,OACbC,EAAAA,EAAAA,GAAa,CACXuM,oBAAqB,CACnB3D,SAAU,WACV/B,UAAW,GACX1C,MAAO,MACPkB,gBAAiB,OACjBG,OAAQ,oBACRgH,gBAAiB,GACjB5G,aAAc,EACd6G,OAAQ,IACR3H,QAAS,YACT4H,KAAM,MACNzH,UAAW,mBACXM,QAAS,EACToH,mBAAoB,QAEtBC,eAAgB,CACdrH,QAAS,GAEXsH,YAAa,CACXjE,SAAU,WACVE,MAAO,EACPnC,SAAU,QACVnB,OAAQ,EACRH,gBAAiB,OACjByH,OAAQ,WAEVC,WAAY,CACV7G,QAAS,OACTC,WAAY,UAEd6G,WAAY,CACVxI,MAAO,OACPmC,SAAU,GACVF,WAAY,IACZf,WAAY,EACZkF,YAAa,IAEfqC,YAAa,CACXzI,MAAO,UACP0B,QAAS,OACT,QAAS,CACP/B,MAAO,GACPU,OAAQ,KAGZqI,cAAe,CACb1I,MAAO,UACP0B,QAAS,OACTC,WAAY,SACZX,OAAQ,EACRH,gBAAiB,cACjB8H,YAAa,EACbxG,SAAU,GACVyG,kBAAmB,OACnBN,OAAQ,WAEVO,sBAAuB,CACrBC,UAAW,SACX9I,MAAO,UACP8G,WAAY,EACZxG,QAAS,SACTe,WAAY,sBACZ0H,SAAU,UAEZC,iBAAkB,CAChBlC,WAAY,EACZxG,QAAS,YAEX2I,aAAc,CACZ/H,YAAa,GAEfgI,UAAW,CACTzI,UAAW,iBACXmI,kBAAmB,YAgHAtN,EAlGN,SAAC,GAKK,IAJvBK,EAIsB,EAJtBA,QACAiM,EAGsB,EAHtBA,kBACAF,EAEsB,EAFtBA,oBACAyB,EACsB,EADtBA,YAEA,GAAsClN,EAAAA,EAAAA,WAAkB,GAAxD,eAAOmN,EAAP,KAAoBC,EAApB,KACA,GAA8CpN,EAAAA,EAAAA,WAAkB,GAAhE,eAAOqN,EAAP,KAAwBC,EAAxB,KAEMC,GAAoBC,EAAAA,EAAAA,cAAY,WACpCF,GAAmB,KAClB,KAEH3M,EAAAA,EAAAA,YAAU,WACH0M,IACH5B,EAAoB,CAAEgC,cAAe,GAAIC,aAAc,KACvDN,GAAe,MAGhB,CAAC3B,EAAqB4B,KAEzB1M,EAAAA,EAAAA,YAAU,WAEwB,KAA9BgL,EAAkBgC,SACS,UAA3BhC,EAAkB/K,MAGlB0M,GAAmB,KAGpB,CAACC,EAAmB5B,EAAkBgC,QAAShC,EAAkB/K,OAEpE,IAIM+M,EAAUC,GAAAA,CAAIjC,EAAmB,UAAW,IAC5CkC,EAAiBD,GAAAA,CAAIjC,EAAmB,mBAAoB,IAElE,MAA+B,UAA3BA,EAAkB/K,MAAgC,KAAZ+M,EACjC,MAIP,SAAC,EAAAG,SAAD,WACE,iBACEnL,UAAS,UAAKjD,EAAQoM,oBAAb,YACPuB,EAAkB3N,EAAQyM,eAAiB,IAE7C1I,MAAOyJ,EACPa,YAAazC,EACb0C,aAAc,WA1DpB3C,EAAS4C,YA0DgCV,EA1DF,MAoDnC,WAQE,mBAAQ5K,UAAWjD,EAAQ0M,YAAanI,QAASsJ,EAAjD,UACE,SAACW,EAAA,EAAD,OAEF,iBAAKvL,UAAWjD,EAAQ4M,WAAxB,WACE,iBAAM3J,UAAWjD,EAAQ8M,YAAzB,UACE,SAAC2B,EAAA,EAAD,OAEF,iBAAMxL,UAAWjD,EAAQ6M,WAAzB,SAAsCoB,OAEpB,KAAnBE,IACC,UAAC,EAAAC,SAAD,YACE,gBAAKnL,UAAWjD,EAAQ0O,qBAAxB,UACE,oBAAQzL,UAAWjD,EAAQ+M,cAAexI,QAjChC,WACpBmJ,GAAgBD,IAgCN,qBAEE,SAACkB,EAAA,EAAD,CACE1L,UAAS,UAAKjD,EAAQsN,aAAb,YACPG,EAAczN,EAAQuN,UAAY,YAK1C,gBACEtK,UAAS,UAAKjD,EAAQkN,sBAAb,YACPO,EAAczN,EAAQqN,iBAAmB,IAF7C,SAKGc,gBC1CT3O,GAAYC,EAAAA,EAAAA,KAJD,SAACuM,GAAD,MAAsB,CACrCC,kBAAmBD,EAAME,OAAOC,iBAGE,CAClCyC,qBAAAA,EAAAA,KAGF,GAAejP,EAAAA,EAAAA,IA3IA,SAACC,GAAD,OACbC,EAAAA,EAAAA,IAAa,kBACRgP,EAAAA,IADO,IAEVpK,KAAM,CACJ,mBAAoB,CAClBE,QAAS,wBAGbmK,QAAS,CACPnK,QAAS,GACToK,cAAe,GAEjBC,iBAAkB,CAChBhL,MAAO,OACP6E,SAAU,MAEToG,EAAAA,OA2HP,CAAkCzP,GAxHb,SAAC,GAWF,IAVlBmC,EAUiB,EAVjBA,QACAD,EASiB,EATjBA,UACAE,EAQiB,EARjBA,MACAsN,EAOiB,EAPjBA,SACAlP,EAMiB,EANjBA,QAMiB,IALjBmP,UAAAA,OAKiB,SAJjBlD,EAIiB,EAJjBA,kBACAmD,EAGiB,EAHjBA,iBACAR,EAEiB,EAFjBA,qBAEiB,IADjB/M,UAAAA,OACiB,MADL,KACK,EACjB,GAAwCvB,EAAAA,EAAAA,WAAkB,GAA1D,eAAO+O,EAAP,KAAqBC,EAArB,MAEArO,EAAAA,EAAAA,YAAU,WACR2N,EAAqB,MACpB,CAACA,KAEJ3N,EAAAA,EAAAA,YAAU,WACR,GAAIgL,EAAmB,CACrB,GAAkC,KAA9BA,EAAkBgC,QAEpB,YADAqB,GAAgB,GAIa,UAA3BrD,EAAkB/K,MACpBoO,GAAgB,MAGnB,CAACrD,IAEJ,IAKMsD,EAAaJ,EACf,CACEnP,QAAS,CACPwP,MAAOxP,EAAQgP,mBAGnB,CAAEnG,SAAU,KAAegB,WAAW,GAEtCoE,EAAU,GAYd,OAVIhC,IACFgC,EAAUhC,EAAkBwD,kBAEa,KAAvCxD,EAAkBwD,kBAClBxD,EAAkBwD,iBAAiBtI,OAAS,KAE5C8G,EAAUhC,EAAkBgC,WAK9B,UAACyB,EAAA,GAAD,gBACEzP,KAAMyB,EACN1B,QAASA,GACLuP,GAHN,IAIEI,OAAQ,QACRhO,QAAS,SAACO,EAAO0N,GACA,kBAAXA,GACFjO,KAGJsB,UAAWjD,EAAQyE,KAVrB,WAYE,UAACoL,EAAA,EAAD,CAAa5M,UAAWjD,EAAQ4B,MAAhC,WACE,iBAAKqB,UAAWjD,EAAQ8P,UAAxB,UACGjO,EADH,IACeD,MAEf,gBAAKqB,UAAWjD,EAAQ+P,eAAxB,UACE,SAACC,EAAA,EAAD,CACE,aAAW,QACX/M,UAAWjD,EAAQ0M,YACnBnI,QAAS5C,EACT0F,eAAa,EACb2C,KAAK,QALP,UAOE,SAACwE,EAAA,EAAD,YAKN,SAAC,EAAD,KACA,SAACyB,EAAA,EAAD,CACEhQ,KAAMoP,EACNpM,UAAWjD,EAAQkQ,cACnBvO,QAAS,WA1Db2N,GAAgB,GAChBV,EAAqB,KA4DjBX,QAASA,EACTkC,aAAc,CACZlN,UAAU,GAAD,OAAKjD,EAAQoQ,SAAb,YACPnE,GAAgD,UAA3BA,EAAkB/K,KACnClB,EAAQqQ,cACR,KAGRC,iBACErE,GAAgD,UAA3BA,EAAkB/K,KAAmB,IAAQ,OAGtE,SAACqP,EAAA,EAAD,CAAetN,UAAWmM,EAAmB,GAAKpP,EAAQ8O,QAA1D,SACGI","sources":["screens/Console/Buckets/BucketDetails/EnableQuota.tsx","screens/Console/Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper.tsx","screens/Console/Common/FormComponents/InputBoxWrapper/InputBoxWrapper.tsx","screens/Console/Common/FormComponents/RadioGroupSelector/RadioGroupSelector.tsx","screens/Console/Common/FormComponents/SelectWrapper/SelectWrapper.tsx","screens/Console/Common/FormComponents/ModalError/ModalError.tsx","screens/Console/Common/ModalWrapper/ModalWrapper.tsx"],"sourcesContent":["// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Button, LinearProgress, SelectChangeEvent } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport Grid from \"@mui/material/Grid\";\nimport { factorForDropdown, getBytes, units } from \"../../../../common/utils\";\nimport { BucketQuota } from \"../types\";\nimport { setModalErrorSnackMessage } from \"../../../../actions\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport {\n formFieldStyles,\n modalStyleUtils,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport FormSwitchWrapper from \"../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport RadioGroupSelector from \"../../Common/FormComponents/RadioGroupSelector/RadioGroupSelector\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\nimport SelectWrapper from \"../../Common/FormComponents/SelectWrapper/SelectWrapper\";\nimport api from \"../../../../common/api\";\nimport { BucketQuotaIcon } from \"../../../../icons\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...formFieldStyles,\n ...modalStyleUtils,\n });\n\ninterface IEnableQuotaProps {\n classes: any;\n open: boolean;\n enabled: boolean;\n cfg: BucketQuota | null;\n selectedBucket: string;\n closeModalAndRefresh: () => void;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst EnableQuota = ({\n classes,\n open,\n enabled,\n cfg,\n selectedBucket,\n closeModalAndRefresh,\n setModalErrorSnackMessage,\n}: IEnableQuotaProps) => {\n const [loading, setLoading] = useState(false);\n const [quotaEnabled, setQuotaEnabled] = useState(false);\n const [quotaType, setQuotaType] = useState(\"hard\");\n const [quotaSize, setQuotaSize] = useState(\"1\");\n const [quotaUnit, setQuotaUnit] = useState(\"TiB\");\n\n useEffect(() => {\n if (enabled) {\n setQuotaEnabled(true);\n if (cfg) {\n setQuotaType(cfg.type);\n setQuotaSize(`${cfg.quota}`);\n setQuotaUnit(`B`);\n\n let maxUnit = \"B\";\n let maxQuota = cfg.quota;\n\n for (let i = 0; i < units.length; i++) {\n if (cfg.quota % Math.pow(1024, i) === 0) {\n maxQuota = cfg.quota / Math.pow(1024, i);\n maxUnit = units[i];\n } else {\n break;\n }\n }\n setQuotaSize(`${maxQuota}`);\n setQuotaUnit(maxUnit);\n }\n }\n }, [enabled, cfg]);\n\n const enableBucketEncryption = (event: React.FormEvent) => {\n event.preventDefault();\n if (loading) {\n return;\n }\n let req = {\n enabled: quotaEnabled,\n amount: parseInt(getBytes(quotaSize, quotaUnit, false)),\n quota_type: quotaType,\n };\n\n api\n .invoke(\"PUT\", `/api/v1/buckets/${selectedBucket}/quota`, req)\n .then(() => {\n setLoading(false);\n closeModalAndRefresh();\n })\n .catch((err: ErrorResponseHandler) => {\n setLoading(false);\n setModalErrorSnackMessage(err);\n });\n };\n\n return (\n {\n closeModalAndRefresh();\n }}\n title=\"Enable Bucket Quota\"\n titleIcon={}\n >\n ) => {\n enableBucketEncryption(e);\n }}\n >\n \n \n \n ) => {\n setQuotaEnabled(event.target.checked);\n }}\n label={\"Quota\"}\n />\n \n {quotaEnabled && (\n \n \n ) => {\n setQuotaType(e.target.value as string);\n }}\n selectorOptions={[{ value: \"hard\", label: \"Hard\" }]}\n />\n \n \n \n \n ) => {\n setQuotaSize(e.target.value);\n }}\n label=\"Quota\"\n value={quotaSize}\n required\n min=\"1\"\n />\n \n \n
\n ) => {\n setQuotaUnit(e.target.value as string);\n }}\n options={factorForDropdown()}\n />\n
\n
\n
\n
\n
\n )}\n
\n \n {\n closeModalAndRefresh();\n }}\n >\n Cancel\n \n\n \n Save\n \n \n {loading && (\n \n \n \n )}\n
\n \n \n );\n};\n\nconst connector = connect(null, {\n setModalErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(EnableQuota));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { InputLabel, Switch, Tooltip, Typography } from \"@mui/material\";\nimport Grid from \"@mui/material/Grid\";\nimport { actionsTray, fieldBasic } from \"../common/styleLibrary\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\nimport clsx from \"clsx\";\n\ninterface IFormSwitch {\n label?: string;\n classes: any;\n onChange: (e: React.ChangeEvent) => void;\n value: string | boolean;\n id: string;\n name: string;\n disabled?: boolean;\n tooltip?: string;\n description?: string;\n index?: number;\n checked: boolean;\n switchOnly?: boolean;\n indicatorLabels?: string[];\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n divContainer: {\n marginBottom: 20,\n },\n indicatorLabelOn: {\n fontWeight: \"bold\",\n color: \"#081C42 !important\",\n },\n indicatorLabel: {\n fontSize: 12,\n color: \"#E2E2E2\",\n margin: \"0 8px 0 10px\",\n },\n fieldDescription: {\n marginTop: 4,\n color: \"#999999\",\n },\n tooltip: {\n fontSize: 16,\n },\n ...actionsTray,\n ...fieldBasic,\n });\n\nconst StyledSwitch = withStyles((theme) => ({\n root: {\n width: 50,\n height: 24,\n padding: 0,\n margin: 0,\n },\n switchBase: {\n padding: 1,\n \"&$checked\": {\n transform: \"translateX(24px)\",\n color: theme.palette.common.white,\n \"& + $track\": {\n backgroundColor: \"#4CCB92\",\n boxShadow: \"inset 0px 1px 4px rgba(0,0,0,0.1)\",\n opacity: 1,\n border: \"none\",\n },\n },\n \"&$focusVisible $thumb\": {\n color: \"#4CCB92\",\n border: \"6px solid #fff\",\n },\n },\n thumb: {\n width: 22,\n height: 22,\n backgroundColor: \"#FAFAFA\",\n border: \"2px solid #FFFFFF\",\n marginLeft: 1,\n },\n track: {\n borderRadius: 24 / 2,\n backgroundColor: \"#E2E2E2\",\n boxShadow: \"inset 0px 1px 4px rgba(0,0,0,0.1)\",\n opacity: 1,\n transition: theme.transitions.create([\"background-color\", \"border\"]),\n },\n checked: {},\n focusVisible: {},\n switchContainer: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n },\n}))(Switch);\n\nconst FormSwitchWrapper = ({\n label = \"\",\n onChange,\n value,\n id,\n name,\n checked = false,\n disabled = false,\n switchOnly = false,\n tooltip = \"\",\n description = \"\",\n classes,\n indicatorLabels,\n}: IFormSwitch) => {\n const switchComponent = (\n \n {!switchOnly && (\n \n {indicatorLabels && indicatorLabels.length > 1\n ? indicatorLabels[1]\n : \"OFF\"}\n \n )}\n \n {!switchOnly && (\n \n {indicatorLabels ? indicatorLabels[0] : \"ON\"}\n \n )}\n \n );\n\n if (switchOnly) {\n return switchComponent;\n }\n\n return (\n
\n \n \n \n \n {label !== \"\" && (\n \n {label}\n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n
\n )}\n
\n \n {description !== \"\" && (\n \n {description}\n \n )}\n \n
\n
\n\n \n {switchComponent}\n
\n \n
\n );\n};\n\nexport default withStyles(styles)(FormSwitchWrapper);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React from \"react\";\nimport {\n Grid,\n IconButton,\n InputLabel,\n TextField,\n TextFieldProps,\n Tooltip,\n} from \"@mui/material\";\nimport { OutlinedInputProps } from \"@mui/material/OutlinedInput\";\nimport { InputProps as StandardInputProps } from \"@mui/material/Input\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n fieldBasic,\n inputFieldStyles,\n tooltipHelper,\n} from \"../common/styleLibrary\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\nimport clsx from \"clsx\";\n\ninterface InputBoxProps {\n label: string;\n classes: any;\n onChange: (e: React.ChangeEvent) => void;\n value: string | boolean;\n id: string;\n name: string;\n disabled?: boolean;\n multiline?: boolean;\n type?: string;\n tooltip?: string;\n autoComplete?: string;\n index?: number;\n error?: string;\n required?: boolean;\n placeholder?: string;\n min?: string;\n max?: string;\n overlayIcon?: any;\n overlayAction?: () => void;\n overlayObject?: any;\n extraInputProps?: StandardInputProps[\"inputProps\"];\n noLabelMinWidth?: boolean;\n pattern?: string;\n autoFocus?: boolean;\n className?: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n textBoxContainer: {\n flexGrow: 1,\n position: \"relative\",\n },\n overlayAction: {\n position: \"absolute\",\n right: 5,\n top: 6,\n \"& svg\": {\n maxWidth: 15,\n maxHeight: 15,\n },\n \"&.withLabel\": {\n top: 5,\n },\n },\n inputLabel: {\n ...fieldBasic.inputLabel,\n fontWeight: \"normal\",\n },\n });\n\nconst inputStyles = makeStyles((theme: Theme) =>\n createStyles({\n ...inputFieldStyles,\n })\n);\n\nfunction InputField(props: TextFieldProps) {\n const classes = inputStyles();\n\n return (\n }\n {...props}\n />\n );\n}\n\nconst InputBoxWrapper = ({\n label,\n onChange,\n value,\n id,\n name,\n type = \"text\",\n autoComplete = \"off\",\n disabled = false,\n multiline = false,\n tooltip = \"\",\n index = 0,\n error = \"\",\n required = false,\n placeholder = \"\",\n min,\n max,\n overlayIcon = null,\n overlayObject = null,\n extraInputProps = {},\n overlayAction,\n noLabelMinWidth = false,\n pattern = \"\",\n autoFocus = false,\n classes,\n className = \"\",\n}: InputBoxProps) => {\n let inputProps: any = { \"data-index\": index, ...extraInputProps };\n\n if (type === \"number\" && min) {\n inputProps[\"min\"] = min;\n }\n\n if (type === \"number\" && max) {\n inputProps[\"max\"] = max;\n }\n\n if (pattern !== \"\") {\n inputProps[\"pattern\"] = pattern;\n }\n\n return (\n \n \n {label !== \"\" && (\n \n \n {label}\n {required ? \"*\" : \"\"}\n \n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n \n )}\n\n
\n \n {overlayIcon && (\n \n {\n overlayAction();\n }\n : () => null\n }\n size={\"small\"}\n disableFocusRipple={false}\n disableRipple={false}\n disableTouchRipple={false}\n >\n {overlayIcon}\n \n
\n )}\n {overlayObject && (\n \n {overlayObject}\n \n )}\n \n \n
\n );\n};\n\nexport default withStyles(styles)(InputBoxWrapper);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React from \"react\";\nimport clsx from \"clsx\";\nimport Grid from \"@mui/material/Grid\";\nimport RadioGroup from \"@mui/material/RadioGroup\";\nimport FormControlLabel from \"@mui/material/FormControlLabel\";\nimport Radio, { RadioProps } from \"@mui/material/Radio\";\nimport { InputLabel, Tooltip } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport { fieldBasic, radioIcons, tooltipHelper } from \"../common/styleLibrary\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\n\nexport interface SelectorTypes {\n label: string;\n value: string;\n}\n\ninterface RadioGroupProps {\n selectorOptions: SelectorTypes[];\n currentSelection: string;\n label: string;\n id: string;\n name: string;\n tooltip?: string;\n disableOptions?: boolean;\n onChange: (e: React.ChangeEvent) => void;\n classes: any;\n displayInColumn?: boolean;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n optionLabel: {\n \"&.Mui-disabled\": {\n \"& .MuiFormControlLabel-label\": {\n color: \"#9c9c9c\",\n },\n },\n \"&:last-child\": {\n marginRight: 0,\n },\n \"& .MuiFormControlLabel-label\": {\n fontSize: 12,\n color: \"#07193E\",\n },\n },\n checkedOption: {\n \"& .MuiFormControlLabel-label\": {\n fontSize: 12,\n color: \"#07193E\",\n fontWeight: 700,\n },\n },\n });\n\nconst radioStyles = makeStyles({\n root: {\n \"&:hover\": {\n backgroundColor: \"transparent\",\n },\n },\n ...radioIcons,\n});\n\nconst RadioButton = (props: RadioProps) => {\n const classes = radioStyles();\n\n return (\n }\n icon={}\n {...props}\n />\n );\n};\n\nexport const RadioGroupSelector = ({\n selectorOptions = [],\n currentSelection,\n label,\n id,\n name,\n onChange,\n tooltip = \"\",\n disableOptions = false,\n classes,\n displayInColumn = false,\n}: RadioGroupProps) => {\n return (\n \n \n \n {label}\n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n
\n
\n \n \n {selectorOptions.map((selectorOption) => {\n return (\n }\n label={selectorOption.label}\n disabled={disableOptions}\n className={clsx(classes.optionLabel, {\n [classes.checkedOption]:\n selectorOption.value === currentSelection,\n })}\n />\n );\n })}\n \n \n
\n );\n};\n\nexport default withStyles(styles)(RadioGroupSelector);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React from \"react\";\nimport Grid from \"@mui/material/Grid\";\nimport {\n FormControl,\n InputLabel,\n MenuItem,\n Select,\n InputBase,\n Tooltip,\n SelectChangeEvent,\n} from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { fieldBasic, tooltipHelper } from \"../common/styleLibrary\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\n\nexport interface selectorTypes {\n label: string;\n value: string;\n}\n\ninterface SelectProps {\n options: selectorTypes[];\n value: string;\n label: string;\n id: string;\n name: string;\n tooltip?: string;\n onChange: (e: SelectChangeEvent) => void;\n disabled?: boolean;\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n inputLabel: {\n ...fieldBasic.inputLabel,\n \"& span\": {\n fontWeight: \"normal\",\n },\n },\n fieldContainer: {\n display: \"flex\",\n \"@media (max-width: 600px)\": {\n flexFlow: \"column\",\n },\n },\n });\n\nconst SelectStyled = withStyles((theme: Theme) =>\n createStyles({\n root: {\n height: 38,\n lineHeight: 1,\n \"label + &\": {\n marginTop: theme.spacing(3),\n },\n },\n input: {\n height: 38,\n position: \"relative\",\n color: \"#07193E\",\n fontSize: 13,\n fontWeight: 600,\n padding: \"8px 20px 10px 10px\",\n border: \"#e5e5e5 1px solid\",\n borderRadius: 4,\n display: \"flex\",\n alignItems: \"center\",\n \"&:hover\": {\n borderColor: \"#393939\",\n },\n \"&:focus\": {\n backgroundColor: \"#fff\",\n },\n },\n })\n)(InputBase);\n\nconst SelectWrapper = ({\n classes,\n id,\n name,\n onChange,\n options,\n label,\n tooltip = \"\",\n value,\n disabled = false,\n}: SelectProps) => {\n return (\n \n \n {label !== \"\" && (\n \n {label}\n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n
\n )}\n \n }\n disabled={disabled}\n >\n {options.map((option) => (\n \n {option.label}\n \n ))}\n \n \n
\n
\n );\n};\n\nexport default withStyles(styles)(SelectWrapper);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\n// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport get from \"lodash/get\";\nimport ArrowRightIcon from \"@mui/icons-material/ArrowRight\";\nimport ErrorOutlineIcon from \"@mui/icons-material/ErrorOutline\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { AppState } from \"../../../../../store\";\nimport {\n setErrorSnackMessage,\n setModalErrorSnackMessage,\n} from \"../../../../../actions\";\nimport { snackBarMessage } from \"../../../../../types\";\n\ninterface ImodalErrorProps {\n customStyle?: any;\n classes: any;\n modalSnackMessage: snackBarMessage;\n displayErrorMessage: typeof setErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n modalErrorContainer: {\n position: \"absolute\",\n marginTop: 10,\n width: \"80%\",\n backgroundColor: \"#fff\",\n border: \"#C72C48 1px solid\",\n borderLeftWidth: 12,\n borderRadius: 3,\n zIndex: 1000,\n padding: \"10px 15px\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n opacity: 0,\n transitionDuration: \"0.2s\",\n },\n modalErrorShow: {\n opacity: 1,\n },\n closeButton: {\n position: \"absolute\",\n right: 5,\n fontSize: \"small\",\n border: 0,\n backgroundColor: \"#fff\",\n cursor: \"pointer\",\n },\n errorTitle: {\n display: \"flex\",\n alignItems: \"center\",\n },\n errorLabel: {\n color: \"#000\",\n fontSize: 18,\n fontWeight: 500,\n marginLeft: 5,\n marginRight: 25,\n },\n messageIcon: {\n color: \"#C72C48\",\n display: \"flex\",\n \"& svg\": {\n width: 32,\n height: 32,\n },\n },\n detailsButton: {\n color: \"#9C9C9C\",\n display: \"flex\",\n alignItems: \"center\",\n border: 0,\n backgroundColor: \"transparent\",\n paddingLeft: 5,\n fontSize: 14,\n transformDuration: \"0.3s\",\n cursor: \"pointer\",\n },\n extraDetailsContainer: {\n fontStyle: \"italic\",\n color: \"#9C9C9C\",\n lineHeight: 0,\n padding: \"0 10px\",\n transition: \"all .2s ease-in-out\",\n overflow: \"hidden\",\n },\n extraDetailsOpen: {\n lineHeight: 1,\n padding: \"3px 10px\",\n },\n arrowElement: {\n marginLeft: -5,\n },\n arrowOpen: {\n transform: \"rotateZ(90deg)\",\n transformDuration: \"0.3s\",\n },\n });\n\nvar timerI: any;\n\nconst startHideTimer = (callbackFunction: () => void) => {\n timerI = setInterval(callbackFunction, 10000);\n};\n\nconst stopHideTimer = () => {\n clearInterval(timerI);\n};\n\nconst ModalError = ({\n classes,\n modalSnackMessage,\n displayErrorMessage,\n customStyle,\n}: ImodalErrorProps) => {\n const [detailsOpen, setDetailsOpen] = useState(false);\n const [displayErrorMsg, setDisplayErrorMsg] = useState(false);\n\n const closeErrorMessage = useCallback(() => {\n setDisplayErrorMsg(false);\n }, []);\n\n useEffect(() => {\n if (!displayErrorMsg) {\n displayErrorMessage({ detailedError: \"\", errorMessage: \"\" });\n setDetailsOpen(false);\n //clearInterval(timerI);\n }\n }, [displayErrorMessage, displayErrorMsg]);\n\n useEffect(() => {\n if (\n modalSnackMessage.message !== \"\" &&\n modalSnackMessage.type === \"error\"\n ) {\n //Error message received, we trigger the animation\n setDisplayErrorMsg(true);\n //startHideTimer(closeErrorMessage);\n }\n }, [closeErrorMessage, modalSnackMessage.message, modalSnackMessage.type]);\n\n const detailsToggle = () => {\n setDetailsOpen(!detailsOpen);\n };\n\n const message = get(modalSnackMessage, \"message\", \"\");\n const messageDetails = get(modalSnackMessage, \"detailedErrorMsg\", \"\");\n\n if (modalSnackMessage.type !== \"error\" || message === \"\") {\n return null;\n }\n\n return (\n \n startHideTimer(closeErrorMessage)}\n >\n \n
\n \n \n \n {message}\n
\n {messageDetails !== \"\" && (\n \n
\n \n
\n \n {messageDetails}\n \n
\n )}\n \n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n modalSnackMessage: state.system.modalSnackBar,\n});\n\nconst mapDispatchToProps = {\n displayErrorMessage: setModalErrorSnackMessage,\n};\n\nconst connector = connect(mapState, mapDispatchToProps);\n\nexport default connector(withStyles(styles)(ModalError));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport IconButton from \"@mui/material/IconButton\";\nimport Snackbar from \"@mui/material/Snackbar\";\nimport { Dialog, DialogContent, DialogTitle } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n deleteDialogStyles,\n snackBarCommon,\n} from \"../FormComponents/common/styleLibrary\";\nimport { AppState } from \"../../../../store\";\nimport { snackBarMessage } from \"../../../../types\";\nimport { setModalSnackMessage } from \"../../../../actions\";\nimport ModalError from \"../FormComponents/ModalError/ModalError\";\nimport CloseIcon from \"@mui/icons-material/Close\";\n\ninterface IModalProps {\n classes: any;\n onClose: () => void;\n modalOpen: boolean;\n title: string | React.ReactNode;\n children: any;\n wideLimit?: boolean;\n modalSnackMessage?: snackBarMessage;\n noContentPadding?: boolean;\n setModalSnackMessage: typeof setModalSnackMessage;\n titleIcon?: React.ReactNode;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...deleteDialogStyles,\n root: {\n \"& .MuiPaper-root\": {\n padding: \"1rem 2rem 2rem 1rem\",\n },\n },\n content: {\n padding: 25,\n paddingBottom: 0,\n },\n customDialogSize: {\n width: \"100%\",\n maxWidth: 765,\n },\n ...snackBarCommon,\n });\n\nconst ModalWrapper = ({\n onClose,\n modalOpen,\n title,\n children,\n classes,\n wideLimit = true,\n modalSnackMessage,\n noContentPadding,\n setModalSnackMessage,\n titleIcon = null,\n}: IModalProps) => {\n const [openSnackbar, setOpenSnackbar] = useState(false);\n\n useEffect(() => {\n setModalSnackMessage(\"\");\n }, [setModalSnackMessage]);\n\n useEffect(() => {\n if (modalSnackMessage) {\n if (modalSnackMessage.message === \"\") {\n setOpenSnackbar(false);\n return;\n }\n // Open SnackBar\n if (modalSnackMessage.type !== \"error\") {\n setOpenSnackbar(true);\n }\n }\n }, [modalSnackMessage]);\n\n const closeSnackBar = () => {\n setOpenSnackbar(false);\n setModalSnackMessage(\"\");\n };\n\n const customSize = wideLimit\n ? {\n classes: {\n paper: classes.customDialogSize,\n },\n }\n : { maxWidth: \"lg\" as const, fullWidth: true };\n\n let message = \"\";\n\n if (modalSnackMessage) {\n message = modalSnackMessage.detailedErrorMsg;\n if (\n modalSnackMessage.detailedErrorMsg === \"\" ||\n modalSnackMessage.detailedErrorMsg.length < 5\n ) {\n message = modalSnackMessage.message;\n }\n }\n\n return (\n {\n if (reason !== \"backdropClick\") {\n onClose(); // close on Esc but not on click outside\n }\n }}\n className={classes.root}\n >\n \n
\n {titleIcon} {title}\n
\n
\n \n \n \n
\n
\n\n \n {\n closeSnackBar();\n }}\n message={message}\n ContentProps={{\n className: `${classes.snackBar} ${\n modalSnackMessage && modalSnackMessage.type === \"error\"\n ? classes.errorSnackBar\n : \"\"\n }`,\n }}\n autoHideDuration={\n modalSnackMessage && modalSnackMessage.type === \"error\" ? 10000 : 5000\n }\n />\n \n {children}\n \n \n );\n};\n\nconst mapState = (state: AppState) => ({\n modalSnackMessage: state.system.modalSnackBar,\n});\n\nconst connector = connect(mapState, {\n setModalSnackMessage,\n});\n\nexport default withStyles(styles)(connector(ModalWrapper));\n"],"names":["connector","connect","setModalErrorSnackMessage","withStyles","theme","createStyles","formFieldStyles","modalStyleUtils","classes","open","enabled","cfg","selectedBucket","closeModalAndRefresh","useState","loading","setLoading","quotaEnabled","setQuotaEnabled","quotaType","setQuotaType","quotaSize","setQuotaSize","quotaUnit","setQuotaUnit","useEffect","type","quota","maxUnit","maxQuota","i","units","Math","pow","modalOpen","onClose","title","titleIcon","noValidate","autoComplete","onSubmit","e","event","preventDefault","req","amount","parseInt","getBytes","quota_type","api","then","catch","err","enableBucketEncryption","container","item","xs","className","formScrollable","formFieldRow","value","id","name","checked","onChange","target","label","currentSelection","selectorOptions","required","min","style","width","options","factorForDropdown","modalButtonBar","variant","color","disabled","onClick","StyledSwitch","root","height","padding","margin","switchBase","transform","palette","common","white","backgroundColor","boxShadow","opacity","border","thumb","marginLeft","track","borderRadius","transition","transitions","create","focusVisible","switchContainer","display","alignItems","justifyContent","Switch","divContainer","marginBottom","indicatorLabelOn","fontWeight","indicatorLabel","fontSize","fieldDescription","marginTop","tooltip","actionsTray","fieldBasic","switchOnly","description","indicatorLabels","switchComponent","clsx","length","inputProps","disableRipple","disableFocusRipple","disableTouchRipple","sm","md","htmlFor","inputLabel","tooltipContainer","placement","textAlign","component","inputStyles","makeStyles","inputFieldStyles","InputField","props","InputProps","tooltipHelper","textBoxContainer","flexGrow","position","overlayAction","right","top","maxWidth","maxHeight","multiline","index","error","placeholder","max","overlayIcon","overlayObject","extraInputProps","noLabelMinWidth","pattern","autoFocus","errorInField","inputBoxContainer","noMinWidthLabel","fullWidth","helperText","inputRebase","size","radioStyles","radioIcons","RadioButton","checkedIcon","radioSelectedIcon","icon","radioUnselectedIcon","optionLabel","marginRight","checkedOption","disableOptions","displayInColumn","radioOptionsLayout","row","map","selectorOption","control","SelectStyled","lineHeight","spacing","input","borderColor","InputBase","fieldContainer","flexFlow","option","timerI","stopHideTimer","clearInterval","mapDispatchToProps","displayErrorMessage","state","modalSnackMessage","system","modalSnackBar","modalErrorContainer","borderLeftWidth","zIndex","left","transitionDuration","modalErrorShow","closeButton","cursor","errorTitle","errorLabel","messageIcon","detailsButton","paddingLeft","transformDuration","extraDetailsContainer","fontStyle","overflow","extraDetailsOpen","arrowElement","arrowOpen","customStyle","detailsOpen","setDetailsOpen","displayErrorMsg","setDisplayErrorMsg","closeErrorMessage","useCallback","detailedError","errorMessage","message","get","messageDetails","Fragment","onMouseOver","onMouseLeave","setInterval","Close","ErrorOutline","detailsContainerLink","ArrowRight","setModalSnackMessage","deleteDialogStyles","content","paddingBottom","customDialogSize","snackBarCommon","children","wideLimit","noContentPadding","openSnackbar","setOpenSnackbar","customSize","paper","detailedErrorMsg","Dialog","scroll","reason","DialogTitle","titleText","closeContainer","IconButton","Snackbar","snackBarModal","ContentProps","snackBar","errorSnackBar","autoHideDuration","DialogContent"],"sourceRoot":""} \ No newline at end of file diff --git a/portal-ui/build/static/js/1711.755e1931.chunk.js b/portal-ui/build/static/js/1711.755e1931.chunk.js new file mode 100644 index 000000000..1b6942c4a --- /dev/null +++ b/portal-ui/build/static/js/1711.755e1931.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1711],{31711:function(e,n,t){t.r(n);var a=t(23430),o=t(18489),i=t(50390),r=t(34424),s=t(66946),l=t(81378),c=t(86509),d=t(4285),u=t(25594),m=t(28948),p=t(44149),h=t(72462),x=t(92440),f=t(66964),b=t(76352),g=t(30324),v=t(85615),Z=t(1365),j=t(62559),C=(0,r.$j)(null,{setModalErrorSnackMessage:p.zb});n.default=(0,d.Z)((function(e){return(0,c.Z)((0,o.Z)((0,o.Z)({},h.DF),h.ID))}))(C((function(e){var n=e.classes,t=e.open,o=e.enabled,r=e.cfg,c=e.selectedBucket,d=e.closeModalAndRefresh,p=e.setModalErrorSnackMessage,h=(0,i.useState)(!1),C=(0,a.Z)(h,2),k=C[0],y=C[1],N=(0,i.useState)(!1),S=(0,a.Z)(N,2),w=S[0],F=S[1],M=(0,i.useState)("1"),E=(0,a.Z)(M,2),L=E[0],P=E[1],B=(0,i.useState)("TiB"),I=(0,a.Z)(B,2),z=I[0],D=I[1];(0,i.useEffect)((function(){if(o&&(F(!0),r)){P("".concat(r.quota)),D("Gi");for(var e="B",n=r.quota,t=0;t1?M[1]:"OFF"}),(0,f.jsx)(b,{checked:v,onChange:r,color:"primary",name:p,inputProps:(0,o.Z)({"aria-label":"primary checkbox"},L),disabled:j,disableRipple:!0,disableFocusRipple:!0,disableTouchRipple:!0,value:s}),!k&&(0,f.jsx)("span",{className:(0,x.Z)(F.indicatorLabel,(0,a.Z)({},F.indicatorLabelOn,v)),children:M?M[0]:"ON"})]});return k?P:(0,f.jsx)("div",{className:F.divContainer,children:(0,f.jsxs)(m.ZP,{container:!0,alignItems:"center",children:[(0,f.jsx)(m.ZP,{item:!0,xs:!0,children:(0,f.jsxs)(m.ZP,{container:!0,children:[(0,f.jsx)(m.ZP,{item:!0,xs:12,sm:10,md:9,children:""!==t&&(0,f.jsxs)(c.Z,{htmlFor:l,className:F.inputLabel,children:[(0,f.jsx)("span",{children:t}),""!==N&&(0,f.jsx)("div",{className:F.tooltipContainer,children:(0,f.jsx)(d.Z,{title:N,placement:"top-start",children:(0,f.jsx)("div",{className:F.tooltip,children:(0,f.jsx)(h.Z,{})})})})]})}),(0,f.jsx)(m.ZP,{item:!0,xs:12,sm:!0,textAlign:"left",children:""!==w&&(0,f.jsx)(u.Z,{component:"p",className:F.fieldDescription,children:w})})]})}),(0,f.jsx)(m.ZP,{item:!0,xs:12,sm:2,textAlign:"right",className:F.switchContainer,children:P})]})})}))},66964:function(e,n,t){var a=t(18489),o=t(50390),i=t(12066),r=t(25594),s=t(36554),l=t(94187),c=t(95467),d=t(86509),u=t(62449),m=t(4285),p=t(72462),h=t(97538),x=t(44977),f=t(62559),b=(0,u.Z)((function(e){return(0,d.Z)((0,a.Z)({},p.gM))}));function g(e){var n=b();return(0,f.jsx)(i.Z,(0,a.Z)({InputProps:{classes:n}},e))}n.Z=(0,m.Z)((function(e){return(0,d.Z)((0,a.Z)((0,a.Z)((0,a.Z)({},p.YI),p.Hr),{},{textBoxContainer:{flexGrow:1,position:"relative"},overlayAction:{position:"absolute",right:5,top:6,"& svg":{maxWidth:15,maxHeight:15},"&.withLabel":{top:5}},inputLabel:(0,a.Z)((0,a.Z)({},p.YI.inputLabel),{},{fontWeight:"normal"})}))}))((function(e){var n=e.label,t=e.onChange,i=e.value,d=e.id,u=e.name,m=e.type,p=void 0===m?"text":m,b=e.autoComplete,v=void 0===b?"off":b,Z=e.disabled,j=void 0!==Z&&Z,C=e.multiline,k=void 0!==C&&C,y=e.tooltip,N=void 0===y?"":y,S=e.index,w=void 0===S?0:S,F=e.error,M=void 0===F?"":F,E=e.required,L=void 0!==E&&E,P=e.placeholder,B=void 0===P?"":P,I=e.min,z=e.max,D=e.overlayIcon,O=void 0===D?null:D,R=e.overlayObject,q=void 0===R?null:R,T=e.extraInputProps,W=void 0===T?{}:T,A=e.overlayAction,_=e.noLabelMinWidth,$=void 0!==_&&_,H=e.pattern,K=void 0===H?"":H,Q=e.autoFocus,U=void 0!==Q&&Q,V=e.classes,Y=e.className,G=void 0===Y?"":Y,X=e.onKeyPress,J=(0,a.Z)({"data-index":w},W);return"number"===p&&I&&(J.min=I),"number"===p&&z&&(J.max=z),""!==K&&(J.pattern=K),(0,f.jsx)(o.Fragment,{children:(0,f.jsxs)(r.ZP,{container:!0,className:(0,x.Z)(""!==G?G:"",""!==M?V.errorInField:V.inputBoxContainer),children:[""!==n&&(0,f.jsxs)(s.Z,{htmlFor:d,className:$?V.noMinWidthLabel:V.inputLabel,children:[(0,f.jsxs)("span",{children:[n,L?"*":""]}),""!==N&&(0,f.jsx)("div",{className:V.tooltipContainer,children:(0,f.jsx)(l.Z,{title:N,placement:"top-start",children:(0,f.jsx)("div",{className:V.tooltip,children:(0,f.jsx)(h.Z,{})})})})]}),(0,f.jsxs)("div",{className:V.textBoxContainer,children:[(0,f.jsx)(g,{id:d,name:u,fullWidth:!0,value:i,autoFocus:U,disabled:j,onChange:t,type:p,multiline:k,autoComplete:v,inputProps:J,error:""!==M,helperText:M,placeholder:B,className:V.inputRebase,onKeyPress:X}),O&&(0,f.jsx)("div",{className:"".concat(V.overlayAction," ").concat(""!==n?"withLabel":""),children:(0,f.jsx)(c.Z,{onClick:A?function(){A()}:function(){return null},size:"small",disableFocusRipple:!1,disableRipple:!1,disableTouchRipple:!1,children:O})}),q&&(0,f.jsx)("div",{className:"".concat(V.overlayAction," ").concat(""!==n?"withLabel":""),children:q})]})]})})}))},1365:function(e,n,t){var a=t(23430),o=t(50390),i=t(86509),r=t(4285),s=t(26936),l=t(31680),c=t(62559);n.Z=(0,r.Z)((function(e){return(0,i.Z)({buttonTrigger:{border:"#F0F2F2 1px solid",borderRadius:3,color:"#838383",backgroundColor:"#fff",fontSize:12}})}))((function(e){var n=e.classes,t=e.id,i=e.unitSelected,r=e.unitsList,d=e.disabled,u=void 0!==d&&d,m=e.onUnitChange,p=o.useState(null),h=(0,a.Z)(p,2),x=h[0],f=h[1],b=Boolean(x),g=function(e){f(null),""!==e&&m&&m(e)};return(0,c.jsxs)(o.Fragment,{children:[(0,c.jsx)("button",{id:"".concat(t,"-button"),"aria-controls":"".concat(t,"-menu"),"aria-haspopup":"true","aria-expanded":b?"true":void 0,onClick:function(e){f(e.currentTarget)},className:n.buttonTrigger,disabled:u,type:"button",children:i}),(0,c.jsx)(s.Z,{id:"".concat(t,"-menu"),"aria-labelledby":"".concat(t,"-button"),anchorEl:x,open:b,onClose:function(){g("")},anchorOrigin:{vertical:"bottom",horizontal:"center"},transformOrigin:{vertical:"top",horizontal:"center"},children:r.map((function(e){return(0,c.jsx)(l.Z,{onClick:function(){return g(e.value)},children:e.label},"itemUnit-".concat(e.value,"-").concat(e.label))}))})]})}))},76352:function(e,n,t){t.d(n,{Z:function(){return w}});var a,o=t(23430),i=t(18489),r=t(50390),s=t(34424),l=t(95467),c=t(97771),d=t(84402),u=t(78426),m=t(93085),p=t(86509),h=t(4285),x=t(72462),f=t(44149),b=t(38342),g=t.n(b),v=t(92125),Z=t(19538),j=t(21278),C=t(62559),k=function(){clearInterval(a)},y={displayErrorMessage:f.zb},N=(0,s.$j)((function(e){return{modalSnackMessage:e.system.modalSnackBar}}),y)((0,h.Z)((function(e){return(0,p.Z)({modalErrorContainer:{position:"absolute",marginTop:10,width:"80%",backgroundColor:"#fff",border:"#C72C48 1px solid",borderLeftWidth:12,borderRadius:3,zIndex:1e3,padding:"10px 15px",left:"50%",transform:"translateX(-50%)",opacity:0,transitionDuration:"0.2s"},modalErrorShow:{opacity:1},closeButton:{position:"absolute",right:5,fontSize:"small",border:0,backgroundColor:"#fff",cursor:"pointer"},errorTitle:{display:"flex",alignItems:"center"},errorLabel:{color:"#000",fontSize:18,fontWeight:500,marginLeft:5,marginRight:25},messageIcon:{color:"#C72C48",display:"flex","& svg":{width:32,height:32}},detailsButton:{color:"#9C9C9C",display:"flex",alignItems:"center",border:0,backgroundColor:"transparent",paddingLeft:5,fontSize:14,transformDuration:"0.3s",cursor:"pointer"},extraDetailsContainer:{fontStyle:"italic",color:"#9C9C9C",lineHeight:0,padding:"0 10px",transition:"all .2s ease-in-out",overflow:"hidden"},extraDetailsOpen:{lineHeight:1,padding:"3px 10px"},arrowElement:{marginLeft:-5},arrowOpen:{transform:"rotateZ(90deg)",transformDuration:"0.3s"}})}))((function(e){var n=e.classes,t=e.modalSnackMessage,i=e.displayErrorMessage,s=e.customStyle,l=(0,r.useState)(!1),c=(0,o.Z)(l,2),d=c[0],u=c[1],m=(0,r.useState)(!1),p=(0,o.Z)(m,2),h=p[0],x=p[1],f=(0,r.useCallback)((function(){x(!1)}),[]);(0,r.useEffect)((function(){h||(i({detailedError:"",errorMessage:""}),u(!1))}),[i,h]),(0,r.useEffect)((function(){""!==t.message&&"error"===t.type&&x(!0)}),[f,t.message,t.type]);var b=g()(t,"message",""),y=g()(t,"detailedErrorMsg","");return"error"!==t.type||""===b?null:(0,C.jsx)(r.Fragment,{children:(0,C.jsxs)("div",{className:"".concat(n.modalErrorContainer," ").concat(h?n.modalErrorShow:""),style:s,onMouseOver:k,onMouseLeave:function(){a=setInterval(f,1e4)},children:[(0,C.jsx)("button",{className:n.closeButton,onClick:f,children:(0,C.jsx)(j.Z,{})}),(0,C.jsxs)("div",{className:n.errorTitle,children:[(0,C.jsx)("span",{className:n.messageIcon,children:(0,C.jsx)(Z.Z,{})}),(0,C.jsx)("span",{className:n.errorLabel,children:b})]}),""!==y&&(0,C.jsxs)(r.Fragment,{children:[(0,C.jsx)("div",{className:n.detailsContainerLink,children:(0,C.jsxs)("button",{className:n.detailsButton,onClick:function(){u(!d)},children:["Details",(0,C.jsx)(v.Z,{className:"".concat(n.arrowElement," ").concat(d?n.arrowOpen:"")})]})}),(0,C.jsx)("div",{className:"".concat(n.extraDetailsContainer," ").concat(d?n.extraDetailsOpen:""),children:y})]})]})})}))),S=(0,s.$j)((function(e){return{modalSnackMessage:e.system.modalSnackBar}}),{setModalSnackMessage:f.MK}),w=(0,h.Z)((function(e){return(0,p.Z)((0,i.Z)((0,i.Z)({},x.Qw),{},{root:{"& .MuiPaper-root":{padding:"0 2rem 2rem 1rem"}},content:{padding:25,paddingBottom:0},customDialogSize:{width:"100%",maxWidth:765}},x.sN))}))(S((function(e){var n=e.onClose,t=e.modalOpen,a=e.title,s=e.children,p=e.classes,h=e.wideLimit,x=void 0===h||h,f=e.modalSnackMessage,b=e.noContentPadding,g=e.setModalSnackMessage,v=e.titleIcon,Z=void 0===v?null:v,k=(0,r.useState)(!1),y=(0,o.Z)(k,2),S=y[0],w=y[1];(0,r.useEffect)((function(){g("")}),[g]),(0,r.useEffect)((function(){if(f){if(""===f.message)return void w(!1);"error"!==f.type&&w(!0)}}),[f]);var F=x?{classes:{paper:p.customDialogSize}}:{maxWidth:"lg",fullWidth:!0},M="";return f&&(M=f.detailedErrorMsg,(""===f.detailedErrorMsg||f.detailedErrorMsg.length<5)&&(M=f.message)),(0,C.jsxs)(d.Z,(0,i.Z)((0,i.Z)({open:t,classes:p},F),{},{scroll:"paper",onClose:function(e,t){"backdropClick"!==t&&n()},className:p.root,children:[(0,C.jsxs)(u.Z,{className:p.title,children:[(0,C.jsxs)("div",{className:p.titleText,children:[Z," ",a]}),(0,C.jsx)("div",{className:p.closeContainer,children:(0,C.jsx)(l.Z,{"aria-label":"close",className:p.closeButton,onClick:n,disableRipple:!0,size:"small",children:(0,C.jsx)(j.Z,{})})})]}),(0,C.jsx)(N,{}),(0,C.jsx)(c.Z,{open:S,className:p.snackBarModal,onClose:function(){w(!1),g("")},message:M,ContentProps:{className:"".concat(p.snackBar," ").concat(f&&"error"===f.type?p.errorSnackBar:"")},autoHideDuration:f&&"error"===f.type?1e4:5e3}),(0,C.jsx)(m.Z,{className:b?"":p.content,children:s})]}))})))}}]); +//# sourceMappingURL=1711.755e1931.chunk.js.map \ No newline at end of file diff --git a/portal-ui/build/static/js/1711.755e1931.chunk.js.map b/portal-ui/build/static/js/1711.755e1931.chunk.js.map new file mode 100644 index 000000000..13b7d7c9e --- /dev/null +++ b/portal-ui/build/static/js/1711.755e1931.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/1711.755e1931.chunk.js","mappings":"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","sources":["screens/Console/Buckets/BucketDetails/EnableQuota.tsx","screens/Console/Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper.tsx","screens/Console/Common/FormComponents/InputBoxWrapper/InputBoxWrapper.tsx","screens/Console/Common/FormComponents/InputUnitMenu/InputUnitMenu.tsx","screens/Console/Common/FormComponents/ModalError/ModalError.tsx","screens/Console/Common/ModalWrapper/ModalWrapper.tsx"],"sourcesContent":["// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Button, LinearProgress } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport Grid from \"@mui/material/Grid\";\nimport {\n getBytes,\n k8sScalarUnitsExcluding,\n units,\n} from \"../../../../common/utils\";\nimport { BucketQuota } from \"../types\";\nimport { setModalErrorSnackMessage } from \"../../../../actions\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport {\n formFieldStyles,\n modalStyleUtils,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport FormSwitchWrapper from \"../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\nimport api from \"../../../../common/api\";\nimport { BucketQuotaIcon } from \"../../../../icons\";\nimport InputUnitMenu from \"../../Common/FormComponents/InputUnitMenu/InputUnitMenu\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...formFieldStyles,\n ...modalStyleUtils,\n });\n\ninterface IEnableQuotaProps {\n classes: any;\n open: boolean;\n enabled: boolean;\n cfg: BucketQuota | null;\n selectedBucket: string;\n closeModalAndRefresh: () => void;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst EnableQuota = ({\n classes,\n open,\n enabled,\n cfg,\n selectedBucket,\n closeModalAndRefresh,\n setModalErrorSnackMessage,\n}: IEnableQuotaProps) => {\n const [loading, setLoading] = useState(false);\n const [quotaEnabled, setQuotaEnabled] = useState(false);\n const [quotaSize, setQuotaSize] = useState(\"1\");\n const [quotaUnit, setQuotaUnit] = useState(\"TiB\");\n\n useEffect(() => {\n if (enabled) {\n setQuotaEnabled(true);\n if (cfg) {\n setQuotaSize(`${cfg.quota}`);\n setQuotaUnit(`Gi`);\n\n let maxUnit = \"B\";\n let maxQuota = cfg.quota;\n\n for (let i = 0; i < units.length; i++) {\n if (cfg.quota % Math.pow(1024, i) === 0) {\n maxQuota = cfg.quota / Math.pow(1024, i);\n maxUnit = units[i];\n } else {\n break;\n }\n }\n setQuotaSize(`${maxQuota}`);\n setQuotaUnit(maxUnit);\n }\n }\n }, [enabled, cfg]);\n\n const enableBucketEncryption = () => {\n if (loading) {\n return;\n }\n let req = {\n enabled: quotaEnabled,\n amount: parseInt(getBytes(quotaSize, quotaUnit, true)),\n quota_type: \"hard\",\n };\n\n api\n .invoke(\"PUT\", `/api/v1/buckets/${selectedBucket}/quota`, req)\n .then(() => {\n setLoading(false);\n closeModalAndRefresh();\n })\n .catch((err: ErrorResponseHandler) => {\n setLoading(false);\n setModalErrorSnackMessage(err);\n });\n };\n\n return (\n {\n closeModalAndRefresh();\n }}\n title=\"Enable Bucket Quota\"\n titleIcon={}\n >\n ) => {\n e.preventDefault();\n enableBucketEncryption();\n }}\n >\n \n \n \n ) => {\n setQuotaEnabled(event.target.checked);\n }}\n label={\"Enabled\"}\n />\n \n {quotaEnabled && (\n \n \n \n \n ) => {\n if (e.target.validity.valid) {\n setQuotaSize(e.target.value);\n }\n }}\n pattern={\"[0-9]*\"}\n label=\"Quota\"\n value={quotaSize}\n required\n min=\"1\"\n overlayObject={\n {\n setQuotaUnit(newValue);\n }}\n unitSelected={quotaUnit}\n unitsList={k8sScalarUnitsExcluding([\"Ki\"])}\n disabled={false}\n />\n }\n />\n \n \n \n \n )}\n \n \n {\n closeModalAndRefresh();\n }}\n >\n Cancel\n \n\n \n Save\n \n \n {loading && (\n \n \n \n )}\n \n \n \n );\n};\n\nconst connector = connect(null, {\n setModalErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(EnableQuota));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { InputLabel, Switch, Tooltip, Typography } from \"@mui/material\";\nimport Grid from \"@mui/material/Grid\";\nimport { actionsTray, fieldBasic } from \"../common/styleLibrary\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\nimport clsx from \"clsx\";\nimport { InputProps as StandardInputProps } from \"@mui/material/Input/Input\";\n\ninterface IFormSwitch {\n label?: string;\n classes: any;\n onChange: (e: React.ChangeEvent) => void;\n value: string | boolean;\n id: string;\n name: string;\n disabled?: boolean;\n tooltip?: string;\n description?: string;\n index?: number;\n checked: boolean;\n switchOnly?: boolean;\n indicatorLabels?: string[];\n extraInputProps?: StandardInputProps[\"inputProps\"];\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n divContainer: {\n marginBottom: 20,\n },\n indicatorLabelOn: {\n fontWeight: \"bold\",\n color: \"#081C42 !important\",\n },\n indicatorLabel: {\n fontSize: 12,\n color: \"#E2E2E2\",\n margin: \"0 8px 0 10px\",\n },\n fieldDescription: {\n marginTop: 4,\n color: \"#999999\",\n },\n tooltip: {\n fontSize: 16,\n },\n ...actionsTray,\n ...fieldBasic,\n });\n\nconst StyledSwitch = withStyles((theme) => ({\n root: {\n width: 50,\n height: 24,\n padding: 0,\n margin: 0,\n },\n switchBase: {\n padding: 1,\n \"&$checked\": {\n transform: \"translateX(24px)\",\n color: theme.palette.common.white,\n \"& + $track\": {\n backgroundColor: \"#4CCB92\",\n boxShadow: \"inset 0px 1px 4px rgba(0,0,0,0.1)\",\n opacity: 1,\n border: \"none\",\n },\n },\n \"&$focusVisible $thumb\": {\n color: \"#4CCB92\",\n border: \"6px solid #fff\",\n },\n },\n thumb: {\n width: 22,\n height: 22,\n backgroundColor: \"#FAFAFA\",\n border: \"2px solid #FFFFFF\",\n marginLeft: 1,\n },\n track: {\n borderRadius: 24 / 2,\n backgroundColor: \"#E2E2E2\",\n boxShadow: \"inset 0px 1px 4px rgba(0,0,0,0.1)\",\n opacity: 1,\n transition: theme.transitions.create([\"background-color\", \"border\"]),\n },\n checked: {},\n focusVisible: {},\n switchContainer: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n },\n}))(Switch);\n\nconst FormSwitchWrapper = ({\n label = \"\",\n onChange,\n value,\n id,\n name,\n checked = false,\n disabled = false,\n switchOnly = false,\n tooltip = \"\",\n description = \"\",\n classes,\n indicatorLabels,\n extraInputProps = {},\n}: IFormSwitch) => {\n const switchComponent = (\n \n {!switchOnly && (\n \n {indicatorLabels && indicatorLabels.length > 1\n ? indicatorLabels[1]\n : \"OFF\"}\n
\n )}\n \n {!switchOnly && (\n \n {indicatorLabels ? indicatorLabels[0] : \"ON\"}\n \n )}\n \n );\n\n if (switchOnly) {\n return switchComponent;\n }\n\n return (\n
\n \n \n \n \n {label !== \"\" && (\n \n {label}\n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n
\n )}\n
\n \n {description !== \"\" && (\n \n {description}\n \n )}\n \n
\n
\n\n \n {switchComponent}\n
\n \n
\n );\n};\n\nexport default withStyles(styles)(FormSwitchWrapper);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React from \"react\";\nimport {\n Grid,\n IconButton,\n InputLabel,\n TextField,\n TextFieldProps,\n Tooltip,\n} from \"@mui/material\";\nimport { OutlinedInputProps } from \"@mui/material/OutlinedInput\";\nimport { InputProps as StandardInputProps } from \"@mui/material/Input\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n fieldBasic,\n inputFieldStyles,\n tooltipHelper,\n} from \"../common/styleLibrary\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\nimport clsx from \"clsx\";\n\ninterface InputBoxProps {\n label: string;\n classes: any;\n onChange: (e: React.ChangeEvent) => void;\n onKeyPress?: (e: any) => void;\n value: string | boolean;\n id: string;\n name: string;\n disabled?: boolean;\n multiline?: boolean;\n type?: string;\n tooltip?: string;\n autoComplete?: string;\n index?: number;\n error?: string;\n required?: boolean;\n placeholder?: string;\n min?: string;\n max?: string;\n overlayIcon?: any;\n overlayAction?: () => void;\n overlayObject?: any;\n extraInputProps?: StandardInputProps[\"inputProps\"];\n noLabelMinWidth?: boolean;\n pattern?: string;\n autoFocus?: boolean;\n className?: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n textBoxContainer: {\n flexGrow: 1,\n position: \"relative\",\n },\n overlayAction: {\n position: \"absolute\",\n right: 5,\n top: 6,\n \"& svg\": {\n maxWidth: 15,\n maxHeight: 15,\n },\n \"&.withLabel\": {\n top: 5,\n },\n },\n inputLabel: {\n ...fieldBasic.inputLabel,\n fontWeight: \"normal\",\n },\n });\n\nconst inputStyles = makeStyles((theme: Theme) =>\n createStyles({\n ...inputFieldStyles,\n })\n);\n\nfunction InputField(props: TextFieldProps) {\n const classes = inputStyles();\n\n return (\n }\n {...props}\n />\n );\n}\n\nconst InputBoxWrapper = ({\n label,\n onChange,\n value,\n id,\n name,\n type = \"text\",\n autoComplete = \"off\",\n disabled = false,\n multiline = false,\n tooltip = \"\",\n index = 0,\n error = \"\",\n required = false,\n placeholder = \"\",\n min,\n max,\n overlayIcon = null,\n overlayObject = null,\n extraInputProps = {},\n overlayAction,\n noLabelMinWidth = false,\n pattern = \"\",\n autoFocus = false,\n classes,\n className = \"\",\n onKeyPress,\n}: InputBoxProps) => {\n let inputProps: any = { \"data-index\": index, ...extraInputProps };\n\n if (type === \"number\" && min) {\n inputProps[\"min\"] = min;\n }\n\n if (type === \"number\" && max) {\n inputProps[\"max\"] = max;\n }\n\n if (pattern !== \"\") {\n inputProps[\"pattern\"] = pattern;\n }\n\n return (\n \n \n {label !== \"\" && (\n \n \n {label}\n {required ? \"*\" : \"\"}\n \n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n \n )}\n\n
\n \n {overlayIcon && (\n \n {\n overlayAction();\n }\n : () => null\n }\n size={\"small\"}\n disableFocusRipple={false}\n disableRipple={false}\n disableTouchRipple={false}\n >\n {overlayIcon}\n \n
\n )}\n {overlayObject && (\n \n {overlayObject}\n \n )}\n \n \n
\n );\n};\n\nexport default withStyles(styles)(InputBoxWrapper);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { selectorTypes } from \"../SelectWrapper/SelectWrapper\";\nimport { Menu, MenuItem } from \"@mui/material\";\n\ninterface IInputUnitBox {\n classes: any;\n id: string;\n unitSelected: string;\n unitsList: selectorTypes[];\n disabled?: boolean;\n onUnitChange?: (newValue: string) => void;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonTrigger: {\n border: \"#F0F2F2 1px solid\",\n borderRadius: 3,\n color: \"#838383\",\n backgroundColor: \"#fff\",\n fontSize: 12,\n },\n });\n\nconst InputUnitMenu = ({\n classes,\n id,\n unitSelected,\n unitsList,\n disabled = false,\n onUnitChange,\n}: IInputUnitBox) => {\n const [anchorEl, setAnchorEl] = React.useState(null);\n const open = Boolean(anchorEl);\n const handleClick = (event: React.MouseEvent) => {\n setAnchorEl(event.currentTarget);\n };\n const handleClose = (newUnit: string) => {\n setAnchorEl(null);\n if (newUnit !== \"\" && onUnitChange) {\n onUnitChange(newUnit);\n }\n };\n\n return (\n \n \n {unitSelected}\n \n {\n handleClose(\"\");\n }}\n anchorOrigin={{\n vertical: \"bottom\",\n horizontal: \"center\",\n }}\n transformOrigin={{\n vertical: \"top\",\n horizontal: \"center\",\n }}\n >\n {unitsList.map((unit) => (\n handleClose(unit.value)}\n key={`itemUnit-${unit.value}-${unit.label}`}\n >\n {unit.label}\n \n ))}\n \n \n );\n};\n\nexport default withStyles(styles)(InputUnitMenu);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\n// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport get from \"lodash/get\";\nimport ArrowRightIcon from \"@mui/icons-material/ArrowRight\";\nimport ErrorOutlineIcon from \"@mui/icons-material/ErrorOutline\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { AppState } from \"../../../../../store\";\nimport {\n setErrorSnackMessage,\n setModalErrorSnackMessage,\n} from \"../../../../../actions\";\nimport { snackBarMessage } from \"../../../../../types\";\n\ninterface ImodalErrorProps {\n customStyle?: any;\n classes: any;\n modalSnackMessage: snackBarMessage;\n displayErrorMessage: typeof setErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n modalErrorContainer: {\n position: \"absolute\",\n marginTop: 10,\n width: \"80%\",\n backgroundColor: \"#fff\",\n border: \"#C72C48 1px solid\",\n borderLeftWidth: 12,\n borderRadius: 3,\n zIndex: 1000,\n padding: \"10px 15px\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n opacity: 0,\n transitionDuration: \"0.2s\",\n },\n modalErrorShow: {\n opacity: 1,\n },\n closeButton: {\n position: \"absolute\",\n right: 5,\n fontSize: \"small\",\n border: 0,\n backgroundColor: \"#fff\",\n cursor: \"pointer\",\n },\n errorTitle: {\n display: \"flex\",\n alignItems: \"center\",\n },\n errorLabel: {\n color: \"#000\",\n fontSize: 18,\n fontWeight: 500,\n marginLeft: 5,\n marginRight: 25,\n },\n messageIcon: {\n color: \"#C72C48\",\n display: \"flex\",\n \"& svg\": {\n width: 32,\n height: 32,\n },\n },\n detailsButton: {\n color: \"#9C9C9C\",\n display: \"flex\",\n alignItems: \"center\",\n border: 0,\n backgroundColor: \"transparent\",\n paddingLeft: 5,\n fontSize: 14,\n transformDuration: \"0.3s\",\n cursor: \"pointer\",\n },\n extraDetailsContainer: {\n fontStyle: \"italic\",\n color: \"#9C9C9C\",\n lineHeight: 0,\n padding: \"0 10px\",\n transition: \"all .2s ease-in-out\",\n overflow: \"hidden\",\n },\n extraDetailsOpen: {\n lineHeight: 1,\n padding: \"3px 10px\",\n },\n arrowElement: {\n marginLeft: -5,\n },\n arrowOpen: {\n transform: \"rotateZ(90deg)\",\n transformDuration: \"0.3s\",\n },\n });\n\nvar timerI: any;\n\nconst startHideTimer = (callbackFunction: () => void) => {\n timerI = setInterval(callbackFunction, 10000);\n};\n\nconst stopHideTimer = () => {\n clearInterval(timerI);\n};\n\nconst ModalError = ({\n classes,\n modalSnackMessage,\n displayErrorMessage,\n customStyle,\n}: ImodalErrorProps) => {\n const [detailsOpen, setDetailsOpen] = useState(false);\n const [displayErrorMsg, setDisplayErrorMsg] = useState(false);\n\n const closeErrorMessage = useCallback(() => {\n setDisplayErrorMsg(false);\n }, []);\n\n useEffect(() => {\n if (!displayErrorMsg) {\n displayErrorMessage({ detailedError: \"\", errorMessage: \"\" });\n setDetailsOpen(false);\n //clearInterval(timerI);\n }\n }, [displayErrorMessage, displayErrorMsg]);\n\n useEffect(() => {\n if (\n modalSnackMessage.message !== \"\" &&\n modalSnackMessage.type === \"error\"\n ) {\n //Error message received, we trigger the animation\n setDisplayErrorMsg(true);\n //startHideTimer(closeErrorMessage);\n }\n }, [closeErrorMessage, modalSnackMessage.message, modalSnackMessage.type]);\n\n const detailsToggle = () => {\n setDetailsOpen(!detailsOpen);\n };\n\n const message = get(modalSnackMessage, \"message\", \"\");\n const messageDetails = get(modalSnackMessage, \"detailedErrorMsg\", \"\");\n\n if (modalSnackMessage.type !== \"error\" || message === \"\") {\n return null;\n }\n\n return (\n \n startHideTimer(closeErrorMessage)}\n >\n \n
\n \n \n \n {message}\n
\n {messageDetails !== \"\" && (\n \n
\n \n
\n \n {messageDetails}\n \n
\n )}\n \n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n modalSnackMessage: state.system.modalSnackBar,\n});\n\nconst mapDispatchToProps = {\n displayErrorMessage: setModalErrorSnackMessage,\n};\n\nconst connector = connect(mapState, mapDispatchToProps);\n\nexport default connector(withStyles(styles)(ModalError));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport IconButton from \"@mui/material/IconButton\";\nimport Snackbar from \"@mui/material/Snackbar\";\nimport { Dialog, DialogContent, DialogTitle } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n deleteDialogStyles,\n snackBarCommon,\n} from \"../FormComponents/common/styleLibrary\";\nimport { AppState } from \"../../../../store\";\nimport { snackBarMessage } from \"../../../../types\";\nimport { setModalSnackMessage } from \"../../../../actions\";\nimport ModalError from \"../FormComponents/ModalError/ModalError\";\nimport CloseIcon from \"@mui/icons-material/Close\";\n\ninterface IModalProps {\n classes: any;\n onClose: () => void;\n modalOpen: boolean;\n title: string | React.ReactNode;\n children: any;\n wideLimit?: boolean;\n modalSnackMessage?: snackBarMessage;\n noContentPadding?: boolean;\n setModalSnackMessage: typeof setModalSnackMessage;\n titleIcon?: React.ReactNode;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...deleteDialogStyles,\n root: {\n \"& .MuiPaper-root\": {\n padding: \"0 2rem 2rem 1rem\",\n },\n },\n content: {\n padding: 25,\n paddingBottom: 0,\n },\n customDialogSize: {\n width: \"100%\",\n maxWidth: 765,\n },\n ...snackBarCommon,\n });\n\nconst ModalWrapper = ({\n onClose,\n modalOpen,\n title,\n children,\n classes,\n wideLimit = true,\n modalSnackMessage,\n noContentPadding,\n setModalSnackMessage,\n titleIcon = null,\n}: IModalProps) => {\n const [openSnackbar, setOpenSnackbar] = useState(false);\n\n useEffect(() => {\n setModalSnackMessage(\"\");\n }, [setModalSnackMessage]);\n\n useEffect(() => {\n if (modalSnackMessage) {\n if (modalSnackMessage.message === \"\") {\n setOpenSnackbar(false);\n return;\n }\n // Open SnackBar\n if (modalSnackMessage.type !== \"error\") {\n setOpenSnackbar(true);\n }\n }\n }, [modalSnackMessage]);\n\n const closeSnackBar = () => {\n setOpenSnackbar(false);\n setModalSnackMessage(\"\");\n };\n\n const customSize = wideLimit\n ? {\n classes: {\n paper: classes.customDialogSize,\n },\n }\n : { maxWidth: \"lg\" as const, fullWidth: true };\n\n let message = \"\";\n\n if (modalSnackMessage) {\n message = modalSnackMessage.detailedErrorMsg;\n if (\n modalSnackMessage.detailedErrorMsg === \"\" ||\n modalSnackMessage.detailedErrorMsg.length < 5\n ) {\n message = modalSnackMessage.message;\n }\n }\n\n return (\n {\n if (reason !== \"backdropClick\") {\n onClose(); // close on Esc but not on click outside\n }\n }}\n className={classes.root}\n >\n \n
\n {titleIcon} {title}\n
\n
\n \n \n \n
\n
\n\n \n {\n closeSnackBar();\n }}\n message={message}\n ContentProps={{\n className: `${classes.snackBar} ${\n modalSnackMessage && modalSnackMessage.type === \"error\"\n ? classes.errorSnackBar\n : \"\"\n }`,\n }}\n autoHideDuration={\n modalSnackMessage && modalSnackMessage.type === \"error\" ? 10000 : 5000\n }\n />\n \n {children}\n \n \n );\n};\n\nconst mapState = (state: AppState) => ({\n modalSnackMessage: state.system.modalSnackBar,\n});\n\nconst connector = connect(mapState, {\n setModalSnackMessage,\n});\n\nexport default withStyles(styles)(connector(ModalWrapper));\n"],"names":["connector","connect","setModalErrorSnackMessage","withStyles","theme","createStyles","formFieldStyles","modalStyleUtils","classes","open","enabled","cfg","selectedBucket","closeModalAndRefresh","useState","loading","setLoading","quotaEnabled","setQuotaEnabled","quotaSize","setQuotaSize","quotaUnit","setQuotaUnit","useEffect","quota","maxUnit","maxQuota","i","units","Math","pow","modalOpen","onClose","title","titleIcon","noValidate","autoComplete","onSubmit","e","preventDefault","req","amount","parseInt","getBytes","quota_type","api","then","catch","err","enableBucketEncryption","container","item","xs","className","formScrollable","formFieldRow","value","id","name","checked","onChange","event","target","label","validity","valid","pattern","required","min","overlayObject","onUnitChange","newValue","unitSelected","unitsList","k8sScalarUnitsExcluding","disabled","modalButtonBar","type","variant","color","onClick","StyledSwitch","root","width","height","padding","margin","switchBase","transform","palette","common","white","backgroundColor","boxShadow","opacity","border","thumb","marginLeft","track","borderRadius","transition","transitions","create","focusVisible","switchContainer","display","alignItems","justifyContent","Switch","divContainer","marginBottom","indicatorLabelOn","fontWeight","indicatorLabel","fontSize","fieldDescription","marginTop","tooltip","actionsTray","fieldBasic","switchOnly","description","indicatorLabels","extraInputProps","switchComponent","clsx","length","inputProps","disableRipple","disableFocusRipple","disableTouchRipple","sm","md","htmlFor","inputLabel","tooltipContainer","placement","textAlign","component","inputStyles","makeStyles","inputFieldStyles","InputField","props","InputProps","tooltipHelper","textBoxContainer","flexGrow","position","overlayAction","right","top","maxWidth","maxHeight","multiline","index","error","placeholder","max","overlayIcon","noLabelMinWidth","autoFocus","onKeyPress","errorInField","inputBoxContainer","noMinWidthLabel","fullWidth","helperText","inputRebase","size","buttonTrigger","React","anchorEl","setAnchorEl","Boolean","handleClose","newUnit","Fragment","undefined","currentTarget","anchorOrigin","vertical","horizontal","transformOrigin","map","unit","timerI","stopHideTimer","clearInterval","mapDispatchToProps","displayErrorMessage","state","modalSnackMessage","system","modalSnackBar","modalErrorContainer","borderLeftWidth","zIndex","left","transitionDuration","modalErrorShow","closeButton","cursor","errorTitle","errorLabel","marginRight","messageIcon","detailsButton","paddingLeft","transformDuration","extraDetailsContainer","fontStyle","lineHeight","overflow","extraDetailsOpen","arrowElement","arrowOpen","customStyle","detailsOpen","setDetailsOpen","displayErrorMsg","setDisplayErrorMsg","closeErrorMessage","useCallback","detailedError","errorMessage","message","get","messageDetails","style","onMouseOver","onMouseLeave","setInterval","Close","ErrorOutline","detailsContainerLink","ArrowRight","setModalSnackMessage","deleteDialogStyles","content","paddingBottom","customDialogSize","snackBarCommon","children","wideLimit","noContentPadding","openSnackbar","setOpenSnackbar","customSize","paper","detailedErrorMsg","Dialog","scroll","reason","DialogTitle","titleText","closeContainer","IconButton","Snackbar","snackBarModal","ContentProps","snackBar","errorSnackBar","autoHideDuration","DialogContent"],"sourceRoot":""} \ No newline at end of file diff --git a/portal-ui/build/static/js/1719.06e59cd5.chunk.js b/portal-ui/build/static/js/1719.06e59cd5.chunk.js deleted file mode 100644 index a2b45968b..000000000 --- a/portal-ui/build/static/js/1719.06e59cd5.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1719],{66964:function(n,t,e){var o=e(18489),a=e(50390),i=e(12066),r=e(25594),s=e(36554),l=e(94187),c=e(95467),d=e(86509),u=e(62449),g=e(4285),p=e(72462),m=e(97538),f=e(44977),v=e(62559),Z=(0,u.Z)((function(n){return(0,d.Z)((0,o.Z)({},p.gM))}));function h(n){var t=Z();return(0,v.jsx)(i.Z,(0,o.Z)({InputProps:{classes:t}},n))}t.Z=(0,g.Z)((function(n){return(0,d.Z)((0,o.Z)((0,o.Z)((0,o.Z)({},p.YI),p.Hr),{},{textBoxContainer:{flexGrow:1,position:"relative"},overlayAction:{position:"absolute",right:5,top:6,"& svg":{maxWidth:15,maxHeight:15},"&.withLabel":{top:5}},inputLabel:(0,o.Z)((0,o.Z)({},p.YI.inputLabel),{},{fontWeight:"normal"})}))}))((function(n){var t=n.label,e=n.onChange,i=n.value,d=n.id,u=n.name,g=n.type,p=void 0===g?"text":g,Z=n.autoComplete,x=void 0===Z?"off":Z,b=n.disabled,I=void 0!==b&&b,j=n.multiline,P=void 0!==j&&j,y=n.tooltip,S=void 0===y?"":y,C=n.index,L=void 0===C?0:C,N=n.error,w=void 0===N?"":N,M=n.required,E=void 0!==M&&M,k=n.placeholder,R=void 0===k?"":k,T=n.min,B=n.max,F=n.overlayIcon,D=void 0===F?null:F,A=n.overlayObject,W=void 0===A?null:A,K=n.extraInputProps,O=void 0===K?{}:K,z=n.overlayAction,G=n.noLabelMinWidth,H=void 0!==G&&G,Y=n.pattern,$=void 0===Y?"":Y,_=n.autoFocus,q=void 0!==_&&_,Q=n.classes,V=n.className,X=void 0===V?"":V,J=(0,o.Z)({"data-index":L},O);return"number"===p&&T&&(J.min=T),"number"===p&&B&&(J.max=B),""!==$&&(J.pattern=$),(0,v.jsx)(a.Fragment,{children:(0,v.jsxs)(r.ZP,{container:!0,className:(0,f.Z)(""!==X?X:"",""!==w?Q.errorInField:Q.inputBoxContainer),children:[""!==t&&(0,v.jsxs)(s.Z,{htmlFor:d,className:H?Q.noMinWidthLabel:Q.inputLabel,children:[(0,v.jsxs)("span",{children:[t,E?"*":""]}),""!==S&&(0,v.jsx)("div",{className:Q.tooltipContainer,children:(0,v.jsx)(l.Z,{title:S,placement:"top-start",children:(0,v.jsx)("div",{className:Q.tooltip,children:(0,v.jsx)(m.Z,{})})})})]}),(0,v.jsxs)("div",{className:Q.textBoxContainer,children:[(0,v.jsx)(h,{id:d,name:u,fullWidth:!0,value:i,autoFocus:q,disabled:I,onChange:e,type:p,multiline:P,autoComplete:x,inputProps:J,error:""!==w,helperText:w,placeholder:R,className:Q.inputRebase}),D&&(0,v.jsx)("div",{className:"".concat(Q.overlayAction," ").concat(""!==t?"withLabel":""),children:(0,v.jsx)(c.Z,{onClick:z?function(){z()}:function(){return null},size:"small",disableFocusRipple:!1,disableRipple:!1,disableTouchRipple:!1,children:D})}),W&&(0,v.jsx)("div",{className:"".concat(Q.overlayAction," ").concat(""!==t?"withLabel":""),children:W})]})]})})}))},21639:function(n,t,e){var o=e(23430),a=e(50390),i=e(30324);t.Z=function(n,t){var e=(0,a.useState)(!1),r=(0,o.Z)(e,2),s=r[0],l=r[1];return[s,function(e,o,a){l(!0),i.Z.invoke(e,o,a).then((function(t){l(!1),n(t)})).catch((function(n){l(!1),t(n)}))}]}},60656:function(n,t,e){var o=e(18489),a=e(50390),i=e(84402),r=e(78426),s=e(93085),l=e(7887),c=e(66946),d=e(14476),u=e(95467),g=e(21278),p=e(86509),m=e(4285),f=e(72462),v=e(62559);t.Z=(0,m.Z)((function(n){return(0,p.Z)((0,o.Z)({},f.Qw))}))((function(n){var t=n.isOpen,e=void 0!==t&&t,p=n.onClose,m=n.onCancel,f=n.onConfirm,Z=n.classes,h=void 0===Z?{}:Z,x=n.title,b=void 0===x?"":x,I=n.isLoading,j=n.confirmationContent,P=n.cancelText,y=void 0===P?"Cancel":P,S=n.confirmText,C=void 0===S?"Confirm":S,L=n.confirmButtonProps,N=void 0===L?{}:L,w=n.cancelButtonProps,M=void 0===w?{}:w,E=n.titleIcon,k=void 0===E?null:E;return(0,v.jsxs)(i.Z,{open:e,onClose:function(n,t){"backdropClick"!==t&&p()},className:h.root,sx:{"& .MuiPaper-root":{padding:"1rem 2rem 2rem 1rem"}},children:[(0,v.jsxs)(r.Z,{className:h.title,children:[(0,v.jsxs)("div",{className:h.titleText,children:[k," ",b]}),(0,v.jsx)("div",{className:h.closeContainer,children:(0,v.jsx)(u.Z,{"aria-label":"close",className:h.closeButton,onClick:p,disableRipple:!0,size:"small",children:(0,v.jsx)(g.Z,{})})})]}),(0,v.jsx)(s.Z,{className:h.content,children:j}),(0,v.jsxs)(l.Z,{className:h.actions,children:[(0,v.jsx)(c.Z,(0,o.Z)((0,o.Z)({className:h.cancelButton,onClick:m||p,disabled:I,type:"button"},M),{},{variant:"outlined",color:"primary",children:y})),(0,v.jsx)(d.Z,(0,o.Z)((0,o.Z)({className:h.confirmButton,type:"button",onClick:f,loading:I,disabled:I,variant:"outlined",color:"secondary",loadingPosition:"start",startIcon:(0,v.jsx)(a.Fragment,{}),autoFocus:!0},N),{},{children:C}))]})]})}))},51719:function(n,t,e){e.r(t),e.d(t,{default:function(){return P}});var o=e(23430),a=e(18489),i=e(50390),r=e(34424),s=e(86509),l=e(4285),c=e(72462),d=e(28948),u=e(44149),g=e(30324),p=e(17777),m=e(23473),f=e(66964),v=e(25594),Z=e(21639),h=e(60656),x=e(98280),b=e(62559),I=(0,r.$j)(null,{setErrorSnackMessage:u.Ih})((function(n){var t=n.deleteOpen,e=n.selectedPod,a=n.closeDeleteModalAndRefresh,r=n.setErrorSnackMessage,s=(0,i.useState)(""),l=(0,o.Z)(s,2),c=l[0],d=l[1],u=(0,Z.Z)((function(){return a(!0)}),(function(n){return r(n)})),g=(0,o.Z)(u,2),p=g[0],I=g[1];return(0,b.jsx)(h.Z,{title:"Delete Pod",confirmText:"Delete",isOpen:t,titleIcon:(0,b.jsx)(x.Nv,{}),isLoading:p,onConfirm:function(){c===e.name?I("DELETE","/api/v1/namespaces/".concat(e.namespace,"/tenants/").concat(e.tenant,"/pods/").concat(e.name)):r({errorMessage:"Tenant name is incorrect",detailedError:""})},onClose:function(){return a(!1)},confirmButtonProps:{disabled:c!==e.name||p},confirmationContent:(0,b.jsxs)(m.Z,{children:["To continue please type ",(0,b.jsx)("b",{children:e.name})," in the box.",(0,b.jsx)(v.ZP,{item:!0,xs:12,children:(0,b.jsx)(f.Z,{id:"retype-pod",name:"retype-pod",onChange:function(n){d(n.target.value)},label:"",value:c})})]})})})),j=(0,r.$j)((function(n){return{loadingTenant:n.tenants.tenantDetails.loadingTenant}}),{setErrorSnackMessage:u.Ih}),P=(0,l.Z)((function(n){return(0,s.Z)((0,a.Z)((0,a.Z)((0,a.Z)({},c.oZ),c.VX),(0,c.Bz)(n.spacing(4))))}))(j((function(n){var t=n.classes,e=n.match,a=n.history,r=n.loadingTenant,s=(0,i.useState)([]),l=(0,o.Z)(s,2),c=l[0],m=l[1],f=(0,i.useState)(!0),Z=(0,o.Z)(f,2),h=Z[0],x=Z[1],j=(0,i.useState)(!1),P=(0,o.Z)(j,2),y=P[0],S=P[1],C=(0,i.useState)(null),L=(0,o.Z)(C,2),N=L[0],w=L[1],M=e.params.tenantName,E=e.params.tenantNamespace,k=[{type:"view",onClick:function(n){a.push("/namespaces/".concat(E,"/tenants/").concat(M,"/pods/").concat(n.name))}},{type:"delete",onClick:function(n){n.tenant=M,n.namespace=E,w(n),S(!0)}}];return(0,i.useEffect)((function(){r&&x(!0)}),[r]),(0,i.useEffect)((function(){h&&g.Z.invoke("GET","/api/v1/namespaces/".concat(E,"/tenants/").concat(M,"/pods")).then((function(n){for(var t=0;t :not(:first-of-type)":{marginLeft:8}})})),f=i.forwardRef((function(n,t){var e=(0,c.Z)({props:n,name:"MuiDialogActions"}),i=e.className,l=e.disableSpacing,d=void 0!==l&&l,f=(0,o.Z)(e,p),v=(0,a.Z)({},e,{disableSpacing:d}),Z=function(n){var t=n.classes,e={root:["root",!n.disableSpacing&&"spacing"]};return(0,s.Z)(e,u,t)}(v);return(0,g.jsx)(m,(0,a.Z)({className:(0,r.Z)(Z.root,i),ownerState:v,ref:t},f))}))},23473:function(n,t,e){e.d(t,{Z:function(){return f}});var o=e(1048),a=e(32793),i=e(50390),r=e(50076),s=e(8208),l=e(15573),c=e(35477),d=e(10594);function u(n){return(0,d.Z)("MuiDialogContentText",n)}(0,e(43349).Z)("MuiDialogContentText",["root"]);var g=e(62559),p=["children"],m=(0,s.ZP)(c.Z,{shouldForwardProp:function(n){return(0,s.FO)(n)||"classes"===n},name:"MuiDialogContentText",slot:"Root",overridesResolver:function(n,t){return t.root}})({}),f=i.forwardRef((function(n,t){var e=(0,l.Z)({props:n,name:"MuiDialogContentText"}),i=(0,o.Z)(e,p),s=function(n){var t=n.classes,e=(0,r.Z)({root:["root"]},u,t);return(0,a.Z)({},t,e)}(i);return(0,g.jsx)(m,(0,a.Z)({component:"p",variant:"body1",color:"text.secondary",ref:t,ownerState:i},e,{classes:s}))}))}}]); -//# sourceMappingURL=1719.06e59cd5.chunk.js.map \ No newline at end of file diff --git a/portal-ui/build/static/js/1719.06e59cd5.chunk.js.map b/portal-ui/build/static/js/1719.06e59cd5.chunk.js.map deleted file mode 100644 index d52f136c7..000000000 --- a/portal-ui/build/static/js/1719.06e59cd5.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/1719.06e59cd5.chunk.js","mappings":"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","sources":["screens/Console/Common/FormComponents/InputBoxWrapper/InputBoxWrapper.tsx","screens/Console/Common/Hooks/useApi.tsx","screens/Console/Common/ModalWrapper/ConfirmDialog.tsx","screens/Console/Tenants/TenantDetails/DeletePod.tsx","screens/Console/Tenants/TenantDetails/PodsSummary.tsx","../node_modules/@mui/lab/LoadingButton/loadingButtonClasses.js","../node_modules/@mui/lab/LoadingButton/LoadingButton.js","../node_modules/@mui/material/DialogActions/dialogActionsClasses.js","../node_modules/@mui/material/DialogActions/DialogActions.js","../node_modules/@mui/material/DialogContentText/dialogContentTextClasses.js","../node_modules/@mui/material/DialogContentText/DialogContentText.js"],"sourcesContent":["// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React from \"react\";\nimport {\n Grid,\n IconButton,\n InputLabel,\n TextField,\n TextFieldProps,\n Tooltip,\n} from \"@mui/material\";\nimport { OutlinedInputProps } from \"@mui/material/OutlinedInput\";\nimport { InputProps as StandardInputProps } from \"@mui/material/Input\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n fieldBasic,\n inputFieldStyles,\n tooltipHelper,\n} from \"../common/styleLibrary\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\nimport clsx from \"clsx\";\n\ninterface InputBoxProps {\n label: string;\n classes: any;\n onChange: (e: React.ChangeEvent) => void;\n value: string | boolean;\n id: string;\n name: string;\n disabled?: boolean;\n multiline?: boolean;\n type?: string;\n tooltip?: string;\n autoComplete?: string;\n index?: number;\n error?: string;\n required?: boolean;\n placeholder?: string;\n min?: string;\n max?: string;\n overlayIcon?: any;\n overlayAction?: () => void;\n overlayObject?: any;\n extraInputProps?: StandardInputProps[\"inputProps\"];\n noLabelMinWidth?: boolean;\n pattern?: string;\n autoFocus?: boolean;\n className?: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n textBoxContainer: {\n flexGrow: 1,\n position: \"relative\",\n },\n overlayAction: {\n position: \"absolute\",\n right: 5,\n top: 6,\n \"& svg\": {\n maxWidth: 15,\n maxHeight: 15,\n },\n \"&.withLabel\": {\n top: 5,\n },\n },\n inputLabel: {\n ...fieldBasic.inputLabel,\n fontWeight: \"normal\",\n },\n });\n\nconst inputStyles = makeStyles((theme: Theme) =>\n createStyles({\n ...inputFieldStyles,\n })\n);\n\nfunction InputField(props: TextFieldProps) {\n const classes = inputStyles();\n\n return (\n }\n {...props}\n />\n );\n}\n\nconst InputBoxWrapper = ({\n label,\n onChange,\n value,\n id,\n name,\n type = \"text\",\n autoComplete = \"off\",\n disabled = false,\n multiline = false,\n tooltip = \"\",\n index = 0,\n error = \"\",\n required = false,\n placeholder = \"\",\n min,\n max,\n overlayIcon = null,\n overlayObject = null,\n extraInputProps = {},\n overlayAction,\n noLabelMinWidth = false,\n pattern = \"\",\n autoFocus = false,\n classes,\n className = \"\",\n}: InputBoxProps) => {\n let inputProps: any = { \"data-index\": index, ...extraInputProps };\n\n if (type === \"number\" && min) {\n inputProps[\"min\"] = min;\n }\n\n if (type === \"number\" && max) {\n inputProps[\"max\"] = max;\n }\n\n if (pattern !== \"\") {\n inputProps[\"pattern\"] = pattern;\n }\n\n return (\n \n \n {label !== \"\" && (\n \n \n {label}\n {required ? \"*\" : \"\"}\n \n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n \n )}\n\n
\n \n {overlayIcon && (\n \n {\n overlayAction();\n }\n : () => null\n }\n size={\"small\"}\n disableFocusRipple={false}\n disableRipple={false}\n disableTouchRipple={false}\n >\n {overlayIcon}\n \n
\n )}\n {overlayObject && (\n \n {overlayObject}\n \n )}\n \n \n
\n );\n};\n\nexport default withStyles(styles)(InputBoxWrapper);\n","import { useState } from \"react\";\nimport api from \"../../../../common/api\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\n\ntype NoReturnFunction = (param?: any) => void;\ntype ApiMethodToInvoke = (method: string, url: string, data?: any) => void;\ntype IsApiInProgress = boolean;\n\nconst useApi = (\n onSuccess: NoReturnFunction,\n onError: NoReturnFunction\n): [IsApiInProgress, ApiMethodToInvoke] => {\n const [isLoading, setIsLoading] = useState(false);\n\n const callApi = (method: string, url: string, data?: any) => {\n setIsLoading(true);\n api\n .invoke(method, url, data)\n .then((res: any) => {\n setIsLoading(false);\n onSuccess(res);\n })\n .catch((err: ErrorResponseHandler) => {\n setIsLoading(false);\n onError(err);\n });\n };\n\n return [isLoading, callApi];\n};\n\nexport default useApi;\n","import React from \"react\";\nimport {\n Button,\n ButtonProps,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n} from \"@mui/material\";\nimport { LoadingButton } from \"@mui/lab\";\nimport IconButton from \"@mui/material/IconButton\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { deleteDialogStyles } from \"../FormComponents/common/styleLibrary\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...deleteDialogStyles,\n });\n\ntype ConfirmDialogProps = {\n isOpen?: boolean;\n onClose: () => void;\n onCancel?: () => void;\n onConfirm: () => void;\n classes?: any;\n title: string;\n isLoading?: boolean;\n confirmationContent: React.ReactNode | React.ReactNode[];\n cancelText?: string;\n confirmText?: string;\n confirmButtonProps?: Partial;\n cancelButtonProps?: Partial;\n titleIcon?: React.ReactNode;\n};\n\nconst ConfirmDialog = ({\n isOpen = false,\n onClose,\n onCancel,\n onConfirm,\n classes = {},\n title = \"\",\n isLoading,\n confirmationContent,\n cancelText = \"Cancel\",\n confirmText = \"Confirm\",\n confirmButtonProps = {},\n cancelButtonProps = {},\n titleIcon = null,\n}: ConfirmDialogProps) => {\n return (\n {\n if (reason !== \"backdropClick\") {\n onClose(); // close on Esc but not on click outside\n }\n }}\n className={classes.root}\n sx={{\n \"& .MuiPaper-root\": {\n padding: \"1rem 2rem 2rem 1rem\",\n },\n }}\n >\n \n
\n {titleIcon} {title}\n
\n
\n \n \n \n
\n
\n\n \n {confirmationContent}\n \n \n \n {cancelText}\n \n\n }\n autoFocus\n {...confirmButtonProps}\n >\n {confirmText}\n \n \n \n );\n};\n\nexport default withStyles(styles)(ConfirmDialog);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport { DialogContentText } from \"@mui/material\";\nimport { IPodListElement } from \"../ListTenants/types\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport Grid from \"@mui/material/Grid\";\nimport { connect } from \"react-redux\";\nimport { setErrorSnackMessage } from \"../../../../actions\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport useApi from \"../../Common/Hooks/useApi\";\nimport ConfirmDialog from \"../../Common/ModalWrapper/ConfirmDialog\";\nimport { ConfirmDeleteIcon } from \"../../../../icons\";\n\ninterface IDeletePod {\n deleteOpen: boolean;\n selectedPod: IPodListElement;\n closeDeleteModalAndRefresh: (refreshList: boolean) => any;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst DeletePod = ({\n deleteOpen,\n selectedPod,\n closeDeleteModalAndRefresh,\n setErrorSnackMessage,\n}: IDeletePod) => {\n const [retypePod, setRetypePod] = useState(\"\");\n\n const onDelSuccess = () => closeDeleteModalAndRefresh(true);\n const onDelError = (err: ErrorResponseHandler) => setErrorSnackMessage(err);\n const onClose = () => closeDeleteModalAndRefresh(false);\n\n const [deleteLoading, invokeDeleteApi] = useApi(onDelSuccess, onDelError);\n\n const onConfirmDelete = () => {\n if (retypePod !== selectedPod.name) {\n setErrorSnackMessage({\n errorMessage: \"Tenant name is incorrect\",\n detailedError: \"\",\n });\n return;\n }\n invokeDeleteApi(\n \"DELETE\",\n `/api/v1/namespaces/${selectedPod.namespace}/tenants/${selectedPod.tenant}/pods/${selectedPod.name}`\n );\n };\n\n return (\n }\n isLoading={deleteLoading}\n onConfirm={onConfirmDelete}\n onClose={onClose}\n confirmButtonProps={{\n disabled: retypePod !== selectedPod.name || deleteLoading,\n }}\n confirmationContent={\n \n To continue please type {selectedPod.name} in the box.\n \n ) => {\n setRetypePod(event.target.value);\n }}\n label=\"\"\n value={retypePod}\n />\n \n \n }\n />\n );\n};\n\nconst connector = connect(null, {\n setErrorSnackMessage,\n});\n\nexport default connector(DeletePod);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n containerForHeader,\n tableStyles,\n tenantDetailsStyles,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport { niceDays } from \"../../../../common/utils\";\nimport { IPodListElement } from \"../ListTenants/types\";\nimport { setErrorSnackMessage } from \"../../../../actions\";\nimport api from \"../../../../common/api\";\nimport TableWrapper from \"../../Common/TableWrapper/TableWrapper\";\nimport { AppState } from \"../../../../store\";\nimport { setTenantDetailsLoad } from \"../actions\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport DeletePod from \"./DeletePod\";\nimport { Grid } from \"@mui/material\";\n\ninterface IPodsSummary {\n classes: any;\n match: any;\n history: any;\n loadingTenant: boolean;\n setTenantDetailsLoad: typeof setTenantDetailsLoad;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...tenantDetailsStyles,\n ...tableStyles,\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst PodsSummary = ({\n classes,\n match,\n history,\n loadingTenant,\n}: IPodsSummary) => {\n const [pods, setPods] = useState([]);\n const [loadingPods, setLoadingPods] = useState(true);\n const [deleteOpen, setDeleteOpen] = useState(false);\n const [selectedPod, setSelectedPod] = useState(null);\n\n const tenantName = match.params[\"tenantName\"];\n const tenantNamespace = match.params[\"tenantNamespace\"];\n\n const podViewAction = (pod: IPodListElement) => {\n history.push(\n `/namespaces/${tenantNamespace}/tenants/${tenantName}/pods/${pod.name}`\n );\n return;\n };\n\n const closeDeleteModalAndRefresh = (reloadData: boolean) => {\n setDeleteOpen(false);\n setLoadingPods(true);\n };\n\n const confirmDeletePod = (pod: IPodListElement) => {\n pod.tenant = tenantName;\n pod.namespace = tenantNamespace;\n setSelectedPod(pod);\n setDeleteOpen(true);\n };\n\n const podTableActions = [\n { type: \"view\", onClick: podViewAction },\n { type: \"delete\", onClick: confirmDeletePod },\n ];\n\n useEffect(() => {\n if (loadingTenant) {\n setLoadingPods(true);\n }\n }, [loadingTenant]);\n\n useEffect(() => {\n if (loadingPods) {\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${tenantNamespace}/tenants/${tenantName}/pods`\n )\n .then((result: IPodListElement[]) => {\n for (let i = 0; i < result.length; i++) {\n let currentTime = (Date.now() / 1000) | 0;\n result[i].time = niceDays(\n (currentTime - parseInt(result[i].timeCreated)).toString()\n );\n }\n setPods(result);\n setLoadingPods(false);\n })\n .catch((err: ErrorResponseHandler) => {\n setErrorSnackMessage({\n errorMessage: \"Error loading pods\",\n detailedError: err.detailedError,\n });\n });\n }\n }, [loadingPods, tenantName, tenantNamespace]);\n\n return (\n \n {deleteOpen && (\n \n )}\n

Pods

\n \n {\n return input !== null ? input : 0;\n },\n },\n { label: \"Node\", elementKey: \"node\" },\n ]}\n isLoading={loadingPods}\n records={pods}\n itemActions={podTableActions}\n entityName=\"Servers\"\n idField=\"name\"\n />\n \n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n loadingTenant: state.tenants.tenantDetails.loadingTenant,\n});\n\nconst connector = connect(mapState, {\n setErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(PodsSummary));\n","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getLoadingButtonUtilityClass(slot) {\n return generateUtilityClass('MuiLoadingButton', slot);\n}\nconst loadingButtonClasses = generateUtilityClasses('MuiLoadingButton', ['root', 'loading', 'loadingIndicator', 'loadingIndicatorCenter', 'loadingIndicatorStart', 'loadingIndicatorEnd', 'endIconLoadingEnd', 'startIconLoadingStart']);\nexport default loadingButtonClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"children\", \"disabled\", \"id\", \"loading\", \"loadingIndicator\", \"loadingPosition\", \"variant\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { chainPropTypes } from '@mui/utils';\nimport { capitalize, unstable_useId as useId } from '@mui/material/utils';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport { styled, useThemeProps } from '@mui/material/styles';\nimport Button from '@mui/material/Button';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport loadingButtonClasses, { getLoadingButtonUtilityClass } from './loadingButtonClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n\nconst useUtilityClasses = ownerState => {\n const {\n loading,\n loadingPosition,\n classes\n } = ownerState;\n const slots = {\n root: ['root', loading && 'loading'],\n startIcon: [loading && `startIconLoading${capitalize(loadingPosition)}`],\n endIcon: [loading && `endIconLoading${capitalize(loadingPosition)}`],\n loadingIndicator: ['loadingIndicator', loading && `loadingIndicator${capitalize(loadingPosition)}`]\n };\n const composedClasses = composeClasses(slots, getLoadingButtonUtilityClass, classes);\n return _extends({}, classes, composedClasses);\n}; // TODO use `import { rootShouldForwardProp } from '../styles/styled';` once move to core\n\n\nconst rootShouldForwardProp = prop => prop !== 'ownerState' && prop !== 'theme' && prop !== 'sx' && prop !== 'as' && prop !== 'classes';\n\nconst LoadingButtonRoot = styled(Button, {\n shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',\n name: 'MuiLoadingButton',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n return [styles.root, styles.startIconLoadingStart && {\n [`& .${loadingButtonClasses.startIconLoadingStart}`]: styles.startIconLoadingStart\n }, styles.endIconLoadingEnd && {\n [`& .${loadingButtonClasses.endIconLoadingEnd}`]: styles.endIconLoadingEnd\n }];\n }\n})(({\n ownerState,\n theme\n}) => _extends({\n [`& .${loadingButtonClasses.startIconLoadingStart}, & .${loadingButtonClasses.endIconLoadingEnd}`]: {\n transition: theme.transitions.create(['opacity'], {\n duration: theme.transitions.duration.short\n }),\n opacity: 0\n }\n}, ownerState.loadingPosition === 'center' && {\n transition: theme.transitions.create(['background-color', 'box-shadow', 'border-color'], {\n duration: theme.transitions.duration.short\n }),\n [`&.${loadingButtonClasses.loading}`]: {\n color: 'transparent'\n }\n}, ownerState.loadingPosition === 'start' && ownerState.fullWidth && {\n [`& .${loadingButtonClasses.startIconLoadingStart}, & .${loadingButtonClasses.endIconLoadingEnd}`]: {\n transition: theme.transitions.create(['opacity'], {\n duration: theme.transitions.duration.short\n }),\n opacity: 0,\n marginRight: -8\n }\n}, ownerState.loadingPosition === 'end' && ownerState.fullWidth && {\n [`& .${loadingButtonClasses.startIconLoadingStart}, & .${loadingButtonClasses.endIconLoadingEnd}`]: {\n transition: theme.transitions.create(['opacity'], {\n duration: theme.transitions.duration.short\n }),\n opacity: 0,\n marginLeft: -8\n }\n}));\nconst LoadingButtonLoadingIndicator = styled('div', {\n name: 'MuiLoadingButton',\n slot: 'LoadingIndicator',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.loadingIndicator, styles[`loadingIndicator${capitalize(ownerState.loadingPosition)}`]];\n }\n})(({\n theme,\n ownerState\n}) => _extends({\n position: 'absolute',\n visibility: 'visible',\n display: 'flex'\n}, ownerState.loadingPosition === 'start' && (ownerState.variant === 'outlined' || ownerState.variant === 'contained') && {\n left: 14\n}, ownerState.loadingPosition === 'start' && ownerState.variant === 'text' && {\n left: 6\n}, ownerState.loadingPosition === 'center' && {\n left: '50%',\n transform: 'translate(-50%)',\n color: theme.palette.action.disabled\n}, ownerState.loadingPosition === 'end' && (ownerState.variant === 'outlined' || ownerState.variant === 'contained') && {\n right: 14\n}, ownerState.loadingPosition === 'end' && ownerState.variant === 'text' && {\n right: 6\n}, ownerState.loadingPosition === 'start' && ownerState.fullWidth && {\n position: 'relative',\n left: -10\n}, ownerState.loadingPosition === 'end' && ownerState.fullWidth && {\n position: 'relative',\n right: -10\n}));\nconst LoadingButton = /*#__PURE__*/React.forwardRef(function LoadingButton(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiLoadingButton'\n });\n\n const {\n children,\n disabled = false,\n id: idProp,\n loading = false,\n loadingIndicator: loadingIndicatorProp,\n loadingPosition = 'center',\n variant = 'text'\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n const id = useId(idProp);\n const loadingIndicator = loadingIndicatorProp != null ? loadingIndicatorProp : /*#__PURE__*/_jsx(CircularProgress, {\n \"aria-labelledby\": id,\n color: \"inherit\",\n size: 16\n });\n\n const ownerState = _extends({}, props, {\n disabled,\n loading,\n loadingIndicator,\n loadingPosition,\n variant\n });\n\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsx(LoadingButtonRoot, _extends({\n disabled: disabled || loading,\n id: id,\n ref: ref\n }, other, {\n variant: variant,\n classes: classes,\n ownerState: ownerState,\n children: ownerState.loadingPosition === 'end' ? /*#__PURE__*/_jsxs(React.Fragment, {\n children: [children, loading && /*#__PURE__*/_jsx(LoadingButtonLoadingIndicator, {\n className: classes.loadingIndicator,\n ownerState: ownerState,\n children: loadingIndicator\n })]\n }) : /*#__PURE__*/_jsxs(React.Fragment, {\n children: [loading && /*#__PURE__*/_jsx(LoadingButtonLoadingIndicator, {\n className: classes.loadingIndicator,\n ownerState: ownerState,\n children: loadingIndicator\n }), children]\n })\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? LoadingButton.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n\n /**\n * If `true`, the component is disabled.\n * @default false\n */\n disabled: PropTypes.bool,\n\n /**\n * @ignore\n */\n id: PropTypes.string,\n\n /**\n * If `true`, the loading indicator is shown.\n * @default false\n */\n loading: PropTypes.bool,\n\n /**\n * Element placed before the children if the button is in loading state.\n * The node should contain an element with `role=\"progressbar\"` with an accessible name.\n * By default we render a `CircularProgress` that is labelled by the button itself.\n * @default \n */\n loadingIndicator: PropTypes.node,\n\n /**\n * The loading indicator can be positioned on the start, end, or the center of the button.\n * @default 'center'\n */\n loadingPosition: chainPropTypes(PropTypes.oneOf(['start', 'end', 'center']), props => {\n if (props.loadingPosition === 'start' && !props.startIcon) {\n return new Error(`MUI: The loadingPosition=\"start\" should be used in combination with startIcon.`);\n }\n\n if (props.loadingPosition === 'end' && !props.endIcon) {\n return new Error(`MUI: The loadingPosition=\"end\" should be used in combination with endIcon.`);\n }\n\n return null;\n }),\n\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n\n /**\n * The variant to use.\n * @default 'text'\n */\n variant: PropTypes.oneOf(['contained', 'outlined', 'text'])\n} : void 0;\nexport default LoadingButton;","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getDialogActionsUtilityClass(slot) {\n return generateUtilityClass('MuiDialogActions', slot);\n}\nconst dialogActionsClasses = generateUtilityClasses('MuiDialogActions', ['root', 'spacing']);\nexport default dialogActionsClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"className\", \"disableSpacing\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport styled from '../styles/styled';\nimport useThemeProps from '../styles/useThemeProps';\nimport { getDialogActionsUtilityClass } from './dialogActionsClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n disableSpacing\n } = ownerState;\n const slots = {\n root: ['root', !disableSpacing && 'spacing']\n };\n return composeClasses(slots, getDialogActionsUtilityClass, classes);\n};\n\nconst DialogActionsRoot = styled('div', {\n name: 'MuiDialogActions',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, !ownerState.disableSpacing && styles.spacing];\n }\n})(({\n ownerState\n}) => _extends({\n display: 'flex',\n alignItems: 'center',\n padding: 8,\n justifyContent: 'flex-end',\n flex: '0 0 auto'\n}, !ownerState.disableSpacing && {\n '& > :not(:first-of-type)': {\n marginLeft: 8\n }\n}));\nconst DialogActions = /*#__PURE__*/React.forwardRef(function DialogActions(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiDialogActions'\n });\n\n const {\n className,\n disableSpacing = false\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n const ownerState = _extends({}, props, {\n disableSpacing\n });\n\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsx(DialogActionsRoot, _extends({\n className: clsx(classes.root, className),\n ownerState: ownerState,\n ref: ref\n }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? DialogActions.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n\n /**\n * @ignore\n */\n className: PropTypes.string,\n\n /**\n * If `true`, the actions do not have additional margin.\n * @default false\n */\n disableSpacing: PropTypes.bool,\n\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default DialogActions;","import { generateUtilityClass, generateUtilityClasses } from '@mui/base';\nexport function getDialogContentTextUtilityClass(slot) {\n return generateUtilityClass('MuiDialogContentText', slot);\n}\nconst dialogContentTextClasses = generateUtilityClasses('MuiDialogContentText', ['root']);\nexport default dialogContentTextClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"children\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport styled, { rootShouldForwardProp } from '../styles/styled';\nimport useThemeProps from '../styles/useThemeProps';\nimport Typography from '../Typography';\nimport { getDialogContentTextUtilityClass } from './dialogContentTextClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n\nconst useUtilityClasses = ownerState => {\n const {\n classes\n } = ownerState;\n const slots = {\n root: ['root']\n };\n const composedClasses = composeClasses(slots, getDialogContentTextUtilityClass, classes);\n return _extends({}, classes, composedClasses);\n};\n\nconst DialogContentTextRoot = styled(Typography, {\n shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',\n name: 'MuiDialogContentText',\n slot: 'Root',\n overridesResolver: (props, styles) => styles.root\n})({});\nconst DialogContentText = /*#__PURE__*/React.forwardRef(function DialogContentText(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiDialogContentText'\n });\n\n const ownerState = _objectWithoutPropertiesLoose(props, _excluded);\n\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsx(DialogContentTextRoot, _extends({\n component: \"p\",\n variant: \"body1\",\n color: \"text.secondary\",\n ref: ref,\n ownerState: ownerState\n }, props, {\n classes: classes\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? DialogContentText.propTypes\n/* remove-proptypes */\n= {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default DialogContentText;"],"names":["inputStyles","makeStyles","theme","createStyles","inputFieldStyles","InputField","props","classes","InputProps","withStyles","fieldBasic","tooltipHelper","textBoxContainer","flexGrow","position","overlayAction","right","top","maxWidth","maxHeight","inputLabel","fontWeight","label","onChange","value","id","name","type","autoComplete","disabled","multiline","tooltip","index","error","required","placeholder","min","max","overlayIcon","overlayObject","extraInputProps","noLabelMinWidth","pattern","autoFocus","className","inputProps","container","clsx","errorInField","inputBoxContainer","htmlFor","noMinWidthLabel","tooltipContainer","title","placement","fullWidth","helperText","inputRebase","onClick","size","disableFocusRipple","disableRipple","disableTouchRipple","onSuccess","onError","useState","isLoading","setIsLoading","method","url","data","api","then","res","catch","err","deleteDialogStyles","isOpen","onClose","onCancel","onConfirm","confirmationContent","cancelText","confirmText","confirmButtonProps","cancelButtonProps","titleIcon","open","event","reason","root","sx","padding","titleText","closeContainer","closeButton","content","actions","cancelButton","variant","color","confirmButton","loading","loadingPosition","startIcon","connect","setErrorSnackMessage","deleteOpen","selectedPod","closeDeleteModalAndRefresh","retypePod","setRetypePod","useApi","deleteLoading","invokeDeleteApi","ConfirmDialog","namespace","tenant","errorMessage","detailedError","DialogContentText","Grid","item","xs","InputBoxWrapper","target","connector","state","loadingTenant","tenants","tenantDetails","tenantDetailsStyles","tableStyles","containerForHeader","spacing","match","history","pods","setPods","loadingPods","setLoadingPods","setDeleteOpen","setSelectedPod","tenantName","params","tenantNamespace","podTableActions","pod","push","useEffect","result","i","length","currentTime","Date","now","time","niceDays","parseInt","timeCreated","toString","Fragment","reloadData","sectionTitle","tableBlock","TableWrapper","columns","elementKey","renderFunction","input","records","itemActions","entityName","idField","getLoadingButtonUtilityClass","slot","generateUtilityClass","generateUtilityClasses","_excluded","LoadingButtonRoot","styled","Button","shouldForwardProp","prop","rootShouldForwardProp","overridesResolver","styles","startIconLoadingStart","loadingButtonClasses","endIconLoadingEnd","ownerState","_extends","transition","transitions","create","duration","short","opacity","marginRight","marginLeft","LoadingButtonLoadingIndicator","loadingIndicator","capitalize","visibility","display","left","transform","palette","action","React","inProps","ref","useThemeProps","children","idProp","loadingIndicatorProp","other","_objectWithoutPropertiesLoose","useId","_jsx","CircularProgress","slots","endIcon","composedClasses","composeClasses","useUtilityClasses","_jsxs","getDialogActionsUtilityClass","DialogActionsRoot","disableSpacing","alignItems","justifyContent","flex","getDialogContentTextUtilityClass","DialogContentTextRoot","Typography","component"],"sourceRoot":""} \ No newline at end of file diff --git a/portal-ui/build/static/js/1719.c433d41f.chunk.js b/portal-ui/build/static/js/1719.c433d41f.chunk.js new file mode 100644 index 000000000..88ae8d099 --- /dev/null +++ b/portal-ui/build/static/js/1719.c433d41f.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1719],{66964:function(e,n,t){var a=t(18489),o=t(50390),i=t(12066),s=t(25594),l=t(36554),r=t(94187),c=t(95467),d=t(86509),u=t(62449),m=t(4285),p=t(72462),h=t(97538),v=t(44977),x=t(62559),Z=(0,u.Z)((function(e){return(0,d.Z)((0,a.Z)({},p.gM))}));function f(e){var n=Z();return(0,x.jsx)(i.Z,(0,a.Z)({InputProps:{classes:n}},e))}n.Z=(0,m.Z)((function(e){return(0,d.Z)((0,a.Z)((0,a.Z)((0,a.Z)({},p.YI),p.Hr),{},{textBoxContainer:{flexGrow:1,position:"relative"},overlayAction:{position:"absolute",right:5,top:6,"& svg":{maxWidth:15,maxHeight:15},"&.withLabel":{top:5}},inputLabel:(0,a.Z)((0,a.Z)({},p.YI.inputLabel),{},{fontWeight:"normal"})}))}))((function(e){var n=e.label,t=e.onChange,i=e.value,d=e.id,u=e.name,m=e.type,p=void 0===m?"text":m,Z=e.autoComplete,j=void 0===Z?"off":Z,b=e.disabled,g=void 0!==b&&b,C=e.multiline,y=void 0!==C&&C,N=e.tooltip,P=void 0===N?"":N,k=e.index,I=void 0===k?0:k,T=e.error,L=void 0===T?"":T,E=e.required,S=void 0!==E&&E,w=e.placeholder,F=void 0===w?"":w,B=e.min,M=e.max,A=e.overlayIcon,K=void 0===A?null:A,R=e.overlayObject,D=void 0===R?null:R,O=e.extraInputProps,W=void 0===O?{}:O,z=e.overlayAction,G=e.noLabelMinWidth,H=void 0!==G&&G,Y=e.pattern,$=void 0===Y?"":Y,_=e.autoFocus,q=void 0!==_&&_,Q=e.classes,U=e.className,V=void 0===U?"":U,X=e.onKeyPress,J=(0,a.Z)({"data-index":I},W);return"number"===p&&B&&(J.min=B),"number"===p&&M&&(J.max=M),""!==$&&(J.pattern=$),(0,x.jsx)(o.Fragment,{children:(0,x.jsxs)(s.ZP,{container:!0,className:(0,v.Z)(""!==V?V:"",""!==L?Q.errorInField:Q.inputBoxContainer),children:[""!==n&&(0,x.jsxs)(l.Z,{htmlFor:d,className:H?Q.noMinWidthLabel:Q.inputLabel,children:[(0,x.jsxs)("span",{children:[n,S?"*":""]}),""!==P&&(0,x.jsx)("div",{className:Q.tooltipContainer,children:(0,x.jsx)(r.Z,{title:P,placement:"top-start",children:(0,x.jsx)("div",{className:Q.tooltip,children:(0,x.jsx)(h.Z,{})})})})]}),(0,x.jsxs)("div",{className:Q.textBoxContainer,children:[(0,x.jsx)(f,{id:d,name:u,fullWidth:!0,value:i,autoFocus:q,disabled:g,onChange:t,type:p,multiline:y,autoComplete:j,inputProps:J,error:""!==L,helperText:L,placeholder:F,className:Q.inputRebase,onKeyPress:X}),K&&(0,x.jsx)("div",{className:"".concat(Q.overlayAction," ").concat(""!==n?"withLabel":""),children:(0,x.jsx)(c.Z,{onClick:z?function(){z()}:function(){return null},size:"small",disableFocusRipple:!1,disableRipple:!1,disableTouchRipple:!1,children:K})}),D&&(0,x.jsx)("div",{className:"".concat(Q.overlayAction," ").concat(""!==n?"withLabel":""),children:D})]})]})})}))},21639:function(e,n,t){var a=t(23430),o=t(50390),i=t(30324);n.Z=function(e,n){var t=(0,o.useState)(!1),s=(0,a.Z)(t,2),l=s[0],r=s[1];return[l,function(t,a,o){r(!0),i.Z.invoke(t,a,o).then((function(n){r(!1),e(n)})).catch((function(e){r(!1),n(e)}))}]}},60656:function(e,n,t){var a=t(18489),o=t(50390),i=t(84402),s=t(78426),l=t(93085),r=t(7887),c=t(66946),d=t(14476),u=t(95467),m=t(21278),p=t(86509),h=t(4285),v=t(72462),x=t(62559);n.Z=(0,h.Z)((function(e){return(0,p.Z)((0,a.Z)({},v.Qw))}))((function(e){var n=e.isOpen,t=void 0!==n&&n,p=e.onClose,h=e.onCancel,v=e.onConfirm,Z=e.classes,f=void 0===Z?{}:Z,j=e.title,b=void 0===j?"":j,g=e.isLoading,C=e.confirmationContent,y=e.cancelText,N=void 0===y?"Cancel":y,P=e.confirmText,k=void 0===P?"Confirm":P,I=e.confirmButtonProps,T=void 0===I?{}:I,L=e.cancelButtonProps,E=void 0===L?{}:L,S=e.titleIcon,w=void 0===S?null:S;return(0,x.jsxs)(i.Z,{open:t,onClose:function(e,n){"backdropClick"!==n&&p()},className:f.root,sx:{"& .MuiPaper-root":{padding:"1rem 2rem 2rem 1rem"}},children:[(0,x.jsxs)(s.Z,{className:f.title,children:[(0,x.jsxs)("div",{className:f.titleText,children:[w," ",b]}),(0,x.jsx)("div",{className:f.closeContainer,children:(0,x.jsx)(u.Z,{"aria-label":"close",className:f.closeButton,onClick:p,disableRipple:!0,size:"small",children:(0,x.jsx)(m.Z,{})})})]}),(0,x.jsx)(l.Z,{className:f.content,children:C}),(0,x.jsxs)(r.Z,{className:f.actions,children:[(0,x.jsx)(c.Z,(0,a.Z)((0,a.Z)({className:f.cancelButton,onClick:h||p,disabled:g,type:"button"},E),{},{variant:"outlined",color:"primary",children:N})),(0,x.jsx)(d.Z,(0,a.Z)((0,a.Z)({className:f.confirmButton,type:"button",onClick:v,loading:g,disabled:g,variant:"outlined",color:"secondary",loadingPosition:"start",startIcon:(0,x.jsx)(o.Fragment,{}),autoFocus:!0},T),{},{children:k}))]})]})}))},51719:function(e,n,t){t.r(n),t.d(n,{default:function(){return k}});var a=t(23430),o=t(18489),i=t(50390),s=t(34424),l=t(86509),r=t(4285),c=t(72462),d=t(28948),u=t(44149),m=t(30324),p=t(8174),h=t(23473),v=t(66964),x=t(25594),Z=t(21639),f=t(60656),j=t(85615),b=t(62559),g=(0,s.$j)(null,{setErrorSnackMessage:u.Ih})((function(e){var n=e.deleteOpen,t=e.selectedPod,o=e.closeDeleteModalAndRefresh,s=e.setErrorSnackMessage,l=(0,i.useState)(""),r=(0,a.Z)(l,2),c=r[0],d=r[1],u=(0,Z.Z)((function(){return o(!0)}),(function(e){return s(e)})),m=(0,a.Z)(u,2),p=m[0],g=m[1];return(0,b.jsx)(f.Z,{title:"Delete Pod",confirmText:"Delete",isOpen:n,titleIcon:(0,b.jsx)(j.Nv,{}),isLoading:p,onConfirm:function(){c===t.name?g("DELETE","/api/v1/namespaces/".concat(t.namespace,"/tenants/").concat(t.tenant,"/pods/").concat(t.name)):s({errorMessage:"Tenant name is incorrect",detailedError:""})},onClose:function(){return o(!1)},confirmButtonProps:{disabled:c!==t.name||p},confirmationContent:(0,b.jsxs)(h.Z,{children:["To continue please type ",(0,b.jsx)("b",{children:t.name})," in the box.",(0,b.jsx)(x.ZP,{item:!0,xs:12,children:(0,b.jsx)(v.Z,{id:"retype-pod",name:"retype-pod",onChange:function(e){d(e.target.value)},label:"",value:c})})]})})})),C=t(12066),y=t(65771),N=t(13336),P=(0,s.$j)((function(e){return{loadingTenant:e.tenants.tenantDetails.loadingTenant}}),{setErrorSnackMessage:u.Ih}),k=(0,r.Z)((function(e){return(0,l.Z)((0,o.Z)((0,o.Z)((0,o.Z)({},c.oZ),c.VX),(0,c.Bz)(e.spacing(4))))}))(P((function(e){var n=e.classes,t=e.match,o=e.history,s=e.loadingTenant,l=(0,i.useState)([]),r=(0,a.Z)(l,2),c=r[0],h=r[1],v=(0,i.useState)(!0),Z=(0,a.Z)(v,2),f=Z[0],j=Z[1],P=(0,i.useState)(!1),k=(0,a.Z)(P,2),I=k[0],T=k[1],L=(0,i.useState)(null),E=(0,a.Z)(L,2),S=E[0],w=E[1],F=(0,i.useState)(""),B=(0,a.Z)(F,2),M=B[0],A=B[1],K=t.params.tenantName,R=t.params.tenantNamespace,D=c.filter((function(e){return e.name.toLowerCase().includes(M.toLowerCase())})),O=[{type:"view",onClick:function(e){o.push("/namespaces/".concat(R,"/tenants/").concat(K,"/pods/").concat(e.name))}},{type:"delete",onClick:function(e){e.tenant=K,e.namespace=R,w(e),T(!0)}}];return(0,i.useEffect)((function(){s&&j(!0)}),[s]),(0,i.useEffect)((function(){f&&m.Z.invoke("GET","/api/v1/namespaces/".concat(R,"/tenants/").concat(K,"/pods")).then((function(e){for(var n=0;n.\nimport React from \"react\";\nimport {\n Grid,\n IconButton,\n InputLabel,\n TextField,\n TextFieldProps,\n Tooltip,\n} from \"@mui/material\";\nimport { OutlinedInputProps } from \"@mui/material/OutlinedInput\";\nimport { InputProps as StandardInputProps } from \"@mui/material/Input\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n fieldBasic,\n inputFieldStyles,\n tooltipHelper,\n} from \"../common/styleLibrary\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\nimport clsx from \"clsx\";\n\ninterface InputBoxProps {\n label: string;\n classes: any;\n onChange: (e: React.ChangeEvent) => void;\n onKeyPress?: (e: any) => void;\n value: string | boolean;\n id: string;\n name: string;\n disabled?: boolean;\n multiline?: boolean;\n type?: string;\n tooltip?: string;\n autoComplete?: string;\n index?: number;\n error?: string;\n required?: boolean;\n placeholder?: string;\n min?: string;\n max?: string;\n overlayIcon?: any;\n overlayAction?: () => void;\n overlayObject?: any;\n extraInputProps?: StandardInputProps[\"inputProps\"];\n noLabelMinWidth?: boolean;\n pattern?: string;\n autoFocus?: boolean;\n className?: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n textBoxContainer: {\n flexGrow: 1,\n position: \"relative\",\n },\n overlayAction: {\n position: \"absolute\",\n right: 5,\n top: 6,\n \"& svg\": {\n maxWidth: 15,\n maxHeight: 15,\n },\n \"&.withLabel\": {\n top: 5,\n },\n },\n inputLabel: {\n ...fieldBasic.inputLabel,\n fontWeight: \"normal\",\n },\n });\n\nconst inputStyles = makeStyles((theme: Theme) =>\n createStyles({\n ...inputFieldStyles,\n })\n);\n\nfunction InputField(props: TextFieldProps) {\n const classes = inputStyles();\n\n return (\n }\n {...props}\n />\n );\n}\n\nconst InputBoxWrapper = ({\n label,\n onChange,\n value,\n id,\n name,\n type = \"text\",\n autoComplete = \"off\",\n disabled = false,\n multiline = false,\n tooltip = \"\",\n index = 0,\n error = \"\",\n required = false,\n placeholder = \"\",\n min,\n max,\n overlayIcon = null,\n overlayObject = null,\n extraInputProps = {},\n overlayAction,\n noLabelMinWidth = false,\n pattern = \"\",\n autoFocus = false,\n classes,\n className = \"\",\n onKeyPress,\n}: InputBoxProps) => {\n let inputProps: any = { \"data-index\": index, ...extraInputProps };\n\n if (type === \"number\" && min) {\n inputProps[\"min\"] = min;\n }\n\n if (type === \"number\" && max) {\n inputProps[\"max\"] = max;\n }\n\n if (pattern !== \"\") {\n inputProps[\"pattern\"] = pattern;\n }\n\n return (\n \n \n {label !== \"\" && (\n \n \n {label}\n {required ? \"*\" : \"\"}\n \n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n \n )}\n\n
\n \n {overlayIcon && (\n \n {\n overlayAction();\n }\n : () => null\n }\n size={\"small\"}\n disableFocusRipple={false}\n disableRipple={false}\n disableTouchRipple={false}\n >\n {overlayIcon}\n \n
\n )}\n {overlayObject && (\n \n {overlayObject}\n \n )}\n \n \n
\n );\n};\n\nexport default withStyles(styles)(InputBoxWrapper);\n","import { useState } from \"react\";\nimport api from \"../../../../common/api\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\n\ntype NoReturnFunction = (param?: any) => void;\ntype ApiMethodToInvoke = (method: string, url: string, data?: any) => void;\ntype IsApiInProgress = boolean;\n\nconst useApi = (\n onSuccess: NoReturnFunction,\n onError: NoReturnFunction\n): [IsApiInProgress, ApiMethodToInvoke] => {\n const [isLoading, setIsLoading] = useState(false);\n\n const callApi = (method: string, url: string, data?: any) => {\n setIsLoading(true);\n api\n .invoke(method, url, data)\n .then((res: any) => {\n setIsLoading(false);\n onSuccess(res);\n })\n .catch((err: ErrorResponseHandler) => {\n setIsLoading(false);\n onError(err);\n });\n };\n\n return [isLoading, callApi];\n};\n\nexport default useApi;\n","import React from \"react\";\nimport {\n Button,\n ButtonProps,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n} from \"@mui/material\";\nimport { LoadingButton } from \"@mui/lab\";\nimport IconButton from \"@mui/material/IconButton\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { deleteDialogStyles } from \"../FormComponents/common/styleLibrary\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...deleteDialogStyles,\n });\n\ntype ConfirmDialogProps = {\n isOpen?: boolean;\n onClose: () => void;\n onCancel?: () => void;\n onConfirm: () => void;\n classes?: any;\n title: string;\n isLoading?: boolean;\n confirmationContent: React.ReactNode | React.ReactNode[];\n cancelText?: string;\n confirmText?: string;\n confirmButtonProps?: Partial;\n cancelButtonProps?: Partial;\n titleIcon?: React.ReactNode;\n};\n\nconst ConfirmDialog = ({\n isOpen = false,\n onClose,\n onCancel,\n onConfirm,\n classes = {},\n title = \"\",\n isLoading,\n confirmationContent,\n cancelText = \"Cancel\",\n confirmText = \"Confirm\",\n confirmButtonProps = {},\n cancelButtonProps = {},\n titleIcon = null,\n}: ConfirmDialogProps) => {\n return (\n {\n if (reason !== \"backdropClick\") {\n onClose(); // close on Esc but not on click outside\n }\n }}\n className={classes.root}\n sx={{\n \"& .MuiPaper-root\": {\n padding: \"1rem 2rem 2rem 1rem\",\n },\n }}\n >\n \n
\n {titleIcon} {title}\n
\n
\n \n \n \n
\n
\n\n \n {confirmationContent}\n \n \n \n {cancelText}\n \n\n }\n autoFocus\n {...confirmButtonProps}\n >\n {confirmText}\n \n \n \n );\n};\n\nexport default withStyles(styles)(ConfirmDialog);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport { DialogContentText } from \"@mui/material\";\nimport { IPodListElement } from \"../ListTenants/types\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport Grid from \"@mui/material/Grid\";\nimport { connect } from \"react-redux\";\nimport { setErrorSnackMessage } from \"../../../../actions\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport useApi from \"../../Common/Hooks/useApi\";\nimport ConfirmDialog from \"../../Common/ModalWrapper/ConfirmDialog\";\nimport { ConfirmDeleteIcon } from \"../../../../icons\";\n\ninterface IDeletePod {\n deleteOpen: boolean;\n selectedPod: IPodListElement;\n closeDeleteModalAndRefresh: (refreshList: boolean) => any;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst DeletePod = ({\n deleteOpen,\n selectedPod,\n closeDeleteModalAndRefresh,\n setErrorSnackMessage,\n}: IDeletePod) => {\n const [retypePod, setRetypePod] = useState(\"\");\n\n const onDelSuccess = () => closeDeleteModalAndRefresh(true);\n const onDelError = (err: ErrorResponseHandler) => setErrorSnackMessage(err);\n const onClose = () => closeDeleteModalAndRefresh(false);\n\n const [deleteLoading, invokeDeleteApi] = useApi(onDelSuccess, onDelError);\n\n const onConfirmDelete = () => {\n if (retypePod !== selectedPod.name) {\n setErrorSnackMessage({\n errorMessage: \"Tenant name is incorrect\",\n detailedError: \"\",\n });\n return;\n }\n invokeDeleteApi(\n \"DELETE\",\n `/api/v1/namespaces/${selectedPod.namespace}/tenants/${selectedPod.tenant}/pods/${selectedPod.name}`\n );\n };\n\n return (\n }\n isLoading={deleteLoading}\n onConfirm={onConfirmDelete}\n onClose={onClose}\n confirmButtonProps={{\n disabled: retypePod !== selectedPod.name || deleteLoading,\n }}\n confirmationContent={\n \n To continue please type {selectedPod.name} in the box.\n \n ) => {\n setRetypePod(event.target.value);\n }}\n label=\"\"\n value={retypePod}\n />\n \n \n }\n />\n );\n};\n\nconst connector = connect(null, {\n setErrorSnackMessage,\n});\n\nexport default connector(DeletePod);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport {\n containerForHeader,\n tableStyles,\n tenantDetailsStyles,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport { niceDays } from \"../../../../common/utils\";\nimport { IPodListElement } from \"../ListTenants/types\";\nimport { setErrorSnackMessage } from \"../../../../actions\";\nimport api from \"../../../../common/api\";\nimport TableWrapper from \"../../Common/TableWrapper/TableWrapper\";\nimport { AppState } from \"../../../../store\";\nimport { setTenantDetailsLoad } from \"../actions\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport DeletePod from \"./DeletePod\";\nimport { Grid, InputAdornment, TextField } from \"@mui/material\";\nimport SearchIcon from \"../../../../icons/SearchIcon\";\n\ninterface IPodsSummary {\n classes: any;\n match: any;\n history: any;\n loadingTenant: boolean;\n setTenantDetailsLoad: typeof setTenantDetailsLoad;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...tenantDetailsStyles,\n ...tableStyles,\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst PodsSummary = ({\n classes,\n match,\n history,\n loadingTenant,\n}: IPodsSummary) => {\n const [pods, setPods] = useState([]);\n const [loadingPods, setLoadingPods] = useState(true);\n const [deleteOpen, setDeleteOpen] = useState(false);\n const [selectedPod, setSelectedPod] = useState(null);\n const [filter, setFilter] = useState(\"\");\n const tenantName = match.params[\"tenantName\"];\n const tenantNamespace = match.params[\"tenantNamespace\"];\n\n const podViewAction = (pod: IPodListElement) => {\n history.push(\n `/namespaces/${tenantNamespace}/tenants/${tenantName}/pods/${pod.name}`\n );\n return;\n };\n\n const closeDeleteModalAndRefresh = (reloadData: boolean) => {\n setDeleteOpen(false);\n setLoadingPods(true);\n };\n\n const confirmDeletePod = (pod: IPodListElement) => {\n pod.tenant = tenantName;\n pod.namespace = tenantNamespace;\n setSelectedPod(pod);\n setDeleteOpen(true);\n };\n\n const filteredRecords: IPodListElement[] = pods.filter((elementItem) =>\n elementItem.name.toLowerCase().includes(filter.toLowerCase())\n );\n\n const podTableActions = [\n { type: \"view\", onClick: podViewAction },\n { type: \"delete\", onClick: confirmDeletePod },\n ];\n\n useEffect(() => {\n if (loadingTenant) {\n setLoadingPods(true);\n }\n }, [loadingTenant]);\n\n useEffect(() => {\n if (loadingPods) {\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${tenantNamespace}/tenants/${tenantName}/pods`\n )\n .then((result: IPodListElement[]) => {\n for (let i = 0; i < result.length; i++) {\n let currentTime = (Date.now() / 1000) | 0;\n result[i].time = niceDays(\n (currentTime - parseInt(result[i].timeCreated)).toString()\n );\n }\n setPods(result);\n setLoadingPods(false);\n })\n .catch((err: ErrorResponseHandler) => {\n setErrorSnackMessage({\n errorMessage: \"Error loading pods\",\n detailedError: err.detailedError,\n });\n });\n }\n }, [loadingPods, tenantName, tenantNamespace]);\n\n return (\n \n {deleteOpen && (\n \n )}\n

Pods

\n \n \n \n \n ),\n }}\n onChange={(e) => {\n setFilter(e.target.value);\n }}\n variant=\"standard\"\n />\n \n \n {\n return input !== null ? input : 0;\n },\n },\n { label: \"Node\", elementKey: \"node\" },\n ]}\n isLoading={loadingPods}\n records={filteredRecords}\n itemActions={podTableActions}\n entityName=\"Pods\"\n idField=\"name\"\n />\n \n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n loadingTenant: state.tenants.tenantDetails.loadingTenant,\n});\n\nconst connector = connect(mapState, {\n setErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(PodsSummary));\n"],"names":["inputStyles","makeStyles","theme","createStyles","inputFieldStyles","InputField","props","classes","InputProps","withStyles","fieldBasic","tooltipHelper","textBoxContainer","flexGrow","position","overlayAction","right","top","maxWidth","maxHeight","inputLabel","fontWeight","label","onChange","value","id","name","type","autoComplete","disabled","multiline","tooltip","index","error","required","placeholder","min","max","overlayIcon","overlayObject","extraInputProps","noLabelMinWidth","pattern","autoFocus","className","onKeyPress","inputProps","container","clsx","errorInField","inputBoxContainer","htmlFor","noMinWidthLabel","tooltipContainer","title","placement","fullWidth","helperText","inputRebase","onClick","size","disableFocusRipple","disableRipple","disableTouchRipple","onSuccess","onError","useState","isLoading","setIsLoading","method","url","data","api","then","res","catch","err","deleteDialogStyles","isOpen","onClose","onCancel","onConfirm","confirmationContent","cancelText","confirmText","confirmButtonProps","cancelButtonProps","titleIcon","open","event","reason","root","sx","padding","titleText","closeContainer","closeButton","content","actions","cancelButton","variant","color","confirmButton","loading","loadingPosition","startIcon","connect","setErrorSnackMessage","deleteOpen","selectedPod","closeDeleteModalAndRefresh","retypePod","setRetypePod","useApi","deleteLoading","invokeDeleteApi","ConfirmDialog","namespace","tenant","errorMessage","detailedError","DialogContentText","Grid","item","xs","InputBoxWrapper","target","connector","state","loadingTenant","tenants","tenantDetails","tenantDetailsStyles","tableStyles","containerForHeader","spacing","match","history","pods","setPods","loadingPods","setLoadingPods","setDeleteOpen","setSelectedPod","filter","setFilter","tenantName","params","tenantNamespace","filteredRecords","elementItem","toLowerCase","includes","podTableActions","pod","push","useEffect","result","i","length","currentTime","Date","now","time","niceDays","parseInt","timeCreated","toString","Fragment","reloadData","sectionTitle","actionsTray","TextField","searchField","disableUnderline","startAdornment","InputAdornment","SearchIcon","e","tableBlock","TableWrapper","columns","elementKey","width","renderFunction","input","records","itemActions","entityName","idField"],"sourceRoot":""} \ No newline at end of file diff --git a/portal-ui/build/static/js/189.108e9feb.chunk.js b/portal-ui/build/static/js/189.108e9feb.chunk.js new file mode 100644 index 000000000..7043cbb19 --- /dev/null +++ b/portal-ui/build/static/js/189.108e9feb.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[189],{10189:function(e,t,n){n.r(t),n.d(t,{default:function(){return nt}});var i,a=n(23430),l=n(18489),r=n(50390),o=n(34424),s=n(38342),c=n.n(s),d=n(25594),u=n(86509),x=n(4285),p=n(13512),f=n(72462);!function(e){e.singleValue="singleValue",e.linearGraph="linearGraph",e.areaGraph="areaGraph",e.barChart="barChart",e.pieChart="pieChart",e.singleRep="singleRep",e.simpleWidget="simpleWidget"}(i||(i={}));var g=n(28948),h=n(20426),m=n(73891),v=n(85615),j=n(62559),y=["#C4D4E9","#DCD1EE","#D1EEE7","#EEDED1","#AAF38F","#F9E6C5","#C83B51","#F4CECE","#D6D6D6"],b=function(e){return(0,g.v1)(e,"ns")},C=function(e){return parseInt(e).toString(10)},Z=[{id:1,title:"Uptime",data:"N/A",type:i.simpleWidget,widgetIcon:(0,j.jsx)(v.oN,{}),labelDisplayFunction:g.v1},{id:50,title:"Capacity",data:[],dataOuter:[{name:"outer",value:100}],widgetConfiguration:{outerChart:{colorList:["#9c9c9c"],innerRadius:0,outerRadius:0,startAngle:0,endAngle:0},innerChart:{colorList:y,innerRadius:20,outerRadius:50,startAngle:90,endAngle:-200}},type:i.pieChart,innerLabel:"N/A",labelDisplayFunction:g.ae},{id:68,title:"Data Usage Growth",data:[],widgetConfiguration:[{dataKey:"",keyLabel:"",lineColor:"#000",fillColor:"#000"}],type:i.areaGraph,yAxisFormatter:g.ae,xAxisFormatter:g.Ue},{id:52,title:"Object size distribution",data:[],widgetConfiguration:[{dataKey:"a",color:y[0],background:{fill:"#EEF1F4"},greatestColor:"#081C42"}],customStructure:[{originTag:"LESS_THAN_1024_B",displayTag:"Less than 1024B"},{originTag:"BETWEEN_1024_B_AND_1_MB",displayTag:"Between 1024B and 1MB"},{originTag:"BETWEEN_1_MB_AND_10_MB",displayTag:"Between 1MB and 10MB"},{originTag:"BETWEEN_10_MB_AND_64_MB",displayTag:"Between 10MB and 64MB"},{originTag:"BETWEEN_64_MB_AND_128_MB",displayTag:"Between 64MB and 128MB"},{originTag:"BETWEEN_128_MB_AND_512_MB",displayTag:"Between 128MB and 512MB"},{originTag:"GREATER_THAN_512_MB",displayTag:"Greater than 512MB"}],type:i.barChart},{id:66,title:"Buckets",data:[],innerLabel:"N/A",type:i.singleRep,color:"#0071BC",fillColor:"#ADD5E0"},{id:44,title:"Objects",data:[],innerLabel:"N/A",type:i.singleRep,color:"#0071BC",fillColor:"#ADD5E0"},{id:63,title:"API Data Received Rate",data:[],widgetConfiguration:[{dataKey:"",keyLabel:"",lineColor:"#000",fillColor:"#000"}],type:i.linearGraph,xAxisFormatter:g.Ue,yAxisFormatter:g.ae},{id:61,title:"Total Open FDs",data:[],innerLabel:"N/A",type:i.singleRep,color:"#22B573",fillColor:"#A6E8C4"},{id:62,title:"Total Goroutines",data:[],innerLabel:"N/A",type:i.singleRep,color:"#F7655E",fillColor:"#F4CECE"},{id:77,title:"Node CPU Usage",data:[],widgetConfiguration:[{dataKey:"",keyLabel:"",lineColor:"#000",fillColor:"#000"}],type:i.linearGraph,yAxisFormatter:C,xAxisFormatter:g.Ue},{id:60,title:"API Request Rate",data:[],widgetConfiguration:[{dataKey:"",keyLabel:"",lineColor:"#000",fillColor:"#000"}],type:i.linearGraph,xAxisFormatter:g.Ue},{id:70,title:"API Data Sent Rate",data:[],widgetConfiguration:[{dataKey:"",keyLabel:"",lineColor:"#000",fillColor:"#000"}],type:i.linearGraph,xAxisFormatter:g.Ue,yAxisFormatter:g.ae},{id:17,title:"Internode Data Transfer",data:[],widgetConfiguration:[{dataKey:"",keyLabel:"",lineColor:"#000",fillColor:"#000"}],type:i.linearGraph,yAxisFormatter:g.ae,xAxisFormatter:g.Ue},{id:73,title:"Node IO",data:[],widgetConfiguration:[{dataKey:"",keyLabel:"",lineColor:"#000",fillColor:"#000"}],type:i.linearGraph,yAxisFormatter:g.ae,xAxisFormatter:g.Ue},{id:80,title:"Time Since Last Heal Activity",data:"N/A",type:i.simpleWidget,widgetIcon:(0,j.jsx)(h.Z,{}),labelDisplayFunction:b},{id:81,title:"Time Since Last Scan Activity",data:"N/A",type:i.simpleWidget,widgetIcon:(0,j.jsx)(m.Z,{}),labelDisplayFunction:b},{id:71,title:"API Request Error Rate",data:[],widgetConfiguration:[{dataKey:"",keyLabel:"",lineColor:"#000",fillColor:"#000"}],type:i.linearGraph,xAxisFormatter:g.Ue},{id:76,title:"Node Memory Usage",data:[],widgetConfiguration:[{dataKey:"",keyLabel:"",lineColor:"#000",fillColor:"#000"}],type:i.linearGraph,xAxisFormatter:g.Ue,yAxisFormatter:g.ae},{id:74,title:"Drive Used Capacity",data:[],widgetConfiguration:[{dataKey:"",keyLabel:"",lineColor:"#000",fillColor:"#000"}],type:i.linearGraph,xAxisFormatter:g.Ue,yAxisFormatter:g.ae},{id:82,title:"Drives Free Inodes",data:[],widgetConfiguration:[{dataKey:"",keyLabel:"",lineColor:"#000",fillColor:"#000"}],type:i.linearGraph,disableYAxis:!0,xAxisFormatter:g.Ue},{id:11,title:"Node Syscalls",data:[],widgetConfiguration:[{dataKey:"",keyLabel:"",lineColor:"#000",fillColor:"#000"}],type:i.linearGraph,yAxisFormatter:C,xAxisFormatter:g.Ue},{id:8,title:"Node File Descriptors",data:[],widgetConfiguration:[{dataKey:"",keyLabel:"",lineColor:"#000",fillColor:"#000"}],type:i.linearGraph,yAxisFormatter:C,xAxisFormatter:g.Ue},{id:500,mergedPanels:[{id:53,title:"Online",data:"N/A",type:i.singleValue},{id:69,title:"Offline",data:"N/A",type:i.singleValue}],title:"Servers"},{id:501,mergedPanels:[{id:9,title:"Online",data:"N/A",type:i.singleValue},{id:78,title:"Offline",data:"N/A",type:i.singleValue}],title:"Drives"},{id:502,mergedPanels:[{id:65,title:"Upload",data:"N/A",type:i.singleValue,labelDisplayFunction:g.ae},{id:64,title:"Download",data:"N/A",type:i.singleValue,labelDisplayFunction:g.ae}],title:"Network"}],w=function(e,t){if(0===e.length)return["","0"];if("mean"===t){var n=e.reduce((function(e,t){return e+parseFloat(t[1])}),0);return["",Math.floor(n/e.length).toString()]}var i=e.sort((function(e,t){return e[0]-t[0]}));return i[i.length-1]},N=function(e,t){if(!e)return t;var n=e.type;switch(t.type){case i.singleValue:case i.simpleWidget:if("stat"===n||"singlestat"===n){var a=c()(e,"targets[0].result[0].values",[]);null===a&&(a=[]);var r=c()(e,"options.reduceOptions.calcs[0]","lastNotNull"),o=w(a,r),s=t.labelDisplayFunction?t.labelDisplayFunction(o[1]):o[1];return(0,l.Z)((0,l.Z)({},t),{},{data:s})}break;case i.pieChart:if("gauge"===n){var d=c()(e,"targets[0].result",[]);null===d&&(d=[]);var u=c()(e,"options.reduceOptions.calcs[0]","lastNotNull"),x=d.length>0?d[0].values:[],p=w(x,u),f=d.map((function(e){var t=c()(e,"values",[]),n=Object.keys(e.metric),i=t.sort((function(e,t){return e[0]-t[0]})),a=e.metric[n[0]],l=i[i.length-1];return{name:a,value:parseInt(l)}})),h=t.labelDisplayFunction?t.labelDisplayFunction(p[1]):p[1];return(0,l.Z)((0,l.Z)({},t),{},{data:f,innerLabel:h})}break;case i.linearGraph:case i.areaGraph:if("graph"===n){var m=c()(e,"targets",[]);null===m&&(m=[]);var v=[],j=[];m.forEach((function(e,t){var n=c()(e,"result",[]),i=e.legendFormat;null===n&&(n=[]),n.forEach((function(e){var n=function(e,t){var n=Object.keys(e),i=new RegExp("{{(".concat(n.join("|"),")}}"),"g"),a=t.replace(i,(function(t){var n=t.replace(/({{|}})/g,"");return e[n]})),l=(a.match(/{{/g)||[]).length,r=(a.match(/}}/g)||[]).length,o=a.replace(/{{(.*?)}}/g,"");return l===r&&0!==l&&0!==r&&(n.forEach((function(t){a=a.replace(t,e[t])})),o=a),o}(e.metric,i),a="key_".concat(t).concat(n);v.push({dataKey:a,keyLabel:n,lineColor:"",fillColor:""});var l=c()(e,"values",[]);null===l&&(l=[]),l.forEach((function(e){var t=j.findIndex((function(t){return t.name===e[0]}));if(-1===t){var n={name:e[0]};n[a]=e[1],j.push(n)}else j[t][a]=e[1]}))}))}));var b=v.sort((function(e,t){return e.keyLabelt.keyLabel?1:0})).map((function(e,t){return(0,l.Z)((0,l.Z)({},e),{},{lineColor:y[t]||(0,g.C5)(e.keyLabel),fillColor:y[t]||(0,g.C5)(e.keyLabel)})})),C=j.sort((function(e,t){return e.name-t.name}));return(0,l.Z)((0,l.Z)({},t),{},{widgetConfiguration:b,data:C})}break;case i.barChart:if("bargauge"===n){var Z=c()(e,"targets[0].result",[]);null===Z&&(Z=[]);var N=function(e,t){return e[0]-t[0]},A=[];return A=t.customStructure?t.customStructure.map((function(e){var t=Z.find((function(t){var n=Object.keys(t.metric);return t.metric[n[0]]===e.originTag})),n=c()(t,"values",[]).sort(N),i=n[n.length-1]||["","0"];return{name:e.displayTag,a:parseInt(i[1])}})):Z.map((function(e){var t=Object.keys(e.metric),n=e.metric[t[0]],i=c()(e,"values",[]).sort(N),a=i[i.length-1]||["","0"];return{name:n,a:parseInt(a[1])}})),(0,l.Z)((0,l.Z)({},t),{},{data:A})}break;case i.singleRep:if("stat"===n){var E=c()(e,"targets[0].result[0].values",[]);null===E&&(E=[]);var S=c()(e,"options.reduceOptions.calcs[0]","lastNotNull"),F=w(E,S),k=E.sort((function(e,t){return e[0]-t[0]})),T=[];1===k.length&&T.push({value:0}),k.forEach((function(e){T.push({value:parseInt(e[1])})}));var L=t.labelDisplayFunction?t.labelDisplayFunction(F[1]):F[1];return(0,l.Z)((0,l.Z)({},t),{},{data:T,innerLabel:L})}}return t},A=function(e){var t=e.split(" "),n=function(){var t=e;return isNaN(parseFloat(e))||(t=(0,g.nk)(parseFloat(e))),(0,j.jsx)(r.Fragment,{children:t})};return 2!==t.length?n():g.Dl.includes(t[1])?(0,j.jsxs)("span",{className:"commonValue",children:[t[0],(0,j.jsx)("span",{className:"unitText",children:t[1]})]}):n()},E=n(4795),S=n(44149),F=n(30324),k=n(62449),T=n(98247),L=n(49044),B=(0,k.Z)({root:{backgroundColor:"transparent",paddingTop:0,paddingBottom:0,fontSize:22,textTransform:"uppercase",color:"#D0D0D0"},selected:{"& .MuiTab-wrapper":{color:"#07193E",fontWeight:"bold"}},indicator:{background:"transparent linear-gradient(90deg, #072B4E 0%, #081C42 100%) 0% 0% no-repeat padding-box;",height:4},scroller:{maxWidth:1185,position:"relative","&::after":{content:'" "',backgroundColor:"#EEF1F4",height:4,width:"100%",display:"block"}}}),I=function(e){var t=e.selectedTab,n=e.onChange,i=e.tabOptions,a=B();return(0,j.jsx)(r.Fragment,{children:(0,j.jsx)(T.Z,{indicatorColor:"primary",textColor:"primary","aria-label":"cluster-tabs",variant:"scrollable",scrollButtons:"auto",value:t,onChange:function(e,t){n(t)},classes:{indicator:a.indicator,scroller:a.scroller},children:i.map((function(e,t){var n={label:e.label};return e.value&&(n=(0,l.Z)((0,l.Z)({},n),{},{value:e.value})),e.disabled&&(n=(0,l.Z)((0,l.Z)({},n),{},{disabled:e.disabled})),(0,r.createElement)(L.Z,(0,l.Z)((0,l.Z)({},n),{},{classes:{root:a.root,selected:a.selected},id:"simple-tab-".concat(t),"aria-controls":"simple-tabpanel-".concat(t),key:"tab-".concat(t,"-").concat(e.label)}))}))})})},R=n(16356),D=n(86192),W=n(6369),M=(0,k.Z)({root:{backgroundColor:"#fff",padding:0},title:(0,l.Z)({},f.NP.titleContainer),content:{maxWidth:"100%"}}),P=(0,x.Z)((function(e){return(0,u.Z)((0,l.Z)((0,l.Z)({},f.NP),{},{cardRoot:(0,l.Z)((0,l.Z)({},f.NP.singleValueContainer),{},{"&.MuiPaper-root":{borderRadius:10}}),metricText:{fontSize:70,lineHeight:1.1,color:"#07193E",fontWeight:"bold"},unitText:{fontSize:10,color:"#767676",fontWeight:"normal"},subHearderContainer:{display:"flex",flexDirection:"row",justifyContent:"space-between",alignItems:"center"},subMessage:{fontSize:10,color:"#767676","&.bold":{fontWeight:"bold"}},headerContainer:{display:"flex",justifyContent:"space-between"},viewAll:{fontSize:10,color:"#C83B51",textTransform:"capitalize","& a, & a:hover, & a:visited, & a:active":{color:"#C83B51"}},extraMargin:{margin:"10px 20px 10px 0"}}))}))((function(e){var t=e.title,n=e.metricValue,i=e.metricUnit,a=e.subMessage,l=e.moreLink,o=e.rightComponent,s=e.extraMargin,c=void 0!==s&&s,d=e.classes,u=M(),x=function(){return(0,j.jsx)(r.Fragment,{children:(0,j.jsxs)("div",{className:d.subHearderContainer,children:[(0,j.jsxs)("div",{className:d.leftSide,children:[(0,j.jsx)("div",{children:(0,j.jsxs)("span",{className:d.metricText,children:[n,(0,j.jsx)("span",{className:d.unitText,children:i})]})}),a&&(0,j.jsx)("div",{className:"".concat(d.subMessage," ").concat(a.fontWeight?a.fontWeight:""),children:a.message})]}),(0,j.jsx)("div",{className:d.rightSide,children:o})]})})},p=function(){return(0,j.jsx)(r.Fragment,{children:(0,j.jsxs)("div",{className:d.headerContainer,children:[(0,j.jsx)("span",{className:d.title,children:t}),l&&(0,j.jsx)(r.Fragment,{children:(0,j.jsx)("span",{className:d.viewAll,children:(0,j.jsx)(W.rU,{to:l,children:"View All"})})})]})})};return(0,j.jsx)(r.Fragment,{children:(0,j.jsx)(R.Z,{className:"".concat(d.cardRoot," ").concat(c?d.extraMargin:""),children:""!==n&&(0,j.jsx)(D.Z,{title:(0,j.jsx)(p,{}),subheader:(0,j.jsx)(r.Fragment,{children:(0,j.jsx)(x,{})}),classes:{root:u.root,title:u.title,content:u.content}})})})})),z=function(e){var t=e.title,n=e.leftComponent,i=e.rightComponent;return(0,j.jsx)(r.Fragment,{children:(0,j.jsx)(P,{title:t,metricValue:n,rightComponent:i})})},O=n(88970),G=n(27505),_=n(50990),U=n(62879),K=n(34107),V=n(65607),$=n(29503),H=n(18201),J=n(58089),Y=(0,x.Z)((function(e){return(0,u.Z)((0,l.Z)({},f.Rp))}))((function(e){var t=e.active,n=e.payload,i=e.label,a=e.barChartConfiguration,l=e.classes;return t?(0,j.jsxs)("div",{className:l.customTooltip,children:[(0,j.jsx)("div",{className:l.timeStampTitle,children:i}),n&&n.map((function(e,t){return(0,j.jsxs)("div",{className:l.labelContainer,children:[(0,j.jsx)("div",{className:l.labelColor,style:{backgroundColor:a[t].color}}),(0,j.jsx)("div",{className:l.itemValue,children:(0,j.jsx)("span",{className:l.valueContainer,children:e.value})})]},"pltiem-".concat(t,"-").concat(i))}))]}):null})),q=n(47373),Q=n(32657),X=function(e){var t=e.y,n=e.payload;return(0,j.jsx)("text",{width:50,fontSize:"63%",textAnchor:"start",fill:"#333",transform:"translate(5,".concat(t,")"),fontWeight:700,dy:3,children:n.value})},ee=(0,o.$j)(null,{displayErrorMessage:S.Ih,openZoomPage:q.xG}),te=(0,x.Z)((function(e){return(0,u.Z)((0,l.Z)((0,l.Z)({},f.NP),{},{loadingAlign:{width:"100%",paddingTop:"15px",textAlign:"center",margin:"auto"}}))}))(ee((function(e){var t=e.classes,n=e.title,i=e.panelItem,l=e.timeStart,o=e.timeEnd,s=e.propLoading,c=e.displayErrorMessage,d=e.apiPrefix,u=e.zoomActivated,x=void 0!==u&&u,f=e.openZoomPage,g=(0,r.useState)(!0),h=(0,a.Z)(g,2),m=h[0],v=h[1],y=(0,r.useState)([]),b=(0,a.Z)(y,2),C=b[0],Z=b[1],w=(0,r.useState)(null),A=(0,a.Z)(w,2),E=A[0],S=A[1];(0,r.useEffect)((function(){s&&v(!0)}),[s]),(0,r.useEffect)((function(){if(m){var e=0;if(null!==l&&null!==o){var t=o.unix()-l.unix(),n=Math.floor(t/60);e=n<1?15:n}F.Z.invoke("GET","/api/v1/".concat(d,"/info/widgets/").concat(i.id,"/?step=").concat(e,"&").concat(null!==l?"&start=".concat(l.unix()):"").concat(null!==l&&null!==o?"&":"").concat(null!==o?"end=".concat(o.unix()):"")).then((function(e){var t=N(e,i);Z(t.data),S(t),v(!1)})).catch((function(e){c(e),v(!1)}))}}),[m,i,o,l,c,d]);var k=E?E.widgetConfiguration:[],T=0,L=0;if(1===k.length){var B=k[0];C.forEach((function(e,t){e[B.dataKey]>L&&(L=e[B.dataKey],T=t)}))}var I=(0,Q.Z)(),R=(0,p.Z)(I.breakpoints.up("md"));return(0,j.jsxs)("div",{className:x?"":t.singleValueContainer,children:[!x&&(0,j.jsxs)("div",{className:t.titleContainer,children:[n," ",(0,j.jsx)("button",{onClick:function(){f(i)},className:t.zoomChartIcon,children:(0,j.jsx)(J.Z,{})})]}),m&&(0,j.jsx)("div",{className:t.loadingAlign,children:(0,j.jsx)(H.Z,{})}),!m&&(0,j.jsx)("div",{className:x?t.zoomChartCont:t.contentContainer,children:(0,j.jsx)(O.h,{width:"99%",children:(0,j.jsxs)(G.v,{data:C,layout:"vertical",barCategoryGap:1,children:[(0,j.jsx)(_.K,{type:"number",hide:!0}),(0,j.jsx)(U.B,{dataKey:"name",type:"category",interval:0,tick:(0,j.jsx)(X,{}),tickLine:!1,axisLine:!1,width:150,hide:!R}),k.map((function(e){return(0,j.jsx)(K.$,{dataKey:e.dataKey,fill:e.color,background:e.background,barSize:x?25:12,children:1===k.length?(0,j.jsx)(r.Fragment,{children:C.map((function(t,n){return(0,j.jsx)(V.b,{fill:n===T?e.greatestColor:e.color},"chart-bar-".concat(n.toString()))}))}):null},"bar-".concat(e.dataKey))})),(0,j.jsx)($.u,{cursor:{fill:"rgba(255, 255, 255, 0.3)"},content:(0,j.jsx)(Y,{barChartConfiguration:k})})]})})})]})}))),ne=n(89472),ie=n(86072),ae=n(84930),le=n(84109),re=(0,x.Z)((function(e){return(0,u.Z)((0,l.Z)({},f.Rp))}))((function(e){var t=e.active,n=e.payload,i=e.label,a=e.linearConfiguration,l=e.yAxisFormatter,r=e.classes;return t?(0,j.jsxs)("div",{className:r.customTooltip,children:[(0,j.jsx)("div",{className:r.timeStampTitle,children:(0,g.Ue)(i,!0)}),n&&n.map((function(e,t){return(0,j.jsxs)("div",{className:r.labelContainer,children:[(0,j.jsx)("div",{className:r.labelColor,style:{backgroundColor:a[t].lineColor}}),(0,j.jsx)("div",{className:r.itemValue,children:(0,j.jsxs)("span",{className:r.valueContainer,children:[a[t].keyLabel,":"," ",l(e.value)]})})]},"lbPl-".concat(t,"-").concat(a[t].keyLabel))}))]}):null})),oe=(0,o.$j)(null,{displayErrorMessage:S.Ih,openZoomPage:q.xG}),se=(0,x.Z)((function(e){return(0,u.Z)((0,l.Z)((0,l.Z)({},f.NP),{},{containerElements:{display:"flex",flexDirection:"row",height:"100%",flexGrow:1},verticalAlignment:{flexDirection:"column"},chartCont:{position:"relative",height:140,width:"100%"},legendChart:{display:"flex",flexDirection:"column",flex:"0 1 auto",maxHeight:130,margin:0,overflowY:"auto",position:"relative",textAlign:"center",width:"100%",justifyContent:"flex-start",color:"#404143",fontWeight:"bold",fontSize:12},loadingAlign:{margin:"auto"}}))}))(oe((function(e){var t=e.classes,n=e.title,i=e.displayErrorMessage,l=e.timeStart,o=e.timeEnd,s=e.propLoading,c=e.panelItem,d=e.apiPrefix,u=e.hideYAxis,x=void 0!==u&&u,f=e.areaWidget,g=void 0!==f&&f,h=e.yAxisFormatter,m=void 0===h?function(e){return e}:h,v=e.xAxisFormatter,y=void 0===v?function(e){return e}:v,b=e.zoomActivated,C=void 0!==b&&b,Z=e.openZoomPage,w=(0,r.useState)(!0),A=(0,a.Z)(w,2),E=A[0],S=A[1],k=(0,r.useState)([]),T=(0,a.Z)(k,2),L=T[0],B=T[1],I=(0,r.useState)(0),R=(0,a.Z)(I,2),D=R[0],W=R[1],M=(0,r.useState)(null),P=(0,a.Z)(M,2),z=P[0],G=P[1];(0,r.useEffect)((function(){s&&S(!0)}),[s]),(0,r.useEffect)((function(){if(E){var e=0;if(null!==l&&null!==o){var t=o.unix()-l.unix(),n=Math.floor(t/60);e=n<1?15:n}F.Z.invoke("GET","/api/v1/".concat(d,"/info/widgets/").concat(c.id,"/?step=").concat(e,"&").concat(null!==l?"&start=".concat(l.unix()):"").concat(null!==l&&null!==o?"&":"").concat(null!==o?"end=".concat(o.unix()):"")).then((function(e){var t=N(e,c);B(t.data),G(t),S(!1);var n,i=0,a=(0,ne.Z)(t.data);try{for(a.s();!(n=a.n()).done;){var l=n.value;for(var r in l)if("name"!==r){var o=parseInt(l[r]);isNaN(o)&&(o=0),i5&&void 0!==arguments[5]&&arguments[5];switch(e.type){case i.singleValue:return(0,j.jsx)(ve,{title:e.title,panelItem:e,timeStart:t,timeEnd:n,propLoading:a,apiPrefix:l});case i.simpleWidget:return(0,j.jsx)(fe,{title:e.title,panelItem:e,timeStart:t,timeEnd:n,propLoading:a,apiPrefix:l,iconWidget:e.widgetIcon});case i.pieChart:return(0,j.jsx)(xe,{title:e.title,panelItem:e,timeStart:t,timeEnd:n,propLoading:a,apiPrefix:l});case i.linearGraph:case i.areaGraph:return(0,j.jsx)(se,{title:e.title,panelItem:e,timeStart:t,timeEnd:n,propLoading:a,hideYAxis:e.disableYAxis,xAxisFormatter:e.xAxisFormatter,yAxisFormatter:e.yAxisFormatter,apiPrefix:l,areaWidget:e.type===i.areaGraph,zoomActivated:r});case i.barChart:return(0,j.jsx)(te,{title:e.title,panelItem:e,timeStart:t,timeEnd:n,propLoading:a,apiPrefix:l,zoomActivated:r});case i.singleRep:var o=e.fillColor?e.fillColor:e.color;return(0,j.jsx)(he,{title:e.title,panelItem:e,timeStart:t,timeEnd:n,propLoading:a,color:e.color,fillColor:o,apiPrefix:l});default:return null}},ye=n(76352),be=(0,o.$j)(null,{onCloseAction:q.jv})((function(e){var t=e.value,n=e.modalOpen,i=e.timeStart,a=e.timeEnd,l=e.apiPrefix,o=e.onCloseAction;return t?(0,j.jsx)(ye.Z,{title:t.title,onClose:function(){o()},modalOpen:n,wideLimit:!1,noContentPadding:!0,children:(0,j.jsx)(r.Fragment,{children:je(t,i,a,!0,l,!0)})}):null})),Ce=n(17778),Ze=(0,o.$j)((function(e){return{zoomOpen:e.dashboard.zoom.openZoom,zoomWidget:e.dashboard.zoom.widgetRender}}),{displayErrorMessage:S.Ih}),we=(0,x.Z)((function(e){return(0,u.Z)((0,l.Z)((0,l.Z)((0,l.Z)({},f.OR),f.bN),{},{dashboardRow:{display:"flex",flexDirection:"row",justifyContent:"flex-start",flexWrap:"wrap",maxWidth:1180}}))}))(Ze((function(e){var t=e.classes,n=e.displayErrorMessage,i=e.apiPrefix,l=void 0===i?"admin":i,o=e.zoomOpen,s=e.zoomWidget,c=(0,r.useState)(null),u=(0,a.Z)(c,2),x=u[0],f=u[1],g=(0,r.useState)(null),h=(0,a.Z)(g,2),m=h[0],v=h[1],y=(0,r.useState)(!0),b=(0,a.Z)(y,2),C=b[0],w=b[1],A=(0,r.useState)(Z),S=(0,a.Z)(A,2),k=S[0],T=S[1],L=(0,r.useState)(0),B=(0,a.Z)(L,2),R=B[0],D=B[1],W=(0,Q.Z)(),M=(0,p.Z)(W.breakpoints.up("md")),P=(0,r.useCallback)((function(e,n){return null===n||void 0===n?void 0:n.map((function(n,i){var a=n.length,o=Math.floor(12/a);return!M&&a>=4?o=6:!M&&a>=3&&(o=12),o<1?o=1:o>12&&(o=12),(0,j.jsx)(d.ZP,{item:!0,xs:12,className:t.dashboardRow,children:n.map((function(e,n){var i=k.find((function(t){return t.id===e}));return(0,j.jsx)(d.ZP,{className:t.widgetPanelDelimiter,item:!0,xs:12,sm:o,md:o,lg:o,children:(0,j.jsx)(d.ZP,{item:!0,xs:12,children:i?(0,j.jsx)(r.Fragment,{children:i.mergedPanels?(0,j.jsx)(r.Fragment,{children:(0,j.jsx)(z,{title:i.title,leftComponent:je(i.mergedPanels[0],x,m,C,l),rightComponent:je(i.mergedPanels[1],x,m,C,l)})}):je(i,x,m,C,l)}):null})},"widget-".concat(e,"-").concat(n))}))},"line-".concat(e,"-").concat(i))}))}),[x,m,C,l,t.dashboardRow,t.widgetPanelDelimiter,k,M]),O=(0,r.useCallback)((function(){var e=0;if(null!==x&&null!==m){var t=m.unix()-x.unix(),i=Math.floor(t/60);e=i<1?15:i}F.Z.invoke("GET","/api/v1/".concat(l,"/info?step=").concat(e,"&").concat(null!==x?"&start=".concat(x.unix()):"").concat(null!==x&&null!==m?"&":"").concat(null!==m?"end=".concat(m.unix()):"")).then((function(e){if(e.widgets){var t=(i=e.widgets,Z.map((function(e){var t=i.find((function(t){return t.title.toLowerCase().trim()===e.title.toLowerCase().trim()}));return N(t,e)})));T(t)}else n({errorMessage:"Widget information could not be retrieved at this time. Please try again",detailedError:""});var i;w(!1)})).catch((function(e){n(e),w(!1)}))}),[x,m,n,l]);(0,r.useEffect)((function(){C&&O()}),[C,O]);var G=[[66,44,500,501],[80,81,1],[68,52],[63,70]];M?G.splice(1,0,[50,502]):(G.splice(1,0,[50]),G.splice(1,0,[502]));return(0,j.jsxs)(r.Fragment,{children:[o&&(0,j.jsx)(be,{modalOpen:o,timeStart:x,timeEnd:m,widgetRender:0,value:s,apiPrefix:l}),(0,j.jsx)(Ce.Z,{timeStart:x,setTimeStart:f,timeEnd:m,setTimeEnd:v,triggerSync:function(){w(!0)}}),(0,j.jsx)(d.ZP,{item:!0,xs:12,children:(0,j.jsx)(I,{selectedTab:R,onChange:function(e){D(e)},tabOptions:[{label:"Usage"},{label:"Traffic"},{label:"Resources"}]})}),(0,j.jsxs)(d.ZP,{item:!0,xs:12,className:t.widgetsContainer,children:[(0,j.jsx)(E.x,{index:0,value:R,children:P("Summary",G)}),(0,j.jsx)(E.x,{index:1,value:R,children:P("Traffic",[[60],[71,17],[73]])}),(0,j.jsx)(E.x,{index:2,value:R,children:P("Resources",[[76,77],[11,8],[82,74]])})]})]})}))),Ne=n(35721),Ae=n(81378),Ee=n(35531),Se=n(56805),Fe=n(8235),ke=function(e){var t=e.onlineCount,n=void 0===t?0:t,i=e.offlineCount,a=void 0===i?0:i,l=e.icon,r=void 0===l?null:l,o=e.label,s=void 0===o?"":o;return(0,j.jsx)(Se.Z,{sx:{fontFamily:"Lato,sans-serif",color:"#07193E",maxWidth:"300px",minHeight:"200px",display:"flex",marginLeft:"auto",marginRight:"auto",cursor:"default"},children:(0,j.jsxs)(Se.Z,{sx:{flex:1,height:"200px",display:"flex",padding:{sm:"0 8px 0 8px",xs:"0 10px 0 10px"}},children:[(0,j.jsxs)(Se.Z,{sx:{flex:1,display:"flex",flexFlow:"column",marginTop:"32px"},children:[(0,j.jsx)(Se.Z,{sx:{fontSize:"16px",fontWeight:600,marginBottom:"24px"},children:s}),(0,j.jsxs)(Se.Z,{sx:{display:"flex",alignItems:"center",justifyContent:"space-between",fontSize:{lg:"50px",md:"45px",xs:"35px"},fontWeight:600,"& .stat-text":{color:"#696969",fontSize:"12px"},"& .stat-value":{textAlign:"center"},"& .min-icon":{marginRight:"8px",height:"10px",width:"10px"}},children:[(0,j.jsxs)(Se.Z,{children:[(0,j.jsxs)(Se.Z,{sx:{display:"flex",alignItems:"center","& .min-icon":{fill:"#4CCB92"}},children:[(0,j.jsx)(v.J$,{})," ",(0,j.jsx)("div",{className:"stat-text",children:"Online"})]}),(0,j.jsx)(Se.Z,{className:"stat-value",children:n})]}),(0,j.jsxs)(Se.Z,{children:[(0,j.jsxs)(Se.Z,{sx:{display:"flex",alignItems:"center","& .min-icon":{fill:"#C83B51"}},children:[(0,j.jsx)(v.J$,{})," ",(0,j.jsx)("div",{className:"stat-text",children:"Offline"})]}),(0,j.jsx)(Se.Z,{className:"stat-value",children:a})]})]})]}),(0,j.jsx)(Se.Z,{sx:{width:"20px",height:"20px",marginTop:"26px",maxWidth:"26px","& .min-icon":{width:"16px",height:"16px"}},children:r})]})})},Te=n(31538),Le=n.n(Te),Be=n(48873),Ie=n(5211),Re=n(82618),De=n(55600),We=n(3602),Me=n(56943),Pe="#C83B51",ze="#4CCB92",Oe="#E7A219",Ge=function(e,t){return e<=t/2?Pe:2!==t&&e===t/2+1?Oe:e===t?ze:void 0},_e=function(e){switch(e){case"offline":return Pe;case"online":return ze;default:return Oe}},Ue=function(e,t){return e<=t/2?Pe:e===t/2+1?Oe:e===t?ze:void 0},Ke=function(e){var t=e.label,n=void 0===t?"":t,i=e.value,a=void 0===i?"":i,l=e.statusColor,r=void 0===l?"":l,o=e.hasStatus,s=void 0!==o&&o,c=e.icon,d=void 0===c?null:c;return(0,j.jsxs)(Se.Z,{sx:{alignItems:"center",padding:"5px",display:"flex",gap:"10px"},children:[(0,j.jsxs)(Se.Z,{sx:{display:"flex",alignItems:"center",flexFlow:"column",maxWidth:"40px","&:first-of-type(svg)":{fill:"#848484"}},children:[d,s?(0,j.jsx)(Se.Z,{sx:{marginRight:"0px",justifyContent:"center",alignItems:"center",textAlign:"center","& svg.min-icon":{fill:r,width:"10px",height:"10px"}},children:(0,j.jsx)(v.J$,{})}):(0,j.jsx)(Se.Z,{sx:{width:"12px",height:"12px"}})]}),(0,j.jsxs)(Se.Z,{sx:{display:"flex",alignItems:"flex-start",justifyContent:"flex-start",flexFlow:"column","& .stat-text":{color:"#5E5E5E",fontSize:"14px"},"& .stat-value":{color:"#07193E",display:"flex",fontWeight:500}},children:[(0,j.jsx)("div",{className:"stat-text",children:n}),(0,j.jsx)("div",{className:"stat-value",children:a})]})]})},Ve=(0,x.Z)((function(e){return(0,u.Z)((0,l.Z)({},f.SJ))}))((function(e){e.classes;var t=e.server,n=(e.index,Object.keys(c()(t,"network",{}))),i=n.length,a=t.drives?t.drives.length:0,l=n.reduce((function(e,n){return"online"===t.network[n]?e+1:e}),0),r=t.drives?t.drives.filter((function(e){return"ok"===e.state})).length:0;return(0,j.jsxs)(Se.Z,{sx:{display:"flex",alignItems:"flex-start",flexFlow:"column",flex:1},children:[(0,j.jsxs)(Se.Z,{sx:{display:"flex",alignItems:"center",marginBottom:"15px"},children:[(null===t||void 0===t?void 0:t.state)&&(0,j.jsx)(Se.Z,{sx:{marginRight:"8px","& .min-icon":{fill:_e(t.state),height:"14px",width:"14px"}},children:(0,j.jsx)(v.J$,{})}),(0,j.jsx)(Se.Z,{sx:{fontWeight:600,textTransform:"none"},children:t.endpoint||""})]}),(0,j.jsxs)(Se.Z,{sx:{display:"flex",alignItems:"center",padding:"3px",gap:"15px",justifyContent:"space-between",width:"100%",paddingLeft:"20px",flexFlow:{sm:"row",xs:"column"}},children:[(0,j.jsx)(Ke,{statusColor:Ge(r,a),label:"Drives",icon:(0,j.jsx)(v.FU,{}),hasStatus:!0,value:"".concat(r,"/").concat(a)}),(0,j.jsx)(Ke,{statusColor:Ue(l,i),label:"Network",icon:(0,j.jsx)(v.B7,{}),hasStatus:!0,value:"".concat(l,"/").concat(i)}),(0,j.jsx)(Ke,{statusColor:"green",label:"Up time",icon:(0,j.jsx)(v.oN,{}),value:null!==t&&void 0!==t&&t.uptime?(0,g.v1)(t.uptime):"N/A"}),(0,j.jsx)(Ke,{statusColor:"green",label:"Version",icon:(0,j.jsx)(v.Db,{}),value:(0,j.jsx)(Se.Z,{sx:{background:"rgb(235, 236, 237)",color:"#000000",paddingLeft:"10px",paddingRight:"10px",borderRadius:"16px",fontSize:"12px",marginTop:"5px"},children:t.version?t.version:"N/A"})})]})]})})),$e=function(e){switch(e){case"offline":return Pe;case"ok":return ze;default:return Oe}},He=(0,x.Z)((function(e){return(0,u.Z)((0,l.Z)({},f.SJ))}))((function(e){e.classes;var t=e.drive;return(0,j.jsxs)(Se.Z,{sx:{display:"flex",flex:1,alignItems:"center",paddingBottom:"10px",borderBottom:{xs:"1px solid #eaeaea"}},children:[(0,j.jsx)(Se.Z,{sx:{"& .min-icon":{fill:"#848484"}},children:(0,j.jsx)(v.FU,{})}),(0,j.jsxs)(Se.Z,{sx:{display:"flex",flexFlow:"column",marginLeft:"10px",flex:1},children:[(0,j.jsxs)(Se.Z,{sx:{fontSize:"14px",fontWeight:400,display:"flex",alignItems:"center","& .min-icon":{marginRight:"10px",height:"10px",width:"10px",fill:$e(t.state),flexShrink:0},"& .drive-endpoint":{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"normal",wordBreak:"break-all",fontSize:{md:"14px",xs:"10px"}}},children:[t.state&&(0,j.jsx)(v.J$,{}),(0,j.jsx)("div",{className:"drive-endpoint",children:t.endpoint||""})]}),(0,j.jsxs)(Se.Z,{sx:{flex:1,display:"flex",alignItems:"center",justifyContent:"space-between",paddingLeft:"20px",marginTop:"10px",flexFlow:{sm:"row",xs:"column"},"& .info-label":{color:"#8399AB"},"& .info-value":{color:"#073052",fontSize:"14px",fontWeight:500}},children:[(0,j.jsxs)(Se.Z,{sx:{display:"flex",flexFlow:"column"},children:[(0,j.jsx)("label",{className:"info-label",children:"Capacity:"}),(0,j.jsx)("div",{className:"info-value",children:(0,g.ae)(t.totalSpace?t.totalSpace.toString():"0")})]}),(0,j.jsxs)(Se.Z,{sx:{display:"flex",flexFlow:"column"},children:[(0,j.jsx)("label",{className:"info-label",children:"Used:"}),(0,j.jsx)("div",{className:"info-value",children:(0,g.ae)(t.usedSpace?t.usedSpace.toString():"0")})]}),(0,j.jsxs)(Se.Z,{sx:{display:"flex",flexFlow:"column"},children:[(0,j.jsx)("label",{className:"info-label",children:"Available:"}),(0,j.jsx)("div",{className:"info-value",children:(0,g.ae)(t.availableSpace?t.availableSpace.toString():"0")})]})]})]})]})})),Je=function(e){var t=e.data,n=r.useState(""),i=(0,a.Z)(n,2),l=i[0],o=i[1],s=function(e){o(e)};return(0,j.jsx)(Ie.Z,{sx:{width:"100%",flex:1},component:"nav","aria-labelledby":"nested-list-subheader",subheader:(0,j.jsxs)(Be.Z,{component:"div",sx:{borderBottom:"1px solid #F8F8F8"},children:["Servers (",t.length,")"]}),children:t.map((function(e,t){var n="".concat(e.endpoint,"-").concat(t),i=l===n;return(0,j.jsxs)(r.Fragment,{children:[(0,j.jsxs)(Re.Z,{disableRipple:!0,onClick:function(){s(i?"":n)},className:i?"expanded":"",sx:{display:"flex",alignItems:"center",justifyContent:"space-between",borderBottom:"1px solid #eaeaea","&:hover":{background:"#F8F8F8"},"&.expanded":{borderBottom:"none"}},children:[(0,j.jsx)(Ve,{server:e,index:t}),(0,j.jsx)(Se.Z,{sx:{height:"25px",width:"25px",marginLeft:"25px",background:"#FBFAFA",borderRadius:"2px","&:hover":{background:"#fafafa"},display:{md:"block",xs:"none"}},children:i?(0,j.jsx)(We.Z,{}):(0,j.jsx)(Me.Z,{})})]}),i?(0,j.jsxs)(r.Fragment,{children:[(0,j.jsxs)(Be.Z,{component:"div",sx:{borderBottom:"1px solid #F8F8F8"},children:["Drives (",e.drives.length,")"]},"".concat(t,"-drive-details")),(0,j.jsx)(De.Z,{in:i,timeout:"auto",unmountOnExit:!0,sx:{width:"100%",flex:1,display:"flex",padding:{md:"20px 50px",xs:"15px 15px"},"& .MuiCollapse-wrapperInner":{display:"flex",flexFlow:"column",gap:"15px"}},children:e.drives.map((function(e,t){return(0,j.jsx)(He,{drive:e},"".concat(e.endpoint,"-").concat(t))}))})]},"".concat(e.endpoint,"-").concat(t)):null]},n)}))})},Ye=n(94187),qe=function(e){var t=e.counterValue,n=e.label,i=void 0===n?"":n,a=e.icon,l=void 0===a?null:a;return(0,j.jsx)(Se.Z,{sx:{fontFamily:"Lato,sans-serif",color:"#07193E",maxWidth:"300px",minHeight:"200px",display:"flex",marginLeft:"auto",marginRight:"auto",cursor:"default",position:"relative",width:"100%"},children:(0,j.jsxs)(Se.Z,{sx:{flex:1,height:"200px",display:"flex",width:"100%",padding:{sm:"0 8px 0 8px",xs:"0 10px 0 10px"},position:"absolute"},children:[(0,j.jsxs)(Se.Z,{sx:{flex:1,display:"flex",flexFlow:"column",marginTop:"32px",zIndex:10,overflow:"hidden"},children:[(0,j.jsx)(Se.Z,{sx:{fontSize:"16px",fontWeight:600},children:i}),(0,j.jsx)(Ye.Z,{title:t,placement:"bottom",enterDelay:500,children:(0,j.jsx)(Se.Z,{sx:{fontSize:{xl:"55px",lg:"40px",md:"36px",sm:"22px",xs:"14px"},fontWeight:600,overflow:"hidden",textOverflow:"ellipsis",maxWidth:{md:187,xs:200}},children:t})})]}),(0,j.jsx)(Se.Z,{sx:{width:"20px",height:"20px",marginTop:"26px",maxWidth:"26px","& .min-icon":{width:"16px",height:"16px"}},children:l})]})})},Qe=function(e){var t=e.usageValue,n=e.total,i=e.unit;return(0,j.jsxs)(Se.Z,{sx:{maxHeight:"110px",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"19px",padding:"10px","& .unit-value":{fontSize:"50px",color:"#07193E"},"& .unit-type":{fontSize:"18px",color:"#5E5E5E",marginTop:"20px",marginLeft:"5px"},"& .usage-label":{display:"flex",alignItems:"center",fontSize:"16px",fontWeight:600,marginRight:"20px",marginTop:"-10px","& .min-icon":{marginLeft:"10px",height:16,width:16}}},children:[(0,j.jsxs)("div",{className:"usage-label",children:[(0,j.jsx)("span",{children:"Reported Usage"})," ",(0,j.jsx)(v.rH,{})]}),(0,j.jsx)(Ye.Z,{title:"".concat(t," Bytes"),children:(0,j.jsx)("label",{className:"unit-value",style:{fontWeight:600},children:n})}),(0,j.jsx)("label",{className:"unit-type",children:i})]})},Xe=function(e){var t=e.children,n=e.background,i=void 0===n?"#ffffff":n;return(0,j.jsx)(Se.Z,{sx:{border:"1px solid #f1f1f1",background:i,maxWidth:{sm:"100%",xs:"250px"}},children:t})},et=function(e){var t=e.usage,n=t&&t.usage?t.usage.toString():"0",i=function(e){return void 0===e?{total:"0",unit:"Mi"}:(0,g.Am)(e)}(n),a=function(e){return null!==e?e.servers.sort((function(e,t){var n=e.endpoint.toLowerCase(),i=t.endpoint.toLowerCase();return ni?1:0})):[]}(t||null),l=[];a.forEach((function(e){var t=e.drives.map((function(e){return e}));l=[].concat((0,Ee.Z)(l),(0,Ee.Z)(t))}));var o=Le()(a,"state"),s=o.offline,c=void 0===s?[]:s,d=o.online,u=void 0===d?[]:d,x=Le()(l,"state"),p=x.offline,f=void 0===p?[]:p,h=x.ok,m=void 0===h?[]:h;return(0,j.jsx)(Se.Z,{sx:{maxWidth:"1536px",margin:"auto"},children:(0,j.jsxs)(Se.Z,{sx:{display:"grid",gridTemplateRows:"1fr",gridTemplateColumns:"1fr",gap:"27px",marginBottom:"40px",marginTop:"80px",marginLeft:"60px",marginRight:"60px"},children:[(0,j.jsxs)(Se.Z,{children:[(null===t||void 0===t?void 0:t.prometheusNotReady)&&(0,j.jsx)(Fe.Z,{iconComponent:(0,j.jsx)(v.a$,{}),title:"We can't retrieve advanced metrics at this time",help:(0,j.jsxs)(r.Fragment,{children:["MinIO Dashboard will display basic metrics as we couldn't connect to Prometheus successfully.",(0,j.jsx)("br",{})," ",(0,j.jsx)("br",{}),"Please try again in a few minutes. If the problem persists, you can review your configuration and confirm that Prometheus server is up and running."]})}),!(null!==t&&void 0!==t&&t.prometheusNotReady)&&(0,j.jsx)(Fe.Z,{iconComponent:(0,j.jsx)(v.a$,{}),title:"We can\u2019t retrieve advanced metrics at this time.",help:(0,j.jsxs)(Se.Z,{children:[(0,j.jsx)(Se.Z,{sx:{fontSize:"14px"},children:"MinIO Dashboard will display basic metrics as we couldn\u2019t connect to Prometheus successfully. Please try again in a few minutes. If the problem persists, you can review your configuration and confirm that Prometheus server is up and running."}),(0,j.jsx)(Se.Z,{sx:{paddingTop:"20px",fontSize:"14px","& a":{color:function(e){return e.colors.link}}},children:(0,j.jsx)("a",{href:"https://docs.min.io/minio/baremetal/monitoring/metrics-alerts/collect-minio-metrics-using-prometheus.html?ref=con#minio-metrics-collect-using-prometheus",target:"_blank",rel:"noreferrer",children:"Read more about Prometheus on our Docs site."})})]})})]}),(0,j.jsxs)(Se.Z,{sx:{display:"grid",gridTemplateRows:"1fr .2fr auto",gridTemplateColumns:"1fr",gap:"40px"},children:[(0,j.jsxs)(Se.Z,{sx:{display:"grid",gridTemplateRows:"1fr",gridTemplateColumns:{lg:"1fr 1fr 1fr 1fr ",sm:"1fr 1fr",xs:"1fr"},gap:"40px"},children:[(0,j.jsx)(Xe,{background:"linear-gradient(-15deg, #2781b0 0%, #ffffff 30%) 0% 0% no-repeat padding-box",children:(0,j.jsx)(qe,{label:"Buckets",icon:(0,j.jsx)(v.wN,{}),counterValue:t?(0,g.nk)(t.buckets):0})}),(0,j.jsx)(Xe,{background:"linear-gradient(-15deg, #4CCB92 0%, #ffffff 30%) 0% 0% no-repeat padding-box",children:(0,j.jsx)(qe,{label:"Objects",icon:(0,j.jsx)(v.xp,{}),counterValue:t?(0,g.nk)(t.objects):0})}),(0,j.jsx)(Xe,{children:(0,j.jsx)(ke,{onlineCount:u.length,offlineCount:c.length,label:"Servers",icon:(0,j.jsx)(v.SB,{})})}),(0,j.jsx)(Xe,{children:(0,j.jsx)(ke,{offlineCount:f.length,onlineCount:m.length,label:"Drives",icon:(0,j.jsx)(v.FU,{})})})]}),(0,j.jsx)(Xe,{children:(0,j.jsx)(Qe,{usageValue:n,total:i.total,unit:i.unit})}),(0,j.jsx)(Se.Z,{sx:{display:"grid",gridTemplateRows:"auto",gridTemplateColumns:"1fr",gap:"auto"},children:(0,j.jsx)(Xe,{children:(0,j.jsx)(Je,{data:a})})})]})]})})},tt=(0,o.$j)(null,{displayErrorMessage:S.Ih}),nt=(0,x.Z)((function(e){return(0,u.Z)((0,l.Z)({},(0,f.Bz)(e.spacing(4))))}))(tt((function(e){var t=e.classes,n=e.displayErrorMessage,i=(0,r.useState)(!0),l=(0,a.Z)(i,2),o=l[0],s=l[1],u=(0,r.useState)(null),x=(0,a.Z)(u,2),p=x[0],f=x[1],g=(0,r.useCallback)((function(){F.Z.invoke("GET","/api/v1/admin/info").then((function(e){f(e),s(!1)})).catch((function(e){n(e),s(!1)}))}),[f,s,n]);(0,r.useEffect)((function(){o&&g()}),[o,g]);var h=c()(p,"widgets",null);return(0,j.jsxs)(r.Fragment,{children:[(0,j.jsx)(Ne.Z,{label:"Metrics"}),o?(0,j.jsx)(d.ZP,{container:!0,children:(0,j.jsx)(d.ZP,{item:!0,xs:12,className:t.container,children:(0,j.jsx)(Ae.Z,{})})}):(0,j.jsx)(r.Fragment,{children:null!==h?(0,j.jsx)(d.ZP,{container:!0,className:t.container,children:(0,j.jsx)(we,{})}):(0,j.jsx)(et,{usage:p})})]})})))},4795:function(e,t,n){n.d(t,{x:function(){return s}});var i=n(18489),a=n(83738),l=n(50390),r=n(62559),o=["children","value","index"],s=function(e){var t=e.children,n=e.value,s=e.index,c=(0,a.Z)(e,o);return(0,r.jsx)("div",(0,i.Z)((0,i.Z)({role:"tabpanel",hidden:n!==s,id:"simple-tabpanel-".concat(s),"aria-labelledby":"simple-tab-".concat(s),style:{marginTop:"5px"}},c),{},{children:n===s&&(0,r.jsx)(l.Fragment,{children:t})}))}}}]); +//# sourceMappingURL=189.108e9feb.chunk.js.map \ No newline at end of file diff --git a/portal-ui/build/static/js/189.108e9feb.chunk.js.map b/portal-ui/build/static/js/189.108e9feb.chunk.js.map new file mode 100644 index 000000000..7cc1c62f9 --- /dev/null +++ b/portal-ui/build/static/js/189.108e9feb.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/189.108e9feb.chunk.js","mappings":"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","sources":["screens/Console/Dashboard/Prometheus/types.ts","screens/Console/Dashboard/Prometheus/utils.tsx","screens/Console/Common/TabSelector/TabSelector.tsx","screens/Console/Dashboard/CommonCard.tsx","screens/Console/Dashboard/Prometheus/MergedWidgets.tsx","screens/Console/Dashboard/Prometheus/Widgets/tooltips/BarChartTooltip.tsx","screens/Console/Dashboard/Prometheus/Widgets/BarChartWidget.tsx","screens/Console/Dashboard/Prometheus/Widgets/tooltips/LineChartTooltip.tsx","screens/Console/Dashboard/Prometheus/Widgets/LinearGraphWidget.tsx","screens/Console/Dashboard/Prometheus/Widgets/PieChartWidget.tsx","screens/Console/Dashboard/Prometheus/Widgets/SimpleWidget.tsx","screens/Console/Dashboard/Prometheus/Widgets/SingleRepWidget.tsx","screens/Console/Dashboard/Prometheus/Widgets/SingleValueWidget.tsx","screens/Console/Dashboard/Prometheus/widgetUtils.tsx","screens/Console/Dashboard/Prometheus/ZoomWidget.tsx","screens/Console/Dashboard/Prometheus/PrDashboard.tsx","screens/Console/Dashboard/BasicDashboard/StatusCountCard.tsx","screens/Console/Dashboard/BasicDashboard/Utils.tsx","screens/Console/Dashboard/BasicDashboard/ServerInfoItem.tsx","screens/Console/Dashboard/BasicDashboard/DriveInfoItem.tsx","screens/Console/Dashboard/BasicDashboard/ServersList.tsx","screens/Console/Dashboard/BasicDashboard/CounterCard.tsx","screens/Console/Dashboard/BasicDashboard/ReportedUsage.tsx","screens/Console/Dashboard/BasicDashboard/BasicDashboard.tsx","screens/Console/Dashboard/Dashboard.tsx","screens/shared/tabs.tsx"],"sourcesContent":["// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport {\n IBarChartConfiguration,\n IBarChartRelation,\n IDataSRep,\n ILinearGraphConfiguration,\n IPieChartConfiguration,\n} from \"./Widgets/types\";\n\nexport enum widgetType {\n singleValue = \"singleValue\",\n linearGraph = \"linearGraph\",\n areaGraph = \"areaGraph\",\n barChart = \"barChart\",\n pieChart = \"pieChart\",\n singleRep = \"singleRep\",\n simpleWidget = \"simpleWidget\",\n}\n\nexport interface IDashboardPanel {\n id: number;\n mergedPanels?: IDashboardPanel[];\n title: string;\n data?: string | object[] | IDataSRep[];\n dataOuter?: string | object[];\n type?: widgetType;\n widgetIcon?: any;\n widgetConfiguration?:\n | ILinearGraphConfiguration[]\n | IBarChartConfiguration[]\n | IPieChartConfiguration;\n color?: string;\n fillColor?: string;\n innerLabel?: string;\n labelDisplayFunction?: (value: string) => any;\n disableYAxis?: boolean;\n xAxisFormatter?: (item: string) => string;\n yAxisFormatter?: (item: string) => string;\n customStructure?: IBarChartRelation[];\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport get from \"lodash/get\";\nimport { IDashboardPanel, widgetType } from \"./types\";\nimport {\n getTimeFromTimestamp,\n niceBytes,\n niceDays,\n representationNumber,\n textToRGBColor,\n units,\n} from \"../../../../common/utils\";\nimport HealIcon from \"../../../../icons/HealIcon\";\nimport DiagnosticsIcon from \"../../../../icons/DiagnosticsIcon\";\nimport { UptimeIcon } from \"../../../../icons\";\n\nconst colorsMain = [\n \"#C4D4E9\",\n \"#DCD1EE\",\n \"#D1EEE7\",\n \"#EEDED1\",\n \"#AAF38F\",\n \"#F9E6C5\",\n \"#C83B51\",\n \"#F4CECE\",\n \"#D6D6D6\",\n];\n\nconst niceDaysFromNS = (seconds: string) => {\n return niceDays(seconds, \"ns\");\n};\n\nconst roundNumber = (value: string) => {\n return parseInt(value).toString(10);\n};\n\nexport const panelsConfiguration: IDashboardPanel[] = [\n {\n id: 1,\n title: \"Uptime\",\n data: \"N/A\",\n type: widgetType.simpleWidget,\n widgetIcon: ,\n labelDisplayFunction: niceDays,\n },\n {\n id: 50,\n title: \"Capacity\",\n data: [],\n dataOuter: [{ name: \"outer\", value: 100 }],\n widgetConfiguration: {\n outerChart: {\n colorList: [\"#9c9c9c\"],\n innerRadius: 0,\n outerRadius: 0,\n startAngle: 0,\n endAngle: 0,\n },\n innerChart: {\n colorList: colorsMain,\n innerRadius: 20,\n outerRadius: 50,\n startAngle: 90,\n endAngle: -200,\n },\n },\n type: widgetType.pieChart,\n innerLabel: \"N/A\",\n labelDisplayFunction: niceBytes,\n },\n {\n id: 68,\n title: \"Data Usage Growth\",\n data: [],\n widgetConfiguration: [\n {\n dataKey: \"\",\n keyLabel: \"\",\n lineColor: \"#000\",\n fillColor: \"#000\",\n },\n ],\n type: widgetType.areaGraph,\n yAxisFormatter: niceBytes,\n xAxisFormatter: getTimeFromTimestamp,\n },\n {\n id: 52,\n title: \"Object size distribution\",\n data: [],\n widgetConfiguration: [\n {\n dataKey: \"a\",\n color: colorsMain[0],\n background: {\n fill: \"#EEF1F4\",\n },\n greatestColor: \"#081C42\",\n },\n ],\n customStructure: [\n { originTag: \"LESS_THAN_1024_B\", displayTag: \"Less than 1024B\" },\n {\n originTag: \"BETWEEN_1024_B_AND_1_MB\",\n displayTag: \"Between 1024B and 1MB\",\n },\n {\n originTag: \"BETWEEN_1_MB_AND_10_MB\",\n displayTag: \"Between 1MB and 10MB\",\n },\n {\n originTag: \"BETWEEN_10_MB_AND_64_MB\",\n displayTag: \"Between 10MB and 64MB\",\n },\n {\n originTag: \"BETWEEN_64_MB_AND_128_MB\",\n displayTag: \"Between 64MB and 128MB\",\n },\n {\n originTag: \"BETWEEN_128_MB_AND_512_MB\",\n displayTag: \"Between 128MB and 512MB\",\n },\n {\n originTag: \"GREATER_THAN_512_MB\",\n displayTag: \"Greater than 512MB\",\n },\n ],\n type: widgetType.barChart,\n },\n {\n id: 66,\n title: \"Buckets\",\n data: [],\n innerLabel: \"N/A\",\n type: widgetType.singleRep,\n color: \"#0071BC\",\n fillColor: \"#ADD5E0\",\n },\n {\n id: 44,\n title: \"Objects\",\n data: [],\n innerLabel: \"N/A\",\n type: widgetType.singleRep,\n color: \"#0071BC\",\n fillColor: \"#ADD5E0\",\n },\n {\n id: 63,\n title: \"API Data Received Rate\",\n data: [],\n widgetConfiguration: [\n {\n dataKey: \"\",\n keyLabel: \"\",\n lineColor: \"#000\",\n fillColor: \"#000\",\n },\n ],\n type: widgetType.linearGraph,\n\n xAxisFormatter: getTimeFromTimestamp,\n yAxisFormatter: niceBytes,\n },\n {\n id: 61,\n title: \"Total Open FDs\",\n data: [],\n innerLabel: \"N/A\",\n type: widgetType.singleRep,\n color: \"#22B573\",\n fillColor: \"#A6E8C4\",\n },\n {\n id: 62,\n title: \"Total Goroutines\",\n data: [],\n innerLabel: \"N/A\",\n type: widgetType.singleRep,\n color: \"#F7655E\",\n fillColor: \"#F4CECE\",\n },\n {\n id: 77,\n title: \"Node CPU Usage\",\n data: [],\n widgetConfiguration: [\n {\n dataKey: \"\",\n keyLabel: \"\",\n lineColor: \"#000\",\n fillColor: \"#000\",\n },\n ],\n type: widgetType.linearGraph,\n\n yAxisFormatter: roundNumber,\n xAxisFormatter: getTimeFromTimestamp,\n },\n {\n id: 60,\n title: \"API Request Rate\",\n data: [],\n widgetConfiguration: [\n {\n dataKey: \"\",\n keyLabel: \"\",\n lineColor: \"#000\",\n fillColor: \"#000\",\n },\n ],\n type: widgetType.linearGraph,\n\n xAxisFormatter: getTimeFromTimestamp,\n },\n {\n id: 70,\n title: \"API Data Sent Rate\",\n data: [],\n widgetConfiguration: [\n {\n dataKey: \"\",\n keyLabel: \"\",\n lineColor: \"#000\",\n fillColor: \"#000\",\n },\n ],\n type: widgetType.linearGraph,\n\n xAxisFormatter: getTimeFromTimestamp,\n yAxisFormatter: niceBytes,\n },\n {\n id: 17,\n title: \"Internode Data Transfer\",\n data: [],\n widgetConfiguration: [\n {\n dataKey: \"\",\n keyLabel: \"\",\n lineColor: \"#000\",\n fillColor: \"#000\",\n },\n ],\n type: widgetType.linearGraph,\n\n yAxisFormatter: niceBytes,\n xAxisFormatter: getTimeFromTimestamp,\n },\n {\n id: 73,\n title: \"Node IO\",\n data: [],\n widgetConfiguration: [\n {\n dataKey: \"\",\n keyLabel: \"\",\n lineColor: \"#000\",\n fillColor: \"#000\",\n },\n ],\n type: widgetType.linearGraph,\n\n yAxisFormatter: niceBytes,\n xAxisFormatter: getTimeFromTimestamp,\n },\n {\n id: 80,\n title: \"Time Since Last Heal Activity\",\n data: \"N/A\",\n type: widgetType.simpleWidget,\n widgetIcon: ,\n labelDisplayFunction: niceDaysFromNS,\n },\n {\n id: 81,\n title: \"Time Since Last Scan Activity\",\n data: \"N/A\",\n type: widgetType.simpleWidget,\n widgetIcon: ,\n labelDisplayFunction: niceDaysFromNS,\n },\n {\n id: 71,\n title: \"API Request Error Rate\",\n data: [],\n widgetConfiguration: [\n {\n dataKey: \"\",\n keyLabel: \"\",\n lineColor: \"#000\",\n fillColor: \"#000\",\n },\n ],\n type: widgetType.linearGraph,\n\n xAxisFormatter: getTimeFromTimestamp,\n },\n {\n id: 76,\n title: \"Node Memory Usage\",\n data: [],\n widgetConfiguration: [\n {\n dataKey: \"\",\n keyLabel: \"\",\n lineColor: \"#000\",\n fillColor: \"#000\",\n },\n ],\n type: widgetType.linearGraph,\n\n xAxisFormatter: getTimeFromTimestamp,\n yAxisFormatter: niceBytes,\n },\n {\n id: 74,\n title: \"Drive Used Capacity\",\n data: [],\n widgetConfiguration: [\n {\n dataKey: \"\",\n keyLabel: \"\",\n lineColor: \"#000\",\n fillColor: \"#000\",\n },\n ],\n type: widgetType.linearGraph,\n\n xAxisFormatter: getTimeFromTimestamp,\n yAxisFormatter: niceBytes,\n },\n {\n id: 82,\n title: \"Drives Free Inodes\",\n data: [],\n widgetConfiguration: [\n {\n dataKey: \"\",\n keyLabel: \"\",\n lineColor: \"#000\",\n fillColor: \"#000\",\n },\n ],\n type: widgetType.linearGraph,\n\n disableYAxis: true,\n xAxisFormatter: getTimeFromTimestamp,\n },\n {\n id: 11,\n title: \"Node Syscalls\",\n data: [],\n widgetConfiguration: [\n {\n dataKey: \"\",\n keyLabel: \"\",\n lineColor: \"#000\",\n fillColor: \"#000\",\n },\n ],\n type: widgetType.linearGraph,\n yAxisFormatter: roundNumber,\n xAxisFormatter: getTimeFromTimestamp,\n },\n {\n id: 8,\n title: \"Node File Descriptors\",\n data: [],\n widgetConfiguration: [\n {\n dataKey: \"\",\n keyLabel: \"\",\n lineColor: \"#000\",\n fillColor: \"#000\",\n },\n ],\n type: widgetType.linearGraph,\n yAxisFormatter: roundNumber,\n xAxisFormatter: getTimeFromTimestamp,\n },\n {\n id: 500,\n mergedPanels: [\n {\n id: 53,\n title: \"Online\",\n data: \"N/A\",\n type: widgetType.singleValue,\n },\n {\n id: 69,\n title: \"Offline\",\n data: \"N/A\",\n type: widgetType.singleValue,\n },\n ],\n title: \"Servers\",\n },\n {\n id: 501,\n mergedPanels: [\n {\n id: 9,\n title: \"Online\",\n data: \"N/A\",\n type: widgetType.singleValue,\n },\n {\n id: 78,\n title: \"Offline\",\n data: \"N/A\",\n type: widgetType.singleValue,\n },\n ],\n title: \"Drives\",\n },\n {\n id: 502,\n mergedPanels: [\n {\n id: 65,\n title: \"Upload\",\n data: \"N/A\",\n type: widgetType.singleValue,\n\n labelDisplayFunction: niceBytes,\n },\n {\n id: 64,\n title: \"Download\",\n data: \"N/A\",\n type: widgetType.singleValue,\n\n labelDisplayFunction: niceBytes,\n },\n ],\n title: \"Network\",\n },\n];\n\nconst calculateMainValue = (elements: any[], metricCalc: string) => {\n if (elements.length === 0) {\n return [\"\", \"0\"];\n }\n\n switch (metricCalc) {\n case \"mean\":\n const sumValues = elements.reduce((accumulator, currValue) => {\n return accumulator + parseFloat(currValue[1]);\n }, 0);\n\n const mean = Math.floor(sumValues / elements.length);\n\n return [\"\", mean.toString()];\n default:\n const sortResult = elements.sort(\n (value1: any[], value2: any[]) => value1[0] - value2[0]\n );\n\n return sortResult[sortResult.length - 1];\n }\n};\n\nconst constructLabelNames = (metrics: any, legendFormat: string) => {\n const keysToReplace = Object.keys(metrics);\n const expToReplace = new RegExp(`{{(${keysToReplace.join(\"|\")})}}`, \"g\");\n\n let replacedLegend = legendFormat.replace(expToReplace, (matchItem) => {\n const nwMatchItem = matchItem.replace(/({{|}})/g, \"\");\n return metrics[nwMatchItem];\n });\n\n const countVarsOpen = (replacedLegend.match(/{{/g) || []).length;\n const countVarsClose = (replacedLegend.match(/}}/g) || []).length;\n\n let cleanLegend = replacedLegend.replace(/{{(.*?)}}/g, \"\");\n\n if (\n countVarsOpen === countVarsClose &&\n countVarsOpen !== 0 &&\n countVarsClose !== 0\n ) {\n keysToReplace.forEach((element) => {\n replacedLegend = replacedLegend.replace(element, metrics[element]);\n });\n\n cleanLegend = replacedLegend;\n }\n\n // In case not all the legends were replaced, we remove the placeholders.\n return cleanLegend;\n};\n\nexport const getWidgetsWithValue = (payload: any[]): IDashboardPanel[] => {\n return panelsConfiguration.map((panelItem: IDashboardPanel) => {\n const payloadData = payload.find(\n (panelT) =>\n panelT.title.toLowerCase().trim() ===\n panelItem.title.toLowerCase().trim()\n );\n return widgetDetailsToPanel(payloadData, panelItem);\n });\n};\n\nexport const widgetDetailsToPanel = (\n payloadData: any,\n panelItem: IDashboardPanel\n) => {\n if (!payloadData) {\n return panelItem;\n }\n\n const typeOfPayload = payloadData.type;\n\n switch (panelItem.type) {\n case widgetType.singleValue:\n case widgetType.simpleWidget:\n if (typeOfPayload === \"stat\" || typeOfPayload === \"singlestat\") {\n // We sort values & get the last value\n let elements = get(payloadData, \"targets[0].result[0].values\", []);\n\n if (elements === null) {\n elements = [];\n }\n\n const metricCalc = get(\n payloadData,\n \"options.reduceOptions.calcs[0]\",\n \"lastNotNull\"\n );\n\n const valueDisplay = calculateMainValue(elements, metricCalc);\n\n const data = panelItem.labelDisplayFunction\n ? panelItem.labelDisplayFunction(valueDisplay[1])\n : valueDisplay[1];\n\n return {\n ...panelItem,\n data,\n };\n }\n break;\n case widgetType.pieChart:\n if (typeOfPayload === \"gauge\") {\n let chartSeries = get(payloadData, \"targets[0].result\", []);\n\n if (chartSeries === null) {\n chartSeries = [];\n }\n\n const metricCalc = get(\n payloadData,\n \"options.reduceOptions.calcs[0]\",\n \"lastNotNull\"\n );\n\n const valuesArray = chartSeries.length > 0 ? chartSeries[0].values : [];\n\n const totalValues = calculateMainValue(valuesArray, metricCalc);\n\n const values = chartSeries.map((elementValue: any) => {\n const values = get(elementValue, \"values\", []);\n const metricKeyItem = Object.keys(elementValue.metric);\n\n const sortResult = values.sort(\n (value1: any[], value2: any[]) => value1[0] - value2[0]\n );\n\n const metricName = elementValue.metric[metricKeyItem[0]];\n const value = sortResult[sortResult.length - 1];\n return { name: metricName, value: parseInt(value) };\n });\n\n const innerLabel = panelItem.labelDisplayFunction\n ? panelItem.labelDisplayFunction(totalValues[1])\n : totalValues[1];\n\n return {\n ...panelItem,\n data: values,\n innerLabel,\n };\n }\n break;\n case widgetType.linearGraph:\n case widgetType.areaGraph:\n if (typeOfPayload === \"graph\") {\n let targets = get(payloadData, \"targets\", []);\n if (targets === null) {\n targets = [];\n }\n\n const series: any[] = [];\n const plotValues: any[] = [];\n\n targets.forEach(\n (\n targetMaster: { legendFormat: string; result: any[] },\n index: number\n ) => {\n // Add a new serie to plot variables in case it is not from multiple values\n let results = get(targetMaster, \"result\", []);\n const legendFormat = targetMaster.legendFormat;\n if (results === null) {\n results = [];\n }\n\n results.forEach((itemVals: { metric: object; values: any[] }) => {\n // Label Creation\n const labelName = constructLabelNames(\n itemVals.metric,\n legendFormat\n );\n const keyName = `key_${index}${labelName}`;\n\n // series creation with recently created label\n series.push({\n dataKey: keyName,\n keyLabel: labelName,\n lineColor: \"\",\n fillColor: \"\",\n });\n\n // we iterate over values and create elements\n let values = get(itemVals, \"values\", []);\n if (values === null) {\n values = [];\n }\n\n values.forEach((valInfo: any[]) => {\n const itemIndex = plotValues.findIndex(\n (element) => element.name === valInfo[0]\n );\n\n // Element not exists yet\n if (itemIndex === -1) {\n let itemToPush: any = { name: valInfo[0] };\n itemToPush[keyName] = valInfo[1];\n\n plotValues.push(itemToPush);\n } else {\n plotValues[itemIndex][keyName] = valInfo[1];\n }\n });\n });\n }\n );\n\n const sortedSeries = series.sort((series1: any, series2: any) => {\n if (series1.keyLabel < series2.keyLabel) {\n return -1;\n }\n if (series1.keyLabel > series2.keyLabel) {\n return 1;\n }\n return 0;\n });\n\n const seriesWithColors = sortedSeries.map(\n (serialC: any, index: number) => {\n return {\n ...serialC,\n lineColor: colorsMain[index] || textToRGBColor(serialC.keyLabel),\n fillColor: colorsMain[index] || textToRGBColor(serialC.keyLabel),\n };\n }\n );\n\n const sortedVals = plotValues.sort(\n (value1: any, value2: any) => value1.name - value2.name\n );\n\n return {\n ...panelItem,\n widgetConfiguration: seriesWithColors,\n data: sortedVals,\n };\n }\n break;\n case widgetType.barChart:\n if (typeOfPayload === \"bargauge\") {\n let chartBars = get(payloadData, \"targets[0].result\", []);\n\n if (chartBars === null) {\n chartBars = [];\n }\n\n const sortFunction = (value1: any[], value2: any[]) =>\n value1[0] - value2[0];\n\n let values = [];\n if (panelItem.customStructure) {\n values = panelItem.customStructure.map((structureItem) => {\n const metricTake = chartBars.find((element: any) => {\n const metricKeyItem = Object.keys(element.metric);\n\n const metricName = element.metric[metricKeyItem[0]];\n\n return metricName === structureItem.originTag;\n });\n\n const elements = get(metricTake, \"values\", []);\n\n const sortResult = elements.sort(sortFunction);\n const lastValue = sortResult[sortResult.length - 1] || [\"\", \"0\"];\n\n return {\n name: structureItem.displayTag,\n a: parseInt(lastValue[1]),\n };\n });\n } else {\n // If no configuration is set, we construct the series for bar chart and return the element\n values = chartBars.map((elementValue: any) => {\n const metricKeyItem = Object.keys(elementValue.metric);\n\n const metricName = elementValue.metric[metricKeyItem[0]];\n\n const elements = get(elementValue, \"values\", []);\n\n const sortResult = elements.sort(sortFunction);\n const lastValue = sortResult[sortResult.length - 1] || [\"\", \"0\"];\n return { name: metricName, a: parseInt(lastValue[1]) };\n });\n }\n\n return {\n ...panelItem,\n data: values,\n };\n }\n break;\n case widgetType.singleRep:\n if (typeOfPayload === \"stat\") {\n // We sort values & get the last value\n let elements = get(payloadData, \"targets[0].result[0].values\", []);\n if (elements === null) {\n elements = [];\n }\n const metricCalc = get(\n payloadData,\n \"options.reduceOptions.calcs[0]\",\n \"lastNotNull\"\n );\n\n const valueDisplay = calculateMainValue(elements, metricCalc);\n\n const sortResult = elements.sort(\n (value1: any[], value2: any[]) => value1[0] - value2[0]\n );\n\n let valuesForBackground = [];\n\n if (sortResult.length === 1) {\n valuesForBackground.push({ value: 0 });\n }\n\n sortResult.forEach((eachVal: any) => {\n valuesForBackground.push({ value: parseInt(eachVal[1]) });\n });\n\n const innerLabel = panelItem.labelDisplayFunction\n ? panelItem.labelDisplayFunction(valueDisplay[1])\n : valueDisplay[1];\n\n return {\n ...panelItem,\n data: valuesForBackground,\n innerLabel,\n };\n }\n break;\n }\n\n return panelItem;\n};\n\nconst verifyNumeric = (item: string) => {\n return !isNaN(parseFloat(item));\n};\n\nexport const splitSizeMetric = (val: string) => {\n const splittedText = val.split(\" \");\n // Value is not a size metric, we return as common string\n\n const singleValue = () => {\n let vl = val;\n\n if (verifyNumeric(val)) {\n vl = representationNumber(parseFloat(val));\n }\n return {vl};\n };\n\n if (splittedText.length !== 2) {\n return singleValue();\n }\n\n if (!units.includes(splittedText[1])) {\n return singleValue();\n }\n\n return (\n \n {splittedText[0]}\n {splittedText[1]}\n \n );\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport Tabs from \"@mui/material/Tabs\";\nimport Tab from \"@mui/material/Tab\";\nimport { ITabOption } from \"./types\";\n\ninterface ITabSelector {\n selectedTab: number;\n onChange: (newValue: number) => void;\n tabOptions: ITabOption[];\n}\n\nconst tabSubStyles = makeStyles({\n root: {\n backgroundColor: \"transparent\",\n paddingTop: 0,\n paddingBottom: 0,\n fontSize: 22,\n textTransform: \"uppercase\",\n color: \"#D0D0D0\",\n },\n selected: { \"& .MuiTab-wrapper\": { color: \"#07193E\", fontWeight: \"bold\" } },\n indicator: {\n background:\n \"transparent linear-gradient(90deg, #072B4E 0%, #081C42 100%) 0% 0% no-repeat padding-box;\",\n height: 4,\n },\n scroller: {\n maxWidth: 1185,\n position: \"relative\",\n \"&::after\": {\n content: '\" \"',\n backgroundColor: \"#EEF1F4\",\n height: 4,\n width: \"100%\",\n display: \"block\",\n },\n },\n});\n\nconst TabSelector = ({ selectedTab, onChange, tabOptions }: ITabSelector) => {\n const subStyles = tabSubStyles();\n\n return (\n \n , newValue: number) => {\n onChange(newValue);\n }}\n classes={{\n indicator: subStyles.indicator,\n scroller: subStyles.scroller,\n }}\n >\n {tabOptions.map((option, index) => {\n let tabOptions: ITabOption = {\n label: option.label,\n };\n\n if (option.value) {\n tabOptions = { ...tabOptions, value: option.value };\n }\n\n if (option.disabled) {\n tabOptions = { ...tabOptions, disabled: option.disabled };\n }\n\n return (\n \n );\n })}\n \n \n );\n};\n\nexport default TabSelector;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { Card, CardHeader } from \"@mui/material\";\nimport { Link } from \"react-router-dom\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport React, { Fragment } from \"react\";\nimport { widgetCommon } from \"../Common/FormComponents/common/styleLibrary\";\n\nexport interface ISubInterface {\n message: string;\n fontWeight?: \"normal\" | \"bold\";\n}\n\ninterface ICommonCard {\n title: string;\n metricValue: any;\n metricUnit?: string;\n subMessage?: ISubInterface;\n moreLink?: string;\n rightComponent?: any;\n extraMargin?: boolean;\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...widgetCommon,\n cardRoot: {\n ...widgetCommon.singleValueContainer,\n \"&.MuiPaper-root\": {\n borderRadius: 10,\n },\n },\n metricText: {\n fontSize: 70,\n lineHeight: 1.1,\n color: \"#07193E\",\n fontWeight: \"bold\",\n },\n unitText: {\n fontSize: 10,\n color: \"#767676\",\n fontWeight: \"normal\",\n },\n subHearderContainer: {\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n },\n subMessage: {\n fontSize: 10,\n color: \"#767676\",\n \"&.bold\": {\n fontWeight: \"bold\",\n },\n },\n headerContainer: {\n display: \"flex\",\n justifyContent: \"space-between\",\n },\n viewAll: {\n fontSize: 10,\n color: \"#C83B51\",\n textTransform: \"capitalize\",\n\n \"& a, & a:hover, & a:visited, & a:active\": {\n color: \"#C83B51\",\n },\n },\n extraMargin: {\n margin: \"10px 20px 10px 0\",\n },\n });\n\nconst cardSubStyles = makeStyles({\n root: { backgroundColor: \"#fff\", padding: 0 },\n title: {\n ...widgetCommon.titleContainer,\n },\n content: {\n maxWidth: \"100%\",\n },\n});\n\nconst CommonCard = ({\n title,\n metricValue,\n metricUnit,\n subMessage,\n moreLink,\n rightComponent,\n extraMargin = false,\n classes,\n}: ICommonCard) => {\n const subStyles = cardSubStyles();\n const SubHeader = () => {\n return (\n \n
\n
\n
\n \n {metricValue}\n {metricUnit}\n \n
\n {subMessage && (\n \n {subMessage.message}\n
\n )}\n
\n
{rightComponent}
\n \n
\n );\n };\n\n const Header = () => {\n return (\n \n
\n {title}\n {moreLink && (\n \n \n View All\n \n \n )}\n
\n
\n );\n };\n\n return (\n \n \n {metricValue !== \"\" && (\n }\n subheader={\n \n \n \n }\n classes={{\n root: subStyles.root,\n title: subStyles.title,\n content: subStyles.content,\n }}\n />\n )}\n \n \n );\n};\n\nexport default withStyles(styles)(CommonCard);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport CommonCard from \"../CommonCard\";\n\ninterface IMergedWidgets {\n title: string;\n leftComponent: any;\n rightComponent: any;\n}\n\nconst MergedWidgets = ({\n title,\n leftComponent,\n rightComponent,\n}: IMergedWidgets) => {\n return (\n \n \n \n );\n};\n\nexport default MergedWidgets;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { tooltipCommon } from \"../../../../Common/FormComponents/common/styleLibrary\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...tooltipCommon,\n });\n\nconst BarChartTooltip = ({\n active,\n payload,\n label,\n barChartConfiguration,\n classes,\n}: any) => {\n if (active) {\n return (\n
\n
{label}
\n {payload &&\n payload.map((pl: any, index: number) => {\n return (\n \n \n
\n {pl.value}\n
\n
\n );\n })}\n \n );\n }\n\n return null;\n};\n\nexport default withStyles(styles)(BarChartTooltip);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport {\n Bar,\n BarChart,\n Cell,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from \"recharts\";\nimport { CircularProgress, useMediaQuery } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport ZoomOutMapIcon from \"@mui/icons-material/ZoomOutMap\";\nimport { IBarChartConfiguration } from \"./types\";\nimport { widgetCommon } from \"../../../Common/FormComponents/common/styleLibrary\";\nimport BarChartTooltip from \"./tooltips/BarChartTooltip\";\nimport { setErrorSnackMessage } from \"../../../../../actions\";\nimport { IDashboardPanel } from \"../types\";\nimport { widgetDetailsToPanel } from \"../utils\";\nimport { ErrorResponseHandler } from \"../../../../../common/types\";\nimport api from \"../../../../../common/api\";\nimport { openZoomPage } from \"../../actions\";\nimport { useTheme } from \"@mui/styles\";\n\ninterface IBarChartWidget {\n classes: any;\n title: string;\n panelItem: IDashboardPanel;\n timeStart: any;\n timeEnd: any;\n propLoading: boolean;\n displayErrorMessage: any;\n apiPrefix: string;\n zoomActivated?: boolean;\n openZoomPage: typeof openZoomPage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...widgetCommon,\n loadingAlign: {\n width: \"100%\",\n paddingTop: \"15px\",\n textAlign: \"center\",\n margin: \"auto\",\n },\n });\n\nconst CustomizedAxisTick = ({ y, payload }: any) => {\n return (\n \n {payload.value}\n \n );\n};\n\nconst BarChartWidget = ({\n classes,\n title,\n panelItem,\n timeStart,\n timeEnd,\n propLoading,\n displayErrorMessage,\n apiPrefix,\n zoomActivated = false,\n openZoomPage,\n}: IBarChartWidget) => {\n const [loading, setLoading] = useState(true);\n const [data, setData] = useState([]);\n const [result, setResult] = useState(null);\n\n useEffect(() => {\n if (propLoading) {\n setLoading(true);\n }\n }, [propLoading]);\n\n useEffect(() => {\n if (loading) {\n let stepCalc = 0;\n if (timeStart !== null && timeEnd !== null) {\n const secondsInPeriod = timeEnd.unix() - timeStart.unix();\n const periods = Math.floor(secondsInPeriod / 60);\n\n stepCalc = periods < 1 ? 15 : periods;\n }\n\n api\n .invoke(\n \"GET\",\n `/api/v1/${apiPrefix}/info/widgets/${\n panelItem.id\n }/?step=${stepCalc}&${\n timeStart !== null ? `&start=${timeStart.unix()}` : \"\"\n }${timeStart !== null && timeEnd !== null ? \"&\" : \"\"}${\n timeEnd !== null ? `end=${timeEnd.unix()}` : \"\"\n }`\n )\n .then((res: any) => {\n const widgetsWithValue = widgetDetailsToPanel(res, panelItem);\n setData(widgetsWithValue.data);\n setResult(widgetsWithValue);\n setLoading(false);\n })\n .catch((err: ErrorResponseHandler) => {\n displayErrorMessage(err);\n setLoading(false);\n });\n }\n }, [loading, panelItem, timeEnd, timeStart, displayErrorMessage, apiPrefix]);\n\n const barChartConfiguration = result\n ? (result.widgetConfiguration as IBarChartConfiguration[])\n : [];\n\n let greatestIndex = 0;\n let currentValue = 0;\n\n if (barChartConfiguration.length === 1) {\n const dataGraph = barChartConfiguration[0];\n data.forEach((item: any, index: number) => {\n if (item[dataGraph.dataKey] > currentValue) {\n currentValue = item[dataGraph.dataKey];\n greatestIndex = index;\n }\n });\n }\n\n const theme = useTheme();\n const biggerThanMd = useMediaQuery(theme.breakpoints.up(\"md\"));\n\n return (\n
\n {!zoomActivated && (\n
\n {title}{\" \"}\n {\n openZoomPage(panelItem);\n }}\n className={classes.zoomChartIcon}\n >\n \n \n
\n )}\n {loading && (\n
\n \n
\n )}\n {!loading && (\n \n \n \n \n }\n tickLine={false}\n axisLine={false}\n width={150}\n hide={!biggerThanMd}\n />\n {barChartConfiguration.map((bar) => (\n \n {barChartConfiguration.length === 1 ? (\n \n {data.map((_: any, index: number) => (\n \n ))}\n \n ) : null}\n \n ))}\n \n }\n />\n \n \n
\n )}\n \n );\n};\n\nconst connector = connect(null, {\n displayErrorMessage: setErrorSnackMessage,\n openZoomPage: openZoomPage,\n});\n\nexport default withStyles(styles)(connector(BarChartWidget));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { getTimeFromTimestamp } from \"../../../../../../common/utils\";\nimport { tooltipCommon } from \"../../../../Common/FormComponents/common/styleLibrary\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...tooltipCommon,\n });\n\nconst LineChartTooltip = ({\n active,\n payload,\n label,\n linearConfiguration,\n yAxisFormatter,\n classes,\n}: any) => {\n if (active) {\n return (\n
\n
\n {getTimeFromTimestamp(label, true)}\n
\n {payload &&\n payload.map((pl: any, index: number) => {\n return (\n \n \n
\n \n {linearConfiguration[index].keyLabel}:{\" \"}\n {yAxisFormatter(pl.value)}\n \n
\n
\n );\n })}\n \n );\n }\n\n return null;\n};\n\nexport default withStyles(styles)(LineChartTooltip);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport {\n Area,\n AreaChart,\n CartesianGrid,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from \"recharts\";\nimport { CircularProgress, useMediaQuery } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport ZoomOutMapIcon from \"@mui/icons-material/ZoomOutMap\";\nimport { ILinearGraphConfiguration } from \"./types\";\nimport { widgetCommon } from \"../../../Common/FormComponents/common/styleLibrary\";\nimport { IDashboardPanel } from \"../types\";\nimport { setErrorSnackMessage } from \"../../../../../actions\";\nimport { widgetDetailsToPanel } from \"../utils\";\nimport { ErrorResponseHandler } from \"../../../../../common/types\";\nimport api from \"../../../../../common/api\";\nimport LineChartTooltip from \"./tooltips/LineChartTooltip\";\nimport { openZoomPage } from \"../../actions\";\nimport { useTheme } from \"@mui/styles\";\n\ninterface ILinearGraphWidget {\n classes: any;\n title: string;\n panelItem: IDashboardPanel;\n timeStart: any;\n timeEnd: any;\n propLoading: boolean;\n displayErrorMessage: any;\n apiPrefix: string;\n hideYAxis?: boolean;\n yAxisFormatter?: (item: string) => string;\n xAxisFormatter?: (item: string) => string;\n areaWidget?: boolean;\n zoomActivated?: boolean;\n openZoomPage: typeof openZoomPage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...widgetCommon,\n containerElements: {\n display: \"flex\",\n flexDirection: \"row\",\n height: \"100%\",\n flexGrow: 1,\n },\n verticalAlignment: {\n flexDirection: \"column\",\n },\n chartCont: {\n position: \"relative\",\n height: 140,\n width: \"100%\",\n },\n legendChart: {\n display: \"flex\",\n flexDirection: \"column\",\n flex: \"0 1 auto\",\n maxHeight: 130,\n margin: 0,\n overflowY: \"auto\",\n position: \"relative\",\n textAlign: \"center\",\n width: \"100%\",\n justifyContent: \"flex-start\",\n color: \"#404143\",\n fontWeight: \"bold\",\n fontSize: 12,\n },\n loadingAlign: {\n margin: \"auto\",\n },\n });\n\nconst LinearGraphWidget = ({\n classes,\n title,\n displayErrorMessage,\n timeStart,\n timeEnd,\n propLoading,\n panelItem,\n apiPrefix,\n hideYAxis = false,\n areaWidget = false,\n yAxisFormatter = (item: string) => item,\n xAxisFormatter = (item: string) => item,\n zoomActivated = false,\n openZoomPage,\n}: ILinearGraphWidget) => {\n const [loading, setLoading] = useState(true);\n const [data, setData] = useState([]);\n const [dataMax, setDataMax] = useState(0);\n const [result, setResult] = useState(null);\n\n useEffect(() => {\n if (propLoading) {\n setLoading(true);\n }\n }, [propLoading]);\n\n useEffect(() => {\n if (loading) {\n let stepCalc = 0;\n if (timeStart !== null && timeEnd !== null) {\n const secondsInPeriod = timeEnd.unix() - timeStart.unix();\n const periods = Math.floor(secondsInPeriod / 60);\n\n stepCalc = periods < 1 ? 15 : periods;\n }\n\n api\n .invoke(\n \"GET\",\n `/api/v1/${apiPrefix}/info/widgets/${\n panelItem.id\n }/?step=${stepCalc}&${\n timeStart !== null ? `&start=${timeStart.unix()}` : \"\"\n }${timeStart !== null && timeEnd !== null ? \"&\" : \"\"}${\n timeEnd !== null ? `end=${timeEnd.unix()}` : \"\"\n }`\n )\n .then((res: any) => {\n const widgetsWithValue = widgetDetailsToPanel(res, panelItem);\n setData(widgetsWithValue.data);\n setResult(widgetsWithValue);\n setLoading(false);\n let maxVal = 0;\n for (const dp of widgetsWithValue.data) {\n for (const key in dp) {\n if (key === \"name\") {\n continue;\n }\n let val = parseInt(dp[key]);\n\n if (isNaN(val)) {\n val = 0;\n }\n\n if (maxVal < val) {\n maxVal = val;\n }\n }\n }\n setDataMax(maxVal);\n })\n .catch((err: ErrorResponseHandler) => {\n displayErrorMessage(err);\n setLoading(false);\n });\n }\n }, [loading, panelItem, timeEnd, timeStart, displayErrorMessage, apiPrefix]);\n\n let intervalCount = Math.floor(data.length / 5);\n\n const linearConfiguration = result\n ? (result?.widgetConfiguration as ILinearGraphConfiguration[])\n : [];\n\n const CustomizedDot = (prop: any) => {\n const { cx, cy, index } = prop;\n\n if (index % 3 !== 0) {\n return null;\n }\n return ;\n };\n\n const theme = useTheme();\n const biggerThanMd = useMediaQuery(theme.breakpoints.up(\"md\"));\n\n return (\n
\n {!zoomActivated && (\n
\n {title}{\" \"}\n {\n openZoomPage(panelItem);\n }}\n className={classes.zoomChartIcon}\n >\n \n \n
\n )}\n \n {loading && }\n {!loading && (\n \n \n \n \n {areaWidget && (\n \n \n \n \n \n \n )}\n \n xAxisFormatter(value)}\n interval={intervalCount}\n tick={{\n fontSize: \"70%\",\n fontWeight: \"bold\",\n color: \"#404143\",\n }}\n tickCount={10}\n stroke={\"#082045\"}\n />\n yAxisFormatter(value)}\n tick={{\n fontSize: \"70%\",\n fontWeight: \"bold\",\n color: \"#404143\",\n }}\n stroke={\"#082045\"}\n />\n {linearConfiguration.map((section, index) => {\n return (\n : false}\n />\n );\n })}\n \n }\n wrapperStyle={{\n zIndex: 5000,\n }}\n />\n \n \n
\n {!areaWidget && (\n \n {zoomActivated && (\n \n Series\n
\n
\n
\n )}\n {biggerThanMd && (\n
\n {linearConfiguration.map((section, index) => {\n return (\n \n \n
\n {section.keyLabel}\n
\n
\n );\n })}\n \n )}\n
\n )}\n \n )}\n \n \n );\n};\n\nconst connector = connect(null, {\n displayErrorMessage: setErrorSnackMessage,\n openZoomPage: openZoomPage,\n});\n\nexport default withStyles(styles)(connector(LinearGraphWidget));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { CircularProgress } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { Cell, Pie, PieChart, ResponsiveContainer } from \"recharts\";\nimport { IPieChartConfiguration } from \"./types\";\nimport { widgetCommon } from \"../../../Common/FormComponents/common/styleLibrary\";\nimport { setErrorSnackMessage } from \"../../../../../actions\";\nimport { IDashboardPanel } from \"../types\";\nimport { splitSizeMetric, widgetDetailsToPanel } from \"../utils\";\nimport { ErrorResponseHandler } from \"../../../../../common/types\";\nimport get from \"lodash/get\";\nimport api from \"../../../../../common/api\";\n\ninterface IPieChartWidget {\n classes: any;\n title: string;\n panelItem: IDashboardPanel;\n timeStart: any;\n timeEnd: any;\n propLoading: boolean;\n displayErrorMessage: any;\n apiPrefix: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...widgetCommon,\n loadingAlign: {\n width: \"100%\",\n paddingTop: \"15px\",\n textAlign: \"center\",\n margin: \"auto\",\n },\n pieChartLabel: {\n fontSize: 60,\n color: \"#07193E\",\n fontWeight: \"bold\",\n width: \"100%\",\n \"& .unitText\": {\n color: \"#767676\",\n fontSize: 12,\n },\n },\n chartContainer: {\n width: \"100%\",\n height: 140,\n },\n });\n\nconst PieChartWidget = ({\n classes,\n title,\n panelItem,\n timeStart,\n timeEnd,\n propLoading,\n displayErrorMessage,\n apiPrefix,\n}: IPieChartWidget) => {\n const [loading, setLoading] = useState(true);\n const [dataInner, setDataInner] = useState([]);\n const [dataOuter, setDataOuter] = useState([]);\n const [result, setResult] = useState(null);\n\n useEffect(() => {\n if (propLoading) {\n setLoading(true);\n }\n }, [propLoading]);\n\n useEffect(() => {\n if (loading) {\n let stepCalc = 0;\n if (timeStart !== null && timeEnd !== null) {\n const secondsInPeriod = timeEnd.unix() - timeStart.unix();\n const periods = Math.floor(secondsInPeriod / 60);\n\n stepCalc = periods < 1 ? 15 : periods;\n }\n\n api\n .invoke(\n \"GET\",\n `/api/v1/${apiPrefix}/info/widgets/${\n panelItem.id\n }/?step=${stepCalc}&${\n timeStart !== null ? `&start=${timeStart.unix()}` : \"\"\n }${timeStart !== null && timeEnd !== null ? \"&\" : \"\"}${\n timeEnd !== null ? `end=${timeEnd.unix()}` : \"\"\n }`\n )\n .then((res: any) => {\n const widgetsWithValue = widgetDetailsToPanel(res, panelItem);\n setDataInner(widgetsWithValue.data);\n setDataOuter(widgetsWithValue.dataOuter as object[]);\n setResult(widgetsWithValue);\n setLoading(false);\n })\n .catch((err: ErrorResponseHandler) => {\n displayErrorMessage(err);\n setLoading(false);\n });\n }\n }, [loading, panelItem, timeEnd, timeStart, displayErrorMessage, apiPrefix]);\n\n const pieChartConfiguration = result\n ? (result.widgetConfiguration as IPieChartConfiguration)\n : [];\n const middleLabel = result?.innerLabel;\n\n const innerColors = get(pieChartConfiguration, \"innerChart.colorList\", []);\n const outerColors = get(pieChartConfiguration, \"outerChart.colorList\", []);\n\n return (\n
\n
{title}
\n {loading && (\n
\n \n
\n )}\n {!loading && (\n
\n \n {middleLabel && splitSizeMetric(middleLabel)}\n \n
\n \n \n {dataOuter && (\n \n {dataOuter.map((entry, index) => (\n \n ))}\n \n )}\n {dataInner && (\n \n {dataInner.map((entry, index) => {\n return (\n \n );\n })}\n \n )}\n \n \n
\n
\n )}\n
\n );\n};\n\nconst connector = connect(null, {\n displayErrorMessage: setErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(PieChartWidget));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { CircularProgress } from \"@mui/material\";\nimport api from \"../../../../../common/api\";\nimport { widgetDetailsToPanel } from \"../utils\";\nimport { IDashboardPanel } from \"../types\";\nimport { setErrorSnackMessage } from \"../../../../../actions\";\nimport { ErrorResponseHandler } from \"../../../../../common/types\";\n\ninterface ISimpleWidget {\n classes: any;\n iconWidget: any;\n title: string;\n panelItem: IDashboardPanel;\n timeStart: any;\n timeEnd: any;\n propLoading: boolean;\n displayErrorMessage: any;\n apiPrefix: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n mainWidgetContainer: {\n display: \"inline-flex\",\n color: \"#072A4D\",\n alignItems: \"center\",\n },\n icon: {\n color: \"#072A4D\",\n fill: \"#072A4D\",\n marginRight: 5,\n marginLeft: 12,\n },\n widgetLabel: {\n fontWeight: \"bold\",\n textTransform: \"uppercase\",\n marginRight: 10,\n },\n widgetValue: {\n marginRight: 25,\n },\n });\n\nconst SimpleWidget = ({\n classes,\n iconWidget,\n title,\n panelItem,\n timeStart,\n timeEnd,\n propLoading,\n displayErrorMessage,\n apiPrefix,\n}: ISimpleWidget) => {\n const [loading, setLoading] = useState(true);\n const [data, setData] = useState(\"\");\n\n useEffect(() => {\n if (propLoading) {\n setLoading(true);\n }\n }, [propLoading]);\n\n useEffect(() => {\n if (loading) {\n let stepCalc = 0;\n if (timeStart !== null && timeEnd !== null) {\n const secondsInPeriod = timeEnd.unix() - timeStart.unix();\n const periods = Math.floor(secondsInPeriod / 60);\n\n stepCalc = periods < 1 ? 15 : periods;\n }\n\n api\n .invoke(\n \"GET\",\n `/api/v1/${apiPrefix}/info/widgets/${\n panelItem.id\n }/?step=${stepCalc}&${\n timeStart !== null ? `&start=${timeStart.unix()}` : \"\"\n }${timeStart !== null && timeEnd !== null ? \"&\" : \"\"}${\n timeEnd !== null ? `end=${timeEnd.unix()}` : \"\"\n }`\n )\n .then((res: any) => {\n const widgetsWithValue = widgetDetailsToPanel(res, panelItem);\n setData(widgetsWithValue.data);\n setLoading(false);\n })\n .catch((err: ErrorResponseHandler) => {\n displayErrorMessage(err);\n setLoading(false);\n });\n }\n }, [loading, panelItem, timeEnd, timeStart, displayErrorMessage, apiPrefix]);\n\n return (\n \n {loading && (\n
\n \n
\n )}\n {!loading && (\n \n {iconWidget ? iconWidget : null}\n {title}: \n {data}\n \n )}\n
\n );\n};\n\nconst connector = connect(null, {\n displayErrorMessage: setErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(SimpleWidget));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { Area, AreaChart, ResponsiveContainer, YAxis } from \"recharts\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { widgetCommon } from \"../../../Common/FormComponents/common/styleLibrary\";\nimport { IDataSRep } from \"./types\";\nimport { connect } from \"react-redux\";\nimport { setErrorSnackMessage } from \"../../../../../actions\";\nimport { IDashboardPanel } from \"../types\";\nimport { widgetDetailsToPanel } from \"../utils\";\nimport { CircularProgress } from \"@mui/material\";\nimport { ErrorResponseHandler } from \"../../../../../common/types\";\nimport api from \"../../../../../common/api\";\nimport { representationNumber } from \"../../../../../common/utils\";\n\ninterface ISingleRepWidget {\n classes: any;\n title: string;\n panelItem: IDashboardPanel;\n timeStart: any;\n timeEnd: any;\n propLoading: boolean;\n displayErrorMessage: any;\n color: string;\n fillColor: string;\n apiPrefix: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...widgetCommon,\n loadingAlign: {\n width: \"100%\",\n paddingTop: \"5px\",\n textAlign: \"center\",\n margin: \"auto\",\n },\n });\n\nconst SingleRepWidget = ({\n classes,\n title,\n panelItem,\n timeStart,\n timeEnd,\n propLoading,\n displayErrorMessage,\n color,\n fillColor,\n apiPrefix,\n}: ISingleRepWidget) => {\n const [loading, setLoading] = useState(true);\n const [data, setData] = useState([]);\n const [result, setResult] = useState(null);\n\n useEffect(() => {\n if (propLoading) {\n setLoading(true);\n }\n }, [propLoading]);\n\n useEffect(() => {\n if (loading) {\n let stepCalc = 0;\n if (timeStart !== null && timeEnd !== null) {\n const secondsInPeriod = timeEnd.unix() - timeStart.unix();\n const periods = Math.floor(secondsInPeriod / 60);\n\n stepCalc = periods < 1 ? 15 : periods;\n }\n\n api\n .invoke(\n \"GET\",\n `/api/v1/${apiPrefix}/info/widgets/${\n panelItem.id\n }/?step=${stepCalc}&${\n timeStart !== null ? `&start=${timeStart.unix()}` : \"\"\n }${timeStart !== null && timeEnd !== null ? \"&\" : \"\"}${\n timeEnd !== null ? `end=${timeEnd.unix()}` : \"\"\n }`\n )\n .then((res: any) => {\n const widgetsWithValue = widgetDetailsToPanel(res, panelItem);\n setResult(widgetsWithValue);\n setData(widgetsWithValue.data);\n setLoading(false);\n })\n .catch((err: ErrorResponseHandler) => {\n displayErrorMessage(err);\n setLoading(false);\n });\n }\n }, [loading, panelItem, timeEnd, timeStart, displayErrorMessage, apiPrefix]);\n const gradientID = `colorGradient-${title.split(\" \").join(\"-\")}`;\n\n let repNumber = \"\";\n\n if (result) {\n const resultRep = parseInt(result.innerLabel || \"0\");\n\n if (!isNaN(resultRep)) {\n repNumber = representationNumber(resultRep);\n } else {\n repNumber = \"0\";\n }\n }\n\n return (\n
\n
{title}
\n {loading && (\n
\n \n
\n )}\n {!loading && (\n
\n \n \n \n \n \n \n \n \n dataMax * 2]}\n hide={true}\n />\n \n \n {result ? repNumber : \"\"}\n \n \n \n
\n )}\n
\n );\n};\n\nconst connector = connect(null, {\n displayErrorMessage: setErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(SingleRepWidget));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { widgetCommon } from \"../../../Common/FormComponents/common/styleLibrary\";\nimport api from \"../../../../../common/api\";\nimport { splitSizeMetric, widgetDetailsToPanel } from \"../utils\";\nimport { IDashboardPanel } from \"../types\";\nimport { connect } from \"react-redux\";\nimport { setErrorSnackMessage } from \"../../../../../actions\";\nimport { CircularProgress } from \"@mui/material\";\nimport { ErrorResponseHandler } from \"../../../../../common/types\";\n\ninterface ISingleValueWidget {\n title: string;\n panelItem: IDashboardPanel;\n timeStart: any;\n timeEnd: any;\n propLoading: boolean;\n displayErrorMessage: any;\n classes: any;\n apiPrefix: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...widgetCommon,\n loadingAlign: {\n width: \"100%\",\n textAlign: \"center\",\n margin: \"auto\",\n },\n metric: {\n fontSize: 60,\n lineHeight: 1,\n color: \"#07193E\",\n fontWeight: 700,\n },\n titleElement: {\n fontSize: 10,\n color: \"#767676\",\n fontWeight: 700,\n },\n containerAlignment: {\n display: \"flex\",\n height: 140,\n flexDirection: \"column\",\n justifyContent: \"center\",\n \"& .unitText\": {\n color: \"#767676\",\n fontSize: 12,\n },\n },\n });\n\nconst SingleValueWidget = ({\n title,\n panelItem,\n timeStart,\n timeEnd,\n propLoading,\n displayErrorMessage,\n classes,\n apiPrefix,\n}: ISingleValueWidget) => {\n const [loading, setLoading] = useState(true);\n const [data, setData] = useState(\"\");\n\n useEffect(() => {\n if (propLoading) {\n setLoading(true);\n }\n }, [propLoading]);\n\n useEffect(() => {\n if (loading) {\n let stepCalc = 0;\n if (timeStart !== null && timeEnd !== null) {\n const secondsInPeriod = timeEnd.unix() - timeStart.unix();\n const periods = Math.floor(secondsInPeriod / 60);\n\n stepCalc = periods < 1 ? 15 : periods;\n }\n\n api\n .invoke(\n \"GET\",\n `/api/v1/${apiPrefix}/info/widgets/${\n panelItem.id\n }/?step=${stepCalc}&${\n timeStart !== null ? `&start=${timeStart.unix()}` : \"\"\n }${timeStart !== null && timeEnd !== null ? \"&\" : \"\"}${\n timeEnd !== null ? `end=${timeEnd.unix()}` : \"\"\n }`\n )\n .then((res: any) => {\n const widgetsWithValue = widgetDetailsToPanel(res, panelItem);\n setData(widgetsWithValue.data);\n setLoading(false);\n })\n .catch((err: ErrorResponseHandler) => {\n displayErrorMessage(err);\n setLoading(false);\n });\n }\n }, [loading, panelItem, timeEnd, timeStart, displayErrorMessage, apiPrefix]);\n return (\n
\n {loading && (\n
\n \n
\n )}\n {!loading && (\n \n
{splitSizeMetric(data)}
\n
{title}
\n
\n )}\n
\n );\n};\n\nconst connector = connect(null, {\n displayErrorMessage: setErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(SingleValueWidget));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { IDashboardPanel, widgetType } from \"./types\";\nimport BarChartWidget from \"./Widgets/BarChartWidget\";\nimport LinearGraphWidget from \"./Widgets/LinearGraphWidget\";\nimport PieChartWidget from \"./Widgets/PieChartWidget\";\nimport SimpleWidget from \"./Widgets/SimpleWidget\";\nimport SingleRepWidget from \"./Widgets/SingleRepWidget\";\nimport SingleValueWidget from \"./Widgets/SingleValueWidget\";\n\nexport const componentToUse = (\n value: IDashboardPanel,\n timeStart: any,\n timeEnd: any,\n loading: boolean,\n apiPrefix: string,\n zoomActivated: boolean = false\n) => {\n switch (value.type) {\n case widgetType.singleValue:\n return (\n \n );\n case widgetType.simpleWidget:\n return (\n \n );\n case widgetType.pieChart:\n return (\n \n );\n case widgetType.linearGraph:\n case widgetType.areaGraph:\n return (\n \n );\n case widgetType.barChart:\n return (\n \n );\n case widgetType.singleRep:\n const fillColor = value.fillColor ? value.fillColor : value.color;\n return (\n \n );\n default:\n return null;\n }\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport { connect } from \"react-redux\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\nimport { IDashboardPanel } from \"./types\";\nimport { componentToUse } from \"./widgetUtils\";\nimport { closeZoomPage } from \"../actions\";\n\ninterface IZoomWidget {\n widgetRender: number;\n value: IDashboardPanel | null;\n modalOpen: boolean;\n timeStart: any;\n timeEnd: any;\n apiPrefix: string;\n onCloseAction: typeof closeZoomPage;\n}\nconst ZoomWidget = ({\n value,\n modalOpen,\n timeStart,\n timeEnd,\n apiPrefix,\n onCloseAction,\n}: IZoomWidget) => {\n if (!value) {\n return null;\n }\n\n return (\n {\n onCloseAction();\n }}\n modalOpen={modalOpen}\n wideLimit={false}\n noContentPadding\n >\n \n {componentToUse(value, timeStart, timeEnd, true, apiPrefix, true)}\n \n \n );\n};\n\nconst connector = connect(null, {\n onCloseAction: closeZoomPage,\n});\n\nexport default connector(ZoomWidget);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport Grid from \"@mui/material/Grid\";\n\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { GridSize, useMediaQuery } from \"@mui/material\";\nimport {\n actionsTray,\n widgetContainerCommon,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport { IDashboardPanel } from \"./types\";\nimport { getWidgetsWithValue, panelsConfiguration } from \"./utils\";\nimport { TabPanel } from \"../../../shared/tabs\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport { setErrorSnackMessage } from \"../../../../actions\";\nimport api from \"../../../../common/api\";\n\nimport TabSelector from \"../../Common/TabSelector/TabSelector\";\nimport MergedWidgets from \"./MergedWidgets\";\nimport { componentToUse } from \"./widgetUtils\";\nimport ZoomWidget from \"./ZoomWidget\";\nimport { AppState } from \"../../../../store\";\nimport DateRangeSelector from \"../../Common/FormComponents/DateRangeSelector/DateRangeSelector\";\nimport { useTheme } from \"@mui/styles\";\n\ninterface IPrDashboard {\n classes: any;\n displayErrorMessage: typeof setErrorSnackMessage;\n apiPrefix?: string;\n zoomOpen: boolean;\n zoomWidget: null | IDashboardPanel;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...actionsTray,\n ...widgetContainerCommon,\n dashboardRow: {\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"flex-start\",\n flexWrap: \"wrap\",\n maxWidth: 1180,\n },\n });\n\nconst PrDashboard = ({\n classes,\n displayErrorMessage,\n apiPrefix = \"admin\",\n zoomOpen,\n zoomWidget,\n}: IPrDashboard) => {\n const [timeStart, setTimeStart] = useState(null);\n const [timeEnd, setTimeEnd] = useState(null);\n const [loading, setLoading] = useState(true);\n const [panelInformation, setPanelInformation] =\n useState(panelsConfiguration);\n const [curTab, setCurTab] = useState(0);\n\n const theme = useTheme();\n const biggerThanMd = useMediaQuery(theme.breakpoints.up(\"md\"));\n\n const panels = useCallback(\n (tabName: string, filterPanels?: number[][] | null) => {\n return filterPanels?.map((panelLine, indexLine) => {\n const totalPanelsContained = panelLine.length;\n\n let perc = Math.floor(12 / totalPanelsContained);\n\n if (!biggerThanMd && totalPanelsContained >= 4) {\n perc = 6;\n } else if (!biggerThanMd && totalPanelsContained >= 3) {\n perc = 12;\n }\n\n if (perc < 1) {\n perc = 1;\n } else if (perc > 12) {\n perc = 12;\n }\n\n return (\n \n {panelLine.map((panelInline, indexPanel) => {\n const panelInfo = panelInformation.find(\n (panel) => panel.id === panelInline\n );\n\n return (\n \n \n {panelInfo ? (\n \n {panelInfo.mergedPanels ? (\n \n \n \n ) : (\n componentToUse(\n panelInfo,\n timeStart,\n timeEnd,\n loading,\n apiPrefix\n )\n )}\n \n ) : null}\n \n \n );\n })}\n \n );\n });\n },\n [\n timeStart,\n timeEnd,\n loading,\n apiPrefix,\n classes.dashboardRow,\n classes.widgetPanelDelimiter,\n panelInformation,\n biggerThanMd,\n ]\n );\n\n const fetchUsage = useCallback(() => {\n let stepCalc = 0;\n\n if (timeStart !== null && timeEnd !== null) {\n const secondsInPeriod = timeEnd.unix() - timeStart.unix();\n const periods = Math.floor(secondsInPeriod / 60);\n\n stepCalc = periods < 1 ? 15 : periods;\n }\n\n api\n .invoke(\n \"GET\",\n `/api/v1/${apiPrefix}/info?step=${stepCalc}&${\n timeStart !== null ? `&start=${timeStart.unix()}` : \"\"\n }${timeStart !== null && timeEnd !== null ? \"&\" : \"\"}${\n timeEnd !== null ? `end=${timeEnd.unix()}` : \"\"\n }`\n )\n .then((res: any) => {\n if (res.widgets) {\n const widgetsWithValue = getWidgetsWithValue(res.widgets);\n setPanelInformation(widgetsWithValue);\n } else {\n displayErrorMessage({\n errorMessage:\n \"Widget information could not be retrieved at this time. Please try again\",\n detailedError: \"\",\n });\n }\n\n setLoading(false);\n })\n .catch((err: ErrorResponseHandler) => {\n displayErrorMessage(err);\n setLoading(false);\n });\n }, [timeStart, timeEnd, displayErrorMessage, apiPrefix]);\n\n const triggerLoad = () => {\n setLoading(true);\n };\n\n useEffect(() => {\n if (loading) {\n fetchUsage();\n }\n }, [loading, fetchUsage]);\n\n const summaryPanels = [\n [66, 44, 500, 501],\n [80, 81, 1],\n [68, 52],\n [63, 70],\n ];\n\n if (biggerThanMd) {\n summaryPanels.splice(1, 0, [50, 502]);\n } else {\n summaryPanels.splice(1, 0, [50]);\n summaryPanels.splice(1, 0, [502]);\n }\n\n const resourcesPanels = [\n [76, 77],\n [11, 8],\n [82, 74],\n ];\n const requestsPanels = [[60], [71, 17], [73]];\n\n return (\n \n {zoomOpen && (\n \n )}\n \n \n {\n setCurTab(newValue);\n }}\n tabOptions={[\n { label: \"Usage\" },\n { label: \"Traffic\" },\n { label: \"Resources\" },\n ]}\n />\n \n \n \n {panels(\"Summary\", summaryPanels)}\n \n \n {panels(\"Traffic\", requestsPanels)}\n \n \n {panels(\"Resources\", resourcesPanels)}\n \n \n \n );\n};\n\nconst mapState = (state: AppState) => ({\n zoomOpen: state.dashboard.zoom.openZoom,\n zoomWidget: state.dashboard.zoom.widgetRender,\n});\n\nconst connector = connect(mapState, {\n displayErrorMessage: setErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(PrDashboard));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { Box } from \"@mui/material\";\nimport { CircleIcon } from \"../../../../icons\";\n\nexport const StatusCountCard = ({\n onlineCount = 0,\n offlineCount = 0,\n icon = null,\n label = \"\",\n}: {\n icon: any;\n onlineCount: number;\n offlineCount: number;\n label: string;\n}) => {\n return (\n \n \n \n \n {label}\n \n\n \n \n \n
Online
\n
\n {onlineCount}\n \n\n \n \n
Offline
\n
\n {offlineCount}\n \n \n \n \n {icon}\n \n \n \n );\n};\n\nexport default StatusCountCard;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nexport const STATUS_COLORS = {\n RED: \"#C83B51\",\n GREEN: \"#4CCB92\",\n YELLOW: \"#E7A219\",\n};\n\nexport const getDriveStatusColor = (\n activeDisks: number,\n totalDrives: number\n) => {\n if (activeDisks <= totalDrives / 2) {\n return STATUS_COLORS.RED;\n }\n if (totalDrives !== 2 && activeDisks === totalDrives / 2 + 1) {\n return STATUS_COLORS.YELLOW;\n }\n if (activeDisks === totalDrives) {\n return STATUS_COLORS.GREEN;\n }\n};\n\nexport const serverStatusColor = (health_status: string) => {\n switch (health_status) {\n case \"offline\":\n return STATUS_COLORS.RED;\n case \"online\":\n return STATUS_COLORS.GREEN;\n default:\n return STATUS_COLORS.YELLOW;\n }\n};\nexport const getNetworkStatusColor = (\n activeNetwork: number,\n networkTotal: number\n) => {\n if (activeNetwork <= networkTotal / 2) {\n return STATUS_COLORS.RED;\n }\n if (activeNetwork === networkTotal / 2 + 1) {\n return STATUS_COLORS.YELLOW;\n }\n if (activeNetwork === networkTotal) {\n return STATUS_COLORS.GREEN;\n }\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React from \"react\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { ServerInfo } from \"../types\";\nimport { niceDays } from \"../../../../common/utils\";\nimport { Box } from \"@mui/material\";\nimport {\n CircleIcon,\n DrivesIcon,\n UptimeIcon,\n VersionIcon,\n WarpIcon,\n} from \"../../../../icons\";\nimport get from \"lodash/get\";\nimport { commonDashboardInfocard } from \"../../Common/FormComponents/common/styleLibrary\";\nimport {\n getDriveStatusColor,\n getNetworkStatusColor,\n serverStatusColor,\n} from \"./Utils\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...commonDashboardInfocard,\n });\n\ninterface ICardProps {\n classes?: any;\n server: ServerInfo;\n index: number;\n}\n\nconst ServerStatItem = ({\n label = \"\",\n value = \"\",\n statusColor = \"\",\n hasStatus = false,\n icon = null,\n}: {\n label?: string;\n value?: any;\n hasStatus?: boolean;\n statusColor: string | undefined;\n icon?: any;\n}) => {\n return (\n \n \n {icon}\n {hasStatus ? (\n \n \n \n ) : (\n \n )}\n \n \n
{label}
\n
{value}
\n \n \n );\n};\n\nconst ServerInfoItem = ({ classes = {}, server, index }: ICardProps) => {\n const networkKeys = Object.keys(get(server, \"network\", {}));\n const networkTotal = networkKeys.length;\n const totalDrives = server.drives ? server.drives.length : 0;\n const activeNetwork = networkKeys.reduce((acc: number, currValue: string) => {\n const item = server.network[currValue];\n if (item === \"online\") {\n return acc + 1;\n }\n return acc;\n }, 0);\n const activeDisks = server.drives\n ? server.drives.filter((element) => element.state === \"ok\").length\n : 0;\n return (\n \n \n {server?.state && (\n \n \n \n )}\n \n {server.endpoint || \"\"}\n \n \n \n }\n hasStatus={true}\n value={`${activeDisks}/${totalDrives}`}\n />\n }\n hasStatus={true}\n value={`${activeNetwork}/${networkTotal}`}\n />\n\n }\n value={server?.uptime ? niceDays(server.uptime) : \"N/A\"}\n />\n\n }\n value={\n \n {server.version ? server.version : \"N/A\"}\n \n }\n />\n \n \n );\n};\nexport default withStyles(styles)(ServerInfoItem);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { IDriveInfo } from \"../types\";\nimport { niceBytes } from \"../../../../common/utils\";\nimport { Box } from \"@mui/material\";\nimport { CircleIcon, DrivesIcon } from \"../../../../icons\";\nimport { commonDashboardInfocard } from \"../../Common/FormComponents/common/styleLibrary\";\nimport { STATUS_COLORS } from \"./Utils\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...commonDashboardInfocard,\n });\n\ninterface ICardProps {\n classes?: any;\n drive: IDriveInfo;\n}\n\nconst driveStatusColor = (health_status: string) => {\n switch (health_status) {\n case \"offline\":\n return STATUS_COLORS.RED;\n case \"ok\":\n return STATUS_COLORS.GREEN;\n default:\n return STATUS_COLORS.YELLOW;\n }\n};\n\nconst DriveInfoItem = ({ classes, drive }: ICardProps) => {\n return (\n \n \n \n \n\n \n \n {drive.state && }\n
{drive.endpoint || \"\"}
\n \n\n \n \n \n
\n {niceBytes(drive.totalSpace ? drive.totalSpace.toString() : \"0\")}\n
\n \n\n \n \n
\n {niceBytes(drive.usedSpace ? drive.usedSpace.toString() : \"0\")}\n
\n \n \n \n
\n {niceBytes(\n drive.availableSpace ? drive.availableSpace.toString() : \"0\"\n )}\n
\n \n \n \n \n );\n};\n\nexport default withStyles(styles)(DriveInfoItem);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport ListSubheader from \"@mui/material/ListSubheader\";\nimport List from \"@mui/material/List\";\nimport ListItemButton from \"@mui/material/ListItemButton\";\nimport Collapse from \"@mui/material/Collapse\";\nimport ExpandLess from \"@mui/icons-material/ExpandLess\";\nimport ExpandMore from \"@mui/icons-material/ExpandMore\";\nimport { ServerInfo } from \"../types\";\nimport ServerInfoItem from \"./ServerInfoItem\";\nimport { Box } from \"@mui/material\";\nimport DriveInfoItem from \"./DriveInfoItem\";\n\nconst ServersList = ({ data }: { data: ServerInfo[] }) => {\n const [expanded, setExpanded] = React.useState(\"\");\n\n const handleClick = (key: string) => {\n setExpanded(key);\n };\n\n return (\n \n Servers ({data.length})\n \n }\n >\n {data.map((serverInfo, index) => {\n const key = `${serverInfo.endpoint}-${index}`;\n const isExpanded = expanded === key;\n return (\n \n {\n if (!isExpanded) {\n handleClick(key);\n } else {\n handleClick(\"\");\n }\n }}\n className={isExpanded ? \"expanded\" : \"\"}\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n borderBottom: \"1px solid #eaeaea\",\n \"&:hover\": {\n background: \"#F8F8F8\",\n },\n \"&.expanded\": {\n borderBottom: \"none\",\n },\n }}\n >\n \n \n {isExpanded ? : }\n \n \n {isExpanded ? (\n \n \n Drives ({serverInfo.drives.length})\n \n\n \n {serverInfo.drives.map((driveInfo, index) => {\n return (\n \n );\n })}\n \n \n ) : null}\n \n );\n })}\n \n );\n};\n\nexport default ServersList;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { Box, Tooltip } from \"@mui/material\";\nimport React from \"react\";\n\nconst CounterCard = ({\n counterValue,\n label = \"\",\n icon = null,\n}: {\n counterValue: string | number;\n label?: any;\n icon?: any;\n}) => {\n return (\n \n \n \n \n {label}\n \n\n \n \n {counterValue}\n \n \n \n \n {icon}\n \n \n \n );\n};\n\nexport default CounterCard;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { ReportedUsageIcon } from \"../../../../icons\";\nimport { Box, Tooltip } from \"@mui/material\";\nimport React from \"react\";\n\nconst ReportedUsage = ({\n usageValue,\n total,\n unit,\n}: {\n usageValue: string;\n total: number | string;\n unit: string;\n}) => {\n return (\n \n
\n Reported Usage \n
\n\n \n \n {total}\n \n \n \n \n );\n};\n\nexport default ReportedUsage;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2022 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport { Box } from \"@mui/material\";\nimport {\n BucketsIcon,\n DrivesIcon,\n PrometheusErrorIcon,\n ServersIcon,\n TotalObjectsIcon,\n} from \"../../../../icons\";\nimport HelpBox from \"../../../../common/HelpBox\";\nimport { calculateBytes, representationNumber } from \"../../../../common/utils\";\nimport { IDriveInfo, Usage } from \"../types\";\nimport StatusCountCard from \"./StatusCountCard\";\nimport groupBy from \"lodash/groupBy\";\nimport ServersList from \"./ServersList\";\nimport CounterCard from \"./CounterCard\";\nimport ReportedUsage from \"./ReportedUsage\";\n\nconst BoxItem = ({\n children,\n background = \"#ffffff\",\n}: {\n children: any;\n background?: string;\n}) => {\n return (\n \n {children}\n \n );\n};\n\ninterface IDashboardProps {\n usage: Usage | null;\n}\n\nconst getServersList = (usage: Usage | null) => {\n if (usage !== null) {\n return usage.servers.sort(function (a, b) {\n const nameA = a.endpoint.toLowerCase();\n const nameB = b.endpoint.toLowerCase();\n if (nameA < nameB) {\n return -1;\n }\n if (nameA > nameB) {\n return 1;\n }\n return 0;\n });\n }\n\n return [];\n};\n\nconst prettyUsage = (usage: string | undefined) => {\n if (usage === undefined) {\n return { total: \"0\", unit: \"Mi\" };\n }\n\n return calculateBytes(usage);\n};\n\nconst BasicDashboard = ({ usage }: IDashboardProps) => {\n const usageValue = usage && usage.usage ? usage.usage.toString() : \"0\";\n const usageToRepresent = prettyUsage(usageValue);\n\n const serverList = getServersList(usage || null);\n\n let allDrivesArray: IDriveInfo[] = [];\n\n serverList.forEach((server) => {\n const drivesInput = server.drives.map((drive) => {\n return drive;\n });\n\n allDrivesArray = [...allDrivesArray, ...drivesInput];\n });\n\n const serversGroup = groupBy(serverList, \"state\");\n const { offline: offlineServers = [], online: onlineServers = [] } =\n serversGroup;\n const drivesGroup = groupBy(allDrivesArray, \"state\");\n const { offline: offlineDrives = [], ok: onlineDrives = [] } = drivesGroup;\n\n return (\n \n \n \n {usage?.prometheusNotReady && (\n }\n title={\"We can't retrieve advanced metrics at this time\"}\n help={\n \n MinIO Dashboard will display basic metrics as we couldn't\n connect to Prometheus successfully.\n

\n Please try again in a few minutes. If the problem persists,\n you can review your configuration and confirm that Prometheus\n server is up and running.\n
\n }\n />\n )}\n\n {!usage?.prometheusNotReady && (\n }\n title={\"We can’t retrieve advanced metrics at this time.\"}\n help={\n \n \n MinIO Dashboard will display basic metrics as we couldn’t\n connect to Prometheus successfully. Please try again in a\n few minutes. If the problem persists, you can review your\n configuration and confirm that Prometheus server is up and\n running.\n \n theme.colors.link,\n },\n }}\n >\n \n Read more about Prometheus on our Docs site.\n \n
\n \n }\n />\n )}\n \n\n \n \n \n }\n counterValue={usage ? representationNumber(usage.buckets) : 0}\n />\n \n \n }\n counterValue={usage ? representationNumber(usage.objects) : 0}\n />\n \n \n }\n />\n \n \n }\n />\n \n \n\n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default BasicDashboard;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport get from \"lodash/get\";\nimport PrDashboard from \"./Prometheus/PrDashboard\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\nimport Grid from \"@mui/material/Grid\";\nimport { containerForHeader } from \"../Common/FormComponents/common/styleLibrary\";\nimport { Theme } from \"@mui/material/styles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport withStyles from \"@mui/styles/withStyles\";\nimport { LinearProgress } from \"@mui/material\";\nimport api from \"../../../common/api\";\nimport { Usage } from \"./types\";\nimport { setErrorSnackMessage } from \"../../../actions\";\nimport { ErrorResponseHandler } from \"../../../common/types\";\nimport BasicDashboard from \"./BasicDashboard/BasicDashboard\";\n\ninterface IDashboardSimple {\n classes: any;\n displayErrorMessage: typeof setErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst Dashboard = ({ classes, displayErrorMessage }: IDashboardSimple) => {\n const [loading, setLoading] = useState(true);\n const [basicResult, setBasicResult] = useState(null);\n\n const fetchUsage = useCallback(() => {\n api\n .invoke(\"GET\", `/api/v1/admin/info`)\n .then((res: Usage) => {\n setBasicResult(res);\n setLoading(false);\n })\n .catch((err: ErrorResponseHandler) => {\n displayErrorMessage(err);\n setLoading(false);\n });\n }, [setBasicResult, setLoading, displayErrorMessage]);\n\n useEffect(() => {\n if (loading) {\n fetchUsage();\n }\n }, [loading, fetchUsage]);\n\n const widgets = get(basicResult, \"widgets\", null);\n\n return (\n \n \n {loading ? (\n \n \n \n \n \n ) : (\n \n {widgets !== null ? (\n \n \n \n ) : (\n \n )}\n \n )}\n \n );\n};\n\nconst connector = connect(null, {\n displayErrorMessage: setErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(Dashboard));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\n\ninterface TabPanelProps {\n children?: React.ReactNode;\n index: any;\n value: any;\n}\n\nexport const TabPanel = (props: TabPanelProps) => {\n const { children, value, index, ...other } = props;\n\n return (\n