2018-09-11 17:46:14 +00:00
< template >
2018-11-06 15:53:32 +00:00
< div class = "loader-container" v -bind : class = "{ 'is-loading': loading}" >
2018-09-18 06:10:16 +00:00
< div class = "card" >
< header class = "card-header" >
< p class = "card-header-title" >
Edit Namespace
< / p >
< / header >
< div class = "card-content" >
< div class = "content" >
< form @submit.prevent ="submit()" >
< div class = "field" >
< label class = "label" for = "namespacetext" > Namespace Name < / label >
< div class = "control" >
2018-12-25 15:03:51 +00:00
< input v -focus : class = "{ 'disabled': loading}" :disabled ="loading" class = "input" type = "text" id = "namespacetext" placeholder = "The namespace text is here..." v-model ="namespace.name" >
2018-09-18 06:10:16 +00:00
< / div >
2018-09-11 17:46:14 +00:00
< / div >
2018-09-18 06:10:16 +00:00
< div class = "field" >
< label class = "label" for = "namespacedescription" > Description < / label >
< div class = "control" >
< textarea : class = "{ 'disabled': loading}" :disabled ="loading" class = "textarea" placeholder = "The namespaces description goes here..." id = "namespacedescription" v-model ="namespace.description" > < / textarea >
< / div >
< / div >
< / form >
< div class = "columns bigbuttons" >
< div class = "column" >
2018-12-25 15:03:51 +00:00
< button @click ="submit()" class = "button is-primary is-fullwidth" : class = "{ 'is-loading': loading}" >
2018-09-18 06:10:16 +00:00
Save
< / button >
< / div >
< div class = "column is-1" >
< button @ click = "showDeleteModal = true" class = "button is-danger is-fullwidth" : class = "{ 'is-loading': loading}" >
< span class = "icon is-small" >
< icon icon = "trash-alt" / >
< / span >
< / button >
2018-09-11 17:46:14 +00:00
< / div >
< / div >
2018-09-18 06:10:16 +00:00
< / div >
< / div >
< / div >
2018-09-18 17:07:09 +00:00
< manageusers :id ="namespace.id" type = "namespace" :userIsAdmin ="userIsAdmin" / >
2018-09-18 06:10:16 +00:00
2018-09-18 17:07:09 +00:00
< manageteams :id ="namespace.id" type = "namespace" :userIsAdmin ="userIsAdmin" / >
2018-09-12 06:23:52 +00:00
< modal
v - if = "showDeleteModal"
@ close = "showDeleteModal = false"
v - on : submit = "deleteNamespace()" >
< span slot = "header" > Delete the namespace < / span >
< p slot = "text" > Are you sure you want to delete this namespace and all of its contents ?
< br / > This includes lists & tasks and < b > CANNOT BE UNDONE ! < / b > < / p >
< / modal >
2018-09-11 17:46:14 +00:00
< / div >
< / template >
< script >
import auth from '../../auth'
import router from '../../router'
import { HTTP } from '../../http-common'
import message from '../../message'
2018-09-18 17:07:09 +00:00
import manageusers from '../sharing/user'
import manageteams from '../sharing/team'
2018-09-11 17:46:14 +00:00
export default {
name : "EditNamespace" ,
data ( ) {
return {
namespace : { title : '' , description : '' } ,
error : '' ,
loading : false ,
2018-09-12 06:23:52 +00:00
showDeleteModal : false ,
2018-09-18 06:10:16 +00:00
user : auth . user ,
userIsAdmin : false ,
2018-09-11 17:46:14 +00:00
}
} ,
2018-09-18 17:07:09 +00:00
components : {
manageusers ,
manageteams ,
} ,
2018-09-11 17:46:14 +00:00
beforeMount ( ) {
// Check if the user is already logged in, if so, redirect him to the homepage
if ( ! auth . user . authenticated ) {
router . push ( { name : 'home' } )
}
2018-09-18 17:07:09 +00:00
this . namespace . id = this . $route . params . id
2018-09-11 17:46:14 +00:00
} ,
created ( ) {
this . loadNamespace ( )
} ,
watch : {
// call again the method if the route changes
'$route' : 'loadNamespace'
} ,
methods : {
loadNamespace ( ) {
2018-11-27 10:23:50 +00:00
const cancel = message . setLoading ( this )
2018-09-11 17:46:14 +00:00
HTTP . get ( ` namespaces/ ` + this . $route . params . id , { headers : { 'Authorization' : 'Bearer ' + localStorage . getItem ( 'token' ) } } )
. then ( response => {
this . $set ( this , 'namespace' , response . data )
2018-09-18 06:10:16 +00:00
if ( response . data . owner . id === this . user . infos . id ) {
this . userIsAdmin = true
}
2018-11-27 10:23:50 +00:00
cancel ( )
2018-09-11 17:46:14 +00:00
} )
. catch ( e => {
2018-11-28 09:11:26 +00:00
cancel ( )
this . handleError ( e )
2018-09-11 17:46:14 +00:00
} )
} ,
submit ( ) {
2018-11-27 10:23:50 +00:00
const cancel = message . setLoading ( this )
2018-09-11 17:46:14 +00:00
HTTP . post ( ` namespaces/ ` + this . $route . params . id , this . namespace , { headers : { 'Authorization' : 'Bearer ' + localStorage . getItem ( 'token' ) } } )
. then ( response => {
// Update the namespace in the parent
for ( const n in this . $parent . namespaces ) {
if ( this . $parent . namespaces [ n ] . id === response . data . id ) {
response . data . lists = this . $parent . namespaces [ n ] . lists
this . $set ( this . $parent . namespaces , n , response . data )
}
}
this . handleSuccess ( { message : 'The namespace was successfully updated.' } )
2018-11-27 10:23:50 +00:00
cancel ( )
2018-09-11 17:46:14 +00:00
} )
. catch ( e => {
2018-11-28 09:11:26 +00:00
cancel ( )
this . handleError ( e )
2018-09-11 17:46:14 +00:00
} )
} ,
2018-09-11 18:16:08 +00:00
deleteNamespace ( ) {
2018-11-27 10:23:50 +00:00
const cancel = message . setLoading ( this )
2018-09-11 18:16:08 +00:00
HTTP . delete ( ` namespaces/ ` + this . $route . params . id , { headers : { 'Authorization' : 'Bearer ' + localStorage . getItem ( 'token' ) } } )
. then ( ( ) => {
this . handleSuccess ( { message : 'The namespace was successfully deleted.' } )
2018-11-27 10:23:50 +00:00
cancel ( )
router . push ( { name : 'home' } )
2018-09-11 18:16:08 +00:00
} )
. catch ( e => {
2018-11-28 09:11:26 +00:00
cancel ( )
this . handleError ( e )
2018-09-11 18:16:08 +00:00
} )
} ,
2018-09-11 17:46:14 +00:00
handleError ( e ) {
message . error ( e , this )
} ,
handleSuccess ( e ) {
message . success ( e , this )
}
}
}
< / script >
< style scoped >
2018-09-11 18:16:08 +00:00
. bigbuttons {
margin - top : 0.5 rem ;
}
2018-09-11 17:46:14 +00:00
< / style >