@openremote/or-dashboard-builder 1.2.0-snapshot.20240512162641 → 1.2.0-snapshot.20240819101332
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/umd/003671ee2a876e7614cd94390e2255b3.js +1 -0
- package/dist/umd/0078b630bed2938ce03f618c2bcd1363.js +1 -0
- package/dist/umd/0144de97a3c256f81447e7e7135780e5.js +1 -0
- package/dist/umd/019e34e85139cfc611bf23efa096c980.js +1 -0
- package/dist/umd/02174460fe8ff6a6bc19db86543b9600.js +1 -0
- package/dist/umd/029ed9161a8d24a9c2ba97124020989d.js +1 -0
- package/dist/umd/03452373324e7ceaf58e3830eafd1a28.js +1 -0
- package/dist/umd/03980cb12dacd26148c22bb61fce440f.js +1 -0
- package/dist/umd/03a5f5b2b97a8fc289399d92fba810d0.js +1 -0
- package/dist/umd/03aae8272914723a7bf85b984385032c.js +1 -0
- package/dist/umd/03ab996935e5c1a84ac09966ede74fb8.js +1 -0
- package/dist/umd/0416c21cfe088739209926632a360e3b.js +1 -0
- package/dist/umd/069a0d6b093e73e820f6a60a91fa614b.js +1 -0
- package/dist/umd/06d958315fc6cdbb28576b03e43203aa.js +1 -0
- package/dist/umd/07397bd479cbc34bc04576b4f15bdf18.js +1 -0
- package/dist/umd/07567125b93045706d81f17f7d04e262.js +1 -0
- package/dist/umd/078dd0bd08c93b1512e3d1b777591b21.js +1 -0
- package/dist/umd/0972f21af3e75388ef55435c0b3b831d.js +1 -0
- package/dist/umd/0973bb38b2e3efd2a879fd8e81d50fce.js +1 -0
- package/dist/umd/0a1d9862d917663419ac2dd2e8193267.js +1 -0
- package/dist/umd/0b06cbc7edf78b6f2810187262e7630b.js +1 -0
- package/dist/umd/0bd45b2d490c48c31619072a4fb0eaea.js +1 -0
- package/dist/umd/0cd2349b7f4b6f7013e195c8145d2917.js +1 -0
- package/dist/umd/0dd9fc97c3dee2275f41cd20ffaea059.js +1 -0
- package/dist/umd/0e67325b9a04863301e36c0c37947069.js +1 -0
- package/dist/umd/0f147528a6f36ca40c8b3ec796429f58.js +1 -0
- package/dist/umd/0f2d1162158745e1093693a3a999932a.js +1 -0
- package/dist/umd/0fa30731c46fe8b6a54f9752ad0ed7e0.js +1 -0
- package/dist/umd/0fd64c8920c10008be86572dd6830dc1.js +1 -0
- package/dist/umd/10132993df2cf9c9423b53a8a44379ab.js +1 -0
- package/dist/umd/1034e3807d1bcf55cb564491950237ab.js +1 -0
- package/dist/umd/105b17c6442efb97c18ca2aef3976b06.js +1 -0
- package/dist/umd/10c464f3f882bfeeefbc0934c2ee9fbe.js +1 -0
- package/dist/umd/111d9fdb9864abba36298d1a0807fe6d.js +1 -0
- package/dist/umd/1195816afa4a5e8183857be16a04ae6f.js +1 -0
- package/dist/umd/119f6c45ea400e3c27e1ce172e4c881d.js +1 -0
- package/dist/umd/11e3a2a8fb5bcb9d19298a80cafd3f5a.js +1 -0
- package/dist/umd/130340e2c62b9e858f186dab5f491e55.js +1 -0
- package/dist/umd/135747176621bcc94e9edd0323a81d3c.js +1 -0
- package/dist/umd/1383530217ac0068c844902d24e18e08.js +1 -0
- package/dist/umd/13eda3507db9cbfb400f46b9b3ff6553.js +1 -0
- package/dist/umd/1495a3d68b15b8622c53f6688b64809f.js +1 -0
- package/dist/umd/1533058f0ce13acdaa8d5bdc7d147bef.js +1 -0
- package/dist/umd/15f3800d33b854ba476c9daf1b9e0326.js +1 -0
- package/dist/umd/16c2e1b50af4ba05edaa03c8c9e9d18c.js +1 -0
- package/dist/umd/170487867de05784a96608617bdd544d.js +1 -0
- package/dist/umd/1736cea368ae85240f34289307fdf67f.js +1 -0
- package/dist/umd/17632e1e19e438f431784dfd77e01773.js +1 -0
- package/dist/umd/17dc98279d24649d3ca77cbce8c44e83.js +1 -0
- package/dist/umd/1875ecdf54e78b5f07ff1bd944cf794b.js +1 -0
- package/dist/umd/191feb6103c36b202bc01ba262916cdf.js +1 -0
- package/dist/umd/1b15b9f88acaf59b96e59c6b5f32da12.js +1 -0
- package/dist/umd/1c24a68cb472146022d0806ea2505cfb.js +1 -0
- package/dist/umd/1c57b3481f295105588972ffa1305521.js +1 -0
- package/dist/umd/1cc6fc3772824e2f87f10a9c3fad2dae.js +1 -0
- package/dist/umd/1ce14f2cad9f3c122cb5ccfcd485ffb4.js +1 -0
- package/dist/umd/1d3796180f854b5d8ab435ab0a1c2c11.js +1 -0
- package/dist/umd/1dddd8903e00ce9149ded23fb87f6f34.js +1 -0
- package/dist/umd/1e5fe0a75db78dcabbd4f27c2b084e4b.js +1 -0
- package/dist/umd/1ed6368e8e20628ad5229329eec28baa.js +1 -0
- package/dist/umd/1ff1389501159e4846a5133e3b8992d8.js +1 -0
- package/dist/umd/210aec2722e6416a0349a987260e14a3.js +1 -0
- package/dist/umd/211511e7b374f57ad31acaf49dbdccb1.js +1 -0
- package/dist/umd/2272c6632c52c3e402ab27b8045ab8f1.js +1 -0
- package/dist/umd/228ca80abf1ae030cbfe7faaec61913f.js +1 -0
- package/dist/umd/2302902e10c4afab56e1b864c96070cb.js +1 -0
- package/dist/umd/23602ad4c88f0f19e7a0a12454ebf556.js +1 -0
- package/dist/umd/23bb1a9f279e7a732bfd405350aab114.js +1 -0
- package/dist/umd/24a3ff38afde257888d755ece9bfd704.js +1 -0
- package/dist/umd/24f97ddd76026815674affbc50ad6169.js +1 -0
- package/dist/umd/25718a469574ade47e23567d8c543169.js +1 -0
- package/dist/umd/25eda4bb98e40a82cfd5b4bf9fbc06ec.js +1 -0
- package/dist/umd/262f489eb59166e1215642b60446d123.js +1 -0
- package/dist/umd/269732f4c5f6e82ea3246548a9631b47.js +1 -0
- package/dist/umd/275d8f4e0550edce2f3b85b3eaa94e54.js +1 -0
- package/dist/umd/27730a0bdc6f430cc85049a46a73a029.js +1 -0
- package/dist/umd/27846e85433e54a3ec0ab34d62233dc5.js +1 -0
- package/dist/umd/283970c76db99e2d0d90f0e7c45494f9.js +1 -0
- package/dist/umd/28785bea435918d49b290d27bf660baa.js +1 -0
- package/dist/umd/2a8394955e047270a2a965ec67843989.js +1 -0
- package/dist/umd/2aa392a501973ebfcea38239a45ed8e7.js +1 -0
- package/dist/umd/2ad349208b3a727abb3c9f943865a27c.js +1 -0
- package/dist/umd/2b1b8f8b9e8f1e423a69afd121fd7da9.js +1 -0
- package/dist/umd/2b5729e073775b8fb827fc8e4725e48a.js +1 -0
- package/dist/umd/2c3ad366cda02f17520d3369cae64c2c.js +1 -0
- package/dist/umd/2d2a75e3d01a74b93d07db04df8abe5e.js +1 -0
- package/dist/umd/2dd82c65030101b60dffccedd8741c6e.js +1 -0
- package/dist/umd/2e841e8b77c2a2c00fd71940632bc1e1.js +1 -0
- package/dist/umd/2f055ac4066041b9008dd6aebf9df34b.js +1 -0
- package/dist/umd/2f25a4dc442bc9aebc58cae30c50c3e2.js +1 -0
- package/dist/umd/2f55cddc8eb85b63ee5b4ce0e5488230.js +1 -0
- package/dist/umd/2fc0239242a898632ca8aa451cb930c2.js +1 -0
- package/dist/umd/2fe2904fc024afaf81732563cb83e547.js +1 -0
- package/dist/umd/318dcae1cdcd4733986a93e7a5fab7b8.js +1 -0
- package/dist/umd/31c610efb1d25afc90853b52ba4cb089.js +1 -0
- package/dist/umd/328cbf598e9711b0a87c19437b02f80d.js +1 -0
- package/dist/umd/33b4e371d4983ab56f4db08627119f0b.js +1 -0
- package/dist/umd/349237ad9565dc823ce7bcb7527ba7ee.js +1 -0
- package/dist/umd/34b8d1c8a81822685f809c49097b81fc.js +1 -0
- package/dist/umd/34f99cce131bd7aa65e7a924e2456006.js +1 -0
- package/dist/umd/3567d1ea443427e944a6f189a0898819.js +1 -0
- package/dist/umd/363d3bac8dcd9a83332c3758185ce080.js +1 -0
- package/dist/umd/3645af9e7e929d3abe3255c739e20e84.js +1 -0
- package/dist/umd/367def81f25c0a08527f9a4e86e70c56.js +1 -0
- package/dist/umd/37172facd8a534a38f378ca2a9c7c11b.js +1 -0
- package/dist/umd/37ee3b5201ae2e2dc5dc8b1b20ad900e.js +1 -0
- package/dist/umd/3834f2acef5a5debb2a21ad919272307.js +1 -0
- package/dist/umd/38b1d18836e38ee7b4deaeba0c35f7b8.js +1 -0
- package/dist/umd/39fea85ed7dd99d7c6c9e59b7040523f.js +1 -0
- package/dist/umd/3a1227a65a1fc39ca476c295d1a260a4.js +1 -0
- package/dist/umd/3a6ca6958d003ae67bb7fefc8713ee93.js +1 -0
- package/dist/umd/3ac8c7749734990e2d9f81eeca219886.js +1 -0
- package/dist/umd/3b02cca9e95276a74f3ed2bbc7a64ce6.js +1 -0
- package/dist/umd/3b190e5159c72fb7e27271956772bcba.js +1 -0
- package/dist/umd/3b544bb2c5a4e7b225a4b50235a0fd6d.js +1 -0
- package/dist/umd/3b6e7dc98c47eeafd851ca5072db4be6.js +1 -0
- package/dist/umd/3bf96f8eb1859e2724a4b769af3b5f1e.js +1 -0
- package/dist/umd/3c5b59a666c5d39d9ba9cc054d36a410.js +1 -0
- package/dist/umd/3ea020c57c2bbf457a8497df313b2e5c.js +1 -0
- package/dist/umd/3eefbe1c009cfd730b2ca6f834367c45.js +1 -0
- package/dist/umd/3f896944a97f002f2146e028ff2eac63.js +1 -0
- package/dist/umd/414cd2c842fa42bf71e155f870619e00.js +1 -0
- package/dist/umd/42c556183279bbdaaed3a8a9f9108f58.js +1 -0
- package/dist/umd/42e0ea6351d45d342caab13cb12f9ea4.js +1 -0
- package/dist/umd/43139bfbcbce9de597b4985dc1e6a03b.js +1 -0
- package/dist/umd/432a5982ba3ddf958381d780e1e9a8e2.js +1 -0
- package/dist/umd/432aff60ba31a74d2120031fdc894775.js +1 -0
- package/dist/umd/4430c55f023b72fb5e389cee9351b38c.js +1 -0
- package/dist/umd/44599d9b6202ebebfcdd073edf3562e3.js +1 -0
- package/dist/umd/44efcea2f84e80cc4092a89796afe886.js +1 -0
- package/dist/umd/472ba8f81bf8cac86027cb1be4e3b9cd.js +1 -0
- package/dist/umd/479ec45a8edfe482fae4298d1e9862d2.js +1 -0
- package/dist/umd/47e4cb297b2c3841ef86ce04a7f5584e.js +1 -0
- package/dist/umd/47e5776dff3b80ed69ab5947dba33c76.js +1 -0
- package/dist/umd/48e9351c5623d4da657ce7d5d0267ea6.js +1 -0
- package/dist/umd/492e618a031cfde9c83d699c430de2ac.js +1 -0
- package/dist/umd/49582665262ff6179b9f3a98adf7ed5c.js +1 -0
- package/dist/umd/4b692785a8a6340a89e6067274a7583c.js +1 -0
- package/dist/umd/4bee3a46b8378a7b4ef84492f08abd22.js +1 -0
- package/dist/umd/4bf3bc1fbdd26ac698fef1bdf26e3ff4.js +1 -0
- package/dist/umd/4bf6763c5956e3bccbf0373068810ded.js +1 -0
- package/dist/umd/4c1bdecbedd36a5765de184ac056822a.js +1 -0
- package/dist/umd/4d0849c6c9a868c09130600ac68319b3.js +1 -0
- package/dist/umd/4d0ebf4c528cee9b0cdd3e076e06570b.js +1 -0
- package/dist/umd/4d156ee0485ab4b40b090a3cd7b995a9.js +1 -0
- package/dist/umd/4d6d9020e7e5c8d8dee7a5e374355f05.js +1 -0
- package/dist/umd/4d8cb7033879cb7fcc7a43798e2bde22.js +1 -0
- package/dist/umd/4e389cce6fb8f78845fab249bce43c0b.js +1 -0
- package/dist/umd/4ef80ee74467e0297eec3cc03092da01.js +1 -0
- package/dist/umd/4f683c6881e9f8740f5516a85b9eb9da.js +1 -0
- package/dist/umd/5106411f7468a5ee5b1ee77aed12c0c7.js +1 -0
- package/dist/umd/51f903c5ce5284a63196247cffb5ca40.js +1 -0
- package/dist/umd/52fd09d1713345d9ee64dc7daea9fd6f.js +1 -0
- package/dist/umd/5348f3cfbe5a63954e7d984f197bbddb.js +1 -0
- package/dist/umd/5352ecd8e5f1a2637b48e18cc406edb1.js +1 -0
- package/dist/umd/5398e3b596fa15df4d84b2aa0464e5c4.js +1 -0
- package/dist/umd/53e3600928916423671f3388e2d67844.js +1 -0
- package/dist/umd/54560f13b36626237959e93b7771a484.js +1 -0
- package/dist/umd/54a10f3bddad1e6da452fee7124fe846.js +1 -0
- package/dist/umd/57e14488b13e50ebdb5fdfc7880da683.js +1 -0
- package/dist/umd/57f4109bd1f06be4dc2bcb8ff7eaf1e5.js +1 -0
- package/dist/umd/582e24f5ba929e358fadfc7be4c18025.js +1 -0
- package/dist/umd/58598705e7012f4ca1eb1dd21d3c59a5.js +1 -0
- package/dist/umd/5861dfe4f2c7823623e82d0619c5bf06.js +1 -0
- package/dist/umd/58aab872dbdb5e1607076e1935130e03.js +1 -0
- package/dist/umd/58c35e5c73bbc1664bbd67c570342aa0.js +1 -0
- package/dist/umd/58e7f91772635a5c59bacc975735da6c.js +1 -0
- package/dist/umd/59cc05504a1c823b6d4796bf6b430822.js +1 -0
- package/dist/umd/5a496ae20cc576bef1d35972548207cf.js +1 -0
- package/dist/umd/5a741aab715866cb4d9a55e89dfc8420.js +1 -0
- package/dist/umd/5b6a626249d0bc43e412fffa6a9ee177.js +1 -0
- package/dist/umd/5cab33610b8d9c1aee4db4672811cb5f.js +1 -0
- package/dist/umd/5cd4e1282f4409600b942819b7aa4f21.js +1 -0
- package/dist/umd/5ce650c06c385f9d15621e54c60457c0.js +1 -0
- package/dist/umd/5cebfc2c3495b6294dcb2a99e5174872.js +1 -0
- package/dist/umd/5d312b184c1f4565f51247d3c6dbba90.js +1 -0
- package/dist/umd/5d3314103b00c8ea165c6f9f6757f794.js +1 -0
- package/dist/umd/5df362c9904925cdf574d9506e4be76d.js +1 -0
- package/dist/umd/5e55b301888460bd06c8e26d1011e01a.js +1 -0
- package/dist/umd/5e8a4f4320a07ae4bb1d8a5cd621d955.js +1 -0
- package/dist/umd/5f3ce6efab3c679ec1ad25ab0b3f6b2f.js +1 -0
- package/dist/umd/5f5a93ab1249b7cbdb13d9466febd3a0.js +1 -0
- package/dist/umd/5fedbf948ed123687f77167fac1faf8b.js +1 -0
- package/dist/umd/60190285b6c2243e14184b9e57d48dbb.js +1 -0
- package/dist/umd/603e2644074e6512faf427d511d47fe4.js +1 -0
- package/dist/umd/60ede8d7ffdf4c05f2ce51b6d8d2be68.js +1 -0
- package/dist/umd/6130486ae80b103700a2e1eec0bc5cea.js +1 -0
- package/dist/umd/622e27eec5f26148f51ccc30315a3deb.js +1 -0
- package/dist/umd/6250c7594cd66ca91184b5beca293e06.js +1 -0
- package/dist/umd/62a96977e725e8bc809dc80afe0fedf1.js +1 -0
- package/dist/umd/63596b4896732fb322ab0496b4be1e74.js +1 -0
- package/dist/umd/6490772da5aecc6cb9e4c625abc74a96.js +1 -0
- package/dist/umd/64a5f4d62507d032038dcd76d15188e1.js +1 -0
- package/dist/umd/64d6924350bd7706850cdc0dcc76ccf6.js +1 -0
- package/dist/umd/65e7cf62ca9df32c18b630f31025a401.js +1 -0
- package/dist/umd/663ffb67b9683a2126410325d1a5a152.js +1 -0
- package/dist/umd/669c462287be8fa855e0ac003c145b55.js +1 -0
- package/dist/umd/678f5201c1917429f334b88078ca4174.js +1 -0
- package/dist/umd/6a1c347ab79a93f3ac01b08c8ccfc827.js +1 -0
- package/dist/umd/6a851f05f1f4a974e02fe23eac2bad4e.js +1 -0
- package/dist/umd/6b4b87a54f673cfbb82be45329441bef.js +1 -0
- package/dist/umd/6bed1b724e74e6bc80688f42bc824d70.js +1 -0
- package/dist/umd/6c0a75dc5671c3f237a79f6e45b9891c.js +1 -0
- package/dist/umd/6c67587c2093ac3a19da9f2196e040b7.js +1 -0
- package/dist/umd/6c6d192b6860b4508a14c2d04769a35e.js +1 -0
- package/dist/umd/6d0c0aa17d36cb16bafc76d7376b97f7.js +1 -0
- package/dist/umd/6d38cef4a006e6cfe54a6117aba7b600.js +1 -0
- package/dist/umd/6e40b726d91e9138d9eaef6fd012c740.js +1 -0
- package/dist/umd/6faa9e5f2a0122d2333fa450337a09b0.js +1 -0
- package/dist/umd/70074e0c785c9a808dea76c7c7d17af3.js +1 -0
- package/dist/umd/70286c33cab463fd576766adecd2d5d9.js +1 -0
- package/dist/umd/70289d3b9b2b851df3286e20e40410a6.js +1 -0
- package/dist/umd/7080d2a1db1608264a6d9d9fbaf2cce8.js +1 -0
- package/dist/umd/70efbabef77fb217f904f41dbf7fe8bf.js +1 -0
- package/dist/umd/714763ddd9bd466c95df7b042900bb87.js +1 -0
- package/dist/umd/7222998c10fabd9c824cf8cf540b3b74.js +1 -0
- package/dist/umd/724a16861717b5b4f786d24b56b62614.js +1 -0
- package/dist/umd/7259bceba25ac1476fc775122a63d249.js +1 -0
- package/dist/umd/725da29f1643c2263a437c08a1454aea.js +1 -0
- package/dist/umd/742afd6665dee8dafd43661093bdda9d.js +1 -0
- package/dist/umd/755114145e5b97e5571a160a39e716db.js +1 -0
- package/dist/umd/757ef1b870d065a77ce3c182a03d93ad.js +1 -0
- package/dist/umd/7648d83718f74149cb2db078b19fb7db.js +1 -0
- package/dist/umd/764b59bdd3a89e14f88c9d63020551a1.js +1 -0
- package/dist/umd/77aaca51c1c32acaf32656d45f4dc017.js +1 -0
- package/dist/umd/78632dc7e1875ec8c39416f645e53733.js +1 -0
- package/dist/umd/79241f85b016a7332f85bb66667459c2.js +1 -0
- package/dist/umd/79455ab9a6cd507f5314141cc965093a.js +1 -0
- package/dist/umd/7aa17a5a81c83c0f455941b3b286d5da.js +1 -0
- package/dist/umd/7b839a5c1f6d89538928c8a29003bbda.js +1 -0
- package/dist/umd/7bc18fc7a7d1323c178aa1846d79fb3c.js +1 -0
- package/dist/umd/7d64980faff5b041a461fd0ba3e2f3f5.js +1 -0
- package/dist/umd/7e4099fc2d04c7c1cf96892b962ba4ec.js +1 -0
- package/dist/umd/7ec97a8161bf26e434d3891f64adb15b.js +1 -0
- package/dist/umd/7f45be8b3fab8d742afc26fc48a23d2e.js +1 -0
- package/dist/umd/7f79d4bde67c8013b187889b63e25bce.js +1 -0
- package/dist/umd/7f9a9efc9ab681fcbf6400e2adb368a9.js +1 -0
- package/dist/umd/805cb6232d7a9fa46025d48a43622ecf.js +1 -0
- package/dist/umd/80ddbf4f0fdde4ddba57130e61043017.js +1 -0
- package/dist/umd/81318a3530fb35d5178eb7a4a13a606f.js +1 -0
- package/dist/umd/817edb0c6f9d66f9c0027762edb1d797.js +1 -0
- package/dist/umd/827c1cbf746eacfc23ed2037e4d6359d.js +1 -0
- package/dist/umd/83387cb17a7680f59240e7b399e3ac2b.js +1 -0
- package/dist/umd/839e3594798c1942d3c92f9acfaa5f0b.js +1 -0
- package/dist/umd/83bd353f98aa901411c82b8af58d1296.js +1 -0
- package/dist/umd/84270e22d4439d15b0d8f392d1338d8e.js +1 -0
- package/dist/umd/843c762c24f7fac628d8c62519a7b308.js +1 -0
- package/dist/umd/84abf03cc94d264bb38020b4ac5f76e1.js +1 -0
- package/dist/umd/84effdea6b72577c780f6621246d2e82.js +1 -0
- package/dist/umd/852f0ecd7b17e3bfd700a821ff438f7e.js +1 -0
- package/dist/umd/8646c11c7b2b46a2b2becab0d9e549c7.js +1 -0
- package/dist/umd/875ae58e8015a6d08dbc9d0c04e24638.js +1 -0
- package/dist/umd/879d6bc1ca1dde95a9a98dc7a2ab0d06.js +1 -0
- package/dist/umd/87bce6f50196688852142c679227b1b9.js +1 -0
- package/dist/umd/880ae94877022f7fb0458ced0825eb4c.js +1 -0
- package/dist/umd/88730abfeb4a23e692ac7933882f12eb.js +1 -0
- package/dist/umd/88da0e09d486e197aaca5bc3d6350998.js +1 -0
- package/dist/umd/88e2feda80ac8cfb28f1dc0ec833b40d.js +1 -0
- package/dist/umd/894052ca1f8f35cc1cf7cfb29ef75027.js +1 -0
- package/dist/umd/894edcaf39c3c95818e3949d737ed459.js +1 -0
- package/dist/umd/8a31266178067a316bb2503147cdb5cb.js +1 -0
- package/dist/umd/8a5127228870aafabfff6111d29313d6.js +1 -0
- package/dist/umd/8b8336037f074d9dcbd20eab535b803f.js +1 -0
- package/dist/umd/8c7616f0adba6a5ac0d2f06ba4ebd696.js +1 -0
- package/dist/umd/8d9bb1799d9b98db107e84f10132e17f.js +1 -0
- package/dist/umd/8ed58ed9c7e1cb1ae1f2830d29011ffb.js +1 -0
- package/dist/umd/8ed5aba33ead1f94e97d5c35a5e93434.js +1 -0
- package/dist/umd/8eede17ae9e4d25c3c17b8a8a7fc3c3d.js +1 -0
- package/dist/umd/8f9ce72eeabbf31f2d51f4bcfc66d3b0.js +1 -0
- package/dist/umd/90812d89181b698975cbb081adcbbcb0.js +1 -0
- package/dist/umd/90f3dc3c18d447104b63c156cb7fddb5.js +1 -0
- package/dist/umd/91beb08737a1bbf071f351fb0acdbf3c.js +1 -0
- package/dist/umd/92f4aab5c66f6269c7054c8fbcb3de13.js +1 -0
- package/dist/umd/950a205e91da7e78226dd785fd6d34db.js +1 -0
- package/dist/umd/962969a46fefcace3305abd4d6e14a2e.js +1 -0
- package/dist/umd/9696a4229fb787eeb25b26f1274b75ee.js +1 -0
- package/dist/umd/96b8d8b5efd11741639659c63a485c27.js +1 -0
- package/dist/umd/972ea4b6ab9d3baeab6d00057cd5f9d3.js +1 -0
- package/dist/umd/9807cf1e443a7440371904b6525f37eb.js +1 -0
- package/dist/umd/981bd23edacd811f9e4a583d89b544ee.js +1 -0
- package/dist/umd/9827973b533de05b338533a0211d97d9.js +1 -0
- package/dist/umd/983fccb9f00748c487e889f6c83aa367.js +1 -0
- package/dist/umd/9920e03a65566d728a73c7bf18bc5741.js +1 -0
- package/dist/umd/99add2656ccb006ff11de385c4219f41.js +1 -0
- package/dist/umd/9b1fd9cf4206cc32e84150c49707d811.js +1 -0
- package/dist/umd/9b4733fc7a2fe9aedb0fa242bd49e9f0.js +1 -0
- package/dist/umd/9b4de1346c73ba258736f1a3f00fdc14.js +1 -0
- package/dist/umd/9b5a6ec07bb0a2daade10189696fc399.js +1 -0
- package/dist/umd/9b80d1a12acd18c90e41ca92073122a7.js +1 -0
- package/dist/umd/9b9578869f378f8e2afbf85a76c0ac72.js +1 -0
- package/dist/umd/9ebb9ac2c9c875649c72722bc585d445.js +1 -0
- package/dist/umd/9ed8c3550b5c3c1e878d0692f0338cb7.js +1 -0
- package/dist/umd/9fa80a5bc14fe8644697fe0dd7b99431.js +1 -0
- package/dist/umd/9fd3f255cfd09016ec7f4896bc51864c.js +1 -0
- package/dist/umd/a0e32ba94aa4384823d768802b9486e1.js +1 -0
- package/dist/umd/a1c8660c5bcc6b6a43a7fb3c351174d9.js +1 -0
- package/dist/umd/a223748cd69094dd12b486353b22f479.js +1 -0
- package/dist/umd/a2746fc96d535b19c120d4b87dc86ef1.js +1 -0
- package/dist/umd/a2b29b879b9e8606085c0d3776f789ca.js +1 -0
- package/dist/umd/a34efdb6282815cdc27d2f83352b59e0.js +1 -0
- package/dist/umd/a3dfa410d90c00078f4b015410048f34.js +1 -0
- package/dist/umd/a41ce517e26d17d855b7224af9ee433b.js +1 -0
- package/dist/umd/a496f663a8cf2dc047e12d8a80d76510.js +1 -0
- package/dist/umd/a4bedde07e392f8ebf64341b61f75df2.js +1 -0
- package/dist/umd/a4d638b976f02f35740be031f996e088.js +1 -0
- package/dist/umd/a4e021a4b5d5d65cc87fee17c1886c3f.js +1 -0
- package/dist/umd/a52f9ac0e3d582ed7e488aa1dfc33eda.js +1 -0
- package/dist/umd/a533e643002830be2da76c9527265860.js +1 -0
- package/dist/umd/a569591af2f834ec4b58f43ab7742186.js +1 -0
- package/dist/umd/a678d4dedcc646810a379211797d5294.js +1 -0
- package/dist/umd/a6eb87af5cd7ae7e4fcba8ec606ec4ba.js +1 -0
- package/dist/umd/a709bba98acec5da3ea6258e245514cb.js +1 -0
- package/dist/umd/a9cb92db2399f7ac97ad55fe79fe5c20.js +1 -0
- package/dist/umd/a9f61cc92a7407c8ca0a5843b29d7a57.js +1 -0
- package/dist/umd/aa0417796df2b0398a45c00f93f37ea4.js +1 -0
- package/dist/umd/aa0eee504d52a12d3a30bbd523afcc34.js +1 -0
- package/dist/umd/aa5623ec68d23fedb9c9c115c7d99063.js +1 -0
- package/dist/umd/ab0128ab12bcb8729032421b40f5f8dd.js +1 -0
- package/dist/umd/ab237eed5fd16ab99c06f0d28d465edb.js +1 -0
- package/dist/umd/ab720dd0a0fd070ad82c052263f748e2.js +1 -0
- package/dist/umd/ac54fd77986affc0a122d325788b34d3.js +1 -0
- package/dist/umd/af1635b600efd13f6059eb6ac9deae12.js +1 -0
- package/dist/umd/af6fdb556ee3f9065578bb01f81f6216.js +1 -0
- package/dist/umd/afba1f28f2baa29eae717d6cb03f5464.js +1 -0
- package/dist/umd/b02d982ccb1011197a5a24800b178a0a.js +1 -0
- package/dist/umd/b03bc4e99280d8b4dfd1c6cddedfbd76.js +1 -0
- package/dist/umd/b10accbff47791a59b8494225af07025.js +1 -0
- package/dist/umd/b1170472ae4b50e3b0070eb991e502fe.js +1 -0
- package/dist/umd/b1e349371cb9c226905c846706ad8b93.js +1 -0
- package/dist/umd/b1f3f77a9279cdb38846ebe13c3438bc.js +1 -0
- package/dist/umd/b20cd9acf45420fcacfd923754185663.js +1 -0
- package/dist/umd/b24bb117549d04501b98ffb66b427e0f.js +1 -0
- package/dist/umd/b275e591896df64fa3202d90ae70c583.js +1 -0
- package/dist/umd/b2d62f22463367ca31dfdbc615637c32.js +1 -0
- package/dist/umd/b306285dfd802d091e788de0f96b8cb2.js +1 -0
- package/dist/umd/b33ef9b4202539d3690251cb8213a034.js +1 -0
- package/dist/umd/b3f1431b9e6d9e6632a93c2cd89f945b.js +1 -0
- package/dist/umd/b676b876040015b30352b3cda5e243b7.js +1 -0
- package/dist/umd/b714a3647ca66ab7685eb0437c9e3a8d.js +1 -0
- package/dist/umd/b808fb222140a85b23ebbe0fffa906d9.js +1 -0
- package/dist/umd/b881dca9d9a80f61d87374b4bd5a2dd5.js +1 -0
- package/dist/umd/b8b6bd460e7da0ba8f3b2218327966ee.js +1 -0
- package/dist/umd/b934b22e8f8a8b1ba81dbc2cf058b0cd.js +1 -0
- package/dist/umd/b953ce2f19e7291598cd9c05128133c1.js +1 -0
- package/dist/umd/b992b348ffb6453e4a02a60e71c5304e.js +1 -0
- package/dist/umd/b9bf918956902d11645efb99e2ab5293.js +1 -0
- package/dist/umd/ba6b8b3e06cd9d0aee9c69278ee84647.js +1 -0
- package/dist/umd/bb1365c0983ce5ad50060b24788b9630.js +1 -0
- package/dist/umd/bb1de0986c4fb3ee31c5a413b8f97c94.js +1 -0
- package/dist/umd/bb5bab7a675544fe31ddb7f4a77dffb9.js +1 -0
- package/dist/umd/bd309bb3f23f2bfbcf914f2e71474ab5.js +1 -0
- package/dist/umd/be75b76e74c78535966ec8aaa7d46bec.js +1 -0
- package/dist/umd/bf37de323316c6ae5745fc11fd576b1c.js +1 -0
- package/dist/umd/c19292ad0187d75dd9580319cbfd5688.js +1 -0
- package/dist/umd/c1a1f4ba29aa2d9a0b1a1abe5cfee0c6.js +1 -0
- package/dist/umd/c2999cd0bf63072240931010a45c21da.js +1 -0
- package/dist/umd/c2f4581864c135dff9056745035d3914.js +1 -0
- package/dist/umd/c2fa476995041f9982b89a1c483da2b9.js +1 -0
- package/dist/umd/c3832579be376308fa819b04e7b0c66f.js +1 -0
- package/dist/umd/c3f345c994392d97785925e790513a9f.js +1 -0
- package/dist/umd/c428d0ff296b8b683347a18896d72015.js +1 -0
- package/dist/umd/c4e58637b4d14c303e29d3ce4b4a210f.js +1 -0
- package/dist/umd/c51840077c684be0e7e13339f85cd4a9.js +1 -0
- package/dist/umd/c530988d2b1966fd10a4d99fa3877e1b.js +1 -0
- package/dist/umd/c5647f3b9e799d1b9818e80796f8a574.js +1 -0
- package/dist/umd/c64d6e1e72024bb5d3d3e9bfc19d183d.js +1 -0
- package/dist/umd/c6938ce24c731f9ee703747909cd2aad.js +1 -0
- package/dist/umd/c80e89199aef31e48addb2b35ea96365.js +1 -0
- package/dist/umd/c8230f96396f0378d032dce2be3dce66.js +1 -0
- package/dist/umd/c8acc93023012737a3bf8fb767b66838.js +1 -0
- package/dist/umd/c93947dfac92c92c3999d1d51fc5b516.js +1 -0
- package/dist/umd/c9568507cc8ea516d091749c7919b744.js +1 -0
- package/dist/umd/cb0d121a88477f943960f5ad60602c22.js +1 -0
- package/dist/umd/cb4bb785934eeca9b408e892ae6b73b7.js +1 -0
- package/dist/umd/cb5746e29527a2fdb9f857a121e086ed.js +1 -0
- package/dist/umd/cb652f200fc3dd740b2e7f678a9272ea.js +1 -0
- package/dist/umd/cb9910e014b468ada91393696fcad206.js +1 -0
- package/dist/umd/cbdbd623038183a8c068dd24ecd90682.js +1 -0
- package/dist/umd/cbdc4ca43a8c940a6c3f59a8b6f17df5.js +1 -0
- package/dist/umd/cc0de4981277622a9017f137023a6dd5.js +1 -0
- package/dist/umd/cc65d108f0e7cfb200de1d0bcf115005.js +1 -0
- package/dist/umd/cd9a17f94a922c7c88000b1b3cdd67df.js +1 -0
- package/dist/umd/cf188b3f83735389d47bb12fc9f7069a.js +1 -0
- package/dist/umd/cf26dd07f19bcb5b7efbf057a6cfeb8f.js +1 -0
- package/dist/umd/cf3f6b1c74c72cb5d02870022dbc9f94.js +1 -0
- package/dist/umd/cf909ad6e321c2f98750f5c3581556f8.js +1 -0
- package/dist/umd/cf9c7cbfc2b609b9ae59daeab82719c4.js +1 -0
- package/dist/umd/cfaaa83ec3973688a7946b95b597c228.js +1 -0
- package/dist/umd/d0415105402964718010284fcfa8b2ea.js +1 -0
- package/dist/umd/d09463c099fb2c44719380623a5c68fb.js +1 -0
- package/dist/umd/d1a1ee70e5eed28571ae9c619f33de7c.js +1 -0
- package/dist/umd/d1db2c4677dd2ee7a0c690c58798a013.js +1 -0
- package/dist/umd/d43ad5f9bad9a042b49b2592c7639c28.js +1 -0
- package/dist/umd/d4ad4ca9643d85d3990bfefe29cb3bb0.js +1 -0
- package/dist/umd/d4f1a314cb3668f8e17f24bccf0229b6.js +1 -0
- package/dist/umd/d4f5981ee5a73d8a6e19112f2ffcb72c.js +1 -0
- package/dist/umd/d542dda7308361c34af2afb9b70d755a.js +1 -0
- package/dist/umd/d5999827bd3af6b813a871de344b109a.js +1 -0
- package/dist/umd/d5a6140d581e5c4eb200259ce372f40b.js +1 -0
- package/dist/umd/d5f79987405c2169278f8de37bcc9d05.js +1 -0
- package/dist/umd/d7340300249ab98bd9b3f538a767106e.js +1 -0
- package/dist/umd/d78d3b050ea95b068380d975fd413fd7.js +1 -0
- package/dist/umd/d7d616d4aa8fd3f51d681242853dcde9.js +1 -0
- package/dist/umd/d83cda12aee0c87c8b381a1234bf7798.js +1 -0
- package/dist/umd/d869a443b727ea4b7cef2de0ff2a6ed8.js +1 -0
- package/dist/umd/d8f7ecdd496f3caf14f5afbedfff1937.js +1 -0
- package/dist/umd/d9b2daf38414fcbaf89924ad3e10e587.js +1 -0
- package/dist/umd/da740c1b29a85b999a6874b59a1baeef.js +1 -0
- package/dist/umd/db8ca5cfb6fe4aaef215f116f6991784.js +1 -0
- package/dist/umd/dc8240db39815020378555a4d80571c3.js +1 -0
- package/dist/umd/dc83a73f0eb89665520bbb6672dfa3cb.js +1 -0
- package/dist/umd/dc932cde2fbfca8e2901fb693968b131.js +1 -0
- package/dist/umd/ddbc961769cd2ff4d4a7a136168ebf4c.js +1 -0
- package/dist/umd/de0fd4fd7c2d7a4887cbc99eed91f797.js +1 -0
- package/dist/umd/de73b4d2a9ed4bcb851f9141e303636d.js +1 -0
- package/dist/umd/e0adad8a8579bf99f3e22f7c214a5c64.js +1 -0
- package/dist/umd/e0c565aadda4787ba4ef4456c0a7ee29.js +1 -0
- package/dist/umd/e0fa6a4fe8bff90d50ce812e666957ca.js +1 -0
- package/dist/umd/e13fc7d468ab9b5797f2a44412ca2f00.js +1 -0
- package/dist/umd/e2b38a8393be2cf23f3894ace3efb1c3.js +1 -0
- package/dist/umd/e2fe8f0d4fd950b20b30fabaea96b3f8.js +1 -0
- package/dist/umd/e37ac12436bcd0536ec98ae8470a1228.js +1 -0
- package/dist/umd/e4917fa7632b01d28e99304d32d989f7.js +1 -0
- package/dist/umd/e61779df91186b23e7adf2d1968b2708.js +1 -0
- package/dist/umd/e6ad50b520736b595970c9e07029c3f1.js +1 -0
- package/dist/umd/e7e1a807af3160b342e0a3550cf8f7c5.js +1 -0
- package/dist/umd/e7f37e0f2b6113039c45a326264c4d36.js +1 -0
- package/dist/umd/e80d5ee40455d0675f8f2a3688071adf.js +1 -0
- package/dist/umd/e874d975c9128dc6eb9a513d088bed9f.js +1 -0
- package/dist/umd/e9382a0e67b22188c75e9418de1c9295.js +1 -0
- package/dist/umd/e9c8f7e13e00284ce126890bf7ac46fd.js +1 -0
- package/dist/umd/ea6edcde22c9fdbb9f7b8d9cf72a062b.js +1 -0
- package/dist/umd/eaa55a522fb2cb2f0287711f42344984.js +1 -0
- package/dist/umd/eb08efe1d361a9c5e37e1d4c8100212e.js +1 -0
- package/dist/umd/eb0b62e1895dcf7491419aa728f00c38.js +1 -0
- package/dist/umd/ecdb4966f685f3e44b1f28fae46827a3.js +1 -0
- package/dist/umd/ecff3d4bbf59ef41230960af46098e74.js +1 -0
- package/dist/umd/ed88b2c21452a7eaea143e54e27a0879.js +1 -0
- package/dist/umd/ee41eb1fd1d1c87c45e818b5a8a65cf8.js +1 -0
- package/dist/umd/ee5d36473f84db2af26d82efd69a38ec.js +1 -0
- package/dist/umd/ef6cac9d9a3156e1c19b46cd181863ed.js +1 -0
- package/dist/umd/ef7dedac6423354de55896b34230d548.js +1 -0
- package/dist/umd/ef87482c92662e8b69a21f47588474ea.js +1 -0
- package/dist/umd/efc14cdf19554635e477781704353ec2.js +1 -0
- package/dist/umd/eff4371180dfac54de25ed3a0105d82f.js +1 -0
- package/dist/umd/f15362a7feef894b2e7f706252e6c510.js +1 -0
- package/dist/umd/f15cbf0d23cba4a313f3f2acfef5370c.js +1 -0
- package/dist/umd/f18c12f0446bad25ec3732c621d60f88.js +1 -0
- package/dist/umd/f2fb7fcc9bdd849d687150c07a81ffe4.js +1 -0
- package/dist/umd/f326f2f263b1498fedbe1d07d7254d10.js +1 -0
- package/dist/umd/f4480bd3d93cb0949fc4f3af8eff6531.js +1 -0
- package/dist/umd/f5655f072ce70050c78fab024d5028a8.js +1 -0
- package/dist/umd/f666b5647087bcfdf6623f8b14d56657.js +1 -0
- package/dist/umd/f6d7091e70dee6c74956acfef2464d08.js +1 -0
- package/dist/umd/f799992a362826cff3c7d1ce9dc9940c.js +1 -0
- package/dist/umd/fa0c561bb37040fc8145e5c70ea64912.js +1 -0
- package/dist/umd/fb393a7455b47f3d4fc30cf219d5145c.js +1 -0
- package/dist/umd/fb5080213f065f82f0391c551c864434.js +1 -0
- package/dist/umd/fd3859a700b456e06c65c0cf6b0af05c.js +1 -0
- package/dist/umd/fd5bc50b18c9f46380cbe5ec1ac2127b.js +1 -0
- package/dist/umd/fd9645aaf1f70c8abc562be41bee25fc.js +1 -0
- package/dist/umd/fd98f0e48b18e1de428edd5174539c2a.js +1 -0
- package/dist/umd/fe9499c0a5444f7f42843fa00fb355cb.js +1 -0
- package/dist/umd/fec23c6964d6cf25681d1f3e24b076a4.js +1 -0
- package/dist/umd/ffd3b83e8b5878f4785591ff54b1dfff.js +1 -0
- package/dist/umd/index.js +2806 -0
- package/dist/umd/index.js.LICENSE.txt +179 -0
- package/dist/umd/index.orbundle.js +5306 -0
- package/dist/umd/index.orbundle.js.LICENSE.txt +257 -0
- package/lib/index.js +4 -4
- package/lib/index.js.map +1 -1
- package/lib/or-dashboard-tree.js +7 -2
- package/lib/or-dashboard-tree.js.map +1 -1
- package/lib/or-dashboard-widgetcontainer.d.ts +4 -2
- package/lib/or-dashboard-widgetcontainer.js +2 -2
- package/lib/or-dashboard-widgetcontainer.js.map +1 -1
- package/lib/service/widget-service.js +1 -1
- package/lib/service/widget-service.js.map +1 -1
- package/lib/settings/gateway-settings.d.ts +19 -0
- package/lib/settings/gateway-settings.js +46 -0
- package/lib/settings/gateway-settings.js.map +1 -0
- package/lib/settings/gauge-settings.d.ts +0 -1
- package/lib/settings/gauge-settings.js +8 -8
- package/lib/settings/gauge-settings.js.map +1 -1
- package/lib/settings/image-settings.js +1 -1
- package/lib/settings/image-settings.js.map +1 -1
- package/lib/widgets/gateway-widget.d.ts +84 -0
- package/lib/widgets/gateway-widget.js +47 -0
- package/lib/widgets/gateway-widget.js.map +1 -0
- package/package.json +7 -7
- package/src/index.ts +33 -8
- package/src/or-dashboard-tree.ts +5 -0
- package/src/or-dashboard-widgetcontainer.ts +17 -6
- package/src/service/widget-service.ts +7 -1
- package/src/settings/gateway-settings.ts +144 -0
- package/src/settings/gauge-settings.ts +21 -5
- package/src/settings/image-settings.ts +1 -1
- package/src/widgets/gateway-widget.ts +386 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/webpack.config.js +1 -1
- package/lib/or-dashboard-settingspanel.d.ts +0 -44
- package/lib/or-dashboard-settingspanel.js +0 -216
- package/lib/or-dashboard-settingspanel.js.map +0 -1
- package/lib/or-dashboard-widget.d.ts +0 -18
- package/lib/or-dashboard-widget.js +0 -15
- package/lib/or-dashboard-widget.js.map +0 -1
- package/lib/widgets/or-base-widget.d.ts +0 -15
- package/lib/widgets/or-base-widget.js +0 -1
- package/lib/widgets/or-base-widget.js.map +0 -1
- package/lib/widgets/or-chart-widget.d.ts +0 -36
- package/lib/widgets/or-chart-widget.js +0 -112
- package/lib/widgets/or-chart-widget.js.map +0 -1
- package/lib/widgets/or-gauge-widget.d.ts +0 -46
- package/lib/widgets/or-gauge-widget.js +0 -60
- package/lib/widgets/or-gauge-widget.js.map +0 -1
- package/lib/widgets/or-kpi-widget.d.ts +0 -44
- package/lib/widgets/or-kpi-widget.js +0 -63
- package/lib/widgets/or-kpi-widget.js.map +0 -1
- package/lib/widgets/or-map-widget.d.ts +0 -49
- package/lib/widgets/or-map-widget.js +0 -75
- package/lib/widgets/or-map-widget.js.map +0 -1
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { customElement } from "lit/decorators.js";
|
|
2
|
+
import {WidgetSettings} from "../util/widget-settings";
|
|
3
|
+
import {TemplateResult, html} from "lit";
|
|
4
|
+
import { InputType, OrInputChangedEvent } from "@openremote/or-mwc-components/or-mwc-input";
|
|
5
|
+
import {i18next} from "@openremote/or-translate";
|
|
6
|
+
import {Asset, AssetQuery, GatewayTunnelInfoType} from "@openremote/model";
|
|
7
|
+
import {GatewayWidgetConfig} from "../widgets/gateway-widget";
|
|
8
|
+
import {Task} from "@lit/task";
|
|
9
|
+
import manager from "@openremote/core";
|
|
10
|
+
|
|
11
|
+
@customElement("gateway-settings")
|
|
12
|
+
export class GatewaySettings extends WidgetSettings {
|
|
13
|
+
|
|
14
|
+
protected GATEWAY_ASSET_TYPES: string[] = ["GatewayAsset"];
|
|
15
|
+
protected GATEWAY_TUNNEL_TYPES: GatewayTunnelInfoType[] = [GatewayTunnelInfoType.HTTPS, GatewayTunnelInfoType.HTTP, GatewayTunnelInfoType.TCP];
|
|
16
|
+
|
|
17
|
+
// Override of widgetConfig with extended type
|
|
18
|
+
protected readonly widgetConfig!: GatewayWidgetConfig;
|
|
19
|
+
|
|
20
|
+
connectedCallback() {
|
|
21
|
+
super.connectedCallback();
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
protected render(): TemplateResult {
|
|
25
|
+
const disabled = !this.widgetConfig.gatewayId;
|
|
26
|
+
return html`
|
|
27
|
+
<div>
|
|
28
|
+
<settings-panel displayName="gatewayTunnels.settings" expanded="${true}">
|
|
29
|
+
<div style="display: flex; flex-direction: column; gap: 8px;">
|
|
30
|
+
<div>
|
|
31
|
+
${this._fetchAssetsTask.render({
|
|
32
|
+
pending: () => html`
|
|
33
|
+
<or-mwc-input .type="${InputType.SELECT}" compact style="width: 100%;" disabled
|
|
34
|
+
label="${i18next.t('gatewayTunnels.selectAsset')}"
|
|
35
|
+
></or-mwc-input>
|
|
36
|
+
`,
|
|
37
|
+
complete: (gatewayAssets) => {
|
|
38
|
+
const options: [string, string][] = gatewayAssets.map(a => [a.id, a.name]);
|
|
39
|
+
const selected = gatewayAssets.find(a => a.id === this.widgetConfig.gatewayId);
|
|
40
|
+
const value = selected ? [selected.id, selected.name] as [string, string] : undefined;
|
|
41
|
+
return html`
|
|
42
|
+
<or-mwc-input .type="${InputType.SELECT}" compact style="width: 100%;"
|
|
43
|
+
.options="${options}" .value="${value}"
|
|
44
|
+
label="${i18next.t('gatewayTunnels.selectAsset')}"
|
|
45
|
+
@or-mwc-input-changed="${(ev: OrInputChangedEvent) => this._onAssetSelect(ev)}"
|
|
46
|
+
></or-mwc-input>
|
|
47
|
+
`;
|
|
48
|
+
},
|
|
49
|
+
error: () => html`
|
|
50
|
+
<or-mwc-input .type="${InputType.TEXT}" compact style="width: 100%;" disabled
|
|
51
|
+
label="${i18next.t('gatewayTunnels.selectAsset')}" .value="${i18next.t('errorOccurred')}"
|
|
52
|
+
></or-mwc-input>
|
|
53
|
+
`
|
|
54
|
+
})}
|
|
55
|
+
</div>
|
|
56
|
+
<div>
|
|
57
|
+
<or-mwc-input .type="${InputType.SELECT}" compact style="width: 100%;"
|
|
58
|
+
.disabled="${disabled}" .options="${this.GATEWAY_TUNNEL_TYPES}" .value="${this.widgetConfig.type}"
|
|
59
|
+
label="${i18next.t('gatewayTunnels.protocol')}"
|
|
60
|
+
@or-mwc-input-changed="${(ev: OrInputChangedEvent) => this._onTunnelTypeSelect(ev)}"
|
|
61
|
+
></or-mwc-input>
|
|
62
|
+
</div>
|
|
63
|
+
<div>
|
|
64
|
+
<or-mwc-input .type="${InputType.TEXT}" style="width: 100%;"
|
|
65
|
+
.disabled="${disabled}" .value="${this.widgetConfig.target}"
|
|
66
|
+
label="${i18next.t('gatewayTunnels.target')}"
|
|
67
|
+
@or-mwc-input-changed="${(ev: OrInputChangedEvent) => this._onTunnelTargetSelect(ev)}"
|
|
68
|
+
></or-mwc-input>
|
|
69
|
+
</div>
|
|
70
|
+
<div>
|
|
71
|
+
<or-mwc-input .type="${InputType.NUMBER}" style="width: 100%;"
|
|
72
|
+
.disabled="${disabled}" .value="${this.widgetConfig.targetPort}"
|
|
73
|
+
label="${i18next.t('gatewayTunnels.targetPort')}"
|
|
74
|
+
@or-mwc-input-changed="${(ev: OrInputChangedEvent) => this._onTunnelTargetPortSelect(ev)}"
|
|
75
|
+
></or-mwc-input>
|
|
76
|
+
</div>
|
|
77
|
+
</div>
|
|
78
|
+
</settings-panel>
|
|
79
|
+
</div>
|
|
80
|
+
`;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
protected _onAssetSelect(ev: OrInputChangedEvent): void {
|
|
84
|
+
this.widgetConfig.gatewayId = ev.detail.value;
|
|
85
|
+
this.notifyConfigUpdate();
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
protected _onTunnelTypeSelect(ev: OrInputChangedEvent) {
|
|
89
|
+
this.widgetConfig.type = ev.detail.value;
|
|
90
|
+
this.notifyConfigUpdate();
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
protected _onTunnelTargetSelect(ev: OrInputChangedEvent) {
|
|
94
|
+
this.widgetConfig.target = ev.detail.value;
|
|
95
|
+
this.notifyConfigUpdate();
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
protected _onTunnelTargetPortSelect(ev: OrInputChangedEvent) {
|
|
99
|
+
this.widgetConfig.targetPort = ev.detail.value;
|
|
100
|
+
this.notifyConfigUpdate();
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
protected _fetchAssetsTask = new Task(this, {
|
|
105
|
+
task: async ([], {signal}) => {
|
|
106
|
+
return await this._fetchAssets(true, signal);
|
|
107
|
+
},
|
|
108
|
+
args: () => []
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
protected async _fetchAssets(requireTunnelSupport = true, signal?: AbortSignal): Promise<Asset[]> {
|
|
112
|
+
const query = {
|
|
113
|
+
realm: {name: manager.displayRealm},
|
|
114
|
+
select: {attributes: ["tunnelingSupported"]},
|
|
115
|
+
types: this.GATEWAY_ASSET_TYPES,
|
|
116
|
+
attributes: requireTunnelSupport ? {
|
|
117
|
+
items: [
|
|
118
|
+
{
|
|
119
|
+
name: {
|
|
120
|
+
predicateType: "string",
|
|
121
|
+
value: "tunnelingSupported"
|
|
122
|
+
},
|
|
123
|
+
value: {
|
|
124
|
+
predicateType: "boolean",
|
|
125
|
+
value: true
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
name: {
|
|
130
|
+
predicateType: "string",
|
|
131
|
+
value: "gatewayStatus"
|
|
132
|
+
},
|
|
133
|
+
value: {
|
|
134
|
+
predicateType: "string",
|
|
135
|
+
value: "CONNECTED"
|
|
136
|
+
},
|
|
137
|
+
}
|
|
138
|
+
]
|
|
139
|
+
} : undefined
|
|
140
|
+
} as AssetQuery;
|
|
141
|
+
return (await manager.rest.api.AssetResource.queryAssets(query)).data;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
}
|
|
@@ -7,7 +7,6 @@ import {AttributesSelectEvent} from "../panels/attributes-panel";
|
|
|
7
7
|
import {Attribute} from "@openremote/model";
|
|
8
8
|
import { InputType, OrInputChangedEvent } from "@openremote/or-mwc-components/or-mwc-input";
|
|
9
9
|
import {ThresholdChangeEvent} from "../panels/thresholds-panel";
|
|
10
|
-
import "../panels/thresholds-panel";
|
|
11
10
|
|
|
12
11
|
@customElement("gauge-settings")
|
|
13
12
|
export class GaugeSettings extends WidgetSettings {
|
|
@@ -72,10 +71,27 @@ export class GaugeSettings extends WidgetSettings {
|
|
|
72
71
|
|
|
73
72
|
protected onMinMaxValueChange(type: 'min' | 'max', ev: OrInputChangedEvent) {
|
|
74
73
|
switch (type) {
|
|
75
|
-
case "max":
|
|
76
|
-
this.widgetConfig.max = ev.detail.value;
|
|
77
|
-
|
|
78
|
-
|
|
74
|
+
case "max": {
|
|
75
|
+
this.widgetConfig.max = ev.detail.value;
|
|
76
|
+
|
|
77
|
+
// Make sure every threshold value is not higher than what is allowed.
|
|
78
|
+
const sortedThresholds = this.widgetConfig.thresholds.sort((x, y) => y[0] - x[0]);
|
|
79
|
+
sortedThresholds.forEach((t, index) => {
|
|
80
|
+
t[0] = Math.max(Math.min(t[0], (ev.detail.value - index - 1)), this.widgetConfig.min);
|
|
81
|
+
});
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
case "min": {
|
|
85
|
+
this.widgetConfig.min = ev.detail.value;
|
|
86
|
+
|
|
87
|
+
// Update the lowest (locked) threshold value to minimum value, and make sure every threshold value is not lower than what is allowed.
|
|
88
|
+
const sortedThresholds = this.widgetConfig.thresholds.sort((x, y) => (x[0] < y[0]) ? -1 : 1);
|
|
89
|
+
sortedThresholds[0][0] = ev.detail.value;
|
|
90
|
+
sortedThresholds.forEach((t, index) => {
|
|
91
|
+
t[0] = Math.min(Math.max(t[0], (ev.detail.value + index)), this.widgetConfig.max);
|
|
92
|
+
})
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
79
95
|
}
|
|
80
96
|
this.notifyConfigUpdate();
|
|
81
97
|
}
|
|
@@ -53,7 +53,7 @@ export class ImageSettings extends AssetWidgetSettings {
|
|
|
53
53
|
return html`
|
|
54
54
|
<div>
|
|
55
55
|
<!-- Attributes selector -->
|
|
56
|
-
<settings-panel displayName="
|
|
56
|
+
<settings-panel displayName="attributes" expanded="${true}">
|
|
57
57
|
<attributes-panel .attributeRefs="${this.widgetConfig.attributeRefs}" onlyDataAttrs="${false}" multi="${true}"
|
|
58
58
|
@attribute-select="${(ev: AttributesSelectEvent) => this.onAttributesSelect(ev)}"
|
|
59
59
|
></attributes-panel>
|
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
import {customElement, state} from "lit/decorators.js";
|
|
2
|
+
import {OrWidget, WidgetManifest} from "../util/or-widget";
|
|
3
|
+
import {css, html, PropertyValues, TemplateResult} from "lit";
|
|
4
|
+
import {WidgetSettings} from "../util/widget-settings";
|
|
5
|
+
import {WidgetConfig} from "../util/widget-config";
|
|
6
|
+
import {GatewaySettings} from "../settings/gateway-settings";
|
|
7
|
+
import {InputType, OrInputChangedEvent} from "@openremote/or-mwc-components/or-mwc-input";
|
|
8
|
+
import {GatewayTunnelInfo, GatewayTunnelInfoType} from "@openremote/model";
|
|
9
|
+
import manager from "@openremote/core";
|
|
10
|
+
import {when} from "lit/directives/when.js";
|
|
11
|
+
import {i18next} from "@openremote/or-translate";
|
|
12
|
+
import {showSnackbar} from "@openremote/or-mwc-components/or-mwc-snackbar";
|
|
13
|
+
|
|
14
|
+
const styling = css`
|
|
15
|
+
#gateway-widget-wrapper {
|
|
16
|
+
height: 100%;
|
|
17
|
+
display: flex;
|
|
18
|
+
justify-content: center;
|
|
19
|
+
align-items: center;
|
|
20
|
+
overflow: hidden;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
#gateway-widget-container {
|
|
24
|
+
display: flex;
|
|
25
|
+
align-items: center;
|
|
26
|
+
justify-content: center;
|
|
27
|
+
gap: 8px;
|
|
28
|
+
max-height: 48px;
|
|
29
|
+
flex-wrap: wrap;
|
|
30
|
+
position: relative;
|
|
31
|
+
}
|
|
32
|
+
`
|
|
33
|
+
|
|
34
|
+
export interface GatewayWidgetConfig extends WidgetConfig {
|
|
35
|
+
gatewayId?: string;
|
|
36
|
+
type: GatewayTunnelInfoType;
|
|
37
|
+
target: string;
|
|
38
|
+
targetPort: number;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function getDefaultWidgetConfig(): GatewayWidgetConfig {
|
|
42
|
+
return {
|
|
43
|
+
type: GatewayTunnelInfoType.HTTPS,
|
|
44
|
+
target: "localhost",
|
|
45
|
+
targetPort: 443,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@customElement("gateway-widget")
|
|
50
|
+
export class GatewayWidget extends OrWidget {
|
|
51
|
+
|
|
52
|
+
protected widgetConfig!: GatewayWidgetConfig;
|
|
53
|
+
|
|
54
|
+
@state()
|
|
55
|
+
protected _loading = true;
|
|
56
|
+
|
|
57
|
+
@state()
|
|
58
|
+
protected _activeTunnel?: GatewayTunnelInfo;
|
|
59
|
+
|
|
60
|
+
protected _startedByUser = false;
|
|
61
|
+
|
|
62
|
+
static getManifest(): WidgetManifest {
|
|
63
|
+
return {
|
|
64
|
+
displayName: "Gateway",
|
|
65
|
+
displayIcon: "lan-connect",
|
|
66
|
+
minColumnWidth: 1,
|
|
67
|
+
minColumnHeight: 1,
|
|
68
|
+
getContentHtml(config: GatewayWidgetConfig): OrWidget {
|
|
69
|
+
return new GatewayWidget(config);
|
|
70
|
+
},
|
|
71
|
+
getSettingsHtml(config: GatewayWidgetConfig): WidgetSettings {
|
|
72
|
+
return new GatewaySettings(config);
|
|
73
|
+
},
|
|
74
|
+
getDefaultConfig(): GatewayWidgetConfig {
|
|
75
|
+
return getDefaultWidgetConfig();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
refreshContent(force: boolean): void {
|
|
81
|
+
this.widgetConfig = JSON.parse(JSON.stringify(this.widgetConfig)) as GatewayWidgetConfig;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
static get styles() {
|
|
85
|
+
return [...super.styles, styling];
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
disconnectedCallback() {
|
|
89
|
+
if(this._activeTunnel) {
|
|
90
|
+
if(this._startedByUser) {
|
|
91
|
+
this._stopTunnel(this._activeTunnel).then(() => {
|
|
92
|
+
console.warn("Stopped the active tunnel, as it was created through the widget.")
|
|
93
|
+
});
|
|
94
|
+
} else {
|
|
95
|
+
console.warn("Keeping the active tunnel open, as it is not started through the widget.")
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
super.disconnectedCallback();
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
protected firstUpdated(_changedProps: PropertyValues) {
|
|
102
|
+
if(this.widgetConfig) {
|
|
103
|
+
|
|
104
|
+
// Apply a timeout of 500 millis, so the tunnel has time to close upon disconnectedCallback() of a different widget.
|
|
105
|
+
setTimeout(() => {
|
|
106
|
+
|
|
107
|
+
// Check if the tunnel is already active upon widget initialization
|
|
108
|
+
const tunnelInfo = this._getTunnelInfoByConfig(this.widgetConfig);
|
|
109
|
+
this._getActiveTunnel(tunnelInfo).then(info => {
|
|
110
|
+
if(info) {
|
|
111
|
+
console.log("Existing tunnel found!", info);
|
|
112
|
+
this._setActiveTunnel(info, true)
|
|
113
|
+
}
|
|
114
|
+
}).catch(e => {
|
|
115
|
+
console.error(e);
|
|
116
|
+
}).finally(() => {
|
|
117
|
+
this._loading = false;
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
}, 500)
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
protected render(): TemplateResult {
|
|
125
|
+
const disabled = this.getEditMode?.() || !this._isConfigComplete(this.widgetConfig);
|
|
126
|
+
return html`
|
|
127
|
+
<div id="gateway-widget-wrapper">
|
|
128
|
+
<div id="gateway-widget-container">
|
|
129
|
+
${when(this._loading, () => html`
|
|
130
|
+
<or-loading-indicator></or-loading-indicator>
|
|
131
|
+
`, () => {
|
|
132
|
+
if (this._activeTunnel) {
|
|
133
|
+
return html`
|
|
134
|
+
|
|
135
|
+
<or-mwc-input .type="${InputType.BUTTON}" icon="stop" label="${i18next.t('gatewayTunnels.stop')}" .disabled="${disabled}"
|
|
136
|
+
@or-mwc-input-changed="${(ev: OrInputChangedEvent) => this._onStopTunnelClick(ev)}"
|
|
137
|
+
></or-mwc-input>
|
|
138
|
+
|
|
139
|
+
${when(this.widgetConfig.type === GatewayTunnelInfoType.TCP, () => html`
|
|
140
|
+
<or-mwc-input .type="${InputType.BUTTON}" icon="content-copy" label="${i18next.t('gatewayTunnels.copyAddress')}" outlined .disabled="${disabled}"
|
|
141
|
+
@or-mwc-input-changed="${(ev: OrInputChangedEvent) => this._onCopyTunnelAddressClick(ev)}"
|
|
142
|
+
></or-mwc-input>
|
|
143
|
+
`, () => html`
|
|
144
|
+
<or-mwc-input .type="${InputType.BUTTON}" icon="open-in-new" label="${i18next.t('gatewayTunnels.open')}" outlined .disabled="${disabled}"
|
|
145
|
+
@or-mwc-input-changed="${(ev: OrInputChangedEvent) => this._onTunnelNavigateClick(ev)}"
|
|
146
|
+
></or-mwc-input>
|
|
147
|
+
`)}
|
|
148
|
+
|
|
149
|
+
`;
|
|
150
|
+
} else {
|
|
151
|
+
return html`
|
|
152
|
+
<or-mwc-input .type="${InputType.BUTTON}" label="${i18next.t('gatewayTunnels.start')}" outlined .disabled="${disabled}"
|
|
153
|
+
@or-mwc-input-changed="${(ev: OrInputChangedEvent) => this._onStartTunnelClick(ev)}"
|
|
154
|
+
></or-mwc-input>
|
|
155
|
+
`;
|
|
156
|
+
}
|
|
157
|
+
})}
|
|
158
|
+
</div>
|
|
159
|
+
</div>
|
|
160
|
+
`;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* HTML callback function when 'copy address' button is pressed for a TCP tunnel.
|
|
165
|
+
*/
|
|
166
|
+
protected _onCopyTunnelAddressClick(ev: OrInputChangedEvent) {
|
|
167
|
+
if (this._isConfigComplete(this.widgetConfig)) {
|
|
168
|
+
const tunnelInfo = this._getTunnelInfoByConfig(this.widgetConfig);
|
|
169
|
+
const address = this._getTunnelAddress(tunnelInfo);
|
|
170
|
+
if(address) {
|
|
171
|
+
navigator.clipboard.writeText(address).finally(() => {
|
|
172
|
+
showSnackbar(undefined, i18next.t('gatewayTunnels.copySuccess'));
|
|
173
|
+
});
|
|
174
|
+
} else {
|
|
175
|
+
console.warn("Could not copy tunnel address as it could not be found.");
|
|
176
|
+
showSnackbar(undefined, i18next.t('errorOccurred'));
|
|
177
|
+
}
|
|
178
|
+
} else {
|
|
179
|
+
console.warn("Could not copy tunnel address as configuration is not complete.");
|
|
180
|
+
showSnackbar(undefined, i18next.t('errorOccurred'));
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* HTML callback function when 'start' button is pressed, meant to create / start a new tunnel.
|
|
186
|
+
*/
|
|
187
|
+
protected _onStartTunnelClick(ev: OrInputChangedEvent) {
|
|
188
|
+
this._tryStartTunnel(this.widgetConfig);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* HTML callback function when 'stop' button is pressed, meant to destroy the active tunnel.
|
|
193
|
+
*/
|
|
194
|
+
protected _onStopTunnelClick(ev: OrInputChangedEvent) {
|
|
195
|
+
this._tryStopTunnel(this.widgetConfig);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* HTML callback function when 'open' button is pressed, meant to start using the tunnel.
|
|
200
|
+
*/
|
|
201
|
+
protected _onTunnelNavigateClick(ev: OrInputChangedEvent) {
|
|
202
|
+
if (this._isConfigComplete(this.widgetConfig)) {
|
|
203
|
+
this._navigateToTunnel(this._getTunnelInfoByConfig(this.widgetConfig));
|
|
204
|
+
} else {
|
|
205
|
+
console.warn("Could not navigate to tunnel as configuration is not complete.")
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Internal function to set the active tunnel.
|
|
211
|
+
* Navigates the user to the tunnel after updating. This can be disabled using the {@link silent} parameter.
|
|
212
|
+
*/
|
|
213
|
+
protected _setActiveTunnel(tunnelInfo?: GatewayTunnelInfo, silent = false) {
|
|
214
|
+
this._activeTunnel = tunnelInfo;
|
|
215
|
+
if(tunnelInfo && !silent) {
|
|
216
|
+
this._navigateToTunnel(tunnelInfo);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* Function that tries to start the tunnel. It checks the configuration beforehand,
|
|
222
|
+
* and acts as a controller to call the correct functions throughout the starting process.
|
|
223
|
+
*/
|
|
224
|
+
protected _tryStartTunnel(widgetConfig: GatewayWidgetConfig): void {
|
|
225
|
+
if (this._isConfigComplete(widgetConfig)) {
|
|
226
|
+
|
|
227
|
+
const tunnelInfo = this._getTunnelInfoByConfig(widgetConfig);
|
|
228
|
+
this._loading = true;
|
|
229
|
+
|
|
230
|
+
this._getActiveTunnel(tunnelInfo).then(activeTunnel => {
|
|
231
|
+
|
|
232
|
+
if (activeTunnel) {
|
|
233
|
+
console.log("Found an active tunnel!", activeTunnel);
|
|
234
|
+
this._setActiveTunnel(activeTunnel);
|
|
235
|
+
this._loading = false;
|
|
236
|
+
|
|
237
|
+
} else {
|
|
238
|
+
this._startTunnel(tunnelInfo).then(newTunnel => {
|
|
239
|
+
|
|
240
|
+
if (newTunnel) {
|
|
241
|
+
console.log("Started a new tunnel!", newTunnel);
|
|
242
|
+
this._setActiveTunnel(newTunnel);
|
|
243
|
+
this._startedByUser = true;
|
|
244
|
+
|
|
245
|
+
} else {
|
|
246
|
+
console.warn("No new tunnel!");
|
|
247
|
+
}
|
|
248
|
+
}).catch(e => {
|
|
249
|
+
console.error(e);
|
|
250
|
+
showSnackbar(undefined, i18next.t("errorOccurred"));
|
|
251
|
+
}).finally(() => {
|
|
252
|
+
this._loading = false;
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
}).catch(e => {
|
|
257
|
+
console.error(e);
|
|
258
|
+
showSnackbar(undefined, i18next.t("errorOccurred"));
|
|
259
|
+
this._loading = false;
|
|
260
|
+
})
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* Internal function that starts the tunnel by communicating with the Manager API.
|
|
266
|
+
*/
|
|
267
|
+
protected async _startTunnel(info: GatewayTunnelInfo): Promise<GatewayTunnelInfo | undefined> {
|
|
268
|
+
if (!info.realm || !info.gatewayId || !info.target || !info.targetPort) {
|
|
269
|
+
throw new Error("Could not start tunnel, as some provided information was not set.");
|
|
270
|
+
}
|
|
271
|
+
return (await manager.rest.api.GatewayServiceResource.startTunnel(info)).data;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
/**
|
|
275
|
+
* Internal function that requests the Manager API for the active tunnel based on the {@link GatewayTunnelInfo} parameter.
|
|
276
|
+
* Returns `undefined` if no tunnel could be found on the Manager instance.
|
|
277
|
+
*/
|
|
278
|
+
protected async _getActiveTunnel(info: GatewayTunnelInfo): Promise<GatewayTunnelInfo | undefined> {
|
|
279
|
+
if (!info.realm || !info.gatewayId || !info.target || !info.targetPort) {
|
|
280
|
+
throw new Error("Could not get active tunnel, as some provided information was not set.")
|
|
281
|
+
}
|
|
282
|
+
const response = await manager.rest.api.GatewayServiceResource.getActiveTunnelInfo(info.realm, info.gatewayId, info.target, info.targetPort);
|
|
283
|
+
if(response.status === 204) {
|
|
284
|
+
return undefined;
|
|
285
|
+
} else {
|
|
286
|
+
return response.data;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* Function that tries to destroy the currently active tunnel.
|
|
292
|
+
*/
|
|
293
|
+
protected _tryStopTunnel(config: GatewayWidgetConfig): void {
|
|
294
|
+
const tunnelInfo = this._getTunnelInfoByConfig(config);
|
|
295
|
+
this._loading = true;
|
|
296
|
+
this._stopTunnel(tunnelInfo)
|
|
297
|
+
.then(() => {
|
|
298
|
+
this._setActiveTunnel(undefined);
|
|
299
|
+
this._startedByUser = false;
|
|
300
|
+
})
|
|
301
|
+
.catch(e => {
|
|
302
|
+
console.warn(e);
|
|
303
|
+
})
|
|
304
|
+
.finally(() => {
|
|
305
|
+
this._loading = false;
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
/**
|
|
310
|
+
* Internal function that requests the Manager API to destroy a tunnel that is in line with the {@link GatewayTunnelInfo} parameter.
|
|
311
|
+
*/
|
|
312
|
+
protected async _stopTunnel(info: GatewayTunnelInfo): Promise<void> {
|
|
313
|
+
return (await manager.rest.api.GatewayServiceResource.stopTunnel(info)).data;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* Function that navigates the user to an HTTP web page that interacts with a service through the tunnel.
|
|
318
|
+
* It will open in a new browser tab automatically.
|
|
319
|
+
*/
|
|
320
|
+
protected _navigateToTunnel(info: GatewayTunnelInfo): void {
|
|
321
|
+
if (!info.realm || !info.gatewayId || !info.target || !info.targetPort) {
|
|
322
|
+
console.warn("Could not navigate to tunnel, as some provided information was not set.");
|
|
323
|
+
}
|
|
324
|
+
const address = this._getTunnelAddress(info);
|
|
325
|
+
switch (info.type) {
|
|
326
|
+
case GatewayTunnelInfoType.HTTPS:
|
|
327
|
+
case GatewayTunnelInfoType.HTTP:
|
|
328
|
+
window.open(address)?.focus();
|
|
329
|
+
break;
|
|
330
|
+
default:
|
|
331
|
+
console.error("Unknown error when navigating to tunnel.");
|
|
332
|
+
break;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/**
|
|
337
|
+
* Internal function to get the tunnel address based on {@link GatewayTunnelInfo}
|
|
338
|
+
*/
|
|
339
|
+
protected _getTunnelAddress(info: GatewayTunnelInfo): string | undefined {
|
|
340
|
+
switch (info.type) {
|
|
341
|
+
case GatewayTunnelInfoType.HTTPS:
|
|
342
|
+
case GatewayTunnelInfoType.HTTP:
|
|
343
|
+
return "//" + info.id + "." + window.location.host;
|
|
344
|
+
case GatewayTunnelInfoType.TCP:
|
|
345
|
+
return info.id + "." + window.location.hostname + ":" + info.assignedPort;
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
/**
|
|
350
|
+
* Internal function to check whether the {@link GatewayWidgetConfig} includes the necessary information to control the tunnel.
|
|
351
|
+
* Uses several `undefined` or empty checks. Useful for checking the object before interacting with Manager APIs.
|
|
352
|
+
*/
|
|
353
|
+
protected _isConfigComplete(widgetConfig: GatewayWidgetConfig): boolean {
|
|
354
|
+
if (!widgetConfig.gatewayId) {
|
|
355
|
+
console.error("Could not start tunnel, since no gateway asset was configured.");
|
|
356
|
+
return false;
|
|
357
|
+
}
|
|
358
|
+
if (!widgetConfig.type) {
|
|
359
|
+
console.error("Could not start tunnel, since no gateway type / protocol was configured.");
|
|
360
|
+
return false;
|
|
361
|
+
}
|
|
362
|
+
if (!widgetConfig.target) {
|
|
363
|
+
console.error("Could not start tunnel, since no gateway target was configured.");
|
|
364
|
+
return false;
|
|
365
|
+
}
|
|
366
|
+
if (!widgetConfig.targetPort) {
|
|
367
|
+
console.error("Could not start tunnel, since no gateway target port was configured.");
|
|
368
|
+
return false;
|
|
369
|
+
}
|
|
370
|
+
return true;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
/**
|
|
374
|
+
* Internal function that parses a {@link GatewayWidgetConfig} into a new {@link GatewayTunnelInfo}.
|
|
375
|
+
*/
|
|
376
|
+
protected _getTunnelInfoByConfig(config: GatewayWidgetConfig): GatewayTunnelInfo {
|
|
377
|
+
return {
|
|
378
|
+
realm: manager.displayRealm,
|
|
379
|
+
gatewayId: config.gatewayId,
|
|
380
|
+
type: config.type,
|
|
381
|
+
target: config.target,
|
|
382
|
+
targetPort: config.targetPort
|
|
383
|
+
} as GatewayTunnelInfo;
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
}
|