github.com/benoitkugler/goacve@v0.0.0-20201217100549-151ce6e55dc8/server/frontend/bv/src/shared/Btn.vue (about)

     1  <template>
     2    <b-btn
     3      :variant="variant"
     4      :disabled="innerDisabled"
     5      :block="block"
     6      @click="onClick"
     7    >
     8      <b-spinner type="grow" small v-if="spinning"></b-spinner>
     9      <b-spinner type="grow" small v-if="spinning"></b-spinner>
    10      <b-spinner type="grow" small v-if="spinning" class="mr-2"></b-spinner>
    11      {{ label }}
    12      <slot></slot>
    13    </b-btn>
    14  </template>
    15  
    16  <script lang="ts">
    17  import Vue from "vue";
    18  import Component from "vue-class-component";
    19  import { ValidEvent } from "./utils";
    20  
    21  const BtnProps = Vue.extend({
    22    props: {
    23      variant: String,
    24      disabled: {
    25        type: Boolean,
    26        default: false
    27      },
    28      label: String,
    29      block: {
    30        type: Boolean,
    31        default: false
    32      }
    33    }
    34  });
    35  
    36  @Component({})
    37  export default class Btn extends BtnProps {
    38    validEvent: ValidEvent = { spinning: false };
    39  
    40    get spinning() {
    41      return this.validEvent.spinning;
    42    }
    43  
    44    get innerDisabled() {
    45      return this.disabled || this.spinning;
    46    }
    47  
    48    onClick() {
    49      if (this.spinning) {
    50        return; // on annule les multiples requĂȘtes
    51      }
    52      this.$emit("click", this.validEvent);
    53    }
    54  }
    55  </script>
    56  
    57  <style scoped></style>