| Current Path : /proc/thread-self/root/snap/lxd/39313/share/lxd-ui/assets/ |
| Current File : //proc/thread-self/root/snap/lxd/39313/share/lxd-ui/assets/Settings-DSf-saz7.js |
import{ae as U,w as B,cZ as H,r as j,j as e,d as t,aI as _,c_ as O,c$ as q,d0 as Q,d1 as G,d2 as z,y as T,u as Y,t as J,x as A,S as X,d3 as Z,cC as V,d4 as W,d5 as F,K as ee,d6 as te,d7 as se,p as ae,cf as ne}from"./index-BFGypnt-.js";import{H as re}from"./HelpLink-l4aaXUp-.js";import{C as L,t as oe}from"./ConfigFieldDescription-CY0sdTp6.js";import{P}from"./PageHeader-DZVSTM6q.js";import{u as $}from"./useClusterMembers-B29_ixY7.js";import{C as le}from"./ClusterSpecificInput-BYM6R5do.js";import{C as ce}from"./ClusterSpecificSelect-aZ9P5CkH.js";import"./cluster-members-CG6XHzn4.js";import"./ClusterMemberRichChip-h3WaiYeI.js";import"./ClusterMemberMemoryUsage-UO8J-hw2.js";import"./Meter-VGEmUMfL.js";const ie=()=>{const{data:s=[]}=$();return U({queryKey:[B.settings,B.cluster],queryFn:async()=>H(s),enabled:s.length>0,retry:!1})},ue=({initialValue:s,configField:a,onSubmit:n,onCancel:c})=>{const[o,r]=j.useState(s?s==="true":String(a.default)==="true"),d=String(a.default)!==String(o),l=()=>{r(String(a.default)==="true")},i=a.key.split(".")?.pop()?.replaceAll("_"," ")??a.key;return e.jsxs(e.Fragment,{children:[e.jsx(t.Input,{label:i,id:a.key,wrapperClassName:"input-wrapper",type:"checkbox",checked:o,onChange:p=>{r(p.target.checked)},help:e.jsx(L,{description:a.longdesc})}),e.jsx(t.Button,{appearance:"base",onClick:c,children:"Cancel"}),e.jsx(t.Button,{appearance:"positive",onClick:()=>{n(o)},children:"Save"}),d&&e.jsxs(t.Button,{className:"reset-button",appearance:"base",onClick:l,hasIcon:!0,children:[e.jsx(t.Icon,{name:"restart",className:"flip-horizontally"}),e.jsx("span",{children:"Reset to default"})]})]})},de=({initialValue:s,configField:a,onSubmit:n,onDelete:c,onCancel:o})=>{const[r,d]=j.useState(s),l=()=>a.type==="integer"?"number":"text",i=!a.isUserDefined&&String(a.default)!==String(r),p=()=>{d(a.default)};return e.jsxs(t.Form,{onSubmit:m=>{m.preventDefault(),n(r)},children:[e.jsx(t.Input,{type:"submit",hidden:!0,value:"Hidden input"}),e.jsx(t.Input,{"aria-label":a.key,id:a.key,wrapperClassName:"input-wrapper",type:l(),value:a.type==="bool"?void 0:String(r),onChange:m=>{d(m.target.value)},help:e.jsx(L,{description:a.longdesc})}),e.jsx(t.Button,{appearance:"base",onClick:o,children:"Cancel"}),e.jsx(t.Button,{appearance:"positive",type:"submit",children:"Save"}),a.isUserDefined&&e.jsxs(t.Button,{appearance:"base",hasIcon:!0,className:"delete-button",type:"button",onClick:()=>{c(a.key)},children:[e.jsx(t.Icon,{name:"delete"}),e.jsx("span",{children:"Delete"})]}),i&&e.jsxs(t.Button,{className:"reset-button",appearance:"base",onClick:p,hasIcon:!0,children:[e.jsx(t.Icon,{name:"restart",className:"flip-horizontally"}),e.jsx("span",{children:"Reset to default"})]})]})},pe=({isSet:s,configField:a,onSubmit:n,onCancel:c})=>{const[o,r]=j.useState(!s),[d,l]=j.useState(!1),[i,p]=j.useState("");return e.jsxs(t.Form,{onSubmit:m=>{m.preventDefault(),n(i)},children:[e.jsx(t.Input,{type:"submit",hidden:!0,value:"Hidden input"}),o&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"input-row",children:[e.jsx(t.Input,{"aria-label":a.key,id:a.key,wrapperClassName:"input-wrapper",type:d?"text":"password",value:i,onChange:m=>{p(m.target.value)},help:e.jsx(L,{description:a.longdesc})}),e.jsx(t.Button,{appearance:"base",hasIcon:!0,onClick:()=>{l(m=>!m)},"aria-label":"toggle password visibility",children:e.jsx(t.Icon,{name:d?"hide":"show"})})]}),e.jsx(t.Button,{appearance:"base",onClick:c,children:"Cancel"}),e.jsx(t.Button,{appearance:"positive",onClick:()=>{n(i)},children:"Save"})]}),!o&&e.jsxs(e.Fragment,{children:[e.jsx(t.Button,{appearance:"base",onClick:c,children:"Cancel"}),e.jsx(t.Button,{onClick:()=>{r(!0)},children:"Change"}),e.jsx(t.Button,{appearance:"negative",onClick:()=>{n("")},children:"Remove"})]})]})},me=({configField:s})=>{const[a,n]=j.useState(!1),{data:c=[]}=_(),[o,r]=j.useState(O()||""),d=t.useToastNotification(),l=[{label:"All projects",value:q},...c.map(y=>({label:y.name,value:y.name}))],i=String(s.default)!==String(o),p=()=>{z(o);const y=e.jsx(T,{bold:!0,type:"setting",value:s.key});d.success(e.jsxs(e.Fragment,{children:["Setting ",y," updated."]})),n(!1)},m=()=>{r(s.default||"")},S=()=>{r(O()||""),n(!1)};return j.useEffect(()=>{if(!a){r(O()||"");return}r(Q(c))},[a,c]),e.jsxs(e.Fragment,{children:[a&&e.jsxs(t.Form,{onSubmit:y=>{y.preventDefault(),p()},children:[e.jsx(t.Select,{name:`${s.key}-select`,"aria-label":s.key,options:l,value:o,onChange:y=>{r(y.target.value)}}),e.jsx(t.Button,{appearance:"base",onClick:S,children:"Cancel"}),e.jsx(t.Button,{appearance:"positive",type:"submit",children:"Save"}),i&&e.jsxs(t.Button,{className:"reset-button",appearance:"base",onClick:m,hasIcon:!0,children:[e.jsx(t.Icon,{name:"restart",className:"flip-horizontally"}),e.jsx("span",{children:"Reset to default"})]})]}),!a&&e.jsxs(t.Button,{appearance:"base",className:"readmode-button u-no-margin",onClick:()=>{n(!0)},hasIcon:!0,children:[e.jsx("div",{className:"readmode-value u-truncate",children:o===q?"All projects":o||G(c)}),e.jsx(t.Icon,{name:"edit",className:"edit-icon"})]})]})},he=({disableReason:s,initialValue:a,configField:n,onSubmit:c,onCancel:o,readonly:r=!1,toggleReadOnly:d})=>{const[l,i]=j.useState(a),{data:p=[]}=$(),m=p.map(h=>h.server_name),S=n.key==="core.syslog_socket",y=Object.values(l).some(h=>h!==n.default),C=()=>{const h={};m.forEach(k=>{h[k]=n.default}),i(h)},f=e.jsx(L,{description:n.longdesc});return e.jsxs(t.Form,{onSubmit:h=>{h.preventDefault(),c(l)},children:[S?e.jsx(ce,{"aria-label":n.key,classname:r?"read-only":"",disableReason:s,id:n.key,values:l,isReadOnly:r,onChange:h=>{i(h)},toggleReadOnly:d,helpText:f,options:m.map(h=>({memberName:h,values:["true","false"]})),isDefaultSpecific:Object.values(l).some(h=>h!==Object.values(l)[0])}):e.jsx(le,{"aria-label":n.key,classname:r?"read-only":"",disableReason:s,id:n.key,values:l,isReadOnly:r,onChange:h=>{i(h)},memberNames:m,toggleReadOnly:d,helpText:f}),!r&&e.jsxs(e.Fragment,{children:[e.jsx(t.Button,{appearance:"base",onClick:o,children:"Cancel"}),e.jsx(t.Button,{appearance:"positive",type:"submit",children:"Save"}),y&&e.jsxs(t.Button,{className:"reset-button",appearance:"base",type:"button",onClick:C,hasIcon:!0,children:[e.jsx(t.Icon,{name:"restart",className:"flip-horizontally"}),e.jsx("span",{children:"Reset to default"})]})]})]})},ye=({configField:s,onDelete:a,value:n,clusteredValue:c})=>{const{isRestricted:o}=Y(),[r,d]=j.useState(!1),l=t.useNotify(),i=t.useToastNotification(),p=J(),{canEditServerConfiguration:m}=A(),S=X(),y=j.useRef(null),C=s.key==="core.trust_password",f=s.key==="loki.auth.password",h=C||f,k=S&&s.scope==="local",M=s.key==="user.ui_theme",R=s.key==="user.ui_login_project",D=e.jsx(T,{bold:!0,type:"setting",value:s.key}),N=u=>{(k||typeof u=="object"?Z(u,s.key):V({[s.key]:String(u)})).then(()=>{i.success(e.jsxs(e.Fragment,{children:["Setting ",D," updated."]})),d(!1)}).catch(g=>{l.failure("Setting update failed",g,D)}).finally(()=>{p.invalidateQueries({queryKey:[B.settings]}),p.invalidateQueries({queryKey:[B.settings,B.cluster]})})},v=()=>{d(!1)},w=()=>h?e.jsx("em",{children:n?"set":"not set"}):typeof n=="boolean"?String(n):n||"-";return j.useEffect(()=>{r&&y.current?.scrollIntoView({behavior:"smooth",block:"nearest",inline:"nearest"})},[r]),k?e.jsx(he,{initialValue:c??{},disableReason:m()?void 0:"You do not have permission to edit server configuration",configField:s,onSubmit:N,onCancel:v,readonly:!r,toggleReadOnly:()=>{d(!0)}},`${JSON.stringify(c)}-${r}`):M?e.jsx(t.ThemeSwitcher,{}):R?e.jsx("div",{ref:y,children:e.jsx(me,{configField:s})}):e.jsxs(e.Fragment,{children:[r&&e.jsxs("div",{ref:y,children:[h&&e.jsx(pe,{isSet:!!n,configField:s,onSubmit:N,onCancel:v}),!h&&e.jsx(e.Fragment,{children:s.type==="bool"?e.jsx(ue,{initialValue:n,configField:s,onSubmit:N,onCancel:v}):e.jsx(de,{initialValue:n??"",configField:s,onSubmit:N,onDelete:a,onCancel:v})})]}),!r&&e.jsx(e.Fragment,{children:o?e.jsx("span",{children:n??"-"}):e.jsxs(t.Button,{appearance:"base",className:"readmode-button u-no-margin",onClick:()=>{d(!0)},hasIcon:!0,disabled:!m(),title:m()?"":"You do not have permission to edit server configuration",children:[e.jsx("div",{className:"readmode-value u-truncate",children:w()}),e.jsx(t.Icon,{name:"edit",className:"edit-icon"})]})})]})},K=(s,a,n,c,o)=>{const r=!Object.keys(o?.config??{}).some(l=>l===s.key),d=W(s,o);return{key:s.key,columns:[{content:a&&e.jsx("h2",{className:"p-heading--5",children:s.category}),role:"cell",className:"group","aria-label":"Group"},{content:e.jsxs("div",{className:"key-cell",children:[r?s.key:e.jsx("strong",{children:s.key}),e.jsx("p",{className:"p-text--small u-text--muted u-no-margin--bottom",children:e.jsx(L,{description:s.shortdesc})})]}),role:"rowheader",className:"key","aria-label":"Key"},{content:e.jsx(ye,{configField:s,value:d,clusteredValue:n,onDelete:c}),role:"cell","aria-label":"Value",className:"u-vertical-align-middle"}]}},je=(s,a,n,c)=>{const o=s[a],r=s.some(l=>`user.${o.key}`===l.key),d=r||!o.value||!o.key;return{key:o.id,columns:[{content:!1,role:"cell",className:"group","aria-label":"Group"},{content:e.jsx(t.PrefixedInput,{"aria-label":"new user key",id:`new-user-defined-key-${a}`,placeholder:"key",value:o.key,autoFocus:!0,error:r&&e.jsx(e.Fragment,{children:"Setting with this name already exists"}),immutableText:"user.",onChange:l=>{n(i=>{const p=[...i];return p[a]={...p[a],key:l.target.value},p})}}),role:"rowheader",className:"key","aria-label":"key"},{content:e.jsxs(t.Form,{onSubmit:l=>{l.preventDefault(),c(a)},children:[e.jsx(t.Input,{type:"submit",hidden:!0,value:"Hidden input",disabled:d}),e.jsx(t.Input,{"aria-label":"new user value",id:`new-user-defined-value-${a}`,placeholder:"Value",type:"text",value:o.value,onChange:l=>{n(i=>{const p=[...i];return p[a]={...p[a],value:l.target.value},p})}}),e.jsx(t.Button,{type:"button",appearance:"base",className:"button",onClick:()=>{n(l=>{const i=[...l];return i.splice(a,1),i})},children:"Cancel"}),e.jsx(t.Button,{type:"submit",disabled:d,appearance:"positive",children:"Save"})]}),role:"cell",className:"u-vertical-align-middle","aria-label":"Value"}]}},xe=s=>({key:"add-user-config-button",columns:[{content:!1,role:"cell",className:"group","aria-label":"Group"},{content:e.jsx(t.Button,{type:"button",onClick:()=>{s(a=>[...a,{key:"",value:"",default:"",category:"user",type:"string",isSaved:!1,isUserDefined:!0,id:F()}])},children:"Add user setting"}),role:"rowheader",className:"key"}]}),Le=()=>{const[s,a]=j.useState(""),[n,c]=j.useState([]),o=t.useNotify(),r=t.useToastNotification(),{hasMetadataConfiguration:d,settings:l,isSettingsLoading:i,settingsError:p}=ee(),{data:m=[]}=_();j.useEffect(()=>{n.length===0&&!i&&c(te(l?.config??{},m))},[l,m,i]);const S=u=>{const x=`user.${n[u].key}`,g=n[u].value,b=e.jsx(T,{bold:!0,type:"setting",value:x});V({[x]:g}).then(()=>{c(I=>{const E=[...I];return E[u].isSaved=!0,E[u].key=x,E[u].default=g??"",E}),r.success(e.jsxs(e.Fragment,{children:["Setting ",b," added."]}))}).catch(I=>{o.failure("Setting add failed",I,b)})},y=u=>{const x=n.findIndex(b=>b.key===u),g=e.jsx(T,{bold:!0,type:"setting",value:u});V({[u]:""}).then(()=>{c(b=>{const I=[...b];return I.splice(x,1),I}),r.success(e.jsxs(e.Fragment,{children:["Setting ",g," deleted."]}))}).catch(b=>{o.failure("Setting delete failed",b,g)})},C=u=>s?u.key.toLowerCase().includes(s.toLowerCase())||u.shortdesc?.toLowerCase().includes(s.toLowerCase()):!0,{canEditServerConfiguration:f}=A(),{data:h,isLoading:k}=U({queryKey:[B.configOptions],queryFn:async()=>ne(d)}),{data:M=[],error:R}=ie();if(R&&o.failure("Loading clustered settings failed",R),k||i)return e.jsx(t.Spinner,{className:"u-loader",text:"Loading...",isMainComponent:!0});p&&o.failure("Loading settings failed",p);const D=[{content:"Group",className:"group"},{content:"Key",className:"key"},{content:"Value"}],N=oe(h?.configs?.server??{});let v="";const w=N.filter(C).map(u=>{const x=se(M,u),g=v!==u.category;return v=u.category,K(u,g,x,y,l)});return n.filter(C).forEach((u,x)=>{const g=x===0,b=u.isSaved?K(u,g,{},y,l):je(n,x,c,S);w.push(b)}),s||w.push(xe(c)),e.jsx(e.Fragment,{children:e.jsxs(t.CustomLayout,{header:e.jsx(P,{children:e.jsxs(P.Left,{children:[e.jsx(P.Title,{children:e.jsx(re,{docPath:"/server/",title:"Learn more about server configuration",children:"Settings"})}),e.jsx(P.Search,{children:e.jsx(t.SearchBox,{name:"search-setting",type:"text",className:"u-no-margin--bottom",onChange:u=>{a(u)},placeholder:"Search",value:s})})]})}),contentClassName:"settings",children:[e.jsx(ae,{}),e.jsxs(t.Row,{children:[!f()&&e.jsx(t.Notification,{severity:"caution",title:"Restricted permissions",titleElement:"h2",children:"You do not have permission to view or edit server settings"}),!d&&f()&&e.jsx(t.Notification,{severity:"information",title:"Get more server settings",titleElement:"h2",children:"Update to LXD v5.19.0 or later to access more server settings"}),f()&&e.jsx(t.ScrollableTable,{dependencies:[o.notification,w],tableId:"settings-table",belowIds:["status-bar"],children:e.jsx(t.MainTable,{id:"settings-table",headers:D,rows:w,emptyStateMsg:"No data to display"})})]})]})})};export{Le as default};