@kuadrant/kuadrant-backstage-plugin-frontend 0.0.2-dev-1cc1a15 → 0.0.2-dev-e6e0dbf
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/components/ApiAccessCard/ApiAccessCard.esm.js +229 -11
- package/dist/components/ApiAccessCard/ApiAccessCard.esm.js.map +1 -1
- package/dist/components/ApiKeyManagementTab/ApiKeyManagementTab.esm.js +15 -151
- package/dist/components/ApiKeyManagementTab/ApiKeyManagementTab.esm.js.map +1 -1
- package/dist/components/ApiProductDetailPage/ApiProductDetailPage.esm.js +10 -15
- package/dist/components/ApiProductDetailPage/ApiProductDetailPage.esm.js.map +1 -1
- package/dist/components/ApiProductDetails/ApiProductDetails.esm.js +6 -1
- package/dist/components/ApiProductDetails/ApiProductDetails.esm.js.map +1 -1
- package/dist/components/ApiProductInfoCard/ApiProductInfoCard.esm.js +15 -2
- package/dist/components/ApiProductInfoCard/ApiProductInfoCard.esm.js.map +1 -1
- package/dist/components/CreateAPIProductDialog/CreateAPIProductDialog.esm.js +2 -4
- package/dist/components/CreateAPIProductDialog/CreateAPIProductDialog.esm.js.map +1 -1
- package/dist/components/OidcProviderCard/OidcProviderCard.esm.js +23 -0
- package/dist/components/OidcProviderCard/OidcProviderCard.esm.js.map +1 -0
- package/dist/components/RequestAccessDialog/RequestAccessDialog.esm.js +167 -0
- package/dist/components/RequestAccessDialog/RequestAccessDialog.esm.js.map +1 -0
- package/dist/index.d.ts +1 -5
- package/dist/index.esm.js +1 -2
- package/dist/index.esm.js.map +1 -1
- package/dist/plugin.esm.js +1 -17
- package/dist/plugin.esm.js.map +1 -1
- package/dist/utils/validation.esm.js.map +1 -1
- package/dist-scalprum/configSchema.json +27 -1
- package/dist-scalprum/internal.plugin-kuadrant.1ec7b1dc71663b4b9a17.js +2 -0
- package/dist-scalprum/internal.plugin-kuadrant.1ec7b1dc71663b4b9a17.js.map +1 -0
- package/dist-scalprum/plugin-manifest.json +2 -2
- package/dist-scalprum/static/1085.d17e689a.chunk.js +3 -0
- package/dist-scalprum/static/{1085.536aa0fa.chunk.js.map → 1085.d17e689a.chunk.js.map} +1 -1
- package/dist-scalprum/static/1645.db086648.chunk.js +3 -0
- package/dist-scalprum/static/1645.db086648.chunk.js.map +1 -0
- package/dist-scalprum/static/2233.bf0c10d7.chunk.js +3 -0
- package/dist-scalprum/static/2233.bf0c10d7.chunk.js.map +1 -0
- package/dist-scalprum/static/2628.20156dc1.chunk.js +3 -0
- package/dist-scalprum/static/2628.20156dc1.chunk.js.map +1 -0
- package/dist-scalprum/static/2822.27a4ac5b.chunk.js +2 -0
- package/dist-scalprum/static/2822.27a4ac5b.chunk.js.map +1 -0
- package/dist-scalprum/static/2946.a35243f1.chunk.js +3 -0
- package/dist-scalprum/static/{2946.167c50c2.chunk.js.map → 2946.a35243f1.chunk.js.map} +1 -1
- package/dist-scalprum/static/2952.b3c7e41c.chunk.js +2 -0
- package/dist-scalprum/static/2952.b3c7e41c.chunk.js.map +1 -0
- package/dist-scalprum/static/2967.6a1db3ad.chunk.js +2 -0
- package/dist-scalprum/static/2967.6a1db3ad.chunk.js.map +1 -0
- package/dist-scalprum/static/3091.9a74ea5f.chunk.js +2 -0
- package/dist-scalprum/static/3091.9a74ea5f.chunk.js.map +1 -0
- package/dist-scalprum/static/327.a9a99299.chunk.js +2 -0
- package/dist-scalprum/static/327.a9a99299.chunk.js.map +1 -0
- package/dist-scalprum/static/3459.a7c29521.chunk.js +2 -0
- package/dist-scalprum/static/3459.a7c29521.chunk.js.map +1 -0
- package/dist-scalprum/static/3504.1c2f2e54.chunk.js +3 -0
- package/dist-scalprum/static/3504.1c2f2e54.chunk.js.map +1 -0
- package/dist-scalprum/static/3650.4f0dc550.chunk.js +2 -0
- package/dist-scalprum/static/3650.4f0dc550.chunk.js.map +1 -0
- package/dist-scalprum/static/3657.882640ca.chunk.js +3 -0
- package/dist-scalprum/static/3657.882640ca.chunk.js.LICENSE.txt +8 -0
- package/dist-scalprum/static/3657.882640ca.chunk.js.map +1 -0
- package/dist-scalprum/static/3947.7458971d.chunk.js +2 -0
- package/dist-scalprum/static/3947.7458971d.chunk.js.map +1 -0
- package/dist-scalprum/static/3954.12dd8006.chunk.js +3 -0
- package/dist-scalprum/static/3954.12dd8006.chunk.js.LICENSE.txt +9 -0
- package/dist-scalprum/static/3954.12dd8006.chunk.js.map +1 -0
- package/dist-scalprum/static/3984.647ef00c.chunk.js +2 -0
- package/dist-scalprum/static/3984.647ef00c.chunk.js.map +1 -0
- package/dist-scalprum/static/4026.d652a7a1.chunk.js +2 -0
- package/dist-scalprum/static/4026.d652a7a1.chunk.js.map +1 -0
- package/dist-scalprum/static/4093.4093.3597955d.css +5 -0
- package/dist-scalprum/static/4093.4093.3597955d.css.map +1 -0
- package/dist-scalprum/static/4093.ee6f0452.chunk.js +3 -0
- package/dist-scalprum/static/4093.ee6f0452.chunk.js.LICENSE.txt +26 -0
- package/dist-scalprum/static/4093.ee6f0452.chunk.js.map +1 -0
- package/dist-scalprum/static/4382.a7363415.chunk.js +3 -0
- package/dist-scalprum/static/4382.a7363415.chunk.js.map +1 -0
- package/dist-scalprum/static/441.f708f1e0.chunk.js +2 -0
- package/dist-scalprum/static/441.f708f1e0.chunk.js.map +1 -0
- package/dist-scalprum/static/4611.0d064cdf.chunk.js +2 -0
- package/dist-scalprum/static/4611.0d064cdf.chunk.js.map +1 -0
- package/dist-scalprum/static/4614.23f2a85b.chunk.js +2 -0
- package/dist-scalprum/static/4614.23f2a85b.chunk.js.map +1 -0
- package/dist-scalprum/static/4651.c85cecc4.chunk.js +2 -0
- package/dist-scalprum/static/4651.c85cecc4.chunk.js.map +1 -0
- package/dist-scalprum/static/{4682.6959fcd1.chunk.js → 4682.bd2dfccd.chunk.js} +2 -2
- package/dist-scalprum/static/4682.bd2dfccd.chunk.js.map +1 -0
- package/dist-scalprum/static/4935.e14465ff.chunk.js +3 -0
- package/dist-scalprum/static/4935.e14465ff.chunk.js.LICENSE.txt +9 -0
- package/dist-scalprum/static/4935.e14465ff.chunk.js.map +1 -0
- package/dist-scalprum/static/501.87de76da.chunk.js +3 -0
- package/dist-scalprum/static/501.87de76da.chunk.js.LICENSE.txt +21 -0
- package/dist-scalprum/static/501.87de76da.chunk.js.map +1 -0
- package/dist-scalprum/static/5010.0cd6c959.chunk.js +3 -0
- package/dist-scalprum/static/5010.0cd6c959.chunk.js.map +1 -0
- package/dist-scalprum/static/5203.539ed3ec.chunk.js +2 -0
- package/dist-scalprum/static/5203.539ed3ec.chunk.js.map +1 -0
- package/dist-scalprum/static/5235.2a59dc45.chunk.js +2 -0
- package/dist-scalprum/static/5235.2a59dc45.chunk.js.map +1 -0
- package/dist-scalprum/static/5453.ecdee66d.chunk.js +2 -0
- package/dist-scalprum/static/5453.ecdee66d.chunk.js.map +1 -0
- package/dist-scalprum/static/6038.63d1f832.chunk.js +3 -0
- package/dist-scalprum/static/6038.63d1f832.chunk.js.LICENSE.txt +8 -0
- package/dist-scalprum/static/6038.63d1f832.chunk.js.map +1 -0
- package/dist-scalprum/static/635.e030b18a.chunk.js +3 -0
- package/dist-scalprum/static/635.e030b18a.chunk.js.LICENSE.txt +9 -0
- package/dist-scalprum/static/635.e030b18a.chunk.js.map +1 -0
- package/dist-scalprum/static/{6371.c83dc422.chunk.js → 6371.d45f37cc.chunk.js} +2 -2
- package/dist-scalprum/static/6371.d45f37cc.chunk.js.map +1 -0
- package/dist-scalprum/static/{8563.7e068fb0.chunk.js → 6763.d6cd937f.chunk.js} +3 -3
- package/dist-scalprum/static/6763.d6cd937f.chunk.js.map +1 -0
- package/dist-scalprum/static/{6800.736d5da3.chunk.js → 6800.6e2a08fe.chunk.js} +2 -2
- package/dist-scalprum/static/6800.6e2a08fe.chunk.js.map +1 -0
- package/dist-scalprum/static/{6840.4728fab9.chunk.js → 6840.3bd67cf4.chunk.js} +2 -2
- package/dist-scalprum/static/6840.3bd67cf4.chunk.js.map +1 -0
- package/dist-scalprum/static/7076.8745d395.chunk.js +2 -0
- package/dist-scalprum/static/7076.8745d395.chunk.js.map +1 -0
- package/dist-scalprum/static/7164.5dc4bc72.chunk.js +2 -0
- package/dist-scalprum/static/7164.5dc4bc72.chunk.js.map +1 -0
- package/dist-scalprum/static/7367.62c9669e.chunk.js +3 -0
- package/dist-scalprum/static/7367.62c9669e.chunk.js.LICENSE.txt +21 -0
- package/dist-scalprum/static/7367.62c9669e.chunk.js.map +1 -0
- package/dist-scalprum/static/7791.8135d440.chunk.js +2 -0
- package/dist-scalprum/static/7791.8135d440.chunk.js.map +1 -0
- package/dist-scalprum/static/8083.4763f88b.chunk.js +206 -0
- package/dist-scalprum/static/8083.4763f88b.chunk.js.LICENSE.txt +9 -0
- package/dist-scalprum/static/8083.4763f88b.chunk.js.map +1 -0
- package/dist-scalprum/static/8172.cbe1f2c4.chunk.js +2 -0
- package/dist-scalprum/static/8172.cbe1f2c4.chunk.js.map +1 -0
- package/dist-scalprum/static/8799.83d049f3.chunk.js +2 -0
- package/dist-scalprum/static/8799.83d049f3.chunk.js.map +1 -0
- package/dist-scalprum/static/9316.d9f2fe18.chunk.js +2 -0
- package/dist-scalprum/static/9316.d9f2fe18.chunk.js.map +1 -0
- package/dist-scalprum/static/{7556.aa8a002f.chunk.js → 9655.db0c82b2.chunk.js} +3 -3
- package/dist-scalprum/static/9655.db0c82b2.chunk.js.map +1 -0
- package/dist-scalprum/static/9710.7ec34777.chunk.js +2 -0
- package/dist-scalprum/static/9710.7ec34777.chunk.js.map +1 -0
- package/dist-scalprum/static/9738.b037daf3.chunk.js +2 -0
- package/dist-scalprum/static/9738.b037daf3.chunk.js.map +1 -0
- package/dist-scalprum/static/exposed-PluginRoot.c3fd0cc1.chunk.js +2 -0
- package/dist-scalprum/static/exposed-PluginRoot.c3fd0cc1.chunk.js.map +1 -0
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_http.a55e168b.chunk.js +2 -0
- package/dist-scalprum/static/{react-syntax-highlighter_languages_highlight_http.5859273c.chunk.js.map → react-syntax-highlighter_languages_highlight_http.a55e168b.chunk.js.map} +1 -1
- package/package.json +12 -11
- package/dist/components/ApprovalQueueCard/ApprovalQueueCard.esm.js +0 -761
- package/dist/components/ApprovalQueueCard/ApprovalQueueCard.esm.js.map +0 -1
- package/dist/components/ApprovalQueueCard/index.esm.js +0 -2
- package/dist/components/ApprovalQueueCard/index.esm.js.map +0 -1
- package/dist/components/PlanPolicyDetailPage/PlanPolicyDetailPage.esm.js +0 -89
- package/dist/components/PlanPolicyDetailPage/PlanPolicyDetailPage.esm.js.map +0 -1
- package/dist/components/PlanPolicyDetailPage/index.esm.js +0 -2
- package/dist/components/PlanPolicyDetailPage/index.esm.js.map +0 -1
- package/dist-scalprum/internal.plugin-kuadrant.58a9d553e354df0eed24.js +0 -2
- package/dist-scalprum/internal.plugin-kuadrant.58a9d553e354df0eed24.js.map +0 -1
- package/dist-scalprum/static/1085.536aa0fa.chunk.js +0 -3
- package/dist-scalprum/static/1613.71f0fccd.chunk.js +0 -3
- package/dist-scalprum/static/1613.71f0fccd.chunk.js.LICENSE.txt +0 -10
- package/dist-scalprum/static/1613.71f0fccd.chunk.js.map +0 -1
- package/dist-scalprum/static/1836.b74b4c40.chunk.js +0 -3
- package/dist-scalprum/static/1836.b74b4c40.chunk.js.LICENSE.txt +0 -10
- package/dist-scalprum/static/1836.b74b4c40.chunk.js.map +0 -1
- package/dist-scalprum/static/2198.5905970e.chunk.js +0 -2
- package/dist-scalprum/static/2198.5905970e.chunk.js.map +0 -1
- package/dist-scalprum/static/2628.6619bf8b.chunk.js +0 -3
- package/dist-scalprum/static/2628.6619bf8b.chunk.js.map +0 -1
- package/dist-scalprum/static/2759.fceb317f.chunk.js +0 -2
- package/dist-scalprum/static/2759.fceb317f.chunk.js.map +0 -1
- package/dist-scalprum/static/2928.4303c12e.chunk.js +0 -3
- package/dist-scalprum/static/2928.4303c12e.chunk.js.map +0 -1
- package/dist-scalprum/static/2946.167c50c2.chunk.js +0 -3
- package/dist-scalprum/static/2967.ac3a4bee.chunk.js +0 -2
- package/dist-scalprum/static/2967.ac3a4bee.chunk.js.map +0 -1
- package/dist-scalprum/static/2987.1da15560.chunk.js +0 -2
- package/dist-scalprum/static/2987.1da15560.chunk.js.map +0 -1
- package/dist-scalprum/static/3097.4bd6b35f.chunk.js +0 -2
- package/dist-scalprum/static/3097.4bd6b35f.chunk.js.map +0 -1
- package/dist-scalprum/static/3459.5c90b5a3.chunk.js +0 -2
- package/dist-scalprum/static/3459.5c90b5a3.chunk.js.map +0 -1
- package/dist-scalprum/static/3466.43dfe991.chunk.js +0 -3
- package/dist-scalprum/static/3466.43dfe991.chunk.js.map +0 -1
- package/dist-scalprum/static/3503.66b6e510.chunk.js +0 -2
- package/dist-scalprum/static/3503.66b6e510.chunk.js.map +0 -1
- package/dist-scalprum/static/3647.b96f9b3e.chunk.js +0 -2
- package/dist-scalprum/static/3647.b96f9b3e.chunk.js.map +0 -1
- package/dist-scalprum/static/3650.515c743a.chunk.js +0 -2
- package/dist-scalprum/static/3650.515c743a.chunk.js.map +0 -1
- package/dist-scalprum/static/3657.59d45756.chunk.js +0 -3
- package/dist-scalprum/static/3657.59d45756.chunk.js.LICENSE.txt +0 -10
- package/dist-scalprum/static/3657.59d45756.chunk.js.map +0 -1
- package/dist-scalprum/static/428.0a290bc6.chunk.js +0 -2
- package/dist-scalprum/static/428.0a290bc6.chunk.js.map +0 -1
- package/dist-scalprum/static/441.9f02e61b.chunk.js +0 -2
- package/dist-scalprum/static/441.9f02e61b.chunk.js.map +0 -1
- package/dist-scalprum/static/4682.6959fcd1.chunk.js.map +0 -1
- package/dist-scalprum/static/5010.a4aa0f8e.chunk.js +0 -3
- package/dist-scalprum/static/5010.a4aa0f8e.chunk.js.map +0 -1
- package/dist-scalprum/static/5453.280127dd.chunk.js +0 -2
- package/dist-scalprum/static/5453.280127dd.chunk.js.map +0 -1
- package/dist-scalprum/static/5603.05d9ca7f.chunk.js +0 -2
- package/dist-scalprum/static/5603.05d9ca7f.chunk.js.map +0 -1
- package/dist-scalprum/static/6272.b5ee5195.chunk.js +0 -3
- package/dist-scalprum/static/6272.b5ee5195.chunk.js.map +0 -1
- package/dist-scalprum/static/6371.c83dc422.chunk.js.map +0 -1
- package/dist-scalprum/static/6422.97baf774.chunk.js +0 -2
- package/dist-scalprum/static/6422.97baf774.chunk.js.map +0 -1
- package/dist-scalprum/static/6800.736d5da3.chunk.js.map +0 -1
- package/dist-scalprum/static/6840.4728fab9.chunk.js.map +0 -1
- package/dist-scalprum/static/7556.aa8a002f.chunk.js.map +0 -1
- package/dist-scalprum/static/7601.4df83556.chunk.js +0 -3
- package/dist-scalprum/static/7601.4df83556.chunk.js.map +0 -1
- package/dist-scalprum/static/7791.39417f8c.chunk.js +0 -2
- package/dist-scalprum/static/7791.39417f8c.chunk.js.map +0 -1
- package/dist-scalprum/static/7984.c8511b89.chunk.js +0 -2
- package/dist-scalprum/static/7984.c8511b89.chunk.js.map +0 -1
- package/dist-scalprum/static/8365.d3360f18.chunk.js +0 -2
- package/dist-scalprum/static/8365.d3360f18.chunk.js.map +0 -1
- package/dist-scalprum/static/8563.7e068fb0.chunk.js.map +0 -1
- package/dist-scalprum/static/8799.7c749838.chunk.js +0 -2
- package/dist-scalprum/static/8799.7c749838.chunk.js.map +0 -1
- package/dist-scalprum/static/exposed-PluginRoot.a5792fb2.chunk.js +0 -2
- package/dist-scalprum/static/exposed-PluginRoot.a5792fb2.chunk.js.map +0 -1
- package/dist-scalprum/static/react-syntax-highlighter_languages_highlight_http.5859273c.chunk.js +0 -2
- /package/dist-scalprum/static/{1085.536aa0fa.chunk.js.LICENSE.txt → 1085.d17e689a.chunk.js.LICENSE.txt} +0 -0
- /package/dist-scalprum/static/{3466.43dfe991.chunk.js.LICENSE.txt → 1645.db086648.chunk.js.LICENSE.txt} +0 -0
- /package/dist-scalprum/static/{6272.b5ee5195.chunk.js.LICENSE.txt → 2233.bf0c10d7.chunk.js.LICENSE.txt} +0 -0
- /package/dist-scalprum/static/{2628.6619bf8b.chunk.js.LICENSE.txt → 2628.20156dc1.chunk.js.LICENSE.txt} +0 -0
- /package/dist-scalprum/static/{2946.167c50c2.chunk.js.LICENSE.txt → 2946.a35243f1.chunk.js.LICENSE.txt} +0 -0
- /package/dist-scalprum/static/{7601.4df83556.chunk.js.LICENSE.txt → 3504.1c2f2e54.chunk.js.LICENSE.txt} +0 -0
- /package/dist-scalprum/static/{2928.4303c12e.chunk.js.LICENSE.txt → 4382.a7363415.chunk.js.LICENSE.txt} +0 -0
- /package/dist-scalprum/static/{5010.a4aa0f8e.chunk.js.LICENSE.txt → 5010.0cd6c959.chunk.js.LICENSE.txt} +0 -0
- /package/dist-scalprum/static/{8563.7e068fb0.chunk.js.LICENSE.txt → 6763.d6cd937f.chunk.js.LICENSE.txt} +0 -0
- /package/dist-scalprum/static/{7556.aa8a002f.chunk.js.LICENSE.txt → 9655.db0c82b2.chunk.js.LICENSE.txt} +0 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunkinternal_plugin_kuadrant=self.webpackChunkinternal_plugin_kuadrant||[]).push([[7791],{57791:(e,i,s)=>{s.r(i),s.d(i,{ApiProductDetailPage:()=>H});var t=s(31085),a=s(95478),n=s(49634),l=s(22097),o=s(35015),r=s(86687),d=s(42367),c=s(289),u=s(15831),p=s(37725),h=s(46681),m=s(94641),A=s(96040),x=s(41241),j=s(58837),v=s(10394),y=s(64947),f=s(71677),P=s(29365),b=s(72501),g=s(31653),k=s(38605),w=s(42899),I=s(67720),S=s(61009),N=s(47625),C=s(9719),$=s(54801),T=s(13677),z=s(55735),D=s(75625),E=s(39590),_=s(26997),B=s(63221),F=s(89509),U=s(71255),O=s(46205),R=s(34955);const L=(0,j.A)(e=>({label:{fontWeight:600,color:e.palette.text.secondary,marginBottom:e.spacing(.5),fontSize:"0.75rem",textTransform:"uppercase"},actionButtons:{display:"flex",gap:e.spacing(1),alignItems:"center"},cardHeader:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",marginBottom:e.spacing(2)},cardActions:{display:"flex",gap:e.spacing(1),alignItems:"center"}})),H=()=>{var e,i,s,j,H,Y,J,K,V,W,q,G,M,Q,X,Z,ee,ie,se,te,ae,ne,le,oe;const re=L(),{namespace:de,name:ce}=(0,n.useParams)(),ue=(0,n.useNavigate)(),pe=(0,l.useApi)(l.configApiRef),he=(0,l.useApi)(l.fetchApiRef),me=(0,l.useApi)(l.alertApiRef),Ae=pe.getString("backend.baseUrl"),[xe,je]=(0,a.useState)(0),[ve,ye]=(0,a.useState)(!1),[fe,Pe]=(0,a.useState)(!1),[be,ge]=(0,a.useState)(!1),[ke,we]=(0,a.useState)(0),{allowed:Ie}=(0,O.l)(R.v_),{allowed:Se}=(0,O.l)(R.R_),Ne=Ie,{value:Ce,loading:$e,error:Te}=(0,o.A)(async()=>{const e=await he.fetch(`${Ae}/api/kuadrant/apiproducts/${de}/${ce}`);if(!e.ok)throw new Error("Failed to fetch API product");return e.json()},[de,ce,Ae,he,ke]),ze=async()=>{var e;if(!Ce)return;const i="Published"===(null===(e=Ce.spec)||void 0===e?void 0:e.publishStatus)?"Draft":"Published";try{if(!(await he.fetch(`${Ae}/api/kuadrant/apiproducts/${de}/${ce}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({spec:{publishStatus:i}})})).ok)throw new Error("Failed to update publish status");me.post({message:`API Product ${"Published"===i?"published":"unpublished"} successfully`,severity:"success",display:"transient"}),we(e=>e+1)}catch(e){me.post({message:"Failed to update publish status",severity:"error",display:"transient"})}};if($e)return(0,t.jsx)(r.k,{});if(Te||!Ce)return(0,t.jsx)(d._,{error:Te||new Error("API product not found")});const De="Published"===(null===(e=Ce.spec)||void 0===e?void 0:e.publishStatus),Ee=null===(s=Ce.status)||void 0===s||null===(i=s.conditions)||void 0===i?void 0:i.find(e=>"PlanPolicyDiscovered"===e.type),_e=null===(H=Ce.status)||void 0===H||null===(j=H.conditions)||void 0===j?void 0:j.find(e=>"AuthPolicyDiscovered"===e.type),Be=(null===(Y=Ce.status)||void 0===Y?void 0:Y.discoveredPlans)||[],Fe=(null===(K=Ce.status)||void 0===K||null===(J=K.discoveredAuthScheme)||void 0===J?void 0:J.authentication)||{},Ue=Object.values(Fe),Oe=Ue.some(e=>e.hasOwnProperty("jwt")),Re=Ue.find(e=>e.hasOwnProperty("jwt")),Le=(null==Re||null===(V=Re.jwt)||void 0===V?void 0:V.issuerUrl)||"unknown",He=(null===(q=Ce.status)||void 0===q||null===(W=q.oidcDiscovery)||void 0===W?void 0:W.tokenEndpoint)||"unknown",Ye=!(!(null===(M=Ce.status)||void 0===M||null===(G=M.openapi)||void 0===G?void 0:G.raw)&&!(null===(X=Ce.spec)||void 0===X||null===(Q=X.documentation)||void 0===Q?void 0:Q.openAPISpecURL)),Je=!!(Ee||_e||Be.length>0);let Ke=1;const Ve=Ye?Ke++:-1,We=Je?Ke++:-1,qe=Oe?Ke++:-1,Ge=e=>{if(!e)return"No limits";const i=[];return e.daily&&i.push(`${e.daily}/day`),e.weekly&&i.push(`${e.weekly}/week`),e.monthly&&i.push(`${e.monthly}/month`),e.yearly&&i.push(`${e.yearly}/year`),i.length>0?i.join(", "):"No limits"};return(0,t.jsxs)(c.Y,{themeId:"tool",children:[(0,t.jsx)(u.Y,{title:(null===(Z=Ce.spec)||void 0===Z?void 0:Z.displayName)||Ce.metadata.name,subtitle:(null===(ee=Ce.spec)||void 0===ee?void 0:ee.description)||"",children:(0,t.jsxs)(v.A,{className:re.actionButtons,children:[(0,t.jsx)(p.N_,{to:"/kuadrant/api-products",children:(0,t.jsx)(y.A,{startIcon:(0,t.jsx)(z.A,{}),children:"Back"})}),Ne&&(0,t.jsx)(y.A,{variant:"outlined",color:De?"default":"primary",onClick:ze,children:De?"Unpublish API product":"Publish API product"}),Ie&&(0,t.jsx)(f.Ay,{title:"Edit",children:(0,t.jsx)(P.A,{onClick:()=>ye(!0),size:"small",children:(0,t.jsx)(D.A,{})})}),Se&&(0,t.jsx)(f.Ay,{title:"Delete",children:(0,t.jsx)(P.A,{onClick:()=>Pe(!0),size:"small",children:(0,t.jsx)(E.A,{})})})]})}),(0,t.jsxs)(h.U,{children:[(0,t.jsx)(v.A,{mb:2,children:(0,t.jsxs)(m.B,{"aria-label":"breadcrumb",children:[(0,t.jsx)(p.N_,{to:"/kuadrant/api-products",children:"API Products"}),(0,t.jsx)(b.A,{children:(null===(ie=Ce.spec)||void 0===ie?void 0:ie.displayName)||Ce.metadata.name})]})}),(0,t.jsx)(v.A,{mb:2,children:(0,t.jsxs)(g.A,{value:xe,onChange:(e,i)=>je(i),indicatorColor:"primary",textColor:"primary",children:[(0,t.jsx)(k.A,{label:"Overview"}),Ye&&(0,t.jsx)(k.A,{label:"Definition"}),Je&&(0,t.jsx)(k.A,{label:"Policies"}),Oe&&(0,t.jsx)(k.A,{label:"OIDC"})]})}),0===xe&&(0,t.jsxs)(A.n,{title:"API Product",children:[(0,t.jsxs)(v.A,{className:re.cardHeader,children:[(0,t.jsxs)(v.A,{children:[(0,t.jsx)(b.A,{variant:"caption",className:re.label,children:"Product Name"}),(0,t.jsx)(b.A,{variant:"h6",children:(null===(se=Ce.spec)||void 0===se?void 0:se.displayName)||Ce.metadata.name})]}),(0,t.jsxs)(v.A,{className:re.cardActions,children:[Ne&&(0,t.jsx)(y.A,{variant:"outlined",color:De?"default":"primary",onClick:ze,size:"small",children:De?"Unpublish API product":"Publish API product"}),Ie&&(0,t.jsx)(P.A,{onClick:()=>ye(!0),size:"small",children:(0,t.jsx)(D.A,{fontSize:"small"})}),Se&&(0,t.jsx)(P.A,{onClick:()=>Pe(!0),size:"small",children:(0,t.jsx)(E.A,{fontSize:"small"})})]})]}),(0,t.jsx)(F.O,{product:Ce,showStatus:!0,showCatalogLink:!0})]}),xe===Ve&&Ye&&(0,t.jsx)(A.n,{title:"API Definition",children:(null===(ae=Ce.status)||void 0===ae||null===(te=ae.openapi)||void 0===te?void 0:te.raw)?(0,t.jsx)(x.S,{definition:Ce.status.openapi.raw}):(0,t.jsx)(b.A,{variant:"body2",color:"textSecondary",children:(null===(le=Ce.spec)||void 0===le||null===(ne=le.documentation)||void 0===ne?void 0:ne.openAPISpecURL)?(0,t.jsxs)(t.Fragment,{children:["OpenAPI specification not yet synced. View at:"," ",(0,t.jsx)(p.N_,{to:Ce.spec.documentation.openAPISpecURL,target:"_blank",children:Ce.spec.documentation.openAPISpecURL})]}):"No OpenAPI specification available for this API product."})}),xe===We&&Je&&(0,t.jsxs)(w.A,{container:!0,spacing:3,children:[(0,t.jsx)(w.A,{item:!0,xs:12,children:(0,t.jsx)(A.n,{title:"Discovered Policies",children:(0,t.jsxs)(w.A,{container:!0,spacing:2,children:[(0,t.jsxs)(w.A,{item:!0,xs:12,md:6,children:[(0,t.jsx)(b.A,{variant:"body2",color:"textSecondary",gutterBottom:!0,children:"Plan Policy"}),Ee?(0,t.jsxs)(v.A,{children:[(0,t.jsx)(I.A,{label:"True"===Ee.status?"Found":"Not Found",size:"small",style:{backgroundColor:"True"===Ee.status?"#4caf50":"#ff9800",color:"#fff",marginBottom:8}}),(0,t.jsx)(b.A,{variant:"body2",children:Ee.message||"No details available"})]}):(0,t.jsx)(b.A,{variant:"body2",children:"No plan policy information"})]}),(0,t.jsxs)(w.A,{item:!0,xs:12,md:6,children:[(0,t.jsx)(b.A,{variant:"body2",color:"textSecondary",gutterBottom:!0,children:"Auth Policy"}),_e?(0,t.jsxs)(v.A,{children:[(0,t.jsx)(I.A,{label:"True"===_e.status?"Found":"Not Found",size:"small",style:{backgroundColor:"True"===_e.status?"#4caf50":"#ff9800",color:"#fff",marginBottom:8}}),(0,t.jsx)(b.A,{variant:"body2",children:_e.message||"No details available"})]}):(0,t.jsx)(b.A,{variant:"body2",children:"No auth policy information"})]})]})})}),Be.length>0&&(0,t.jsx)(w.A,{item:!0,xs:12,children:(0,t.jsxs)(A.n,{title:"Effective Plan Tiers",children:[(0,t.jsx)(b.A,{variant:"body2",color:"textSecondary",paragraph:!0,children:"These tiers are computed from all attached PlanPolicies (including gateway-level policies)."}),(0,t.jsxs)(S.A,{size:"small",children:[(0,t.jsx)(N.A,{children:(0,t.jsxs)(C.A,{children:[(0,t.jsx)($.A,{children:"Tier"}),(0,t.jsx)($.A,{children:"Rate Limits"})]})}),(0,t.jsx)(T.A,{children:Be.map(e=>(0,t.jsxs)(C.A,{children:[(0,t.jsx)($.A,{children:(0,t.jsx)(I.A,{label:e.tier,size:"small",color:"primary"})}),(0,t.jsx)($.A,{children:Ge(e.limits)})]},e.tier))})]})]})})]}),xe===qe&&Oe&&(0,t.jsx)(U.n,{issuerUrl:Le,tokenEndpoint:He})]}),(0,t.jsx)(_.C,{open:ve,onClose:()=>ye(!1),onSuccess:()=>{ye(!1),we(e=>e+1),me.post({message:"API Product updated successfully",severity:"success",display:"transient"})},namespace:de||"",name:ce||""}),(0,t.jsx)(B.K,{open:fe,title:"Delete API Product",description:`Are you sure you want to delete "${(null===(oe=Ce.spec)||void 0===oe?void 0:oe.displayName)||Ce.metadata.name}"? This action cannot be undone.`,severity:"high",confirmText:Ce.metadata.name,deleting:be,onConfirm:async()=>{if(Ce){ge(!0);try{if(!(await he.fetch(`${Ae}/api/kuadrant/apiproducts/${de}/${ce}`,{method:"DELETE"})).ok)throw new Error("Failed to delete API product");Pe(!1),me.post({message:"API Product deleted successfully",severity:"success",display:"transient"}),ue("/kuadrant/api-products")}catch(e){me.post({message:"Failed to delete API product",severity:"error",display:"transient"})}finally{ge(!1)}}},onCancel:()=>Pe(!1)})]})}}}]);
|
|
2
|
+
//# sourceMappingURL=7791.8135d440.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static/7791.8135d440.chunk.js","mappings":"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","sources":["webpack://internal.plugin-kuadrant/./src/components/ApiProductDetailPage/ApiProductDetailPage.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { useParams, useNavigate } from \"react-router-dom\";\nimport {\n useApi,\n configApiRef,\n fetchApiRef,\n alertApiRef,\n} from \"@backstage/core-plugin-api\";\nimport { useAsync } from \"react-use\";\nimport {\n Header,\n Page,\n Content,\n Progress,\n ResponseErrorPanel,\n InfoCard,\n Link,\n Breadcrumbs,\n} from \"@backstage/core-components\";\nimport { OpenApiDefinitionWidget } from \"@backstage/plugin-api-docs\";\nimport {\n Box,\n Typography,\n IconButton,\n Tooltip,\n Tabs,\n Tab,\n Button,\n makeStyles,\n Grid,\n Chip,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n} from \"@material-ui/core\";\nimport ArrowBackIcon from \"@material-ui/icons/ArrowBack\";\nimport EditIcon from \"@material-ui/icons/Edit\";\nimport DeleteIcon from \"@material-ui/icons/Delete\";\nimport { APIProduct } from \"../../types/api-management\";\nimport { EditAPIProductDialog } from \"../EditAPIProductDialog\";\nimport { ConfirmDeleteDialog } from \"../ConfirmDeleteDialog\";\nimport { ApiProductDetails } from \"../ApiProductDetails\";\nimport { OidcProviderCard } from \"../OidcProviderCard\";\nimport { useKuadrantPermission } from \"../../utils/permissions\";\nimport {\n kuadrantApiProductUpdateAllPermission,\n kuadrantApiProductDeleteAllPermission,\n} from \"../../permissions\";\n\nconst useStyles = makeStyles((theme) => ({\n label: {\n fontWeight: 600,\n color: theme.palette.text.secondary,\n marginBottom: theme.spacing(0.5),\n fontSize: '0.75rem',\n textTransform: 'uppercase',\n },\n actionButtons: {\n display: \"flex\",\n gap: theme.spacing(1),\n alignItems: \"center\",\n },\n cardHeader: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'flex-start',\n marginBottom: theme.spacing(2),\n },\n cardActions: {\n display: 'flex',\n gap: theme.spacing(1),\n alignItems: 'center',\n },\n}));\n\nexport const ApiProductDetailPage = () => {\n const classes = useStyles();\n const { namespace, name } = useParams<{ namespace: string; name: string }>();\n const navigate = useNavigate();\n const config = useApi(configApiRef);\n const fetchApi = useApi(fetchApiRef);\n const alertApi = useApi(alertApiRef);\n const backendUrl = config.getString(\"backend.baseUrl\");\n\n const [selectedTab, setSelectedTab] = useState(0);\n const [editDialogOpen, setEditDialogOpen] = useState(false);\n const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);\n const [deleting, setDeleting] = useState(false);\n const [refreshKey, setRefreshKey] = useState(0);\n\n const { allowed: canUpdateApiProduct } = useKuadrantPermission(kuadrantApiProductUpdateAllPermission);\n const { allowed: canDeleteApiProduct } = useKuadrantPermission(kuadrantApiProductDeleteAllPermission);\n const canPublishApiProduct = canUpdateApiProduct;\n\n const {\n value: product,\n loading,\n error,\n } = useAsync(async () => {\n const response = await fetchApi.fetch(\n `${backendUrl}/api/kuadrant/apiproducts/${namespace}/${name}`\n );\n\n if (!response.ok) {\n throw new Error(\"Failed to fetch API product\");\n }\n\n return response.json() as Promise<APIProduct>;\n }, [namespace, name, backendUrl, fetchApi, refreshKey]);\n\n const handlePublishToggle = async () => {\n if (!product) return;\n const newStatus = product.spec?.publishStatus === \"Published\" ? \"Draft\" : \"Published\";\n try {\n const response = await fetchApi.fetch(\n `${backendUrl}/api/kuadrant/apiproducts/${namespace}/${name}`,\n {\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ spec: { publishStatus: newStatus } }),\n }\n );\n if (!response.ok) throw new Error(\"Failed to update publish status\");\n alertApi.post({\n message: `API Product ${newStatus === \"Published\" ? \"published\" : \"unpublished\"} successfully`,\n severity: \"success\",\n display: \"transient\",\n });\n setRefreshKey((k) => k + 1);\n } catch (err) {\n alertApi.post({\n message: \"Failed to update publish status\",\n severity: \"error\",\n display: \"transient\",\n });\n }\n };\n\n const handleEditSuccess = () => {\n setEditDialogOpen(false);\n setRefreshKey((k) => k + 1);\n alertApi.post({\n message: \"API Product updated successfully\",\n severity: \"success\",\n display: \"transient\",\n });\n };\n\n const handleDelete = async () => {\n if (!product) return;\n setDeleting(true);\n try {\n const response = await fetchApi.fetch(\n `${backendUrl}/api/kuadrant/apiproducts/${namespace}/${name}`,\n { method: \"DELETE\" }\n );\n if (!response.ok) throw new Error(\"Failed to delete API product\");\n setDeleteDialogOpen(false);\n alertApi.post({\n message: \"API Product deleted successfully\",\n severity: \"success\",\n display: \"transient\",\n });\n navigate(\"/kuadrant/api-products\");\n } catch (err) {\n alertApi.post({\n message: \"Failed to delete API product\",\n severity: \"error\",\n display: \"transient\",\n });\n } finally {\n setDeleting(false);\n }\n };\n\n if (loading) {\n return <Progress />;\n }\n\n if (error || !product) {\n return (\n <ResponseErrorPanel error={error || new Error(\"API product not found\")} />\n );\n }\n\n const isPublished = product.spec?.publishStatus === \"Published\";\n\n // get policy conditions from status\n const planPolicyCondition = product.status?.conditions?.find(\n (c) => c.type === \"PlanPolicyDiscovered\"\n );\n const authPolicyCondition = product.status?.conditions?.find(\n (c) => c.type === \"AuthPolicyDiscovered\"\n );\n const discoveredPlans = product.status?.discoveredPlans || [];\n\n const authSchemes = product.status?.discoveredAuthScheme?.authentication || {};\n const schemeObjects = Object.values(authSchemes);\n const hasOIDCTab = schemeObjects.some((scheme: any) =>\n scheme.hasOwnProperty(\"jwt\"),\n );\n // Extract JWT issuer from the first JWT scheme\n const jwtScheme = schemeObjects.find((scheme: any) => scheme.hasOwnProperty(\"jwt\"));\n const jwtIssuer = (jwtScheme as any)?.jwt?.issuerUrl || \"unknown\";\n const jwtTokenEndpoint = product.status?.oidcDiscovery?.tokenEndpoint || \"unknown\";\n\n // compute tab indices\n const hasDefinitionTab = !!(product.status?.openapi?.raw || product.spec?.documentation?.openAPISpecURL);\n const hasPoliciesTab = !!(planPolicyCondition || authPolicyCondition || discoveredPlans.length > 0);\n\n let nextIndex = 1; // Overview is always at index 0\n const definitionTabIndex = hasDefinitionTab ? nextIndex++ : -1;\n const policiesTabIndex = hasPoliciesTab ? nextIndex++ : -1;\n const oidcTabIndex = hasOIDCTab ? nextIndex++ : -1;\n\n const formatLimits = (limits: any): string => {\n if (!limits) return \"No limits\";\n const parts: string[] = [];\n if (limits.daily) parts.push(`${limits.daily}/day`);\n if (limits.weekly) parts.push(`${limits.weekly}/week`);\n if (limits.monthly) parts.push(`${limits.monthly}/month`);\n if (limits.yearly) parts.push(`${limits.yearly}/year`);\n return parts.length > 0 ? parts.join(\", \") : \"No limits\";\n };\n\n return (\n <Page themeId=\"tool\">\n <Header\n title={product.spec?.displayName || product.metadata.name}\n subtitle={product.spec?.description || \"\"}\n >\n <Box className={classes.actionButtons}>\n <Link to=\"/kuadrant/api-products\">\n <Button startIcon={<ArrowBackIcon />}>Back</Button>\n </Link>\n {canPublishApiProduct && (\n <Button\n variant=\"outlined\"\n color={isPublished ? \"default\" : \"primary\"}\n onClick={handlePublishToggle}\n >\n {isPublished ? \"Unpublish API product\" : \"Publish API product\"}\n </Button>\n )}\n {canUpdateApiProduct && (\n <Tooltip title=\"Edit\">\n <IconButton onClick={() => setEditDialogOpen(true)} size=\"small\">\n <EditIcon />\n </IconButton>\n </Tooltip>\n )}\n {canDeleteApiProduct && (\n <Tooltip title=\"Delete\">\n <IconButton onClick={() => setDeleteDialogOpen(true)} size=\"small\">\n <DeleteIcon />\n </IconButton>\n </Tooltip>\n )}\n </Box>\n </Header>\n <Content>\n <Box mb={2}>\n <Breadcrumbs aria-label=\"breadcrumb\">\n <Link to=\"/kuadrant/api-products\">API Products</Link>\n <Typography>{product.spec?.displayName || product.metadata.name}</Typography>\n </Breadcrumbs>\n </Box>\n\n <Box mb={2}>\n <Tabs\n value={selectedTab}\n onChange={(_, newValue) => setSelectedTab(newValue)}\n indicatorColor=\"primary\"\n textColor=\"primary\"\n >\n <Tab label=\"Overview\" />\n {hasDefinitionTab && <Tab label=\"Definition\" />}\n {hasPoliciesTab && <Tab label=\"Policies\" />}\n {hasOIDCTab && <Tab label=\"OIDC\" />}\n </Tabs>\n </Box>\n\n {selectedTab === 0 && (\n <InfoCard title=\"API Product\">\n <Box className={classes.cardHeader}>\n <Box>\n <Typography variant=\"caption\" className={classes.label}>\n Product Name\n </Typography>\n <Typography variant=\"h6\">\n {product.spec?.displayName || product.metadata.name}\n </Typography>\n </Box>\n <Box className={classes.cardActions}>\n {canPublishApiProduct && (\n <Button\n variant=\"outlined\"\n color={isPublished ? \"default\" : \"primary\"}\n onClick={handlePublishToggle}\n size=\"small\"\n >\n {isPublished ? \"Unpublish API product\" : \"Publish API product\"}\n </Button>\n )}\n {canUpdateApiProduct && (\n <IconButton onClick={() => setEditDialogOpen(true)} size=\"small\">\n <EditIcon fontSize=\"small\" />\n </IconButton>\n )}\n {canDeleteApiProduct && (\n <IconButton onClick={() => setDeleteDialogOpen(true)} size=\"small\">\n <DeleteIcon fontSize=\"small\" />\n </IconButton>\n )}\n </Box>\n </Box>\n\n <ApiProductDetails\n product={product}\n showStatus={true}\n showCatalogLink={true}\n />\n </InfoCard>\n )}\n\n {selectedTab === definitionTabIndex && hasDefinitionTab && (\n <InfoCard title=\"API Definition\">\n {product.status?.openapi?.raw ? (\n <OpenApiDefinitionWidget definition={product.status.openapi.raw} />\n ) : (\n <Typography variant=\"body2\" color=\"textSecondary\">\n {product.spec?.documentation?.openAPISpecURL ? (\n <>\n OpenAPI specification not yet synced. View at:{\" \"}\n <Link to={product.spec.documentation.openAPISpecURL} target=\"_blank\">\n {product.spec.documentation.openAPISpecURL}\n </Link>\n </>\n ) : (\n \"No OpenAPI specification available for this API product.\"\n )}\n </Typography>\n )}\n </InfoCard>\n )}\n\n {selectedTab === policiesTabIndex && hasPoliciesTab && (\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <InfoCard title=\"Discovered Policies\">\n <Grid container spacing={2}>\n <Grid item xs={12} md={6}>\n <Typography variant=\"body2\" color=\"textSecondary\" gutterBottom>\n Plan Policy\n </Typography>\n {planPolicyCondition ? (\n <Box>\n <Chip\n label={planPolicyCondition.status === \"True\" ? \"Found\" : \"Not Found\"}\n size=\"small\"\n style={{\n backgroundColor: planPolicyCondition.status === \"True\" ? \"#4caf50\" : \"#ff9800\",\n color: \"#fff\",\n marginBottom: 8,\n }}\n />\n <Typography variant=\"body2\">\n {planPolicyCondition.message || \"No details available\"}\n </Typography>\n </Box>\n ) : (\n <Typography variant=\"body2\">No plan policy information</Typography>\n )}\n </Grid>\n <Grid item xs={12} md={6}>\n <Typography variant=\"body2\" color=\"textSecondary\" gutterBottom>\n Auth Policy\n </Typography>\n {authPolicyCondition ? (\n <Box>\n <Chip\n label={authPolicyCondition.status === \"True\" ? \"Found\" : \"Not Found\"}\n size=\"small\"\n style={{\n backgroundColor: authPolicyCondition.status === \"True\" ? \"#4caf50\" : \"#ff9800\",\n color: \"#fff\",\n marginBottom: 8,\n }}\n />\n <Typography variant=\"body2\">\n {authPolicyCondition.message || \"No details available\"}\n </Typography>\n </Box>\n ) : (\n <Typography variant=\"body2\">No auth policy information</Typography>\n )}\n </Grid>\n </Grid>\n </InfoCard>\n </Grid>\n\n {discoveredPlans.length > 0 && (\n <Grid item xs={12}>\n <InfoCard title=\"Effective Plan Tiers\">\n <Typography variant=\"body2\" color=\"textSecondary\" paragraph>\n These tiers are computed from all attached PlanPolicies (including gateway-level policies).\n </Typography>\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell>Tier</TableCell>\n <TableCell>Rate Limits</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {discoveredPlans.map((plan) => (\n <TableRow key={plan.tier}>\n <TableCell>\n <Chip label={plan.tier} size=\"small\" color=\"primary\" />\n </TableCell>\n <TableCell>{formatLimits(plan.limits)}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </InfoCard>\n </Grid>\n )}\n </Grid>\n )}\n\n {selectedTab === oidcTabIndex && hasOIDCTab && (\n <OidcProviderCard\n issuerUrl={jwtIssuer}\n tokenEndpoint={jwtTokenEndpoint}\n />\n )}\n </Content>\n\n <EditAPIProductDialog\n open={editDialogOpen}\n onClose={() => setEditDialogOpen(false)}\n onSuccess={handleEditSuccess}\n namespace={namespace || \"\"}\n name={name || \"\"}\n />\n\n <ConfirmDeleteDialog\n open={deleteDialogOpen}\n title=\"Delete API Product\"\n description={`Are you sure you want to delete \"${product.spec?.displayName || product.metadata.name}\"? This action cannot be undone.`}\n severity=\"high\"\n confirmText={product.metadata.name}\n deleting={deleting}\n onConfirm={handleDelete}\n onCancel={() => setDeleteDialogOpen(false)}\n />\n </Page>\n );\n};\n"],"names":["useStyles","makeStyles","theme","label","fontWeight","color","palette","text","secondary","marginBottom","spacing","fontSize","textTransform","actionButtons","display","gap","alignItems","cardHeader","justifyContent","cardActions","ApiProductDetailPage","product","classes","namespace","name","useParams","navigate","useNavigate","config","useApi","configApiRef","fetchApi","fetchApiRef","alertApi","alertApiRef","backendUrl","getString","selectedTab","setSelectedTab","useState","editDialogOpen","setEditDialogOpen","deleteDialogOpen","setDeleteDialogOpen","deleting","setDeleting","refreshKey","setRefreshKey","allowed","canUpdateApiProduct","useKuadrantPermission","kuadrantApiProductUpdateAllPermission","canDeleteApiProduct","kuadrantApiProductDeleteAllPermission","canPublishApiProduct","value","loading","error","useAsync","async","response","fetch","ok","Error","json","handlePublishToggle","newStatus","spec","publishStatus","method","headers","body","JSON","stringify","post","message","severity","k","err","Progress","ResponseErrorPanel","isPublished","planPolicyCondition","status","conditions","find","c","type","authPolicyCondition","discoveredPlans","authSchemes","discoveredAuthScheme","authentication","schemeObjects","Object","values","hasOIDCTab","some","scheme","hasOwnProperty","jwtScheme","jwtIssuer","jwt","issuerUrl","jwtTokenEndpoint","oidcDiscovery","tokenEndpoint","hasDefinitionTab","openapi","raw","documentation","openAPISpecURL","hasPoliciesTab","length","nextIndex","definitionTabIndex","policiesTabIndex","oidcTabIndex","formatLimits","limits","parts","daily","push","weekly","monthly","yearly","join","Page","themeId","Header","title","displayName","metadata","subtitle","description","Box","className","Link","to","Button","startIcon","ArrowBackIcon","variant","onClick","Tooltip","IconButton","size","EditIcon","DeleteIcon","Content","mb","Breadcrumbs","aria-label","Typography","Tabs","onChange","_","newValue","indicatorColor","textColor","Tab","InfoCard","ApiProductDetails","showStatus","showCatalogLink","OpenApiDefinitionWidget","definition","target","Grid","container","item","xs","md","gutterBottom","Chip","style","backgroundColor","paragraph","Table","TableHead","TableRow","TableCell","TableBody","map","plan","tier","OidcProviderCard","EditAPIProductDialog","open","onClose","onSuccess","ConfirmDeleteDialog","confirmText","onConfirm","onCancel"],"sourceRoot":""}
|