summaryrefslogtreecommitdiff
path: root/app/src/components/Panel.vue
blob: eb92af7a1c8fac9c31cbaf19840f78b120faf2ac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
<template>
  <form @submit.prevent="connect">
    <div v-show="apiMessage.type" class="callout" :class="{ success: apiMessage.type === 'success', alert: apiMessage.type === 'error' }">
      <p>{{ apiMessage.msg }}</p>
    </div>

    <div class="grid-x">
      <div class="cell">
        <label>
          Server <input type="text" :value="modelValue.server" required @input="emit('server', $event.target.value)">
        </label>
      </div>
    </div>
    <div class="grid-x">
      <div class="cell">
        <label>
          Port
          <Select
            :model-value="modelValue.port"
            required
            :options="ports"
            :config="{ tags: true }"
            @update:modelValue="(value) => emit('port', value)"
          />
        </label>
      </div>
    </div>
    <label>
      Username <input type="text" :value="modelValue.username" @input="emit('username', $event.target.value)">
    </label>
    <label>
      Passwort <input type="password" :value="modelValue.password" @input="emit('password', $event.target.value)">
    </label>
    <div class="grid-x">
      <div class="cell">
        <input :id="`tls-${uid}`" type="checkbox" :checked="modelValue.tls" @input="emit('tls', $event.target.checked)">
        <label :for="`tls-${uid}`">TLS enabled</label>
      </div>
    </div>
    <button class="button" type="submit">
      Connect
    </button>
  </form>
</template>

<script>
import Select from './Select';
import dynamicModelObjectEmit from '~/mixins/dynamicModelObjectEmit';

export default {
  components: {
    Select,
  },

  mixins: [
    dynamicModelObjectEmit,
  ],

  emits: ['connect'],

  data () {
    return {
      uid: crypto.getRandomValues(new Uint8Array(1)),
      apiMessage: {
        type: '',
        msg: '',
      },

      ports: [...new Set([
        143,
        993,
        Number(this.modelValue.port),
      ])].map((port) => ({ id: port, text: port })),
    };
  },

  mounted () {
    this.$electron.ipcRenderer.on('imap:connect:reply', (event, success) => {
      this.apiMessage = {
        type: 'success',
        msg: 'Connected!',
      };
    });

    this.$electron.ipcRenderer.on('imap:connect:error', (event, error) => {
      this.apiMessage = {
        type: 'error',
        msg: error,
      };
    });
  },

  methods: {
    connect () {
      this.$electron.ipcRenderer.send('imap:connect', JSON.parse(JSON.stringify(this.modelValue)));
      this.$emit('connect');
    },
  },
};
</script>

<style lang="scss">
</style>