# All files / components/Grid Grid.vue

0% Statements 0/3
100% Branches 0/0
0% Functions 0/1
0% Lines 0/3

Press n or j to go to the next uncovered block, b, p or k for the previous block.

    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

     <template>
      <div :class="{ error: !loading && !data.length }" class="grid">
        <!-- Loading placeholder -->
        <GridItemSkeleton v-if="loading" />
        <GridItemSkeleton v-if="loading" />

        <!-- Items -->
        <GridItem v-else :key="item.id" v-for="item in data" :item="item" />

        <!-- Error messages -->
        <p v-if="!loading && !data.length" class="alert"><b>💡 Restart API</b>: 0 fruits !</p>
      </div>
    </template>

    <script>
    import { mapState } from "vuex";
    import GridItemSkeleton from "./GridItemSkeleton";

    export default {
      name: "Grid",
      components: {
        GridItemSkeleton,
        GridItem: () => import("./GridItem")
      },
      props: {
        data: Array
      },
      computed: {
        ...mapState(["loading"])
      }
    };
    </script>

    <style scoped lang="less">
    .grid {
      display: grid;
      grid-template-columns: 1fr;
      column-gap: 1rem;
      row-gap: 1.5rem;

      &.error {
        display: block;
      }

      @media screen and (min-width: @md) {
        grid-template-columns: repeat(2, 1fr);
      }

      @media screen and (min-width: @lg) {
        grid-template-columns: repeat(3, 1fr);
      }

      @media screen and (min-width: @xl) {
        grid-template-columns: repeat(4, 1fr);
      }

      .alert {
        box-sizing: border-box;
        margin: 0 auto;
        width: 80%;
        background-color: @color-3;
        color: @color-2;
        padding: 1rem 1.5rem;
        border-radius: 4px;

        @media screen and (min-width: @sm) {
          width: 50%;
          max-width: 535px;
        }

        pre {
          padding: 1rem;
          border-radius: 4px;
          background-color: rgb(45, 48, 55);

          span {
            color: @color-3;
          }
        }
      }
    }
    </style>