diff --git a/cockpit/appstore/build/asset-manifest.json b/cockpit/appstore/build/asset-manifest.json index 5b68682f..d0b9fc30 100644 --- a/cockpit/appstore/build/asset-manifest.json +++ b/cockpit/appstore/build/asset-manifest.json @@ -1,8 +1,8 @@ { "files": { "main.css": "./static/css/main.751babb1.css", - "main.js": "./static/js/main.a27efeeb.js", - "static/js/688.bf21350d.chunk.js": "./static/js/688.bf21350d.chunk.js", + "main.js": "./static/js/main.8d3e5d4b.js", + "static/js/688.694c9b06.chunk.js": "./static/js/688.694c9b06.chunk.js", "static/js/376.0505e571.chunk.js": "./static/js/376.0505e571.chunk.js", "static/js/426.910887ac.chunk.js": "./static/js/426.910887ac.chunk.js", "static/js/912.833f32c9.chunk.js": "./static/js/912.833f32c9.chunk.js", @@ -43,8 +43,8 @@ "static/media/logo-sm.svg": "./static/media/logo-sm.53b8ca70620b0b2968874a3660f195dd.svg", "index.html": "./index.html", "main.751babb1.css.map": "./static/css/main.751babb1.css.map", - "main.a27efeeb.js.map": "./static/js/main.a27efeeb.js.map", - "688.bf21350d.chunk.js.map": "./static/js/688.bf21350d.chunk.js.map", + "main.8d3e5d4b.js.map": "./static/js/main.8d3e5d4b.js.map", + "688.694c9b06.chunk.js.map": "./static/js/688.694c9b06.chunk.js.map", "376.0505e571.chunk.js.map": "./static/js/376.0505e571.chunk.js.map", "426.910887ac.chunk.js.map": "./static/js/426.910887ac.chunk.js.map", "912.833f32c9.chunk.js.map": "./static/js/912.833f32c9.chunk.js.map", @@ -53,6 +53,6 @@ }, "entrypoints": [ "static/css/main.751babb1.css", - "static/js/main.a27efeeb.js" + "static/js/main.8d3e5d4b.js" ] } \ No newline at end of file diff --git a/cockpit/appstore/build/index.html b/cockpit/appstore/build/index.html index 5df7290a..ff41e787 100644 --- a/cockpit/appstore/build/index.html +++ b/cockpit/appstore/build/index.html @@ -1 +1 @@ -App Store
\ No newline at end of file +App Store
\ No newline at end of file diff --git a/cockpit/appstore/build/static/js/688.694c9b06.chunk.js b/cockpit/appstore/build/static/js/688.694c9b06.chunk.js new file mode 100644 index 00000000..70d55760 --- /dev/null +++ b/cockpit/appstore/build/static/js/688.694c9b06.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkappstore=self.webpackChunkappstore||[]).push([[688],{7688:function(e,n,t){t.r(n),t.d(n,{default:function(){return Q}});var l=t(3433),s=t(4165),r=t(5861),a=t(9439),i=t(168),o=t(1413),c=t(3306),u=t(3173),d=t(9909),p=t(954),m=t(7346),h=t.n(m),v=t(2791),x=t(2869),f=t(3340),g=t(3360),j=t(9743),Z=t(2677),y=t(9795),k=t(7689),C=t(5987),b=t(1694),N=t.n(b),w=t(3161),S=t(184),A=["label","type","name","value","readOnly","placeholder","register","errors","className","labelClassName","containerClass","refCallback","children"],F=function(e){var n=e.name,t=e.placeholder,l=e.refCallback,s=e.errors,r=e.register,i=e.className,c=e.value,u=e.readOnly,d=(0,v.useState)(!1),p=(0,a.Z)(d,2),m=p[0],h=p[1];return(0,S.jsx)(S.Fragment,{children:(0,S.jsxs)(w.Z,{className:"mb-0",children:[(0,S.jsx)(y.Z.Control,(0,o.Z)((0,o.Z)({type:m?"text":"password",placeholder:t,name:n,id:n,as:"input",ref:function(e){l&&l(e)},className:i,isInvalid:!(!s||!s[n])},r?r(n):{}),{},{autoComplete:n,defaultValue:c,readOnly:u})),(0,S.jsx)("div",{className:N()("input-group-text","input-group-password",{"show-password":m}),"data-password":m?"true":"false",children:(0,S.jsx)("span",{className:"password-eye",onClick:function(){h(!m)}})})]})})},P=function(e){var n=e.label,t=e.type,l=e.name,s=e.value,r=e.readOnly,a=e.placeholder,i=e.register,c=e.errors,u=e.className,d=e.labelClassName,p=e.containerClass,m=e.refCallback,h=e.children,v=(0,C.Z)(e,A),x="textarea"===t?"textarea":"select"===t?"select":"input";return(0,S.jsx)(S.Fragment,{children:"hidden"===t?(0,S.jsx)("input",(0,o.Z)((0,o.Z)({type:t,name:l},i?i(l):{}),v)):(0,S.jsx)(S.Fragment,{children:"password"===t?(0,S.jsx)(S.Fragment,{children:(0,S.jsxs)(y.Z.Group,{className:p,children:[n?(0,S.jsxs)(S.Fragment,{children:[" ",(0,S.jsx)(y.Z.Label,{className:d,children:n})," ",h," "]}):null,(0,S.jsx)(F,{name:l,placeholder:a,refCallback:m,errors:c,register:i,className:u,value:s,readOnly:r}),c&&c[l]?(0,S.jsx)(y.Z.Control.Feedback,{type:"invalid",className:"d-block",children:c[l].message}):null]})}):(0,S.jsx)(S.Fragment,{children:"select"===t?(0,S.jsx)(S.Fragment,{children:(0,S.jsxs)(y.Z.Group,{className:p,children:[n?(0,S.jsx)(y.Z.Label,{className:d,children:n}):null,(0,S.jsx)(y.Z.Select,(0,o.Z)((0,o.Z)((0,o.Z)({type:t,label:n,name:l,id:l,ref:function(e){m&&m(e)},comp:x,className:u,isInvalid:!(!c||!c[l])},i?i(l):{}),v),{},{children:h})),c&&c[l]?(0,S.jsx)(y.Z.Control.Feedback,{type:"invalid",children:c[l].message}):null]})}):(0,S.jsx)(S.Fragment,{children:"checkbox"===t||"radio"===t?(0,S.jsx)(S.Fragment,{children:(0,S.jsxs)(y.Z.Group,{className:p,children:[(0,S.jsx)(y.Z.Check,(0,o.Z)((0,o.Z)({type:t,label:n,name:l,id:l,ref:function(e){m&&m(e)},className:u,isInvalid:!(!c||!c[l])},i?i(l):{}),v)),c&&c[l]?(0,S.jsx)(y.Z.Control.Feedback,{type:"invalid",children:c[l].message}):null]})}):(0,S.jsxs)(y.Z.Group,{className:p,children:[n?(0,S.jsx)(y.Z.Label,{className:d,children:n}):null,(0,S.jsx)(y.Z.Control,(0,o.Z)((0,o.Z)((0,o.Z)({type:t,placeholder:a,value:s,name:l,id:l,as:x,ref:function(e){m&&m(e)},className:u,isInvalid:!(!c||!c[l])},i?i(l):{}),v),{},{autoComplete:l,children:h||null})),c&&c[l]?(0,S.jsx)(y.Z.Control.Feedback,{type:"invalid",children:c[l].message}):null]})})})})})},G=t(4942),E=function(e){var n=e.children||null,t=e.tag||"div",l=e.color||"secondary",s=e.size||"";return(0,S.jsx)(t,{role:"status",className:N()({"spinner-border":"bordered"===e.type,"spinner-grow":"grow"===e.type},["text-".concat(l)],(0,G.Z)({},"avatar-".concat(s),s),e.className),children:n})};E.defaultProps={tag:"div",type:"bordered"};var I,L=E,O=t(3144),M=t(5671),_=t(1243);function R(){return z.apply(this,arguments)}function z(){return(z=(0,r.Z)((0,s.Z)().mark((function e(){var n,t,l,r;return(0,s.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(I){e.next=10;break}return e.next=3,fetch("../myapps/config.json");case 3:return n=e.sent,e.next=6,n.json();case 6:t=e.sent,l=t.APPMANAGE.APPMANAGE_USERNAME,r=t.APPMANAGE.APPMANAGE_PASSWORD,I=btoa(l+":"+r);case 10:return e.abrupt("return",I);case 11:case"end":return e.stop()}}),e)})))).apply(this,arguments)}_.Z.defaults.headers.post["Content-Type"]="application/json",_.Z.defaults.headers.get["Content-Type"]="application/json",_.Z.defaults.headers.common["Cache-Control"]="no-cache",_.Z.defaults.headers.common.Pragma="no-cache",_.Z.defaults.headers.common.Expires="0",_.Z.interceptors.response.use((function(e){return e}),(function(e){var n;if(e&&e.response&&404===e.response.status)k.Fg;else{if(!e||!e.response||500!==e.response.status)return n=e.response&&e.response.data?e.response.data.message:e.message||e,Promise.reject(n);k.Fg}}));var B,H=(0,O.Z)((function e(){(0,M.Z)(this,e),this.get=function(){var e=(0,r.Z)((0,s.Z)().mark((function e(n,t){var l,r;return(0,s.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,R();case 2:return e.t0=e.sent,_.Z.defaults.headers.common.Authorization="Basic "+e.t0,t?(r=t?Object.keys(t).map((function(e){return e+"="+t[e]})).join("&"):"",l=_.Z.get("".concat(n,"?").concat(r),t)):l=_.Z.get("".concat(n),t),e.abrupt("return",l);case 6:case"end":return e.stop()}}),e)})));return function(n,t){return e.apply(this,arguments)}}(),this.create=function(){var e=(0,r.Z)((0,s.Z)().mark((function e(n,t){return(0,s.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,R();case 2:return e.t0=e.sent,_.Z.defaults.headers.common.Authorization="Basic "+e.t0,e.abrupt("return",_.Z.post(n,t));case 5:case"end":return e.stop()}}),e)})));return function(n,t){return e.apply(this,arguments)}}()})),$=new H;var D=h().gettext,T=h().language,U=v.forwardRef((function(e,n){return(0,S.jsx)(d.Z,(0,o.Z)({elevation:6,ref:n,variant:"filled"},e))})),V=(0,c.Ps)(B||(B=(0,i.Z)(['\n query($locale: String,$skip: Int){\n productCollection(locale:$locale,where:{appStore:true},limit: 100, skip: $skip) {\n total\n items {\n sys { \n id \n }\n key\n hot\n trademark\n summary\n overview\n websiteurl\n description\n screenshots\n distribution\n vcpu\n memory\n storage\n logo {\n imageurl\n }\n catalogCollection(limit:15) {\n items {\n key\n title\n catalogCollection(limit:5){\n items{\n key\n title\n }\n }\n }\n }\n }\n }\n catalog(id: "2Yp0TY3kBHgG6VDjsHZNpK",locale:$locale) {\n linkedFrom(allowedLocales:["en-US"]) {\n catalogCollection(limit:20) {\n items {\n key\n position\n title\n linkedFrom(allowedLocales:["en-US"]) {\n catalogCollection(limit:20) {\n items {\n key\n title\n position\n }\n }\n }\n }\n }\n }\n }\n }\n']))),q=function(e){var n,t=e.product,l=e.showFlag,i=e.onClose,o=(0,v.useState)(0),c=(0,a.Z)(o,2),u=c[0],d=c[1],m=(0,k.s0)(),j=(0,v.useState)(!0),Z=(0,a.Z)(j,2),y=Z[0],C=Z[1],b=(0,v.useState)(""),N=(0,a.Z)(b,2),w=N[0],A=N[1],F=(0,v.useState)(!1),G=(0,a.Z)(F,2),E=G[0],I=G[1],L=(0,v.useState)(""),O=(0,a.Z)(L,2),M=O[0],_=O[1],R=(0,v.useState)(!1),z=(0,a.Z)(R,2),B=z[0],H=z[1];function T(){return(T=(0,r.Z)((0,s.Z)().mark((function e(){var n;return(0,s.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(y){e.next=20;break}if(!(!w||w.length<2||w.length>20)){e.next=6;break}I(!0),_(D("Please enter a custom application name between 2 and 20 characters.")),e.next=19;break;case 6:return e.prev=6,H(!0),e.next=10,l={app_name:t.key,app_version:Y,customer_app_name:w},$.get("".concat("/AppManage/AppInstall"),l);case 10:(n=e.sent).data.Error?(I(!0),_(n.data.Error.Message),H(!1)):(I(!1),_(""),h().file("/etc/hostname").watch((function(e){console.log(e)})),h().jump("/myapps"),i()),e.next=19;break;case 14:e.prev=14,e.t0=e.catch(6),I(!1),_(""),m("/error-500");case 19:return e.abrupt("return");case 20:C(!y);case 21:case"end":return e.stop()}var l}),e,null,[[6,14]])})))).apply(this,arguments)}var V=((null===(n=t.distribution)||void 0===n?void 0:n.filter((function(e){return"Community"===e.key})))||[]).map((function(e){return e.value})),q=V&&1===V.length?V.toString().split(","):V,Q=(0,v.useState)(q[0]),W=(0,a.Z)(Q,2),Y=W[0],K=W[1],J=function(e,n){"clickaway"!==n&&(I(!1),_(""))};return(0,S.jsxs)(S.Fragment,{children:[(0,S.jsxs)(x.Z,{show:l,onHide:i,size:"lg",scrollable:"true",backdrop:"static",children:[(0,S.jsx)(x.Z.Header,{onHide:i,closeButton:!0,children:(0,S.jsxs)("div",{style:{padding:"10px"},children:[(0,S.jsx)("div",{className:"appstore-item-content-icon col-same-height",children:(0,S.jsx)("img",{src:t.logo.imageurl,alt:"",className:"app-icon"})}),(0,S.jsxs)("div",{className:"col-same-height",children:[(0,S.jsx)("h4",{className:"appstore-item-content-title",style:{marginTop:"5px"},children:t.trademark}),(0,S.jsx)("div",{children:(0,S.jsxs)("a",{rel:"noreferrer",href:"https://support.websoft9.com/docs/"+t.key,target:"_blank",style:{color:"#2196f3"},children:[t.trademark," ",D("developers")]})}),(0,S.jsxs)("div",{style:{display:"flex",alignItems:"center"},children:[(0,S.jsxs)("span",{style:{marginRight:"5px"},children:[D("Version")," : "]})," ",V]}),(0,S.jsx)("div",{style:{display:"flex",alignItems:"center"},children:(0,S.jsxs)("span",{style:{marginRight:"5px"},children:[D("Requires at least")," : ",t.vcpu," vCPU, ",t.memory," GB memory, ",t.storage," GB storage"]})})]})]})}),(0,S.jsxs)(x.Z.Body,{children:[(0,S.jsxs)("div",{style:{display:y?"block":"none"},children:[(0,S.jsx)(f.Z,{activeIndex:u,onSelect:function(e,n){d(e)},style:{width:"80%",margin:"0 auto"},children:(t.screenshots||[]).map((function(e){return(0,S.jsx)(f.Z.Item,{children:(0,S.jsx)("img",{className:"d-block",src:null===e||void 0===e?void 0:e.value,alt:null===e||void 0===e?void 0:e.key,width:"100%",height:"300px"})},null===e||void 0===e?void 0:e.id)}))}),(0,S.jsxs)("div",{style:{padding:"10px"},children:[(0,S.jsx)("h4",{children:D("Overview")}),t.overview]}),(0,S.jsxs)("div",{style:{padding:"10px"},children:[(0,S.jsx)("h4",{children:D("Description")}),t.description]})]}),(0,S.jsx)("div",{style:{display:y?"none":"block"},children:(0,S.jsxs)("div",{style:{display:"flex",flexDirection:"column"},children:[(0,S.jsxs)("div",{children:[(0,S.jsxs)("span",{style:{marginRight:"5px"},children:[D("Version")," :"]}),q&&(0,S.jsx)(P,{name:"select",type:"select",className:"form-select",onChange:function(e){return n=e.target.value,void K(n);var n},children:(q||[]).map((function(e,n){return(0,S.jsx)("option",{value:e,children:e},e+n)}))},"select")]}),(0,S.jsxs)("div",{style:{marginTop:"5px"},children:[(0,S.jsxs)("span",{style:{marginRight:"5px"},children:[D("Name")," :"]}),(0,S.jsx)(P,{type:"text",value:w,name:"app_Name",placeholder:D("Only letters and numbers from 2 to 20 are allowed. No special characters."),onChange:function(e){!function(e){if(A(e),e){var n=e.replace(/[^a-z0-9]/gi,"").toLowerCase();A(n),I(!1),_("")}else I(!0),_(D("Please enter a custom application name between 2 and 20 characters."))}(e.target.value)}})]})]})})]}),(0,S.jsxs)(x.Z.Footer,{children:[(0,S.jsx)(g.Z,{variant:"light",onClick:i,children:D("Close")})," ",(0,S.jsx)(g.Z,{disabled:B,variant:"primary",onClick:function(){return T.apply(this,arguments)},children:D("Install")})]})]}),E&&(0,S.jsx)(p.Z,{open:E,autoHideDuration:5e3,onClose:J,anchorOrigin:{vertical:"top",horizontal:"center"},children:(0,S.jsx)(U,{onClose:J,severity:"error",sx:{width:"100%"},children:M})})]})},Q=function(){var e,n=(0,v.useState)(!1),t=(0,a.Z)(n,2),s=t[0],r=t[1],i=(0,v.useState)(null),c=(0,a.Z)(i,2),d=c[0],p=c[1],m=(0,v.useState)(null),h=(0,a.Z)(m,2),x=h[0],f=h[1],g=(0,v.useState)(null),k=(0,a.Z)(g,2),C=k[0],b=k[1],N=(0,v.useState)(!0),w=(0,a.Z)(N,2),A=w[0],F=w[1],G=(0,v.useState)(""),E=(0,a.Z)(G,2),I=E[0],O=E[1],M=(0,u.a)(V,{variables:{locale:"zh_CN"===T?"zh-CN":"en-US"}}),_=M.loading,R=M.error,z=M.data,B=M.fetchMore,H=0,$=null===z||void 0===z||null===(e=z.catalog.linkedFrom.catalogCollection.items)||void 0===e?void 0:e.sort((function(e,n){return null===e.position&&null===n.position?0:null===e.position?1:null===n.position?-1:e.position-n.position})),U=(0,v.useState)(null),Q=(0,a.Z)(U,2),W=Q[0],Y=Q[1],K=(0,v.useState)(null),J=(0,a.Z)(K,2),X=J[0],ee=J[1];if((0,v.useEffect)((function(){if(z){var e,n;H+=z.productCollection.items.length,z.productCollection.items.length {\n const [showPassword, setShowPassword] = useState(false);\n\n return (\n <>\n \n {\n if (refCallback) refCallback(r);\n }}\n className={className}\n isInvalid={errors && errors[name] ? true : false}\n {...(register ? register(name) : {})}\n autoComplete={name}\n defaultValue={value}\n readOnly={readOnly}\n />\n \n {\n setShowPassword(!showPassword);\n }}>\n \n \n \n );\n};\n\ntype FormInputProps = {\n label?: string,\n type?: string,\n name?: string,\n value?: string,\n placeholder?: string,\n register?: any,\n errors?: any,\n className?: string,\n labelClassName?: string,\n containerClass?: string,\n refCallback?: any,\n children?: any,\n};\n\nconst FormInput = ({\n label,\n type,\n name,\n value,\n readOnly,\n placeholder,\n register,\n errors,\n className,\n labelClassName,\n containerClass,\n refCallback,\n children,\n ...otherProps\n}: FormInputProps): React$Element => {\n // handle input type\n const comp = type === 'textarea' ? 'textarea' : type === 'select' ? 'select' : 'input';\n\n return (\n <>\n {type === 'hidden' ? (\n \n ) : (\n <>\n {type === 'password' ? (\n <>\n \n {label ? (\n <>\n {' '}\n {label} {children}{' '}\n \n ) : null}\n \n\n {errors && errors[name] ? (\n \n {errors[name]['message']}\n \n ) : null}\n \n \n ) : (\n <>\n {type === 'select' ? (\n <>\n \n {label ? {label} : null}\n\n {\n if (refCallback) refCallback(r);\n }}\n comp={comp}\n className={className}\n isInvalid={errors && errors[name] ? true : false}\n {...(register ? register(name) : {})}\n {...otherProps}>\n {children}\n \n\n {errors && errors[name] ? (\n \n {errors[name]['message']}\n \n ) : null}\n \n \n ) : (\n <>\n {type === 'checkbox' || type === 'radio' ? (\n <>\n \n {\n if (refCallback) refCallback(r);\n }}\n className={className}\n isInvalid={errors && errors[name] ? true : false}\n {...(register ? register(name) : {})}\n {...otherProps}\n />\n\n {errors && errors[name] ? (\n \n {errors[name]['message']}\n \n ) : null}\n \n \n ) : (\n \n {label ? {label} : null}\n\n {\n if (refCallback) refCallback(r);\n }}\n className={className}\n isInvalid={errors && errors[name] ? true : false}\n {...(register ? register(name) : {})}\n {...otherProps}\n autoComplete={name}>\n {children ? children : null}\n \n\n {errors && errors[name] ? (\n \n {errors[name]['message']}\n \n ) : null}\n \n )}\n \n )}\n \n )}\n \n )}\n \n );\n};\n\nexport default FormInput;\n","// @flow\nimport React from 'react';\nimport classNames from 'classnames';\n\ntype SpinnerProps = {\n tag?: string,\n className?: string,\n size?: 'lg' | 'md' | 'sm',\n type?: 'bordered' | 'grow',\n color?: string,\n children?: any,\n};\n\n/**\n * Spinner\n */\nconst Spinner = (props: SpinnerProps): React$Element => {\n const children = props.children || null;\n const Tag = props.tag || 'div';\n const color = props.color || 'secondary';\n const size = props.size || '';\n\n return (\n \n {children}\n \n );\n};\n\nSpinner.defaultProps = {\n tag: 'div',\n type: 'bordered',\n};\n\nexport default Spinner;\n","import axios from 'axios';\nimport { Navigate } from \"react-router-dom\";\n\n// 定义一个全局变量来存储 config.json 的内容\nlet credentials;\n\nasync function getCredentials() {\n // 如果 credentials 不存在,就从 config.json 中获取它\n if (!credentials) {\n const response = await fetch('../myapps/config.json');\n const data = await response.json();\n const userName = data.APPMANAGE.APPMANAGE_USERNAME;\n const uerPassword = data.APPMANAGE.APPMANAGE_PASSWORD;\n credentials = btoa(userName + \":\" + uerPassword);\n }\n // 返回 credentials\n return credentials;\n}\n\n// 设置 axios 的默认配置\naxios.defaults.headers.post['Content-Type'] = 'application/json';\naxios.defaults.headers.get['Content-Type'] = 'application/json';\naxios.defaults.headers.common['Cache-Control'] = 'no-cache';\naxios.defaults.headers.common['Pragma'] = 'no-cache';\naxios.defaults.headers.common['Expires'] = '0';\n\n// 拦截响应以捕获错误\naxios.interceptors.response.use(\n (response) => {\n return response;\n },\n (error) => {\n // 任何不在 2xx 范围内的状态码都会触发这个函数\n let message;\n\n if (error && error.response && error.response.status === 404) {\n \n } else if (error && error.response && error.response.status === 500) {\n \n } else {\n message = error.response && error.response.data ? error.response.data['message'] : error.message || error;\n return Promise.reject(message);\n }\n }\n);\n\nclass APICore {\n /**\n * Fetches data from given url\n */\n get = async (url, params) => {\n // 等待获取凭证并设置授权头\n axios.defaults.headers.common['Authorization'] = 'Basic ' + await getCredentials();\n let response;\n if (params) {\n var queryString = params\n ? Object.keys(params)\n .map((key) => key + '=' + params[key])\n .join('&')\n : '';\n response = axios.get(`${url}?${queryString}`, params);\n } else {\n response = axios.get(`${url}`, params);\n }\n return response;\n };\n\n /**\n * post given data to url\n */\n create = async (url, data) => {\n // 等待获取凭证并设置授权头\n axios.defaults.headers.common['Authorization'] = 'Basic ' + await getCredentials();\n return axios.post(url, data);\n };\n}\n\nexport { APICore };\n","import { APICore } from './apiCore';\n\nconst api = new APICore();\n\n//App 安装\nfunction AppInstall(params: any): Promise {\n const baseUrl = '/AppManage/AppInstall';\n return api.get(`${baseUrl}`, params);\n}\n\nexport { AppInstall };\n\n","// @flow\nimport { gql, useQuery } from '@apollo/client';\nimport MuiAlert from '@mui/material/Alert';\nimport Snackbar from '@mui/material/Snackbar';\nimport cockpit from 'cockpit';\nimport React, { useEffect, useState } from 'react';\nimport { Button, Carousel, Col, Form, Modal, Row } from 'react-bootstrap';\nimport { useNavigate } from \"react-router-dom\";\nimport FormInput from '../components/FormInput';\nimport Spinner from '../components/Spinner';\nimport { AppInstall } from '../helpers';\n\nconst _ = cockpit.gettext;\nconst language = cockpit.language;//获取cockpit的当前语言环境\n\nconst Alert = React.forwardRef(function Alert(props, ref) {\n return ;\n});\n\nconst getContentfulData = gql`\n query($locale: String,$skip: Int){\n productCollection(locale:$locale,where:{appStore:true},limit: 100, skip: $skip) {\n total\n items {\n sys { \n id \n }\n key\n hot\n trademark\n summary\n overview\n websiteurl\n description\n screenshots\n distribution\n vcpu\n memory\n storage\n logo {\n imageurl\n }\n catalogCollection(limit:15) {\n items {\n key\n title\n catalogCollection(limit:5){\n items{\n key\n title\n }\n }\n }\n }\n }\n }\n catalog(id: \"2Yp0TY3kBHgG6VDjsHZNpK\",locale:$locale) {\n linkedFrom(allowedLocales:[\"en-US\"]) {\n catalogCollection(limit:20) {\n items {\n key\n position\n title\n linkedFrom(allowedLocales:[\"en-US\"]) {\n catalogCollection(limit:20) {\n items {\n key\n title\n position\n }\n }\n }\n }\n }\n }\n }\n }\n`;\n\n//应用详情弹窗\nconst AppDetailModal = ({ product, showFlag, onClose }) => {\n const [index, setIndex] = useState(0); //用户图片浏览\n const navigate = useNavigate(); //用于页面跳转\n const [visible, setVisible] = useState(true); //用于显示安装选项:版本和应用名称\n const [customName, setCustomName] = useState(\"\"); //用户存储用户输入的应用名称\n const [showAlert, setShowAlert] = useState(false); //用于是否显示错误提示\n const [alertMessage, setAlertMessage] = useState(\"\");//用于显示错误提示消息\n const [disable, setDisable] = useState(false);//用于按钮禁用\n\n //用户单击“安装”按钮\n async function handleInstallClick() {\n if (!visible) {\n if (!customName || customName.length < 2 || customName.length > 20) { //判断用户是否输入应用名称\n setShowAlert(true);\n setAlertMessage(_(\"Please enter a custom application name between 2 and 20 characters.\"))\n }\n else {\n //调用应用安装接口\n try {\n setDisable(true);\n const response = await AppInstall({ app_name: product.key, app_version: selectedVersion, customer_app_name: customName })\n if (response.data.Error) {\n setShowAlert(true);\n setAlertMessage(response.data.Error.Message);\n setDisable(false);\n }\n else {\n setShowAlert(false);\n setAlertMessage(\"\");\n cockpit.file('/etc/hostname').watch(content => {\n console.log(content);\n });\n cockpit.jump(\"/myapps\");\n onClose();\n }\n }\n catch (error) {\n setShowAlert(false);\n setAlertMessage(\"\");\n navigate(\"/error-500\");\n }\n }\n return;\n }\n setVisible(!visible);\n }\n\n const handleSelect = (selectedIndex, e) => {\n setIndex(selectedIndex);\n };\n\n let versions = (product.distribution?.filter(item => item.key === \"Community\") || []).map(version => { return version.value });//获取应用的版本\n\n let versionList = (versions && versions.length === 1) ? versions.toString().split(\",\") : versions;\n\n const [selectedVersion, setselectedVersion] = useState(versionList[0]); //存储用户选择的安装版本\n\n const changeVersion = (version) => {\n setselectedVersion(version);\n };\n\n const handleInputChange = (inputValue) => {\n setCustomName(inputValue);\n if (!inputValue) { //验证输入应用名称\n setShowAlert(true);\n setAlertMessage(_(\"Please enter a custom application name between 2 and 20 characters.\"))\n }\n else {\n const newValue = inputValue.replace(/[^a-z0-9]/gi, '').toLowerCase(); //先替换输入值\n setCustomName(newValue);\n setShowAlert(false);\n setAlertMessage(\"\");\n }\n }\n\n const handleClose = (event, reason) => {\n if (reason === 'clickaway') {\n return;\n }\n setShowAlert(false);\n setAlertMessage(\"\");\n };\n\n return (\n <>\n \n \n
\n
\n \n
\n
\n

\n {product.trademark}\n

\n \n
\n {_(\"Version\")} : {versions}\n
\n
\n {_(\"Requires at least\")} : {product.vcpu} vCPU, {product.memory} GB memory, {product.storage} GB storage\n
\n
\n
\n
\n \n
\n \n {\n (product.screenshots || []).map((item) => {\n return (\n \n \n \n );\n })\n }\n \n
\n

{_(\"Overview\")}

\n {product.overview}\n
\n
\n

{_(\"Description\")}

\n {product.description}\n
\n
\n
\n
\n
\n {_(\"Version\")} :\n {\n versionList && changeVersion(e.target.value)}\n key=\"select\">\n {\n (versionList || []).map((version, i) => {\n return \n })\n }\n \n }\n
\n
\n {_(\"Name\")} :\n { handleInputChange(e.target.value) }} />\n
\n
\n
\n
\n \n {' '}\n \n \n
\n {\n showAlert &&\n \n \n {alertMessage}\n \n \n }\n \n );\n}\n\nconst AppStore = (): React$Element => {\n const [showModal, setShowModal] = useState(false); //用于显示弹窗的标识\n const [selectedProduct, setSelectedProduct] = useState(null); //用于存储被选中的产品(点击应用详情时使用)\n const [subCatalogs, setSubCatalogs] = useState(null); //用于存储二级目录\n const [allMainCatalogApps, setAllMainCatalogApps] = useState(null); //用于存储某个一级子目录下的所有应用\n const [isAllSelected, setIsAllSelected] = useState(true);\n const [searchValue, setSearchValue] = useState(\"\");\n\n const { loading: dataLoading, error: dataError, data: allData, fetchMore } = useQuery(getContentfulData, { variables: { locale: language === \"zh_CN\" ? \"zh-CN\" : \"en-US\" } });\n\n // 定义一个变量来存储已经查询过的数据的数量\n let skipCount = 0;\n\n // 定义一个函数来使用fetchMore方法获取更多的产品\n const fetchMoreProducts = () => {\n // 检查是否还有更多的产品可以获取\n if (allData.productCollection.items.length < allData.productCollection.total) {\n // 使用fetchMore方法,把已经查询过的数据的数量作为skip变量传入\n fetchMore({\n variables: {\n skip: skipCount,\n },\n // 使用新的结果更新之前的结果,通过连接items数组\n updateQuery: (prevResult, { fetchMoreResult }) => {\n return Object.assign({}, prevResult, {\n productCollection: {\n ...fetchMoreResult.productCollection,\n items: [\n ...prevResult.productCollection.items,\n ...fetchMoreResult.productCollection.items,\n ],\n },\n });\n },\n });\n }\n };\n\n //主目录数据\n const mainCatalogs = allData?.catalog.linkedFrom.catalogCollection.items?.sort(function (a, b) {\n if (a.position === null && b.position === null) {\n return 0;\n } else if (a.position === null) {\n return 1;\n } else if (b.position === null) {\n return -1;\n } else {\n return a.position - b.position;\n }\n });\n\n const [apps, setApps] = useState(null); //用于存储通过目录筛选出来的数据\n const [appList, setAppList] = useState(null); //用于存储通过目录筛选出来的数据\n\n useEffect(() => {\n // 检查是否有任何数据\n if (allData) {\n // 更新已经查询过的数据的数量,加上当前返回的数据的数量\n skipCount += allData.productCollection.items.length;\n // 调用fetchMoreProducts函数来获取更多的产品,如果有的话\n fetchMoreProducts();\n //对产品根据hot排序:降序\n const data = allData.productCollection?.items?.sort(function (a, b) {\n if (a.hot === null && b.hot === null) {\n return 0;\n } else if (a.hot === null) {\n return 1;\n } else if (b.hot === null) {\n return -1;\n } else {\n return b.hot - a.hot;\n }\n });\n setAppList(data);\n setApps(data);\n }\n }, [allData])\n\n // if (dataLoading) return

Loading...

;\n\n if (dataLoading) return \n if (dataError) return

Error : ${dataError.message}

;\n\n //用于显示应用详情的弹窗\n const handleClick = (product) => {\n setSelectedProduct(product);\n setShowModal(true);\n };\n\n //用于关闭应用详情的弹窗\n const handleClose = () => {\n setShowModal(false);\n setSelectedProduct(null);\n };\n\n //当主目录改变时\n const changeMainCatalog = (selectedMainCatalog) => {\n // 查询主目录下的二级目录\n let updatedData = null;\n // filter\n updatedData =\n selectedMainCatalog === 'All'\n ? []\n : mainCatalogs.filter(c => c.key === selectedMainCatalog)?.[0]?.linkedFrom?.catalogCollection?.items;\n const data = updatedData.sort(function (a, b) {\n if (a.position === null && b.position === null) {\n return 0;\n } else if (a.position === null) {\n return 1;\n } else if (b.position === null) {\n return -1;\n } else {\n return a.position - b.position;\n }\n });\n setSubCatalogs(data);\n\n //根据主目录过滤app数据\n let subCatalogApps = null;\n let mainCatalogAllApps = null;\n mainCatalogAllApps = apps.filter(app => app?.catalogCollection?.items.some(sub => sub?.catalogCollection?.items.some(subsub => subsub.key === selectedMainCatalog)));\n subCatalogApps =\n selectedMainCatalog === \"All\"\n ? apps\n : mainCatalogAllApps;\n setAppList(subCatalogApps);\n setAllMainCatalogApps(mainCatalogAllApps);\n setIsAllSelected(false);\n setSearchValue(\"\");\n };\n\n //当子目录改变时,过滤应用数据\n const changeSubCatalog = (selectedSubCatalog) => {\n let updatedData = null;\n updatedData =\n selectedSubCatalog === \"All\"\n ? allMainCatalogApps\n : apps.filter(app => app?.catalogCollection?.items.some(c => c.key === selectedSubCatalog));\n setAppList(updatedData);\n setSearchValue(\"\");\n };\n\n //当搜索框的内容发生改变时,进行app的过滤搜索\n const handleInputChange = (searchString) => {\n setSearchValue(searchString);\n let updatedData = null;\n updatedData =\n searchString === \"\"\n ? apps\n : apps.filter(app => { return app.trademark.toLowerCase().includes(searchString) || app.key.toLowerCase().includes(searchString) || app.summary.toLowerCase().includes(searchString) });\n\n setAppList(updatedData);\n setIsAllSelected(true);\n setSubCatalogs(null);\n }\n\n return (\n <>\n \n \n \n \n changeMainCatalog(e.target.value)}>\n \n {\n (mainCatalogs || []).map((item, i) => {\n return (\n \n );\n })\n }\n \n \n \n changeSubCatalog(e.target.value)}>\n \n {\n (subCatalogs || []).map((item, i) => {\n return (\n \n );\n })\n }\n \n \n \n \n \n \n handleInputChange(e.target.value)} />\n \n \n \n \n {(appList || []).map((app, i) => {\n return (\n \n
{ handleClick(app) }}>\n
\n \n
\n
\n

\n {app?.trademark}\n

\n
\n {app?.summary}\n
\n
\n
\n \n );\n })}\n
\n {showModal && }\n \n );\n};\n\nexport default AppStore;\n"],"names":["PasswordInput","_ref","name","placeholder","refCallback","errors","register","className","value","readOnly","_useState","useState","_useState2","_slicedToArray","showPassword","setShowPassword","_jsx","_Fragment","children","_jsxs","InputGroup","Form","Control","_objectSpread","type","id","as","ref","r","isInvalid","autoComplete","defaultValue","classNames","onClick","_ref2","label","labelClassName","containerClass","otherProps","_objectWithoutProperties","_excluded","comp","Group","Label","Feedback","Select","Check","Spinner","props","Tag","tag","color","size","role","concat","_defineProperty","defaultProps","credentials","getCredentials","_getCredentials","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee3","response","data","userName","uerPassword","wrap","_context3","prev","next","fetch","sent","json","APPMANAGE","APPMANAGE_USERNAME","APPMANAGE_PASSWORD","btoa","abrupt","stop","axios","defaults","headers","post","get","common","interceptors","use","error","message","status","Navigate","Promise","reject","APICore","_createClass","_classCallCheck","_callee","url","params","queryString","_context","t0","Object","keys","map","key","join","_x","_x2","create","_callee2","_context2","_x3","_x4","api","_","cockpit","language","Alert","React","MuiAlert","elevation","variant","getContentfulData","gql","_templateObject","_taggedTemplateLiteral","AppDetailModal","_product$distribution","product","showFlag","onClose","index","setIndex","navigate","useNavigate","_useState3","_useState4","visible","setVisible","_useState5","_useState6","customName","setCustomName","_useState7","_useState8","showAlert","setShowAlert","_useState9","_useState10","alertMessage","setAlertMessage","_useState11","_useState12","disable","setDisable","_handleInstallClick","length","app_name","app_version","selectedVersion","customer_app_name","Error","Message","watch","content","console","log","versions","distribution","filter","item","version","versionList","toString","split","_useState13","_useState14","setselectedVersion","handleClose","event","reason","Modal","show","onHide","scrollable","backdrop","Header","closeButton","style","padding","src","logo","imageurl","alt","marginTop","trademark","rel","href","target","display","alignItems","marginRight","vcpu","memory","storage","Body","Carousel","activeIndex","onSelect","selectedIndex","e","width","margin","screenshots","Item","height","overview","description","flexDirection","FormInput","onChange","i","inputValue","newValue","replace","toLowerCase","handleInputChange","Footer","Button","disabled","Snackbar","open","autoHideDuration","anchorOrigin","vertical","horizontal","severity","sx","_allData$catalog$link","_useState15","_useState16","showModal","setShowModal","_useState17","_useState18","selectedProduct","setSelectedProduct","_useState19","_useState20","subCatalogs","setSubCatalogs","_useState21","_useState22","allMainCatalogApps","setAllMainCatalogApps","_useState23","_useState24","isAllSelected","setIsAllSelected","_useState25","_useState26","searchValue","setSearchValue","_useQuery","useQuery","variables","locale","dataLoading","loading","dataError","allData","fetchMore","skipCount","mainCatalogs","catalog","linkedFrom","catalogCollection","items","sort","a","b","position","_useState27","_useState28","apps","setApps","_useState29","_useState30","appList","setAppList","useEffect","_allData$productColle","_allData$productColle2","productCollection","total","skip","updateQuery","prevResult","fetchMoreResult","assign","_toConsumableArray","hot","Row","Col","sm","selectedMainCatalog","_mainCatalogs$filter","_mainCatalogs$filter$","_mainCatalogs$filter$2","_mainCatalogs$filter$3","mainCatalogAllApps","c","app","_app$catalogCollectio","some","sub","_sub$catalogCollectio","subsub","changeMainCatalog","selected","title","selectedSubCatalog","updatedData","_app$catalogCollectio2","changeSubCatalog","xs","searchString","includes","summary","xxl","md","textAlign"],"sourceRoot":""} \ No newline at end of file diff --git a/cockpit/appstore/build/static/js/688.bf21350d.chunk.js b/cockpit/appstore/build/static/js/688.bf21350d.chunk.js deleted file mode 100644 index c4444b87..00000000 --- a/cockpit/appstore/build/static/js/688.bf21350d.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkappstore=self.webpackChunkappstore||[]).push([[688],{7688:function(e,n,t){t.r(n),t.d(n,{default:function(){return Q}});var l=t(3433),s=t(4165),a=t(5861),r=t(9439),i=t(168),o=t(1413),c=t(3306),d=t(3173),u=t(9909),p=t(954),m=t(7346),h=t.n(m),v=t(2791),x=t(2869),f=t(3340),g=t(3360),j=t(9743),Z=t(2677),y=t(9795),k=t(7689),C=t(5987),b=t(1694),N=t.n(b),w=t(3161),S=t(184),A=["label","type","name","value","readOnly","placeholder","register","errors","className","labelClassName","containerClass","refCallback","children"],F=function(e){var n=e.name,t=e.placeholder,l=e.refCallback,s=e.errors,a=e.register,i=e.className,c=e.value,d=e.readOnly,u=(0,v.useState)(!1),p=(0,r.Z)(u,2),m=p[0],h=p[1];return(0,S.jsx)(S.Fragment,{children:(0,S.jsxs)(w.Z,{className:"mb-0",children:[(0,S.jsx)(y.Z.Control,(0,o.Z)((0,o.Z)({type:m?"text":"password",placeholder:t,name:n,id:n,as:"input",ref:function(e){l&&l(e)},className:i,isInvalid:!(!s||!s[n])},a?a(n):{}),{},{autoComplete:n,defaultValue:c,readOnly:d})),(0,S.jsx)("div",{className:N()("input-group-text","input-group-password",{"show-password":m}),"data-password":m?"true":"false",children:(0,S.jsx)("span",{className:"password-eye",onClick:function(){h(!m)}})})]})})},P=function(e){var n=e.label,t=e.type,l=e.name,s=e.value,a=e.readOnly,r=e.placeholder,i=e.register,c=e.errors,d=e.className,u=e.labelClassName,p=e.containerClass,m=e.refCallback,h=e.children,v=(0,C.Z)(e,A),x="textarea"===t?"textarea":"select"===t?"select":"input";return(0,S.jsx)(S.Fragment,{children:"hidden"===t?(0,S.jsx)("input",(0,o.Z)((0,o.Z)({type:t,name:l},i?i(l):{}),v)):(0,S.jsx)(S.Fragment,{children:"password"===t?(0,S.jsx)(S.Fragment,{children:(0,S.jsxs)(y.Z.Group,{className:p,children:[n?(0,S.jsxs)(S.Fragment,{children:[" ",(0,S.jsx)(y.Z.Label,{className:u,children:n})," ",h," "]}):null,(0,S.jsx)(F,{name:l,placeholder:r,refCallback:m,errors:c,register:i,className:d,value:s,readOnly:a}),c&&c[l]?(0,S.jsx)(y.Z.Control.Feedback,{type:"invalid",className:"d-block",children:c[l].message}):null]})}):(0,S.jsx)(S.Fragment,{children:"select"===t?(0,S.jsx)(S.Fragment,{children:(0,S.jsxs)(y.Z.Group,{className:p,children:[n?(0,S.jsx)(y.Z.Label,{className:u,children:n}):null,(0,S.jsx)(y.Z.Select,(0,o.Z)((0,o.Z)((0,o.Z)({type:t,label:n,name:l,id:l,ref:function(e){m&&m(e)},comp:x,className:d,isInvalid:!(!c||!c[l])},i?i(l):{}),v),{},{children:h})),c&&c[l]?(0,S.jsx)(y.Z.Control.Feedback,{type:"invalid",children:c[l].message}):null]})}):(0,S.jsx)(S.Fragment,{children:"checkbox"===t||"radio"===t?(0,S.jsx)(S.Fragment,{children:(0,S.jsxs)(y.Z.Group,{className:p,children:[(0,S.jsx)(y.Z.Check,(0,o.Z)((0,o.Z)({type:t,label:n,name:l,id:l,ref:function(e){m&&m(e)},className:d,isInvalid:!(!c||!c[l])},i?i(l):{}),v)),c&&c[l]?(0,S.jsx)(y.Z.Control.Feedback,{type:"invalid",children:c[l].message}):null]})}):(0,S.jsxs)(y.Z.Group,{className:p,children:[n?(0,S.jsx)(y.Z.Label,{className:u,children:n}):null,(0,S.jsx)(y.Z.Control,(0,o.Z)((0,o.Z)((0,o.Z)({type:t,placeholder:r,value:s,name:l,id:l,as:x,ref:function(e){m&&m(e)},className:d,isInvalid:!(!c||!c[l])},i?i(l):{}),v),{},{autoComplete:l,children:h||null})),c&&c[l]?(0,S.jsx)(y.Z.Control.Feedback,{type:"invalid",children:c[l].message}):null]})})})})})},G=t(4942),E=function(e){var n=e.children||null,t=e.tag||"div",l=e.color||"secondary",s=e.size||"";return(0,S.jsx)(t,{role:"status",className:N()({"spinner-border":"bordered"===e.type,"spinner-grow":"grow"===e.type},["text-".concat(l)],(0,G.Z)({},"avatar-".concat(s),s),e.className),children:n})};E.defaultProps={tag:"div",type:"bordered"};var I,O=E,L=t(3144),M=t(5671),_=t(1243);function R(){return z.apply(this,arguments)}function z(){return(z=(0,a.Z)((0,s.Z)().mark((function e(){var n,t,l,a;return(0,s.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(I){e.next=10;break}return e.next=3,fetch("../myapps/config.json");case 3:return n=e.sent,e.next=6,n.json();case 6:t=e.sent,l=t.APPMANAGE.APPMANAGE_USERNAME,a=t.APPMANAGE.APPMANAGE_PASSWORD,I=btoa(l+":"+a);case 10:return e.abrupt("return",I);case 11:case"end":return e.stop()}}),e)})))).apply(this,arguments)}_.Z.defaults.headers.post["Content-Type"]="application/json",_.Z.defaults.headers.get["Content-Type"]="application/json",_.Z.defaults.headers.common["Cache-Control"]="no-cache",_.Z.defaults.headers.common.Pragma="no-cache",_.Z.defaults.headers.common.Expires="0",_.Z.interceptors.response.use((function(e){return e}),(function(e){var n;if(e&&e.response&&404===e.response.status)k.Fg;else{if(!e||!e.response||500!==e.response.status)return n=e.response&&e.response.data?e.response.data.message:e.message||e,Promise.reject(n);k.Fg}}));var B,H=(0,L.Z)((function e(){(0,M.Z)(this,e),this.get=function(){var e=(0,a.Z)((0,s.Z)().mark((function e(n,t){var l,a;return(0,s.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,R();case 2:return e.t0=e.sent,_.Z.defaults.headers.common.Authorization="Basic "+e.t0,t?(a=t?Object.keys(t).map((function(e){return e+"="+t[e]})).join("&"):"",l=_.Z.get("".concat(n,"?").concat(a),t)):l=_.Z.get("".concat(n),t),e.abrupt("return",l);case 6:case"end":return e.stop()}}),e)})));return function(n,t){return e.apply(this,arguments)}}(),this.create=function(){var e=(0,a.Z)((0,s.Z)().mark((function e(n,t){return(0,s.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,R();case 2:return e.t0=e.sent,_.Z.defaults.headers.common.Authorization="Basic "+e.t0,e.abrupt("return",_.Z.post(n,t));case 5:case"end":return e.stop()}}),e)})));return function(n,t){return e.apply(this,arguments)}}()})),$=new H;var D=h().gettext,T=h().language,U=v.forwardRef((function(e,n){return(0,S.jsx)(u.Z,(0,o.Z)({elevation:6,ref:n,variant:"filled"},e))})),V=(0,c.Ps)(B||(B=(0,i.Z)(['\n query($locale: String,$skip: Int){\n productCollection(locale:$locale,where:{appStore:true},limit: 100, skip: $skip) {\n total\n items {\n sys { \n id \n }\n key\n trademark\n summary\n overview\n websiteurl\n description\n screenshots\n distribution\n vcpu\n memory\n storage\n logo {\n imageurl\n }\n catalogCollection(limit:20) {\n items {\n key\n title\n catalogCollection(limit:1){\n items{\n key\n title\n }\n }\n }\n }\n }\n }\n catalog(id: "2Yp0TY3kBHgG6VDjsHZNpK",locale:$locale) {\n linkedFrom(allowedLocales:["en-US"]) {\n catalogCollection(limit:20) {\n items {\n key\n title\n linkedFrom(allowedLocales:["en-US"]) {\n catalogCollection(limit:20) {\n items {\n key\n title\n }\n }\n }\n }\n }\n }\n }\n }\n']))),q=function(e){var n,t=e.product,l=e.showFlag,i=e.onClose,o=(0,v.useState)(0),c=(0,r.Z)(o,2),d=c[0],u=c[1],m=(0,k.s0)(),j=(0,v.useState)(!0),Z=(0,r.Z)(j,2),y=Z[0],C=Z[1],b=(0,v.useState)(""),N=(0,r.Z)(b,2),w=N[0],A=N[1],F=(0,v.useState)(!1),G=(0,r.Z)(F,2),E=G[0],I=G[1],O=(0,v.useState)(""),L=(0,r.Z)(O,2),M=L[0],_=L[1],R=(0,v.useState)(!1),z=(0,r.Z)(R,2),B=z[0],H=z[1];function T(){return(T=(0,a.Z)((0,s.Z)().mark((function e(){var n;return(0,s.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(y){e.next=20;break}if(!(!w||w.length<2||w.length>20)){e.next=6;break}I(!0),_(D("Please enter a custom application name between 2 and 20 characters.")),e.next=19;break;case 6:return e.prev=6,H(!0),e.next=10,l={app_name:t.key,app_version:Y,customer_app_name:w},$.get("".concat("/AppManage/AppInstall"),l);case 10:(n=e.sent).data.Error?(I(!0),_(n.data.Error.Message),H(!1)):(I(!1),_(""),h().file("/etc/hostname").watch((function(e){console.log(e)})),h().jump("/myapps"),i()),e.next=19;break;case 14:e.prev=14,e.t0=e.catch(6),I(!1),_(""),m("/error-500");case 19:return e.abrupt("return");case 20:C(!y);case 21:case"end":return e.stop()}var l}),e,null,[[6,14]])})))).apply(this,arguments)}var V=((null===(n=t.distribution)||void 0===n?void 0:n.filter((function(e){return"Community"===e.key})))||[]).map((function(e){return e.value})),q=V&&1===V.length?V.toString().split(","):V,Q=(0,v.useState)(q[0]),W=(0,r.Z)(Q,2),Y=W[0],K=W[1],J=function(e,n){"clickaway"!==n&&(I(!1),_(""))};return(0,S.jsxs)(S.Fragment,{children:[(0,S.jsxs)(x.Z,{show:l,onHide:i,size:"lg",scrollable:"true",backdrop:"static",children:[(0,S.jsx)(x.Z.Header,{onHide:i,closeButton:!0,children:(0,S.jsxs)("div",{style:{padding:"10px"},children:[(0,S.jsx)("div",{className:"appstore-item-content-icon col-same-height",children:(0,S.jsx)("img",{src:t.logo.imageurl,alt:"",className:"app-icon"})}),(0,S.jsxs)("div",{className:"col-same-height",children:[(0,S.jsx)("h4",{className:"appstore-item-content-title",style:{marginTop:"5px"},children:t.trademark}),(0,S.jsx)("div",{children:(0,S.jsxs)("a",{rel:"noreferrer",href:"https://support.websoft9.com/docs/"+t.key,target:"_blank",style:{color:"#2196f3"},children:[t.trademark," ",D("developers")]})}),(0,S.jsxs)("div",{style:{display:"flex",alignItems:"center"},children:[(0,S.jsxs)("span",{style:{marginRight:"5px"},children:[D("Version")," : "]})," ",V]}),(0,S.jsx)("div",{style:{display:"flex",alignItems:"center"},children:(0,S.jsxs)("span",{style:{marginRight:"5px"},children:[D("Requires at least")," : ",t.vcpu," vCPU, ",t.memory," GB memory, ",t.storage," GB storage"]})})]})]})}),(0,S.jsxs)(x.Z.Body,{children:[(0,S.jsxs)("div",{style:{display:y?"block":"none"},children:[(0,S.jsx)(f.Z,{activeIndex:d,onSelect:function(e,n){u(e)},style:{width:"80%",margin:"0 auto"},children:(t.screenshots||[]).map((function(e){return(0,S.jsx)(f.Z.Item,{children:(0,S.jsx)("img",{className:"d-block",src:null===e||void 0===e?void 0:e.value,alt:null===e||void 0===e?void 0:e.key,width:"100%",height:"300px"})},null===e||void 0===e?void 0:e.id)}))}),(0,S.jsxs)("div",{style:{padding:"10px"},children:[(0,S.jsx)("h4",{children:D("Overview")}),t.overview]}),(0,S.jsxs)("div",{style:{padding:"10px"},children:[(0,S.jsx)("h4",{children:D("Description")}),t.description]})]}),(0,S.jsx)("div",{style:{display:y?"none":"block"},children:(0,S.jsxs)("div",{style:{display:"flex",flexDirection:"column"},children:[(0,S.jsxs)("div",{children:[(0,S.jsxs)("span",{style:{marginRight:"5px"},children:[D("Version")," :"]}),q&&(0,S.jsx)(P,{name:"select",type:"select",className:"form-select",onChange:function(e){return n=e.target.value,void K(n);var n},children:(q||[]).map((function(e,n){return(0,S.jsx)("option",{value:e,children:e},e+n)}))},"select")]}),(0,S.jsxs)("div",{style:{marginTop:"5px"},children:[(0,S.jsxs)("span",{style:{marginRight:"5px"},children:[D("Name")," :"]}),(0,S.jsx)(P,{type:"text",value:w,name:"app_Name",placeholder:D("Only letters and numbers from 2 to 20 are allowed. No special characters."),onChange:function(e){!function(e){if(A(e),e){var n=e.replace(/[^a-z0-9]/gi,"").toLowerCase();A(n),I(!1),_("")}else I(!0),_(D("Please enter a custom application name between 2 and 20 characters."))}(e.target.value)}})]})]})})]}),(0,S.jsxs)(x.Z.Footer,{children:[(0,S.jsx)(g.Z,{variant:"light",onClick:i,children:D("Close")})," ",(0,S.jsx)(g.Z,{disabled:B,variant:"primary",onClick:function(){return T.apply(this,arguments)},children:D("Install")})]})]}),E&&(0,S.jsx)(p.Z,{open:E,autoHideDuration:5e3,onClose:J,anchorOrigin:{vertical:"top",horizontal:"center"},children:(0,S.jsx)(U,{onClose:J,severity:"error",sx:{width:"100%"},children:M})})]})},Q=function(){var e=(0,v.useState)(!1),n=(0,r.Z)(e,2),t=n[0],s=n[1],a=(0,v.useState)(null),i=(0,r.Z)(a,2),c=i[0],u=i[1],p=(0,v.useState)(null),m=(0,r.Z)(p,2),h=m[0],x=m[1],f=(0,v.useState)(null),g=(0,r.Z)(f,2),k=g[0],C=g[1],b=(0,v.useState)(!0),N=(0,r.Z)(b,2),w=N[0],A=N[1],F=(0,v.useState)(""),G=(0,r.Z)(F,2),E=G[0],I=G[1],L=(0,d.a)(V,{variables:{locale:"zh_CN"===T?"zh-CN":"en-US"}}),M=L.loading,_=L.error,R=L.data,z=L.fetchMore,B=0,H=null===R||void 0===R?void 0:R.catalog.linkedFrom.catalogCollection.items,$=(0,v.useState)(null),U=(0,r.Z)($,2),Q=U[0],W=U[1],Y=(0,v.useState)(null),K=(0,r.Z)(Y,2),J=K[0],X=K[1];if((0,v.useEffect)((function(){var e,n;R&&(B+=R.productCollection.items.length,R.productCollection.items.length {\n const [showPassword, setShowPassword] = useState(false);\n\n return (\n <>\n \n {\n if (refCallback) refCallback(r);\n }}\n className={className}\n isInvalid={errors && errors[name] ? true : false}\n {...(register ? register(name) : {})}\n autoComplete={name}\n defaultValue={value}\n readOnly={readOnly}\n />\n \n {\n setShowPassword(!showPassword);\n }}>\n \n \n \n );\n};\n\ntype FormInputProps = {\n label?: string,\n type?: string,\n name?: string,\n value?: string,\n placeholder?: string,\n register?: any,\n errors?: any,\n className?: string,\n labelClassName?: string,\n containerClass?: string,\n refCallback?: any,\n children?: any,\n};\n\nconst FormInput = ({\n label,\n type,\n name,\n value,\n readOnly,\n placeholder,\n register,\n errors,\n className,\n labelClassName,\n containerClass,\n refCallback,\n children,\n ...otherProps\n}: FormInputProps): React$Element => {\n // handle input type\n const comp = type === 'textarea' ? 'textarea' : type === 'select' ? 'select' : 'input';\n\n return (\n <>\n {type === 'hidden' ? (\n \n ) : (\n <>\n {type === 'password' ? (\n <>\n \n {label ? (\n <>\n {' '}\n {label} {children}{' '}\n \n ) : null}\n \n\n {errors && errors[name] ? (\n \n {errors[name]['message']}\n \n ) : null}\n \n \n ) : (\n <>\n {type === 'select' ? (\n <>\n \n {label ? {label} : null}\n\n {\n if (refCallback) refCallback(r);\n }}\n comp={comp}\n className={className}\n isInvalid={errors && errors[name] ? true : false}\n {...(register ? register(name) : {})}\n {...otherProps}>\n {children}\n \n\n {errors && errors[name] ? (\n \n {errors[name]['message']}\n \n ) : null}\n \n \n ) : (\n <>\n {type === 'checkbox' || type === 'radio' ? (\n <>\n \n {\n if (refCallback) refCallback(r);\n }}\n className={className}\n isInvalid={errors && errors[name] ? true : false}\n {...(register ? register(name) : {})}\n {...otherProps}\n />\n\n {errors && errors[name] ? (\n \n {errors[name]['message']}\n \n ) : null}\n \n \n ) : (\n \n {label ? {label} : null}\n\n {\n if (refCallback) refCallback(r);\n }}\n className={className}\n isInvalid={errors && errors[name] ? true : false}\n {...(register ? register(name) : {})}\n {...otherProps}\n autoComplete={name}>\n {children ? children : null}\n \n\n {errors && errors[name] ? (\n \n {errors[name]['message']}\n \n ) : null}\n \n )}\n \n )}\n \n )}\n \n )}\n \n );\n};\n\nexport default FormInput;\n","// @flow\nimport React from 'react';\nimport classNames from 'classnames';\n\ntype SpinnerProps = {\n tag?: string,\n className?: string,\n size?: 'lg' | 'md' | 'sm',\n type?: 'bordered' | 'grow',\n color?: string,\n children?: any,\n};\n\n/**\n * Spinner\n */\nconst Spinner = (props: SpinnerProps): React$Element => {\n const children = props.children || null;\n const Tag = props.tag || 'div';\n const color = props.color || 'secondary';\n const size = props.size || '';\n\n return (\n \n {children}\n \n );\n};\n\nSpinner.defaultProps = {\n tag: 'div',\n type: 'bordered',\n};\n\nexport default Spinner;\n","import axios from 'axios';\nimport { Navigate } from \"react-router-dom\";\n\n// 定义一个全局变量来存储 config.json 的内容\nlet credentials;\n\nasync function getCredentials() {\n // 如果 credentials 不存在,就从 config.json 中获取它\n if (!credentials) {\n const response = await fetch('../myapps/config.json');\n const data = await response.json();\n const userName = data.APPMANAGE.APPMANAGE_USERNAME;\n const uerPassword = data.APPMANAGE.APPMANAGE_PASSWORD;\n credentials = btoa(userName + \":\" + uerPassword);\n }\n // 返回 credentials\n return credentials;\n}\n\n// 设置 axios 的默认配置\naxios.defaults.headers.post['Content-Type'] = 'application/json';\naxios.defaults.headers.get['Content-Type'] = 'application/json';\naxios.defaults.headers.common['Cache-Control'] = 'no-cache';\naxios.defaults.headers.common['Pragma'] = 'no-cache';\naxios.defaults.headers.common['Expires'] = '0';\n\n// 拦截响应以捕获错误\naxios.interceptors.response.use(\n (response) => {\n return response;\n },\n (error) => {\n // 任何不在 2xx 范围内的状态码都会触发这个函数\n let message;\n\n if (error && error.response && error.response.status === 404) {\n \n } else if (error && error.response && error.response.status === 500) {\n \n } else {\n message = error.response && error.response.data ? error.response.data['message'] : error.message || error;\n return Promise.reject(message);\n }\n }\n);\n\nclass APICore {\n /**\n * Fetches data from given url\n */\n get = async (url, params) => {\n // 等待获取凭证并设置授权头\n axios.defaults.headers.common['Authorization'] = 'Basic ' + await getCredentials();\n let response;\n if (params) {\n var queryString = params\n ? Object.keys(params)\n .map((key) => key + '=' + params[key])\n .join('&')\n : '';\n response = axios.get(`${url}?${queryString}`, params);\n } else {\n response = axios.get(`${url}`, params);\n }\n return response;\n };\n\n /**\n * post given data to url\n */\n create = async (url, data) => {\n // 等待获取凭证并设置授权头\n axios.defaults.headers.common['Authorization'] = 'Basic ' + await getCredentials();\n return axios.post(url, data);\n };\n}\n\nexport { APICore };\n","import { APICore } from './apiCore';\n\nconst api = new APICore();\n\n//App 安装\nfunction AppInstall(params: any): Promise {\n const baseUrl = '/AppManage/AppInstall';\n return api.get(`${baseUrl}`, params);\n}\n\nexport { AppInstall };\n\n","// @flow\nimport { gql, useQuery } from '@apollo/client';\nimport MuiAlert from '@mui/material/Alert';\nimport Snackbar from '@mui/material/Snackbar';\nimport cockpit from 'cockpit';\nimport React, { useEffect, useState } from 'react';\nimport { Button, Carousel, Col, Form, Modal, Row } from 'react-bootstrap';\nimport { useNavigate } from \"react-router-dom\";\nimport FormInput from '../components/FormInput';\nimport Spinner from '../components/Spinner';\nimport { AppInstall } from '../helpers';\n\nconst _ = cockpit.gettext;\nconst language = cockpit.language;//获取cockpit的当前语言环境\n\nconst Alert = React.forwardRef(function Alert(props, ref) {\n return ;\n});\n\nconst getContentfulData = gql`\n query($locale: String,$skip: Int){\n productCollection(locale:$locale,where:{appStore:true},limit: 100, skip: $skip) {\n total\n items {\n sys { \n id \n }\n key\n trademark\n summary\n overview\n websiteurl\n description\n screenshots\n distribution\n vcpu\n memory\n storage\n logo {\n imageurl\n }\n catalogCollection(limit:20) {\n items {\n key\n title\n catalogCollection(limit:1){\n items{\n key\n title\n }\n }\n }\n }\n }\n }\n catalog(id: \"2Yp0TY3kBHgG6VDjsHZNpK\",locale:$locale) {\n linkedFrom(allowedLocales:[\"en-US\"]) {\n catalogCollection(limit:20) {\n items {\n key\n title\n linkedFrom(allowedLocales:[\"en-US\"]) {\n catalogCollection(limit:20) {\n items {\n key\n title\n }\n }\n }\n }\n }\n }\n }\n }\n`;\n\n//应用详情弹窗\nconst AppDetailModal = ({ product, showFlag, onClose }) => {\n const [index, setIndex] = useState(0); //用户图片浏览\n const navigate = useNavigate(); //用于页面跳转\n const [visible, setVisible] = useState(true); //用于显示安装选项:版本和应用名称\n const [customName, setCustomName] = useState(\"\"); //用户存储用户输入的应用名称\n const [showAlert, setShowAlert] = useState(false); //用于是否显示错误提示\n const [alertMessage, setAlertMessage] = useState(\"\");//用于显示错误提示消息\n const [disable, setDisable] = useState(false);//用于按钮禁用\n\n //用户单击“安装”按钮\n async function handleInstallClick() {\n if (!visible) {\n if (!customName || customName.length < 2 || customName.length > 20) { //判断用户是否输入应用名称\n setShowAlert(true);\n setAlertMessage(_(\"Please enter a custom application name between 2 and 20 characters.\"))\n }\n else {\n //调用应用安装接口\n try {\n setDisable(true);\n const response = await AppInstall({ app_name: product.key, app_version: selectedVersion, customer_app_name: customName })\n if (response.data.Error) {\n setShowAlert(true);\n setAlertMessage(response.data.Error.Message);\n setDisable(false);\n }\n else {\n setShowAlert(false);\n setAlertMessage(\"\");\n cockpit.file('/etc/hostname').watch(content => {\n console.log(content);\n });\n cockpit.jump(\"/myapps\");\n onClose();\n }\n }\n catch (error) {\n setShowAlert(false);\n setAlertMessage(\"\");\n navigate(\"/error-500\");\n }\n }\n return;\n }\n setVisible(!visible);\n }\n\n const handleSelect = (selectedIndex, e) => {\n setIndex(selectedIndex);\n };\n\n let versions = (product.distribution?.filter(item => item.key === \"Community\") || []).map(version => { return version.value });//获取应用的版本\n\n let versionList = (versions && versions.length === 1) ? versions.toString().split(\",\") : versions;\n\n const [selectedVersion, setselectedVersion] = useState(versionList[0]); //存储用户选择的安装版本\n\n const changeVersion = (version) => {\n setselectedVersion(version);\n };\n\n const handleInputChange = (inputValue) => {\n setCustomName(inputValue);\n if (!inputValue) { //验证输入应用名称\n setShowAlert(true);\n setAlertMessage(_(\"Please enter a custom application name between 2 and 20 characters.\"))\n }\n else {\n const newValue = inputValue.replace(/[^a-z0-9]/gi, '').toLowerCase(); //先替换输入值\n setCustomName(newValue);\n setShowAlert(false);\n setAlertMessage(\"\");\n }\n }\n\n const handleClose = (event, reason) => {\n if (reason === 'clickaway') {\n return;\n }\n setShowAlert(false);\n setAlertMessage(\"\");\n };\n\n return (\n <>\n \n \n
\n
\n \n
\n
\n

\n {product.trademark}\n

\n \n
\n {_(\"Version\")} : {versions}\n
\n
\n {_(\"Requires at least\")} : {product.vcpu} vCPU, {product.memory} GB memory, {product.storage} GB storage\n
\n
\n
\n
\n \n
\n \n {\n (product.screenshots || []).map((item) => {\n return (\n \n \n \n );\n })\n }\n \n
\n

{_(\"Overview\")}

\n {product.overview}\n
\n
\n

{_(\"Description\")}

\n {product.description}\n
\n
\n
\n
\n
\n {_(\"Version\")} :\n {\n versionList && changeVersion(e.target.value)}\n key=\"select\">\n {\n (versionList || []).map((version, i) => {\n return \n })\n }\n \n }\n
\n
\n {_(\"Name\")} :\n { handleInputChange(e.target.value) }} />\n
\n
\n
\n
\n \n {' '}\n \n \n
\n {\n showAlert &&\n \n \n {alertMessage}\n \n \n }\n \n );\n}\n\nconst AppStore = (): React$Element => {\n const [showModal, setShowModal] = useState(false); //用于显示弹窗的标识\n const [selectedProduct, setSelectedProduct] = useState(null); //用于存储被选中的产品(点击应用详情时使用)\n const [subCatalogs, setSubCatalogs] = useState(null); //用于存储二级目录\n const [allMainCatalogApps, setAllMainCatalogApps] = useState(null); //用于存储某个一级子目录下的所有应用\n const [isAllSelected, setIsAllSelected] = useState(true);\n const [searchValue, setSearchValue] = useState(\"\");\n\n const { loading: dataLoading, error: dataError, data: allData, fetchMore } = useQuery(getContentfulData, { variables: { locale: language === \"zh_CN\" ? \"zh-CN\" : \"en-US\" } });\n\n // 定义一个变量来存储已经查询过的数据的数量\n let skipCount = 0;\n\n // 定义一个函数来使用fetchMore方法获取更多的产品\n const fetchMoreProducts = () => {\n // 检查是否还有更多的产品可以获取\n if (allData.productCollection.items.length < allData.productCollection.total) {\n // 使用fetchMore方法,把已经查询过的数据的数量作为skip变量传入\n fetchMore({\n variables: {\n skip: skipCount,\n },\n // 使用新的结果更新之前的结果,通过连接items数组\n updateQuery: (prevResult, { fetchMoreResult }) => {\n return Object.assign({}, prevResult, {\n productCollection: {\n ...fetchMoreResult.productCollection,\n items: [\n ...prevResult.productCollection.items,\n ...fetchMoreResult.productCollection.items,\n ],\n },\n });\n },\n });\n }\n };\n\n const mainCatalogs = allData?.catalog.linkedFrom.catalogCollection.items; //主目录数据\n //const apps = allData?.productCollection?.items;//所有应用数据\n\n const [apps, setApps] = useState(null); //用于存储通过目录筛选出来的数据\n const [appList, setAppList] = useState(null); //用于存储通过目录筛选出来的数据\n\n useEffect(() => {\n // 检查是否有任何数据\n if (allData) {\n // 更新已经查询过的数据的数量,加上当前返回的数据的数量\n skipCount += allData.productCollection.items.length;\n // 调用fetchMoreProducts函数来获取更多的产品,如果有的话\n fetchMoreProducts();\n setAppList(allData.productCollection?.items);\n setApps(allData.productCollection?.items);\n }\n }, [allData])\n\n // if (dataLoading) return

Loading...

;\n\n if (dataLoading) return \n if (dataError) return

Error : ${dataError.message}

;\n\n //用于显示应用详情的弹窗\n const handleClick = (product) => {\n setSelectedProduct(product);\n setShowModal(true);\n };\n\n //用于关闭应用详情的弹窗\n const handleClose = () => {\n setShowModal(false);\n setSelectedProduct(null);\n };\n\n //当主目录改变时\n const changeMainCatalog = (selectedMainCatalog) => {\n // 查询主目录下的二级目录\n let updatedData = null;\n // filter\n updatedData =\n selectedMainCatalog === 'All'\n ? []\n : mainCatalogs.filter(c => c.key === selectedMainCatalog)?.[0]?.linkedFrom?.catalogCollection?.items;\n setSubCatalogs(updatedData);\n\n //根据主目录过滤app数据\n let subCatalogApps = null;\n let mainCatalogAllApps = null;\n mainCatalogAllApps = apps.filter(app => app?.catalogCollection?.items.some(sub => sub?.catalogCollection?.items.some(subsub => subsub.key === selectedMainCatalog)));\n subCatalogApps =\n selectedMainCatalog === \"All\"\n ? apps\n : mainCatalogAllApps;\n setAppList(subCatalogApps);\n setAllMainCatalogApps(mainCatalogAllApps);\n setIsAllSelected(false);\n setSearchValue(\"\");\n };\n\n //当子目录改变时,过滤应用数据\n const changeSubCatalog = (selectedSubCatalog) => {\n let updatedData = null;\n updatedData =\n selectedSubCatalog === \"All\"\n ? allMainCatalogApps\n : apps.filter(app => app?.catalogCollection?.items.some(c => c.key === selectedSubCatalog));\n setAppList(updatedData);\n setSearchValue(\"\");\n };\n\n //当搜索框的内容发生改变时,进行app的过滤搜索\n const handleInputChange = (searchString) => {\n setSearchValue(searchString);\n let updatedData = null;\n updatedData =\n searchString === \"\"\n ? apps\n : apps.filter(app => { return app.trademark.toLowerCase().includes(searchString) || app.key.toLowerCase().includes(searchString) });\n\n setAppList(updatedData);\n setIsAllSelected(true);\n setSubCatalogs(null);\n }\n\n return (\n <>\n \n \n \n \n changeMainCatalog(e.target.value)}>\n \n {\n (mainCatalogs || []).map((item, i) => {\n return (\n \n );\n })\n }\n \n \n \n changeSubCatalog(e.target.value)}>\n \n {\n (subCatalogs || []).map((item, i) => {\n return (\n \n );\n })\n }\n \n \n \n \n \n \n handleInputChange(e.target.value)} />\n \n \n \n \n {(appList || []).map((app, i) => {\n return (\n \n
{ handleClick(app) }}>\n
\n \n
\n
\n

\n {app?.trademark}\n

\n
\n {app?.summary}\n
\n
\n
\n \n );\n })}\n
\n {showModal && }\n \n );\n};\n\nexport default AppStore;\n"],"names":["PasswordInput","_ref","name","placeholder","refCallback","errors","register","className","value","readOnly","_useState","useState","_useState2","_slicedToArray","showPassword","setShowPassword","_jsx","_Fragment","children","_jsxs","InputGroup","Form","Control","_objectSpread","type","id","as","ref","r","isInvalid","autoComplete","defaultValue","classNames","onClick","_ref2","label","labelClassName","containerClass","otherProps","_objectWithoutProperties","_excluded","comp","Group","Label","Feedback","Select","Check","Spinner","props","Tag","tag","color","size","role","concat","_defineProperty","defaultProps","credentials","getCredentials","_getCredentials","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee3","response","data","userName","uerPassword","wrap","_context3","prev","next","fetch","sent","json","APPMANAGE","APPMANAGE_USERNAME","APPMANAGE_PASSWORD","btoa","abrupt","stop","axios","defaults","headers","post","get","common","interceptors","use","error","message","status","Navigate","Promise","reject","APICore","_createClass","_classCallCheck","_callee","url","params","queryString","_context","t0","Object","keys","map","key","join","_x","_x2","create","_callee2","_context2","_x3","_x4","api","_","cockpit","language","Alert","React","MuiAlert","elevation","variant","getContentfulData","gql","_templateObject","_taggedTemplateLiteral","AppDetailModal","_product$distribution","product","showFlag","onClose","index","setIndex","navigate","useNavigate","_useState3","_useState4","visible","setVisible","_useState5","_useState6","customName","setCustomName","_useState7","_useState8","showAlert","setShowAlert","_useState9","_useState10","alertMessage","setAlertMessage","_useState11","_useState12","disable","setDisable","_handleInstallClick","length","app_name","app_version","selectedVersion","customer_app_name","Error","Message","watch","content","console","log","versions","distribution","filter","item","version","versionList","toString","split","_useState13","_useState14","setselectedVersion","handleClose","event","reason","Modal","show","onHide","scrollable","backdrop","Header","closeButton","style","padding","src","logo","imageurl","alt","marginTop","trademark","rel","href","target","display","alignItems","marginRight","vcpu","memory","storage","Body","Carousel","activeIndex","onSelect","selectedIndex","e","width","margin","screenshots","Item","height","overview","description","flexDirection","FormInput","onChange","i","inputValue","newValue","replace","toLowerCase","handleInputChange","Footer","Button","disabled","Snackbar","open","autoHideDuration","anchorOrigin","vertical","horizontal","severity","sx","_useState15","_useState16","showModal","setShowModal","_useState17","_useState18","selectedProduct","setSelectedProduct","_useState19","_useState20","subCatalogs","setSubCatalogs","_useState21","_useState22","allMainCatalogApps","setAllMainCatalogApps","_useState23","_useState24","isAllSelected","setIsAllSelected","_useState25","_useState26","searchValue","setSearchValue","_useQuery","useQuery","variables","locale","dataLoading","loading","dataError","allData","fetchMore","skipCount","mainCatalogs","catalog","linkedFrom","catalogCollection","items","_useState27","_useState28","apps","setApps","_useState29","_useState30","appList","setAppList","useEffect","_allData$productColle","_allData$productColle2","productCollection","total","skip","updateQuery","prevResult","fetchMoreResult","assign","_toConsumableArray","Row","Col","sm","selectedMainCatalog","_mainCatalogs$filter","_mainCatalogs$filter$","_mainCatalogs$filter$2","_mainCatalogs$filter$3","updatedData","mainCatalogAllApps","c","app","_app$catalogCollectio","some","sub","_sub$catalogCollectio","subsub","changeMainCatalog","selected","title","selectedSubCatalog","_app$catalogCollectio2","changeSubCatalog","xs","searchString","includes","xxl","md","textAlign","summary"],"sourceRoot":""} \ No newline at end of file diff --git a/cockpit/appstore/build/static/js/main.a27efeeb.js b/cockpit/appstore/build/static/js/main.8d3e5d4b.js similarity index 99% rename from cockpit/appstore/build/static/js/main.a27efeeb.js rename to cockpit/appstore/build/static/js/main.8d3e5d4b.js index 2fd6ca8d..e93b6c9b 100644 --- a/cockpit/appstore/build/static/js/main.a27efeeb.js +++ b/cockpit/appstore/build/static/js/main.8d3e5d4b.js @@ -1,3 +1,3 @@ -/*! For license information please see main.a27efeeb.js.LICENSE.txt */ -!function(){var e={27:function(e,t,n){"use strict";n.d(t,{X3:function(){return K},aU:function(){return m},Zq:function(){return G},J0:function(){return E},q_:function(){return S},Ep:function(){return C},WK:function(){return X},RQ:function(){return $},fp:function(){return P},cP:function(){return T},pC:function(){return Z},Zn:function(){return B}});var r=n(3144),o=n(5671),i=n(136),a=n(7277),u=n(1120),l=n(9611);var c=n(8814);function s(e,t,n){return s=(0,c.Z)()?Reflect.construct.bind():function(e,t,n){var r=[null];r.push.apply(r,t);var o=new(Function.bind.apply(e,r));return n&&(0,l.Z)(o,n.prototype),o},s.apply(null,arguments)}function f(e){var t="function"===typeof Map?new Map:void 0;return f=function(e){if(null===e||(n=e,-1===Function.toString.call(n).indexOf("[native code]")))return e;var n;if("function"!==typeof e)throw new TypeError("Super expression must either be null or a function");if("undefined"!==typeof t){if(t.has(e))return t.get(e);t.set(e,r)}function r(){return s(e,arguments,(0,u.Z)(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),(0,l.Z)(r,e)},f(e)}var d=n(9439),p=n(3878),h=n(9199),v=n(181),y=n(5267);var m,g=n(3433);function b(){return b=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0&&(t.hash=e.substr(n),e=e.substr(0,n));var r=e.indexOf("?");r>=0&&(t.search=e.substr(r),e=e.substr(0,r)),e&&(t.pathname=e)}return t}function N(e,t,n,r){void 0===r&&(r={});var o=r,i=o.window,a=void 0===i?document.defaultView:i,u=o.v5Compat,l=void 0!==u&&u,c=a.history,s=m.Pop,f=null,d=p();function p(){return(c.state||{idx:null}).idx}function h(){s=m.Pop;var e=p(),t=null==e?null:e-d;d=e,f&&f({action:s,location:y.location,delta:t})}function v(e){var t="null"!==a.location.origin?a.location.origin:a.location.href,n="string"===typeof e?e:C(e);return E(t,"No window.location.(origin|href) available to create URL for href: "+n),new URL(n,t)}null==d&&(d=0,c.replaceState(b({},c.state,{idx:d}),""));var y={get action(){return s},get location(){return e(a,c)},listen:function(e){if(f)throw new Error("A history only accepts one active listener");return a.addEventListener(k,h),f=e,function(){a.removeEventListener(k,h),f=null}},createHref:function(e){return t(a,e)},createURL:v,encodeLocation:function(e){var t=v(e);return{pathname:t.pathname,search:t.search,hash:t.hash}},push:function(e,t){s=m.Push;var r=O(y.location,e,t);n&&n(r,e);var o=x(r,d=p()+1),i=y.createHref(r);try{c.pushState(o,"",i)}catch(u){a.location.assign(i)}l&&f&&f({action:s,location:y.location,delta:1})},replace:function(e,t){s=m.Replace;var r=O(y.location,e,t);n&&n(r,e);var o=x(r,d=p()),i=y.createHref(r);c.replaceState(o,"",i),l&&f&&f({action:s,location:y.location,delta:0})},go:function(e){return c.go(e)}};return y}!function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"}(w||(w={}));new Set(["lazy","caseSensitive","path","id","index","children"]);function P(e,t,n){void 0===n&&(n="/");var r=B(("string"===typeof t?T(t):t).pathname||"/",n);if(null==r)return null;var o=D(e);!function(e){e.sort((function(e,t){return e.score!==t.score?t.score-e.score:function(e,t){var n=e.length===t.length&&e.slice(0,-1).every((function(e,n){return e===t[n]}));return n?e[e.length-1]-t[t.length-1]:0}(e.routesMeta.map((function(e){return e.childrenIndex})),t.routesMeta.map((function(e){return e.childrenIndex})))}))}(o);for(var i=null,a=0;null==i&&a0&&(E(!0!==e.index,'Index routes must not have child routes. Please remove all child routes from route path "'+u+'".'),D(e.children,t,l,u)),(null!=e.path||e.index)&&t.push({path:u,score:V(u,e.index),routesMeta:l})};return e.forEach((function(e,t){var n;if(""!==e.path&&null!=(n=e.path)&&n.includes("?")){var r,i=function(e,t){var n="undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=(0,v.Z)(e))||t&&e&&"number"===typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){u=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(u)throw i}}}}(I(e.path));try{for(i.s();!(r=i.n()).done;){var a=r.value;o(e,t,a)}}catch(u){i.e(u)}finally{i.f()}}else o(e,t)})),t}function I(e){var t=e.split("/");if(0===t.length)return[];var n,r=(n=t,(0,p.Z)(n)||(0,h.Z)(n)||(0,v.Z)(n)||(0,y.Z)()),o=r[0],i=r.slice(1),a=o.endsWith("?"),u=o.replace(/\?$/,"");if(0===i.length)return a?[u,""]:[u];var l=I(i.join("/")),c=[];return c.push.apply(c,(0,g.Z)(l.map((function(e){return""===e?u:[u,e].join("/")})))),a&&c.push.apply(c,(0,g.Z)(l)),c.map((function(t){return e.startsWith("/")&&""===t?"/":t}))}var R=/^:\w+$/,j=3,L=2,F=1,A=10,M=-2,z=function(e){return"*"===e};function V(e,t){var n=e.split("/"),r=n.length;return n.some(z)&&(r+=M),t&&(r+=L),n.filter((function(e){return!z(e)})).reduce((function(e,t){return e+(R.test(t)?j:""===t?F:A)}),r)}function q(e,t){for(var n=e.routesMeta,r={},o="/",i=[],a=0;a and the router will parse it for you.'}function G(e){return e.filter((function(e,t){return 0===t||e.route.path&&e.route.path.length>0}))}function Z(e,t,n,r){var o;void 0===r&&(r=!1),"string"===typeof e?o=T(e):(E(!(o=b({},e)).pathname||!o.pathname.includes("?"),W("?","pathname","search",o)),E(!o.pathname||!o.pathname.includes("#"),W("#","pathname","hash",o)),E(!o.search||!o.search.includes("#"),W("#","search","hash",o)));var i,a=""===e||""===o.pathname,u=a?"/":o.pathname;if(r||null==u)i=n;else{var l=t.length-1;if(u.startsWith("..")){for(var c=u.split("/");".."===c[0];)c.shift(),l-=1;o.pathname=c.join("/")}i=l>=0?t[l]:"/"}var s=function(e,t){void 0===t&&(t="/");var n="string"===typeof e?T(e):e,r=n.pathname,o=n.search,i=void 0===o?"":o,a=n.hash,u=void 0===a?"":a,l=r?r.startsWith("/")?r:function(e,t){var n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach((function(e){".."===e?n.length>1&&n.pop():"."!==e&&n.push(e)})),n.length>1?n.join("/"):"/"}(r,t):t;return{pathname:l,search:J(i),hash:Y(u)}}(o,i),f=u&&"/"!==u&&u.endsWith("/"),d=(a||"."===u)&&n.endsWith("/");return s.pathname.endsWith("/")||!f&&!d||(s.pathname+="/"),s}var $=function(e){return e.join("/").replace(/\/\/+/g,"/")},H=function(e){return e.replace(/\/+$/,"").replace(/^\/*/,"/")},J=function(e){return e&&"?"!==e?e.startsWith("?")?e:"?"+e:""},Y=function(e){return e&&"#"!==e?e.startsWith("#")?e:"#"+e:""},K=function(e){(0,i.Z)(n,e);var t=(0,a.Z)(n);function n(){return(0,o.Z)(this,n),t.apply(this,arguments)}return(0,r.Z)(n)}(f(Error));function X(e){return null!=e&&"number"===typeof e.status&&"string"===typeof e.statusText&&"boolean"===typeof e.internal&&"data"in e}var ee=["post","put","patch","delete"],te=(new Set(ee),["get"].concat(ee));new Set(te),new Set([301,302,303,307,308]),new Set([307,308]),"undefined"!==typeof window&&"undefined"!==typeof window.document&&window.document.createElement;Symbol("deferred")},1694:function(e,t){var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e=[],t=0;t