summaryrefslogblamecommitdiffstats
path: root/webapp/src/components/GroupModuleClientView.vue
blob: 9534274049830a56df427e55e676f4135ff50016 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13












                                   





















































































                                                                                                                                                                       






                                
                                

            




























                                                        






                                                                   


               
        
<i18n>
{
  "en": {
  },
  "de": {
  }
}
</i18n>

<template>
  <div>
    <v-subheader>Info</v-subheader>
    <v-card>
      <v-card-text>
        <v-layout wrap>
          <v-flex sm6 xs12 order-xs2 order-sm1>
            <v-text-field v-if="editMode" hide-details class="info-input" label="Name" color="primary" v-model="info.name"></v-text-field>
            <div v-else class="info-input">
              <div class="body-2">Name</div>
              {{ client.name || '-' }}
            </div>
          </v-flex>
          <v-flex sm6 xs12 order-xs1 order-sm2 class="text-xs-right">
            <div class="info-input">
              <v-btn v-if="!editMode" color="primary" flat @click="editInfo">
                <v-icon left>create</v-icon>Edit
              </v-btn>
              <div v-else>
                <v-btn color="primary" flat @click="editMode = false">Cancel</v-btn>
                <v-btn color="primary" @click="saveInfo">
                  <v-icon left>save</v-icon>Save
                </v-btn>
              </div>
            </div>
          </v-flex>
        </v-layout>
        <v-layout wrap>
          <v-flex sm6 xs12>
            <v-textarea v-if="editMode" rows="1" auto-grow hide-details class="info-input" label="Description" color="primary" v-model="info.description"></v-textarea>
            <div v-else class="info-input">
              <div class="body-2">Description</div>
              <pre>{{ client.description || '-' }}</pre>
            </div>
          </v-flex>
          <v-flex sm6 xs12>
            <v-autocomplete
              v-if="editMode"
              class="info-input"
              :items="$store.state.groups.groupList"
              v-model="groupIds"
              hide-details
              offset-y
              label="Parents"
              color="primary"
              multiple
            >
              <template slot="selection" slot-scope="data">
                <v-chip small :selected="data.selected" @input="removeGroup(data.item.value)" close>
                  {{ data.item.text }}
                </v-chip>
              </template>
            </v-autocomplete>
            <div v-else class="info-input">
              <div class="body-2">Groups</div>
              <template v-if="client.groups.length > 0">
                <v-chip v-for="group in client.groups" :key="group.id" small>
                  {{ group.name || group.id }}
                </v-chip>
              </template>
              <span v-else>-</span>
            </div>
          </v-flex>
        </v-layout>
        <v-layout wrap>
          <v-flex sm6 xs12>
            <v-text-field v-if="editMode" hide-details class="info-input" label="IP Address" color="primary" v-model="info.ip"></v-text-field>
            <div v-else class="info-input">
              <div class="body-2">IP Address</div>
              {{ client.ip || '-' }}
            </div>
          </v-flex>
          <v-flex sm6 xs12>
            <v-text-field v-if="editMode" hide-details class="info-input" label="MAC Address" color="primary" v-model="info.mac"></v-text-field>
            <div v-else class="info-input">
              <div class="body-2">MAC Address</div>
              {{ client.mac || '-' }}
            </div>
          </v-flex>
        </v-layout>
        <v-layout wrap>
          <v-flex sm6 xs12>
            <v-text-field v-if="editMode" hide-details class="info-input" label="UUID" color="primary" v-model="info.uuid"></v-text-field>
            <div v-else class="info-input">
              <div class="body-2">UUID</div>
              {{ client.uuid || '-' }}
            </div>
          </v-flex>
        </v-layout>
      </v-card-text>
    </v-card>
  </div>
</template>

<script>
export default {
  name: 'GroupModuleClientView',
  props: ['tabIndex', 'client'],
  data () {
    return {
      editMode: false,
      info: {
        name: '',
        description: '',
        ip: '',
        mac: '',
        uuid: '',
        groupIds: []
      }
    }
  },
  methods: {
    removeGroup (id) {
      this.groupIds.splice(this.groupIds.indexOf(id), 1)
    },
    editInfo () {
      this.editMode = true
      this.info.name = this.client.name
      this.info.description = this.client.description
      this.groupIds = this.client.groups.map(x => x.id)
    },
    saveInfo () {
      this.$store.dispatch('groups/saveClient', {
        id: this.client.id,
        info: this.info,
        groupIds: this.groupIds,
        tabIndex: this.tabIndex
      })
      this.editMode = false
    }
  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
.info-input {
  margin: 10px;
}
</style>