Skip to content
Snippets Groups Projects
S3KeyView.vue 2.24 KiB
Newer Older
  • Learn to ignore specific revisions
  • Daniel Göbel's avatar
    Daniel Göbel committed
    <script setup lang="ts">
    
    import type { S3Key } from "@/client/s3proxy";
    
    Daniel Göbel's avatar
    Daniel Göbel committed
    import type { Ref } from "vue";
    import { ref, watch } from "vue";
    import BootstrapIcon from "@/components/BootstrapIcon.vue";
    
    import DeleteModal from "@/components/modals/DeleteModal.vue";
    
    Daniel Göbel's avatar
    Daniel Göbel committed
    
    const props = defineProps<{
      s3key: S3Key;
      deletable: boolean;
      loading: boolean;
    }>();
    
    const emit = defineEmits<{
      (e: "delete-key", accessKey: string): void;
    }>();
    
    watch(
      () => props.s3key.access_key,
      () => {
        visibleSecret.value = false;
      }
    );
    
    const visibleSecret: Ref<boolean> = ref(false);
    
    function deleteKeyTrigger() {
      if (props.deletable) {
        emit("delete-key", props.s3key.access_key);
      }
    }
    </script>
    
    <template>
      <DeleteModal
        modalID="delete-key-modal"
        :object-name-delete="props.s3key.access_key"
        :back-modal-id="undefined"
        @confirm-delete="deleteKeyTrigger"
      />
      <h3>Access Key:</h3>
      <div v-if="props.loading" class="placeholder-glow">
        <span class="placeholder col-5 mt-3 mb-2 fs-4"></span><br />
      </div>
      <input
        v-else
        class="form-control-plaintext text-white fs-4"
        type="text"
        :value="props.s3key.access_key"
        aria-label="S3 Access Key"
        readonly
      />
      <div class="d-flex align-items-center">
        <span class="fs-3">Secret Key:</span>
        <button
          class="btn btn-outline-secondary ms-3"
          :class="{ active: visibleSecret }"
          data-bs-toggle="button"
          :disabled="props.loading"
          @click="visibleSecret = !visibleSecret"
        >
          <bootstrap-icon
            :width="18"
            :height="18"
            fill="white"
            :icon="visibleSecret ? 'eye' : 'eye-slash'"
          />
        </button>
      </div>
      <div v-if="props.loading" class="placeholder-glow">
        <span class="placeholder col-7 mt-3 mb-4 fs-4"></span><br />
      </div>
      <input
        v-else
        id="s3-secret-key"
        class="form-control-plaintext text-white fs-4 mb-3"
        :type="visibleSecret ? 'text' : 'password'"
        :value="props.s3key.secret_key"
        aria-label="S3 Access Key"
        aria-describedby="s3-secret-key"
        readonly
      />
      <button
        type="button"
        class="btn btn-danger fs-5"
        :disabled="!props.deletable || props.loading"
        data-bs-toggle="modal"
        data-bs-target="#delete-key-modal"
      >
        Delete
      </button>
    </template>
    
    <style scoped></style>