PageSourceSearch

https://odmu.edu.ua/assets/Tenants-D6AfvAae.js

js odmu.edu.ua collected 2026-10-02 09:55:55 UTC 16,493 bytes, 8 lines download raw bytes

1import{T as C}from"./TooltipIcon-CnUZlYtq.js";import{_ as k,ab as x,e as m,w as i,b as d,h as V,g as U,ac as v,o as r,c as D,a as y,V as T,f as c,t as h,E as A}from"./index-CFh73YDE.js";import{_ as w}from"./CustomDialog-BZTc6T9V.js";import{a as N,V as I,m as _}from"./moment-BVkLcFz5.js";import{V as f,a as g,b as $,f as B}from"./VCard-C3KEYVhl.js";import{V as E}from"./VAutocomplete-CV0jRV25.js";import{V as O}from"./VSwitch-CNc97hlJ.js";import{V as q}from"./VTextarea-B7Ab4r8c.js";import{V as L}from"./ValidationDialog-C5prvyHs.js";import{V as j}from"./VDataTableServer-C3gnlJ2m.js";import"./LanguageSelectorField-CLMFchhk.js";import"./VDialog-D_BujYTp.js";import"./MessageText-DJ-lb5Z-.js";import"./ssrBoot-t3xB8Hwf.js";const P={name:"TenantDetailsDialog",components:{CustomDialog:w,VersionInformation:I,ValidationResultStatus:N},emits:["update:modelValue"],props:{modelValue:Object,debug:{type:Boolean,default:!1}},data:()=>({clients:[],appStore:x()}),computed:{model:{get:function(){return this.modelValue},set:function(t){this.$emit("update:modelValue",t)}},configText:{get(){return!this.model||!this.model.data||!this.model.data.config?"":typeof this.model.data.config=="string"?this.model.data.config:JSON.stringify(this.model.data.config,null,2)},set(t){if(this.model){this.model.data||(this.model.data={});try{this.model.data.config=t?JSON.parse(t):null}catch{this.model.data.config=t}}}}},mounted(){this.loadClients()},methods:{loadClients(){this.graphQL_query("query getClients { clients { id, latestVersion { shortName } } }",this.debug).then(t=>{t&&t.data&&t.data.data&&t.data.data.clients&&(this.clients=t.data.data.clients.map(e=>{var n,l;return{id:e.id,shortName:typeof((n=e.latestVersion)==null?void 0:n.shortName)=="object"?this.i18nString(e.latestVersion.shortName):(l=e.latestVersion)==null?void 0:l.shortName}}))})}}};function M(t,e,n,l,o,a){const u=v("VersionInformation"),b=v("ValidationResultStatus"),p=v("CustomDialog");return a.model?(r(),m(p,{key:0,modelValue:a.model,"onUpdate:modelValue":e[6]||(e[6]=s=>a.model=s),debug:n.debug},{footer:i(()=>[d(b,{modelValue:a.model.validationResult,"onUpdate:modelValue":e[5]||(e[5]=s=>a.model.validationResult=s)},null,8,["modelValue"])]),default:i(()=>[d($,null,{default:i(()=>[a.model.id?(r(),m(f,{key:0,"no-gutters":""},{default:i(()=>[d(g,{cols:"12",md:"6"},{default:i(()=>[d(u,{modelValue:a.model,"onUpdate:modelValue":e[0]||(e[0]=s=>a.model=s)},null,8,["modelValue"])]),_:1})]),_:1})):V("",!0),d(f,null,{default:i(()=>[d(g,{cols:"12"},{default:i(()=>[d(U,{modelValue:a.model.data.slug,"onUpdate:modelValue":e[1]||(e[1]=s=>a.model.data.slug=s),label:t.$gettext("Slug (unique identifier)"),disabled:a.model.id!==void 0,"prepend-inner-icon":"mdi-link-variant",variant:"underlined","hide-details":"",class:"mb-4"},null,8,["modelValue","label","disabled"])]),_:1})]),_:1}),d(f,null,{default:i(()=>[d(g,{cols:"12"},{default:i(()=>[d(E,{modelValue:a.model.data.clientId,"onUpdate:modelValue":e[2]||(e[2]=s=>a.model.data.clientId=s),items:t.clients,"item-title":"shortName","item-value":"id",label:t.$gettext("Client"),"prepend-inner-icon":"mdi-domain",variant:"underlined","hide-details":"",class:"mb-4",disabled:a.model.id!==void 0,clearable:""},null,8,["modelValue","items","label","disabled"])]),_:1})]),_:1}),d(f,null,{default:i(()=>[d(g,{cols:"12"},{default:i(()=>[d(O,{modelValue:a.model.data.isActive,"onUpdate:modelValue":e[3]||(e[3]=s=>a.model.data.isActive=s),label:t.$gettext("Active"),"prepend-inner-icon":"mdi-check-circle-outline",color:"primary","hide-details":"",class:"mb-4"},null,8,["modelValue","label"])]),_:1})]),_:1}),d(f,null,{default:i(()=>[d(g,{cols:"12"},{default:i(()=>[d(q,{modelValue:a.configText,"onUpdate:modelValue":e[4]||(e[4]=s=>a.configText=s),label:t.$gettext("Configuration (JSON)"),"prepend-inner-icon":"mdi-cog-outline",variant:"underlined","hide-details":"",class:"mb-4",rows:"5"},null,8,["modelValue","label"])]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue","debug"])):V("",!0)}const S=k(P,[["render",M]]),Q={name:"TenantManipulationDialog",emits:["created","updated","update:modelValue"],components:{ValidationDialog:L,TenantDetailsDialog:S},data:()=>({dialogData:void 0,validationDialogData:void 0,loading:!1}),props:{modelValue:Object,debug:{type:Boolean,default:!1}},computed:{model:{get:function(){return this.modelValue},set:function(t){this.$emit("update:modelValue",t)}}},watch:{model:function(t){t!=null&&(this.dialogData=this.getDialogData(t))}},methods:{getDialogData(t){if(t==null)return;let e={show:this.model!==void 0&&this.model!==null,actions:[{title:this.$pgettext("verb","Export"),event:"export",color:"warning",type:"icon",icon:"mdi-file-download"},{title:this.$pgettext("verb","Import"),event:"import",color:"error",type:"icon",icon:"mdi-file-upload"},{title:this.$pgettext("verb","Validate"),event:"validate",color:"success",icon:"mdi-check-all"}]};return t&&t.id?(e.title=this.$gettext("Edit tenant"),e.createdAt=t.createdAt,e.createdBy=t.createdBy,e.id=t.
1id,t.latestVersion&&(e.version={id:t.latestVersion.id,createdAt:t.latestVersion.createdAt,createdBy:t.latestVersion.createdBy,versionNumber:t.latestVersion.versionNumber},e.validationResult=t.latestVersion.validationResult),e.data={slug:t.latestVersion?t.latestVersion.slug:null,clientId:t.latestVersion&&t.latestVersion.client?t.latestVersion.client.id:null,isActive:t.latestVersion?t.latestVersion.isActive:!0,config:t.latestVersion?t.latestVersion.config:null},e.actions.push({title:this.$pgettext("verb","Save changes"),icon:"mdi-content-save-outline",event:"updateTenant",color:"primary darken-1"})):(e.title=this.$gettext("Create tenant"),e.data={slug:"",clientId:null,isActive:!0,config:null},e.actions.push({title:this.$pgettext("verb","Create"),icon:"mdi-content-save-outline",event:"createTenant",color:"primary darken-1"})),e.actions.push({title:this.$gettext("Cancel"),event:"close",icon:"mdi-close",color:"secondary darken-1"}),e},closeDialog(){this.dialogData=void 0,this.closeValidationDialog(),this.$emit("update:modelValue",void 0)},closeValidationDialog(){this.validationDialogData=void 0},validateTenantContent(){return this.debug&&console.log("Sending data for validation..."),this.graphQL_query(`
2            mutation validateTenantContent($data:GenericScalar!){
3              validateTenantContent(data:$data){
4                result,
5                success,
6                message
7              }
8            }`,this.debug,{data:this.dialogData.data})},onValidateTenantData(){this.validateTenantContent().then(t=>{t.data&&t.data.data&&t.data.data.validateTenantContent&&(t.data.data.validateTenantContent.message&&this.showMessage({text:t.data.data.validateTenantContent.message,color:t.data.data.validateTenantContent.success?"success":"error",timeout:t.data.data.validateTenantContent.success?1e3:-1}),this.dialogData.validationResult=t.data.data.validateTenantContent.result)})},onExportTenantData(t){this.debug&&console.log("Exporting tenant..."),this.debug&&console.log(t);let e=this.dialogData.data,n=JSON.stringify([e]),l=`${this.$gettext("Tenant")} ${e.slug}@${_().format("YYYY-MM-DDTHHmmss")}.json`,o=window.URL.createObjectURL(new Blob([n])),a=document.createElement("a");a.href=o,a.setAttribute("download",l),document.body.appendChild(a),a.click()},onImportTenantData(){let t=document.createElement("input");t.type="file",this.debug&&console.log("Importing tenant data..."),t.onchange=()=>{let n=Array.from(t.files)[0],l=new FileReader,o=this;l.onload=function(a){let u=JSON.parse(a.target.result);o.dialogData.data=u[0]},l.readAsText(n)},t.click()},onBeforeCreateTenant(){this.validateTenantContent().then(t=>{this.debug&&console.log("...received tenant validation result",t.data),t.data&&t.data.data&&t.data.data.validateTenantContent&&(this.validationResult=t.data.data.validateTenantContent.result,this.validationResult&&this.validationResult.length>0?this.validationDialogData={show:!0,title:this.$gettext("Validation errors found"),element:this,debug:this.debug,data:{validationResult:this.validationResult,tenantData:this.dialogData.data},actions:[{title:this.$pgettext("verb","Create anyway"),event:"createTenant",color:"red darken-1"},{title:this.$gettext("Return to editing"),event:"cancel",color:"blue darken-1"}]}:this.onCreateTenant())})},onCreateTenant(){this.loading=!0,this.graphQL_query("mutation createTenant(  $data: GenericScalar!) {  createTenant(data: $data) {    result {      id,      slug,      client{id, latestVersion{shortName}},      isActive,      config    },    success,    message  }}",this.debug,{data:this.dialogData.data}).then(t=>{if(t.data&&t.data.data&&t.data.data.createTenant){let e=t.data.data.createTenant;e.success&&e.result&&(this.$emit("created",e.result),this.closeDialog()),e.message&&this.showMessage({text:e.message,color:e.success?"success":"error",timeout:e.success?2e3:-1})}}).finally(()=>{this.loading=!1})},onBeforeUpdateTenant(){this.validateTenantContent().then(t=>{this.debug&&console.log("...received tenant validation result",t.data),t.data&&t.data.data&&t.data.data.validateTenantContent&&(this.validationResult=t.data.data.validateTenantContent.result,this.validationResult&&this.validationResult.length>0?this.validationDialogData={show:!0,title:this.$gettext("Validation errors found"),element:this,debug:this.debug,data:{validationResult:this.validationResult,tenantData:this.dialogData.data},actions:[{title:this.$pgettext("verb","Save anyway"),event:"updateTenant",color:"red dar
8ken-1"},{title:this.$gettext("Return to editing"),event:"cancel",color:"blue darken-1"}]}:this.onUpdateTenant())})},onUpdateTenant(){this.loading=!0,this.graphQL_query("mutation updateTenant(  $id: UUID!,  $data: GenericScalar!) {  updateTenant(id: $id, data: $data) {    result {      id,      slug,      client{id, latestVersion{shortName}},      isActive,      config    },    success,    message  }}",this.debug,{id:this.dialogData.id,data:this.dialogData.data}).then(t=>{if(t.data&&t.data.data&&t.data.data.updateTenant){let e=t.data.data.updateTenant;e.success&&e.result&&(this.$emit("updated",e.result),this.closeDialog()),e.message&&this.showMessage({text:e.message,color:e.success?"success":"error",timeout:e.success?2e3:-1})}}).finally(()=>{this.loading=!1})}}};function G(t,e,n,l,o,a){const u=S,b=v("ValidationDialog");return r(),D("span",null,[d(u,{modelValue:t.dialogData,"onUpdate:modelValue":e[0]||(e[0]=p=>t.dialogData=p),onClose:a.closeDialog,onCancel:a.closeDialog,onValidate:a.onValidateTenantData,onExport:a.onExportTenantData,onImport:a.onImportTenantData,onCreateTenant:a.onBeforeCreateTenant,onUpdateTenant:a.onBeforeUpdateTenant},null,8,["modelValue","onClose","onCancel","onValidate","onExport","onImport","onCreateTenant","onUpdateTenant"]),d(b,{modelValue:t.validationDialogData,"onUpdate:modelValue":e[1]||(e[1]=p=>t.validationDialogData=p),loading:t.loading,onCancel:a.closeValidationDialog,onCreateTenant:a.onCreateTenant,onUpdateTenant:a.onUpdateTenant},null,8,["modelValue","loading","onCancel","onCreateTenant","onUpdateTenant"])])}const R=k(Q,[["render",G]]),J={class:"ml-4 font-weight-bold",style:{"font-size":"1.5rem"}},Y={key:0},H={key:1,class:"text-grey"},z={components:{TenantManipulationDialog:R},data:()=>({itemsPerPage:25,tenants:void 0,tenantCount:0,selectedTenant:void 0,appStore:x(),searchText:"",search:"",loading:!1,searchTimeoutObject:null,searchTimeoutTime:1e3}),computed:{headers(){return[{title:this.$gettext("Slug"),align:"start",sortable:!0,key:"slug"},{title:this.$gettext("Client"),align:"start",sortable:!1,key:"client"},{title:this.$gettext("Active"),align:"center",sortable:!1,key:"isActive"},{title:this.$gettext("Actions"),key:"actions",sortable:!1,align:"right"}]}},mounted(){this.getTenants()},methods:{getTenants(){this.loading=!0,this.graphQL_query('query getTenants { tenants { id, slug, client { id, latestVersion { shortName } }, isActive, config, permissions(request:["update","delete"]) }, permissions(request:["create_tenant"]) }',this.appStore.debug).then(t=>{t&&t.data&&t.data.data&&(t.data.data.tenants&&(this.tenants=t.data.data.tenants,this.tenantCount=this.tenants.length),t.data.data.permissions&&this.appStore.updateUserGlobalPermissions(t.data.data.permissions))}).finally(()=>{this.loading=!1})},onEditItem(t){this.loading=!0,this.graphQL_query("query getTenantDetails($id: UUID!) {  tenant(id: $id) {    id,    createdAt,    createdBy,    slug,    client{id, latestVersion{shortName}},    isActive,    config,    latestVersion{      id,      slug,      client{id, latestVersion{shortName}},      isActive,      config,      createdAt,      createdBy,      versionNumber,      validationResult    }  }}",this.appStore.debug,{id:t.id}).then(e=>{if(e&&e.data&&e.data.data){let n=e.data.data.tenant;n&&(this.selectedTenant={...n})}}).catch(e=>{console.error(e),this.showMessage({text:this.$gettext("Error getting tenant details"),color:"error",timeout:2e3})}).finally(()=>{this.loading=!1})},onDeleteItem(t){confirm(this.$gettext("Are you sure you want to deactivate this tenant?"))&&(this.loading=!0,this.graphQL_query("mutation deleteTenant($id: UUID!) {  deleteTenant(id: $id) {    success,    message  }}",this.appStore.debug,{id:t.id}).then(e=>{if(e&&e.data&&e.data.data){let n=e.data.data.deleteTenant;n.message&&this.showMessage({text:n.message,color:n.success?"success":"error",timeout:n.success?2e3:-1}),n.success&&this.getTenants()}}).finally(()=>{this.loading=!1}))},openCreateTenantDialog(){this.selectedTenant={show:!0}},onTenantCreated(){this.getTenants()},onTenantUpdated(){this.getTenants()},debounceTextSearch(){clearTimeout(this.searchTimeoutObject);let t=this.searchText.trim();this.searchTimeoutObject=setTimeout(()=>{this.search=t},this.searchTimeoutTime)}}},rt=Object.assign(z,{__name:"Tenants",setup(t){return(e,n)=>(r(),m(B,{class:"fill-height"},{default:i(()=>[d($,{fluid:""},{default:i(()=>[d(f,{"no-gutters":""},{default:i(()=>[d(g,{cols:"6"},{default:i(()=>[y("h1",J,[d(T,{size:"tiny"},{default:i(()=>[...n[3]||(n[3]=[c("mdi-domain",-1)])]),_:1}),c(" "+h(e.$gettext("Tenants")),1)])]),_:1}),d(g,{cols:"6",class:"align-right text-right"},{default:i(()=>[e.appStore.userHasGlobalPermission("create_tenant")?(r(),m(A,{key:0,onClick:e.openCreateTenantDialog,class:"text-none mx-2"},{default:i(()=>[d(T,{color:"primary"},{default:i(()=>[...n[4]||(n[4]=[c("mdi-plus",-1)])]),_:1}),c(" "+h(e.$gettext("Create a new tenant")),1)]),_:1},8,["onClick"])):V("",!0)]),_:1}),d(g,{cols:"12",class:"align-right text-right"},{default:i(()=>[d(U,{"prepend-inner-icon":"mdi-magnify",modelValue:e.searchText,"onUpdate:modelValue":n[0]||(n[0]=l=>e.searchText=l),label:e.$gettext("Search"),"single-line":"","hide-details":"",variant:"underlined",class:"mt-2 mb-0",style:{width:"200px",display:"inline-block"},onInput:e.debounceTextSearch,clearable:""},null,8,["modelValue","label","onInput"])]),_:1})]),_:1})]),_:1}),d(j,{"items-per-page":e.itemsPerPage,"onUpdate:itemsPerPage":n[1]||(n[1]=l=>e.itemsPerPage=l),headers:e.headers,items:e.tenants,"items-length":e.tenantCount,"item-value":"id",class:"elevation-1",loading:e.loading,search:e.search},{"item.slug":i(({item:l})=>[y("strong",null,h(l.slug),1)]),"item.client":i(({item:l})=>{var o,a,u;return[l.client?(r(),D("span",Y,h(typeof((o=l.client.latestVersion)==null?void 0:o.shortName)=="object"?e.i18nString((a=l.client.latestVersion)==null?void 0:a.shortName):(u=l.client.latestVersion)==null?void 0:u.shortName),1)):(r(),D("span",H,"—"))]}),"item.isActive":i(({item:l})=>[l.isActive?(r(),m(T,{key:0,color:"success"},{default:i(()=>[...n[5]||(n[5]=[c("mdi-check-circle",-1)])]),_:1})):(r(),m(T,{key:1,color:"error"},{default:i(()=>[...n[6]||(n[6]=[c("mdi-close-circle",-1)])]),_:1}))]),"item.actions":i(({item:l})=>{var o,a;return[((o=l.permissions)==null?void 0:o.indexOf("update"))!==-1?(r(),m(C,{key:0,icon:"mdi-pencil",color:"warning",onClick:u=>e.onEditItem(l)},{default:i(()=>[c(h(e.$pgettext("tenant","Edit")),1)]),_:1},8,["onClick"])):V("",!0),((a=l.permissions)==null?void 0:a.indexOf("delete"))!==-1?(r(),m(C,{key:1,icon:"mdi-delete",color:"error",onClick:u=>e.onDeleteItem(l)},{default:i(()=>[c(h(e.$pgettext("tenant","Delete")),1)]),_:1},8,["onClick"])):V("",!0)]}),_:1},8,["items-per-page","headers","items","items-length","loading","search"]),d(R,{modelValue:e.selectedTenant,"onUpdate:modelValue":n[2]||(n[2]=l=>e.selectedTenant=l),onCreated:e.onTenantCreated,onUpdated:e.onTenantUpdated},null,8,["modelValue","onCreated","onUpdated"])]),_:1}))}});
8export{rt as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.