From a478bbf8a317648c35747a4d6a26e86df140db94 Mon Sep 17 00:00:00 2001
From: lucile varloteaux <lucile.varloteaux@inrae.fr>
Date: Thu, 30 Jun 2022 20:24:09 +0200
Subject: [PATCH 01/23] revue affichage arbre de droit "tooltip" et "modal"

---
 ui/package-lock.json                          |  74 +++++++
 ui/package.json                               |   2 +
 .../AuthorizationForPeriodDatagroups.vue      | 197 ++++++++++--------
 .../components/common/AuthorizationTable.vue  | 162 ++++++++------
 ui/src/main.js                                |   8 +
 ui/src/style/_common.scss                     |  20 ++
 .../DataTypeAuthorizationInfoView.vue         |   4 +-
 7 files changed, 312 insertions(+), 155 deletions(-)

diff --git a/ui/package-lock.json b/ui/package-lock.json
index cd5586665..9a43ed42c 100644
--- a/ui/package-lock.json
+++ b/ui/package-lock.json
@@ -11,6 +11,8 @@
         "@cypress/vue": "^3.1.2",
         "@cypress/webpack-dev-server": "^1.8.4",
         "@fortawesome/fontawesome-svg-core": "^1.2.36",
+        "@fortawesome/free-brands-svg-icons": "^6.1.1",
+        "@fortawesome/free-regular-svg-icons": "^6.1.1",
         "@fortawesome/free-solid-svg-icons": "^5.15.4",
         "@fortawesome/vue-fontawesome": "^2.0.2",
         "buefy": "^0.9.8",
@@ -1866,6 +1868,48 @@
         "node": ">=6"
       }
     },
+    "node_modules/@fortawesome/free-brands-svg-icons": {
+      "version": "6.1.1",
+      "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-6.1.1.tgz",
+      "integrity": "sha512-mFbI/czjBZ+paUtw5NPr2IXjun5KAC8eFqh1hnxowjA4mMZxWz4GCIksq6j9ZSa6Uxj9JhjjDVEd77p2LN2Blg==",
+      "hasInstallScript": true,
+      "dependencies": {
+        "@fortawesome/fontawesome-common-types": "6.1.1"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/@fortawesome/free-brands-svg-icons/node_modules/@fortawesome/fontawesome-common-types": {
+      "version": "6.1.1",
+      "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.1.1.tgz",
+      "integrity": "sha512-wVn5WJPirFTnzN6tR95abCx+ocH+3IFLXAgyavnf9hUmN0CfWoDjPT/BAWsUVwSlYYVBeCLJxaqi7ZGe4uSjBA==",
+      "hasInstallScript": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/@fortawesome/free-regular-svg-icons": {
+      "version": "6.1.1",
+      "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.1.1.tgz",
+      "integrity": "sha512-xXiW7hcpgwmWtndKPOzG+43fPH7ZjxOaoeyooptSztGmJxCAflHZxXNK0GcT0uEsR4jTGQAfGklDZE5NHoBhKg==",
+      "hasInstallScript": true,
+      "dependencies": {
+        "@fortawesome/fontawesome-common-types": "6.1.1"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/@fortawesome/free-regular-svg-icons/node_modules/@fortawesome/fontawesome-common-types": {
+      "version": "6.1.1",
+      "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.1.1.tgz",
+      "integrity": "sha512-wVn5WJPirFTnzN6tR95abCx+ocH+3IFLXAgyavnf9hUmN0CfWoDjPT/BAWsUVwSlYYVBeCLJxaqi7ZGe4uSjBA==",
+      "hasInstallScript": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
     "node_modules/@fortawesome/free-solid-svg-icons": {
       "version": "5.15.4",
       "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.4.tgz",
@@ -19957,6 +20001,36 @@
         "@fortawesome/fontawesome-common-types": "^0.3.0"
       }
     },
+    "@fortawesome/free-brands-svg-icons": {
+      "version": "6.1.1",
+      "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-6.1.1.tgz",
+      "integrity": "sha512-mFbI/czjBZ+paUtw5NPr2IXjun5KAC8eFqh1hnxowjA4mMZxWz4GCIksq6j9ZSa6Uxj9JhjjDVEd77p2LN2Blg==",
+      "requires": {
+        "@fortawesome/fontawesome-common-types": "6.1.1"
+      },
+      "dependencies": {
+        "@fortawesome/fontawesome-common-types": {
+          "version": "6.1.1",
+          "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.1.1.tgz",
+          "integrity": "sha512-wVn5WJPirFTnzN6tR95abCx+ocH+3IFLXAgyavnf9hUmN0CfWoDjPT/BAWsUVwSlYYVBeCLJxaqi7ZGe4uSjBA=="
+        }
+      }
+    },
+    "@fortawesome/free-regular-svg-icons": {
+      "version": "6.1.1",
+      "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.1.1.tgz",
+      "integrity": "sha512-xXiW7hcpgwmWtndKPOzG+43fPH7ZjxOaoeyooptSztGmJxCAflHZxXNK0GcT0uEsR4jTGQAfGklDZE5NHoBhKg==",
+      "requires": {
+        "@fortawesome/fontawesome-common-types": "6.1.1"
+      },
+      "dependencies": {
+        "@fortawesome/fontawesome-common-types": {
+          "version": "6.1.1",
+          "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.1.1.tgz",
+          "integrity": "sha512-wVn5WJPirFTnzN6tR95abCx+ocH+3IFLXAgyavnf9hUmN0CfWoDjPT/BAWsUVwSlYYVBeCLJxaqi7ZGe4uSjBA=="
+        }
+      }
+    },
     "@fortawesome/free-solid-svg-icons": {
       "version": "5.15.4",
       "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.4.tgz",
diff --git a/ui/package.json b/ui/package.json
index 0bd44290a..c24e48064 100644
--- a/ui/package.json
+++ b/ui/package.json
@@ -13,6 +13,8 @@
     "@cypress/vue": "^3.1.2",
     "@cypress/webpack-dev-server": "^1.8.4",
     "@fortawesome/fontawesome-svg-core": "^1.2.36",
+    "@fortawesome/free-brands-svg-icons": "^6.1.1",
+    "@fortawesome/free-regular-svg-icons": "^6.1.1",
     "@fortawesome/free-solid-svg-icons": "^5.15.4",
     "@fortawesome/vue-fontawesome": "^2.0.2",
     "buefy": "^0.9.8",
diff --git a/ui/src/components/common/AuthorizationForPeriodDatagroups.vue b/ui/src/components/common/AuthorizationForPeriodDatagroups.vue
index 50efac4b1..42c084f3c 100644
--- a/ui/src/components/common/AuthorizationForPeriodDatagroups.vue
+++ b/ui/src/components/common/AuthorizationForPeriodDatagroups.vue
@@ -1,65 +1,48 @@
 <template>
-  <div>
-    <b-tooltip position="is-left">
-      <b-icon
+  <span>
+    <b-tooltip position="is-right" multilined>
+      <a
         v-if="(column.withDataGroups && dataGroups.length > 1) || column.withPeriods"
-        icon="eye"
-        size="fa-4x"
         class="show-check-details"
-        :type="state.state != 1 ? 'is-grey ' : 'is-primary '"
-        @click.native="showDetail"
-      />
+        :type="state.state !== 1 ? 'is-grey ' : 'is-primary '"
+        @click="showDetail"
+        style="color: #006464ff; margin-left: 10px"
+        ><b-icon
+          v-if="(column.withDataGroups && dataGroups.length > 1) || column.withPeriods"
+          icon="eye"
+          size="fa-4x"
+        ></b-icon
+      ></a>
       <template v-slot:content>
-        <div v-if="state.state == 0">
-          <p class="has-background-white-bis has-text-primary">
-            Pour limiter le droit à
-            <b v-if="column.withPeriods">une période </b>
-            <span v-if="(column.withDataGroups && dataGroups.length > 1) || column.withPeriods"
-              >ou
-            </span>
-            <b v-if="column.withDataGroups && dataGroups.length > 1">des groupes de données </b>
-            <br />
-            veuillez d'abord selectionner le droit.
-          </p>
-        </div>
-        <div v-else-if="state.state == -1">
-          <p class="has-background-white-bis has-text-primary">
-            Pour limiter le droit à
-            <b v-if="column.withPeriods">une période </b>
-            <span v-if="(column.withDataGroups && dataGroups.length > 1) || column.withPeriods"
-              >ou
-            </span>
-            <b v-if="column.withDataGroups && dataGroups.length > 1">des groupes de données </b>
-            <br />
-            veuillez d'abord selectionner le droit.
-          </p>
-          <p class="has-background-white-bis has-text-primary">
-            Des limitations sont en cours sur des enfants, elles seront remplacées.
-          </p>
-        </div>
-        <div v-else class="has-background-primary show-detail-for-selected">
-          Permet de limiter le droit à
-          <b v-if="column.withPeriods">une période </b>
+        <div v-if="state.state === 1" class="has-background-primary show-detail-for-selected" style="height: 175px">
+          {{ $t("dataTypeAuthorizations.info-limit-taginput") }}
+          <b v-if="column.withPeriods">{{ $t("dataTypeAuthorizations.a-period") }}</b>
           <span v-if="(column.withDataGroups && dataGroups.length > 1) || column.withPeriods"
-            >ou
+            >{{ $t("dataTypeAuthorizations.or") }}
           </span>
-          <b v-if="column.withDataGroups && dataGroups.length > 1">des groupes de données </b>
+          <b v-if="column.withDataGroups && dataGroups.length > 1">{{
+            $t("dataTypeAuthorizations.a-datagroup")
+          }}</b>
           <div>
-            <div class="title2">Période</div>
+            <h3>{{ $t("dataTypesRepository.table-file-data-period") }} {{ $t("ponctuation.colon")}}</h3>
             <div v-if="state.from || state.to">
-              <span v-if="state.from"> du {{ state.from.toDateString() }} </span>
-              <span v-if="state.to"> jusqu'au {{ state.to.toDateString() }} </span>
+              <span v-if="state.from">
+                {{ $t("dataTypeAuthorizations.from-date") }} {{ state.from.toDateString() }}
+              </span>
+              <span v-if="state.to">
+                {{ $t("dataTypeAuthorizations.to-date") }} {{ state.to.toDateString() }}
+              </span>
             </div>
-            <div v-else>Toutes les dates</div>
+            <div class="defaultValueTooltip" v-else>{{ $t("dataTypeAuthorizations.all-dates") }}</div>
           </div>
           <div>
-            <div class="title2">Groupes de données</div>
-            <div v-if="state.dataGroups && state.dataGroups.length > 0">
-              <span v-for="(datagroup, i) in state.dataGroups" class="tag is-info" :key="i">
-                {{ dataGroups.find((dg) => dg.id == datagroup || dg.id == datagroup.id).label }}
+            <h3>{{ $t("dataTypeAuthorizations.data-group") }} {{ $t("ponctuation.colon")}}</h3>
+            <div class="defaultValueTooltip" v-if="state.dataGroups && state.dataGroups.length > 0">
+              <span v-for="(datagroup, i) in state.dataGroups" class="defaultValueTooltip" :key="i">
+                {{ dataGroups.find((dg) => dg.id == datagroup || dg.id == datagroup.id).label }} {{ $t("ponctuation.comma") }}
               </span>
             </div>
-            <div v-else>Toutes les variables</div>
+            <div class="defaultValueTooltip" v-else>{{ $t("dataTypeAuthorizations.all-variable") }}</div>
           </div>
         </div>
       </template>
@@ -68,54 +51,82 @@
       v-if="currentAuthorization"
       v-model="showModal"
       class="modalCardRef"
-      width="70%"
-      @after-leave="registerCurrentAuthorization"
+      has-modal-card
+      trap-focus
     >
       <div class="card">
-        <b-taginput
-          v-model="currentAuthorization.authorizations.dataGroups"
-          :data="dataGroups"
-          :open-on-focus="true"
-          :placeholder="$t('dataTypeAuthorizations.data-groups-placeholder')"
-          :value="dataGroups.id"
-          autocomplete
-          class="column"
-          field="label"
-          type="is-primary"
-        >
-        </b-taginput>
-
-        <div class="column">
-          <b-datepicker
-            v-model="currentAuthorization.authorizations.from"
-            :date-parser="parseDate"
-            :placeholder="
-              $t('dataTypesRepository.placeholder-datepicker') +
-              ' dd-MM-YYYY, dd-MM-YYYY hh, dd-MM-YYYY hh:mm, dd-MM-YYYY HH:mm:ss'
-            "
-            editable
-            icon="calendar"
-            @remove.capture="() => selectCheckbox($event, index, indexColumn, scope)"
-            @input="selectCheckbox($event, index, indexColumn, scope, 'from')"
+        <header class="card-header">
+          <p class="card-header-title">
+            {{ $t("dataTypeAuthorizations.card-header-extraction") }}
+          </p>
+        </header>
+        <div class="card-content">
+          <b-field :label="$t('dataTypeAuthorizations.label-tagInput')" label-position="on-border">
+            <b-taginput
+              v-model="currentAuthorization.authorizations.dataGroups"
+              :data="dataGroups"
+              :open-on-focus="true"
+              :placeholder="$t('dataTypeAuthorizations.data-groups-placeholder')"
+              :value="dataGroups.id"
+              autocomplete
+              class="column"
+              field="label"
+              type="is-primary"
+            >
+            </b-taginput>
+          </b-field>
+          <b-field
+            class="column"
+            :label="$t('dataTypeAuthorizations.label-datePicker')"
+            label-position="on-border"
           >
-          </b-datepicker>
-        </div>
-        <div class="column">
-          <b-datepicker
-            v-model="currentAuthorization.authorizations.to"
-            :date-parser="parseDate"
-            :placeholder="
-              $t('dataTypesRepository.placeholder-datepicker') +
-              ' dd-MM-YYYY, dd-MM-YYYY hh, dd-MM-YYYY hh:mm, dd-MM-YYYY HH:mm:ss'
-            "
-            editable
-            icon="calendar"
+            <b-datepicker
+              v-model="currentAuthorization.authorizations.from"
+              :date-parser="parseDate"
+              :placeholder="
+                $t('dataTypesRepository.placeholder-datepicker') +
+                ' dd-MM-YYYY, dd-MM-YYYY hh, dd-MM-YYYY hh:mm, dd-MM-YYYY HH:mm:ss'
+              "
+              editable
+              icon="calendar"
+              pack="far"
+              @remove.capture="() => selectCheckbox($event, index, indexColumn, scope)"
+              @input="selectCheckbox($event, index, indexColumn, scope, 'from')"
+            >
+            </b-datepicker>
+          </b-field>
+          <b-field
+            class="column"
+            :label="$t('dataTypeAuthorizations.label-datePicker')"
+            label-position="on-border"
           >
-          </b-datepicker>
+            <b-datepicker
+              v-model="currentAuthorization.authorizations.to"
+              :date-parser="parseDate"
+              :placeholder="
+                $t('dataTypesRepository.placeholder-datepicker') +
+                ' dd-MM-YYYY, dd-MM-YYYY hh, dd-MM-YYYY hh:mm, dd-MM-YYYY HH:mm:ss'
+              "
+              editable
+              icon="calendar"
+              pack="far"
+            >
+            </b-datepicker>
+          </b-field>
+          <div class="buttons">
+            <b-button
+              icon-left="check"
+              type="is-dark"
+              @click="registerCurrentAuthorization"
+              style="margin-bottom: 10px"
+            >
+              {{ $t("dataTypesManagement.validate") }}
+            </b-button>
+          </div>
         </div>
       </div>
     </b-modal>
-  </div>
+  </span>
 </template>
 
 <script>
@@ -179,4 +190,10 @@ export default class AuthorizationForPeriodDatagroups extends Vue {
 .show-detail-for-selected {
   height: 60px;
 }
+.modalCardRef .modal-background {
+  background-color: rgba(10, 10, 10, 0.5);
+}
+.modal .modal-content {
+  height: 70%;
+}
 </style>
diff --git a/ui/src/components/common/AuthorizationTable.vue b/ui/src/components/common/AuthorizationTable.vue
index 2b9af3305..0cbd5a851 100644
--- a/ui/src/components/common/AuthorizationTable.vue
+++ b/ui/src/components/common/AuthorizationTable.vue
@@ -1,78 +1,114 @@
 <template>
   <div>
     <li
-      v-if="authReference && !authReference.hierarchicalKey"
-      class="card-content authorizationTable datepicker-row"
+        v-if="authReference && !authReference.hierarchicalKey"
+        class="card-content authorizationTable datepicker-row"
     >
       <slot class="row"></slot>
       <div v-for="(scope, index) of authReference" :key="index">
         <div class="columns" @mouseleave="upHere = false" @mouseover="upHere = true">
           <div
-            v-for="(column, indexColumn) of columnsVisible"
-            :key="indexColumn"
-            :class="{ hover: upHere && scope.isLeaf }"
-            class="column"
+              v-for="(column, indexColumn) of columnsVisible"
+              :key="indexColumn"
+              :class="{ hover: upHere && scope.isLeaf }"
+              class="column"
           >
             <a
-              v-if="
+                v-if="
                 column.display &&
                 indexColumn === 'label' &&
                 (!scope.isLeaf || remainingOption.length)
               "
-              :class="!scope.isLeaf || remainingOption.length ? 'leaf' : 'folder'"
-              :field="indexColumn"
-              @click="indexColumn === 'label' && toggle(index)"
-              >{{ localName(scope) }}</a
+                :class="!scope.isLeaf || remainingOption.length ? 'leaf' : 'folder'"
+                :field="indexColumn"
+                style="min-height: 10px; display: table-cell; vertical-align: middle"
+                @click="indexColumn === 'label' && toggle(index)"
             >
+              {{ localName(scope) }}
+            </a>
             <p
-              v-else-if="
+                v-else-if="
                 column.display &&
                 indexColumn === 'label' &&
                 !(!scope.isLeaf || remainingOption.length)
               "
-              :class="!scope.isLeaf || remainingOption.length ? 'leaf' : 'folder'"
-              :field="indexColumn"
+                :class="!scope.isLeaf || remainingOption.length ? 'leaf' : 'folder'"
+                :field="indexColumn"
             >
               {{ localName(scope) }}
             </p>
-
             <b-field v-else-if="column.display" :field="indexColumn" class="column">
               <b-icon
-                :icon="STATES[states[indexColumn][getPath(index)].state] || STATES[0]"
-                size="is-medium"
-                type="is-primary"
-                @click.native="selectCheckbox($event, index, indexColumn)"
+                  :icon="STATES[states[indexColumn][getPath(index)].state] || STATES[0]"
+                  pack="far"
+                  size="is-medium"
+                  type="is-primary"
+                  @click.native="selectCheckbox($event, index, indexColumn)"
               />
               <AuthorizationForPeriodDatagroups
-                v-if="states[indexColumn][getPath(index)].fromAuthorization"
-                :column="column"
-                :data-groups="dataGroups"
-                :state="states[indexColumn][getPath(index)]"
-                :index="index"
-                :index-column="indexColumn"
-                @registerCurrentAuthorization="$emit('registerCurrentAuthorization', $event)"
+                  v-if="states[indexColumn][getPath(index)].fromAuthorization"
+                  :column="column"
+                  :data-groups="dataGroups"
+                  :state="states[indexColumn][getPath(index)]"
+                  :index="index"
+                  :index-column="indexColumn"
+                  @registerCurrentAuthorization="$emit('registerCurrentAuthorization', $event)"
               />
+              <b-tooltip position="is-right" multilined v-if="states[indexColumn][getPath(index)].state === 0 || states[indexColumn][getPath(index)].state === -1">
+                <b-button v-if="(column.withDataGroups && dataGroups.length > 1) || column.withPeriods" disabled style="border: none; background-color: transparent;">
+                  <b-icon
+                    v-if="(column.withDataGroups && dataGroups.length > 1) || column.withPeriods"
+                    icon="eye"
+                    size="fa-4x"
+                  ></b-icon>
+                </b-button>
+                <template v-slot:content>
+                  <div v-if="states[indexColumn][getPath(index)].state === 0">
+                    <p>
+                      {{ $t("dataTypeAuthorizations.info-limit-taginput") }}
+                      <b>{{ $t("dataTypeAuthorizations.a-period") }} </b>
+                      <span>{{ $t("dataTypeAuthorizations.or") }}</span>
+                      <b>{{ $t("dataTypeAuthorizations.a-datagroup") }}</b>
+                      <br />
+                      {{ $t("dataTypeAuthorizations.select-authorization") }}
+                    </p>
+                  </div>
+                  <div v-else-if="states[indexColumn][getPath(index)].state === -1">
+                    <p>
+                      {{ $t("dataTypeAuthorizations.info-limit-taginput") }}
+                      <b>{{ $t("dataTypeAuthorizations.a-period") }} </b>
+                      <span>{{ $t("dataTypeAuthorizations.or") }} </span>
+                      <b>{{ $t("dataTypeAuthorizations.a-datagroup") }}</b>
+                      <br />
+                      {{ $t("dataTypeAuthorizations.select-authorization") }}
+                    </p>
+                    <p class="has-background-white-bis has-text-danger-dark">
+                      {{ $t("dataTypeAuthorizations.warnning-chil-not-null") }}
+                    </p>
+                  </div>
+                </template>
+              </b-tooltip>
             </b-field>
           </div>
         </div>
         <ul
-          v-if="authReference && (!scope.isLeaf || remainingOption.length) && open && open[index]"
-          class="rows"
+            v-if="authReference && (!scope.isLeaf || remainingOption.length) && open && open[index]"
+            class="rows"
         >
           <AuthorizationTable
-            v-if="authReference"
-            :auth-reference="getNextAuthreference(scope)"
-            :authorization="authorization"
-            :columns-visible="columnsVisible"
-            :data-groups="dataGroups"
-            :path="getPath(index)"
-            :remaining-option="getRemainingOption(scope)"
-            :required-authorizations="{}"
-            :authorization-scopes="authorizationScopes"
-            :current-authorization-scope="getCurrentAuthorizationScope(scope)"
-            @setIndetermined="eventSetIndetermined($event, index)"
-            @modifyAuthorization="$emit('modifyAuthorization', $event)"
-            @registerCurrentAuthorization="$emit('registerCurrentAuthorization', $event)"
+              v-if="authReference"
+              :auth-reference="getNextAuthreference(scope)"
+              :authorization="authorization"
+              :columns-visible="columnsVisible"
+              :data-groups="dataGroups"
+              :path="getPath(index)"
+              :remaining-option="getRemainingOption(scope)"
+              :required-authorizations="{}"
+              :authorization-scopes="authorizationScopes"
+              :current-authorization-scope="getCurrentAuthorizationScope(scope)"
+              @setIndetermined="eventSetIndetermined($event, index)"
+              @modifyAuthorization="$emit('modifyAuthorization', $event)"
+              @registerCurrentAuthorization="$emit('registerCurrentAuthorization', $event)"
           />
         </ul>
       </div>
@@ -81,22 +117,22 @@
 </template>
 
 <script>
-import { Component, Prop, Vue, Watch } from "vue-property-decorator";
-import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome";
-import { Authorization } from "@/model/authorization/Authorization";
+import {Component, Prop, Vue, Watch} from "vue-property-decorator";
+import {FontAwesomeIcon} from "@fortawesome/vue-fontawesome";
+import {Authorization} from "@/model/authorization/Authorization";
 import AuthorizationForPeriodDatagroups from "@/components/common/AuthorizationForPeriodDatagroups.vue";
 
 @Component({
-  components: { FontAwesomeIcon, AuthorizationForPeriodDatagroups },
+  components: {FontAwesomeIcon, AuthorizationForPeriodDatagroups},
 })
 export default class AuthorizationTable extends Vue {
-  STATES = { "-1": "minus-square", 0: "square", 1: "check-square" };
+  STATES = {"-1": "minus-square", 0: "square", 1: "check-square"};
   EXTRACTION = "extraction";
   @Prop() authReference; //informations about nodes
   @Prop() remainingOption; //array of next nodes
   @Prop() columnsVisible; // infos for columns
-  @Prop({ default: "" }) path;
-  @Prop({ default: false }) isRoot;
+  @Prop({default: ""}) path;
+  @Prop({default: false}) isRoot;
   @Prop() dataGroups; // array of the datagroups in  authorization configuration
   @Prop() authorization; //the authorizations scope from authorization configuration
   @Prop() authorizationScopes; //the authorizationsscope from authorization configuration
@@ -156,16 +192,16 @@ export default class AuthorizationTable extends Vue {
 
   localName(states) {
     return (
-      states.localName ||
-      (this.authReference.authorizationScope && this.authReference.authorizationScope.localName) ||
-      "pas trouve"
+        states.localName ||
+        (this.authReference.authorizationScope && this.authReference.authorizationScope.localName) ||
+        "pas trouve"
     );
   }
 
   toggle(index) {
     var open = {};
     open[index] = !this.open[index];
-    this.open = { ...this.open, ...open };
+    this.open = {...this.open, ...open};
   }
 
   select(option) {
@@ -183,20 +219,20 @@ export default class AuthorizationTable extends Vue {
     }
     var stateElement = this.states[indexColumn][this.getPath(index)];
     var currentPath = this.getPath(index);
-    authorizations = authorizations || { toDelete: [], toAdd: [] };
+    authorizations = authorizations || {toDelete: [], toAdd: []};
     if (stateElement.state == 1) {
       checkedAuthorization = this.authorization.getCheckedAuthorization(indexColumn, currentPath);
       if (checkedAuthorization.scopeKey == currentPath) {
         authorizations.toDelete.push(checkedAuthorization.auth);
-        eventToEmit = { currentPath, authorizations, index, indexColumn };
+        eventToEmit = {currentPath, authorizations, index, indexColumn};
         this.$emit("modifyAuthorization", eventToEmit);
       } else {
         var indetermined = false;
         var count = 0;
         for (const authReferenceKey in this.authReference) {
           if (authReferenceKey != index) {
-            authorization = { ...checkedAuthorization.auth };
-            requiredAuthorizations = { ...this.currentAuthorizationScope };
+            authorization = {...checkedAuthorization.auth};
+            requiredAuthorizations = {...this.currentAuthorizationScope};
             authReference = this.authReference[authReferenceKey];
             requiredAuthorizations[authReference.authorizationScope] = authReference.currentPath;
             authorization.requiredAuthorizations = requiredAuthorizations;
@@ -205,7 +241,7 @@ export default class AuthorizationTable extends Vue {
             indetermined = true;
           }
         }
-        eventToEmit = { event, index, indexColumn, authorizations };
+        eventToEmit = {event, index, indexColumn, authorizations};
         if (indetermined || !count) {
           this.$emit("setIndetermined", eventToEmit);
         } else {
@@ -216,19 +252,19 @@ export default class AuthorizationTable extends Vue {
       let reference = this.authReference[index];
       requiredAuthorizations = this.currentAuthorizationScope || {};
       requiredAuthorizations[reference.authorizationScope] = reference.currentPath;
-      let currentAuthorization = new Authorization({ requiredAuthorizations });
+      let currentAuthorization = new Authorization({requiredAuthorizations});
       let currentPath = currentAuthorization.getPath(this.authorizationScopes.map((as) => as.id));
       let dependants = this.authorization.getDependants(indexColumn, currentPath);
       authorizations.toDelete = [...authorizations.toDelete, ...dependants];
       if (
-        Object.values(this.states[indexColumn]).filter((s) => s.state != 1).length - 1 ||
-        this.isRoot
+          Object.values(this.states[indexColumn]).filter((s) => s.state != 1).length - 1 ||
+          this.isRoot
       ) {
         authorizations.toAdd.push(currentAuthorization);
-        eventToEmit = { event, index, indexColumn, authorizations };
+        eventToEmit = {event, index, indexColumn, authorizations};
         this.$emit("modifyAuthorization", eventToEmit);
       } else {
-        eventToEmit = { event, index, indexColumn, authorizations };
+        eventToEmit = {event, index, indexColumn, authorizations};
         this.$emit("setIndetermined", eventToEmit);
       }
     }
@@ -237,7 +273,7 @@ export default class AuthorizationTable extends Vue {
   getCurrentAuthorizationScope(scope) {
     var authorizationScope = {};
     authorizationScope[scope.authorizationScope] = scope.currentPath;
-    return { ...this.currentAuthorizationScope, ...authorizationScope };
+    return {...this.currentAuthorizationScope, ...authorizationScope};
   }
 
   getNextAuthreference(states) {
diff --git a/ui/src/main.js b/ui/src/main.js
index 56109adee..4dabf294a 100644
--- a/ui/src/main.js
+++ b/ui/src/main.js
@@ -59,7 +59,15 @@ import {
   faInfo,
   faQuestion,
 } from "@fortawesome/free-solid-svg-icons";
+import {
+  faCalendarDays as farCalendarDays,
+  faCalendar as farCalendar,
+  faSquare as farSquare,
+  faMinusSquare as farMinusSquare,
+  faCheckSquare as farCheckSquare,
+} from "@fortawesome/free-regular-svg-icons";
 import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome";
+library.add(farCalendarDays, farCalendar, farSquare, farMinusSquare, farCheckSquare);
 library.add(
   faCircle,
   faEye,
diff --git a/ui/src/style/_common.scss b/ui/src/style/_common.scss
index 620cbeb27..0e91f5ff3 100644
--- a/ui/src/style/_common.scss
+++ b/ui/src/style/_common.scss
@@ -228,3 +228,23 @@ a.dropdown-item.is-active, .dropdown .dropdown-menu .has-link a.is-active, butto
 .b-table .table th.is-sortable, .b-table .table th.is-sortable .th-wrap {
   width: max-content;
 }
+a.leaf {
+  padding: 15px;
+}
+p.folder {
+  padding-left: 15px;
+  padding-bottom: 10px;
+  padding-top: 12px;
+}
+ul.rows{
+  margin-bottom: 10px;
+}
+h3 {
+  text-decoration: underline;
+}
+.defaultValueTooltip {
+  background-color: white;
+  color: $primary;
+  font-weight: bold;
+  padding-top: 5px;
+}
diff --git a/ui/src/views/authorizations/DataTypeAuthorizationInfoView.vue b/ui/src/views/authorizations/DataTypeAuthorizationInfoView.vue
index 46f327cc0..413720b94 100644
--- a/ui/src/views/authorizations/DataTypeAuthorizationInfoView.vue
+++ b/ui/src/views/authorizations/DataTypeAuthorizationInfoView.vue
@@ -14,7 +14,6 @@
         })
       }}</span>
     </h1>
-
     <ValidationObserver ref="observer" v-slot="{ handleSubmit }">
       <ValidationProvider
         v-slot="{ errors, valid }"
@@ -36,6 +35,7 @@
             v-model="selectedUsers"
             :placeholder="$t('dataTypeAuthorizations.users-placeholder')"
             expanded
+            :native-size="users.length"
             multiple
           >
             <option v-for="user in users" :key="user.id" :value="user.id">
@@ -301,7 +301,7 @@ export default class DataTypeAuthorizationInfoView extends Vue {
         dataGroups: this.dataGroups,
         users: this.users,
       } = grantableInfos);
-      console.log("grantableInfos", grantableInfos);
+      //console.log("grantableInfos", grantableInfos);
       this.columnsVisible = { ...this.columnsVisible, ...grantableInfos.columnsDescription };
       if (this.authorizationId != "new") {
         var authorizations = await this.authorizationService.getAuthorizations(
-- 
GitLab


From 6ad84d4c040df79af4243b6e008568b068b195bd Mon Sep 17 00:00:00 2001
From: lucile varloteaux <lucile.varloteaux@inrae.fr>
Date: Thu, 30 Jun 2022 20:29:12 +0200
Subject: [PATCH 02/23] les traductions manquante faite

---
 ui/src/locales/en.json | 14 +++++++++++++-
 ui/src/locales/fr.json | 13 ++++++++++++-
 2 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/ui/src/locales/en.json b/ui/src/locales/en.json
index 8aeee20f0..e721b0e29 100644
--- a/ui/src/locales/en.json
+++ b/ui/src/locales/en.json
@@ -302,7 +302,19 @@
         "data-group": "Data group",
         "data-type": "Data type",
         "actions": "Actions",
-        "revoke": "Revoke"
+        "revoke": "Revoke",
+        "a-period": "a periode ",
+        "a-datagroup": "a data group ",
+        "card-header-extraction": "Set checkout law",
+        "label-tagInput": "Select data group",
+        "label-datePicker": "Select a date",
+        "info-limit-action": "To limit the law to ",
+        "all-variable": "All variables",
+        "all-dates": "All dates",
+        "or": "or",
+        "info-limit-taginput": "Limits the law to ",
+        "select-authorization": "Please select the law first.",
+        "warnning-chil-not-null": "Limitations are in progress on children, they will be replaced."
     },
     "ponctuation": {
         "semicolon" : ";",
diff --git a/ui/src/locales/fr.json b/ui/src/locales/fr.json
index 1b93c79f3..a77b9442c 100644
--- a/ui/src/locales/fr.json
+++ b/ui/src/locales/fr.json
@@ -302,7 +302,18 @@
         "data-group": "Groupe de données",
         "data-type": "Type de donnée",
         "actions": "Actions",
-        "revoke": "Révoquer"
+        "revoke": "Révoquer",
+        "a-period": "une période ",
+        "a-datagroup": "des groupes de données ",
+        "card-header-extraction": "Paramettre de droit d'extraction",
+        "label-tagInput": "Selection de groupe de données",
+        "label-datePicker": "Selection une date",
+        "all-variable": "Toutes les variables",
+        "all-dates": "Toutes les dates",
+        "or": "ou",
+        "info-limit-taginput": "Permet de limiter le droit à ",
+        "select-authorization": "Veuillez d'abord selectionner le droit.",
+        "warnning-chil-not-null": "Des limitations sont en cours sur des enfants, elles seront remplacées."
     },
     "ponctuation": {
         "semicolon" : ";",
-- 
GitLab


From 8f8ae87d38a9ba21fd5837563d31e7173e7d6b6c Mon Sep 17 00:00:00 2001
From: lucile varloteaux <lucile.varloteaux@inrae.fr>
Date: Mon, 4 Jul 2022 10:51:29 +0200
Subject: [PATCH 03/23] retrait test cypress authorisationScope

---
 .../integration/authorizationScope_spec.js    | 203 ------------------
 1 file changed, 203 deletions(-)
 delete mode 100644 ui/cypress/integration/authorizationScope_spec.js

diff --git a/ui/cypress/integration/authorizationScope_spec.js b/ui/cypress/integration/authorizationScope_spec.js
deleted file mode 100644
index 0d15649f1..000000000
--- a/ui/cypress/integration/authorizationScope_spec.js
+++ /dev/null
@@ -1,203 +0,0 @@
-/// <reference types="Cypress" />
-
-import Assert from "assert";
-
-require('cypress-plugin-tab')
-const grantable = require('../fixtures/applications/ore/monsore/datatypes/authorisation/grantable.json')
-var lambdaId = JSON.parse(grantable).users.find(u=>u.label=='lambda').id
-const verify = function (req, response) {
-    console.log('req', req.body, 'response', response)
-    Assert.equal('monsore', req.body.applicationNameOrId)
-    Assert.equal('pem', req.body.dataType)
-    Assert.equal(lambdaId, req.body.usersId[0])
-    Assert.equal("Une authorization", req.body.name)
-    Assert.equal('projet_atlantique', req.body.authorizations.extraction[0].requiredAuthorizations.projet)
-    Assert.equal('plateforme', req.body.authorizations.extraction[0].requiredAuthorizations.localization)
-    req.reply({
-        statusCode: 201,
-        body: response,
-    })
-}
-
-const verify2 = function (req, response) {
-    console.log('req', req.body, 'response', response)
-    Assert.equal('monsore', req.body.applicationNameOrId)
-    Assert.equal('pem', req.body.dataType)
-    Assert.equal(lambdaId, req.body.usersId[0])
-    Assert.equal("Une authorization", req.body.name)
-    var extraction = req.body.authorizations.extraction;
-    cy.expect(extraction).to.have.length(1)
-    var admin = req.body.authorizations.admin;
-    cy.expect(admin).to.have.length(1)
-    Assert.equal('projet_atlantique', extraction[0].requiredAuthorizations.projet)
-    Assert.equal('bassin_versant', extraction[0].requiredAuthorizations.localization)
-    cy.expect(extraction[0].dataGroups).to.have.length(1)
-    Assert.equal('referentiel', extraction[0].dataGroups[0])
-    Assert.equal(new Date([2021, 1, 1]).toISOString(),new Date( extraction[0].fromDay).toISOString())
-    Assert.equal(new Date([2021, 12, 31]).toISOString(),new Date( extraction[0].toDay).toISOString())
-
-
-    req.reply({
-        statusCode: 201,
-        body: response,
-    })
-}
-
-const resolveDataTypes = response => cy.intercept(
-    'GET',
-    'http://localhost:8081/api/v1/applications/monsore',
-    response).as('getMonsoere')
-
-const resolveAuthorization = response => cy.intercept(
-    'GET',
-    'http://localhost:8081/api/v1/applications/monsore/dataType/pem/grantable',
-    response).as('getGrantable')
-
-const responseAuthorization = response => cy.intercept(
-    'GET',
-    'http://localhost:8081/api/v1/applications/monsore/dataType/pem/authorization',
-    response).as('getShowAuthorizations')
-
-const postAuthorization = response => cy.intercept(
-    'POST',
-    'http://localhost:8081/api/v1/applications/monsore/dataType/pem/authorization',
-    (req) => verify(req, response)
-).as('getPostAuthorizations')
-
-const postAuthorization2 = response => cy.intercept(
-    'POST',
-    'http://localhost:8081/api/v1/applications/monsore/dataType/pem/authorization',
-    (req) => verify2(req, response)
-).as('getPostAuthorizations')
-
-const responseSites = response => cy.intercept(
-    'GET',
-    'http://localhost:8081/api/v1/applications/monsore/references/sites',
-    response).as('getSites')
-
-const responseProjet = response => cy.intercept(
-    'GET',
-    'http://localhost:8081/api/v1/applications/monsore/references/projet',
-    response).as('getProjet')
-const responseTypeSites = response => cy.intercept(
-    'GET',
-    'http://localhost:8081/api/v1/applications/monsore/references/type_de_sites',
-    response).as('getTypeSites')
-describe('test authorization application', () => {
-    beforeEach(() => {
-        cy.setLocale('fr');
-    });
-
-    it('Test authorization monsore pem', () => {
-        cy.login("admin", ['applications/ore/ore_application_description.json'])
-        cy.wait(['@postUserResponse', '@getApplicationResponse'])
-
-        cy.fixture('applications/ore/monsore/monsoere.json').then(resolveDataTypes)
-        cy.fixture('applications/ore/monsore/datatypes/authorisation/show_authorization_table.json').then(responseAuthorization)
-
-        cy.visit(Cypress.env('monsore_table_authorization_url'))
-        //cy.get('select').select('5a4dbd41-3fc9-4b3e-b593-a46bc888a7f9')
-        cy.wait('@getShowAuthorizations')
-        cy.wait(10)
-
-        cy.fixture('applications/ore/monsore/datatypes/authorisation/grantable.json').then(resolveAuthorization)
-        cy.fixture('applications/ore/monsore/references/sites.json').then(responseSites)
-        cy.fixture('applications/ore/monsore/references/projet.json').then(responseProjet)
-        cy.fixture('applications/ore/monsore/references/type_de_sites.json').then(responseTypeSites)
-
-        cy.visit(Cypress.env('monsore_new_authorization_url'))
-        cy.wait(['@getGrantable', '@getMonsoere'])
-        cy.wait(100)
-        cy.get('.title.main-title').first().contains('Nouvelle autorisation pour Piégeage en Montée')
-        cy.get("select").select(lambdaId)
-        cy.get("input[type=text]").type("Une authorization")
-        cy.contains('Projet Atlantique').click()
-        cy.get("div[field=extraction] span.icon").eq(2).click()
-        cy.get('div.rows > :nth-child(1) > :nth-child(2) > :nth-child(1) > :nth-child(5) > .field > .icon').get(['data-icon=minus-square'])
-        cy.contains('Plateforme').click()
-        cy.get("[data-icon=check-square]").should('have.length', 4)
-        cy.get("[data-icon=minus-square]").should('have.length', 1)
-        cy.get("[data-icon=square]").should('have.length', 30)
-        cy.fixture('applications/ore/monsore/datatypes/authorisation/post_authorization.json').then(postAuthorization)
-        cy.get('.buttons > .button').click()
-        cy.wait(100)
-        cy.contains('Ma première authorization')
-        cy.contains('[ "depot", "extraction" ]')
-        cy.contains('[ "poussin" ]')
-    })
-
-
-    it('Test une autre authorization monsore pem', () => {
-        cy.login("admin", ['applications/ore/ore_application_description.json'])
-        cy.wait(['@postUserResponse', '@getApplicationResponse'])
-
-        cy.fixture('applications/ore/monsore/monsoere.json').then(resolveDataTypes)
-        cy.fixture('applications/ore/monsore/datatypes/authorisation/show_authorization_table.json').then(responseAuthorization)
-
-        cy.visit(Cypress.env('monsore_table_authorization_url'))
-        //cy.get('select').select('5a4dbd41-3fc9-4b3e-b593-a46bc888a7f9')
-        cy.wait('@getShowAuthorizations')
-        cy.wait(10)
-
-        cy.fixture('applications/ore/monsore/datatypes/authorisation/grantable.json').then(resolveAuthorization)
-        cy.fixture('applications/ore/monsore/references/sites.json').then(responseSites)
-        cy.fixture('applications/ore/monsore/references/projet.json').then(responseProjet)
-        cy.fixture('applications/ore/monsore/references/type_de_sites.json').then(responseTypeSites)
-
-        cy.visit(Cypress.env('monsore_new_authorization_url'))
-        cy.wait(['@getGrantable', '@getMonsoere'])
-        cy.wait(100)
-        cy.get('.title.main-title').first().contains('Nouvelle autorisation pour Piégeage en Montée')
-        cy.get("select").select(lambdaId)
-        cy.get("input[type=text]").type("Une authorization")
-        cy.get(':nth-child(2) > .columns > :nth-child(5) > .field > .icon').first().click()
-        cy.contains('Projet Atlantique').click()
-        cy.get(':nth-child(1) > .columns > :nth-child(5) > .column > .field-body > .field > .icon.is-medium').first().click()
-        cy.contains('Plateforme').click()
-        cy.get("[data-icon=check-square]").should('have.length', 4)
-        cy.get("[data-icon=minus-square]").should('have.length', 1)
-        cy.get("[data-icon=square]").should('have.length', 30)
-        cy.fixture('applications/ore/monsore/datatypes/authorisation/post_authorization.json').then(postAuthorization)
-        cy.get('.buttons > .button').click()
-        cy.contains('Ma première authorization ')
-        cy.contains('[ "depot", "extraction" ]')
-        cy.contains('[ "poussin" ]')
-    })
-    it('Test une autre authorization monsore pem', () => {
-        cy.login("admin", ['applications/ore/ore_application_description.json'])
-        cy.wait(['@postUserResponse', '@getApplicationResponse'])
-
-        cy.fixture('applications/ore/monsore/monsoere.json').then(resolveDataTypes)
-        cy.fixture('applications/ore/monsore/datatypes/authorisation/show_authorization_table.json').then(responseAuthorization)
-
-        cy.visit(Cypress.env('monsore_table_authorization_url'))
-        //cy.get('select').select('5a4dbd41-3fc9-4b3e-b593-a46bc888a7f9')
-        cy.wait('@getShowAuthorizations')
-        cy.wait(10)
-
-        cy.fixture('applications/ore/monsore/datatypes/authorisation/grantable.json').then(resolveAuthorization)
-        cy.fixture('applications/ore/monsore/references/sites.json').then(responseSites)
-        cy.fixture('applications/ore/monsore/references/projet.json').then(responseProjet)
-        cy.fixture('applications/ore/monsore/references/type_de_sites.json').then(responseTypeSites)
-
-        cy.visit(Cypress.env('monsore_new_authorization_url'))
-        cy.wait(['@getGrantable', '@getMonsoere'])
-        cy.wait(100)
-        cy.get('.title.main-title').first().contains('Nouvelle autorisation pour Piégeage en Montée')
-        cy.get("select").select(lambdaId)
-        cy.get("input[type=text]").type("Une authorization")
-        cy.get(':nth-child(2) > .columns > :nth-child(2) > .field > .icon').first().click()
-        cy.contains('Projet Atlantique').click()
-        cy.get(':nth-child(1) > .columns > :nth-child(5) > .field > .icon').first().click()
-        cy.get('.tooltip-trigger > .icon').first().click()
-
-        cy.get('.autocomplete > .control > .input').click()
-        cy.get('.dropdown-content > :nth-child(3)').click().tab()
-        cy.get('.autocomplete > .control > .input').click().tab()
-        cy.get(':nth-child(2) > .datepicker > .dropdown > .dropdown-trigger > .control > .input').type('2021/01/01').tab()
-        cy.get(':nth-child(3) > .datepicker > .dropdown > .dropdown-trigger > .control > .input').type('2021/12/31').tab().type('{esc}')
-        cy.wait(100)
-        cy.fixture('applications/ore/monsore/datatypes/authorisation/post_authorization.json').then(postAuthorization2)
-        cy.get('.buttons > .button').click()
-    })
-})
\ No newline at end of file
-- 
GitLab


From 70715f52026182a67bb1911dc064eb3cdf00f0fe Mon Sep 17 00:00:00 2001
From: lucile varloteaux <lucile.varloteaux@inrae.fr>
Date: Wed, 6 Jul 2022 15:35:54 +0200
Subject: [PATCH 04/23] sauvegarde avant de tous casser, mise en place du
 filtre pour l'ajout d'utilisateur avec un taginput

---
 .../DataTypeAuthorizationInfoView.vue         | 469 +++++++++++-------
 1 file changed, 285 insertions(+), 184 deletions(-)

diff --git a/ui/src/views/authorizations/DataTypeAuthorizationInfoView.vue b/ui/src/views/authorizations/DataTypeAuthorizationInfoView.vue
index 413720b94..a62a0723b 100644
--- a/ui/src/views/authorizations/DataTypeAuthorizationInfoView.vue
+++ b/ui/src/views/authorizations/DataTypeAuthorizationInfoView.vue
@@ -1,83 +1,133 @@
 <template>
   <PageView class="with-submenu">
     <SubMenu
-      :paths="subMenuPaths"
-      :root="application.localName || application.title"
-      role="navigation"
-      :aria-label="$t('menu.aria-sub-menu')"
+        :paths="subMenuPaths"
+        :root="application.localName || application.title"
+        role="navigation"
+        :aria-label="$t('menu.aria-sub-menu')"
     />
 
     <h1 class="title main-title">
       <span v-if="authorizationId === 'new'">{{
-        $t("titles.data-type-new-authorization", {
-          dataType: application.localDatatypeName || dataTypeId,
-        })
-      }}</span>
+          $t("titles.data-type-new-authorization", {
+            dataType: application.localDatatypeName || dataTypeId,
+          })
+        }}</span>
     </h1>
     <ValidationObserver ref="observer" v-slot="{ handleSubmit }">
-      <ValidationProvider
-        v-slot="{ errors, valid }"
-        name="users"
-        rules="required"
-        vid="users"
-        class="columns"
-      >
-        <b-field
-          :label="$t('dataTypeAuthorizations.users')"
-          :message="errors[0]"
-          :type="{
-            'is-danger': errors && errors.length > 0,
-            'is-success': valid,
-          }"
-          class="column mb-4"
+      <div class="columns">
+        <ValidationProvider
+            v-slot="{ errors, valid }"
+            name="users"
+            rules="required"
+            vid="users"
+            class="column is-half"
         >
-          <b-select
-            v-model="selectedUsers"
-            :placeholder="$t('dataTypeAuthorizations.users-placeholder')"
-            expanded
-            :native-size="users.length"
-            multiple
+          <b-field
+              :label="$t('dataTypeAuthorizations.users')"
+              :message="errors[0]"
+              :type="{
+              'is-danger': errors && errors.length > 0,
+              'is-success': valid,
+            }"
+              class="column mb-4"
           >
-            <option v-for="user in users" :key="user.id" :value="user.id">
-              {{ user.label }}
-            </option>
-          </b-select>
-        </b-field>
-
-        <b-field
-          :label="$t('dataTypeAuthorizations.name')"
-          :message="errors[0]"
-          :type="{
-            'is-danger': errors && errors.length > 0,
-            'is-success': valid,
-          }"
-          class="column mb-4"
+            <b-taginput
+                v-model="selectedlabels"
+                :data="userLabels"
+                :value="userLabels"
+                autocomplete
+                :open-on-focus="true"
+                type="is-dark"
+                :placeholder="$t('dataTypeAuthorizations.users-placeholder')"
+                @typing="getFilteredTags"
+            >
+            </b-taginput>
+          </b-field>
+        </ValidationProvider>
+        <ValidationProvider
+            v-slot="{ errors, valid }"
+            name="users"
+            rules="required"
+            vid="users"
+            class="column is-half"
         >
-          <b-input v-model="authorization.name" />
-        </b-field>
-      </ValidationProvider>
+          <b-field
+              :label="$t('dataTypeAuthorizations.name')"
+              :message="errors[0]"
+              :type="{
+              'is-danger': errors && errors.length > 0,
+              'is-success': valid,
+            }"
+              class="column mb-4"
+          >
+            <b-input v-model="authorization.name"/>
+          </b-field>
+        </ValidationProvider>
+      </div>
+      <!--      <ValidationProvider
+              v-slot="{ errors, valid }"
+              name="users"
+              rules="required"
+              vid="users"
+              class="columns"
+            >
+              <b-field
+                :label="$t('dataTypeAuthorizations.users')"
+                :message="errors[0]"
+                :type="{
+                  'is-danger': errors && errors.length > 0,
+                  'is-success': valid,
+                }"
+                class="column mb-4"
+              >
+                <b-select
+                  v-model="selectedUsers"
+                  :placeholder="$t('dataTypeAuthorizations.users-placeholder')"
+                  expanded
+                  :native-size="users.length"
+                  multiple
+                >
+                  <option v-for="user in users" :key="user.id" :value="user.id">
+                    {{ user.label }}
+                  </option>
+                </b-select>
+              </b-field>
+
+              <b-field
+                :label="$t('dataTypeAuthorizations.name')"
+                :message="errors[0]"
+                :type="{
+                  'is-danger': errors && errors.length > 0,
+                  'is-success': valid,
+                }"
+                class="column mb-4"
+              >
+                <b-input v-model="authorization.name" />
+              </b-field>
+            </ValidationProvider>-->
       <AuthorizationTable
-        v-if="dataGroups && authReferences && columnsVisible && authReferences[0]"
-        :auth-reference="authReferences[0]"
-        :authorization-scopes="authorizationScopes"
-        :columns-visible="columnsVisible"
-        :data-groups="dataGroups"
-        :remaining-option="authReferences.slice && authReferences.slice(1, authReferences.length)"
-        :authorization="authorization"
-        :current-authorization-scope="{}"
-        :is-root="true"
-        class="rows"
-        @modifyAuthorization="modifyAuthorization($event)"
-        @registerCurrentAuthorization="registerCurrentAuthorization($event)"
+          v-if="dataGroups && authReferences && columnsVisible && authReferences[0]"
+          :auth-reference="authReferences[0]"
+          :authorization-scopes="authorizationScopes"
+          :columns-visible="columnsVisible"
+          :data-groups="dataGroups"
+          :remaining-option="authReferences.slice && authReferences.slice(1, authReferences.length)"
+          :authorization="authorization"
+          :current-authorization-scope="{}"
+          :is-root="true"
+          class="rows"
+          @modifyAuthorization="modifyAuthorization($event)"
+          @registerCurrentAuthorization="registerCurrentAuthorization($event)"
       >
         <div class="row">
           <div class="columns">
             <b-field
-              v-for="(column, indexColumn) of columnsVisible"
-              :key="indexColumn"
-              :field="indexColumn"
-              :label="getColumnTitle(column)"
-              class="column"
+                v-for="(column, indexColumn) of columnsVisible"
+                :key="indexColumn"
+                :field="indexColumn"
+                :label="getColumnTitle(column)"
+                class="column"
             ></b-field>
           </div>
         </div>
@@ -85,10 +135,10 @@
 
       <div class="buttons">
         <b-button
-          icon-left="plus"
-          type="is-dark"
-          @click="handleSubmit(createAuthorization)"
-          style="margin-bottom: 10px"
+            icon-left="plus"
+            type="is-dark"
+            @click="handleSubmit(createAuthorization)"
+            style="margin-bottom: 10px"
         >
           {{ $t("dataTypeAuthorizations.create") }}
         </b-button>
@@ -99,21 +149,21 @@
 
 <script>
 import CollapsibleTree from "@/components/common/CollapsibleTree.vue";
-import SubMenu, { SubMenuPath } from "@/components/common/SubMenu.vue";
-import { AlertService } from "@/services/AlertService";
-import { ApplicationService } from "@/services/rest/ApplicationService";
-import { AuthorizationService } from "@/services/rest/AuthorizationService";
-import { UserPreferencesService } from "@/services/UserPreferencesService";
-import { ValidationObserver, ValidationProvider } from "vee-validate";
-import { Component, Prop, Vue, Watch } from "vue-property-decorator";
+import SubMenu, {SubMenuPath} from "@/components/common/SubMenu.vue";
+import {AlertService} from "@/services/AlertService";
+import {ApplicationService} from "@/services/rest/ApplicationService";
+import {AuthorizationService} from "@/services/rest/AuthorizationService";
+import {UserPreferencesService} from "@/services/UserPreferencesService";
+import {ValidationObserver, ValidationProvider} from "vee-validate";
+import {Component, Prop, Vue, Watch} from "vue-property-decorator";
 import PageView from "../common/PageView.vue";
-import { InternationalisationService } from "@/services/InternationalisationService";
-import { ApplicationResult } from "@/model/ApplicationResult";
-import { LOCAL_STORAGE_LANG } from "@/services/Fetcher";
-import { ReferenceService } from "@/services/rest/ReferenceService";
+import {InternationalisationService} from "@/services/InternationalisationService";
+import {ApplicationResult} from "@/model/ApplicationResult";
+import {LOCAL_STORAGE_LANG} from "@/services/Fetcher";
+import {ReferenceService} from "@/services/rest/ReferenceService";
 import AuthorizationTable from "@/components/common/AuthorizationTable";
-import { Authorization } from "@/model/authorization/Authorization";
-import { Authorizations } from "@/model/authorization/Authorizations";
+import {Authorization} from "@/model/authorization/Authorization";
+import {Authorizations} from "@/model/authorization/Authorizations";
 
 @Component({
   components: {
@@ -128,7 +178,7 @@ import { Authorizations } from "@/model/authorization/Authorizations";
 export default class DataTypeAuthorizationInfoView extends Vue {
   @Prop() dataTypeId;
   @Prop() applicationName;
-  @Prop({ default: "new" }) authorizationId;
+  @Prop({default: "new"}) authorizationId;
 
   __DEFAULT__ = "__DEFAULT__";
   referenceService = ReferenceService.INSTANCE;
@@ -145,6 +195,8 @@ export default class DataTypeAuthorizationInfoView extends Vue {
   dataGroups = [];
   authorizationScopes = [];
   application = new ApplicationResult();
+  selectedlabels = [];
+  userLabels = [];
 
   periods = {
     FROM_DATE: this.$t("dataTypeAuthorizations.from-date"),
@@ -157,7 +209,7 @@ export default class DataTypeAuthorizationInfoView extends Vue {
     label: {
       title: "Label",
       display: true,
-      internationalizationName: { fr: "Domaine", en: "Domain" },
+      internationalizationName: {fr: "Domaine", en: "Domain"},
     },
   };
   period = this.periods.FROM_DATE_TO_DATE;
@@ -172,8 +224,8 @@ export default class DataTypeAuthorizationInfoView extends Vue {
 
   getColumnTitle(column) {
     return (
-      (column.internationalizationName && column.internationalizationName[this.$i18n.locale]) ||
-      column.title
+        (column.internationalizationName && column.internationalizationName[this.$i18n.locale]) ||
+        column.title
     );
   }
 
@@ -187,15 +239,15 @@ export default class DataTypeAuthorizationInfoView extends Vue {
       var toDeleteElement = event.authorizations.toDelete[authorizationKeytoDelete];
       authorizations = authorizations.filter((auth) => {
         return !new Authorization(auth).equals(
-          toDeleteElement,
-          this.authorizationScopes.map((scope) => scope.id)
+            toDeleteElement,
+            this.authorizationScopes.map((scope) => scope.id)
         );
       });
     }
     authorization.authorizations[event.indexColumn] = authorizations;
     this.authorization = new Authorizations(
-      authorization,
-      this.authorizationScopes.map((as) => as.id)
+        authorization,
+        this.authorizationScopes.map((as) => as.id)
     );
   }
 
@@ -215,10 +267,10 @@ export default class DataTypeAuthorizationInfoView extends Vue {
     ];
     authorizations = authorizations.map((auth) => {
       if (
-        !new Authorization(auth).equals(
-          authorizationToReplace,
-          this.authorizationScopes.map((scope) => scope.id)
-        )
+          !new Authorization(auth).equals(
+              authorizationToReplace,
+              this.authorizationScopes.map((scope) => scope.id)
+          )
       ) {
         return auth;
       } else {
@@ -227,8 +279,8 @@ export default class DataTypeAuthorizationInfoView extends Vue {
     });
     authorization.authorizations[event.indexColumn] = authorizations;
     this.authorization = new Authorizations(
-      authorization,
-      this.authorizationScopes.map((as) => as.id)
+        authorization,
+        this.authorizationScopes.map((as) => as.id)
     );
   }
 
@@ -237,41 +289,43 @@ export default class DataTypeAuthorizationInfoView extends Vue {
     this.chosenLocale = this.userPreferencesService.getUserPrefLocale();
     this.subMenuPaths = [
       new SubMenuPath(
-        this.$t("dataTypesManagement.data-types").toLowerCase(),
-        () => this.$router.push(`/applications/${this.applicationName}/dataTypes`),
-        () => this.$router.push("/applications")
+          this.$t("dataTypesManagement.data-types").toLowerCase(),
+          () => this.$router.push(`/applications/${this.applicationName}/dataTypes`),
+          () => this.$router.push("/applications")
       ),
       new SubMenuPath(
-        this.$t(`dataTypeAuthorizations.sub-menu-data-type-authorizations`, {
-          dataType: this.dataTypeId,
-        }),
-        () => {
-          this.$router.push(
-            `/applications/${this.applicationName}/dataTypes/${this.dataTypeId}/authorizations`
-          );
-        },
-        () => this.$router.push(`/applications/${this.applicationName}/dataTypes`)
+          this.$t(`dataTypeAuthorizations.sub-menu-data-type-authorizations`, {
+            dataType: this.dataTypeId,
+          }),
+          () => {
+            this.$router.push(
+                `/applications/${this.applicationName}/dataTypes/${this.dataTypeId}/authorizations`
+            );
+          },
+          () => this.$router.push(`/applications/${this.applicationName}/dataTypes`)
       ),
       new SubMenuPath(
-        this.$t(`dataTypeAuthorizations.sub-menu-new-authorization`),
-        () => {},
-        () => {
-          this.$router.push(
-            `/applications/${this.applicationName}/dataTypes/${this.dataTypeId}/authorizations`
-          );
-        }
+          this.$t(`dataTypeAuthorizations.sub-menu-new-authorization`),
+          () => {
+          },
+          () => {
+            this.$router.push(
+                `/applications/${this.applicationName}/dataTypes/${this.dataTypeId}/authorizations`
+            );
+          }
       ),
     ];
   }
 
-  mounted() {}
+  mounted() {
+  }
 
   showDetail(parent) {
     for (const child in parent) {
       if (parent[child].children.length !== 0) {
-        parent[child] = { ...parent[child], showDetailIcon: true };
+        parent[child] = {...parent[child], showDetailIcon: true};
       }
-      parent[child] = { ...parent[child], showDetailIcon: false };
+      parent[child] = {...parent[child], showDetailIcon: false};
     }
   }
 
@@ -280,21 +334,21 @@ export default class DataTypeAuthorizationInfoView extends Vue {
       this.applications = await this.applicationService.getApplications();
       this.application = await this.applicationService.getApplication(this.applicationName);
       this.configuration = this.applications
-        .filter((a) => a.name === this.applicationName)
-        .map((a) => a.configuration.dataTypes[this.dataTypeId])[0];
+          .filter((a) => a.name === this.applicationName)
+          .map((a) => a.configuration.dataTypes[this.dataTypeId])[0];
       this.application = {
         ...this.application,
         localName: this.internationalisationService.mergeInternationalization(this.application)
-          .localName,
+            .localName,
         localDatatypeName: this.internationalisationService.localeDataTypeIdName(
-          this.application,
-          this.application.dataTypes[this.dataTypeId]
+            this.application,
+            this.application.dataTypes[this.dataTypeId]
         ),
       };
       this.authorizations = this.configuration?.authorization?.authorizationScopes || [];
       const grantableInfos = await this.authorizationService.getAuthorizationGrantableInfos(
-        this.applicationName,
-        this.dataTypeId
+          this.applicationName,
+          this.dataTypeId
       );
       ({
         authorizationScopes: this.authorizationScopes,
@@ -302,67 +356,78 @@ export default class DataTypeAuthorizationInfoView extends Vue {
         users: this.users,
       } = grantableInfos);
       //console.log("grantableInfos", grantableInfos);
-      this.columnsVisible = { ...this.columnsVisible, ...grantableInfos.columnsDescription };
+      this.columnsVisible = {...this.columnsVisible, ...grantableInfos.columnsDescription};
       if (this.authorizationId != "new") {
         var authorizations = await this.authorizationService.getAuthorizations(
-          this.applicationName,
-          this.dataTypeId,
-          this.authorizationId
+            this.applicationName,
+            this.dataTypeId,
+            this.authorizationId
         );
         authorizations = new Authorizations(
-          authorizations,
-          this.authorizationScopes.map((as) => as.id)
+            authorizations,
+            this.authorizationScopes.map((as) => as.id)
         );
         this.authorization = authorizations;
       } else {
         this.authorization = new Authorizations(
-          { dataType: this.dataTypeId, applicationNameOrId: this.applicationName },
-          this.authorizationScopes.map((as) => as.id)
+            {dataType: this.dataTypeId, applicationNameOrId: this.applicationName},
+            this.authorizationScopes.map((as) => as.id)
         );
       }
       let currentAuthorizationUsers = this.authorization.users || [];
       this.selectedUsers = this.users
-        .filter((user) => {
-          return currentAuthorizationUsers.find((u) => {
-            return u.id == user.id;
-          });
-        })
-        .map((user) => user.id);
+          .filter((user) => {
+            return currentAuthorizationUsers.find((u) => {
+              return u.id == user.id;
+            });
+          })
+          .map((user) => user.id);
+      for (let i = 0; i < this.selectedUsers.length; i++) {
+        for (let j = 0; j < this.users.length; j++) {
+          if (this.selectedUsers[i] === this.users[j].id) {
+            this.selectedlabels.push(this.users[j].label);
+          }
+        }
+      };
+      for (let i = 0; i < this.users.length; i++) {
+        if(!this.selectedlabels.includes(this.users[i].label))
+          this.userLabels.push(this.users[i].label)
+      }
       grantableInfos.authorizationScopes.reverse();
       let ret = {};
       for (let auth in grantableInfos.authorizationScopes) {
         let authorizationScope = grantableInfos.authorizationScopes[auth];
         let vc = this.authorizations[authorizationScope?.label];
         var reference =
-          this.configuration.data[vc.variable].components[vc.component].checker.params.refType;
+            this.configuration.data[vc.variable].components[vc.component].checker.params.refType;
         let ref = await this.getOrLoadReferences(reference);
-        ret[auth] = { references: ref, authorizationScope: authorizationScope.label };
+        ret[auth] = {references: ref, authorizationScope: authorizationScope.label};
       }
       let refs = Object.values(ret)
-        .reduce(
-          (acc, k) => [
-            ...acc,
-            ...k.references.referenceValues.reduce(
-              (a, b) => [...a, ...b.hierarchicalReference.split(".")],
-              acc
-            ),
-          ],
-          []
-        )
-        .reduce((a, b) => {
-          if (a.indexOf(b) < 0) {
-            a.push(b);
-          }
-          return a;
-        }, []);
+          .reduce(
+              (acc, k) => [
+                ...acc,
+                ...k.references.referenceValues.reduce(
+                    (a, b) => [...a, ...b.hierarchicalReference.split(".")],
+                    acc
+                ),
+              ],
+              []
+          )
+          .reduce((a, b) => {
+            if (a.indexOf(b) < 0) {
+              a.push(b);
+            }
+            return a;
+          }, []);
       for (const refsKey in refs) {
         await this.getOrLoadReferences(refs[refsKey]);
       }
       var remainingAuthorizations = [];
       for (const key in ret) {
         let partition = await this.partitionReferencesValues(
-          ret[key]?.references?.referenceValues,
-          ret[key]?.authorizationScope
+            ret[key]?.references?.referenceValues,
+            ret[key]?.authorizationScope
         );
         remainingAuthorizations[key] = partition;
       }
@@ -390,11 +455,37 @@ export default class DataTypeAuthorizationInfoView extends Vue {
     }
   }
 
+  getFilteredTags(text) {
+    this.userLabels = [];
+    this.filteredTags = this.users.filter((option) => {
+      return option.label
+          .toString()
+          .toLowerCase()
+          .indexOf(text.toLowerCase()) >= 0
+    })
+    console.log(this.filteredTags)
+    for (let i = 0; i < this.filteredTags.length; i++) {
+      if(!this.selectedlabels.includes(this.filteredTags[i].label)) {
+        this.userLabels.push(this.filteredTags[i].label)
+      }
+    }
+
+    /*for (let i = 0; i < this.filteredTags.length; i++) {
+      for (let j = 0; j < this.selectedlabels.length; j++) {
+        if (this.selectedlabels[j] === this.filteredTags[i].label) {
+          console.log(this.filteredTags)
+        } else {
+          this.userLabels.push(this.filteredTags[i].label)
+        }
+      }
+    }*/
+  }
+
   async partitionReferencesValues(
-    referencesValues,
-    authorizationScope,
-    currentPath,
-    currentCompleteLocalName
+      referencesValues,
+      authorizationScope,
+      currentPath,
+      currentCompleteLocalName
   ) {
     let returnValues = {};
     for (const referenceValue of referencesValues) {
@@ -424,7 +515,7 @@ export default class DataTypeAuthorizationInfoView extends Vue {
         localName = key;
       }
       var completeLocalName =
-        typeof currentCompleteLocalName === "undefined" ? "" : currentCompleteLocalName;
+          typeof currentCompleteLocalName === "undefined" ? "" : currentCompleteLocalName;
       completeLocalName = completeLocalName + (completeLocalName == "" ? "" : ",") + localName;
       let authPartition = returnValues[key] || {
         key,
@@ -443,21 +534,21 @@ export default class DataTypeAuthorizationInfoView extends Vue {
       var auth = returnValues[returnValuesKey];
       let referenceValueLeaf = auth.referenceValues?.[0];
       if (
-        auth.referenceValues.length <= 1 &&
-        referenceValueLeaf.hierarchicalKey == auth.currentPath
+          auth.referenceValues.length <= 1 &&
+          referenceValueLeaf.hierarchicalKey == auth.currentPath
       ) {
         returnValues[returnValuesKey] = {
           ...auth,
           authorizationScope,
           isLeaf: true,
-          referenceValues: { ...referenceValueLeaf, authorizationScope },
+          referenceValues: {...referenceValueLeaf, authorizationScope},
         };
       } else {
         var r = await this.partitionReferencesValues(
-          auth.referenceValues,
-          authorizationScope,
-          auth.currentPath,
-          auth.completeLocalName
+            auth.referenceValues,
+            authorizationScope,
+            auth.currentPath,
+            auth.completeLocalName
         );
         returnValues[returnValuesKey] = {
           ...auth,
@@ -493,28 +584,38 @@ export default class DataTypeAuthorizationInfoView extends Vue {
         dataType: this.dataTypeId,
         applicationNameOrId: this.applicationName,
       };
+      for (let i = 0; i < this.selectedlabels.length; i++) {
+        for (let j = 0; j < this.users.length; j++) {
+          if (this.selectedlabels[i] === this.users[j].label) {
+            this.selectedUsers.push(this.users[j].id);
+          }
+          ;
+        }
+        ;
+      }
+      ;
       authorizationToSend.usersId = this.selectedUsers;
       for (const scope in authorizationToSend.authorizations) {
         authorizationToSend.authorizations[scope] = authorizationToSend.authorizations[scope].map(
-          (auth) => {
-            var returnedAuth = new Authorization(auth);
-            returnedAuth.intervalDates = {
-              fromDay: returnedAuth.fromDay,
-              toDay: returnedAuth.toDay,
-            };
-            returnedAuth.dataGroups = returnedAuth.dataGroups.map((dg) => dg.id || dg);
-            return returnedAuth;
-          }
+            (auth) => {
+              var returnedAuth = new Authorization(auth);
+              returnedAuth.intervalDates = {
+                fromDay: returnedAuth.fromDay,
+                toDay: returnedAuth.toDay,
+              };
+              returnedAuth.dataGroups = returnedAuth.dataGroups.map((dg) => dg.id || dg);
+              return returnedAuth;
+            }
         );
       }
       await this.authorizationService.createAuthorization(
-        this.applicationName,
-        this.dataTypeId,
-        authorizationToSend
+          this.applicationName,
+          this.dataTypeId,
+          authorizationToSend
       );
       this.alertService.toastSuccess(this.$t("alert.create-authorization"));
       this.$router.push(
-        `/applications/${this.applicationName}/dataTypes/${this.dataTypeId}/authorizations`
+          `/applications/${this.applicationName}/dataTypes/${this.dataTypeId}/authorizations`
       );
     } catch (error) {
       this.alertService.toastServerError(error);
@@ -541,8 +642,8 @@ export default class DataTypeAuthorizationInfoView extends Vue {
       authorizationArray = [
         ...authorizationArray,
         ...(treeOrAuthorization instanceof Authorization
-          ? [treeOrAuthorization.parse()]
-          : this.extractAuthorizations(treeOrAuthorization)),
+            ? [treeOrAuthorization.parse()]
+            : this.extractAuthorizations(treeOrAuthorization)),
       ];
     }
     return authorizationArray;
-- 
GitLab


From 4c63c8165b968039fb4d9ee7516ce6c77908718e Mon Sep 17 00:00:00 2001
From: lucile varloteaux <lucile.varloteaux@inrae.fr>
Date: Wed, 6 Jul 2022 17:01:04 +0200
Subject: [PATCH 05/23] gestion de l'affichage de la colonne publication en
 fonction de la section repository

---
 .../components/common/AuthorizationTable.vue  | 10 ++---
 .../DataTypeAuthorizationInfoView.vue         | 37 +++++++++----------
 2 files changed, 23 insertions(+), 24 deletions(-)

diff --git a/ui/src/components/common/AuthorizationTable.vue b/ui/src/components/common/AuthorizationTable.vue
index 0cbd5a851..652f9b642 100644
--- a/ui/src/components/common/AuthorizationTable.vue
+++ b/ui/src/components/common/AuthorizationTable.vue
@@ -159,7 +159,7 @@ export default class AuthorizationTable extends Vue {
   updateStates() {
     var states = {};
     for (const column in this.columnsVisible) {
-      if (column == "label") {
+      if (column === "label") {
         continue;
       }
       states[column] = {};
@@ -220,9 +220,9 @@ export default class AuthorizationTable extends Vue {
     var stateElement = this.states[indexColumn][this.getPath(index)];
     var currentPath = this.getPath(index);
     authorizations = authorizations || {toDelete: [], toAdd: []};
-    if (stateElement.state == 1) {
+    if (stateElement.state === 1) {
       checkedAuthorization = this.authorization.getCheckedAuthorization(indexColumn, currentPath);
-      if (checkedAuthorization.scopeKey == currentPath) {
+      if (checkedAuthorization.scopeKey === currentPath) {
         authorizations.toDelete.push(checkedAuthorization.auth);
         eventToEmit = {currentPath, authorizations, index, indexColumn};
         this.$emit("modifyAuthorization", eventToEmit);
@@ -230,7 +230,7 @@ export default class AuthorizationTable extends Vue {
         var indetermined = false;
         var count = 0;
         for (const authReferenceKey in this.authReference) {
-          if (authReferenceKey != index) {
+          if (authReferenceKey !== index) {
             authorization = {...checkedAuthorization.auth};
             requiredAuthorizations = {...this.currentAuthorizationScope};
             authReference = this.authReference[authReferenceKey];
@@ -257,7 +257,7 @@ export default class AuthorizationTable extends Vue {
       let dependants = this.authorization.getDependants(indexColumn, currentPath);
       authorizations.toDelete = [...authorizations.toDelete, ...dependants];
       if (
-          Object.values(this.states[indexColumn]).filter((s) => s.state != 1).length - 1 ||
+          Object.values(this.states[indexColumn]).filter((s) => s.state !== 1).length - 1 ||
           this.isRoot
       ) {
         authorizations.toAdd.push(currentAuthorization);
diff --git a/ui/src/views/authorizations/DataTypeAuthorizationInfoView.vue b/ui/src/views/authorizations/DataTypeAuthorizationInfoView.vue
index a62a0723b..080554f79 100644
--- a/ui/src/views/authorizations/DataTypeAuthorizationInfoView.vue
+++ b/ui/src/views/authorizations/DataTypeAuthorizationInfoView.vue
@@ -219,14 +219,16 @@ export default class DataTypeAuthorizationInfoView extends Vue {
   configuration = {};
   authReferences = {};
   subMenuPaths = [];
-
+  repositury = null;
   selectedUsers = [];
 
   getColumnTitle(column) {
-    return (
-        (column.internationalizationName && column.internationalizationName[this.$i18n.locale]) ||
-        column.title
-    );
+    if(column.display) {
+      return (
+          (column.internationalizationName && column.internationalizationName[this.$i18n.locale]) ||
+          column.title
+      );
+    }
   }
 
   modifyAuthorization(event) {
@@ -346,6 +348,7 @@ export default class DataTypeAuthorizationInfoView extends Vue {
         ),
       };
       this.authorizations = this.configuration?.authorization?.authorizationScopes || [];
+      this.repositury = (this.application.dataTypes[this.dataTypeId].repository != null);
       const grantableInfos = await this.authorizationService.getAuthorizationGrantableInfos(
           this.applicationName,
           this.dataTypeId
@@ -357,6 +360,10 @@ export default class DataTypeAuthorizationInfoView extends Vue {
       } = grantableInfos);
       //console.log("grantableInfos", grantableInfos);
       this.columnsVisible = {...this.columnsVisible, ...grantableInfos.columnsDescription};
+      if (!this.repositury) {
+        this.columnsVisible.publication = {...this.columnsVisible.publication, display: false }
+      }
+      console.log(this.columnsVisible)
       if (this.authorizationId != "new") {
         var authorizations = await this.authorizationService.getAuthorizations(
             this.applicationName,
@@ -388,11 +395,13 @@ export default class DataTypeAuthorizationInfoView extends Vue {
             this.selectedlabels.push(this.users[j].label);
           }
         }
-      };
+      }
+      ;
       for (let i = 0; i < this.users.length; i++) {
-        if(!this.selectedlabels.includes(this.users[i].label))
+        if (!this.selectedlabels.includes(this.users[i].label))
           this.userLabels.push(this.users[i].label)
       }
+      this.userLabels.sort();
       grantableInfos.authorizationScopes.reverse();
       let ret = {};
       for (let auth in grantableInfos.authorizationScopes) {
@@ -463,22 +472,12 @@ export default class DataTypeAuthorizationInfoView extends Vue {
           .toLowerCase()
           .indexOf(text.toLowerCase()) >= 0
     })
-    console.log(this.filteredTags)
     for (let i = 0; i < this.filteredTags.length; i++) {
-      if(!this.selectedlabels.includes(this.filteredTags[i].label)) {
+      if (!this.selectedlabels.includes(this.filteredTags[i].label)) {
         this.userLabels.push(this.filteredTags[i].label)
       }
     }
-
-    /*for (let i = 0; i < this.filteredTags.length; i++) {
-      for (let j = 0; j < this.selectedlabels.length; j++) {
-        if (this.selectedlabels[j] === this.filteredTags[i].label) {
-          console.log(this.filteredTags)
-        } else {
-          this.userLabels.push(this.filteredTags[i].label)
-        }
-      }
-    }*/
+    this.userLabels.sort();
   }
 
   async partitionReferencesValues(
-- 
GitLab


From d4044564b8a1d5e69c14a8672c48fcf155109ab9 Mon Sep 17 00:00:00 2001
From: lucile varloteaux <lucile.varloteaux@inrae.fr>
Date: Mon, 11 Jul 2022 10:58:56 +0200
Subject: [PATCH 06/23] =?UTF-8?q?r=C3=A9paration=20erreur=20affichage=20r?=
 =?UTF-8?q?=C3=A9cap=20toutes=20autorisations?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ui/src/locales/en.json                        |   4 +-
 ui/src/locales/fr.json                        |   3 +-
 .../DataTypeAuthorizationsView.vue            | 296 ++++++++++++------
 3 files changed, 200 insertions(+), 103 deletions(-)

diff --git a/ui/src/locales/en.json b/ui/src/locales/en.json
index e721b0e29..6976e6daf 100644
--- a/ui/src/locales/en.json
+++ b/ui/src/locales/en.json
@@ -308,13 +308,13 @@
         "card-header-extraction": "Set checkout law",
         "label-tagInput": "Select data group",
         "label-datePicker": "Select a date",
-        "info-limit-action": "To limit the law to ",
         "all-variable": "All variables",
         "all-dates": "All dates",
         "or": "or",
         "info-limit-taginput": "Limits the law to ",
         "select-authorization": "Please select the law first.",
-        "warnning-chil-not-null": "Limitations are in progress on children, they will be replaced."
+        "warnning-chil-not-null": "Limitations are in progress on children, they will be replaced.",
+        "localization": "Localisation"
     },
     "ponctuation": {
         "semicolon" : ";",
diff --git a/ui/src/locales/fr.json b/ui/src/locales/fr.json
index a77b9442c..4fd5c258e 100644
--- a/ui/src/locales/fr.json
+++ b/ui/src/locales/fr.json
@@ -313,7 +313,8 @@
         "or": "ou",
         "info-limit-taginput": "Permet de limiter le droit à ",
         "select-authorization": "Veuillez d'abord selectionner le droit.",
-        "warnning-chil-not-null": "Des limitations sont en cours sur des enfants, elles seront remplacées."
+        "warnning-chil-not-null": "Des limitations sont en cours sur des enfants, elles seront remplacées.",
+        "localization": "Localisation"
     },
     "ponctuation": {
         "semicolon" : ";",
diff --git a/ui/src/views/authorizations/DataTypeAuthorizationsView.vue b/ui/src/views/authorizations/DataTypeAuthorizationsView.vue
index 75f7cdad3..eb3bf36c6 100644
--- a/ui/src/views/authorizations/DataTypeAuthorizationsView.vue
+++ b/ui/src/views/authorizations/DataTypeAuthorizationsView.vue
@@ -1,10 +1,10 @@
 <template>
   <PageView class="with-submenu">
     <SubMenu
-      :paths="subMenuPaths"
-      :root="application.localName || application.title"
-      role="navigation"
-      :aria-label="$t('menu.aria-sub-menu')"
+        :paths="subMenuPaths"
+        :root="application.localName || application.title"
+        role="navigation"
+        :aria-label="$t('menu.aria-sub-menu')"
     />
     <h1 class="title main-title">
       {{
@@ -23,78 +23,160 @@
           </div>
         </div>
       </div>
-
       <b-table
-        :data="authorizations"
-        :is-focusable="true"
-        :is-hoverable="true"
-        :paginated="true"
-        :per-page="15"
-        :sticky-header="true"
-        :striped="true"
-        class="row"
-        height="100%"
+          :data="authorizations"
+          :is-focusable="true"
+          :is-hoverable="true"
+          :paginated="true"
+          :per-page="15"
+          :striped="true"
+          class="row"
+          height="100%"
       >
         <b-table-column
-          v-slot="props"
-          :label="$t('dataTypeAuthorizations.name')"
-          b-table-column
-          field="name"
-          sortable
+            v-slot="props"
+            :label="$t('dataTypeAuthorizations.name')"
+            b-table-column
+            field="name"
+            sortable
         >
           {{ props.row.name }}
         </b-table-column>
         <b-table-column
-          v-slot="props"
-          :label="$t('dataTypeAuthorizations.roles')"
-          b-table-column
-          field="authorizations"
-          sortable
+            v-slot="props"
+            :label="$t('dataTypeAuthorizations.users')"
+            b-table-column
+            field="users"
+            sortable
         >
-          {{ Object.keys(props.row.authorizations || {}) }}
+          <template v-for="user in props.row.users.map((use) => use.login)">
+            <div :key="user">
+              <span>
+                {{ user }}
+              </span>
+            </div>
+          </template>
         </b-table-column>
         <b-table-column
-          v-slot="props"
-          :label="$t('dataTypeAuthorizations.users')"
-          b-table-column
-          field="users"
-          sortable
+            v-slot="props"
+            :label="$t('dataTypeAuthorizations.roles')"
+            b-table-column
+            field="authorizations"
+            sortable
         >
-          {{ props.row.users.map((use) => use.login) }}
+          <template v-for="authorization in Object.keys(props.row.authorizations)">
+            <div :key="authorization.id" class="columns">
+              <p class="column is-half">
+                {{ authorization }}
+              </p>
+              <a
+                  class="show-check-details column is-half"
+                  type="is-primary "
+                  @click="showModal(props.row.name, authorization)"
+                  style="color: #006464ff; margin-left: 10px"
+              >
+                <b-icon icon="eye" size="fa-4x"></b-icon>
+              </a>
+              <b-modal
+                  v-model="isCardModalActive"
+                  v-show="
+                  isSelectedName === props.row.name && isSelectedAuthorization === authorization
+                "
+              >
+                <div class="card">
+                  <div class="card-header">
+                    <div class="title card-header-title">
+                      <p field="name">{{ authorization }}</p>
+                    </div>
+                  </div>
+                  <div class="card-content">
+                    <div class="content">
+                      <h3>
+                        {{ $t("dataTypesManagement.filtered") }} {{ $t("ponctuation.colon") }}
+                      </h3>
+                      <div
+                          v-for="configuration in props.row.authorizations[authorization]"
+                          v-bind:key="configuration"
+                      >
+                        <div :key="configuration">
+                          <p>
+                            <span>
+                              {{ $t("dataTypeAuthorizations.localization") }}
+                              {{ $t("ponctuation.colon") }}
+                              <i>{{ configuration.requiredAuthorizations.localization }}</i>
+                              {{ $t("ponctuation.semicolon") }}
+                            </span>
+                          </p>
+                          <p>
+                            <span v-if="configuration.dataGroups.length === 0">
+                              {{ $t("dataTypeAuthorizations.data-group") }}
+                              {{ $t("ponctuation.colon") }}
+                              <i>{{ $t("dataTypeAuthorizations.all-variable") }}</i>
+                              {{ $t("ponctuation.semicolon") }}
+                            </span>
+                            <span v-else>
+                              {{ $t("dataTypeAuthorizations.data-group") }}
+                              {{ $t("ponctuation.colon") }} <i>{{ configuration.dataGroups }}</i>
+                              {{ $t("ponctuation.semicolon") }}
+                            </span>
+                          </p>
+                          <p>
+                            <span>
+                              {{ $t("dataTypeAuthorizations.period") }}
+                              {{ $t("ponctuation.colon") }} <i>{{ getPeriod(configuration) }}</i>
+                              {{ $t("ponctuation.semicolon") }}
+                            </span>
+                          </p>
+                        </div>
+                      </div>
+                    </div>
+                  </div>
+                </div>
+              </b-modal>
+            </div>
+          </template>
         </b-table-column>
         <b-table-column v-slot="props" :label="$t('dataTypeAuthorizations.actions')" b-table-column>
           <b-button
-            icon-left="times-circle"
-            size="is-small"
-            type="is-danger is-light"
-            @click="revoke(props.row.id)"
-            style="height: 1.5em; background-color: transparent; font-size: 1.45rem"
+              icon-left="times-circle"
+              size="is-small"
+              type="is-danger is-light"
+              @click="revoke(props.row.uuid)"
+              style="height: 1.5em; background-color: transparent; font-size: 1.45rem"
           >
           </b-button>
           <b-button
-            icon-left="pen-square"
-            size="is-small"
-            type="primary is-light"
-            @click="modifyAuthorization(props.row.uuid)"
-            style="height: 1.5em; background-color: transparent; font-size: 1.45rem"
+              icon-left="pen-square"
+              size="is-small"
+              type="is-warning"
+              @click="modifyAuthorization(props.row.uuid)"
+              outlined
+              onmouseover="this.style.color='rgba(255,140,0,0.5)'"
+              onmouseout="this.style.color='';"
+              style="
+              height: 1.5em;
+              background-color: transparent;
+              font-size: 1.45rem;
+              border-color: transparent;
+            "
           >
           </b-button>
         </b-table-column>
       </b-table>
       <b-pagination
-        v-if="selectedUser && perPage <= selectedUser.length"
-        v-model="currentPage"
-        :per-page="perPage"
-        :total="selectedUser.length"
-        role="navigation"
-        :aria-label="$t('menu.aria-pagination')"
-        :aria-current-label="$t('menu.aria-curent-page')"
-        :aria-next-label="$t('menu.aria-next-page')"
-        :aria-previous-label="$t('menu.aria-previous-page')"
-        order="is-centered"
-        range-after="3"
-        range-before="3"
-        :rounded="true"
+          v-if="selectedUser && perPage <= selectedUser.length"
+          v-model="currentPage"
+          :per-page="perPage"
+          :total="selectedUser.length"
+          role="navigation"
+          :range-after="2"
+          :range-before="2"
+          :rounded="true"
+          :aria-label="$t('menu.aria-pagination')"
+          :aria-current-label="$t('menu.aria-curent-page')"
+          :aria-next-label="$t('menu.aria-next-page')"
+          :aria-previous-label="$t('menu.aria-previous-page')"
+          order="is-centered"
       >
       </b-pagination>
     </div>
@@ -102,17 +184,17 @@
 </template>
 
 <script>
-import SubMenu, { SubMenuPath } from "@/components/common/SubMenu.vue";
-import { AlertService } from "@/services/AlertService";
-import { ApplicationService } from "@/services/rest/ApplicationService";
-import { AuthorizationService } from "@/services/rest/AuthorizationService";
-import { InternationalisationService } from "@/services/InternationalisationService";
-import { Component, Prop, Vue } from "vue-property-decorator";
+import SubMenu, {SubMenuPath} from "@/components/common/SubMenu.vue";
+import {AlertService} from "@/services/AlertService";
+import {ApplicationService} from "@/services/rest/ApplicationService";
+import {AuthorizationService} from "@/services/rest/AuthorizationService";
+import {InternationalisationService} from "@/services/InternationalisationService";
+import {Component, Prop, Vue} from "vue-property-decorator";
 import PageView from "../common/PageView.vue";
-import { ApplicationResult } from "@/model/ApplicationResult";
+import {ApplicationResult} from "@/model/ApplicationResult";
 
 @Component({
-  components: { PageView, SubMenu },
+  components: {PageView, SubMenu},
 })
 export default class DataTypeAuthorizationsView extends Vue {
   @Prop() dataTypeId;
@@ -130,6 +212,9 @@ export default class DataTypeAuthorizationsView extends Vue {
   scopes = [];
   currentPage = 1;
   perPage = 15;
+  isSelectedName = "";
+  isSelectedAuthorization = "";
+  isCardModalActive = false;
   periods = {
     FROM_DATE: this.$t("dataTypeAuthorizations.from-date"),
     TO_DATE: this.$t("dataTypeAuthorizations.to-date"),
@@ -141,33 +226,23 @@ export default class DataTypeAuthorizationsView extends Vue {
     this.init();
     this.subMenuPaths = [
       new SubMenuPath(
-        this.$t("dataTypesManagement.data-types").toLowerCase(),
-        () => this.$router.push(`/applications/${this.applicationName}/dataTypes`),
-        () => this.$router.push("/applications")
+          this.$t("dataTypesManagement.data-types").toLowerCase(),
+          () => this.$router.push(`/applications/${this.applicationName}/dataTypes`),
+          () => this.$router.push("/applications")
       ),
       new SubMenuPath(
-        this.$t(`dataTypeAuthorizations.sub-menu-data-type-authorizations`, {
-          dataType: this.dataTypeId,
-        }),
-        () => {
-          this.$router.push(
-            `/applications/${this.applicationName}/dataTypes/${this.dataTypeId}/authorizations`
-          );
-        },
-        () => this.$router.push(`/applications/${this.applicationName}/dataTypes`)
+          this.$t(`dataTypeAuthorizations.sub-menu-data-type-authorizations`, {
+            dataType: this.dataTypeId,
+          }),
+          () => {
+            this.$router.push(
+                `/applications/${this.applicationName}/dataTypes/${this.dataTypeId}/authorizations`
+            );
+          },
+          () => this.$router.push(`/applications/${this.applicationName}/dataTypes`)
       ),
     ];
   }
-  // fillAuthorizationtTree(tree, auth){
-  //   tree = tree ||{};
-  //   for (const scope in auth.authorizedScopes) {
-  //     var nodes = auth.authorizedScopes[scope].split('.')
-  //     while(node.length){
-  //       var node = nodes.shift();
-  //       var nodeScope = tree[node];
-  //     }
-  //   }
-  // }
 
   async init() {
     try {
@@ -175,15 +250,15 @@ export default class DataTypeAuthorizationsView extends Vue {
       this.application = {
         ...this.application,
         localName: this.internationalisationService.mergeInternationalization(this.application)
-          .localName,
+            .localName,
         localDatatypeName: this.internationalisationService.localeDataTypeIdName(
-          this.application,
-          this.application.dataTypes[this.dataTypeId]
+            this.application,
+            this.application.dataTypes[this.dataTypeId]
         ),
       };
       this.authorizations = await this.authorizationService.getDataAuthorizations(
-        this.applicationName,
-        this.dataTypeId
+          this.applicationName,
+          this.dataTypeId
       );
       if (this.authorizations && this.authorizations.length !== 0) {
         this.scopes = Object.keys(this.authorizations[0].authorizations);
@@ -202,30 +277,32 @@ export default class DataTypeAuthorizationsView extends Vue {
 
   addAuthorization() {
     this.$router.push(
-      `/applications/${this.applicationName}/dataTypes/${this.dataTypeId}/authorizations/new`
+        `/applications/${this.applicationName}/dataTypes/${this.dataTypeId}/authorizations/new`
     );
   }
+
   modifyAuthorization(id) {
     this.$router.push(
-      `/applications/${this.applicationName}/dataTypes/${this.dataTypeId}/authorizations/${id}`
+        `/applications/${this.applicationName}/dataTypes/${this.dataTypeId}/authorizations/${id}`
     );
   }
 
   async revoke(id) {
     try {
       await this.authorizationService.revokeAuthorization(
-        this.applicationName,
-        this.dataTypeId,
-        id
+          this.applicationName,
+          this.dataTypeId,
+          id
       );
       this.alertService.toastSuccess(this.$t("alert.revoke-authorization"));
       this.authorizations.splice(
-        this.authorizations.findIndex((a) => a.id === id),
-        1
+          this.authorizations.findIndex((a) => a.id === id),
+          1
       );
     } catch (error) {
       this.alertService.toastServerError(error);
     }
+    window.location.reload();
   }
 
   getPeriod(authorization) {
@@ -233,17 +310,36 @@ export default class DataTypeAuthorizationsView extends Vue {
       return this.periods.ALWAYS;
     } else if (authorization.fromDay && !authorization.toDay) {
       return (
-        this.periods.FROM_DATE +
-        ` ${authorization.fromDay[2]}/${authorization.fromDay[1]}/${authorization.fromDay[0]}`
+          this.periods.FROM_DATE +
+          ` ${authorization.fromDay[2]}/${authorization.fromDay[1]}/${authorization.fromDay[0]}`
       );
     } else if (!authorization.fromDay && authorization.toDay) {
       return (
-        this.periods.TO_DATE +
-        ` ${authorization.toDay[2]}/${authorization.toDay[1]}/${authorization.toDay[0]}`
+          this.periods.TO_DATE +
+          ` ${authorization.toDay[2]}/${authorization.toDay[1]}/${authorization.toDay[0]}`
       );
     } else {
       return `${authorization.fromDay[2]}/${authorization.fromDay[1]}/${authorization.fromDay[0]} - ${authorization.toDay[2]}/${authorization.toDay[1]}/${authorization.toDay[0]}`;
     }
   }
+
+  showModal(name, authorization) {
+    this.isSelectedName = name;
+    this.isSelectedAuthorization = authorization;
+    this.isCardModalActive = true;
+  }
 }
 </script>
+<style lang="scss">
+td {
+  padding: 6px;
+
+  .columns {
+    margin: 0;
+
+    .column.is-half {
+      padding: 6px;
+    }
+  }
+}
+</style>
-- 
GitLab


From ec2b2298a6b7e4d9ee54d3c1d45cd7ab1c8ac836 Mon Sep 17 00:00:00 2001
From: lucile varloteaux <lucile.varloteaux@inrae.fr>
Date: Mon, 11 Jul 2022 10:59:28 +0200
Subject: [PATCH 07/23] ajout paramettre d'affichage de la modal

---
 .../AuthorizationForPeriodDatagroups.vue      | 140 +++---
 .../components/common/AuthorizationTable.vue  | 141 +++---
 .../DataTypeAuthorizationInfoView.vue         | 412 ++++++++----------
 3 files changed, 335 insertions(+), 358 deletions(-)

diff --git a/ui/src/components/common/AuthorizationForPeriodDatagroups.vue b/ui/src/components/common/AuthorizationForPeriodDatagroups.vue
index 42c084f3c..2caff489a 100644
--- a/ui/src/components/common/AuthorizationForPeriodDatagroups.vue
+++ b/ui/src/components/common/AuthorizationForPeriodDatagroups.vue
@@ -2,29 +2,35 @@
   <span>
     <b-tooltip position="is-right" multilined>
       <a
-        v-if="(column.withDataGroups && dataGroups.length > 1) || column.withPeriods"
-        class="show-check-details"
-        :type="state.state !== 1 ? 'is-grey ' : 'is-primary '"
-        @click="showDetail"
-        style="color: #006464ff; margin-left: 10px"
-        ><b-icon
+          v-if="(column.withDataGroups && dataGroups.length > 1) || column.withPeriods"
+          class="show-check-details"
+          :type="state.state !== 1 ? 'is-grey ' : 'is-primary '"
+          @click="showDetail"
+          style="color: #006464ff; margin-left: 10px"
+      ><b-icon
           v-if="(column.withDataGroups && dataGroups.length > 1) || column.withPeriods"
           icon="eye"
           size="fa-4x"
-        ></b-icon
+      ></b-icon
       ></a>
       <template v-slot:content>
-        <div v-if="state.state === 1" class="has-background-primary show-detail-for-selected" style="height: 175px">
+        <div
+            v-if="state.state === 1"
+            class="has-background-primary show-detail-for-selected"
+            style="height: 175px"
+        >
           {{ $t("dataTypeAuthorizations.info-limit-taginput") }}
           <b v-if="column.withPeriods">{{ $t("dataTypeAuthorizations.a-period") }}</b>
           <span v-if="(column.withDataGroups && dataGroups.length > 1) || column.withPeriods"
-            >{{ $t("dataTypeAuthorizations.or") }}
+          >{{ $t("dataTypeAuthorizations.or") }}
           </span>
           <b v-if="column.withDataGroups && dataGroups.length > 1">{{
-            $t("dataTypeAuthorizations.a-datagroup")
-          }}</b>
+              $t("dataTypeAuthorizations.a-datagroup")
+            }}</b>
           <div>
-            <h3>{{ $t("dataTypesRepository.table-file-data-period") }} {{ $t("ponctuation.colon")}}</h3>
+            <h3>
+              {{ $t("dataTypesRepository.table-file-data-period") }} {{ $t("ponctuation.colon") }}
+            </h3>
             <div v-if="state.from || state.to">
               <span v-if="state.from">
                 {{ $t("dataTypeAuthorizations.from-date") }} {{ state.from.toDateString() }}
@@ -33,26 +39,31 @@
                 {{ $t("dataTypeAuthorizations.to-date") }} {{ state.to.toDateString() }}
               </span>
             </div>
-            <div class="defaultValueTooltip" v-else>{{ $t("dataTypeAuthorizations.all-dates") }}</div>
+            <div class="defaultValueTooltip" v-else>
+              {{ $t("dataTypeAuthorizations.all-dates") }}
+            </div>
           </div>
           <div>
-            <h3>{{ $t("dataTypeAuthorizations.data-group") }} {{ $t("ponctuation.colon")}}</h3>
+            <h3>{{ $t("dataTypeAuthorizations.data-group") }} {{ $t("ponctuation.colon") }}</h3>
             <div class="defaultValueTooltip" v-if="state.dataGroups && state.dataGroups.length > 0">
               <span v-for="(datagroup, i) in state.dataGroups" class="defaultValueTooltip" :key="i">
-                {{ dataGroups.find((dg) => dg.id == datagroup || dg.id == datagroup.id).label }} {{ $t("ponctuation.comma") }}
+                {{ dataGroups.find((dg) => dg.id == datagroup || dg.id == datagroup.id).label }}
+                {{ $t("ponctuation.comma") }}
               </span>
             </div>
-            <div class="defaultValueTooltip" v-else>{{ $t("dataTypeAuthorizations.all-variable") }}</div>
+            <div class="defaultValueTooltip" v-else>
+              {{ $t("dataTypeAuthorizations.all-variable") }}
+            </div>
           </div>
         </div>
       </template>
     </b-tooltip>
     <b-modal
-      v-if="currentAuthorization"
-      v-model="showModal"
-      class="modalCardRef"
-      has-modal-card
-      trap-focus
+        v-if="currentAuthorization"
+        v-model="showModal"
+        class="modalCardRef"
+        has-modal-card
+        trap-focus
     >
       <div class="card">
         <header class="card-header">
@@ -61,64 +72,65 @@
           </p>
         </header>
         <div class="card-content">
-          <b-field :label="$t('dataTypeAuthorizations.label-tagInput')" label-position="on-border">
+          <b-field v-if="column.withDataGroups" :label="$t('dataTypeAuthorizations.label-tagInput')"
+                   label-position="on-border">
             <b-taginput
-              v-model="currentAuthorization.authorizations.dataGroups"
-              :data="dataGroups"
-              :open-on-focus="true"
-              :placeholder="$t('dataTypeAuthorizations.data-groups-placeholder')"
-              :value="dataGroups.id"
-              autocomplete
-              class="column"
-              field="label"
-              type="is-primary"
+                v-model="currentAuthorization.authorizations.dataGroups"
+                :data="dataGroups"
+                :open-on-focus="true"
+                :placeholder="$t('dataTypeAuthorizations.data-groups-placeholder')"
+                :value="dataGroups.id"
+                autocomplete
+                class="column"
+                field="label"
+                type="is-primary"
             >
             </b-taginput>
           </b-field>
-          <b-field
-            class="column"
-            :label="$t('dataTypeAuthorizations.label-datePicker')"
-            label-position="on-border"
+          <b-field v-if="column.withPeriods"
+                   class="column"
+                   :label="$t('dataTypeAuthorizations.label-datePicker')"
+                   label-position="on-border"
           >
             <b-datepicker
-              v-model="currentAuthorization.authorizations.from"
-              :date-parser="parseDate"
-              :placeholder="
+                v-model="currentAuthorization.authorizations.from"
+                :date-parser="parseDate"
+                :placeholder="
                 $t('dataTypesRepository.placeholder-datepicker') +
                 ' dd-MM-YYYY, dd-MM-YYYY hh, dd-MM-YYYY hh:mm, dd-MM-YYYY HH:mm:ss'
               "
-              editable
-              icon="calendar"
-              pack="far"
-              @remove.capture="() => selectCheckbox($event, index, indexColumn, scope)"
-              @input="selectCheckbox($event, index, indexColumn, scope, 'from')"
+                editable
+                icon="calendar"
+                pack="far"
+                @remove.capture="() => selectCheckbox($event, index, indexColumn, scope)"
+                @input="selectCheckbox($event, index, indexColumn, scope, 'from')"
             >
             </b-datepicker>
           </b-field>
-          <b-field
-            class="column"
-            :label="$t('dataTypeAuthorizations.label-datePicker')"
-            label-position="on-border"
+          <b-field v-if="column.withPeriods"
+                   class="column"
+                   :label="$t('dataTypeAuthorizations.label-datePicker')"
+                   label-position="on-border"
           >
             <b-datepicker
-              v-model="currentAuthorization.authorizations.to"
-              :date-parser="parseDate"
-              :placeholder="
+                v-model="currentAuthorization.authorizations.to"
+                :date-parser="parseDate"
+                :placeholder="
                 $t('dataTypesRepository.placeholder-datepicker') +
                 ' dd-MM-YYYY, dd-MM-YYYY hh, dd-MM-YYYY hh:mm, dd-MM-YYYY HH:mm:ss'
               "
-              editable
-              icon="calendar"
-              pack="far"
+                editable
+                icon="calendar"
+                pack="far"
             >
             </b-datepicker>
           </b-field>
           <div class="buttons">
             <b-button
-              icon-left="check"
-              type="is-dark"
-              @click="registerCurrentAuthorization"
-              style="margin-bottom: 10px"
+                icon-left="check"
+                type="is-dark"
+                @click="registerCurrentAuthorization"
+                style="margin-bottom: 10px"
             >
               {{ $t("dataTypesManagement.validate") }}
             </b-button>
@@ -130,11 +142,11 @@
 </template>
 
 <script>
-import { Component, Prop, Vue } from "vue-property-decorator";
-import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome";
+import {Component, Prop, Vue} from "vue-property-decorator";
+import {FontAwesomeIcon} from "@fortawesome/vue-fontawesome";
 
 @Component({
-  components: { FontAwesomeIcon },
+  components: {FontAwesomeIcon},
 })
 export default class AuthorizationForPeriodDatagroups extends Vue {
   @Prop() column;
@@ -149,11 +161,12 @@ export default class AuthorizationForPeriodDatagroups extends Vue {
   created() {
     this.init();
   }
+
   init() {
     var authorizations = this.state.fromAuthorization;
     if (authorizations) {
       authorizations.dataGroups = this.dataGroups.filter((dg) =>
-        authorizations.dataGroups.find((dg2) => dg.id == dg2)
+          authorizations.dataGroups.find((dg2) => dg.id == dg2)
       );
       authorizations.from = authorizations.fromDay ? new Date(authorizations.fromDay) : null;
       authorizations.to = authorizations.toDay ? new Date(authorizations.toDay) : null;
@@ -164,6 +177,7 @@ export default class AuthorizationForPeriodDatagroups extends Vue {
       };
     }
   }
+
   registerCurrentAuthorization() {
     this.$emit("registerCurrentAuthorization", this.currentAuthorization);
     this.showModal = false;
@@ -176,7 +190,7 @@ export default class AuthorizationForPeriodDatagroups extends Vue {
 
   parseDate(date) {
     date =
-      date && date.replace(/(\d{2})\/(\d{2})\/(\d{4})(( \d{2})?(:\d{2})?(:\d{2})?)/, "$3-$2-$1$4");
+        date && date.replace(/(\d{2})\/(\d{2})\/(\d{4})(( \d{2})?(:\d{2})?(:\d{2})?)/, "$3-$2-$1$4");
     return new Date(date);
   }
 }
@@ -190,9 +204,11 @@ export default class AuthorizationForPeriodDatagroups extends Vue {
 .show-detail-for-selected {
   height: 60px;
 }
+
 .modalCardRef .modal-background {
   background-color: rgba(10, 10, 10, 0.5);
 }
+
 .modal .modal-content {
   height: 70%;
 }
diff --git a/ui/src/components/common/AuthorizationTable.vue b/ui/src/components/common/AuthorizationTable.vue
index 652f9b642..e725ff1b1 100644
--- a/ui/src/components/common/AuthorizationTable.vue
+++ b/ui/src/components/common/AuthorizationTable.vue
@@ -1,61 +1,72 @@
 <template>
   <div>
     <li
-        v-if="authReference && !authReference.hierarchicalKey"
-        class="card-content authorizationTable datepicker-row"
+      v-if="authReference && !authReference.hierarchicalKey"
+      class="card-content authorizationTable datepicker-row"
     >
       <slot class="row"></slot>
       <div v-for="(scope, index) of authReference" :key="index">
         <div class="columns" @mouseleave="upHere = false" @mouseover="upHere = true">
           <div
-              v-for="(column, indexColumn) of columnsVisible"
-              :key="indexColumn"
-              :class="{ hover: upHere && scope.isLeaf }"
-              class="column"
+            v-for="(column, indexColumn) of columnsVisible"
+            :key="indexColumn"
+            :class="{ hover: upHere && scope.isLeaf }"
+            class="column"
           >
             <a
-                v-if="
+              v-if="
                 column.display &&
                 indexColumn === 'label' &&
                 (!scope.isLeaf || remainingOption.length)
               "
-                :class="!scope.isLeaf || remainingOption.length ? 'leaf' : 'folder'"
-                :field="indexColumn"
-                style="min-height: 10px; display: table-cell; vertical-align: middle"
-                @click="indexColumn === 'label' && toggle(index)"
+              :class="!scope.isLeaf || remainingOption.length ? 'leaf' : 'folder'"
+              :field="indexColumn"
+              style="min-height: 10px; display: table-cell; vertical-align: middle"
+              @click="indexColumn === 'label' && toggle(index)"
             >
               {{ localName(scope) }}
             </a>
             <p
-                v-else-if="
+              v-else-if="
                 column.display &&
                 indexColumn === 'label' &&
                 !(!scope.isLeaf || remainingOption.length)
               "
-                :class="!scope.isLeaf || remainingOption.length ? 'leaf' : 'folder'"
-                :field="indexColumn"
+              :class="!scope.isLeaf || remainingOption.length ? 'leaf' : 'folder'"
+              :field="indexColumn"
             >
               {{ localName(scope) }}
             </p>
             <b-field v-else-if="column.display" :field="indexColumn" class="column">
               <b-icon
-                  :icon="STATES[states[indexColumn][getPath(index)].state] || STATES[0]"
-                  pack="far"
-                  size="is-medium"
-                  type="is-primary"
-                  @click.native="selectCheckbox($event, index, indexColumn)"
+                :icon="STATES[states[indexColumn][getPath(index)].state] || STATES[0]"
+                pack="far"
+                size="is-medium"
+                type="is-primary"
+                @click.native="selectCheckbox($event, index, indexColumn)"
               />
               <AuthorizationForPeriodDatagroups
-                  v-if="states[indexColumn][getPath(index)].fromAuthorization"
-                  :column="column"
-                  :data-groups="dataGroups"
-                  :state="states[indexColumn][getPath(index)]"
-                  :index="index"
-                  :index-column="indexColumn"
-                  @registerCurrentAuthorization="$emit('registerCurrentAuthorization', $event)"
+                v-if="states[indexColumn][getPath(index)].fromAuthorization"
+                :column="column"
+                :data-groups="dataGroups"
+                :state="states[indexColumn][getPath(index)]"
+                :index="index"
+                :index-column="indexColumn"
+                @registerCurrentAuthorization="$emit('registerCurrentAuthorization', $event)"
               />
-              <b-tooltip position="is-right" multilined v-if="states[indexColumn][getPath(index)].state === 0 || states[indexColumn][getPath(index)].state === -1">
-                <b-button v-if="(column.withDataGroups && dataGroups.length > 1) || column.withPeriods" disabled style="border: none; background-color: transparent;">
+              <b-tooltip
+                position="is-right"
+                multilined
+                v-if="
+                  states[indexColumn][getPath(index)].state === 0 ||
+                  states[indexColumn][getPath(index)].state === -1
+                "
+              >
+                <b-button
+                  v-if="(column.withDataGroups && dataGroups.length > 1) || column.withPeriods"
+                  disabled
+                  style="border: none; background-color: transparent"
+                >
                   <b-icon
                     v-if="(column.withDataGroups && dataGroups.length > 1) || column.withPeriods"
                     icon="eye"
@@ -92,23 +103,23 @@
           </div>
         </div>
         <ul
-            v-if="authReference && (!scope.isLeaf || remainingOption.length) && open && open[index]"
-            class="rows"
+          v-if="authReference && (!scope.isLeaf || remainingOption.length) && open && open[index]"
+          class="rows"
         >
           <AuthorizationTable
-              v-if="authReference"
-              :auth-reference="getNextAuthreference(scope)"
-              :authorization="authorization"
-              :columns-visible="columnsVisible"
-              :data-groups="dataGroups"
-              :path="getPath(index)"
-              :remaining-option="getRemainingOption(scope)"
-              :required-authorizations="{}"
-              :authorization-scopes="authorizationScopes"
-              :current-authorization-scope="getCurrentAuthorizationScope(scope)"
-              @setIndetermined="eventSetIndetermined($event, index)"
-              @modifyAuthorization="$emit('modifyAuthorization', $event)"
-              @registerCurrentAuthorization="$emit('registerCurrentAuthorization', $event)"
+            v-if="authReference"
+            :auth-reference="getNextAuthreference(scope)"
+            :authorization="authorization"
+            :columns-visible="columnsVisible"
+            :data-groups="dataGroups"
+            :path="getPath(index)"
+            :remaining-option="getRemainingOption(scope)"
+            :required-authorizations="{}"
+            :authorization-scopes="authorizationScopes"
+            :current-authorization-scope="getCurrentAuthorizationScope(scope)"
+            @setIndetermined="eventSetIndetermined($event, index)"
+            @modifyAuthorization="$emit('modifyAuthorization', $event)"
+            @registerCurrentAuthorization="$emit('registerCurrentAuthorization', $event)"
           />
         </ul>
       </div>
@@ -117,22 +128,22 @@
 </template>
 
 <script>
-import {Component, Prop, Vue, Watch} from "vue-property-decorator";
-import {FontAwesomeIcon} from "@fortawesome/vue-fontawesome";
-import {Authorization} from "@/model/authorization/Authorization";
+import { Component, Prop, Vue, Watch } from "vue-property-decorator";
+import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome";
+import { Authorization } from "@/model/authorization/Authorization";
 import AuthorizationForPeriodDatagroups from "@/components/common/AuthorizationForPeriodDatagroups.vue";
 
 @Component({
-  components: {FontAwesomeIcon, AuthorizationForPeriodDatagroups},
+  components: { FontAwesomeIcon, AuthorizationForPeriodDatagroups },
 })
 export default class AuthorizationTable extends Vue {
-  STATES = {"-1": "minus-square", 0: "square", 1: "check-square"};
+  STATES = { "-1": "minus-square", 0: "square", 1: "check-square" };
   EXTRACTION = "extraction";
   @Prop() authReference; //informations about nodes
   @Prop() remainingOption; //array of next nodes
   @Prop() columnsVisible; // infos for columns
-  @Prop({default: ""}) path;
-  @Prop({default: false}) isRoot;
+  @Prop({ default: "" }) path;
+  @Prop({ default: false }) isRoot;
   @Prop() dataGroups; // array of the datagroups in  authorization configuration
   @Prop() authorization; //the authorizations scope from authorization configuration
   @Prop() authorizationScopes; //the authorizationsscope from authorization configuration
@@ -192,16 +203,16 @@ export default class AuthorizationTable extends Vue {
 
   localName(states) {
     return (
-        states.localName ||
-        (this.authReference.authorizationScope && this.authReference.authorizationScope.localName) ||
-        "pas trouve"
+      states.localName ||
+      (this.authReference.authorizationScope && this.authReference.authorizationScope.localName) ||
+      "pas trouve"
     );
   }
 
   toggle(index) {
     var open = {};
     open[index] = !this.open[index];
-    this.open = {...this.open, ...open};
+    this.open = { ...this.open, ...open };
   }
 
   select(option) {
@@ -219,20 +230,20 @@ export default class AuthorizationTable extends Vue {
     }
     var stateElement = this.states[indexColumn][this.getPath(index)];
     var currentPath = this.getPath(index);
-    authorizations = authorizations || {toDelete: [], toAdd: []};
+    authorizations = authorizations || { toDelete: [], toAdd: [] };
     if (stateElement.state === 1) {
       checkedAuthorization = this.authorization.getCheckedAuthorization(indexColumn, currentPath);
       if (checkedAuthorization.scopeKey === currentPath) {
         authorizations.toDelete.push(checkedAuthorization.auth);
-        eventToEmit = {currentPath, authorizations, index, indexColumn};
+        eventToEmit = { currentPath, authorizations, index, indexColumn };
         this.$emit("modifyAuthorization", eventToEmit);
       } else {
         var indetermined = false;
         var count = 0;
         for (const authReferenceKey in this.authReference) {
           if (authReferenceKey !== index) {
-            authorization = {...checkedAuthorization.auth};
-            requiredAuthorizations = {...this.currentAuthorizationScope};
+            authorization = { ...checkedAuthorization.auth };
+            requiredAuthorizations = { ...this.currentAuthorizationScope };
             authReference = this.authReference[authReferenceKey];
             requiredAuthorizations[authReference.authorizationScope] = authReference.currentPath;
             authorization.requiredAuthorizations = requiredAuthorizations;
@@ -241,7 +252,7 @@ export default class AuthorizationTable extends Vue {
             indetermined = true;
           }
         }
-        eventToEmit = {event, index, indexColumn, authorizations};
+        eventToEmit = { event, index, indexColumn, authorizations };
         if (indetermined || !count) {
           this.$emit("setIndetermined", eventToEmit);
         } else {
@@ -252,19 +263,19 @@ export default class AuthorizationTable extends Vue {
       let reference = this.authReference[index];
       requiredAuthorizations = this.currentAuthorizationScope || {};
       requiredAuthorizations[reference.authorizationScope] = reference.currentPath;
-      let currentAuthorization = new Authorization({requiredAuthorizations});
+      let currentAuthorization = new Authorization({ requiredAuthorizations });
       let currentPath = currentAuthorization.getPath(this.authorizationScopes.map((as) => as.id));
       let dependants = this.authorization.getDependants(indexColumn, currentPath);
       authorizations.toDelete = [...authorizations.toDelete, ...dependants];
       if (
-          Object.values(this.states[indexColumn]).filter((s) => s.state !== 1).length - 1 ||
-          this.isRoot
+        Object.values(this.states[indexColumn]).filter((s) => s.state !== 1).length - 1 ||
+        this.isRoot
       ) {
         authorizations.toAdd.push(currentAuthorization);
-        eventToEmit = {event, index, indexColumn, authorizations};
+        eventToEmit = { event, index, indexColumn, authorizations };
         this.$emit("modifyAuthorization", eventToEmit);
       } else {
-        eventToEmit = {event, index, indexColumn, authorizations};
+        eventToEmit = { event, index, indexColumn, authorizations };
         this.$emit("setIndetermined", eventToEmit);
       }
     }
@@ -273,7 +284,7 @@ export default class AuthorizationTable extends Vue {
   getCurrentAuthorizationScope(scope) {
     var authorizationScope = {};
     authorizationScope[scope.authorizationScope] = scope.currentPath;
-    return {...this.currentAuthorizationScope, ...authorizationScope};
+    return { ...this.currentAuthorizationScope, ...authorizationScope };
   }
 
   getNextAuthreference(states) {
diff --git a/ui/src/views/authorizations/DataTypeAuthorizationInfoView.vue b/ui/src/views/authorizations/DataTypeAuthorizationInfoView.vue
index 080554f79..b0d97d028 100644
--- a/ui/src/views/authorizations/DataTypeAuthorizationInfoView.vue
+++ b/ui/src/views/authorizations/DataTypeAuthorizationInfoView.vue
@@ -1,133 +1,92 @@
 <template>
   <PageView class="with-submenu">
     <SubMenu
-        :paths="subMenuPaths"
-        :root="application.localName || application.title"
-        role="navigation"
-        :aria-label="$t('menu.aria-sub-menu')"
+      :paths="subMenuPaths"
+      :root="application.localName || application.title"
+      role="navigation"
+      :aria-label="$t('menu.aria-sub-menu')"
     />
 
     <h1 class="title main-title">
       <span v-if="authorizationId === 'new'">{{
-          $t("titles.data-type-new-authorization", {
-            dataType: application.localDatatypeName || dataTypeId,
-          })
-        }}</span>
+        $t("titles.data-type-new-authorization", {
+          dataType: application.localDatatypeName || dataTypeId,
+        })
+      }}</span>
     </h1>
     <ValidationObserver ref="observer" v-slot="{ handleSubmit }">
       <div class="columns">
         <ValidationProvider
-            v-slot="{ errors, valid }"
-            name="users"
-            rules="required"
-            vid="users"
-            class="column is-half"
+          v-slot="{ errors, valid }"
+          name="users"
+          rules="required"
+          vid="users"
+          class="column is-half"
         >
           <b-field
-              :label="$t('dataTypeAuthorizations.users')"
-              :message="errors[0]"
-              :type="{
+            :label="$t('dataTypeAuthorizations.users')"
+            :message="errors[0]"
+            :type="{
               'is-danger': errors && errors.length > 0,
               'is-success': valid,
             }"
-              class="column mb-4"
+            class="column mb-4"
           >
             <b-taginput
-                v-model="selectedlabels"
-                :data="userLabels"
-                :value="userLabels"
-                autocomplete
-                :open-on-focus="true"
-                type="is-dark"
-                :placeholder="$t('dataTypeAuthorizations.users-placeholder')"
-                @typing="getFilteredTags"
+              v-model="selectedlabels"
+              :data="userLabels"
+              :value="userLabels"
+              autocomplete
+              :open-on-focus="true"
+              type="is-dark"
+              :placeholder="$t('dataTypeAuthorizations.users-placeholder')"
+              @typing="getFilteredTags"
             >
             </b-taginput>
           </b-field>
         </ValidationProvider>
         <ValidationProvider
-            v-slot="{ errors, valid }"
-            name="users"
-            rules="required"
-            vid="users"
-            class="column is-half"
+          v-slot="{ errors, valid }"
+          name="users"
+          rules="required"
+          vid="users"
+          class="column is-half"
         >
           <b-field
-              :label="$t('dataTypeAuthorizations.name')"
-              :message="errors[0]"
-              :type="{
+            :label="$t('dataTypeAuthorizations.name')"
+            :message="errors[0]"
+            :type="{
               'is-danger': errors && errors.length > 0,
               'is-success': valid,
             }"
-              class="column mb-4"
+            class="column mb-4"
           >
-            <b-input v-model="authorization.name"/>
+            <b-input v-model="authorization.name" />
           </b-field>
         </ValidationProvider>
       </div>
-      <!--      <ValidationProvider
-              v-slot="{ errors, valid }"
-              name="users"
-              rules="required"
-              vid="users"
-              class="columns"
-            >
-              <b-field
-                :label="$t('dataTypeAuthorizations.users')"
-                :message="errors[0]"
-                :type="{
-                  'is-danger': errors && errors.length > 0,
-                  'is-success': valid,
-                }"
-                class="column mb-4"
-              >
-                <b-select
-                  v-model="selectedUsers"
-                  :placeholder="$t('dataTypeAuthorizations.users-placeholder')"
-                  expanded
-                  :native-size="users.length"
-                  multiple
-                >
-                  <option v-for="user in users" :key="user.id" :value="user.id">
-                    {{ user.label }}
-                  </option>
-                </b-select>
-              </b-field>
-
-              <b-field
-                :label="$t('dataTypeAuthorizations.name')"
-                :message="errors[0]"
-                :type="{
-                  'is-danger': errors && errors.length > 0,
-                  'is-success': valid,
-                }"
-                class="column mb-4"
-              >
-                <b-input v-model="authorization.name" />
-              </b-field>
-            </ValidationProvider>-->
       <AuthorizationTable
-          v-if="dataGroups && authReferences && columnsVisible && authReferences[0]"
-          :auth-reference="authReferences[0]"
-          :authorization-scopes="authorizationScopes"
-          :columns-visible="columnsVisible"
-          :data-groups="dataGroups"
-          :remaining-option="authReferences.slice && authReferences.slice(1, authReferences.length)"
-          :authorization="authorization"
-          :current-authorization-scope="{}"
-          :is-root="true"
-          class="rows"
-          @modifyAuthorization="modifyAuthorization($event)"
-          @registerCurrentAuthorization="registerCurrentAuthorization($event)"
+        v-if="dataGroups && authReferences && columnsVisible && authReferences[0]"
+        :auth-reference="authReferences[0]"
+        :authorization-scopes="authorizationScopes"
+        :columns-visible="columnsVisible"
+        :data-groups="dataGroups"
+        :remaining-option="authReferences.slice && authReferences.slice(1, authReferences.length)"
+        :authorization="authorization"
+        :current-authorization-scope="{}"
+        :is-root="true"
+        class="rows"
+        @modifyAuthorization="modifyAuthorization($event)"
+        @registerCurrentAuthorization="registerCurrentAuthorization($event)"
       >
         <div class="row">
           <div class="columns">
             <b-field
-                v-for="(column, indexColumn) of columnsVisible"
-                :key="indexColumn"
-                :field="indexColumn"
-                :label="getColumnTitle(column)"
-                class="column"
+              v-for="(column, indexColumn) of columnsVisible"
+              :key="indexColumn"
+              :field="indexColumn"
+              :label="getColumnTitle(column)"
+              class="column"
             ></b-field>
           </div>
         </div>
@@ -135,10 +94,10 @@
 
       <div class="buttons">
         <b-button
-            icon-left="plus"
-            type="is-dark"
-            @click="handleSubmit(createAuthorization)"
-            style="margin-bottom: 10px"
+          icon-left="plus"
+          type="is-dark"
+          @click="handleSubmit(createAuthorization)"
+          style="margin-bottom: 10px"
         >
           {{ $t("dataTypeAuthorizations.create") }}
         </b-button>
@@ -149,21 +108,21 @@
 
 <script>
 import CollapsibleTree from "@/components/common/CollapsibleTree.vue";
-import SubMenu, {SubMenuPath} from "@/components/common/SubMenu.vue";
-import {AlertService} from "@/services/AlertService";
-import {ApplicationService} from "@/services/rest/ApplicationService";
-import {AuthorizationService} from "@/services/rest/AuthorizationService";
-import {UserPreferencesService} from "@/services/UserPreferencesService";
-import {ValidationObserver, ValidationProvider} from "vee-validate";
-import {Component, Prop, Vue, Watch} from "vue-property-decorator";
+import SubMenu, { SubMenuPath } from "@/components/common/SubMenu.vue";
+import { AlertService } from "@/services/AlertService";
+import { ApplicationService } from "@/services/rest/ApplicationService";
+import { AuthorizationService } from "@/services/rest/AuthorizationService";
+import { UserPreferencesService } from "@/services/UserPreferencesService";
+import { ValidationObserver, ValidationProvider } from "vee-validate";
+import { Component, Prop, Vue, Watch } from "vue-property-decorator";
 import PageView from "../common/PageView.vue";
-import {InternationalisationService} from "@/services/InternationalisationService";
-import {ApplicationResult} from "@/model/ApplicationResult";
-import {LOCAL_STORAGE_LANG} from "@/services/Fetcher";
-import {ReferenceService} from "@/services/rest/ReferenceService";
+import { InternationalisationService } from "@/services/InternationalisationService";
+import { ApplicationResult } from "@/model/ApplicationResult";
+import { LOCAL_STORAGE_LANG } from "@/services/Fetcher";
+import { ReferenceService } from "@/services/rest/ReferenceService";
 import AuthorizationTable from "@/components/common/AuthorizationTable";
-import {Authorization} from "@/model/authorization/Authorization";
-import {Authorizations} from "@/model/authorization/Authorizations";
+import { Authorization } from "@/model/authorization/Authorization";
+import { Authorizations } from "@/model/authorization/Authorizations";
 
 @Component({
   components: {
@@ -178,7 +137,7 @@ import {Authorizations} from "@/model/authorization/Authorizations";
 export default class DataTypeAuthorizationInfoView extends Vue {
   @Prop() dataTypeId;
   @Prop() applicationName;
-  @Prop({default: "new"}) authorizationId;
+  @Prop({ default: "new" }) authorizationId;
 
   __DEFAULT__ = "__DEFAULT__";
   referenceService = ReferenceService.INSTANCE;
@@ -209,7 +168,7 @@ export default class DataTypeAuthorizationInfoView extends Vue {
     label: {
       title: "Label",
       display: true,
-      internationalizationName: {fr: "Domaine", en: "Domain"},
+      internationalizationName: { fr: "Domaine", en: "Domain" },
     },
   };
   period = this.periods.FROM_DATE_TO_DATE;
@@ -223,10 +182,10 @@ export default class DataTypeAuthorizationInfoView extends Vue {
   selectedUsers = [];
 
   getColumnTitle(column) {
-    if(column.display) {
+    if (column.display) {
       return (
-          (column.internationalizationName && column.internationalizationName[this.$i18n.locale]) ||
-          column.title
+        (column.internationalizationName && column.internationalizationName[this.$i18n.locale]) ||
+        column.title
       );
     }
   }
@@ -241,15 +200,15 @@ export default class DataTypeAuthorizationInfoView extends Vue {
       var toDeleteElement = event.authorizations.toDelete[authorizationKeytoDelete];
       authorizations = authorizations.filter((auth) => {
         return !new Authorization(auth).equals(
-            toDeleteElement,
-            this.authorizationScopes.map((scope) => scope.id)
+          toDeleteElement,
+          this.authorizationScopes.map((scope) => scope.id)
         );
       });
     }
     authorization.authorizations[event.indexColumn] = authorizations;
     this.authorization = new Authorizations(
-        authorization,
-        this.authorizationScopes.map((as) => as.id)
+      authorization,
+      this.authorizationScopes.map((as) => as.id)
     );
   }
 
@@ -269,10 +228,10 @@ export default class DataTypeAuthorizationInfoView extends Vue {
     ];
     authorizations = authorizations.map((auth) => {
       if (
-          !new Authorization(auth).equals(
-              authorizationToReplace,
-              this.authorizationScopes.map((scope) => scope.id)
-          )
+        !new Authorization(auth).equals(
+          authorizationToReplace,
+          this.authorizationScopes.map((scope) => scope.id)
+        )
       ) {
         return auth;
       } else {
@@ -281,8 +240,8 @@ export default class DataTypeAuthorizationInfoView extends Vue {
     });
     authorization.authorizations[event.indexColumn] = authorizations;
     this.authorization = new Authorizations(
-        authorization,
-        this.authorizationScopes.map((as) => as.id)
+      authorization,
+      this.authorizationScopes.map((as) => as.id)
     );
   }
 
@@ -291,43 +250,41 @@ export default class DataTypeAuthorizationInfoView extends Vue {
     this.chosenLocale = this.userPreferencesService.getUserPrefLocale();
     this.subMenuPaths = [
       new SubMenuPath(
-          this.$t("dataTypesManagement.data-types").toLowerCase(),
-          () => this.$router.push(`/applications/${this.applicationName}/dataTypes`),
-          () => this.$router.push("/applications")
+        this.$t("dataTypesManagement.data-types").toLowerCase(),
+        () => this.$router.push(`/applications/${this.applicationName}/dataTypes`),
+        () => this.$router.push("/applications")
       ),
       new SubMenuPath(
-          this.$t(`dataTypeAuthorizations.sub-menu-data-type-authorizations`, {
-            dataType: this.dataTypeId,
-          }),
-          () => {
-            this.$router.push(
-                `/applications/${this.applicationName}/dataTypes/${this.dataTypeId}/authorizations`
-            );
-          },
-          () => this.$router.push(`/applications/${this.applicationName}/dataTypes`)
+        this.$t(`dataTypeAuthorizations.sub-menu-data-type-authorizations`, {
+          dataType: this.dataTypeId,
+        }),
+        () => {
+          this.$router.push(
+            `/applications/${this.applicationName}/dataTypes/${this.dataTypeId}/authorizations`
+          );
+        },
+        () => this.$router.push(`/applications/${this.applicationName}/dataTypes`)
       ),
       new SubMenuPath(
-          this.$t(`dataTypeAuthorizations.sub-menu-new-authorization`),
-          () => {
-          },
-          () => {
-            this.$router.push(
-                `/applications/${this.applicationName}/dataTypes/${this.dataTypeId}/authorizations`
-            );
-          }
+        this.$t(`dataTypeAuthorizations.sub-menu-new-authorization`),
+        () => {},
+        () => {
+          this.$router.push(
+            `/applications/${this.applicationName}/dataTypes/${this.dataTypeId}/authorizations`
+          );
+        }
       ),
     ];
   }
 
-  mounted() {
-  }
+  mounted() {}
 
   showDetail(parent) {
     for (const child in parent) {
       if (parent[child].children.length !== 0) {
-        parent[child] = {...parent[child], showDetailIcon: true};
+        parent[child] = { ...parent[child], showDetailIcon: true };
       }
-      parent[child] = {...parent[child], showDetailIcon: false};
+      parent[child] = { ...parent[child], showDetailIcon: false };
     }
   }
 
@@ -336,22 +293,22 @@ export default class DataTypeAuthorizationInfoView extends Vue {
       this.applications = await this.applicationService.getApplications();
       this.application = await this.applicationService.getApplication(this.applicationName);
       this.configuration = this.applications
-          .filter((a) => a.name === this.applicationName)
-          .map((a) => a.configuration.dataTypes[this.dataTypeId])[0];
+        .filter((a) => a.name === this.applicationName)
+        .map((a) => a.configuration.dataTypes[this.dataTypeId])[0];
       this.application = {
         ...this.application,
         localName: this.internationalisationService.mergeInternationalization(this.application)
-            .localName,
+          .localName,
         localDatatypeName: this.internationalisationService.localeDataTypeIdName(
-            this.application,
-            this.application.dataTypes[this.dataTypeId]
+          this.application,
+          this.application.dataTypes[this.dataTypeId]
         ),
       };
       this.authorizations = this.configuration?.authorization?.authorizationScopes || [];
-      this.repositury = (this.application.dataTypes[this.dataTypeId].repository != null);
+      this.repositury = this.application.dataTypes[this.dataTypeId].repository != null;
       const grantableInfos = await this.authorizationService.getAuthorizationGrantableInfos(
-          this.applicationName,
-          this.dataTypeId
+        this.applicationName,
+        this.dataTypeId
       );
       ({
         authorizationScopes: this.authorizationScopes,
@@ -359,36 +316,36 @@ export default class DataTypeAuthorizationInfoView extends Vue {
         users: this.users,
       } = grantableInfos);
       //console.log("grantableInfos", grantableInfos);
-      this.columnsVisible = {...this.columnsVisible, ...grantableInfos.columnsDescription};
+      this.columnsVisible = { ...this.columnsVisible, ...grantableInfos.columnsDescription };
       if (!this.repositury) {
-        this.columnsVisible.publication = {...this.columnsVisible.publication, display: false }
+        this.columnsVisible.publication = { ...this.columnsVisible.publication, display: false };
       }
-      console.log(this.columnsVisible)
+      console.log(this.columnsVisible);
       if (this.authorizationId != "new") {
         var authorizations = await this.authorizationService.getAuthorizations(
-            this.applicationName,
-            this.dataTypeId,
-            this.authorizationId
+          this.applicationName,
+          this.dataTypeId,
+          this.authorizationId
         );
         authorizations = new Authorizations(
-            authorizations,
-            this.authorizationScopes.map((as) => as.id)
+          authorizations,
+          this.authorizationScopes.map((as) => as.id)
         );
         this.authorization = authorizations;
       } else {
         this.authorization = new Authorizations(
-            {dataType: this.dataTypeId, applicationNameOrId: this.applicationName},
-            this.authorizationScopes.map((as) => as.id)
+          { dataType: this.dataTypeId, applicationNameOrId: this.applicationName },
+          this.authorizationScopes.map((as) => as.id)
         );
       }
       let currentAuthorizationUsers = this.authorization.users || [];
       this.selectedUsers = this.users
-          .filter((user) => {
-            return currentAuthorizationUsers.find((u) => {
-              return u.id == user.id;
-            });
-          })
-          .map((user) => user.id);
+        .filter((user) => {
+          return currentAuthorizationUsers.find((u) => {
+            return u.id == user.id;
+          });
+        })
+        .map((user) => user.id);
       for (let i = 0; i < this.selectedUsers.length; i++) {
         for (let j = 0; j < this.users.length; j++) {
           if (this.selectedUsers[i] === this.users[j].id) {
@@ -396,10 +353,9 @@ export default class DataTypeAuthorizationInfoView extends Vue {
           }
         }
       }
-      ;
       for (let i = 0; i < this.users.length; i++) {
         if (!this.selectedlabels.includes(this.users[i].label))
-          this.userLabels.push(this.users[i].label)
+          this.userLabels.push(this.users[i].label);
       }
       this.userLabels.sort();
       grantableInfos.authorizationScopes.reverse();
@@ -408,35 +364,35 @@ export default class DataTypeAuthorizationInfoView extends Vue {
         let authorizationScope = grantableInfos.authorizationScopes[auth];
         let vc = this.authorizations[authorizationScope?.label];
         var reference =
-            this.configuration.data[vc.variable].components[vc.component].checker.params.refType;
+          this.configuration.data[vc.variable].components[vc.component].checker.params.refType;
         let ref = await this.getOrLoadReferences(reference);
-        ret[auth] = {references: ref, authorizationScope: authorizationScope.label};
+        ret[auth] = { references: ref, authorizationScope: authorizationScope.label };
       }
       let refs = Object.values(ret)
-          .reduce(
-              (acc, k) => [
-                ...acc,
-                ...k.references.referenceValues.reduce(
-                    (a, b) => [...a, ...b.hierarchicalReference.split(".")],
-                    acc
-                ),
-              ],
-              []
-          )
-          .reduce((a, b) => {
-            if (a.indexOf(b) < 0) {
-              a.push(b);
-            }
-            return a;
-          }, []);
+        .reduce(
+          (acc, k) => [
+            ...acc,
+            ...k.references.referenceValues.reduce(
+              (a, b) => [...a, ...b.hierarchicalReference.split(".")],
+              acc
+            ),
+          ],
+          []
+        )
+        .reduce((a, b) => {
+          if (a.indexOf(b) < 0) {
+            a.push(b);
+          }
+          return a;
+        }, []);
       for (const refsKey in refs) {
         await this.getOrLoadReferences(refs[refsKey]);
       }
       var remainingAuthorizations = [];
       for (const key in ret) {
         let partition = await this.partitionReferencesValues(
-            ret[key]?.references?.referenceValues,
-            ret[key]?.authorizationScope
+          ret[key]?.references?.referenceValues,
+          ret[key]?.authorizationScope
         );
         remainingAuthorizations[key] = partition;
       }
@@ -467,24 +423,21 @@ export default class DataTypeAuthorizationInfoView extends Vue {
   getFilteredTags(text) {
     this.userLabels = [];
     this.filteredTags = this.users.filter((option) => {
-      return option.label
-          .toString()
-          .toLowerCase()
-          .indexOf(text.toLowerCase()) >= 0
-    })
+      return option.label.toString().toLowerCase().indexOf(text.toLowerCase()) >= 0;
+    });
     for (let i = 0; i < this.filteredTags.length; i++) {
       if (!this.selectedlabels.includes(this.filteredTags[i].label)) {
-        this.userLabels.push(this.filteredTags[i].label)
+        this.userLabels.push(this.filteredTags[i].label);
       }
     }
     this.userLabels.sort();
   }
 
   async partitionReferencesValues(
-      referencesValues,
-      authorizationScope,
-      currentPath,
-      currentCompleteLocalName
+    referencesValues,
+    authorizationScope,
+    currentPath,
+    currentCompleteLocalName
   ) {
     let returnValues = {};
     for (const referenceValue of referencesValues) {
@@ -514,7 +467,7 @@ export default class DataTypeAuthorizationInfoView extends Vue {
         localName = key;
       }
       var completeLocalName =
-          typeof currentCompleteLocalName === "undefined" ? "" : currentCompleteLocalName;
+        typeof currentCompleteLocalName === "undefined" ? "" : currentCompleteLocalName;
       completeLocalName = completeLocalName + (completeLocalName == "" ? "" : ",") + localName;
       let authPartition = returnValues[key] || {
         key,
@@ -533,21 +486,21 @@ export default class DataTypeAuthorizationInfoView extends Vue {
       var auth = returnValues[returnValuesKey];
       let referenceValueLeaf = auth.referenceValues?.[0];
       if (
-          auth.referenceValues.length <= 1 &&
-          referenceValueLeaf.hierarchicalKey == auth.currentPath
+        auth.referenceValues.length <= 1 &&
+        referenceValueLeaf.hierarchicalKey == auth.currentPath
       ) {
         returnValues[returnValuesKey] = {
           ...auth,
           authorizationScope,
           isLeaf: true,
-          referenceValues: {...referenceValueLeaf, authorizationScope},
+          referenceValues: { ...referenceValueLeaf, authorizationScope },
         };
       } else {
         var r = await this.partitionReferencesValues(
-            auth.referenceValues,
-            authorizationScope,
-            auth.currentPath,
-            auth.completeLocalName
+          auth.referenceValues,
+          authorizationScope,
+          auth.currentPath,
+          auth.completeLocalName
         );
         returnValues[returnValuesKey] = {
           ...auth,
@@ -588,33 +541,30 @@ export default class DataTypeAuthorizationInfoView extends Vue {
           if (this.selectedlabels[i] === this.users[j].label) {
             this.selectedUsers.push(this.users[j].id);
           }
-          ;
         }
-        ;
       }
-      ;
       authorizationToSend.usersId = this.selectedUsers;
       for (const scope in authorizationToSend.authorizations) {
         authorizationToSend.authorizations[scope] = authorizationToSend.authorizations[scope].map(
-            (auth) => {
-              var returnedAuth = new Authorization(auth);
-              returnedAuth.intervalDates = {
-                fromDay: returnedAuth.fromDay,
-                toDay: returnedAuth.toDay,
-              };
-              returnedAuth.dataGroups = returnedAuth.dataGroups.map((dg) => dg.id || dg);
-              return returnedAuth;
-            }
+          (auth) => {
+            var returnedAuth = new Authorization(auth);
+            returnedAuth.intervalDates = {
+              fromDay: returnedAuth.fromDay,
+              toDay: returnedAuth.toDay,
+            };
+            returnedAuth.dataGroups = returnedAuth.dataGroups.map((dg) => dg.id || dg);
+            return returnedAuth;
+          }
         );
       }
       await this.authorizationService.createAuthorization(
-          this.applicationName,
-          this.dataTypeId,
-          authorizationToSend
+        this.applicationName,
+        this.dataTypeId,
+        authorizationToSend
       );
       this.alertService.toastSuccess(this.$t("alert.create-authorization"));
       this.$router.push(
-          `/applications/${this.applicationName}/dataTypes/${this.dataTypeId}/authorizations`
+        `/applications/${this.applicationName}/dataTypes/${this.dataTypeId}/authorizations`
       );
     } catch (error) {
       this.alertService.toastServerError(error);
@@ -641,8 +591,8 @@ export default class DataTypeAuthorizationInfoView extends Vue {
       authorizationArray = [
         ...authorizationArray,
         ...(treeOrAuthorization instanceof Authorization
-            ? [treeOrAuthorization.parse()]
-            : this.extractAuthorizations(treeOrAuthorization)),
+          ? [treeOrAuthorization.parse()]
+          : this.extractAuthorizations(treeOrAuthorization)),
       ];
     }
     return authorizationArray;
-- 
GitLab


From 1458b64efc64067ee8c535f0f7297aa389c0829c Mon Sep 17 00:00:00 2001
From: lucile varloteaux <lucile.varloteaux@inrae.fr>
Date: Tue, 12 Jul 2022 17:04:01 +0200
Subject: [PATCH 08/23] =?UTF-8?q?d=C3=A9bug=20affichage?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ui/src/locales/en.json                        |  3 +-
 ui/src/locales/fr.json                        |  3 +-
 .../DataTypeAuthorizationsView.vue            | 82 ++++++++++++++-----
 3 files changed, 65 insertions(+), 23 deletions(-)

diff --git a/ui/src/locales/en.json b/ui/src/locales/en.json
index 6976e6daf..90f823d57 100644
--- a/ui/src/locales/en.json
+++ b/ui/src/locales/en.json
@@ -314,7 +314,8 @@
         "info-limit-taginput": "Limits the law to ",
         "select-authorization": "Please select the law first.",
         "warnning-chil-not-null": "Limitations are in progress on children, they will be replaced.",
-        "localization": "Localisation"
+        "localization": "Localisation",
+        "showMore": "Show more..."
     },
     "ponctuation": {
         "semicolon" : ";",
diff --git a/ui/src/locales/fr.json b/ui/src/locales/fr.json
index 72def3290..f7d4826d5 100644
--- a/ui/src/locales/fr.json
+++ b/ui/src/locales/fr.json
@@ -314,7 +314,8 @@
         "info-limit-taginput": "Permet de limiter le droit à ",
         "select-authorization": "Veuillez d'abord selectionner le droit.",
         "warnning-chil-not-null": "Des limitations sont en cours sur des enfants, elles seront remplacées.",
-        "localization": "Localisation"
+        "localization": "Localisation",
+        "showMore": "Voir plus..."
     },
     "ponctuation": {
         "semicolon" : ";",
diff --git a/ui/src/views/authorizations/DataTypeAuthorizationsView.vue b/ui/src/views/authorizations/DataTypeAuthorizationsView.vue
index eb3bf36c6..29322b3b0 100644
--- a/ui/src/views/authorizations/DataTypeAuthorizationsView.vue
+++ b/ui/src/views/authorizations/DataTypeAuthorizationsView.vue
@@ -49,11 +49,37 @@
             field="users"
             sortable
         >
-          <template v-for="user in props.row.users.map((use) => use.login)">
-            <div :key="user">
-              <span>
-                {{ user }}
-              </span>
+          <template v-for="(user, idx) in props.row.users.map((use) => use.login)">
+            <div v-bind:key="idx" class="columns">
+              <b-tooltip position="is-right" :label="$t('dataTypeAuthorizations.showMore')">
+                <a
+                    class="show-check-details column is-half"
+                    type="is-primary "
+                    @click="showModal2(user)"
+                    style="color: #006464ff; margin-left: 10px"
+                >
+                  {{ user }}
+                </a>
+              </b-tooltip>
+              <b-modal
+                  v-model="isCardModalActive2"
+                  v-show="isSelectedName === user"
+              >
+                <div class="card">
+                  <div class="card-header">
+                    <div class="title card-header-title">
+                      <p field="name">{{ user }}</p>
+                    </div>
+                  </div>
+                  <div class="card-content">
+                    <div class="content">
+                      <h3>
+                        {{ isSelectedName }}
+                      </h3>
+                    </div>
+                  </div>
+                </div>
+              </b-modal>
             </div>
           </template>
         </b-table-column>
@@ -64,19 +90,18 @@
             field="authorizations"
             sortable
         >
-          <template v-for="authorization in Object.keys(props.row.authorizations)">
-            <div :key="authorization.id" class="columns">
-              <p class="column is-half">
-                {{ authorization }}
-              </p>
-              <a
-                  class="show-check-details column is-half"
-                  type="is-primary "
-                  @click="showModal(props.row.name, authorization)"
-                  style="color: #006464ff; margin-left: 10px"
-              >
-                <b-icon icon="eye" size="fa-4x"></b-icon>
-              </a>
+          <template v-for="(authorization, idx) in Object.keys(props.row.authorizations)">
+            <div v-bind:key="idx" class="columns">
+              <b-tooltip position="is-right" :label="$t('dataTypeAuthorizations.showMore')">
+                <a
+                    class="show-check-details column is-half"
+                    type="is-primary "
+                    @click="showModal(props.row.name, authorization)"
+                    style="color: #006464ff; margin-left: 10px"
+                >
+                  {{ authorization }}
+                </a>
+              </b-tooltip>
               <b-modal
                   v-model="isCardModalActive"
                   v-show="
@@ -95,10 +120,11 @@
                         {{ $t("dataTypesManagement.filtered") }} {{ $t("ponctuation.colon") }}
                       </h3>
                       <div
-                          v-for="configuration in props.row.authorizations[authorization]"
-                          v-bind:key="configuration"
+                          v-for="(configuration, idx) in props.row.authorizations[authorization]"
+                          v-bind:key="idx"
+                          class="listAuthorization"
                       >
-                        <div :key="configuration">
+                        <div>
                           <p>
                             <span>
                               {{ $t("dataTypeAuthorizations.localization") }}
@@ -215,6 +241,7 @@ export default class DataTypeAuthorizationsView extends Vue {
   isSelectedName = "";
   isSelectedAuthorization = "";
   isCardModalActive = false;
+  isCardModalActive2 = false;
   periods = {
     FROM_DATE: this.$t("dataTypeAuthorizations.from-date"),
     TO_DATE: this.$t("dataTypeAuthorizations.to-date"),
@@ -323,6 +350,10 @@ export default class DataTypeAuthorizationsView extends Vue {
     }
   }
 
+  showModal2(name) {
+    this.isSelectedName = name;
+    this.isCardModalActive2 = true;
+  }
   showModal(name, authorization) {
     this.isSelectedName = name;
     this.isSelectedAuthorization = authorization;
@@ -342,4 +373,13 @@ td {
     }
   }
 }
+.listAuthorization {
+  border: solid #dbdbdb;
+  border-width: 0 0 1px;
+  margin: 0 10px 0 10px;
+  padding: 15px;
+}
+.listAuthorization:nth-child(odd){
+  background-color: #f5f5f5;
+}
 </style>
-- 
GitLab


From 03264b1a39c929b699a09509adc4ee9745f45ef0 Mon Sep 17 00:00:00 2001
From: lucile varloteaux <lucile.varloteaux@inrae.fr>
Date: Wed, 13 Jul 2022 10:52:06 +0200
Subject: [PATCH 09/23] installation d'une barre de recherche

---
 .../DataTypeAuthorizationsView.vue            | 64 ++++++++++++-------
 1 file changed, 42 insertions(+), 22 deletions(-)

diff --git a/ui/src/views/authorizations/DataTypeAuthorizationsView.vue b/ui/src/views/authorizations/DataTypeAuthorizationsView.vue
index 29322b3b0..564e0c188 100644
--- a/ui/src/views/authorizations/DataTypeAuthorizationsView.vue
+++ b/ui/src/views/authorizations/DataTypeAuthorizationsView.vue
@@ -28,19 +28,47 @@
           :is-focusable="true"
           :is-hoverable="true"
           :paginated="true"
-          :per-page="15"
+          :per-page="perPage"
           :striped="true"
           class="row"
           height="100%"
       >
+        <template #pagination>
+          <b-pagination
+              v-model="currentPage"
+              :current-page.sync="currentPage"
+              :per-page="perPage"
+              :total="authorizations.length"
+              role="navigation"
+              :aria-label="$t('menu.aria-pagination')"
+              :aria-current-label="$t('menu.aria-curent-page')"
+              :aria-next-label="$t('menu.aria-next-page')"
+              :aria-previous-label="$t('menu.aria-previous-page')"
+              order="is-centered"
+              range-after="3"
+              range-before="3"
+              :rounded="true"
+              @change="changePage"
+          />
+        </template>
         <b-table-column
-            v-slot="props"
             :label="$t('dataTypeAuthorizations.name')"
             b-table-column
             field="name"
             sortable
+            :searchable="true"
         >
-          {{ props.row.name }}
+          <template
+              #searchable="props">
+            <b-input
+                v-model="props.filters[props.column.field]"
+                placeholder="Search..."
+                icon="magnify"
+                size="is-small" />
+          </template>
+          <template v-slot="props">
+            {{ props.row.name }}
+          </template>
         </b-table-column>
         <b-table-column
             v-slot="props"
@@ -189,22 +217,6 @@
           </b-button>
         </b-table-column>
       </b-table>
-      <b-pagination
-          v-if="selectedUser && perPage <= selectedUser.length"
-          v-model="currentPage"
-          :per-page="perPage"
-          :total="selectedUser.length"
-          role="navigation"
-          :range-after="2"
-          :range-before="2"
-          :rounded="true"
-          :aria-label="$t('menu.aria-pagination')"
-          :aria-current-label="$t('menu.aria-curent-page')"
-          :aria-next-label="$t('menu.aria-next-page')"
-          :aria-previous-label="$t('menu.aria-previous-page')"
-          order="is-centered"
-      >
-      </b-pagination>
     </div>
   </PageView>
 </template>
@@ -235,9 +247,10 @@ export default class DataTypeAuthorizationsView extends Vue {
   authorizations = [];
   authorizationByUser = {};
   application = new ApplicationResult();
-  scopes = [];
+  // pagination
+  offset = 0;
   currentPage = 1;
-  perPage = 15;
+  perPage = 10;
   isSelectedName = "";
   isSelectedAuthorization = "";
   isCardModalActive = false;
@@ -249,6 +262,10 @@ export default class DataTypeAuthorizationsView extends Vue {
     ALWAYS: this.$t("dataTypeAuthorizations.always"),
   };
 
+  async changePage(page) {
+    this.offset = (page - 1) * this.perPage;
+  }
+
   created() {
     this.init();
     this.subMenuPaths = [
@@ -354,6 +371,7 @@ export default class DataTypeAuthorizationsView extends Vue {
     this.isSelectedName = name;
     this.isCardModalActive2 = true;
   }
+
   showModal(name, authorization) {
     this.isSelectedName = name;
     this.isSelectedAuthorization = authorization;
@@ -373,13 +391,15 @@ td {
     }
   }
 }
+
 .listAuthorization {
   border: solid #dbdbdb;
   border-width: 0 0 1px;
   margin: 0 10px 0 10px;
   padding: 15px;
 }
-.listAuthorization:nth-child(odd){
+
+.listAuthorization:nth-child(odd) {
   background-color: #f5f5f5;
 }
 </style>
-- 
GitLab


From 06b87228b5b84b066f3b90e66c3cd30d0cb5ce4e Mon Sep 17 00:00:00 2001
From: lucile varloteaux <lucile.varloteaux@inrae.fr>
Date: Mon, 18 Jul 2022 11:31:47 +0200
Subject: [PATCH 10/23] ajout recherche par nom sur page authorization

---
 ui/src/locales/en.json                                     | 3 ++-
 ui/src/locales/fr.json                                     | 3 ++-
 ui/src/style/_common.scss                                  | 7 +++++--
 ui/src/style/_variables.scss                               | 1 +
 ui/src/views/authorizations/DataTypeAuthorizationsView.vue | 4 ++--
 5 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/ui/src/locales/en.json b/ui/src/locales/en.json
index 90f823d57..913a3e9d2 100644
--- a/ui/src/locales/en.json
+++ b/ui/src/locales/en.json
@@ -315,7 +315,8 @@
         "select-authorization": "Please select the law first.",
         "warnning-chil-not-null": "Limitations are in progress on children, they will be replaced.",
         "localization": "Localisation",
-        "showMore": "Show more..."
+        "showMore": "Show more...",
+        "search": "Search..."
     },
     "ponctuation": {
         "semicolon" : ";",
diff --git a/ui/src/locales/fr.json b/ui/src/locales/fr.json
index f7d4826d5..da14dc06f 100644
--- a/ui/src/locales/fr.json
+++ b/ui/src/locales/fr.json
@@ -315,7 +315,8 @@
         "select-authorization": "Veuillez d'abord selectionner le droit.",
         "warnning-chil-not-null": "Des limitations sont en cours sur des enfants, elles seront remplacées.",
         "localization": "Localisation",
-        "showMore": "Voir plus..."
+        "showMore": "Voir plus...",
+        "search": "Recherche..."
     },
     "ponctuation": {
         "semicolon" : ";",
diff --git a/ui/src/style/_common.scss b/ui/src/style/_common.scss
index 0e91f5ff3..00b34ecd9 100644
--- a/ui/src/style/_common.scss
+++ b/ui/src/style/_common.scss
@@ -24,8 +24,11 @@ a {
 }
 
 // affichage icon uniformisé
+.control.has-icons-left .input.is-small ~ .icon {
+  font-size: 0.5rem;
+}
 .button .icon, .button .icon.is-small, .icon{
-  font-size: 0.75rem;
+  font-size: $size-icon-small;
   align-items: center;
   display: inline-flex;
 }
@@ -43,7 +46,7 @@ a {
   cursor: pointer;
 }
 .icon.is-small {
-  font-size: 0.75rem;
+  font-size: $size-icon-small;
 }
 .link {
   cursor: pointer;
diff --git a/ui/src/style/_variables.scss b/ui/src/style/_variables.scss
index b419f4d2e..74bd3a08c 100644
--- a/ui/src/style/_variables.scss
+++ b/ui/src/style/_variables.scss
@@ -13,6 +13,7 @@ $info-transparent: rgba(78, 198, 194, 0.3);
 $container-padding-hor: 3rem;
 $container-padding-vert: $container-padding-hor / 2;
 $title-margin-top: 1.5rem;
+$size-icon-small: 0.75rem;
 
 // MenuView
 $menu-height: 80px;
diff --git a/ui/src/views/authorizations/DataTypeAuthorizationsView.vue b/ui/src/views/authorizations/DataTypeAuthorizationsView.vue
index 564e0c188..013a55271 100644
--- a/ui/src/views/authorizations/DataTypeAuthorizationsView.vue
+++ b/ui/src/views/authorizations/DataTypeAuthorizationsView.vue
@@ -62,8 +62,8 @@
               #searchable="props">
             <b-input
                 v-model="props.filters[props.column.field]"
-                placeholder="Search..."
-                icon="magnify"
+                :placeholder="$t('dataTypeAuthorizations.search')"
+                icon="search"
                 size="is-small" />
           </template>
           <template v-slot="props">
-- 
GitLab


From 5e5323d2fe0f5710b5fdc778a54a5cf8e575f085 Mon Sep 17 00:00:00 2001
From: lucile varloteaux <lucile.varloteaux@inrae.fr>
Date: Tue, 19 Jul 2022 11:31:20 +0200
Subject: [PATCH 11/23] affichage graph page dataTypeManagement

---
 ui/src/components/common/CollapsibleTree.vue      | 7 ++++---
 ui/src/views/datatype/DataTypesManagementView.vue | 2 +-
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/ui/src/components/common/CollapsibleTree.vue b/ui/src/components/common/CollapsibleTree.vue
index f95c58590..50372b69a 100644
--- a/ui/src/components/common/CollapsibleTree.vue
+++ b/ui/src/components/common/CollapsibleTree.vue
@@ -143,9 +143,10 @@
 
 <script>
 import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome";
+import AvailiblityChart from "../charts/AvailiblityChart.vue";
 export default {
   name: "CollapsibleTree",
-  components: {FontAwesomeIcon},
+  components: {FontAwesomeIcon, AvailiblityChart},
   props: {
     applicationName: String,
     option: Object,
@@ -154,7 +155,7 @@ export default {
       default: 0,
     },
     onClickLabelCb: Function,
-    onClickLabelSynthesisDetailCb: Object,
+    onClickLabelSynthesisDetailCb: Function,
     onUploadCb: Function,
     buttons: Array,
     withRadios: {
@@ -163,7 +164,7 @@ export default {
     },
     radioName: Object,
     repository: Object,
-    repositoryRedirect: Object,
+    repositoryRedirect: Function,
     lineCount: {
       type: Number,
       default: 0,
diff --git a/ui/src/views/datatype/DataTypesManagementView.vue b/ui/src/views/datatype/DataTypesManagementView.vue
index 4f6168a4a..2efe3d88b 100644
--- a/ui/src/views/datatype/DataTypesManagementView.vue
+++ b/ui/src/views/datatype/DataTypesManagementView.vue
@@ -160,7 +160,7 @@ export default class DataTypesManagementView extends Vue {
       this.dataTypes = Object.values(
         this.internationalisationService.localeDatatypeName(this.application)
       );
-      this.initSynthesis();
+      await this.initSynthesis();
     } catch (error) {
       this.alertService.toastServerError();
     }
-- 
GitLab


From ed46e49dd5a80ffc2da79a22f9c73abf1a86e8d0 Mon Sep 17 00:00:00 2001
From: lucile varloteaux <lucile.varloteaux@inrae.fr>
Date: Wed, 20 Jul 2022 10:15:20 +0200
Subject: [PATCH 12/23] affichage modal ref dans page data

---
 ui/src/views/datatype/DataTypeTableView.vue | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ui/src/views/datatype/DataTypeTableView.vue b/ui/src/views/datatype/DataTypeTableView.vue
index ea9fd03a2..6025fb49a 100644
--- a/ui/src/views/datatype/DataTypeTableView.vue
+++ b/ui/src/views/datatype/DataTypeTableView.vue
@@ -627,7 +627,7 @@ export default class DataTypeTableView extends Vue {
     const key = component.key;
     if (!this.loadedReferences[rowId]) {
       let refvalues;
-      if (this.referenceLineCheckers[key]) {
+      if (this.referenceLineCheckers[key].referenceValues) {
         refvalues =
           this.referenceLineCheckers[key].referenceValues.refValues.evaluationContext.datum;
       }
-- 
GitLab


From f1af9555fcc2f64981b2484771bb96db3b8c7e0b Mon Sep 17 00:00:00 2001
From: lucile varloteaux <lucile.varloteaux@inrae.fr>
Date: Wed, 20 Jul 2022 15:50:53 +0200
Subject: [PATCH 13/23] =?UTF-8?q?r=C3=A9paration=20btn=20regex?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ui/src/views/datatype/DataTypeTableView.vue | 25 +++++++++++++++++++--
 1 file changed, 23 insertions(+), 2 deletions(-)

diff --git a/ui/src/views/datatype/DataTypeTableView.vue b/ui/src/views/datatype/DataTypeTableView.vue
index 6025fb49a..da16e7efc 100644
--- a/ui/src/views/datatype/DataTypeTableView.vue
+++ b/ui/src/views/datatype/DataTypeTableView.vue
@@ -288,9 +288,10 @@
                   ></b-input>
                   <b-field>
                     <b-button
+                      class="btnRegExp"
                       type="is-dark"
                       size="is-small"
-                      @click="this.params.variableComponentFilters.isRegex = true"
+                      @click="testChangeRegEx()"
                       outlined
                     >
                       {{ $t("ponctuation.regEx") }}</b-button
@@ -506,6 +507,20 @@ export default class DataTypeTableView extends Vue {
   referenceLineCheckers = [];
   isRegExp = false;
 
+  testChangeRegEx() {
+    if (this.params.variableComponentFilters.isRegex === true) {
+      this.params.variableComponentFilters.isRegex = false;
+      document.querySelector(".btnRegExp").classList.remove('active')
+    }
+    else if (this.params.variableComponentFilters.isRegex === false) {
+      this.params.variableComponentFilters.isRegex = true;
+      document.querySelector(".btnRegExp").classList.add('active')
+    } else {
+      this.params.variableComponentFilters.isRegex = !this.isRegExp;
+      document.querySelector(".btnRegExp").classList.add('active')
+    }
+  }
+
   async created() {
     await this.init();
     this.subMenuPaths = [
@@ -920,7 +935,10 @@ $row-variable-height: 60px;
 .row.variableComponent:hover {
   background-color: rgba(0, 163, 166, 0.2);
 }
-
+.button.is-dark.is-outlined.active{
+  background-color: $dark;
+  color: #dbdbdb;
+}
 .ASC .asc,
 .DESC .desc {
   background-color: $dark;
@@ -945,4 +963,7 @@ $row-variable-height: 60px;
 .columns {
   margin: 0;
 }
+.icon.is-small {
+  font-size: 5rem;
+}
 </style>
-- 
GitLab


From d488ca7a72f119397ebebd84d050777fae2cb7b3 Mon Sep 17 00:00:00 2001
From: lucile varloteaux <lucile.varloteaux@inrae.fr>
Date: Wed, 20 Jul 2022 16:52:33 +0200
Subject: [PATCH 14/23] switch regExp

---
 ui/src/locales/en.json                      |  6 ++-
 ui/src/locales/fr.json                      |  6 ++-
 ui/src/style/_common.scss                   |  1 +
 ui/src/views/datatype/DataTypeTableView.vue | 59 ++++++++++++---------
 4 files changed, 42 insertions(+), 30 deletions(-)

diff --git a/ui/src/locales/en.json b/ui/src/locales/en.json
index 913a3e9d2..b45d99785 100644
--- a/ui/src/locales/en.json
+++ b/ui/src/locales/en.json
@@ -256,7 +256,9 @@
         "sorted": "The sorts used",
         "title-modal-numeric": "Choice of value range",
         "title-modal-date": "Choice of date range",
-        "manage-datasets": "Manage datasets"
+        "manage-datasets": "Manage datasets",
+        "accepted": "Accepted",
+        "refuse": "Refuse"
     },
     "dataTypesRepository":  {
         "card-title-upload-file": "Drop a version on this dataset",
@@ -330,7 +332,7 @@
         "arrow-right": "->",
         "arrow-left": "<-",
         "slash": "/",
-        "regEx": ".*",
+        "regEx": "Regular expression option (.*) :",
         "star": "*"
     }
 }
\ No newline at end of file
diff --git a/ui/src/locales/fr.json b/ui/src/locales/fr.json
index da14dc06f..c98b65889 100644
--- a/ui/src/locales/fr.json
+++ b/ui/src/locales/fr.json
@@ -256,7 +256,9 @@
         "sorted": "Les tris utilisés",
         "title-modal-numeric": "Choix de l'interval de valeur",
         "title-modal-date": "Choix de l'interval de date",
-        "manage-datasets": "Gérer les jeux de données"
+        "manage-datasets": "Gérer les jeux de données",
+        "accepted": "Accepté",
+        "refuse": "Refusé"
     },
     "dataTypesRepository":  {
         "card-title-upload-file": "Déposer une version sur ce jeux de données",
@@ -330,7 +332,7 @@
         "arrow-right": "->",
         "arrow-left": "<-",
         "slash": "/",
-        "regEx": ".*",
+        "regEx": "Option expression régilière (.*) :",
         "star": "*"
     }
 }
\ No newline at end of file
diff --git a/ui/src/style/_common.scss b/ui/src/style/_common.scss
index 00b34ecd9..2b6a8b36a 100644
--- a/ui/src/style/_common.scss
+++ b/ui/src/style/_common.scss
@@ -24,6 +24,7 @@ a {
 }
 
 // affichage icon uniformisé
+.control.has-icons-right .input.is-small ~ .icon,
 .control.has-icons-left .input.is-small ~ .icon {
   font-size: 0.5rem;
 }
diff --git a/ui/src/views/datatype/DataTypeTableView.vue b/ui/src/views/datatype/DataTypeTableView.vue
index da16e7efc..924d7e333 100644
--- a/ui/src/views/datatype/DataTypeTableView.vue
+++ b/ui/src/views/datatype/DataTypeTableView.vue
@@ -281,28 +281,33 @@
                   <b-input
                     v-model="search[component.variable + '_' + component.component]"
                     icon-right="search"
-                    placeholder="Search..."
+                    :placeholder="$t('dataTypeAuthorizations.search')"
                     type="search"
                     @blur="addVariableSearch(component)"
                     size="is-small"
                   ></b-input>
-                  <b-field>
-                    <b-button
-                      class="btnRegExp"
-                      type="is-dark"
-                      size="is-small"
-                      @click="testChangeRegEx()"
-                      outlined
-                    >
-                      {{ $t("ponctuation.regEx") }}</b-button
-                    >
-                  </b-field>
                 </b-field>
               </div>
             </div>
           </b-collapse>
         </div>
       </div>
+      <b-field>
+        <b-switch v-model="params.variableComponentFilters.isRegex"
+                  passive-type='is-dark'
+                  type='is-primary'
+                  :true-value="$t('dataTypesManagement.accepted')"
+                  :false-value="$t('dataTypesManagement.refuse')">{{ $t("ponctuation.regEx") }} {{ params.variableComponentFilters.isRegex }}</b-switch>
+        <!--        <b-button
+                    class="btnRegExp"
+                    type="is-dark"
+                    size="is-small"
+                    @click="testChangeRegEx()"
+                    outlined
+                >
+                  {{ $t("ponctuation.regEx") }}</b-button
+                >-->
+      </b-field>
       <div class="columns">
         <div class="column is-8-widescreen is-6-desktop">
           {{ $t("dataTypesManagement.filtered") }} {{ $t("ponctuation.colon") }}
@@ -507,19 +512,21 @@ export default class DataTypeTableView extends Vue {
   referenceLineCheckers = [];
   isRegExp = false;
 
-  testChangeRegEx() {
+/*  testChangeRegEx() {
+    let checkboxes = document.querySelector('.btnRegExp');
     if (this.params.variableComponentFilters.isRegex === true) {
       this.params.variableComponentFilters.isRegex = false;
-      document.querySelector(".btnRegExp").classList.remove('active')
+      checkboxes.classList.remove('active');
     }
     else if (this.params.variableComponentFilters.isRegex === false) {
       this.params.variableComponentFilters.isRegex = true;
-      document.querySelector(".btnRegExp").classList.add('active')
+      checkboxes[i].classList.add('active');
     } else {
       this.params.variableComponentFilters.isRegex = !this.isRegExp;
-      document.querySelector(".btnRegExp").classList.add('active')
+      checkboxes[i].classList.add('active');
     }
-  }
+    console.log(this.params.variableComponentFilters.isRegex);
+  }*/
 
   async created() {
     await this.init();
@@ -707,11 +714,11 @@ export default class DataTypeTableView extends Vue {
   }
 
   addVariableComponentToSortedList(variableComponentSorted, order) {
-    variableComponentSorted.order = variableComponentSorted.order == order ? null : order;
+    variableComponentSorted.order = variableComponentSorted.order === order ? null : order;
     this.params.variableComponentOrderBy = this.params.variableComponentOrderBy.filter(
       (c) =>
-        c.variableComponentKey.variable != variableComponentSorted.variableComponentKey.variable ||
-        c.variableComponentKey.component != variableComponentSorted.variableComponentKey.component
+        c.variableComponentKey.variable !== variableComponentSorted.variableComponentKey.variable ||
+        c.variableComponentKey.component !== variableComponentSorted.variableComponentKey.component
     );
     if (variableComponentSorted.order) {
       this.params.variableComponentOrderBy.push(
@@ -722,7 +729,7 @@ export default class DataTypeTableView extends Vue {
   deleteTag(variable, component) {
     this.params.variableComponentOrderBy = this.params.variableComponentOrderBy.filter(
       (c) =>
-        c.variableComponentKey.variable != variable || c.variableComponentKey.component != component
+        c.variableComponentKey.variable !== variable || c.variableComponentKey.component !== component
     );
     this.params.variableComponentOrderBy.delete();
     document.getElementById(variable + component).remove();
@@ -733,13 +740,13 @@ export default class DataTypeTableView extends Vue {
     let icon = this.params.variableComponentOrderBy
       .filter(
         (c) =>
-          c.variableComponentKey.variable == variable &&
-          c.variableComponentKey.component == component
+          c.variableComponentKey.variable === variable &&
+          c.variableComponentKey.component === component
       )
       .map((vc) => {
-        if (vc.order == "ASC") {
+        if (vc.order === "ASC") {
           return "arrow-down";
-        } else if (vc.order == "DESC") {
+        } else if (vc.order === "DESC") {
           return "arrow-up";
         } else {
           return "";
@@ -754,7 +761,7 @@ export default class DataTypeTableView extends Vue {
     let value = this.search[key];
     this.params.variableComponentFilters = this.params.variableComponentFilters.filter(
       (c) =>
-        c.variableComponentKey.variable != variable || c.variableComponentKey.component != component
+        c.variableComponentKey.variable !== variable || c.variableComponentKey.component !== component
     );
     let search = null;
     if (value && value.length > 0) {
-- 
GitLab


From c2d67111cb44e167612ff0dc04d0588a197681b7 Mon Sep 17 00:00:00 2001
From: TCHERNIATINSKY <philippe.tcherniatinsky@inrae.fr>
Date: Thu, 28 Jul 2022 15:15:10 +0200
Subject: [PATCH 15/23] correction packages dependencies

---
 ui/package-lock.json | 2 +-
 ui/package.json      | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/ui/package-lock.json b/ui/package-lock.json
index 5fb21e1ce..3c374c9da 100644
--- a/ui/package-lock.json
+++ b/ui/package-lock.json
@@ -50,7 +50,7 @@
         "vue-cli-plugin-buefy": "~0.3.8",
         "vue-cli-plugin-i18n": "^2.1.3",
         "vue-template-compiler": "^2.6.14",
-        "webpack": "^4.46.0"
+        "webpack": "^4.0.0"
       }
     },
     "node_modules/@ampproject/remapping": {
diff --git a/ui/package.json b/ui/package.json
index ec72b35cd..89909575a 100644
--- a/ui/package.json
+++ b/ui/package.json
@@ -52,7 +52,7 @@
     "vue-cli-plugin-buefy": "~0.3.8",
     "vue-cli-plugin-i18n": "^2.1.3",
     "vue-template-compiler": "^2.6.14",
-    "webpack": "^4.46.0"
+    "webpack": "^4.0.0"
   },
   "husky": {
     "hooks": {
@@ -65,4 +65,4 @@
       "prettier --list-different"
     ]
   }
-}
+}
\ No newline at end of file
-- 
GitLab


From 8094a5c89f23f58945888515b6aa0a73fe55240a Mon Sep 17 00:00:00 2001
From: TCHERNIATINSKY <philippe.tcherniatinsky@inrae.fr>
Date: Thu, 28 Jul 2022 15:26:30 +0200
Subject: [PATCH 16/23] with stable tag

---
 .gitlab-ci.yml | 33 ++++++++++++++++++++++-----------
 1 file changed, 22 insertions(+), 11 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index e2ab1d425..4b824ee3a 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -33,63 +33,73 @@ maven_build:
   image: maven:3.6.3-openjdk-11
   stage: build
   script: mvn --batch-mode clean compile
-  tags:
+  ags:
+    - stable
     - docker
 
 maven_test_rest_1:
   image: maven:3.6.3-openjdk-11
   stage: test
   script: mvn --batch-mode clean test -Ptest_rest_1
-  tags:
+  ags:
+    - stable
     - docker
 maven_test_rest_1_ACBB:
   image: maven:3.6.3-openjdk-11
   stage: test
   script: mvn --batch-mode clean test -Ptest_rest_1_ACBB
-  tags:
+  ags:
+    - stable
     - docker
 maven_test_rest_1_Haute_Frequence:
   image: maven:3.6.3-openjdk-11
   stage: test
   script: mvn --batch-mode clean test -Ptest_rest_1_Haute_Frequence
-  tags:
+  ags:
+    - stable
     - docker
 maven_test_rest_2:
   image: maven:3.6.3-openjdk-11
   stage: test
   script: mvn --batch-mode clean test -Ptest_rest_2
-  tags:
+  ags:
+    - stable
     - docker
 maven_test_rest_others:
   image: maven:3.6.3-openjdk-11
   stage: test
   script: mvn --batch-mode clean test -Ptest_rest_others
-  tags:
+  ags:
+    - stable
     - docker
 maven_test_checker:
   image: maven:3.6.3-openjdk-11
   stage: test
   script: mvn --batch-mode clean test -Ptest_checker
-  tags:
+  ags:
+    - stable
     - docker
 maven_test_model:
   image: maven:3.6.3-openjdk-11
   stage: test
   script: mvn --batch-mode clean test -Ptest_model
-  tags:
+  ags:
+    - stable
     - docker
 maven_test_persistence:
   image: maven:3.6.3-openjdk-11
   stage: test
   script: mvn --batch-mode clean test -Ptest_persistence
-  tags:
+  ags:
+    - stable
     - docker
 
 maven:
   image: maven:3.6.3-openjdk-11
   stage: package
   script: mvn --batch-mode clean package -Dmaven.test.skip=true
-  tags:
+  ags:
+    - stable
     - docker
 
 maven_registry:
@@ -131,7 +141,8 @@ npm:
     - cd ui
     - npm ci
     - npm run build
-  tags:
+  ags:
+    - stable
     - docker
   artifacts:
     when: always
-- 
GitLab


From 58df70cccf1a8ee201d443c3f5ee8eeec0162d16 Mon Sep 17 00:00:00 2001
From: TCHERNIATINSKY <philippe.tcherniatinsky@inrae.fr>
Date: Thu, 28 Jul 2022 15:27:53 +0200
Subject: [PATCH 17/23] with stable tag

---
 .gitlab-ci.yml | 30 +++++++++++-------------------
 1 file changed, 11 insertions(+), 19 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 4b824ee3a..5ac969952 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -33,7 +33,7 @@ maven_build:
   image: maven:3.6.3-openjdk-11
   stage: build
   script: mvn --batch-mode clean compile
-  ags:
+  tags:
     - stable
     - docker
 
@@ -41,65 +41,58 @@ maven_test_rest_1:
   image: maven:3.6.3-openjdk-11
   stage: test
   script: mvn --batch-mode clean test -Ptest_rest_1
-  ags:
+  tags:
     - stable
     - docker
 maven_test_rest_1_ACBB:
   image: maven:3.6.3-openjdk-11
   stage: test
   script: mvn --batch-mode clean test -Ptest_rest_1_ACBB
-  ags:
+  tags:
     - stable
     - docker
 maven_test_rest_1_Haute_Frequence:
   image: maven:3.6.3-openjdk-11
   stage: test
   script: mvn --batch-mode clean test -Ptest_rest_1_Haute_Frequence
-  ags:
-    - stable
+  ttags:
     - docker
 maven_test_rest_2:
   image: maven:3.6.3-openjdk-11
   stage: test
   script: mvn --batch-mode clean test -Ptest_rest_2
-  ags:
-    - stable
+  ttags:
     - docker
 maven_test_rest_others:
   image: maven:3.6.3-openjdk-11
   stage: test
   script: mvn --batch-mode clean test -Ptest_rest_others
-  ags:
-    - stable
+  ttags:
     - docker
 maven_test_checker:
   image: maven:3.6.3-openjdk-11
   stage: test
   script: mvn --batch-mode clean test -Ptest_checker
-  ags:
-    - stable
+  ttags:
     - docker
 maven_test_model:
   image: maven:3.6.3-openjdk-11
   stage: test
   script: mvn --batch-mode clean test -Ptest_model
-  ags:
-    - stable
+  ttags:
     - docker
 maven_test_persistence:
   image: maven:3.6.3-openjdk-11
   stage: test
   script: mvn --batch-mode clean test -Ptest_persistence
-  ags:
-    - stable
+  ttags:
     - docker
 
 maven:
   image: maven:3.6.3-openjdk-11
   stage: package
   script: mvn --batch-mode clean package -Dmaven.test.skip=true
-  ags:
-    - stable
+  ttags:
     - docker
 
 maven_registry:
@@ -141,8 +134,7 @@ npm:
     - cd ui
     - npm ci
     - npm run build
-  ags:
-    - stable
+  ttags:
     - docker
   artifacts:
     when: always
-- 
GitLab


From 70adcff8e8a84c920a6de209a2f01eb7598aa056 Mon Sep 17 00:00:00 2001
From: TCHERNIATINSKY <philippe.tcherniatinsky@inrae.fr>
Date: Thu, 28 Jul 2022 15:28:35 +0200
Subject: [PATCH 18/23] with stable tag

---
 .gitlab-ci.yml | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 5ac969952..3ec76f4d0 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -55,44 +55,44 @@ maven_test_rest_1_Haute_Frequence:
   image: maven:3.6.3-openjdk-11
   stage: test
   script: mvn --batch-mode clean test -Ptest_rest_1_Haute_Frequence
-  ttags:
+  tags::
     - docker
 maven_test_rest_2:
   image: maven:3.6.3-openjdk-11
   stage: test
   script: mvn --batch-mode clean test -Ptest_rest_2
-  ttags:
+  tags::
     - docker
 maven_test_rest_others:
   image: maven:3.6.3-openjdk-11
   stage: test
   script: mvn --batch-mode clean test -Ptest_rest_others
-  ttags:
+  tags::
     - docker
 maven_test_checker:
   image: maven:3.6.3-openjdk-11
   stage: test
   script: mvn --batch-mode clean test -Ptest_checker
-  ttags:
+  tags::
     - docker
 maven_test_model:
   image: maven:3.6.3-openjdk-11
   stage: test
   script: mvn --batch-mode clean test -Ptest_model
-  ttags:
+  tags::
     - docker
 maven_test_persistence:
   image: maven:3.6.3-openjdk-11
   stage: test
   script: mvn --batch-mode clean test -Ptest_persistence
-  ttags:
+  tags::
     - docker
 
 maven:
   image: maven:3.6.3-openjdk-11
   stage: package
   script: mvn --batch-mode clean package -Dmaven.test.skip=true
-  ttags:
+  tags::
     - docker
 
 maven_registry:
@@ -134,7 +134,7 @@ npm:
     - cd ui
     - npm ci
     - npm run build
-  ttags:
+  tags::
     - docker
   artifacts:
     when: always
-- 
GitLab


From 414c97fcab63df1588ec12e23cd42ff221862bf0 Mon Sep 17 00:00:00 2001
From: TCHERNIATINSKY <philippe.tcherniatinsky@inrae.fr>
Date: Thu, 28 Jul 2022 15:29:15 +0200
Subject: [PATCH 19/23] with stable tag

---
 .gitlab-ci.yml | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 3ec76f4d0..129d0de1c 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -55,44 +55,44 @@ maven_test_rest_1_Haute_Frequence:
   image: maven:3.6.3-openjdk-11
   stage: test
   script: mvn --batch-mode clean test -Ptest_rest_1_Haute_Frequence
-  tags::
+  tags:
     - docker
 maven_test_rest_2:
   image: maven:3.6.3-openjdk-11
   stage: test
   script: mvn --batch-mode clean test -Ptest_rest_2
-  tags::
+  tags:
     - docker
 maven_test_rest_others:
   image: maven:3.6.3-openjdk-11
   stage: test
   script: mvn --batch-mode clean test -Ptest_rest_others
-  tags::
+  tags:
     - docker
 maven_test_checker:
   image: maven:3.6.3-openjdk-11
   stage: test
   script: mvn --batch-mode clean test -Ptest_checker
-  tags::
+  tags:
     - docker
 maven_test_model:
   image: maven:3.6.3-openjdk-11
   stage: test
   script: mvn --batch-mode clean test -Ptest_model
-  tags::
+  tags:
     - docker
 maven_test_persistence:
   image: maven:3.6.3-openjdk-11
   stage: test
   script: mvn --batch-mode clean test -Ptest_persistence
-  tags::
+  tags:
     - docker
 
 maven:
   image: maven:3.6.3-openjdk-11
   stage: package
   script: mvn --batch-mode clean package -Dmaven.test.skip=true
-  tags::
+  tags:
     - docker
 
 maven_registry:
@@ -134,7 +134,7 @@ npm:
     - cd ui
     - npm ci
     - npm run build
-  tags::
+  tags:
     - docker
   artifacts:
     when: always
-- 
GitLab


From 4d4781c0cb67597a36a4c7faaca9352a1c15da16 Mon Sep 17 00:00:00 2001
From: TCHERNIATINSKY <philippe.tcherniatinsky@inrae.fr>
Date: Thu, 28 Jul 2022 15:34:01 +0200
Subject: [PATCH 20/23] with stable tag

---
 .gitlab-ci.yml | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 129d0de1c..d475bce84 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -34,7 +34,6 @@ maven_build:
   stage: build
   script: mvn --batch-mode clean compile
   tags:
-    - stable
     - docker
 
 maven_test_rest_1:
@@ -56,36 +55,42 @@ maven_test_rest_1_Haute_Frequence:
   stage: test
   script: mvn --batch-mode clean test -Ptest_rest_1_Haute_Frequence
   tags:
+    - stable
     - docker
 maven_test_rest_2:
   image: maven:3.6.3-openjdk-11
   stage: test
   script: mvn --batch-mode clean test -Ptest_rest_2
   tags:
+    - stable
     - docker
 maven_test_rest_others:
   image: maven:3.6.3-openjdk-11
   stage: test
   script: mvn --batch-mode clean test -Ptest_rest_others
   tags:
+    - stable
     - docker
 maven_test_checker:
   image: maven:3.6.3-openjdk-11
   stage: test
   script: mvn --batch-mode clean test -Ptest_checker
   tags:
+    - stable
     - docker
 maven_test_model:
   image: maven:3.6.3-openjdk-11
   stage: test
   script: mvn --batch-mode clean test -Ptest_model
   tags:
+    - stable
     - docker
 maven_test_persistence:
   image: maven:3.6.3-openjdk-11
   stage: test
   script: mvn --batch-mode clean test -Ptest_persistence
   tags:
+    - stable
     - docker
 
 maven:
@@ -93,6 +98,7 @@ maven:
   stage: package
   script: mvn --batch-mode clean package -Dmaven.test.skip=true
   tags:
+    - stable
     - docker
 
 maven_registry:
@@ -135,6 +141,7 @@ npm:
     - npm ci
     - npm run build
   tags:
+    - stable
     - docker
   artifacts:
     when: always
-- 
GitLab


From 84ce60e4e35e1e3e517e63c9aea73e8bd918cff2 Mon Sep 17 00:00:00 2001
From: TCHERNIATINSKY <philippe.tcherniatinsky@inrae.fr>
Date: Thu, 28 Jul 2022 15:54:58 +0200
Subject: [PATCH 21/23] encore une correction

---
 .gitlab-ci.yml  | 1 +
 ui/package.json | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index d475bce84..34c5b15e2 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -34,6 +34,7 @@ maven_build:
   stage: build
   script: mvn --batch-mode clean compile
   tags:
+    - stable
     - docker
 
 maven_test_rest_1:
diff --git a/ui/package.json b/ui/package.json
index 89909575a..937a6e36a 100644
--- a/ui/package.json
+++ b/ui/package.json
@@ -52,7 +52,7 @@
     "vue-cli-plugin-buefy": "~0.3.8",
     "vue-cli-plugin-i18n": "^2.1.3",
     "vue-template-compiler": "^2.6.14",
-    "webpack": "^4.0.0"
+    "webpack": "^4.46.0"
   },
   "husky": {
     "hooks": {
-- 
GitLab


From ada66e8fec83d65265f0f943a42026e6ec40b86c Mon Sep 17 00:00:00 2001
From: TCHERNIATINSKY <philippe.tcherniatinsky@inrae.fr>
Date: Thu, 28 Jul 2022 17:01:08 +0200
Subject: [PATCH 22/23] encore une correction

---
 .gitlab-ci.yml | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 34c5b15e2..389883abc 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -132,6 +132,8 @@ npm_test:
       - ui/cypress/videos/**/*.mp4
       - ui/cypress/screenshots/**/*.png
     expire_in: 1 day
+  tags:
+    - stable
 
 npm:
   image: node:12-alpine
-- 
GitLab


From 51394023895d21cd884334ab0084ed4722474f64 Mon Sep 17 00:00:00 2001
From: TCHERNIATINSKY <philippe.tcherniatinsky@inrae.fr>
Date: Fri, 29 Jul 2022 10:11:11 +0200
Subject: [PATCH 23/23] encore une correction

---
 node_modules/.package-lock.json               |   6 +
 node_modules/cypress-file-upload/CHANGELOG.md |   3 -
 node_modules/cypress-file-upload/LICENSE      |  21 -
 node_modules/cypress-file-upload/README.md    | 367 ----------
 .../cypress-file-upload/dist/bundle.js        | 679 ------------------
 .../cypress-file-upload/dist/bundle.js.map    |   1 -
 node_modules/cypress-file-upload/package.json |  82 ---
 .../cypress-file-upload/types/index.d.ts      |  42 --
 package-lock.json                             |  36 +-
 package.json                                  |   5 +
 ui/package-lock.json                          | 115 ++-
 ui/package.json                               |   7 +-
 12 files changed, 158 insertions(+), 1206 deletions(-)
 create mode 100644 node_modules/.package-lock.json
 delete mode 100644 node_modules/cypress-file-upload/CHANGELOG.md
 delete mode 100644 node_modules/cypress-file-upload/LICENSE
 delete mode 100644 node_modules/cypress-file-upload/README.md
 delete mode 100644 node_modules/cypress-file-upload/dist/bundle.js
 delete mode 100644 node_modules/cypress-file-upload/dist/bundle.js.map
 delete mode 100644 node_modules/cypress-file-upload/package.json
 delete mode 100644 node_modules/cypress-file-upload/types/index.d.ts
 create mode 100644 package.json

diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json
new file mode 100644
index 000000000..c142a6575
--- /dev/null
+++ b/node_modules/.package-lock.json
@@ -0,0 +1,6 @@
+{
+  "name": "si-ore-v2",
+  "lockfileVersion": 2,
+  "requires": true,
+  "packages": {}
+}
diff --git a/node_modules/cypress-file-upload/CHANGELOG.md b/node_modules/cypress-file-upload/CHANGELOG.md
deleted file mode 100644
index ba3bcfdd9..000000000
--- a/node_modules/cypress-file-upload/CHANGELOG.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# CHANGELOG
-
-You can see the changelog on the [releases page](../../releases).
diff --git a/node_modules/cypress-file-upload/LICENSE b/node_modules/cypress-file-upload/LICENSE
deleted file mode 100644
index b756ec14a..000000000
--- a/node_modules/cypress-file-upload/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2019 Pavel Auramenka <pavel.auramenka@gmail.com>
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/node_modules/cypress-file-upload/README.md b/node_modules/cypress-file-upload/README.md
deleted file mode 100644
index 6d5ef63d5..000000000
--- a/node_modules/cypress-file-upload/README.md
+++ /dev/null
@@ -1,367 +0,0 @@
-# cypress-file-upload
-
-[![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/abramenal/cypress-file-upload/blob/master/LICENSE) [![npm version](https://img.shields.io/npm/v/cypress-file-upload.svg?style=flat&color=red)](https://www.npmjs.com/package/cypress-file-upload) ![build](https://github.com/abramenal/cypress-file-upload/workflows/build/badge.svg) [![All Contributors](https://img.shields.io/badge/all_contributors-33-yellow.svg?style=flat&color=9cf)](#contributors) [![monthly downloads](https://img.shields.io/npm/dm/cypress-file-upload.svg?style=flat&color=orange&label=monthly%20downloads)](https://www.npmjs.com/package/cypress-file-upload) [![downloads all time](https://img.shields.io/npm/dt/cypress-file-upload.svg?style=flat&color=black&label=lifetime%20downloads)](https://www.npmjs.com/package/cypress-file-upload)
-
-File upload testing made easy.
-
-This package adds a custom [Cypress][cypress] command that allows you to make an abstraction on how exactly you upload files through HTML controls and focus on testing user workflows.
-
-## Table of Contents
-
-- [Installation](#installation)
-- [Usage](#usage)
-  - [HTML5 file input](#html5-file-input)
-  - [Drag-n-drop component](#drag-n-drop-component)
-  - [Attaching multiple files](#attaching-multiple-files)
-  - [Working with file encodings](#working-with-file-encodings)
-  - [Working with raw file contents](#working-with-raw-file-contents)
-  - [Override the file name](#override-the-file-name)
-  - [Working with empty fixture file](#working-with-empty-fixture-file)
-  - [I wanna see some real-world examples](#i-wanna-see-some-real-world-examples)
-- [API](#api)
-- [Recipes](#recipes)
-- [Caveats](#caveats)
-- [It isn't working! What else can I try?](#it-isnt-working-what-else-can-i-try)
-- [Contributors](#contributors)
-- [License](#license)
-
-## Installation
-
-The package is distributed via [npm][npm] and should be installed as one of your project's `devDependencies`:
-
-```bash
-npm install --save-dev cypress-file-upload
-```
-
-If you are using TypeScript, ensure your `tsconfig.json` contains commands' types:
-
-```json
-"compilerOptions": {
-  "types": ["cypress", "cypress-file-upload"]
-}
-```
-
-To be able to use any custom command you need to add it to `cypress/support/commands.js` like this:
-
-```javascript
-import 'cypress-file-upload';
-```
-
-Then, make sure this `commands.js` is imported in `cypress/support/index.js` (it might be commented):
-
-```javascript
-// Import commands.js using ES2015 syntax:
-import './commands';
-```
-
-All set now! :boom:
-
-## Usage
-
-Now, let's see how we can actually test something. Exposed command has signature like:
-
-```javascript
-cySubject.attachFile(fixture, optionalProcessingConfig);
-```
-
-It is a common practice to put all the files required for Cypress tests inside `cypress/fixtures` folder and call them as fixtures (or a fixture).  The command recognizes [`cy.fixture`][cy.fixture] format, so usually this is just a file name.
-
-### HTML5 file input
-
-```javascript
-cy.get('[data-cy="file-input"]')
-  .attachFile('myfixture.json');
-```
-
-### Drag-n-drop component
-
-```javascript
-cy.get('[data-cy="dropzone"]')
-  .attachFile('myfixture.json', { subjectType: 'drag-n-drop' });
-```
-
-### Attaching multiple files
-
-```javascript
-cy.get('[data-cy="file-input"]')
-  .attachFile(['myfixture1.json', 'myfixture2.json']);
-```
-_Note: in previous version you could also attach it chaining the command. It brought flaky behavior with redundant multiple event triggers, and was generally unstable. It might be still working, but make sure to use array instead._
-### Working with file encodings
-
-In some cases you might need more than just plain JSON [`cy.fixture`][cy.fixture]. If your file extension is supported out of the box, it should all be just fine.
-
-In case your file comes from some 3rd-party tool, or you already observed some errors in console, you likely need to tell Cypress how to treat your fixture file.
-
-```javascript
-cy.get('[data-cy="file-input"]')
-  .attachFile({ filePath: 'test.shp', encoding: 'utf-8' });
-```
-
-**Trying to upload a file that does not supported by Cypress by default?** Make sure you pass `encoding` property (see [API](#api)).
-
-### Working with raw file contents
-
-Normally you do not need this. But what the heck is normal anyways :neckbeard:
-
-If you need some custom file preprocessing, you can pass the raw file content:
-
-```javascript
-const special = 'file.spss';
-
-cy.fixture(special, 'binary')
-  .then(Cypress.Blob.binaryStringToBlob)
-  .then(fileContent => {
-    cy.get('[data-cy="file-input"]').attachFile({
-      fileContent,
-      filePath: special,
-      encoding: 'utf-8',
-      lastModified: new Date().getTime()
-    });
-  });
-```
-
-You still need to provide `filePath` in order to get file's metadata and encoding. For sure this is optional, and you can do it manually:
-
-```javascript
-cy.fixture('file.spss', 'binary')
-  .then(Cypress.Blob.binaryStringToBlob)
-  .then(fileContent => {
-    cy.get('[data-cy="file-input"]').attachFile({
-      fileContent,
-      fileName: 'whatever',
-      mimeType: 'application/octet-stream',
-      encoding: 'utf-8',
-      lastModified: new Date().getTime(),
-    });
-  });
-```
-
-### Override the file name
-
-```javascript
-cy.get('[data-cy="file-input"]')
-  .attachFile({ filePath: 'myfixture.json', fileName: 'customFileName.json' });
-```
-
-### Working with empty fixture file
-
-Normally you have to provide non-empty fixture file to test something. If your case isn't normal in that sense, here is the code snippet for you:
-
-```javascript
-cy.get('[data-cy="file-input"]')
-  .attachFile({ filePath: 'empty.txt', allowEmpty: true });
-```
-
-### Waiting for the upload to complete
-
-Cypress' [`cy.wait`][cy.wait] command allows you to pause code execution until some asyncronous action is finished. In case you are testing file upload, you might want to wait until the upload is complete:
-
-```javascript
-// start watching the POST requests
-cy.server({ method:'POST' });
-// and in particular the one with 'upload_endpoint' in the URL
-cy.route({
-  method: 'POST',
-  url: /upload_endpoint/
-}).as('upload');
-
-
-const fileName = 'upload_1.xlsx';
-
-cy.fixture(fileName, 'binary')
-    .then(Cypress.Blob.binaryStringToBlob)
-    .then(fileContent => {
-      cy.get('#input_upload_file').attachFile({
-        fileContent,
-        fileName,
-        mimeType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
-        encoding:'utf8',
-        lastModified: new Date().getTime()
-      })
-    })
-
-// wait for the 'upload_endpoint' request, and leave a 2 minutes delay before throwing an error
-cy.wait('@upload', { requestTimeout: 120000 });
-
-// stop watching requests
-cy.server({ enable: false })
-
-// keep testing the app
-// e.g. cy.get('.link_file[aria-label="upload_1"]').contains('(xlsx)');
-```
-
-### I wanna see some real-world examples
-
-There is a set of [recipes](./recipes) that demonstrates some framework setups along with different test cases. Make sure to check it out when in doubt.
-
-## API
-
-Exposed command in a nutshell:
-
-```javascript
-cySubject.attachFile(fixture, processingOpts);
-```
-
-**Familiar with TypeScript?** It might be easier for you to just look at [type definitions](./types/index.d.ts).
-
-`fixture` can be a string path (or array of those), or object (or array of those) that represents your local fixture file and contains following properties:
-
-- {string} `filePath` - file path (with extension)
-- {string} `fileName` - the name of the file to be attached, this allows to override the name provided by `filePath`
-- {Blob} `fileContent` - the binary content of the file to be attached
-- {string} `mimeType` - file [MIME][mime] type. By default, it gets resolved automatically based on file extension. Learn more about [mime](https://github.com/broofa/node-mime)
-- {string} `encoding` - normally [`cy.fixture`][cy.fixture] resolves encoding automatically, but in case it cannot be determined you can provide it manually. For a list of allowed encodings, see [here](https://github.com/abramenal/cypress-file-upload/blob/master/lib/file/constants.js#L1)
-- {number} `lastModified` - The unix timestamp of the lastModified value for the file.  Defaults to current time. Can be generated from `new Date().getTime()` or `Date.now()`
-
-`processingOpts` contains following properties:
-
-- {string} `subjectType` - target (aka subject) element kind: `'drag-n-drop'` component or plain HTML `'input'` element. Defaults to `'input'`
-- {boolean} `force` - same as for [`cy.trigger`][cy.trigger], it enforces the event triggers on HTML subject element. Usually this is necessary when you use hidden HTML controls for your file upload. Defaults to `false`
-- {boolean} `allowEmpty` - when true, do not throw an error if `fileContent` is zero length. Defaults to `false`
-
-## Recipes
-
-There is a set of [recipes](./recipes) that demonstrates some framework setups along with different test cases. Make sure to check it out when in doubt.
-
-Any contributions are welcome!
-
-## Caveats
-
-During the lifetime plugin faced some issues you might need to be aware of:
-
-- Chrome 73 changes related to HTML file input behavior: [#34][#34]
-- Force event triggering (same as for [`cy.trigger`][cy.trigger]) should happen when you use hidden HTML controls: [#41][#41]
-- Binary fixture has a workarounded encoding: [#70][#70]
-- Video fixture has a workarounded encoding: [#136][#136]
-- XML encoded files: [#209][#209]
-- Shadow DOM compatibility: [#74][#74]
-- Reading file content after upload: [#104][#104]
-
-## It isn't working! What else can I try?
-
-Here is step-by-step guide:
-
-1. Check [Caveats](#caveats) - maybe there is a tricky thing about exactly your setup
-1. Submit the issue and let us know about you problem
-1. In case you're using a file with encoding and/or extension that is not yet supported by Cypress, make sure you've tried to explicitly set the `encoding` property (see [API](#api))
-1. Comment your issue describing what happened after you've set the `encoding`
-
-## I want to contribute
-
-You have an idea of improvement, or some bugfix, or even a small typo fix? That's :cool:
-
-We really appreciate that and try to share ideas and best practices. Make sure to check out [CONTRIBUTING.md](./CONTRIBUTING.md) before start!
-
-Have something on your mind? Drop an issue or a message in [Discussions](https://github.com/abramenal/cypress-file-upload/discussions).
-
-## Contributors
-
-Thanks goes to these wonderful people ([emoji key](https://github.com/all-contributors/all-contributors#emoji-key)):
-
-<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
-<!-- prettier-ignore-start -->
-<!-- markdownlint-disable -->
-<table>
-  <tr>
-    <td align="center"><a href="https://github.com/allout58"><img src="https://avatars0.githubusercontent.com/u/2939703?v=4?s=100" width="100px;" alt=""/><br /><sub><b>James Hollowell</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/commits?author=allout58" title="Code">💻</a></td>
-    <td align="center"><a href="https://github.com/lunxiao"><img src="https://avatars1.githubusercontent.com/u/17435809?v=4?s=100" width="100px;" alt=""/><br /><sub><b>lunxiao</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/issues?q=author%3Alunxiao" title="Bug reports">🐛</a></td>
-    <td align="center"><a href="http://www.ollie-odonnell.com"><img src="https://avatars2.githubusercontent.com/u/5886107?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Oliver O'Donnell</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/issues?q=author%3Aoliverodaa" title="Bug reports">🐛</a> <a href="https://github.com/abramenal/cypress-file-upload/commits?author=oliverodaa" title="Code">💻</a></td>
-    <td align="center"><a href="https://github.com/virtuoushub"><img src="https://avatars0.githubusercontent.com/u/4303638?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Peter Colapietro</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/commits?author=virtuoushub" title="Documentation">📖</a></td>
-    <td align="center"><a href="https://github.com/km333"><img src="https://avatars1.githubusercontent.com/u/37389351?v=4?s=100" width="100px;" alt=""/><br /><sub><b>km333</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/issues?q=author%3Akm333" title="Bug reports">🐛</a></td>
-    <td align="center"><a href="http://pages.cs.wisc.edu/~mui/"><img src="https://avatars2.githubusercontent.com/u/17896701?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Kevin Mui</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/commits?author=kmui2" title="Code">💻</a> <a href="#ideas-kmui2" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/abramenal/cypress-file-upload/pulls?q=is%3Apr+reviewed-by%3Akmui2" title="Reviewed Pull Requests">👀</a></td>
-    <td align="center"><a href="http://www.benwurth.com/"><img src="https://avatars0.githubusercontent.com/u/2358786?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Ben Wurth</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/issues?q=author%3Abenwurth" title="Bug reports">🐛</a> <a href="https://github.com/abramenal/cypress-file-upload/commits?author=benwurth" title="Code">💻</a></td>
-  </tr>
-  <tr>
-    <td align="center"><a href="http://tomskjs.ru"><img src="https://avatars2.githubusercontent.com/u/1303845?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Andreev Sergey</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/commits?author=DragorWW" title="Tests">⚠️</a> <a href="#question-DragorWW" title="Answering Questions">💬</a> <a href="#example-DragorWW" title="Examples">💡</a> <a href="https://github.com/abramenal/cypress-file-upload/commits?author=DragorWW" title="Code">💻</a></td>
-    <td align="center"><a href="https://github.com/GuillaumeDind"><img src="https://avatars1.githubusercontent.com/u/45589123?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Guts</b></sub></a><br /><a href="#question-GuillaumeDind" title="Answering Questions">💬</a></td>
-    <td align="center"><a href="https://github.com/maple-leaf"><img src="https://avatars3.githubusercontent.com/u/3980995?v=4?s=100" width="100px;" alt=""/><br /><sub><b>maple-leaf</b></sub></a><br /><a href="#question-maple-leaf" title="Answering Questions">💬</a> <a href="https://github.com/abramenal/cypress-file-upload/commits?author=maple-leaf" title="Code">💻</a></td>
-    <td align="center"><a href="https://github.com/daniula"><img src="https://avatars3.githubusercontent.com/u/91628?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Daniel Mendalka</b></sub></a><br /><a href="#question-daniula" title="Answering Questions">💬</a></td>
-    <td align="center"><a href="http://www.stickypixel.com"><img src="https://avatars1.githubusercontent.com/u/12176122?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Chris Sargent</b></sub></a><br /><a href="#question-ChrisSargent" title="Answering Questions">💬</a></td>
-    <td align="center"><a href="https://ronakchovatiya.glitch.me/"><img src="https://avatars1.githubusercontent.com/u/16197756?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Ronak Chovatiya</b></sub></a><br /><a href="#question-rchovatiya88" title="Answering Questions">💬</a></td>
-    <td align="center"><a href="https://geromekevin.com"><img src="https://avatars0.githubusercontent.com/u/31096420?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jan Hesters</b></sub></a><br /><a href="#question-janhesters" title="Answering Questions">💬</a> <a href="https://github.com/abramenal/cypress-file-upload/issues?q=author%3Ajanhesters" title="Bug reports">🐛</a></td>
-  </tr>
-  <tr>
-    <td align="center"><a href="https://github.com/skjnldsv"><img src="https://avatars0.githubusercontent.com/u/14975046?v=4?s=100" width="100px;" alt=""/><br /><sub><b>John Molakvoæ</b></sub></a><br /><a href="#question-skjnldsv" title="Answering Questions">💬</a></td>
-    <td align="center"><a href="http://psjones.co.uk"><img src="https://avatars1.githubusercontent.com/u/677167?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Phil Jones</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/issues?q=author%3Aphiljones88" title="Bug reports">🐛</a></td>
-    <td align="center"><a href="https://github.com/NicolasGehring"><img src="https://avatars3.githubusercontent.com/u/38431471?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Nicolas Gehring</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/issues?q=author%3ANicolasGehring" title="Bug reports">🐛</a></td>
-    <td align="center"><a href="https://www.pertiller.tech"><img src="https://avatars3.githubusercontent.com/u/1514111?v=4?s=100" width="100px;" alt=""/><br /><sub><b>David Pertiller</b></sub></a><br /><a href="#question-Mobiletainment" title="Answering Questions">💬</a> <a href="https://github.com/abramenal/cypress-file-upload/commits?author=Mobiletainment" title="Code">💻</a></td>
-    <td align="center"><a href="https://github.com/xiaomeidan"><img src="https://avatars1.githubusercontent.com/u/5284575?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Amy</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/issues?q=author%3Axiaomeidan" title="Bug reports">🐛</a></td>
-    <td align="center"><a href="https://github.com/kammerer"><img src="https://avatars0.githubusercontent.com/u/14025?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Tomasz Szymczyszyn</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/commits?author=kammerer" title="Documentation">📖</a></td>
-    <td align="center"><a href="http://nitzel.github.io/"><img src="https://avatars0.githubusercontent.com/u/8362046?v=4?s=100" width="100px;" alt=""/><br /><sub><b>nitzel</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/commits?author=nitzel" title="Code">💻</a></td>
-  </tr>
-  <tr>
-    <td align="center"><a href="https://github.com/stefanbrato"><img src="https://avatars2.githubusercontent.com/u/4852275?v=4?s=100" width="100px;" alt=""/><br /><sub><b>dirk</b></sub></a><br /><a href="#ideas-stefanbrato" title="Ideas, Planning, & Feedback">🤔</a></td>
-    <td align="center"><a href="https://github.com/0xADD1E"><img src="https://avatars1.githubusercontent.com/u/38090404?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Addie Morrison</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/issues?q=author%3A0xADD1E" title="Bug reports">🐛</a></td>
-    <td align="center"><a href="https://blog.alec.coffee"><img src="https://avatars2.githubusercontent.com/u/6475934?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Alec Brunelle</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/issues?q=author%3Aaleccool213" title="Bug reports">🐛</a></td>
-    <td align="center"><a href="https://glebbahmutov.com/"><img src="https://avatars1.githubusercontent.com/u/2212006?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Gleb Bahmutov</b></sub></a><br /><a href="#ideas-bahmutov" title="Ideas, Planning, & Feedback">🤔</a></td>
-    <td align="center"><a href="https://github.com/JesseDeBruijne"><img src="https://avatars1.githubusercontent.com/u/29858373?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jesse de Bruijne</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/commits?author=JesseDeBruijne" title="Documentation">📖</a></td>
-    <td align="center"><a href="https://github.com/justinlittman"><img src="https://avatars1.githubusercontent.com/u/588335?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Justin Littman</b></sub></a><br /><a href="#question-justinlittman" title="Answering Questions">💬</a></td>
-    <td align="center"><a href="https://github.com/harrison9149"><img src="https://avatars0.githubusercontent.com/u/41189790?v=4?s=100" width="100px;" alt=""/><br /><sub><b>harrison9149</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/issues?q=author%3Aharrison9149" title="Bug reports">🐛</a></td>
-  </tr>
-  <tr>
-    <td align="center"><a href="https://github.com/jdcl32"><img src="https://avatars1.githubusercontent.com/u/17127746?v=4?s=100" width="100px;" alt=""/><br /><sub><b>jdcl32</b></sub></a><br /><a href="#question-jdcl32" title="Answering Questions">💬</a> <a href="https://github.com/abramenal/cypress-file-upload/commits?author=jdcl32" title="Code">💻</a></td>
-    <td align="center"><a href="https://github.com/ds300"><img src="https://avatars2.githubusercontent.com/u/1242537?v=4?s=100" width="100px;" alt=""/><br /><sub><b>David Sheldrick</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/commits?author=ds300" title="Code">💻</a></td>
-    <td align="center"><a href="https://macwright.org/"><img src="https://avatars2.githubusercontent.com/u/32314?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Tom MacWright</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/commits?author=tmcw" title="Code">💻</a></td>
-    <td align="center"><a href="https://github.com/ajhoddinott"><img src="https://avatars3.githubusercontent.com/u/771460?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Andrew Hoddinott</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/commits?author=ajhoddinott" title="Code">💻</a></td>
-    <td align="center"><a href="http://nisgrak.me"><img src="https://avatars3.githubusercontent.com/u/19597708?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Eneko Rodríguez</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/commits?author=Nisgrak" title="Code">💻</a></td>
-    <td align="center"><a href="https://github.com/the-owl"><img src="https://avatars1.githubusercontent.com/u/11090288?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Dmitry Nikulin</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/commits?author=the-owl" title="Code">💻</a></td>
-    <td align="center"><a href="https://www.linkedin.com/in/thiago-brezinski-5a4b30125/"><img src="https://avatars3.githubusercontent.com/u/26878038?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Thiago Brezinski</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/issues?q=author%3Athiagobrez" title="Bug reports">🐛</a></td>
-  </tr>
-  <tr>
-    <td align="center"><a href="https://github.com/jackguoAtJogg"><img src="https://avatars1.githubusercontent.com/u/56273621?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jack</b></sub></a><br /><a href="#question-jackguoAtJogg" title="Answering Questions">💬</a></td>
-    <td align="center"><a href="https://github.com/yonigibbs"><img src="https://avatars3.githubusercontent.com/u/39593145?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Yoni Gibbs</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/issues?q=author%3Ayonigibbs" title="Bug reports">🐛</a></td>
-    <td align="center"><a href="https://github.com/benowenssonos"><img src="https://avatars2.githubusercontent.com/u/44402951?v=4?s=100" width="100px;" alt=""/><br /><sub><b>benowenssonos</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/issues?q=author%3Abenowenssonos" title="Bug reports">🐛</a></td>
-    <td align="center"><a href="http://blog.kodono.info"><img src="https://avatars2.githubusercontent.com/u/946315?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Aymeric</b></sub></a><br /><a href="#question-Aymkdn" title="Answering Questions">💬</a></td>
-    <td align="center"><a href="https://github.com/asumaran"><img src="https://avatars1.githubusercontent.com/u/1025173?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Alfredo Sumaran</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/issues?q=author%3Aasumaran" title="Bug reports">🐛</a></td>
-    <td align="center"><a href="https://github.com/x-yuri"><img src="https://avatars0.githubusercontent.com/u/730588?v=4?s=100" width="100px;" alt=""/><br /><sub><b>x-yuri</b></sub></a><br /><a href="#ideas-x-yuri" title="Ideas, Planning, & Feedback">🤔</a></td>
-    <td align="center"><a href="http://triqtran.com"><img src="https://avatars1.githubusercontent.com/u/2232035?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Tri Q. Tran</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/commits?author=triqi" title="Code">💻</a></td>
-  </tr>
-  <tr>
-    <td align="center"><a href="https://francischartrand.com"><img src="https://avatars0.githubusercontent.com/u/1503758?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Francis Chartrand</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/commits?author=chartrandf" title="Documentation">📖</a></td>
-    <td align="center"><a href="https://github.com/emilong"><img src="https://avatars2.githubusercontent.com/u/1090771?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Emil Ong</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/commits?author=emilong" title="Code">💻</a></td>
-    <td align="center"><a href="https://github.com/Ebazhanov"><img src="https://avatars2.githubusercontent.com/u/13170022?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Evgenii</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/commits?author=Ebazhanov" title="Documentation">📖</a></td>
-    <td align="center"><a href="https://github.com/josephzidell"><img src="https://avatars0.githubusercontent.com/u/1812443?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Joseph Zidell</b></sub></a><br /><a href="#maintenance-josephzidell" title="Maintenance">🚧</a></td>
-    <td align="center"><a href="https://github.com/danielcaballero"><img src="https://avatars1.githubusercontent.com/u/1639333?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Daniel Caballero</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/commits?author=danielcaballero" title="Code">💻</a></td>
-    <td align="center"><a href="https://adrienjoly.com/now"><img src="https://avatars3.githubusercontent.com/u/531781?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Adrien Joly</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/commits?author=adrienjoly" title="Documentation">📖</a></td>
-    <td align="center"><a href="http://www.hypercubed.com"><img src="https://avatars1.githubusercontent.com/u/509946?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jayson Harshbarger</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/commits?author=Hypercubed" title="Code">💻</a></td>
-  </tr>
-  <tr>
-    <td align="center"><a href="http://www.andri.co"><img src="https://avatars0.githubusercontent.com/u/17087167?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Andrico</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/commits?author=andrico1234" title="Documentation">📖</a></td>
-    <td align="center"><a href="https://github.com/paulblyth"><img src="https://avatars0.githubusercontent.com/u/692357?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Paul Blyth</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/commits?author=paulblyth" title="Code">💻</a></td>
-    <td align="center"><a href="https://github.com/zephraph"><img src="https://avatars1.githubusercontent.com/u/3087225?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Justin Bennett</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/commits?author=zephraph" title="Documentation">📖</a></td>
-    <td align="center"><a href="http://www.bennettjones.com"><img src="https://avatars0.githubusercontent.com/u/62298251?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Shafiq Jetha</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/commits?author=jethas-bennettjones" title="Documentation">📖</a></td>
-    <td align="center"><a href="https://github.com/anonkey"><img src="https://avatars1.githubusercontent.com/u/6380129?v=4?s=100" width="100px;" alt=""/><br /><sub><b>tt rt</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/commits?author=anonkey" title="Code">💻</a></td>
-    <td align="center"><a href="https://www.edhollinghurst.com"><img src="https://avatars.githubusercontent.com/u/2844785?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Ed Hollinghurst</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/commits?author=edhollinghurst" title="Documentation">📖</a></td>
-    <td align="center"><a href="https://github.com/anark"><img src="https://avatars.githubusercontent.com/u/101184?v=4?s=100" width="100px;" alt=""/><br /><sub><b>anark</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/commits?author=anark" title="Tests">⚠️</a> <a href="https://github.com/abramenal/cypress-file-upload/commits?author=anark" title="Code">💻</a></td>
-  </tr>
-  <tr>
-    <td align="center"><a href="https://www.michaeljaltamirano.com/"><img src="https://avatars.githubusercontent.com/u/13544620?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Michael Altamirano</b></sub></a><br /><a href="https://github.com/abramenal/cypress-file-upload/commits?author=michaeljaltamirano" title="Code">💻</a> <a href="#question-michaeljaltamirano" title="Answering Questions">💬</a></td>
-  </tr>
-</table>
-
-<!-- markdownlint-restore -->
-<!-- prettier-ignore-end -->
-
-<!-- ALL-CONTRIBUTORS-LIST:END -->
-
-This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
-
-## License
-
-[MIT][mit]
-
-[cypress]: https://cypress.io/
-[cy.fixture]: https://docs.cypress.io/api/commands/fixture.html
-[cy.trigger]: https://docs.cypress.io/api/commands/trigger.html#Arguments
-[cy.wait]: https://docs.cypress.io/api/commands/wait.html
-[npm]: https://www.npmjs.com/
-[mime]: https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Complete_list_of_MIME_types
-[mit]: https://opensource.org/licenses/MIT
-[#34]: https://github.com/abramenal/cypress-file-upload/issues/34
-[#41]: https://github.com/abramenal/cypress-file-upload/issues/41
-[#70]: https://github.com/abramenal/cypress-file-upload/issues/70
-[#74]: https://github.com/abramenal/cypress-file-upload/issues/74
-[#104]: https://github.com/abramenal/cypress-file-upload/issues/104
-[#136]: https://github.com/abramenal/cypress-file-upload/issues/136
-[#209]: https://github.com/abramenal/cypress-file-upload/issues/209
diff --git a/node_modules/cypress-file-upload/dist/bundle.js b/node_modules/cypress-file-upload/dist/bundle.js
deleted file mode 100644
index e3066ef40..000000000
--- a/node_modules/cypress-file-upload/dist/bundle.js
+++ /dev/null
@@ -1,679 +0,0 @@
-'use strict';
-
-const DEFAULT_PROCESSING_OPTIONS = Object.freeze({
-  subjectType: 'input',
-  force: false,
-  allowEmpty: false
-});
-const SUBJECT_TYPE = Object.freeze({
-  INPUT: 'input',
-  DRAG_N_DROP: 'drag-n-drop'
-});
-const EVENTS_BY_SUBJECT_TYPE = {
-  [SUBJECT_TYPE.INPUT]: ['change'],
-
-  /**
-   * @see https://developer.mozilla.org/en-US/docs/Web/API/DragEvent
-   */
-  [SUBJECT_TYPE.DRAG_N_DROP]: ['dragstart', 'drag', 'dragenter', 'drop', 'dragleave', 'dragend']
-};
-
-/**
- * @description dispatches custom event with dataTransfer object provided
- *
- * @param {HTMLElement} target
- * @param {string} event
- * @param {DataTransfer} dataTransfer
- */
-function dispatchEvent(target, event, dataTransfer) {
-  const eventPayload = {
-    bubbles: true,
-    cancelable: true,
-    detail: dataTransfer
-  };
-
-  try {
-    const e = new CustomEvent(event, eventPayload);
-    Object.assign(e, {
-      dataTransfer
-    });
-    target.dispatchEvent(e);
-  } catch (e) {// make sure event triggering won't break if subject element is not visible or in DOM anymore
-  }
-}
-
-/**
- * @description determines if element is visible in DOM
- *
- * @param {Cypress.Subject} element
- * @returns {Boolean}
- */
-function isElementVisible(element) {
-  if (!element) {
-    throw new Error('Element cannot be empty');
-  }
-  /* running isVisible command on detached element throws an error */
-
-
-  return Cypress.dom.isAttached(element) && Cypress.dom.isVisible(element);
-}
-
-/**
- * @description determines if element is visible in DOM
- *
- * @param {Cypress.Subject} element
- * @returns {Boolean}
- */
-function isShadowElement(element) {
-  if (!element) {
-    throw new Error('Element cannot be empty');
-  }
-
-  return Cypress.dom.isDetached(element);
-}
-
-const BROWSER_CHROME = 'chrome';
-function isManualEventHandling() {
-  const {
-    name,
-    majorVersion
-  } = Cypress.browser;
-
-  if (name === BROWSER_CHROME && majorVersion < 73) {
-    /**
-     * Chrome <73 triggers 'change' event automatically
-     * https://github.com/abramenal/cypress-file-upload/issues/34
-     */
-    return false;
-  }
-
-  return true;
-}
-
-const BROWSER_FIREFOX = 'firefox';
-function isBrowserFirefox() {
-  const {
-    name
-  } = Cypress.browser;
-  return name === BROWSER_FIREFOX;
-}
-
-function dispatchEvents(element, events, dataTransfer) {
-  events.forEach(event => {
-    dispatchEvent(element, event, dataTransfer);
-  });
-}
-
-function getEventsBySubjectType(subjectType) {
-  const events = EVENTS_BY_SUBJECT_TYPE[subjectType];
-  /**
-   * @see https://github.com/abramenal/cypress-file-upload/issues/293
-   */
-
-  if (subjectType === SUBJECT_TYPE.DRAG_N_DROP && isBrowserFirefox()) {
-    events.push('change');
-  }
-
-  return events;
-}
-
-function attachFileToElement(subject, {
-  files,
-  subjectType,
-  force,
-  window
-}) {
-  const dataTransfer = new window.DataTransfer();
-  files.forEach(f => dataTransfer.items.add(f));
-
-  if (subjectType === SUBJECT_TYPE.INPUT) {
-    const inputElement = subject[0];
-    inputElement.files = dataTransfer.files;
-
-    if (force) {
-      dispatchEvents(inputElement, getEventsBySubjectType(subjectType), dataTransfer);
-    }
-  } else if (subjectType === SUBJECT_TYPE.DRAG_N_DROP) {
-    const inputElements = subject[0].querySelectorAll('input[type="file"]');
-    /**
-     * Try to find underlying file input element, as likely drag-n-drop component uses it internally
-     * Otherwise dispatch all events on subject element
-     */
-
-    if (inputElements.length === 1) {
-      const inputElement = inputElements[0];
-      inputElement.files = dataTransfer.files;
-
-      if (force) {
-        dispatchEvents(inputElement, getEventsBySubjectType(subjectType), dataTransfer);
-      }
-    } else {
-      const inputElement = subject[0];
-      inputElement.files = dataTransfer.files;
-
-      if (force) {
-        dispatchEvents(inputElement, getEventsBySubjectType(subjectType), dataTransfer);
-      }
-    }
-  }
-}
-
-const ENCODING = Object.freeze({
-  ASCII: 'ascii',
-  BASE64: 'base64',
-  BINARY: 'binary',
-  HEX: 'hex',
-  LATIN1: 'latin1',
-  UTF8: 'utf8',
-  UTF_8: 'utf-8',
-  UCS2: 'ucs2',
-  UCS_2: 'ucs-2',
-  UTF16LE: 'utf16le',
-  UTF_16LE: 'utf-16le'
-});
-const FILE_EXTENSION = Object.freeze({
-  JSON: 'json',
-  JS: 'js',
-  COFFEE: 'coffee',
-  HTML: 'html',
-  TXT: 'txt',
-  CSV: 'csv',
-  PNG: 'png',
-  JPG: 'jpg',
-  JPEG: 'jpeg',
-  GIF: 'gif',
-  TIF: 'tif',
-  TIFF: 'tiff',
-  ZIP: 'zip',
-  PDF: 'pdf',
-  VCF: 'vcf',
-  SVG: 'svg',
-  XLS: 'xls',
-  XLSX: 'xlsx',
-  DOC: 'doc',
-  DOCX: 'docx',
-  MP3: 'mp3'
-});
-
-const wrapBlob = blob => {
-  // Cypress version 5 assigns a function with a compatibility warning
-  // to blob.then, but that makes the Blob actually thenable. We have
-  // to remove that to Promise.resolve not treat it as thenable.
-  if (blob instanceof Cypress.Promise) {
-    return blob;
-  } // eslint-disable-next-line no-param-reassign
-
-
-  delete blob.then;
-  return Cypress.Promise.resolve(blob);
-};
-
-function getFileExt(filePath) {
-  if (!filePath) {
-    return '';
-  }
-
-  const pos = filePath.lastIndexOf('.');
-
-  if (pos === -1) {
-    return '';
-  }
-
-  return filePath.slice(pos + 1);
-}
-
-const ENCODING_TO_BLOB_GETTER = {
-  [ENCODING.ASCII]: fileContent => Cypress.Promise.resolve(fileContent),
-  [ENCODING.BASE64]: (fileContent, mimeType) => wrapBlob(Cypress.Blob.base64StringToBlob(fileContent, mimeType)),
-  [ENCODING.BINARY]: (fileContent, mimeType) => wrapBlob(Cypress.Blob.binaryStringToBlob(fileContent, mimeType)),
-  [ENCODING.HEX]: fileContent => Cypress.Promise.resolve(fileContent),
-  [ENCODING.LATIN1]: fileContent => Cypress.Promise.resolve(fileContent),
-  [ENCODING.UTF8]: fileContent => Cypress.Promise.resolve(fileContent),
-  [ENCODING.UTF_8]: fileContent => Cypress.Promise.resolve(fileContent),
-  [ENCODING.UCS2]: fileContent => Cypress.Promise.resolve(fileContent),
-  [ENCODING.UCS_2]: fileContent => Cypress.Promise.resolve(fileContent),
-  [ENCODING.UTF16LE]: fileContent => Cypress.Promise.resolve(fileContent),
-  [ENCODING.UTF_16LE]: fileContent => Cypress.Promise.resolve(fileContent)
-};
-function getFileBlobAsync({
-  fileName,
-  fileContent,
-  mimeType,
-  encoding,
-  window,
-  lastModified
-}) {
-  const getBlob = ENCODING_TO_BLOB_GETTER[encoding];
-  return getBlob(fileContent, mimeType).then(blob => {
-    let blobContent = blob; // https://github.com/abramenal/cypress-file-upload/issues/175
-
-    if (getFileExt(fileName) === FILE_EXTENSION.JSON) {
-      blobContent = JSON.stringify(fileContent, null, 2);
-    } // we must use the file constructor from the subject window so this check `file instanceof File`, can pass
-
-
-    const file = new window.File([blobContent], fileName, {
-      type: mimeType,
-      lastModified
-    });
-    return file;
-  });
-}
-
-function getFileContent({
-  filePath,
-  fileContent,
-  fileEncoding
-}) {
-  // allows users to provide file content.
-  if (fileContent) {
-    return wrapBlob(fileContent);
-  }
-
-  return Cypress.cy.fixture(filePath, fileEncoding);
-}
-
-/*
- * Copied from https://github.com/cypress-io/cypress/blob/develop/packages/server/lib/fixture.coffee#L104
- */
-
-const EXTENSION_TO_ENCODING = {
-  [FILE_EXTENSION.JSON]: ENCODING.UTF8,
-  [FILE_EXTENSION.JS]: ENCODING.UTF8,
-  [FILE_EXTENSION.COFFEE]: ENCODING.UTF8,
-  [FILE_EXTENSION.HTML]: ENCODING.UTF8,
-  [FILE_EXTENSION.TXT]: ENCODING.UTF8,
-  [FILE_EXTENSION.CSV]: ENCODING.UTF8,
-  [FILE_EXTENSION.PNG]: ENCODING.BASE64,
-  [FILE_EXTENSION.JPG]: ENCODING.BASE64,
-  [FILE_EXTENSION.JPEG]: ENCODING.BASE64,
-  [FILE_EXTENSION.GIF]: ENCODING.BASE64,
-  [FILE_EXTENSION.TIF]: ENCODING.BASE64,
-  [FILE_EXTENSION.TIFF]: ENCODING.BASE64,
-  [FILE_EXTENSION.ZIP]: ENCODING.BASE64,
-
-  /*
-   * Other extensions that are not supported by cy.fixture by default:
-   */
-  [FILE_EXTENSION.PDF]: ENCODING.UTF8,
-  [FILE_EXTENSION.VCF]: ENCODING.UTF8,
-  [FILE_EXTENSION.SVG]: ENCODING.UTF8,
-  [FILE_EXTENSION.XLS]: ENCODING.BINARY,
-  [FILE_EXTENSION.XLSX]: ENCODING.BINARY,
-  [FILE_EXTENSION.DOC]: ENCODING.BINARY,
-  [FILE_EXTENSION.DOCX]: ENCODING.BINARY,
-  [FILE_EXTENSION.MP3]: ENCODING.BINARY
-};
-const DEFAULT_ENCODING = ENCODING.UTF8;
-function getFileEncoding(filePath) {
-  const extension = getFileExt(filePath);
-  const encoding = EXTENSION_TO_ENCODING[extension];
-  return encoding || DEFAULT_ENCODING;
-}
-
-/**
- * @param typeMap [Object] Map of MIME type -> Array[extensions]
- * @param ...
- */
-function Mime() {
-  this._types = Object.create(null);
-  this._extensions = Object.create(null);
-
-  for (let i = 0; i < arguments.length; i++) {
-    this.define(arguments[i]);
-  }
-
-  this.define = this.define.bind(this);
-  this.getType = this.getType.bind(this);
-  this.getExtension = this.getExtension.bind(this);
-}
-
-/**
- * Define mimetype -> extension mappings.  Each key is a mime-type that maps
- * to an array of extensions associated with the type.  The first extension is
- * used as the default extension for the type.
- *
- * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']});
- *
- * If a type declares an extension that has already been defined, an error will
- * be thrown.  To suppress this error and force the extension to be associated
- * with the new type, pass `force`=true.  Alternatively, you may prefix the
- * extension with "*" to map the type to extension, without mapping the
- * extension to the type.
- *
- * e.g. mime.define({'audio/wav', ['wav']}, {'audio/x-wav', ['*wav']});
- *
- *
- * @param map (Object) type definitions
- * @param force (Boolean) if true, force overriding of existing definitions
- */
-Mime.prototype.define = function(typeMap, force) {
-  for (let type in typeMap) {
-    let extensions = typeMap[type].map(function(t) {
-      return t.toLowerCase();
-    });
-    type = type.toLowerCase();
-
-    for (let i = 0; i < extensions.length; i++) {
-      const ext = extensions[i];
-
-      // '*' prefix = not the preferred type for this extension.  So fixup the
-      // extension, and skip it.
-      if (ext[0] === '*') {
-        continue;
-      }
-
-      if (!force && (ext in this._types)) {
-        throw new Error(
-          'Attempt to change mapping for "' + ext +
-          '" extension from "' + this._types[ext] + '" to "' + type +
-          '". Pass `force=true` to allow this, otherwise remove "' + ext +
-          '" from the list of extensions for "' + type + '".'
-        );
-      }
-
-      this._types[ext] = type;
-    }
-
-    // Use first extension as default
-    if (force || !this._extensions[type]) {
-      const ext = extensions[0];
-      this._extensions[type] = (ext[0] !== '*') ? ext : ext.substr(1);
-    }
-  }
-};
-
-/**
- * Lookup a mime type based on extension
- */
-Mime.prototype.getType = function(path) {
-  path = String(path);
-  let last = path.replace(/^.*[/\\]/, '').toLowerCase();
-  let ext = last.replace(/^.*\./, '').toLowerCase();
-
-  let hasPath = last.length < path.length;
-  let hasDot = ext.length < last.length - 1;
-
-  return (hasDot || !hasPath) && this._types[ext] || null;
-};
-
-/**
- * Return file extension associated with a mime type
- */
-Mime.prototype.getExtension = function(type) {
-  type = /^\s*([^;\s]*)/.test(type) && RegExp.$1;
-  return type && this._extensions[type.toLowerCase()] || null;
-};
-
-var Mime_1 = Mime;
-
-var standard = {"application/andrew-inset":["ez"],"application/applixware":["aw"],"application/atom+xml":["atom"],"application/atomcat+xml":["atomcat"],"application/atomdeleted+xml":["atomdeleted"],"application/atomsvc+xml":["atomsvc"],"application/atsc-dwd+xml":["dwd"],"application/atsc-held+xml":["held"],"application/atsc-rsat+xml":["rsat"],"application/bdoc":["bdoc"],"application/calendar+xml":["xcs"],"application/ccxml+xml":["ccxml"],"application/cdfx+xml":["cdfx"],"application/cdmi-capability":["cdmia"],"application/cdmi-container":["cdmic"],"application/cdmi-domain":["cdmid"],"application/cdmi-object":["cdmio"],"application/cdmi-queue":["cdmiq"],"application/cu-seeme":["cu"],"application/dash+xml":["mpd"],"application/davmount+xml":["davmount"],"application/docbook+xml":["dbk"],"application/dssc+der":["dssc"],"application/dssc+xml":["xdssc"],"application/ecmascript":["ecma","es"],"application/emma+xml":["emma"],"application/emotionml+xml":["emotionml"],"application/epub+zip":["epub"],"application/exi":["exi"],"application/fdt+xml":["fdt"],"application/font-tdpfr":["pfr"],"application/geo+json":["geojson"],"application/gml+xml":["gml"],"application/gpx+xml":["gpx"],"application/gxf":["gxf"],"application/gzip":["gz"],"application/hjson":["hjson"],"application/hyperstudio":["stk"],"application/inkml+xml":["ink","inkml"],"application/ipfix":["ipfix"],"application/its+xml":["its"],"application/java-archive":["jar","war","ear"],"application/java-serialized-object":["ser"],"application/java-vm":["class"],"application/javascript":["js","mjs"],"application/json":["json","map"],"application/json5":["json5"],"application/jsonml+json":["jsonml"],"application/ld+json":["jsonld"],"application/lgr+xml":["lgr"],"application/lost+xml":["lostxml"],"application/mac-binhex40":["hqx"],"application/mac-compactpro":["cpt"],"application/mads+xml":["mads"],"application/manifest+json":["webmanifest"],"application/marc":["mrc"],"application/marcxml+xml":["mrcx"],"application/mathematica":["ma","nb","mb"],"application/mathml+xml":["mathml"],"application/mbox":["mbox"],"application/mediaservercontrol+xml":["mscml"],"application/metalink+xml":["metalink"],"application/metalink4+xml":["meta4"],"application/mets+xml":["mets"],"application/mmt-aei+xml":["maei"],"application/mmt-usd+xml":["musd"],"application/mods+xml":["mods"],"application/mp21":["m21","mp21"],"application/mp4":["mp4s","m4p"],"application/mrb-consumer+xml":["*xdf"],"application/mrb-publish+xml":["*xdf"],"application/msword":["doc","dot"],"application/mxf":["mxf"],"application/n-quads":["nq"],"application/n-triples":["nt"],"application/node":["cjs"],"application/octet-stream":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"],"application/oda":["oda"],"application/oebps-package+xml":["opf"],"application/ogg":["ogx"],"application/omdoc+xml":["omdoc"],"application/onenote":["onetoc","onetoc2","onetmp","onepkg"],"application/oxps":["oxps"],"application/p2p-overlay+xml":["relo"],"application/patch-ops-error+xml":["*xer"],"application/pdf":["pdf"],"application/pgp-encrypted":["pgp"],"application/pgp-signature":["asc","sig"],"application/pics-rules":["prf"],"application/pkcs10":["p10"],"application/pkcs7-mime":["p7m","p7c"],"application/pkcs7-signature":["p7s"],"application/pkcs8":["p8"],"application/pkix-attr-cert":["ac"],"application/pkix-cert":["cer"],"application/pkix-crl":["crl"],"application/pkix-pkipath":["pkipath"],"application/pkixcmp":["pki"],"application/pls+xml":["pls"],"application/postscript":["ai","eps","ps"],"application/provenance+xml":["provx"],"application/pskc+xml":["pskcxml"],"application/raml+yaml":["raml"],"application/rdf+xml":["rdf","owl"],"application/reginfo+xml":["rif"],"application/relax-ng-compact-syntax":["rnc"],"application/resource-lists+xml":["rl"],"application/resource-lists-diff+xml":["rld"],"application/rls-services+xml":["rs"],"application/route-apd+xml":["rapd"],"application/route-s-tsid+xml":["sls"],"application/route-usd+xml":["rusd"],"application/rpki-ghostbusters":["gbr"],"application/rpki-manifest":["mft"],"application/rpki-roa":["roa"],"application/rsd+xml":["rsd"],"application/rss+xml":["rss"],"application/rtf":["rtf"],"application/sbml+xml":["sbml"],"application/scvp-cv-request":["scq"],"application/scvp-cv-response":["scs"],"application/scvp-vp-request":["spq"],"application/scvp-vp-response":["spp"],"application/sdp":["sdp"],"application/senml+xml":["senmlx"],"application/sensml+xml":["sensmlx"],"application/set-payment-initiation":["setpay"],"application/set-registration-initiation":["setreg"],"application/shf+xml":["shf"],"application/sieve":["siv","sieve"],"application/smil+xml":["smi","smil"],"application/sparql-query":["rq"],"application/sparql-results+xml":["srx"],"application/srgs":["gram"],"application/srgs+xml":["grxml"],"application/sru+xml":["sru"],"application/ssdl+xml":["ssdl"],"application/ssml+xml":["ssml"],"application/swid+xml":["swidtag"],"application/tei+xml":["tei","teicorpus"],"application/thraud+xml":["tfi"],"application/timestamped-data":["tsd"],"application/toml":["toml"],"application/ttml+xml":["ttml"],"application/ubjson":["ubj"],"application/urc-ressheet+xml":["rsheet"],"application/urc-targetdesc+xml":["td"],"application/voicexml+xml":["vxml"],"application/wasm":["wasm"],"application/widget":["wgt"],"application/winhlp":["hlp"],"application/wsdl+xml":["wsdl"],"application/wspolicy+xml":["wspolicy"],"application/xaml+xml":["xaml"],"application/xcap-att+xml":["xav"],"application/xcap-caps+xml":["xca"],"application/xcap-diff+xml":["xdf"],"application/xcap-el+xml":["xel"],"application/xcap-error+xml":["xer"],"application/xcap-ns+xml":["xns"],"application/xenc+xml":["xenc"],"application/xhtml+xml":["xhtml","xht"],"application/xliff+xml":["xlf"],"application/xml":["xml","xsl","xsd","rng"],"application/xml-dtd":["dtd"],"application/xop+xml":["xop"],"application/xproc+xml":["xpl"],"application/xslt+xml":["*xsl","xslt"],"application/xspf+xml":["xspf"],"application/xv+xml":["mxml","xhvml","xvml","xvm"],"application/yang":["yang"],"application/yin+xml":["yin"],"application/zip":["zip"],"audio/3gpp":["*3gpp"],"audio/adpcm":["adp"],"audio/basic":["au","snd"],"audio/midi":["mid","midi","kar","rmi"],"audio/mobile-xmf":["mxmf"],"audio/mp3":["*mp3"],"audio/mp4":["m4a","mp4a"],"audio/mpeg":["mpga","mp2","mp2a","mp3","m2a","m3a"],"audio/ogg":["oga","ogg","spx"],"audio/s3m":["s3m"],"audio/silk":["sil"],"audio/wav":["wav"],"audio/wave":["*wav"],"audio/webm":["weba"],"audio/xm":["xm"],"font/collection":["ttc"],"font/otf":["otf"],"font/ttf":["ttf"],"font/woff":["woff"],"font/woff2":["woff2"],"image/aces":["exr"],"image/apng":["apng"],"image/avif":["avif"],"image/bmp":["bmp"],"image/cgm":["cgm"],"image/dicom-rle":["drle"],"image/emf":["emf"],"image/fits":["fits"],"image/g3fax":["g3"],"image/gif":["gif"],"image/heic":["heic"],"image/heic-sequence":["heics"],"image/heif":["heif"],"image/heif-sequence":["heifs"],"image/hej2k":["hej2"],"image/hsj2":["hsj2"],"image/ief":["ief"],"image/jls":["jls"],"image/jp2":["jp2","jpg2"],"image/jpeg":["jpeg","jpg","jpe"],"image/jph":["jph"],"image/jphc":["jhc"],"image/jpm":["jpm"],"image/jpx":["jpx","jpf"],"image/jxr":["jxr"],"image/jxra":["jxra"],"image/jxrs":["jxrs"],"image/jxs":["jxs"],"image/jxsc":["jxsc"],"image/jxsi":["jxsi"],"image/jxss":["jxss"],"image/ktx":["ktx"],"image/ktx2":["ktx2"],"image/png":["png"],"image/sgi":["sgi"],"image/svg+xml":["svg","svgz"],"image/t38":["t38"],"image/tiff":["tif","tiff"],"image/tiff-fx":["tfx"],"image/webp":["webp"],"image/wmf":["wmf"],"message/disposition-notification":["disposition-notification"],"message/global":["u8msg"],"message/global-delivery-status":["u8dsn"],"message/global-disposition-notification":["u8mdn"],"message/global-headers":["u8hdr"],"message/rfc822":["eml","mime"],"model/3mf":["3mf"],"model/gltf+json":["gltf"],"model/gltf-binary":["glb"],"model/iges":["igs","iges"],"model/mesh":["msh","mesh","silo"],"model/mtl":["mtl"],"model/obj":["obj"],"model/stl":["stl"],"model/vrml":["wrl","vrml"],"model/x3d+binary":["*x3db","x3dbz"],"model/x3d+fastinfoset":["x3db"],"model/x3d+vrml":["*x3dv","x3dvz"],"model/x3d+xml":["x3d","x3dz"],"model/x3d-vrml":["x3dv"],"text/cache-manifest":["appcache","manifest"],"text/calendar":["ics","ifb"],"text/coffeescript":["coffee","litcoffee"],"text/css":["css"],"text/csv":["csv"],"text/html":["html","htm","shtml"],"text/jade":["jade"],"text/jsx":["jsx"],"text/less":["less"],"text/markdown":["markdown","md"],"text/mathml":["mml"],"text/mdx":["mdx"],"text/n3":["n3"],"text/plain":["txt","text","conf","def","list","log","in","ini"],"text/richtext":["rtx"],"text/rtf":["*rtf"],"text/sgml":["sgml","sgm"],"text/shex":["shex"],"text/slim":["slim","slm"],"text/spdx":["spdx"],"text/stylus":["stylus","styl"],"text/tab-separated-values":["tsv"],"text/troff":["t","tr","roff","man","me","ms"],"text/turtle":["ttl"],"text/uri-list":["uri","uris","urls"],"text/vcard":["vcard"],"text/vtt":["vtt"],"text/xml":["*xml"],"text/yaml":["yaml","yml"],"video/3gpp":["3gp","3gpp"],"video/3gpp2":["3g2"],"video/h261":["h261"],"video/h263":["h263"],"video/h264":["h264"],"video/jpeg":["jpgv"],"video/jpm":["*jpm","jpgm"],"video/mj2":["mj2","mjp2"],"video/mp2t":["ts"],"video/mp4":["mp4","mp4v","mpg4"],"video/mpeg":["mpeg","mpg","mpe","m1v","m2v"],"video/ogg":["ogv"],"video/quicktime":["qt","mov"],"video/webm":["webm"]};
-
-var other = {"application/prs.cww":["cww"],"application/vnd.1000minds.decision-model+xml":["1km"],"application/vnd.3gpp.pic-bw-large":["plb"],"application/vnd.3gpp.pic-bw-small":["psb"],"application/vnd.3gpp.pic-bw-var":["pvb"],"application/vnd.3gpp2.tcap":["tcap"],"application/vnd.3m.post-it-notes":["pwn"],"application/vnd.accpac.simply.aso":["aso"],"application/vnd.accpac.simply.imp":["imp"],"application/vnd.acucobol":["acu"],"application/vnd.acucorp":["atc","acutc"],"application/vnd.adobe.air-application-installer-package+zip":["air"],"application/vnd.adobe.formscentral.fcdt":["fcdt"],"application/vnd.adobe.fxp":["fxp","fxpl"],"application/vnd.adobe.xdp+xml":["xdp"],"application/vnd.adobe.xfdf":["xfdf"],"application/vnd.ahead.space":["ahead"],"application/vnd.airzip.filesecure.azf":["azf"],"application/vnd.airzip.filesecure.azs":["azs"],"application/vnd.amazon.ebook":["azw"],"application/vnd.americandynamics.acc":["acc"],"application/vnd.amiga.ami":["ami"],"application/vnd.android.package-archive":["apk"],"application/vnd.anser-web-certificate-issue-initiation":["cii"],"application/vnd.anser-web-funds-transfer-initiation":["fti"],"application/vnd.antix.game-component":["atx"],"application/vnd.apple.installer+xml":["mpkg"],"application/vnd.apple.keynote":["key"],"application/vnd.apple.mpegurl":["m3u8"],"application/vnd.apple.numbers":["numbers"],"application/vnd.apple.pages":["pages"],"application/vnd.apple.pkpass":["pkpass"],"application/vnd.aristanetworks.swi":["swi"],"application/vnd.astraea-software.iota":["iota"],"application/vnd.audiograph":["aep"],"application/vnd.balsamiq.bmml+xml":["bmml"],"application/vnd.blueice.multipass":["mpm"],"application/vnd.bmi":["bmi"],"application/vnd.businessobjects":["rep"],"application/vnd.chemdraw+xml":["cdxml"],"application/vnd.chipnuts.karaoke-mmd":["mmd"],"application/vnd.cinderella":["cdy"],"application/vnd.citationstyles.style+xml":["csl"],"application/vnd.claymore":["cla"],"application/vnd.cloanto.rp9":["rp9"],"application/vnd.clonk.c4group":["c4g","c4d","c4f","c4p","c4u"],"application/vnd.cluetrust.cartomobile-config":["c11amc"],"application/vnd.cluetrust.cartomobile-config-pkg":["c11amz"],"application/vnd.commonspace":["csp"],"application/vnd.contact.cmsg":["cdbcmsg"],"application/vnd.cosmocaller":["cmc"],"application/vnd.crick.clicker":["clkx"],"application/vnd.crick.clicker.keyboard":["clkk"],"application/vnd.crick.clicker.palette":["clkp"],"application/vnd.crick.clicker.template":["clkt"],"application/vnd.crick.clicker.wordbank":["clkw"],"application/vnd.criticaltools.wbs+xml":["wbs"],"application/vnd.ctc-posml":["pml"],"application/vnd.cups-ppd":["ppd"],"application/vnd.curl.car":["car"],"application/vnd.curl.pcurl":["pcurl"],"application/vnd.dart":["dart"],"application/vnd.data-vision.rdz":["rdz"],"application/vnd.dbf":["dbf"],"application/vnd.dece.data":["uvf","uvvf","uvd","uvvd"],"application/vnd.dece.ttml+xml":["uvt","uvvt"],"application/vnd.dece.unspecified":["uvx","uvvx"],"application/vnd.dece.zip":["uvz","uvvz"],"application/vnd.denovo.fcselayout-link":["fe_launch"],"application/vnd.dna":["dna"],"application/vnd.dolby.mlp":["mlp"],"application/vnd.dpgraph":["dpg"],"application/vnd.dreamfactory":["dfac"],"application/vnd.ds-keypoint":["kpxx"],"application/vnd.dvb.ait":["ait"],"application/vnd.dvb.service":["svc"],"application/vnd.dynageo":["geo"],"application/vnd.ecowin.chart":["mag"],"application/vnd.enliven":["nml"],"application/vnd.epson.esf":["esf"],"application/vnd.epson.msf":["msf"],"application/vnd.epson.quickanime":["qam"],"application/vnd.epson.salt":["slt"],"application/vnd.epson.ssf":["ssf"],"application/vnd.eszigno3+xml":["es3","et3"],"application/vnd.ezpix-album":["ez2"],"application/vnd.ezpix-package":["ez3"],"application/vnd.fdf":["fdf"],"application/vnd.fdsn.mseed":["mseed"],"application/vnd.fdsn.seed":["seed","dataless"],"application/vnd.flographit":["gph"],"application/vnd.fluxtime.clip":["ftc"],"application/vnd.framemaker":["fm","frame","maker","book"],"application/vnd.frogans.fnc":["fnc"],"application/vnd.frogans.ltf":["ltf"],"application/vnd.fsc.weblaunch":["fsc"],"application/vnd.fujitsu.oasys":["oas"],"application/vnd.fujitsu.oasys2":["oa2"],"application/vnd.fujitsu.oasys3":["oa3"],"application/vnd.fujitsu.oasysgp":["fg5"],"application/vnd.fujitsu.oasysprs":["bh2"],"application/vnd.fujixerox.ddd":["ddd"],"application/vnd.fujixerox.docuworks":["xdw"],"application/vnd.fujixerox.docuworks.binder":["xbd"],"application/vnd.fuzzysheet":["fzs"],"application/vnd.genomatix.tuxedo":["txd"],"application/vnd.geogebra.file":["ggb"],"application/vnd.geogebra.tool":["ggt"],"application/vnd.geometry-explorer":["gex","gre"],"application/vnd.geonext":["gxt"],"application/vnd.geoplan":["g2w"],"application/vnd.geospace":["g3w"],"application/vnd.gmx":["gmx"],"application/vnd.google-apps.document":["gdoc"],"application/vnd.google-apps.presentation":["gslides"],"application/vnd.google-apps.spreadsheet":["gsheet"],"application/vnd.google-earth.kml+xml":["kml"],"application/vnd.google-earth.kmz":["kmz"],"application/vnd.grafeq":["gqf","gqs"],"application/vnd.groove-account":["gac"],"application/vnd.groove-help":["ghf"],"application/vnd.groove-identity-message":["gim"],"application/vnd.groove-injector":["grv"],"application/vnd.groove-tool-message":["gtm"],"application/vnd.groove-tool-template":["tpl"],"application/vnd.groove-vcard":["vcg"],"application/vnd.hal+xml":["hal"],"application/vnd.handheld-entertainment+xml":["zmm"],"application/vnd.hbci":["hbci"],"application/vnd.hhe.lesson-player":["les"],"application/vnd.hp-hpgl":["hpgl"],"application/vnd.hp-hpid":["hpid"],"application/vnd.hp-hps":["hps"],"application/vnd.hp-jlyt":["jlt"],"application/vnd.hp-pcl":["pcl"],"application/vnd.hp-pclxl":["pclxl"],"application/vnd.hydrostatix.sof-data":["sfd-hdstx"],"application/vnd.ibm.minipay":["mpy"],"application/vnd.ibm.modcap":["afp","listafp","list3820"],"application/vnd.ibm.rights-management":["irm"],"application/vnd.ibm.secure-container":["sc"],"application/vnd.iccprofile":["icc","icm"],"application/vnd.igloader":["igl"],"application/vnd.immervision-ivp":["ivp"],"application/vnd.immervision-ivu":["ivu"],"application/vnd.insors.igm":["igm"],"application/vnd.intercon.formnet":["xpw","xpx"],"application/vnd.intergeo":["i2g"],"application/vnd.intu.qbo":["qbo"],"application/vnd.intu.qfx":["qfx"],"application/vnd.ipunplugged.rcprofile":["rcprofile"],"application/vnd.irepository.package+xml":["irp"],"application/vnd.is-xpr":["xpr"],"application/vnd.isac.fcs":["fcs"],"application/vnd.jam":["jam"],"application/vnd.jcp.javame.midlet-rms":["rms"],"application/vnd.jisp":["jisp"],"application/vnd.joost.joda-archive":["joda"],"application/vnd.kahootz":["ktz","ktr"],"application/vnd.kde.karbon":["karbon"],"application/vnd.kde.kchart":["chrt"],"application/vnd.kde.kformula":["kfo"],"application/vnd.kde.kivio":["flw"],"application/vnd.kde.kontour":["kon"],"application/vnd.kde.kpresenter":["kpr","kpt"],"application/vnd.kde.kspread":["ksp"],"application/vnd.kde.kword":["kwd","kwt"],"application/vnd.kenameaapp":["htke"],"application/vnd.kidspiration":["kia"],"application/vnd.kinar":["kne","knp"],"application/vnd.koan":["skp","skd","skt","skm"],"application/vnd.kodak-descriptor":["sse"],"application/vnd.las.las+xml":["lasxml"],"application/vnd.llamagraphics.life-balance.desktop":["lbd"],"application/vnd.llamagraphics.life-balance.exchange+xml":["lbe"],"application/vnd.lotus-1-2-3":["123"],"application/vnd.lotus-approach":["apr"],"application/vnd.lotus-freelance":["pre"],"application/vnd.lotus-notes":["nsf"],"application/vnd.lotus-organizer":["org"],"application/vnd.lotus-screencam":["scm"],"application/vnd.lotus-wordpro":["lwp"],"application/vnd.macports.portpkg":["portpkg"],"application/vnd.mcd":["mcd"],"application/vnd.medcalcdata":["mc1"],"application/vnd.mediastation.cdkey":["cdkey"],"application/vnd.mfer":["mwf"],"application/vnd.mfmp":["mfm"],"application/vnd.micrografx.flo":["flo"],"application/vnd.micrografx.igx":["igx"],"application/vnd.mif":["mif"],"application/vnd.mobius.daf":["daf"],"application/vnd.mobius.dis":["dis"],"application/vnd.mobius.mbk":["mbk"],"application/vnd.mobius.mqy":["mqy"],"application/vnd.mobius.msl":["msl"],"application/vnd.mobius.plc":["plc"],"application/vnd.mobius.txf":["txf"],"application/vnd.mophun.application":["mpn"],"application/vnd.mophun.certificate":["mpc"],"application/vnd.mozilla.xul+xml":["xul"],"application/vnd.ms-artgalry":["cil"],"application/vnd.ms-cab-compressed":["cab"],"application/vnd.ms-excel":["xls","xlm","xla","xlc","xlt","xlw"],"application/vnd.ms-excel.addin.macroenabled.12":["xlam"],"application/vnd.ms-excel.sheet.binary.macroenabled.12":["xlsb"],"application/vnd.ms-excel.sheet.macroenabled.12":["xlsm"],"application/vnd.ms-excel.template.macroenabled.12":["xltm"],"application/vnd.ms-fontobject":["eot"],"application/vnd.ms-htmlhelp":["chm"],"application/vnd.ms-ims":["ims"],"application/vnd.ms-lrm":["lrm"],"application/vnd.ms-officetheme":["thmx"],"application/vnd.ms-outlook":["msg"],"application/vnd.ms-pki.seccat":["cat"],"application/vnd.ms-pki.stl":["*stl"],"application/vnd.ms-powerpoint":["ppt","pps","pot"],"application/vnd.ms-powerpoint.addin.macroenabled.12":["ppam"],"application/vnd.ms-powerpoint.presentation.macroenabled.12":["pptm"],"application/vnd.ms-powerpoint.slide.macroenabled.12":["sldm"],"application/vnd.ms-powerpoint.slideshow.macroenabled.12":["ppsm"],"application/vnd.ms-powerpoint.template.macroenabled.12":["potm"],"application/vnd.ms-project":["mpp","mpt"],"application/vnd.ms-word.document.macroenabled.12":["docm"],"application/vnd.ms-word.template.macroenabled.12":["dotm"],"application/vnd.ms-works":["wps","wks","wcm","wdb"],"application/vnd.ms-wpl":["wpl"],"application/vnd.ms-xpsdocument":["xps"],"application/vnd.mseq":["mseq"],"application/vnd.musician":["mus"],"application/vnd.muvee.style":["msty"],"application/vnd.mynfc":["taglet"],"application/vnd.neurolanguage.nlu":["nlu"],"application/vnd.nitf":["ntf","nitf"],"application/vnd.noblenet-directory":["nnd"],"application/vnd.noblenet-sealer":["nns"],"application/vnd.noblenet-web":["nnw"],"application/vnd.nokia.n-gage.ac+xml":["*ac"],"application/vnd.nokia.n-gage.data":["ngdat"],"application/vnd.nokia.n-gage.symbian.install":["n-gage"],"application/vnd.nokia.radio-preset":["rpst"],"application/vnd.nokia.radio-presets":["rpss"],"application/vnd.novadigm.edm":["edm"],"application/vnd.novadigm.edx":["edx"],"application/vnd.novadigm.ext":["ext"],"application/vnd.oasis.opendocument.chart":["odc"],"application/vnd.oasis.opendocument.chart-template":["otc"],"application/vnd.oasis.opendocument.database":["odb"],"application/vnd.oasis.opendocument.formula":["odf"],"application/vnd.oasis.opendocument.formula-template":["odft"],"application/vnd.oasis.opendocument.graphics":["odg"],"application/vnd.oasis.opendocument.graphics-template":["otg"],"application/vnd.oasis.opendocument.image":["odi"],"application/vnd.oasis.opendocument.image-template":["oti"],"application/vnd.oasis.opendocument.presentation":["odp"],"application/vnd.oasis.opendocument.presentation-template":["otp"],"application/vnd.oasis.opendocument.spreadsheet":["ods"],"application/vnd.oasis.opendocument.spreadsheet-template":["ots"],"application/vnd.oasis.opendocument.text":["odt"],"application/vnd.oasis.opendocument.text-master":["odm"],"application/vnd.oasis.opendocument.text-template":["ott"],"application/vnd.oasis.opendocument.text-web":["oth"],"application/vnd.olpc-sugar":["xo"],"application/vnd.oma.dd2+xml":["dd2"],"application/vnd.openblox.game+xml":["obgx"],"application/vnd.openofficeorg.extension":["oxt"],"application/vnd.openstreetmap.data+xml":["osm"],"application/vnd.openxmlformats-officedocument.presentationml.presentation":["pptx"],"application/vnd.openxmlformats-officedocument.presentationml.slide":["sldx"],"application/vnd.openxmlformats-officedocument.presentationml.slideshow":["ppsx"],"application/vnd.openxmlformats-officedocument.presentationml.template":["potx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":["xlsx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.template":["xltx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.document":["docx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.template":["dotx"],"application/vnd.osgeo.mapguide.package":["mgp"],"application/vnd.osgi.dp":["dp"],"application/vnd.osgi.subsystem":["esa"],"application/vnd.palm":["pdb","pqa","oprc"],"application/vnd.pawaafile":["paw"],"application/vnd.pg.format":["str"],"application/vnd.pg.osasli":["ei6"],"application/vnd.picsel":["efif"],"application/vnd.pmi.widget":["wg"],"application/vnd.pocketlearn":["plf"],"application/vnd.powerbuilder6":["pbd"],"application/vnd.previewsystems.box":["box"],"application/vnd.proteus.magazine":["mgz"],"application/vnd.publishare-delta-tree":["qps"],"application/vnd.pvi.ptid1":["ptid"],"application/vnd.quark.quarkxpress":["qxd","qxt","qwd","qwt","qxl","qxb"],"application/vnd.rar":["rar"],"application/vnd.realvnc.bed":["bed"],"application/vnd.recordare.musicxml":["mxl"],"application/vnd.recordare.musicxml+xml":["musicxml"],"application/vnd.rig.cryptonote":["cryptonote"],"application/vnd.rim.cod":["cod"],"application/vnd.rn-realmedia":["rm"],"application/vnd.rn-realmedia-vbr":["rmvb"],"application/vnd.route66.link66+xml":["link66"],"application/vnd.sailingtracker.track":["st"],"application/vnd.seemail":["see"],"application/vnd.sema":["sema"],"application/vnd.semd":["semd"],"application/vnd.semf":["semf"],"application/vnd.shana.informed.formdata":["ifm"],"application/vnd.shana.informed.formtemplate":["itp"],"application/vnd.shana.informed.interchange":["iif"],"application/vnd.shana.informed.package":["ipk"],"application/vnd.simtech-mindmapper":["twd","twds"],"application/vnd.smaf":["mmf"],"application/vnd.smart.teacher":["teacher"],"application/vnd.software602.filler.form+xml":["fo"],"application/vnd.solent.sdkm+xml":["sdkm","sdkd"],"application/vnd.spotfire.dxp":["dxp"],"application/vnd.spotfire.sfs":["sfs"],"application/vnd.stardivision.calc":["sdc"],"application/vnd.stardivision.draw":["sda"],"application/vnd.stardivision.impress":["sdd"],"application/vnd.stardivision.math":["smf"],"application/vnd.stardivision.writer":["sdw","vor"],"application/vnd.stardivision.writer-global":["sgl"],"application/vnd.stepmania.package":["smzip"],"application/vnd.stepmania.stepchart":["sm"],"application/vnd.sun.wadl+xml":["wadl"],"application/vnd.sun.xml.calc":["sxc"],"application/vnd.sun.xml.calc.template":["stc"],"application/vnd.sun.xml.draw":["sxd"],"application/vnd.sun.xml.draw.template":["std"],"application/vnd.sun.xml.impress":["sxi"],"application/vnd.sun.xml.impress.template":["sti"],"application/vnd.sun.xml.math":["sxm"],"application/vnd.sun.xml.writer":["sxw"],"application/vnd.sun.xml.writer.global":["sxg"],"application/vnd.sun.xml.writer.template":["stw"],"application/vnd.sus-calendar":["sus","susp"],"application/vnd.svd":["svd"],"application/vnd.symbian.install":["sis","sisx"],"application/vnd.syncml+xml":["xsm"],"application/vnd.syncml.dm+wbxml":["bdm"],"application/vnd.syncml.dm+xml":["xdm"],"application/vnd.syncml.dmddf+xml":["ddf"],"application/vnd.tao.intent-module-archive":["tao"],"application/vnd.tcpdump.pcap":["pcap","cap","dmp"],"application/vnd.tmobile-livetv":["tmo"],"application/vnd.trid.tpt":["tpt"],"application/vnd.triscape.mxs":["mxs"],"application/vnd.trueapp":["tra"],"application/vnd.ufdl":["ufd","ufdl"],"application/vnd.uiq.theme":["utz"],"application/vnd.umajin":["umj"],"application/vnd.unity":["unityweb"],"application/vnd.uoml+xml":["uoml"],"application/vnd.vcx":["vcx"],"application/vnd.visio":["vsd","vst","vss","vsw"],"application/vnd.visionary":["vis"],"application/vnd.vsf":["vsf"],"application/vnd.wap.wbxml":["wbxml"],"application/vnd.wap.wmlc":["wmlc"],"application/vnd.wap.wmlscriptc":["wmlsc"],"application/vnd.webturbo":["wtb"],"application/vnd.wolfram.player":["nbp"],"application/vnd.wordperfect":["wpd"],"application/vnd.wqd":["wqd"],"application/vnd.wt.stf":["stf"],"application/vnd.xara":["xar"],"application/vnd.xfdl":["xfdl"],"application/vnd.yamaha.hv-dic":["hvd"],"application/vnd.yamaha.hv-script":["hvs"],"application/vnd.yamaha.hv-voice":["hvp"],"application/vnd.yamaha.openscoreformat":["osf"],"application/vnd.yamaha.openscoreformat.osfpvg+xml":["osfpvg"],"application/vnd.yamaha.smaf-audio":["saf"],"application/vnd.yamaha.smaf-phrase":["spf"],"application/vnd.yellowriver-custom-menu":["cmp"],"application/vnd.zul":["zir","zirz"],"application/vnd.zzazz.deck+xml":["zaz"],"application/x-7z-compressed":["7z"],"application/x-abiword":["abw"],"application/x-ace-compressed":["ace"],"application/x-apple-diskimage":["*dmg"],"application/x-arj":["arj"],"application/x-authorware-bin":["aab","x32","u32","vox"],"application/x-authorware-map":["aam"],"application/x-authorware-seg":["aas"],"application/x-bcpio":["bcpio"],"application/x-bdoc":["*bdoc"],"application/x-bittorrent":["torrent"],"application/x-blorb":["blb","blorb"],"application/x-bzip":["bz"],"application/x-bzip2":["bz2","boz"],"application/x-cbr":["cbr","cba","cbt","cbz","cb7"],"application/x-cdlink":["vcd"],"application/x-cfs-compressed":["cfs"],"application/x-chat":["chat"],"application/x-chess-pgn":["pgn"],"application/x-chrome-extension":["crx"],"application/x-cocoa":["cco"],"application/x-conference":["nsc"],"application/x-cpio":["cpio"],"application/x-csh":["csh"],"application/x-debian-package":["*deb","udeb"],"application/x-dgc-compressed":["dgc"],"application/x-director":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"],"application/x-doom":["wad"],"application/x-dtbncx+xml":["ncx"],"application/x-dtbook+xml":["dtb"],"application/x-dtbresource+xml":["res"],"application/x-dvi":["dvi"],"application/x-envoy":["evy"],"application/x-eva":["eva"],"application/x-font-bdf":["bdf"],"application/x-font-ghostscript":["gsf"],"application/x-font-linux-psf":["psf"],"application/x-font-pcf":["pcf"],"application/x-font-snf":["snf"],"application/x-font-type1":["pfa","pfb","pfm","afm"],"application/x-freearc":["arc"],"application/x-futuresplash":["spl"],"application/x-gca-compressed":["gca"],"application/x-glulx":["ulx"],"application/x-gnumeric":["gnumeric"],"application/x-gramps-xml":["gramps"],"application/x-gtar":["gtar"],"application/x-hdf":["hdf"],"application/x-httpd-php":["php"],"application/x-install-instructions":["install"],"application/x-iso9660-image":["*iso"],"application/x-java-archive-diff":["jardiff"],"application/x-java-jnlp-file":["jnlp"],"application/x-keepass2":["kdbx"],"application/x-latex":["latex"],"application/x-lua-bytecode":["luac"],"application/x-lzh-compressed":["lzh","lha"],"application/x-makeself":["run"],"application/x-mie":["mie"],"application/x-mobipocket-ebook":["prc","mobi"],"application/x-ms-application":["application"],"application/x-ms-shortcut":["lnk"],"application/x-ms-wmd":["wmd"],"application/x-ms-wmz":["wmz"],"application/x-ms-xbap":["xbap"],"application/x-msaccess":["mdb"],"application/x-msbinder":["obd"],"application/x-mscardfile":["crd"],"application/x-msclip":["clp"],"application/x-msdos-program":["*exe"],"application/x-msdownload":["*exe","*dll","com","bat","*msi"],"application/x-msmediaview":["mvb","m13","m14"],"application/x-msmetafile":["*wmf","*wmz","*emf","emz"],"application/x-msmoney":["mny"],"application/x-mspublisher":["pub"],"application/x-msschedule":["scd"],"application/x-msterminal":["trm"],"application/x-mswrite":["wri"],"application/x-netcdf":["nc","cdf"],"application/x-ns-proxy-autoconfig":["pac"],"application/x-nzb":["nzb"],"application/x-perl":["pl","pm"],"application/x-pilot":["*prc","*pdb"],"application/x-pkcs12":["p12","pfx"],"application/x-pkcs7-certificates":["p7b","spc"],"application/x-pkcs7-certreqresp":["p7r"],"application/x-rar-compressed":["*rar"],"application/x-redhat-package-manager":["rpm"],"application/x-research-info-systems":["ris"],"application/x-sea":["sea"],"application/x-sh":["sh"],"application/x-shar":["shar"],"application/x-shockwave-flash":["swf"],"application/x-silverlight-app":["xap"],"application/x-sql":["sql"],"application/x-stuffit":["sit"],"application/x-stuffitx":["sitx"],"application/x-subrip":["srt"],"application/x-sv4cpio":["sv4cpio"],"application/x-sv4crc":["sv4crc"],"application/x-t3vm-image":["t3"],"application/x-tads":["gam"],"application/x-tar":["tar"],"application/x-tcl":["tcl","tk"],"application/x-tex":["tex"],"application/x-tex-tfm":["tfm"],"application/x-texinfo":["texinfo","texi"],"application/x-tgif":["*obj"],"application/x-ustar":["ustar"],"application/x-virtualbox-hdd":["hdd"],"application/x-virtualbox-ova":["ova"],"application/x-virtualbox-ovf":["ovf"],"application/x-virtualbox-vbox":["vbox"],"application/x-virtualbox-vbox-extpack":["vbox-extpack"],"application/x-virtualbox-vdi":["vdi"],"application/x-virtualbox-vhd":["vhd"],"application/x-virtualbox-vmdk":["vmdk"],"application/x-wais-source":["src"],"application/x-web-app-manifest+json":["webapp"],"application/x-x509-ca-cert":["der","crt","pem"],"application/x-xfig":["fig"],"application/x-xliff+xml":["*xlf"],"application/x-xpinstall":["xpi"],"application/x-xz":["xz"],"application/x-zmachine":["z1","z2","z3","z4","z5","z6","z7","z8"],"audio/vnd.dece.audio":["uva","uvva"],"audio/vnd.digital-winds":["eol"],"audio/vnd.dra":["dra"],"audio/vnd.dts":["dts"],"audio/vnd.dts.hd":["dtshd"],"audio/vnd.lucent.voice":["lvp"],"audio/vnd.ms-playready.media.pya":["pya"],"audio/vnd.nuera.ecelp4800":["ecelp4800"],"audio/vnd.nuera.ecelp7470":["ecelp7470"],"audio/vnd.nuera.ecelp9600":["ecelp9600"],"audio/vnd.rip":["rip"],"audio/x-aac":["aac"],"audio/x-aiff":["aif","aiff","aifc"],"audio/x-caf":["caf"],"audio/x-flac":["flac"],"audio/x-m4a":["*m4a"],"audio/x-matroska":["mka"],"audio/x-mpegurl":["m3u"],"audio/x-ms-wax":["wax"],"audio/x-ms-wma":["wma"],"audio/x-pn-realaudio":["ram","ra"],"audio/x-pn-realaudio-plugin":["rmp"],"audio/x-realaudio":["*ra"],"audio/x-wav":["*wav"],"chemical/x-cdx":["cdx"],"chemical/x-cif":["cif"],"chemical/x-cmdf":["cmdf"],"chemical/x-cml":["cml"],"chemical/x-csml":["csml"],"chemical/x-xyz":["xyz"],"image/prs.btif":["btif"],"image/prs.pti":["pti"],"image/vnd.adobe.photoshop":["psd"],"image/vnd.airzip.accelerator.azv":["azv"],"image/vnd.dece.graphic":["uvi","uvvi","uvg","uvvg"],"image/vnd.djvu":["djvu","djv"],"image/vnd.dvb.subtitle":["*sub"],"image/vnd.dwg":["dwg"],"image/vnd.dxf":["dxf"],"image/vnd.fastbidsheet":["fbs"],"image/vnd.fpx":["fpx"],"image/vnd.fst":["fst"],"image/vnd.fujixerox.edmics-mmr":["mmr"],"image/vnd.fujixerox.edmics-rlc":["rlc"],"image/vnd.microsoft.icon":["ico"],"image/vnd.ms-dds":["dds"],"image/vnd.ms-modi":["mdi"],"image/vnd.ms-photo":["wdp"],"image/vnd.net-fpx":["npx"],"image/vnd.pco.b16":["b16"],"image/vnd.tencent.tap":["tap"],"image/vnd.valve.source.texture":["vtf"],"image/vnd.wap.wbmp":["wbmp"],"image/vnd.xiff":["xif"],"image/vnd.zbrush.pcx":["pcx"],"image/x-3ds":["3ds"],"image/x-cmu-raster":["ras"],"image/x-cmx":["cmx"],"image/x-freehand":["fh","fhc","fh4","fh5","fh7"],"image/x-icon":["*ico"],"image/x-jng":["jng"],"image/x-mrsid-image":["sid"],"image/x-ms-bmp":["*bmp"],"image/x-pcx":["*pcx"],"image/x-pict":["pic","pct"],"image/x-portable-anymap":["pnm"],"image/x-portable-bitmap":["pbm"],"image/x-portable-graymap":["pgm"],"image/x-portable-pixmap":["ppm"],"image/x-rgb":["rgb"],"image/x-tga":["tga"],"image/x-xbitmap":["xbm"],"image/x-xpixmap":["xpm"],"image/x-xwindowdump":["xwd"],"message/vnd.wfa.wsc":["wsc"],"model/vnd.collada+xml":["dae"],"model/vnd.dwf":["dwf"],"model/vnd.gdl":["gdl"],"model/vnd.gtw":["gtw"],"model/vnd.mts":["mts"],"model/vnd.opengex":["ogex"],"model/vnd.parasolid.transmit.binary":["x_b"],"model/vnd.parasolid.transmit.text":["x_t"],"model/vnd.usdz+zip":["usdz"],"model/vnd.valve.source.compiled-map":["bsp"],"model/vnd.vtu":["vtu"],"text/prs.lines.tag":["dsc"],"text/vnd.curl":["curl"],"text/vnd.curl.dcurl":["dcurl"],"text/vnd.curl.mcurl":["mcurl"],"text/vnd.curl.scurl":["scurl"],"text/vnd.dvb.subtitle":["sub"],"text/vnd.fly":["fly"],"text/vnd.fmi.flexstor":["flx"],"text/vnd.graphviz":["gv"],"text/vnd.in3d.3dml":["3dml"],"text/vnd.in3d.spot":["spot"],"text/vnd.sun.j2me.app-descriptor":["jad"],"text/vnd.wap.wml":["wml"],"text/vnd.wap.wmlscript":["wmls"],"text/x-asm":["s","asm"],"text/x-c":["c","cc","cxx","cpp","h","hh","dic"],"text/x-component":["htc"],"text/x-fortran":["f","for","f77","f90"],"text/x-handlebars-template":["hbs"],"text/x-java-source":["java"],"text/x-lua":["lua"],"text/x-markdown":["mkd"],"text/x-nfo":["nfo"],"text/x-opml":["opml"],"text/x-org":["*org"],"text/x-pascal":["p","pas"],"text/x-processing":["pde"],"text/x-sass":["sass"],"text/x-scss":["scss"],"text/x-setext":["etx"],"text/x-sfv":["sfv"],"text/x-suse-ymp":["ymp"],"text/x-uuencode":["uu"],"text/x-vcalendar":["vcs"],"text/x-vcard":["vcf"],"video/vnd.dece.hd":["uvh","uvvh"],"video/vnd.dece.mobile":["uvm","uvvm"],"video/vnd.dece.pd":["uvp","uvvp"],"video/vnd.dece.sd":["uvs","uvvs"],"video/vnd.dece.video":["uvv","uvvv"],"video/vnd.dvb.file":["dvb"],"video/vnd.fvt":["fvt"],"video/vnd.mpegurl":["mxu","m4u"],"video/vnd.ms-playready.media.pyv":["pyv"],"video/vnd.uvvu.mp4":["uvu","uvvu"],"video/vnd.vivo":["viv"],"video/x-f4v":["f4v"],"video/x-fli":["fli"],"video/x-flv":["flv"],"video/x-m4v":["m4v"],"video/x-matroska":["mkv","mk3d","mks"],"video/x-mng":["mng"],"video/x-ms-asf":["asf","asx"],"video/x-ms-vob":["vob"],"video/x-ms-wm":["wm"],"video/x-ms-wmv":["wmv"],"video/x-ms-wmx":["wmx"],"video/x-ms-wvx":["wvx"],"video/x-msvideo":["avi"],"video/x-sgi-movie":["movie"],"video/x-smv":["smv"],"x-conference/x-cooltalk":["ice"]};
-
-var mime = new Mime_1(standard, other);
-
-// eslint-disable-next-line import/no-extraneous-dependencies
-function getFileMimeType(filePath) {
-  const extension = getFileExt(filePath);
-  const mimeType = mime.getType(extension);
-  return mimeType;
-}
-
-const UNIX_SEP = '/';
-const WIN_SEP = '\\';
-function getFileName(filePath) {
-  if (!filePath) {
-    return '';
-  }
-
-  let indexSep = filePath.lastIndexOf(UNIX_SEP);
-
-  if (indexSep === -1) {
-    indexSep = filePath.lastIndexOf(WIN_SEP);
-  }
-
-  if (indexSep === -1) {
-    return filePath;
-  }
-
-  return filePath.slice(indexSep + 1);
-}
-
-function resolveFile(fixture, window) {
-  const {
-    filePath,
-    encoding,
-    mimeType,
-    fileName,
-    lastModified
-  } = fixture;
-  const fileMimeType = mimeType || getFileMimeType(filePath);
-  const fileEncoding = encoding || getFileEncoding(filePath);
-  const fileLastModified = lastModified || Date.now();
-  return new Cypress.Promise(resolve => getFileContent({
-    filePath,
-    fileContent: fixture.fileContent,
-    fileEncoding
-  }).then(fileContent => getFileBlobAsync({
-    fileContent,
-    fileName,
-    mimeType: fileMimeType,
-    encoding: fileEncoding,
-    lastModified: fileLastModified,
-    window
-  })).then(resolve));
-}
-
-function getFixtureInfo(fixtureInput) {
-  if (typeof fixtureInput === 'string') {
-    return {
-      filePath: fixtureInput,
-      encoding: '',
-      mimeType: '',
-      fileName: getFileName(fixtureInput)
-    };
-  }
-
-  return {
-    filePath: fixtureInput.filePath,
-    encoding: fixtureInput.encoding || '',
-    mimeType: fixtureInput.mimeType || '',
-    fileName: fixtureInput.fileName || getFileName(fixtureInput.filePath),
-    fileContent: fixtureInput.fileContent,
-    lastModified: fixtureInput.lastModified
-  };
-}
-
-function getForceValue(subject) {
-  return isManualEventHandling() || !isElementVisible(subject) || isShadowElement(subject);
-}
-
-const ERR_TYPES = {
-  INVALID_SUBJECT_TYPE: {
-    message: '"subjectType" is not valid',
-    tip: 'Please look into docs to find supported "subjectType" values'
-  },
-  INVALID_FORCE: {
-    message: '"force" is not valid',
-    tip: 'Please look into docs to find supported "force" values'
-  },
-  INVALID_ALLOW_EMPTY: {
-    message: '"allowEmpty" is not valid',
-    tip: 'Please look into docs to find supported "allowEmpty" values'
-  },
-  INVALID_FILE_ENCODING: {
-    message: '"file encoding" is not valid',
-    tip: 'Please look into docs to find supported "encoding" values'
-  },
-  INVALID_FILE_PATH: {
-    message: '"filePath" is not valid',
-    tip: 'Please look into docs to find supported "filePath" values'
-  },
-  INVALID_MIME_TYPE: {
-    message: '"mimeType" is not valid',
-    tip: 'Please look into docs to find supported "mimeType" values'
-  },
-  INVALID_FILE: {
-    message: 'given fixture file is empty',
-    tip: 'Please make sure you provide correct file or explicitly set "allowEmpty" to true'
-  },
-  INVALID_LAST_MODIFIED: {
-    message: '"lastModified" is not valid"',
-    tip: 'Please make sure you are passing a "number" `Date.now()` or `new Date().getTime()'
-  },
-  MISSING_FILE_NAME_OR_PATH: {
-    message: 'missing "filePath" or "fileName"',
-    tip: 'Please make sure you are passing either "filePath" or "fileName"'
-  }
-};
-class InternalError extends Error {
-  constructor(errorType, ...params) {
-    super(...params);
-
-    if (Error.captureStackTrace) {
-      Error.captureStackTrace(this, InternalError);
-    }
-
-    this.name = '[cypress-file-upload error]';
-    this.message = `${errorType.message}.\n${errorType.tip}`;
-  }
-
-}
-
-const ALLOWED_ENCODINGS = Object.values(ENCODING);
-function validateFixtures(fixture) {
-  const {
-    filePath,
-    fileName,
-    encoding,
-    mimeType,
-    fileContent,
-    lastModified
-  } = fixture;
-
-  if (encoding && !ALLOWED_ENCODINGS.includes(encoding)) {
-    throw new InternalError(ERR_TYPES.INVALID_FILE_ENCODING);
-  }
-
-  if (typeof filePath !== 'string' && !fileContent) {
-    throw new InternalError(ERR_TYPES.INVALID_FILE_PATH);
-  }
-
-  if (typeof mimeType !== 'string') {
-    throw new InternalError(ERR_TYPES.INVALID_MIME_TYPE);
-  }
-
-  if (!filePath && !fileName) {
-    throw new InternalError(ERR_TYPES.MISSING_FILE_NAME_OR_PATH);
-  }
-
-  if (lastModified && typeof lastModified !== 'number') {
-    throw new InternalError(ERR_TYPES.INVALID_LAST_MODIFIED);
-  }
-
-  return true;
-}
-
-var validateFile = ((file, allowEmpty) => {
-  if (!allowEmpty) {
-    const {
-      size
-    } = file;
-
-    if (size === 0) {
-      throw new InternalError(ERR_TYPES.INVALID_FILE);
-    }
-  }
-
-  return true;
-});
-
-var validateOptions = (({
-  subjectType,
-  force,
-  allowEmpty
-}) => {
-  if (Object.values(SUBJECT_TYPE).indexOf(subjectType) === -1) {
-    throw new InternalError(ERR_TYPES.INVALID_SUBJECT_TYPE);
-  }
-
-  if (typeof force !== 'boolean') {
-    throw new InternalError(ERR_TYPES.INVALID_FORCE);
-  }
-
-  if (typeof allowEmpty !== 'boolean') {
-    throw new InternalError(ERR_TYPES.INVALID_ALLOW_EMPTY);
-  }
-
-  return true;
-});
-
-function _extends() {
-  _extends = Object.assign || function (target) {
-    for (var i = 1; i < arguments.length; i++) {
-      var source = arguments[i];
-
-      for (var key in source) {
-        if (Object.prototype.hasOwnProperty.call(source, key)) {
-          target[key] = source[key];
-        }
-      }
-    }
-
-    return target;
-  };
-
-  return _extends.apply(this, arguments);
-}
-
-function merge(target = {}, source = {}) {
-  return _extends({}, source, target);
-}
-
-function attachFile(subject, fixtureOrFixtureArray, processingOptions) {
-  const {
-    subjectType,
-    force,
-    allowEmpty
-  } = merge(processingOptions, DEFAULT_PROCESSING_OPTIONS);
-  validateOptions({
-    subjectType,
-    force,
-    allowEmpty
-  });
-  const fixturesArray = Array.isArray(fixtureOrFixtureArray) ? fixtureOrFixtureArray : [fixtureOrFixtureArray];
-  const fixtures = fixturesArray.map(getFixtureInfo).filter(validateFixtures);
-  Cypress.cy.window({
-    log: false
-  }).then(window => {
-    const forceValue = force || getForceValue(subject);
-    Cypress.Promise.all(fixtures.map(f => resolveFile(f, window))) // resolve files
-    .then(files => files.filter(f => validateFile(f, allowEmpty))) // error if any of the file contents are invalid
-    .then(files => {
-      attachFileToElement(subject, {
-        files,
-        subjectType,
-        force: forceValue,
-        window
-      });
-      return files;
-    }).then(files => Cypress.log({
-      name: 'attachFile',
-      displayName: 'FILE',
-      message: files.reduce((acc, f) => `${acc.length > 0 ? `${acc}, ` : acc}${f.name}`, '')
-    }));
-  });
-  return Cypress.cy.wrap(subject, {
-    log: false
-  });
-}
-
-const initialize = () => {
-  Cypress.Commands.add('attachFile', {
-    prevSubject: true
-  }, attachFile);
-};
-
-initialize();
-//# sourceMappingURL=bundle.js.map
diff --git a/node_modules/cypress-file-upload/dist/bundle.js.map b/node_modules/cypress-file-upload/dist/bundle.js.map
deleted file mode 100644
index b3686e5d8..000000000
--- a/node_modules/cypress-file-upload/dist/bundle.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"bundle.js","sources":["../src/constants.js","../lib/dom/dispatchEvent.js","../lib/dom/isElementVisible.js","../lib/dom/isShadowElement.js","../lib/browser/isManualEventHandling.js","../lib/browser/isBrowserFirefox.js","../src/helpers/attachFileToElement.js","../lib/file/constants.js","../lib/file/common.js","../lib/file/getFileExt.js","../lib/file/getFileBlobAsync.js","../lib/file/getFileContent.js","../lib/file/getFileEncoding.js","../node_modules/mime/Mime.js","../node_modules/mime/types/standard.js","../node_modules/mime/types/other.js","../node_modules/mime/index.js","../lib/file/getFileMimeType.js","../lib/file/getFileName.js","../lib/file/resolveFile.js","../src/helpers/getFixtureInfo.js","../src/helpers/getForceValue.js","../src/error.js","../src/validators/validateFixture.js","../src/validators/validateFile.js","../src/validators/validateOptions.js","../lib/object/merge.js","../src/attachFile.js","../src/index.js"],"sourcesContent":["export const DEFAULT_PROCESSING_OPTIONS = Object.freeze({\n  subjectType: 'input',\n  force: false,\n  allowEmpty: false,\n});\n\nexport const SUBJECT_TYPE = Object.freeze({\n  INPUT: 'input',\n  DRAG_N_DROP: 'drag-n-drop',\n});\n\nexport const EVENTS_BY_SUBJECT_TYPE = {\n  [SUBJECT_TYPE.INPUT]: ['change'],\n  /**\n   * @see https://developer.mozilla.org/en-US/docs/Web/API/DragEvent\n   */\n  [SUBJECT_TYPE.DRAG_N_DROP]: ['dragstart', 'drag', 'dragenter', 'drop', 'dragleave', 'dragend'],\n};\n","/**\n * @description dispatches custom event with dataTransfer object provided\n *\n * @param {HTMLElement} target\n * @param {string} event\n * @param {DataTransfer} dataTransfer\n */\nexport default function dispatchEvent(target, event, dataTransfer) {\n  const eventPayload = {\n    bubbles: true,\n    cancelable: true,\n    detail: dataTransfer,\n  };\n\n  try {\n    const e = new CustomEvent(event, eventPayload);\n    Object.assign(e, { dataTransfer });\n\n    target.dispatchEvent(e);\n  } catch (e) {\n    // make sure event triggering won't break if subject element is not visible or in DOM anymore\n  }\n}\n","/**\n * @description determines if element is visible in DOM\n *\n * @param {Cypress.Subject} element\n * @returns {Boolean}\n */\nexport default function isElementVisible(element) {\n  if (!element) {\n    throw new Error('Element cannot be empty');\n  }\n\n  /* running isVisible command on detached element throws an error */\n  return Cypress.dom.isAttached(element) && Cypress.dom.isVisible(element);\n}\n","/**\n * @description determines if element is visible in DOM\n *\n * @param {Cypress.Subject} element\n * @returns {Boolean}\n */\nexport default function isShadowElement(element) {\n  if (!element) {\n    throw new Error('Element cannot be empty');\n  }\n\n  return Cypress.dom.isDetached(element);\n}\n","const BROWSER_CHROME = 'chrome';\n\nexport default function isManualEventHandling() {\n  const { name, majorVersion } = Cypress.browser;\n\n  if (name === BROWSER_CHROME && majorVersion < 73) {\n    /**\n     * Chrome <73 triggers 'change' event automatically\n     * https://github.com/abramenal/cypress-file-upload/issues/34\n     */\n    return false;\n  }\n\n  return true;\n}\n","const BROWSER_FIREFOX = 'firefox';\n\nexport default function isBrowserFirefox() {\n  const { name } = Cypress.browser;\n\n  return name === BROWSER_FIREFOX;\n}\n","import { dispatchEvent } from '../../lib/dom';\nimport { EVENTS_BY_SUBJECT_TYPE, SUBJECT_TYPE } from '../constants';\nimport { isBrowserFirefox } from '../../lib/browser';\n\nfunction dispatchEvents(element, events, dataTransfer) {\n  events.forEach(event => {\n    dispatchEvent(element, event, dataTransfer);\n  });\n}\n\nfunction getEventsBySubjectType(subjectType) {\n  const events = EVENTS_BY_SUBJECT_TYPE[subjectType];\n\n  /**\n   * @see https://github.com/abramenal/cypress-file-upload/issues/293\n   */\n  if (subjectType === SUBJECT_TYPE.DRAG_N_DROP && isBrowserFirefox()) {\n    events.push('change');\n  }\n\n  return events;\n}\n\nexport default function attachFileToElement(subject, { files, subjectType, force, window }) {\n  const dataTransfer = new window.DataTransfer();\n  files.forEach(f => dataTransfer.items.add(f));\n\n  if (subjectType === SUBJECT_TYPE.INPUT) {\n    const inputElement = subject[0];\n    inputElement.files = dataTransfer.files;\n\n    if (force) {\n      dispatchEvents(inputElement, getEventsBySubjectType(subjectType), dataTransfer);\n    }\n  } else if (subjectType === SUBJECT_TYPE.DRAG_N_DROP) {\n    const inputElements = subject[0].querySelectorAll('input[type=\"file\"]');\n\n    /**\n     * Try to find underlying file input element, as likely drag-n-drop component uses it internally\n     * Otherwise dispatch all events on subject element\n     */\n    if (inputElements.length === 1) {\n      const inputElement = inputElements[0];\n      inputElement.files = dataTransfer.files;\n\n      if (force) {\n        dispatchEvents(inputElement, getEventsBySubjectType(subjectType), dataTransfer);\n      }\n    } else {\n      const inputElement = subject[0];\n      inputElement.files = dataTransfer.files;\n\n      if (force) {\n        dispatchEvents(inputElement, getEventsBySubjectType(subjectType), dataTransfer);\n      }\n    }\n  }\n}\n","export const ENCODING = Object.freeze({\n  ASCII: 'ascii',\n  BASE64: 'base64',\n  BINARY: 'binary',\n  HEX: 'hex',\n  LATIN1: 'latin1',\n  UTF8: 'utf8',\n  UTF_8: 'utf-8',\n  UCS2: 'ucs2',\n  UCS_2: 'ucs-2',\n  UTF16LE: 'utf16le',\n  UTF_16LE: 'utf-16le',\n});\n\nexport const FILE_EXTENSION = Object.freeze({\n  JSON: 'json',\n  JS: 'js',\n  COFFEE: 'coffee',\n  HTML: 'html',\n  TXT: 'txt',\n  CSV: 'csv',\n  PNG: 'png',\n  JPG: 'jpg',\n  JPEG: 'jpeg',\n  GIF: 'gif',\n  TIF: 'tif',\n  TIFF: 'tiff',\n  ZIP: 'zip',\n  PDF: 'pdf',\n  VCF: 'vcf',\n  SVG: 'svg',\n  XLS: 'xls',\n  XLSX: 'xlsx',\n  DOC: 'doc',\n  DOCX: 'docx',\n  MP3: 'mp3',\n});\n","export const wrapBlob = blob => {\n  // Cypress version 5 assigns a function with a compatibility warning\n  // to blob.then, but that makes the Blob actually thenable. We have\n  // to remove that to Promise.resolve not treat it as thenable.\n  if (blob instanceof Cypress.Promise) {\n    return blob;\n  }\n\n  // eslint-disable-next-line no-param-reassign\n  delete blob.then;\n  return Cypress.Promise.resolve(blob);\n};\n\nexport default { wrapBlob };\n","export default function getFileExt(filePath) {\n  if (!filePath) {\n    return '';\n  }\n\n  const pos = filePath.lastIndexOf('.');\n\n  if (pos === -1) {\n    return '';\n  }\n\n  return filePath.slice(pos + 1);\n}\n","import { ENCODING, FILE_EXTENSION } from './constants';\n\nimport { wrapBlob } from './common';\nimport getFileExt from './getFileExt';\n\nconst ENCODING_TO_BLOB_GETTER = {\n  [ENCODING.ASCII]: fileContent => Cypress.Promise.resolve(fileContent),\n  [ENCODING.BASE64]: (fileContent, mimeType) => wrapBlob(Cypress.Blob.base64StringToBlob(fileContent, mimeType)),\n  [ENCODING.BINARY]: (fileContent, mimeType) => wrapBlob(Cypress.Blob.binaryStringToBlob(fileContent, mimeType)),\n  [ENCODING.HEX]: fileContent => Cypress.Promise.resolve(fileContent),\n  [ENCODING.LATIN1]: fileContent => Cypress.Promise.resolve(fileContent),\n  [ENCODING.UTF8]: fileContent => Cypress.Promise.resolve(fileContent),\n  [ENCODING.UTF_8]: fileContent => Cypress.Promise.resolve(fileContent),\n  [ENCODING.UCS2]: fileContent => Cypress.Promise.resolve(fileContent),\n  [ENCODING.UCS_2]: fileContent => Cypress.Promise.resolve(fileContent),\n  [ENCODING.UTF16LE]: fileContent => Cypress.Promise.resolve(fileContent),\n  [ENCODING.UTF_16LE]: fileContent => Cypress.Promise.resolve(fileContent),\n};\n\nexport default function getFileBlobAsync({ fileName, fileContent, mimeType, encoding, window, lastModified }) {\n  const getBlob = ENCODING_TO_BLOB_GETTER[encoding];\n\n  return getBlob(fileContent, mimeType).then(blob => {\n    let blobContent = blob;\n\n    // https://github.com/abramenal/cypress-file-upload/issues/175\n    if (getFileExt(fileName) === FILE_EXTENSION.JSON) {\n      blobContent = JSON.stringify(fileContent, null, 2);\n    }\n\n    // we must use the file constructor from the subject window so this check `file instanceof File`, can pass\n    const file = new window.File([blobContent], fileName, { type: mimeType, lastModified });\n    return file;\n  });\n}\n","import { wrapBlob } from './common';\n\nexport default function getFileContent({ filePath, fileContent, fileEncoding }) {\n  // allows users to provide file content.\n  if (fileContent) {\n    return wrapBlob(fileContent);\n  }\n\n  return Cypress.cy.fixture(filePath, fileEncoding);\n}\n","import { ENCODING, FILE_EXTENSION } from './constants';\nimport getFileExt from './getFileExt';\n\n/*\n * Copied from https://github.com/cypress-io/cypress/blob/develop/packages/server/lib/fixture.coffee#L104\n */\nconst EXTENSION_TO_ENCODING = {\n  [FILE_EXTENSION.JSON]: ENCODING.UTF8,\n  [FILE_EXTENSION.JS]: ENCODING.UTF8,\n  [FILE_EXTENSION.COFFEE]: ENCODING.UTF8,\n  [FILE_EXTENSION.HTML]: ENCODING.UTF8,\n  [FILE_EXTENSION.TXT]: ENCODING.UTF8,\n  [FILE_EXTENSION.CSV]: ENCODING.UTF8,\n  [FILE_EXTENSION.PNG]: ENCODING.BASE64,\n  [FILE_EXTENSION.JPG]: ENCODING.BASE64,\n  [FILE_EXTENSION.JPEG]: ENCODING.BASE64,\n  [FILE_EXTENSION.GIF]: ENCODING.BASE64,\n  [FILE_EXTENSION.TIF]: ENCODING.BASE64,\n  [FILE_EXTENSION.TIFF]: ENCODING.BASE64,\n  [FILE_EXTENSION.ZIP]: ENCODING.BASE64,\n\n  /*\n   * Other extensions that are not supported by cy.fixture by default:\n   */\n  [FILE_EXTENSION.PDF]: ENCODING.UTF8,\n  [FILE_EXTENSION.VCF]: ENCODING.UTF8,\n  [FILE_EXTENSION.SVG]: ENCODING.UTF8,\n  [FILE_EXTENSION.XLS]: ENCODING.BINARY,\n  [FILE_EXTENSION.XLSX]: ENCODING.BINARY,\n  [FILE_EXTENSION.DOC]: ENCODING.BINARY,\n  [FILE_EXTENSION.DOCX]: ENCODING.BINARY,\n  [FILE_EXTENSION.MP3]: ENCODING.BINARY,\n};\n\nconst DEFAULT_ENCODING = ENCODING.UTF8;\n\nexport default function getFileEncoding(filePath) {\n  const extension = getFileExt(filePath);\n  const encoding = EXTENSION_TO_ENCODING[extension];\n\n  return encoding || DEFAULT_ENCODING;\n}\n","'use strict';\n\n/**\n * @param typeMap [Object] Map of MIME type -> Array[extensions]\n * @param ...\n */\nfunction Mime() {\n  this._types = Object.create(null);\n  this._extensions = Object.create(null);\n\n  for (let i = 0; i < arguments.length; i++) {\n    this.define(arguments[i]);\n  }\n\n  this.define = this.define.bind(this);\n  this.getType = this.getType.bind(this);\n  this.getExtension = this.getExtension.bind(this);\n}\n\n/**\n * Define mimetype -> extension mappings.  Each key is a mime-type that maps\n * to an array of extensions associated with the type.  The first extension is\n * used as the default extension for the type.\n *\n * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']});\n *\n * If a type declares an extension that has already been defined, an error will\n * be thrown.  To suppress this error and force the extension to be associated\n * with the new type, pass `force`=true.  Alternatively, you may prefix the\n * extension with \"*\" to map the type to extension, without mapping the\n * extension to the type.\n *\n * e.g. mime.define({'audio/wav', ['wav']}, {'audio/x-wav', ['*wav']});\n *\n *\n * @param map (Object) type definitions\n * @param force (Boolean) if true, force overriding of existing definitions\n */\nMime.prototype.define = function(typeMap, force) {\n  for (let type in typeMap) {\n    let extensions = typeMap[type].map(function(t) {\n      return t.toLowerCase();\n    });\n    type = type.toLowerCase();\n\n    for (let i = 0; i < extensions.length; i++) {\n      const ext = extensions[i];\n\n      // '*' prefix = not the preferred type for this extension.  So fixup the\n      // extension, and skip it.\n      if (ext[0] === '*') {\n        continue;\n      }\n\n      if (!force && (ext in this._types)) {\n        throw new Error(\n          'Attempt to change mapping for \"' + ext +\n          '\" extension from \"' + this._types[ext] + '\" to \"' + type +\n          '\". Pass `force=true` to allow this, otherwise remove \"' + ext +\n          '\" from the list of extensions for \"' + type + '\".'\n        );\n      }\n\n      this._types[ext] = type;\n    }\n\n    // Use first extension as default\n    if (force || !this._extensions[type]) {\n      const ext = extensions[0];\n      this._extensions[type] = (ext[0] !== '*') ? ext : ext.substr(1);\n    }\n  }\n};\n\n/**\n * Lookup a mime type based on extension\n */\nMime.prototype.getType = function(path) {\n  path = String(path);\n  let last = path.replace(/^.*[/\\\\]/, '').toLowerCase();\n  let ext = last.replace(/^.*\\./, '').toLowerCase();\n\n  let hasPath = last.length < path.length;\n  let hasDot = ext.length < last.length - 1;\n\n  return (hasDot || !hasPath) && this._types[ext] || null;\n};\n\n/**\n * Return file extension associated with a mime type\n */\nMime.prototype.getExtension = function(type) {\n  type = /^\\s*([^;\\s]*)/.test(type) && RegExp.$1;\n  return type && this._extensions[type.toLowerCase()] || null;\n};\n\nmodule.exports = Mime;\n","module.exports = {\"application/andrew-inset\":[\"ez\"],\"application/applixware\":[\"aw\"],\"application/atom+xml\":[\"atom\"],\"application/atomcat+xml\":[\"atomcat\"],\"application/atomdeleted+xml\":[\"atomdeleted\"],\"application/atomsvc+xml\":[\"atomsvc\"],\"application/atsc-dwd+xml\":[\"dwd\"],\"application/atsc-held+xml\":[\"held\"],\"application/atsc-rsat+xml\":[\"rsat\"],\"application/bdoc\":[\"bdoc\"],\"application/calendar+xml\":[\"xcs\"],\"application/ccxml+xml\":[\"ccxml\"],\"application/cdfx+xml\":[\"cdfx\"],\"application/cdmi-capability\":[\"cdmia\"],\"application/cdmi-container\":[\"cdmic\"],\"application/cdmi-domain\":[\"cdmid\"],\"application/cdmi-object\":[\"cdmio\"],\"application/cdmi-queue\":[\"cdmiq\"],\"application/cu-seeme\":[\"cu\"],\"application/dash+xml\":[\"mpd\"],\"application/davmount+xml\":[\"davmount\"],\"application/docbook+xml\":[\"dbk\"],\"application/dssc+der\":[\"dssc\"],\"application/dssc+xml\":[\"xdssc\"],\"application/ecmascript\":[\"ecma\",\"es\"],\"application/emma+xml\":[\"emma\"],\"application/emotionml+xml\":[\"emotionml\"],\"application/epub+zip\":[\"epub\"],\"application/exi\":[\"exi\"],\"application/fdt+xml\":[\"fdt\"],\"application/font-tdpfr\":[\"pfr\"],\"application/geo+json\":[\"geojson\"],\"application/gml+xml\":[\"gml\"],\"application/gpx+xml\":[\"gpx\"],\"application/gxf\":[\"gxf\"],\"application/gzip\":[\"gz\"],\"application/hjson\":[\"hjson\"],\"application/hyperstudio\":[\"stk\"],\"application/inkml+xml\":[\"ink\",\"inkml\"],\"application/ipfix\":[\"ipfix\"],\"application/its+xml\":[\"its\"],\"application/java-archive\":[\"jar\",\"war\",\"ear\"],\"application/java-serialized-object\":[\"ser\"],\"application/java-vm\":[\"class\"],\"application/javascript\":[\"js\",\"mjs\"],\"application/json\":[\"json\",\"map\"],\"application/json5\":[\"json5\"],\"application/jsonml+json\":[\"jsonml\"],\"application/ld+json\":[\"jsonld\"],\"application/lgr+xml\":[\"lgr\"],\"application/lost+xml\":[\"lostxml\"],\"application/mac-binhex40\":[\"hqx\"],\"application/mac-compactpro\":[\"cpt\"],\"application/mads+xml\":[\"mads\"],\"application/manifest+json\":[\"webmanifest\"],\"application/marc\":[\"mrc\"],\"application/marcxml+xml\":[\"mrcx\"],\"application/mathematica\":[\"ma\",\"nb\",\"mb\"],\"application/mathml+xml\":[\"mathml\"],\"application/mbox\":[\"mbox\"],\"application/mediaservercontrol+xml\":[\"mscml\"],\"application/metalink+xml\":[\"metalink\"],\"application/metalink4+xml\":[\"meta4\"],\"application/mets+xml\":[\"mets\"],\"application/mmt-aei+xml\":[\"maei\"],\"application/mmt-usd+xml\":[\"musd\"],\"application/mods+xml\":[\"mods\"],\"application/mp21\":[\"m21\",\"mp21\"],\"application/mp4\":[\"mp4s\",\"m4p\"],\"application/mrb-consumer+xml\":[\"*xdf\"],\"application/mrb-publish+xml\":[\"*xdf\"],\"application/msword\":[\"doc\",\"dot\"],\"application/mxf\":[\"mxf\"],\"application/n-quads\":[\"nq\"],\"application/n-triples\":[\"nt\"],\"application/node\":[\"cjs\"],\"application/octet-stream\":[\"bin\",\"dms\",\"lrf\",\"mar\",\"so\",\"dist\",\"distz\",\"pkg\",\"bpk\",\"dump\",\"elc\",\"deploy\",\"exe\",\"dll\",\"deb\",\"dmg\",\"iso\",\"img\",\"msi\",\"msp\",\"msm\",\"buffer\"],\"application/oda\":[\"oda\"],\"application/oebps-package+xml\":[\"opf\"],\"application/ogg\":[\"ogx\"],\"application/omdoc+xml\":[\"omdoc\"],\"application/onenote\":[\"onetoc\",\"onetoc2\",\"onetmp\",\"onepkg\"],\"application/oxps\":[\"oxps\"],\"application/p2p-overlay+xml\":[\"relo\"],\"application/patch-ops-error+xml\":[\"*xer\"],\"application/pdf\":[\"pdf\"],\"application/pgp-encrypted\":[\"pgp\"],\"application/pgp-signature\":[\"asc\",\"sig\"],\"application/pics-rules\":[\"prf\"],\"application/pkcs10\":[\"p10\"],\"application/pkcs7-mime\":[\"p7m\",\"p7c\"],\"application/pkcs7-signature\":[\"p7s\"],\"application/pkcs8\":[\"p8\"],\"application/pkix-attr-cert\":[\"ac\"],\"application/pkix-cert\":[\"cer\"],\"application/pkix-crl\":[\"crl\"],\"application/pkix-pkipath\":[\"pkipath\"],\"application/pkixcmp\":[\"pki\"],\"application/pls+xml\":[\"pls\"],\"application/postscript\":[\"ai\",\"eps\",\"ps\"],\"application/provenance+xml\":[\"provx\"],\"application/pskc+xml\":[\"pskcxml\"],\"application/raml+yaml\":[\"raml\"],\"application/rdf+xml\":[\"rdf\",\"owl\"],\"application/reginfo+xml\":[\"rif\"],\"application/relax-ng-compact-syntax\":[\"rnc\"],\"application/resource-lists+xml\":[\"rl\"],\"application/resource-lists-diff+xml\":[\"rld\"],\"application/rls-services+xml\":[\"rs\"],\"application/route-apd+xml\":[\"rapd\"],\"application/route-s-tsid+xml\":[\"sls\"],\"application/route-usd+xml\":[\"rusd\"],\"application/rpki-ghostbusters\":[\"gbr\"],\"application/rpki-manifest\":[\"mft\"],\"application/rpki-roa\":[\"roa\"],\"application/rsd+xml\":[\"rsd\"],\"application/rss+xml\":[\"rss\"],\"application/rtf\":[\"rtf\"],\"application/sbml+xml\":[\"sbml\"],\"application/scvp-cv-request\":[\"scq\"],\"application/scvp-cv-response\":[\"scs\"],\"application/scvp-vp-request\":[\"spq\"],\"application/scvp-vp-response\":[\"spp\"],\"application/sdp\":[\"sdp\"],\"application/senml+xml\":[\"senmlx\"],\"application/sensml+xml\":[\"sensmlx\"],\"application/set-payment-initiation\":[\"setpay\"],\"application/set-registration-initiation\":[\"setreg\"],\"application/shf+xml\":[\"shf\"],\"application/sieve\":[\"siv\",\"sieve\"],\"application/smil+xml\":[\"smi\",\"smil\"],\"application/sparql-query\":[\"rq\"],\"application/sparql-results+xml\":[\"srx\"],\"application/srgs\":[\"gram\"],\"application/srgs+xml\":[\"grxml\"],\"application/sru+xml\":[\"sru\"],\"application/ssdl+xml\":[\"ssdl\"],\"application/ssml+xml\":[\"ssml\"],\"application/swid+xml\":[\"swidtag\"],\"application/tei+xml\":[\"tei\",\"teicorpus\"],\"application/thraud+xml\":[\"tfi\"],\"application/timestamped-data\":[\"tsd\"],\"application/toml\":[\"toml\"],\"application/ttml+xml\":[\"ttml\"],\"application/ubjson\":[\"ubj\"],\"application/urc-ressheet+xml\":[\"rsheet\"],\"application/urc-targetdesc+xml\":[\"td\"],\"application/voicexml+xml\":[\"vxml\"],\"application/wasm\":[\"wasm\"],\"application/widget\":[\"wgt\"],\"application/winhlp\":[\"hlp\"],\"application/wsdl+xml\":[\"wsdl\"],\"application/wspolicy+xml\":[\"wspolicy\"],\"application/xaml+xml\":[\"xaml\"],\"application/xcap-att+xml\":[\"xav\"],\"application/xcap-caps+xml\":[\"xca\"],\"application/xcap-diff+xml\":[\"xdf\"],\"application/xcap-el+xml\":[\"xel\"],\"application/xcap-error+xml\":[\"xer\"],\"application/xcap-ns+xml\":[\"xns\"],\"application/xenc+xml\":[\"xenc\"],\"application/xhtml+xml\":[\"xhtml\",\"xht\"],\"application/xliff+xml\":[\"xlf\"],\"application/xml\":[\"xml\",\"xsl\",\"xsd\",\"rng\"],\"application/xml-dtd\":[\"dtd\"],\"application/xop+xml\":[\"xop\"],\"application/xproc+xml\":[\"xpl\"],\"application/xslt+xml\":[\"*xsl\",\"xslt\"],\"application/xspf+xml\":[\"xspf\"],\"application/xv+xml\":[\"mxml\",\"xhvml\",\"xvml\",\"xvm\"],\"application/yang\":[\"yang\"],\"application/yin+xml\":[\"yin\"],\"application/zip\":[\"zip\"],\"audio/3gpp\":[\"*3gpp\"],\"audio/adpcm\":[\"adp\"],\"audio/basic\":[\"au\",\"snd\"],\"audio/midi\":[\"mid\",\"midi\",\"kar\",\"rmi\"],\"audio/mobile-xmf\":[\"mxmf\"],\"audio/mp3\":[\"*mp3\"],\"audio/mp4\":[\"m4a\",\"mp4a\"],\"audio/mpeg\":[\"mpga\",\"mp2\",\"mp2a\",\"mp3\",\"m2a\",\"m3a\"],\"audio/ogg\":[\"oga\",\"ogg\",\"spx\"],\"audio/s3m\":[\"s3m\"],\"audio/silk\":[\"sil\"],\"audio/wav\":[\"wav\"],\"audio/wave\":[\"*wav\"],\"audio/webm\":[\"weba\"],\"audio/xm\":[\"xm\"],\"font/collection\":[\"ttc\"],\"font/otf\":[\"otf\"],\"font/ttf\":[\"ttf\"],\"font/woff\":[\"woff\"],\"font/woff2\":[\"woff2\"],\"image/aces\":[\"exr\"],\"image/apng\":[\"apng\"],\"image/avif\":[\"avif\"],\"image/bmp\":[\"bmp\"],\"image/cgm\":[\"cgm\"],\"image/dicom-rle\":[\"drle\"],\"image/emf\":[\"emf\"],\"image/fits\":[\"fits\"],\"image/g3fax\":[\"g3\"],\"image/gif\":[\"gif\"],\"image/heic\":[\"heic\"],\"image/heic-sequence\":[\"heics\"],\"image/heif\":[\"heif\"],\"image/heif-sequence\":[\"heifs\"],\"image/hej2k\":[\"hej2\"],\"image/hsj2\":[\"hsj2\"],\"image/ief\":[\"ief\"],\"image/jls\":[\"jls\"],\"image/jp2\":[\"jp2\",\"jpg2\"],\"image/jpeg\":[\"jpeg\",\"jpg\",\"jpe\"],\"image/jph\":[\"jph\"],\"image/jphc\":[\"jhc\"],\"image/jpm\":[\"jpm\"],\"image/jpx\":[\"jpx\",\"jpf\"],\"image/jxr\":[\"jxr\"],\"image/jxra\":[\"jxra\"],\"image/jxrs\":[\"jxrs\"],\"image/jxs\":[\"jxs\"],\"image/jxsc\":[\"jxsc\"],\"image/jxsi\":[\"jxsi\"],\"image/jxss\":[\"jxss\"],\"image/ktx\":[\"ktx\"],\"image/ktx2\":[\"ktx2\"],\"image/png\":[\"png\"],\"image/sgi\":[\"sgi\"],\"image/svg+xml\":[\"svg\",\"svgz\"],\"image/t38\":[\"t38\"],\"image/tiff\":[\"tif\",\"tiff\"],\"image/tiff-fx\":[\"tfx\"],\"image/webp\":[\"webp\"],\"image/wmf\":[\"wmf\"],\"message/disposition-notification\":[\"disposition-notification\"],\"message/global\":[\"u8msg\"],\"message/global-delivery-status\":[\"u8dsn\"],\"message/global-disposition-notification\":[\"u8mdn\"],\"message/global-headers\":[\"u8hdr\"],\"message/rfc822\":[\"eml\",\"mime\"],\"model/3mf\":[\"3mf\"],\"model/gltf+json\":[\"gltf\"],\"model/gltf-binary\":[\"glb\"],\"model/iges\":[\"igs\",\"iges\"],\"model/mesh\":[\"msh\",\"mesh\",\"silo\"],\"model/mtl\":[\"mtl\"],\"model/obj\":[\"obj\"],\"model/stl\":[\"stl\"],\"model/vrml\":[\"wrl\",\"vrml\"],\"model/x3d+binary\":[\"*x3db\",\"x3dbz\"],\"model/x3d+fastinfoset\":[\"x3db\"],\"model/x3d+vrml\":[\"*x3dv\",\"x3dvz\"],\"model/x3d+xml\":[\"x3d\",\"x3dz\"],\"model/x3d-vrml\":[\"x3dv\"],\"text/cache-manifest\":[\"appcache\",\"manifest\"],\"text/calendar\":[\"ics\",\"ifb\"],\"text/coffeescript\":[\"coffee\",\"litcoffee\"],\"text/css\":[\"css\"],\"text/csv\":[\"csv\"],\"text/html\":[\"html\",\"htm\",\"shtml\"],\"text/jade\":[\"jade\"],\"text/jsx\":[\"jsx\"],\"text/less\":[\"less\"],\"text/markdown\":[\"markdown\",\"md\"],\"text/mathml\":[\"mml\"],\"text/mdx\":[\"mdx\"],\"text/n3\":[\"n3\"],\"text/plain\":[\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\",\"in\",\"ini\"],\"text/richtext\":[\"rtx\"],\"text/rtf\":[\"*rtf\"],\"text/sgml\":[\"sgml\",\"sgm\"],\"text/shex\":[\"shex\"],\"text/slim\":[\"slim\",\"slm\"],\"text/spdx\":[\"spdx\"],\"text/stylus\":[\"stylus\",\"styl\"],\"text/tab-separated-values\":[\"tsv\"],\"text/troff\":[\"t\",\"tr\",\"roff\",\"man\",\"me\",\"ms\"],\"text/turtle\":[\"ttl\"],\"text/uri-list\":[\"uri\",\"uris\",\"urls\"],\"text/vcard\":[\"vcard\"],\"text/vtt\":[\"vtt\"],\"text/xml\":[\"*xml\"],\"text/yaml\":[\"yaml\",\"yml\"],\"video/3gpp\":[\"3gp\",\"3gpp\"],\"video/3gpp2\":[\"3g2\"],\"video/h261\":[\"h261\"],\"video/h263\":[\"h263\"],\"video/h264\":[\"h264\"],\"video/jpeg\":[\"jpgv\"],\"video/jpm\":[\"*jpm\",\"jpgm\"],\"video/mj2\":[\"mj2\",\"mjp2\"],\"video/mp2t\":[\"ts\"],\"video/mp4\":[\"mp4\",\"mp4v\",\"mpg4\"],\"video/mpeg\":[\"mpeg\",\"mpg\",\"mpe\",\"m1v\",\"m2v\"],\"video/ogg\":[\"ogv\"],\"video/quicktime\":[\"qt\",\"mov\"],\"video/webm\":[\"webm\"]};","module.exports = {\"application/prs.cww\":[\"cww\"],\"application/vnd.1000minds.decision-model+xml\":[\"1km\"],\"application/vnd.3gpp.pic-bw-large\":[\"plb\"],\"application/vnd.3gpp.pic-bw-small\":[\"psb\"],\"application/vnd.3gpp.pic-bw-var\":[\"pvb\"],\"application/vnd.3gpp2.tcap\":[\"tcap\"],\"application/vnd.3m.post-it-notes\":[\"pwn\"],\"application/vnd.accpac.simply.aso\":[\"aso\"],\"application/vnd.accpac.simply.imp\":[\"imp\"],\"application/vnd.acucobol\":[\"acu\"],\"application/vnd.acucorp\":[\"atc\",\"acutc\"],\"application/vnd.adobe.air-application-installer-package+zip\":[\"air\"],\"application/vnd.adobe.formscentral.fcdt\":[\"fcdt\"],\"application/vnd.adobe.fxp\":[\"fxp\",\"fxpl\"],\"application/vnd.adobe.xdp+xml\":[\"xdp\"],\"application/vnd.adobe.xfdf\":[\"xfdf\"],\"application/vnd.ahead.space\":[\"ahead\"],\"application/vnd.airzip.filesecure.azf\":[\"azf\"],\"application/vnd.airzip.filesecure.azs\":[\"azs\"],\"application/vnd.amazon.ebook\":[\"azw\"],\"application/vnd.americandynamics.acc\":[\"acc\"],\"application/vnd.amiga.ami\":[\"ami\"],\"application/vnd.android.package-archive\":[\"apk\"],\"application/vnd.anser-web-certificate-issue-initiation\":[\"cii\"],\"application/vnd.anser-web-funds-transfer-initiation\":[\"fti\"],\"application/vnd.antix.game-component\":[\"atx\"],\"application/vnd.apple.installer+xml\":[\"mpkg\"],\"application/vnd.apple.keynote\":[\"key\"],\"application/vnd.apple.mpegurl\":[\"m3u8\"],\"application/vnd.apple.numbers\":[\"numbers\"],\"application/vnd.apple.pages\":[\"pages\"],\"application/vnd.apple.pkpass\":[\"pkpass\"],\"application/vnd.aristanetworks.swi\":[\"swi\"],\"application/vnd.astraea-software.iota\":[\"iota\"],\"application/vnd.audiograph\":[\"aep\"],\"application/vnd.balsamiq.bmml+xml\":[\"bmml\"],\"application/vnd.blueice.multipass\":[\"mpm\"],\"application/vnd.bmi\":[\"bmi\"],\"application/vnd.businessobjects\":[\"rep\"],\"application/vnd.chemdraw+xml\":[\"cdxml\"],\"application/vnd.chipnuts.karaoke-mmd\":[\"mmd\"],\"application/vnd.cinderella\":[\"cdy\"],\"application/vnd.citationstyles.style+xml\":[\"csl\"],\"application/vnd.claymore\":[\"cla\"],\"application/vnd.cloanto.rp9\":[\"rp9\"],\"application/vnd.clonk.c4group\":[\"c4g\",\"c4d\",\"c4f\",\"c4p\",\"c4u\"],\"application/vnd.cluetrust.cartomobile-config\":[\"c11amc\"],\"application/vnd.cluetrust.cartomobile-config-pkg\":[\"c11amz\"],\"application/vnd.commonspace\":[\"csp\"],\"application/vnd.contact.cmsg\":[\"cdbcmsg\"],\"application/vnd.cosmocaller\":[\"cmc\"],\"application/vnd.crick.clicker\":[\"clkx\"],\"application/vnd.crick.clicker.keyboard\":[\"clkk\"],\"application/vnd.crick.clicker.palette\":[\"clkp\"],\"application/vnd.crick.clicker.template\":[\"clkt\"],\"application/vnd.crick.clicker.wordbank\":[\"clkw\"],\"application/vnd.criticaltools.wbs+xml\":[\"wbs\"],\"application/vnd.ctc-posml\":[\"pml\"],\"application/vnd.cups-ppd\":[\"ppd\"],\"application/vnd.curl.car\":[\"car\"],\"application/vnd.curl.pcurl\":[\"pcurl\"],\"application/vnd.dart\":[\"dart\"],\"application/vnd.data-vision.rdz\":[\"rdz\"],\"application/vnd.dbf\":[\"dbf\"],\"application/vnd.dece.data\":[\"uvf\",\"uvvf\",\"uvd\",\"uvvd\"],\"application/vnd.dece.ttml+xml\":[\"uvt\",\"uvvt\"],\"application/vnd.dece.unspecified\":[\"uvx\",\"uvvx\"],\"application/vnd.dece.zip\":[\"uvz\",\"uvvz\"],\"application/vnd.denovo.fcselayout-link\":[\"fe_launch\"],\"application/vnd.dna\":[\"dna\"],\"application/vnd.dolby.mlp\":[\"mlp\"],\"application/vnd.dpgraph\":[\"dpg\"],\"application/vnd.dreamfactory\":[\"dfac\"],\"application/vnd.ds-keypoint\":[\"kpxx\"],\"application/vnd.dvb.ait\":[\"ait\"],\"application/vnd.dvb.service\":[\"svc\"],\"application/vnd.dynageo\":[\"geo\"],\"application/vnd.ecowin.chart\":[\"mag\"],\"application/vnd.enliven\":[\"nml\"],\"application/vnd.epson.esf\":[\"esf\"],\"application/vnd.epson.msf\":[\"msf\"],\"application/vnd.epson.quickanime\":[\"qam\"],\"application/vnd.epson.salt\":[\"slt\"],\"application/vnd.epson.ssf\":[\"ssf\"],\"application/vnd.eszigno3+xml\":[\"es3\",\"et3\"],\"application/vnd.ezpix-album\":[\"ez2\"],\"application/vnd.ezpix-package\":[\"ez3\"],\"application/vnd.fdf\":[\"fdf\"],\"application/vnd.fdsn.mseed\":[\"mseed\"],\"application/vnd.fdsn.seed\":[\"seed\",\"dataless\"],\"application/vnd.flographit\":[\"gph\"],\"application/vnd.fluxtime.clip\":[\"ftc\"],\"application/vnd.framemaker\":[\"fm\",\"frame\",\"maker\",\"book\"],\"application/vnd.frogans.fnc\":[\"fnc\"],\"application/vnd.frogans.ltf\":[\"ltf\"],\"application/vnd.fsc.weblaunch\":[\"fsc\"],\"application/vnd.fujitsu.oasys\":[\"oas\"],\"application/vnd.fujitsu.oasys2\":[\"oa2\"],\"application/vnd.fujitsu.oasys3\":[\"oa3\"],\"application/vnd.fujitsu.oasysgp\":[\"fg5\"],\"application/vnd.fujitsu.oasysprs\":[\"bh2\"],\"application/vnd.fujixerox.ddd\":[\"ddd\"],\"application/vnd.fujixerox.docuworks\":[\"xdw\"],\"application/vnd.fujixerox.docuworks.binder\":[\"xbd\"],\"application/vnd.fuzzysheet\":[\"fzs\"],\"application/vnd.genomatix.tuxedo\":[\"txd\"],\"application/vnd.geogebra.file\":[\"ggb\"],\"application/vnd.geogebra.tool\":[\"ggt\"],\"application/vnd.geometry-explorer\":[\"gex\",\"gre\"],\"application/vnd.geonext\":[\"gxt\"],\"application/vnd.geoplan\":[\"g2w\"],\"application/vnd.geospace\":[\"g3w\"],\"application/vnd.gmx\":[\"gmx\"],\"application/vnd.google-apps.document\":[\"gdoc\"],\"application/vnd.google-apps.presentation\":[\"gslides\"],\"application/vnd.google-apps.spreadsheet\":[\"gsheet\"],\"application/vnd.google-earth.kml+xml\":[\"kml\"],\"application/vnd.google-earth.kmz\":[\"kmz\"],\"application/vnd.grafeq\":[\"gqf\",\"gqs\"],\"application/vnd.groove-account\":[\"gac\"],\"application/vnd.groove-help\":[\"ghf\"],\"application/vnd.groove-identity-message\":[\"gim\"],\"application/vnd.groove-injector\":[\"grv\"],\"application/vnd.groove-tool-message\":[\"gtm\"],\"application/vnd.groove-tool-template\":[\"tpl\"],\"application/vnd.groove-vcard\":[\"vcg\"],\"application/vnd.hal+xml\":[\"hal\"],\"application/vnd.handheld-entertainment+xml\":[\"zmm\"],\"application/vnd.hbci\":[\"hbci\"],\"application/vnd.hhe.lesson-player\":[\"les\"],\"application/vnd.hp-hpgl\":[\"hpgl\"],\"application/vnd.hp-hpid\":[\"hpid\"],\"application/vnd.hp-hps\":[\"hps\"],\"application/vnd.hp-jlyt\":[\"jlt\"],\"application/vnd.hp-pcl\":[\"pcl\"],\"application/vnd.hp-pclxl\":[\"pclxl\"],\"application/vnd.hydrostatix.sof-data\":[\"sfd-hdstx\"],\"application/vnd.ibm.minipay\":[\"mpy\"],\"application/vnd.ibm.modcap\":[\"afp\",\"listafp\",\"list3820\"],\"application/vnd.ibm.rights-management\":[\"irm\"],\"application/vnd.ibm.secure-container\":[\"sc\"],\"application/vnd.iccprofile\":[\"icc\",\"icm\"],\"application/vnd.igloader\":[\"igl\"],\"application/vnd.immervision-ivp\":[\"ivp\"],\"application/vnd.immervision-ivu\":[\"ivu\"],\"application/vnd.insors.igm\":[\"igm\"],\"application/vnd.intercon.formnet\":[\"xpw\",\"xpx\"],\"application/vnd.intergeo\":[\"i2g\"],\"application/vnd.intu.qbo\":[\"qbo\"],\"application/vnd.intu.qfx\":[\"qfx\"],\"application/vnd.ipunplugged.rcprofile\":[\"rcprofile\"],\"application/vnd.irepository.package+xml\":[\"irp\"],\"application/vnd.is-xpr\":[\"xpr\"],\"application/vnd.isac.fcs\":[\"fcs\"],\"application/vnd.jam\":[\"jam\"],\"application/vnd.jcp.javame.midlet-rms\":[\"rms\"],\"application/vnd.jisp\":[\"jisp\"],\"application/vnd.joost.joda-archive\":[\"joda\"],\"application/vnd.kahootz\":[\"ktz\",\"ktr\"],\"application/vnd.kde.karbon\":[\"karbon\"],\"application/vnd.kde.kchart\":[\"chrt\"],\"application/vnd.kde.kformula\":[\"kfo\"],\"application/vnd.kde.kivio\":[\"flw\"],\"application/vnd.kde.kontour\":[\"kon\"],\"application/vnd.kde.kpresenter\":[\"kpr\",\"kpt\"],\"application/vnd.kde.kspread\":[\"ksp\"],\"application/vnd.kde.kword\":[\"kwd\",\"kwt\"],\"application/vnd.kenameaapp\":[\"htke\"],\"application/vnd.kidspiration\":[\"kia\"],\"application/vnd.kinar\":[\"kne\",\"knp\"],\"application/vnd.koan\":[\"skp\",\"skd\",\"skt\",\"skm\"],\"application/vnd.kodak-descriptor\":[\"sse\"],\"application/vnd.las.las+xml\":[\"lasxml\"],\"application/vnd.llamagraphics.life-balance.desktop\":[\"lbd\"],\"application/vnd.llamagraphics.life-balance.exchange+xml\":[\"lbe\"],\"application/vnd.lotus-1-2-3\":[\"123\"],\"application/vnd.lotus-approach\":[\"apr\"],\"application/vnd.lotus-freelance\":[\"pre\"],\"application/vnd.lotus-notes\":[\"nsf\"],\"application/vnd.lotus-organizer\":[\"org\"],\"application/vnd.lotus-screencam\":[\"scm\"],\"application/vnd.lotus-wordpro\":[\"lwp\"],\"application/vnd.macports.portpkg\":[\"portpkg\"],\"application/vnd.mcd\":[\"mcd\"],\"application/vnd.medcalcdata\":[\"mc1\"],\"application/vnd.mediastation.cdkey\":[\"cdkey\"],\"application/vnd.mfer\":[\"mwf\"],\"application/vnd.mfmp\":[\"mfm\"],\"application/vnd.micrografx.flo\":[\"flo\"],\"application/vnd.micrografx.igx\":[\"igx\"],\"application/vnd.mif\":[\"mif\"],\"application/vnd.mobius.daf\":[\"daf\"],\"application/vnd.mobius.dis\":[\"dis\"],\"application/vnd.mobius.mbk\":[\"mbk\"],\"application/vnd.mobius.mqy\":[\"mqy\"],\"application/vnd.mobius.msl\":[\"msl\"],\"application/vnd.mobius.plc\":[\"plc\"],\"application/vnd.mobius.txf\":[\"txf\"],\"application/vnd.mophun.application\":[\"mpn\"],\"application/vnd.mophun.certificate\":[\"mpc\"],\"application/vnd.mozilla.xul+xml\":[\"xul\"],\"application/vnd.ms-artgalry\":[\"cil\"],\"application/vnd.ms-cab-compressed\":[\"cab\"],\"application/vnd.ms-excel\":[\"xls\",\"xlm\",\"xla\",\"xlc\",\"xlt\",\"xlw\"],\"application/vnd.ms-excel.addin.macroenabled.12\":[\"xlam\"],\"application/vnd.ms-excel.sheet.binary.macroenabled.12\":[\"xlsb\"],\"application/vnd.ms-excel.sheet.macroenabled.12\":[\"xlsm\"],\"application/vnd.ms-excel.template.macroenabled.12\":[\"xltm\"],\"application/vnd.ms-fontobject\":[\"eot\"],\"application/vnd.ms-htmlhelp\":[\"chm\"],\"application/vnd.ms-ims\":[\"ims\"],\"application/vnd.ms-lrm\":[\"lrm\"],\"application/vnd.ms-officetheme\":[\"thmx\"],\"application/vnd.ms-outlook\":[\"msg\"],\"application/vnd.ms-pki.seccat\":[\"cat\"],\"application/vnd.ms-pki.stl\":[\"*stl\"],\"application/vnd.ms-powerpoint\":[\"ppt\",\"pps\",\"pot\"],\"application/vnd.ms-powerpoint.addin.macroenabled.12\":[\"ppam\"],\"application/vnd.ms-powerpoint.presentation.macroenabled.12\":[\"pptm\"],\"application/vnd.ms-powerpoint.slide.macroenabled.12\":[\"sldm\"],\"application/vnd.ms-powerpoint.slideshow.macroenabled.12\":[\"ppsm\"],\"application/vnd.ms-powerpoint.template.macroenabled.12\":[\"potm\"],\"application/vnd.ms-project\":[\"mpp\",\"mpt\"],\"application/vnd.ms-word.document.macroenabled.12\":[\"docm\"],\"application/vnd.ms-word.template.macroenabled.12\":[\"dotm\"],\"application/vnd.ms-works\":[\"wps\",\"wks\",\"wcm\",\"wdb\"],\"application/vnd.ms-wpl\":[\"wpl\"],\"application/vnd.ms-xpsdocument\":[\"xps\"],\"application/vnd.mseq\":[\"mseq\"],\"application/vnd.musician\":[\"mus\"],\"application/vnd.muvee.style\":[\"msty\"],\"application/vnd.mynfc\":[\"taglet\"],\"application/vnd.neurolanguage.nlu\":[\"nlu\"],\"application/vnd.nitf\":[\"ntf\",\"nitf\"],\"application/vnd.noblenet-directory\":[\"nnd\"],\"application/vnd.noblenet-sealer\":[\"nns\"],\"application/vnd.noblenet-web\":[\"nnw\"],\"application/vnd.nokia.n-gage.ac+xml\":[\"*ac\"],\"application/vnd.nokia.n-gage.data\":[\"ngdat\"],\"application/vnd.nokia.n-gage.symbian.install\":[\"n-gage\"],\"application/vnd.nokia.radio-preset\":[\"rpst\"],\"application/vnd.nokia.radio-presets\":[\"rpss\"],\"application/vnd.novadigm.edm\":[\"edm\"],\"application/vnd.novadigm.edx\":[\"edx\"],\"application/vnd.novadigm.ext\":[\"ext\"],\"application/vnd.oasis.opendocument.chart\":[\"odc\"],\"application/vnd.oasis.opendocument.chart-template\":[\"otc\"],\"application/vnd.oasis.opendocument.database\":[\"odb\"],\"application/vnd.oasis.opendocument.formula\":[\"odf\"],\"application/vnd.oasis.opendocument.formula-template\":[\"odft\"],\"application/vnd.oasis.opendocument.graphics\":[\"odg\"],\"application/vnd.oasis.opendocument.graphics-template\":[\"otg\"],\"application/vnd.oasis.opendocument.image\":[\"odi\"],\"application/vnd.oasis.opendocument.image-template\":[\"oti\"],\"application/vnd.oasis.opendocument.presentation\":[\"odp\"],\"application/vnd.oasis.opendocument.presentation-template\":[\"otp\"],\"application/vnd.oasis.opendocument.spreadsheet\":[\"ods\"],\"application/vnd.oasis.opendocument.spreadsheet-template\":[\"ots\"],\"application/vnd.oasis.opendocument.text\":[\"odt\"],\"application/vnd.oasis.opendocument.text-master\":[\"odm\"],\"application/vnd.oasis.opendocument.text-template\":[\"ott\"],\"application/vnd.oasis.opendocument.text-web\":[\"oth\"],\"application/vnd.olpc-sugar\":[\"xo\"],\"application/vnd.oma.dd2+xml\":[\"dd2\"],\"application/vnd.openblox.game+xml\":[\"obgx\"],\"application/vnd.openofficeorg.extension\":[\"oxt\"],\"application/vnd.openstreetmap.data+xml\":[\"osm\"],\"application/vnd.openxmlformats-officedocument.presentationml.presentation\":[\"pptx\"],\"application/vnd.openxmlformats-officedocument.presentationml.slide\":[\"sldx\"],\"application/vnd.openxmlformats-officedocument.presentationml.slideshow\":[\"ppsx\"],\"application/vnd.openxmlformats-officedocument.presentationml.template\":[\"potx\"],\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\":[\"xlsx\"],\"application/vnd.openxmlformats-officedocument.spreadsheetml.template\":[\"xltx\"],\"application/vnd.openxmlformats-officedocument.wordprocessingml.document\":[\"docx\"],\"application/vnd.openxmlformats-officedocument.wordprocessingml.template\":[\"dotx\"],\"application/vnd.osgeo.mapguide.package\":[\"mgp\"],\"application/vnd.osgi.dp\":[\"dp\"],\"application/vnd.osgi.subsystem\":[\"esa\"],\"application/vnd.palm\":[\"pdb\",\"pqa\",\"oprc\"],\"application/vnd.pawaafile\":[\"paw\"],\"application/vnd.pg.format\":[\"str\"],\"application/vnd.pg.osasli\":[\"ei6\"],\"application/vnd.picsel\":[\"efif\"],\"application/vnd.pmi.widget\":[\"wg\"],\"application/vnd.pocketlearn\":[\"plf\"],\"application/vnd.powerbuilder6\":[\"pbd\"],\"application/vnd.previewsystems.box\":[\"box\"],\"application/vnd.proteus.magazine\":[\"mgz\"],\"application/vnd.publishare-delta-tree\":[\"qps\"],\"application/vnd.pvi.ptid1\":[\"ptid\"],\"application/vnd.quark.quarkxpress\":[\"qxd\",\"qxt\",\"qwd\",\"qwt\",\"qxl\",\"qxb\"],\"application/vnd.rar\":[\"rar\"],\"application/vnd.realvnc.bed\":[\"bed\"],\"application/vnd.recordare.musicxml\":[\"mxl\"],\"application/vnd.recordare.musicxml+xml\":[\"musicxml\"],\"application/vnd.rig.cryptonote\":[\"cryptonote\"],\"application/vnd.rim.cod\":[\"cod\"],\"application/vnd.rn-realmedia\":[\"rm\"],\"application/vnd.rn-realmedia-vbr\":[\"rmvb\"],\"application/vnd.route66.link66+xml\":[\"link66\"],\"application/vnd.sailingtracker.track\":[\"st\"],\"application/vnd.seemail\":[\"see\"],\"application/vnd.sema\":[\"sema\"],\"application/vnd.semd\":[\"semd\"],\"application/vnd.semf\":[\"semf\"],\"application/vnd.shana.informed.formdata\":[\"ifm\"],\"application/vnd.shana.informed.formtemplate\":[\"itp\"],\"application/vnd.shana.informed.interchange\":[\"iif\"],\"application/vnd.shana.informed.package\":[\"ipk\"],\"application/vnd.simtech-mindmapper\":[\"twd\",\"twds\"],\"application/vnd.smaf\":[\"mmf\"],\"application/vnd.smart.teacher\":[\"teacher\"],\"application/vnd.software602.filler.form+xml\":[\"fo\"],\"application/vnd.solent.sdkm+xml\":[\"sdkm\",\"sdkd\"],\"application/vnd.spotfire.dxp\":[\"dxp\"],\"application/vnd.spotfire.sfs\":[\"sfs\"],\"application/vnd.stardivision.calc\":[\"sdc\"],\"application/vnd.stardivision.draw\":[\"sda\"],\"application/vnd.stardivision.impress\":[\"sdd\"],\"application/vnd.stardivision.math\":[\"smf\"],\"application/vnd.stardivision.writer\":[\"sdw\",\"vor\"],\"application/vnd.stardivision.writer-global\":[\"sgl\"],\"application/vnd.stepmania.package\":[\"smzip\"],\"application/vnd.stepmania.stepchart\":[\"sm\"],\"application/vnd.sun.wadl+xml\":[\"wadl\"],\"application/vnd.sun.xml.calc\":[\"sxc\"],\"application/vnd.sun.xml.calc.template\":[\"stc\"],\"application/vnd.sun.xml.draw\":[\"sxd\"],\"application/vnd.sun.xml.draw.template\":[\"std\"],\"application/vnd.sun.xml.impress\":[\"sxi\"],\"application/vnd.sun.xml.impress.template\":[\"sti\"],\"application/vnd.sun.xml.math\":[\"sxm\"],\"application/vnd.sun.xml.writer\":[\"sxw\"],\"application/vnd.sun.xml.writer.global\":[\"sxg\"],\"application/vnd.sun.xml.writer.template\":[\"stw\"],\"application/vnd.sus-calendar\":[\"sus\",\"susp\"],\"application/vnd.svd\":[\"svd\"],\"application/vnd.symbian.install\":[\"sis\",\"sisx\"],\"application/vnd.syncml+xml\":[\"xsm\"],\"application/vnd.syncml.dm+wbxml\":[\"bdm\"],\"application/vnd.syncml.dm+xml\":[\"xdm\"],\"application/vnd.syncml.dmddf+xml\":[\"ddf\"],\"application/vnd.tao.intent-module-archive\":[\"tao\"],\"application/vnd.tcpdump.pcap\":[\"pcap\",\"cap\",\"dmp\"],\"application/vnd.tmobile-livetv\":[\"tmo\"],\"application/vnd.trid.tpt\":[\"tpt\"],\"application/vnd.triscape.mxs\":[\"mxs\"],\"application/vnd.trueapp\":[\"tra\"],\"application/vnd.ufdl\":[\"ufd\",\"ufdl\"],\"application/vnd.uiq.theme\":[\"utz\"],\"application/vnd.umajin\":[\"umj\"],\"application/vnd.unity\":[\"unityweb\"],\"application/vnd.uoml+xml\":[\"uoml\"],\"application/vnd.vcx\":[\"vcx\"],\"application/vnd.visio\":[\"vsd\",\"vst\",\"vss\",\"vsw\"],\"application/vnd.visionary\":[\"vis\"],\"application/vnd.vsf\":[\"vsf\"],\"application/vnd.wap.wbxml\":[\"wbxml\"],\"application/vnd.wap.wmlc\":[\"wmlc\"],\"application/vnd.wap.wmlscriptc\":[\"wmlsc\"],\"application/vnd.webturbo\":[\"wtb\"],\"application/vnd.wolfram.player\":[\"nbp\"],\"application/vnd.wordperfect\":[\"wpd\"],\"application/vnd.wqd\":[\"wqd\"],\"application/vnd.wt.stf\":[\"stf\"],\"application/vnd.xara\":[\"xar\"],\"application/vnd.xfdl\":[\"xfdl\"],\"application/vnd.yamaha.hv-dic\":[\"hvd\"],\"application/vnd.yamaha.hv-script\":[\"hvs\"],\"application/vnd.yamaha.hv-voice\":[\"hvp\"],\"application/vnd.yamaha.openscoreformat\":[\"osf\"],\"application/vnd.yamaha.openscoreformat.osfpvg+xml\":[\"osfpvg\"],\"application/vnd.yamaha.smaf-audio\":[\"saf\"],\"application/vnd.yamaha.smaf-phrase\":[\"spf\"],\"application/vnd.yellowriver-custom-menu\":[\"cmp\"],\"application/vnd.zul\":[\"zir\",\"zirz\"],\"application/vnd.zzazz.deck+xml\":[\"zaz\"],\"application/x-7z-compressed\":[\"7z\"],\"application/x-abiword\":[\"abw\"],\"application/x-ace-compressed\":[\"ace\"],\"application/x-apple-diskimage\":[\"*dmg\"],\"application/x-arj\":[\"arj\"],\"application/x-authorware-bin\":[\"aab\",\"x32\",\"u32\",\"vox\"],\"application/x-authorware-map\":[\"aam\"],\"application/x-authorware-seg\":[\"aas\"],\"application/x-bcpio\":[\"bcpio\"],\"application/x-bdoc\":[\"*bdoc\"],\"application/x-bittorrent\":[\"torrent\"],\"application/x-blorb\":[\"blb\",\"blorb\"],\"application/x-bzip\":[\"bz\"],\"application/x-bzip2\":[\"bz2\",\"boz\"],\"application/x-cbr\":[\"cbr\",\"cba\",\"cbt\",\"cbz\",\"cb7\"],\"application/x-cdlink\":[\"vcd\"],\"application/x-cfs-compressed\":[\"cfs\"],\"application/x-chat\":[\"chat\"],\"application/x-chess-pgn\":[\"pgn\"],\"application/x-chrome-extension\":[\"crx\"],\"application/x-cocoa\":[\"cco\"],\"application/x-conference\":[\"nsc\"],\"application/x-cpio\":[\"cpio\"],\"application/x-csh\":[\"csh\"],\"application/x-debian-package\":[\"*deb\",\"udeb\"],\"application/x-dgc-compressed\":[\"dgc\"],\"application/x-director\":[\"dir\",\"dcr\",\"dxr\",\"cst\",\"cct\",\"cxt\",\"w3d\",\"fgd\",\"swa\"],\"application/x-doom\":[\"wad\"],\"application/x-dtbncx+xml\":[\"ncx\"],\"application/x-dtbook+xml\":[\"dtb\"],\"application/x-dtbresource+xml\":[\"res\"],\"application/x-dvi\":[\"dvi\"],\"application/x-envoy\":[\"evy\"],\"application/x-eva\":[\"eva\"],\"application/x-font-bdf\":[\"bdf\"],\"application/x-font-ghostscript\":[\"gsf\"],\"application/x-font-linux-psf\":[\"psf\"],\"application/x-font-pcf\":[\"pcf\"],\"application/x-font-snf\":[\"snf\"],\"application/x-font-type1\":[\"pfa\",\"pfb\",\"pfm\",\"afm\"],\"application/x-freearc\":[\"arc\"],\"application/x-futuresplash\":[\"spl\"],\"application/x-gca-compressed\":[\"gca\"],\"application/x-glulx\":[\"ulx\"],\"application/x-gnumeric\":[\"gnumeric\"],\"application/x-gramps-xml\":[\"gramps\"],\"application/x-gtar\":[\"gtar\"],\"application/x-hdf\":[\"hdf\"],\"application/x-httpd-php\":[\"php\"],\"application/x-install-instructions\":[\"install\"],\"application/x-iso9660-image\":[\"*iso\"],\"application/x-java-archive-diff\":[\"jardiff\"],\"application/x-java-jnlp-file\":[\"jnlp\"],\"application/x-keepass2\":[\"kdbx\"],\"application/x-latex\":[\"latex\"],\"application/x-lua-bytecode\":[\"luac\"],\"application/x-lzh-compressed\":[\"lzh\",\"lha\"],\"application/x-makeself\":[\"run\"],\"application/x-mie\":[\"mie\"],\"application/x-mobipocket-ebook\":[\"prc\",\"mobi\"],\"application/x-ms-application\":[\"application\"],\"application/x-ms-shortcut\":[\"lnk\"],\"application/x-ms-wmd\":[\"wmd\"],\"application/x-ms-wmz\":[\"wmz\"],\"application/x-ms-xbap\":[\"xbap\"],\"application/x-msaccess\":[\"mdb\"],\"application/x-msbinder\":[\"obd\"],\"application/x-mscardfile\":[\"crd\"],\"application/x-msclip\":[\"clp\"],\"application/x-msdos-program\":[\"*exe\"],\"application/x-msdownload\":[\"*exe\",\"*dll\",\"com\",\"bat\",\"*msi\"],\"application/x-msmediaview\":[\"mvb\",\"m13\",\"m14\"],\"application/x-msmetafile\":[\"*wmf\",\"*wmz\",\"*emf\",\"emz\"],\"application/x-msmoney\":[\"mny\"],\"application/x-mspublisher\":[\"pub\"],\"application/x-msschedule\":[\"scd\"],\"application/x-msterminal\":[\"trm\"],\"application/x-mswrite\":[\"wri\"],\"application/x-netcdf\":[\"nc\",\"cdf\"],\"application/x-ns-proxy-autoconfig\":[\"pac\"],\"application/x-nzb\":[\"nzb\"],\"application/x-perl\":[\"pl\",\"pm\"],\"application/x-pilot\":[\"*prc\",\"*pdb\"],\"application/x-pkcs12\":[\"p12\",\"pfx\"],\"application/x-pkcs7-certificates\":[\"p7b\",\"spc\"],\"application/x-pkcs7-certreqresp\":[\"p7r\"],\"application/x-rar-compressed\":[\"*rar\"],\"application/x-redhat-package-manager\":[\"rpm\"],\"application/x-research-info-systems\":[\"ris\"],\"application/x-sea\":[\"sea\"],\"application/x-sh\":[\"sh\"],\"application/x-shar\":[\"shar\"],\"application/x-shockwave-flash\":[\"swf\"],\"application/x-silverlight-app\":[\"xap\"],\"application/x-sql\":[\"sql\"],\"application/x-stuffit\":[\"sit\"],\"application/x-stuffitx\":[\"sitx\"],\"application/x-subrip\":[\"srt\"],\"application/x-sv4cpio\":[\"sv4cpio\"],\"application/x-sv4crc\":[\"sv4crc\"],\"application/x-t3vm-image\":[\"t3\"],\"application/x-tads\":[\"gam\"],\"application/x-tar\":[\"tar\"],\"application/x-tcl\":[\"tcl\",\"tk\"],\"application/x-tex\":[\"tex\"],\"application/x-tex-tfm\":[\"tfm\"],\"application/x-texinfo\":[\"texinfo\",\"texi\"],\"application/x-tgif\":[\"*obj\"],\"application/x-ustar\":[\"ustar\"],\"application/x-virtualbox-hdd\":[\"hdd\"],\"application/x-virtualbox-ova\":[\"ova\"],\"application/x-virtualbox-ovf\":[\"ovf\"],\"application/x-virtualbox-vbox\":[\"vbox\"],\"application/x-virtualbox-vbox-extpack\":[\"vbox-extpack\"],\"application/x-virtualbox-vdi\":[\"vdi\"],\"application/x-virtualbox-vhd\":[\"vhd\"],\"application/x-virtualbox-vmdk\":[\"vmdk\"],\"application/x-wais-source\":[\"src\"],\"application/x-web-app-manifest+json\":[\"webapp\"],\"application/x-x509-ca-cert\":[\"der\",\"crt\",\"pem\"],\"application/x-xfig\":[\"fig\"],\"application/x-xliff+xml\":[\"*xlf\"],\"application/x-xpinstall\":[\"xpi\"],\"application/x-xz\":[\"xz\"],\"application/x-zmachine\":[\"z1\",\"z2\",\"z3\",\"z4\",\"z5\",\"z6\",\"z7\",\"z8\"],\"audio/vnd.dece.audio\":[\"uva\",\"uvva\"],\"audio/vnd.digital-winds\":[\"eol\"],\"audio/vnd.dra\":[\"dra\"],\"audio/vnd.dts\":[\"dts\"],\"audio/vnd.dts.hd\":[\"dtshd\"],\"audio/vnd.lucent.voice\":[\"lvp\"],\"audio/vnd.ms-playready.media.pya\":[\"pya\"],\"audio/vnd.nuera.ecelp4800\":[\"ecelp4800\"],\"audio/vnd.nuera.ecelp7470\":[\"ecelp7470\"],\"audio/vnd.nuera.ecelp9600\":[\"ecelp9600\"],\"audio/vnd.rip\":[\"rip\"],\"audio/x-aac\":[\"aac\"],\"audio/x-aiff\":[\"aif\",\"aiff\",\"aifc\"],\"audio/x-caf\":[\"caf\"],\"audio/x-flac\":[\"flac\"],\"audio/x-m4a\":[\"*m4a\"],\"audio/x-matroska\":[\"mka\"],\"audio/x-mpegurl\":[\"m3u\"],\"audio/x-ms-wax\":[\"wax\"],\"audio/x-ms-wma\":[\"wma\"],\"audio/x-pn-realaudio\":[\"ram\",\"ra\"],\"audio/x-pn-realaudio-plugin\":[\"rmp\"],\"audio/x-realaudio\":[\"*ra\"],\"audio/x-wav\":[\"*wav\"],\"chemical/x-cdx\":[\"cdx\"],\"chemical/x-cif\":[\"cif\"],\"chemical/x-cmdf\":[\"cmdf\"],\"chemical/x-cml\":[\"cml\"],\"chemical/x-csml\":[\"csml\"],\"chemical/x-xyz\":[\"xyz\"],\"image/prs.btif\":[\"btif\"],\"image/prs.pti\":[\"pti\"],\"image/vnd.adobe.photoshop\":[\"psd\"],\"image/vnd.airzip.accelerator.azv\":[\"azv\"],\"image/vnd.dece.graphic\":[\"uvi\",\"uvvi\",\"uvg\",\"uvvg\"],\"image/vnd.djvu\":[\"djvu\",\"djv\"],\"image/vnd.dvb.subtitle\":[\"*sub\"],\"image/vnd.dwg\":[\"dwg\"],\"image/vnd.dxf\":[\"dxf\"],\"image/vnd.fastbidsheet\":[\"fbs\"],\"image/vnd.fpx\":[\"fpx\"],\"image/vnd.fst\":[\"fst\"],\"image/vnd.fujixerox.edmics-mmr\":[\"mmr\"],\"image/vnd.fujixerox.edmics-rlc\":[\"rlc\"],\"image/vnd.microsoft.icon\":[\"ico\"],\"image/vnd.ms-dds\":[\"dds\"],\"image/vnd.ms-modi\":[\"mdi\"],\"image/vnd.ms-photo\":[\"wdp\"],\"image/vnd.net-fpx\":[\"npx\"],\"image/vnd.pco.b16\":[\"b16\"],\"image/vnd.tencent.tap\":[\"tap\"],\"image/vnd.valve.source.texture\":[\"vtf\"],\"image/vnd.wap.wbmp\":[\"wbmp\"],\"image/vnd.xiff\":[\"xif\"],\"image/vnd.zbrush.pcx\":[\"pcx\"],\"image/x-3ds\":[\"3ds\"],\"image/x-cmu-raster\":[\"ras\"],\"image/x-cmx\":[\"cmx\"],\"image/x-freehand\":[\"fh\",\"fhc\",\"fh4\",\"fh5\",\"fh7\"],\"image/x-icon\":[\"*ico\"],\"image/x-jng\":[\"jng\"],\"image/x-mrsid-image\":[\"sid\"],\"image/x-ms-bmp\":[\"*bmp\"],\"image/x-pcx\":[\"*pcx\"],\"image/x-pict\":[\"pic\",\"pct\"],\"image/x-portable-anymap\":[\"pnm\"],\"image/x-portable-bitmap\":[\"pbm\"],\"image/x-portable-graymap\":[\"pgm\"],\"image/x-portable-pixmap\":[\"ppm\"],\"image/x-rgb\":[\"rgb\"],\"image/x-tga\":[\"tga\"],\"image/x-xbitmap\":[\"xbm\"],\"image/x-xpixmap\":[\"xpm\"],\"image/x-xwindowdump\":[\"xwd\"],\"message/vnd.wfa.wsc\":[\"wsc\"],\"model/vnd.collada+xml\":[\"dae\"],\"model/vnd.dwf\":[\"dwf\"],\"model/vnd.gdl\":[\"gdl\"],\"model/vnd.gtw\":[\"gtw\"],\"model/vnd.mts\":[\"mts\"],\"model/vnd.opengex\":[\"ogex\"],\"model/vnd.parasolid.transmit.binary\":[\"x_b\"],\"model/vnd.parasolid.transmit.text\":[\"x_t\"],\"model/vnd.usdz+zip\":[\"usdz\"],\"model/vnd.valve.source.compiled-map\":[\"bsp\"],\"model/vnd.vtu\":[\"vtu\"],\"text/prs.lines.tag\":[\"dsc\"],\"text/vnd.curl\":[\"curl\"],\"text/vnd.curl.dcurl\":[\"dcurl\"],\"text/vnd.curl.mcurl\":[\"mcurl\"],\"text/vnd.curl.scurl\":[\"scurl\"],\"text/vnd.dvb.subtitle\":[\"sub\"],\"text/vnd.fly\":[\"fly\"],\"text/vnd.fmi.flexstor\":[\"flx\"],\"text/vnd.graphviz\":[\"gv\"],\"text/vnd.in3d.3dml\":[\"3dml\"],\"text/vnd.in3d.spot\":[\"spot\"],\"text/vnd.sun.j2me.app-descriptor\":[\"jad\"],\"text/vnd.wap.wml\":[\"wml\"],\"text/vnd.wap.wmlscript\":[\"wmls\"],\"text/x-asm\":[\"s\",\"asm\"],\"text/x-c\":[\"c\",\"cc\",\"cxx\",\"cpp\",\"h\",\"hh\",\"dic\"],\"text/x-component\":[\"htc\"],\"text/x-fortran\":[\"f\",\"for\",\"f77\",\"f90\"],\"text/x-handlebars-template\":[\"hbs\"],\"text/x-java-source\":[\"java\"],\"text/x-lua\":[\"lua\"],\"text/x-markdown\":[\"mkd\"],\"text/x-nfo\":[\"nfo\"],\"text/x-opml\":[\"opml\"],\"text/x-org\":[\"*org\"],\"text/x-pascal\":[\"p\",\"pas\"],\"text/x-processing\":[\"pde\"],\"text/x-sass\":[\"sass\"],\"text/x-scss\":[\"scss\"],\"text/x-setext\":[\"etx\"],\"text/x-sfv\":[\"sfv\"],\"text/x-suse-ymp\":[\"ymp\"],\"text/x-uuencode\":[\"uu\"],\"text/x-vcalendar\":[\"vcs\"],\"text/x-vcard\":[\"vcf\"],\"video/vnd.dece.hd\":[\"uvh\",\"uvvh\"],\"video/vnd.dece.mobile\":[\"uvm\",\"uvvm\"],\"video/vnd.dece.pd\":[\"uvp\",\"uvvp\"],\"video/vnd.dece.sd\":[\"uvs\",\"uvvs\"],\"video/vnd.dece.video\":[\"uvv\",\"uvvv\"],\"video/vnd.dvb.file\":[\"dvb\"],\"video/vnd.fvt\":[\"fvt\"],\"video/vnd.mpegurl\":[\"mxu\",\"m4u\"],\"video/vnd.ms-playready.media.pyv\":[\"pyv\"],\"video/vnd.uvvu.mp4\":[\"uvu\",\"uvvu\"],\"video/vnd.vivo\":[\"viv\"],\"video/x-f4v\":[\"f4v\"],\"video/x-fli\":[\"fli\"],\"video/x-flv\":[\"flv\"],\"video/x-m4v\":[\"m4v\"],\"video/x-matroska\":[\"mkv\",\"mk3d\",\"mks\"],\"video/x-mng\":[\"mng\"],\"video/x-ms-asf\":[\"asf\",\"asx\"],\"video/x-ms-vob\":[\"vob\"],\"video/x-ms-wm\":[\"wm\"],\"video/x-ms-wmv\":[\"wmv\"],\"video/x-ms-wmx\":[\"wmx\"],\"video/x-ms-wvx\":[\"wvx\"],\"video/x-msvideo\":[\"avi\"],\"video/x-sgi-movie\":[\"movie\"],\"video/x-smv\":[\"smv\"],\"x-conference/x-cooltalk\":[\"ice\"]};","'use strict';\n\nlet Mime = require('./Mime');\nmodule.exports = new Mime(require('./types/standard'), require('./types/other'));\n","// eslint-disable-next-line import/no-extraneous-dependencies\nimport { getType } from 'mime';\n\nimport getFileExt from './getFileExt';\n\nexport default function getFileMimeType(filePath) {\n  const extension = getFileExt(filePath);\n  const mimeType = getType(extension);\n\n  return mimeType;\n}\n","const UNIX_SEP = '/';\nconst WIN_SEP = '\\\\';\n\nexport default function getFileName(filePath) {\n  if (!filePath) {\n    return '';\n  }\n\n  let indexSep = filePath.lastIndexOf(UNIX_SEP);\n  if (indexSep === -1) {\n    indexSep = filePath.lastIndexOf(WIN_SEP);\n  }\n\n  if (indexSep === -1) {\n    return filePath;\n  }\n\n  return filePath.slice(indexSep + 1);\n}\n","import getFileContent from './getFileContent';\nimport getFileMimeType from './getFileMimeType';\nimport getFileEncoding from './getFileEncoding';\nimport getFileBlobAsync from './getFileBlobAsync';\n\nexport default function resolveFile(fixture, window) {\n  const { filePath, encoding, mimeType, fileName, lastModified } = fixture;\n\n  const fileMimeType = mimeType || getFileMimeType(filePath);\n  const fileEncoding = encoding || getFileEncoding(filePath);\n  const fileLastModified = lastModified || Date.now();\n\n  return new Cypress.Promise(resolve =>\n    getFileContent({\n      filePath,\n      fileContent: fixture.fileContent,\n      fileEncoding,\n    })\n      .then(fileContent =>\n        getFileBlobAsync({\n          fileContent,\n          fileName,\n          mimeType: fileMimeType,\n          encoding: fileEncoding,\n          lastModified: fileLastModified,\n          window,\n        }),\n      )\n      .then(resolve),\n  );\n}\n","import { getFileName } from '../../lib/file';\n\nexport default function getFixtureInfo(fixtureInput) {\n  if (typeof fixtureInput === 'string') {\n    return {\n      filePath: fixtureInput,\n      encoding: '',\n      mimeType: '',\n      fileName: getFileName(fixtureInput),\n    };\n  }\n\n  return {\n    filePath: fixtureInput.filePath,\n    encoding: fixtureInput.encoding || '',\n    mimeType: fixtureInput.mimeType || '',\n    fileName: fixtureInput.fileName || getFileName(fixtureInput.filePath),\n    fileContent: fixtureInput.fileContent,\n    lastModified: fixtureInput.lastModified,\n  };\n}\n","import { isManualEventHandling } from '../../lib/browser';\nimport { isElementVisible, isShadowElement } from '../../lib/dom';\n\nexport default function getForceValue(subject) {\n  return isManualEventHandling() || !isElementVisible(subject) || isShadowElement(subject);\n}\n","export const ERR_TYPES = {\n  INVALID_SUBJECT_TYPE: {\n    message: '\"subjectType\" is not valid',\n    tip: 'Please look into docs to find supported \"subjectType\" values',\n  },\n  INVALID_FORCE: {\n    message: '\"force\" is not valid',\n    tip: 'Please look into docs to find supported \"force\" values',\n  },\n  INVALID_ALLOW_EMPTY: {\n    message: '\"allowEmpty\" is not valid',\n    tip: 'Please look into docs to find supported \"allowEmpty\" values',\n  },\n  INVALID_FILE_ENCODING: {\n    message: '\"file encoding\" is not valid',\n    tip: 'Please look into docs to find supported \"encoding\" values',\n  },\n  INVALID_FILE_PATH: {\n    message: '\"filePath\" is not valid',\n    tip: 'Please look into docs to find supported \"filePath\" values',\n  },\n  INVALID_MIME_TYPE: {\n    message: '\"mimeType\" is not valid',\n    tip: 'Please look into docs to find supported \"mimeType\" values',\n  },\n  INVALID_FILE: {\n    message: 'given fixture file is empty',\n    tip: 'Please make sure you provide correct file or explicitly set \"allowEmpty\" to true',\n  },\n  INVALID_LAST_MODIFIED: {\n    message: '\"lastModified\" is not valid\"',\n    tip: 'Please make sure you are passing a \"number\" `Date.now()` or `new Date().getTime()',\n  },\n  MISSING_FILE_NAME_OR_PATH: {\n    message: 'missing \"filePath\" or \"fileName\"',\n    tip: 'Please make sure you are passing either \"filePath\" or \"fileName\"',\n  },\n};\n\nexport class InternalError extends Error {\n  constructor(errorType, ...params) {\n    super(...params);\n\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, InternalError);\n    }\n\n    this.name = '[cypress-file-upload error]';\n    this.message = `${errorType.message}.\\n${errorType.tip}`;\n  }\n}\n","import { ERR_TYPES, InternalError } from '../error';\nimport { ENCODING } from '../../lib/file/constants';\n\nconst ALLOWED_ENCODINGS = Object.values(ENCODING);\n\nexport default function validateFixtures(fixture) {\n  const { filePath, fileName, encoding, mimeType, fileContent, lastModified } = fixture;\n\n  if (encoding && !ALLOWED_ENCODINGS.includes(encoding)) {\n    throw new InternalError(ERR_TYPES.INVALID_FILE_ENCODING);\n  }\n\n  if (typeof filePath !== 'string' && !fileContent) {\n    throw new InternalError(ERR_TYPES.INVALID_FILE_PATH);\n  }\n\n  if (typeof mimeType !== 'string') {\n    throw new InternalError(ERR_TYPES.INVALID_MIME_TYPE);\n  }\n\n  if (!filePath && !fileName) {\n    throw new InternalError(ERR_TYPES.MISSING_FILE_NAME_OR_PATH);\n  }\n\n  if (lastModified && typeof lastModified !== 'number') {\n    throw new InternalError(ERR_TYPES.INVALID_LAST_MODIFIED);\n  }\n\n  return true;\n}\n","import { ERR_TYPES, InternalError } from '../error';\n\nexport default (file, allowEmpty) => {\n  if (!allowEmpty) {\n    const { size } = file;\n\n    if (size === 0) {\n      throw new InternalError(ERR_TYPES.INVALID_FILE);\n    }\n  }\n\n  return true;\n};\n","import { SUBJECT_TYPE } from '../constants';\nimport { ERR_TYPES, InternalError } from '../error';\n\nexport default ({ subjectType, force, allowEmpty }) => {\n  if (Object.values(SUBJECT_TYPE).indexOf(subjectType) === -1) {\n    throw new InternalError(ERR_TYPES.INVALID_SUBJECT_TYPE);\n  }\n\n  if (typeof force !== 'boolean') {\n    throw new InternalError(ERR_TYPES.INVALID_FORCE);\n  }\n\n  if (typeof allowEmpty !== 'boolean') {\n    throw new InternalError(ERR_TYPES.INVALID_ALLOW_EMPTY);\n  }\n\n  return true;\n};\n","export default function merge(target = {}, source = {}) {\n  return {\n    ...source,\n    ...target,\n  };\n}\n","import { DEFAULT_PROCESSING_OPTIONS } from './constants';\n\nimport { attachFileToElement, getFixtureInfo, getForceValue } from './helpers';\nimport { validateFixture, validateFile, validateOptions } from './validators';\nimport { resolveFile } from '../lib/file';\nimport { merge } from '../lib/object';\n\nexport default function attachFile(subject, fixtureOrFixtureArray, processingOptions) {\n  const { subjectType, force, allowEmpty } = merge(processingOptions, DEFAULT_PROCESSING_OPTIONS);\n  validateOptions({\n    subjectType,\n    force,\n    allowEmpty,\n  });\n\n  const fixturesArray = Array.isArray(fixtureOrFixtureArray) ? fixtureOrFixtureArray : [fixtureOrFixtureArray];\n  const fixtures = fixturesArray.map(getFixtureInfo).filter(validateFixture);\n\n  Cypress.cy.window({ log: false }).then(window => {\n    const forceValue = force || getForceValue(subject);\n\n    Cypress.Promise.all(fixtures.map(f => resolveFile(f, window))) // resolve files\n      .then(files => files.filter(f => validateFile(f, allowEmpty))) // error if any of the file contents are invalid\n      .then(files => {\n        attachFileToElement(subject, {\n          files,\n          subjectType,\n          force: forceValue,\n          window,\n        });\n        return files;\n      })\n      .then(files =>\n        Cypress.log({\n          name: 'attachFile',\n          displayName: 'FILE',\n          message: files.reduce((acc, f) => `${acc.length > 0 ? `${acc}, ` : acc}${f.name}`, ''),\n        }),\n      );\n  });\n\n  return Cypress.cy.wrap(subject, { log: false });\n}\n","import attachFile from './attachFile';\n\nconst initialize = () => {\n  Cypress.Commands.add('attachFile', { prevSubject: true }, attachFile);\n};\n\ninitialize();\n"],"names":["DEFAULT_PROCESSING_OPTIONS","Object","freeze","subjectType","force","allowEmpty","SUBJECT_TYPE","INPUT","DRAG_N_DROP","EVENTS_BY_SUBJECT_TYPE","dispatchEvent","target","event","dataTransfer","eventPayload","bubbles","cancelable","detail","e","CustomEvent","assign","isElementVisible","element","Error","Cypress","dom","isAttached","isVisible","isShadowElement","isDetached","BROWSER_CHROME","isManualEventHandling","name","majorVersion","browser","BROWSER_FIREFOX","isBrowserFirefox","dispatchEvents","events","forEach","getEventsBySubjectType","push","attachFileToElement","subject","files","window","DataTransfer","f","items","add","inputElement","inputElements","querySelectorAll","length","ENCODING","ASCII","BASE64","BINARY","HEX","LATIN1","UTF8","UTF_8","UCS2","UCS_2","UTF16LE","UTF_16LE","FILE_EXTENSION","JSON","JS","COFFEE","HTML","TXT","CSV","PNG","JPG","JPEG","GIF","TIF","TIFF","ZIP","PDF","VCF","SVG","XLS","XLSX","DOC","DOCX","MP3","wrapBlob","blob","Promise","then","resolve","getFileExt","filePath","pos","lastIndexOf","slice","ENCODING_TO_BLOB_GETTER","fileContent","mimeType","Blob","base64StringToBlob","binaryStringToBlob","getFileBlobAsync","fileName","encoding","lastModified","getBlob","blobContent","stringify","file","File","type","getFileContent","fileEncoding","cy","fixture","EXTENSION_TO_ENCODING","DEFAULT_ENCODING","getFileEncoding","extension","Mime","require$$0","require$$1","getFileMimeType","getType","UNIX_SEP","WIN_SEP","getFileName","indexSep","resolveFile","fileMimeType","fileLastModified","Date","now","getFixtureInfo","fixtureInput","getForceValue","ERR_TYPES","INVALID_SUBJECT_TYPE","message","tip","INVALID_FORCE","INVALID_ALLOW_EMPTY","INVALID_FILE_ENCODING","INVALID_FILE_PATH","INVALID_MIME_TYPE","INVALID_FILE","INVALID_LAST_MODIFIED","MISSING_FILE_NAME_OR_PATH","InternalError","constructor","errorType","params","captureStackTrace","ALLOWED_ENCODINGS","values","validateFixtures","includes","size","indexOf","merge","source","attachFile","fixtureOrFixtureArray","processingOptions","validateOptions","fixturesArray","Array","isArray","fixtures","map","filter","validateFixture","log","forceValue","all","validateFile","displayName","reduce","acc","wrap","initialize","Commands","prevSubject"],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/cypress-file-upload/package.json b/node_modules/cypress-file-upload/package.json
deleted file mode 100644
index f254241c7..000000000
--- a/node_modules/cypress-file-upload/package.json
+++ /dev/null
@@ -1,82 +0,0 @@
-{
-  "_from": "cypress-file-upload",
-  "_id": "cypress-file-upload@5.0.7",
-  "_inBundle": false,
-  "_integrity": "sha512-cgWsWx7igxjyyVm9/VJ9ukdy69jL00I7z0lrwUWtXXLPvX4neO+8JAZ054Ax8Xf+mdV9OerenXzb9nqRoafjHA==",
-  "_location": "/cypress-file-upload",
-  "_phantomChildren": {},
-  "_requested": {
-    "type": "tag",
-    "registry": true,
-    "raw": "cypress-file-upload",
-    "name": "cypress-file-upload",
-    "escapedName": "cypress-file-upload",
-    "rawSpec": "",
-    "saveSpec": null,
-    "fetchSpec": "latest"
-  },
-  "_requiredBy": [
-    "#DEV:/",
-    "#USER"
-  ],
-  "_resolved": "https://registry.npmjs.org/cypress-file-upload/-/cypress-file-upload-5.0.7.tgz",
-  "_shasum": "acf24fe08a92b2d0c892a58b56811fb933d34ea9",
-  "_spec": "cypress-file-upload",
-  "_where": "/home/lvarloteaux/Documents/Projets/si-ore-v2",
-  "author": {
-    "name": "abramenal",
-    "email": "pavel.auramenka@gmail.com"
-  },
-  "bugs": {
-    "url": "https://github.com/abramenal/cypress-file-upload/issues"
-  },
-  "bundleDependencies": false,
-  "dependencies": {},
-  "deprecated": false,
-  "description": "A Cypress command for file upload",
-  "devDependencies": {
-    "eslint": "^7.18.0",
-    "eslint-config-airbnb-base": "^14.0.0",
-    "eslint-config-prettier": "^7.1.0",
-    "eslint-plugin-cypress": "^2.11.2",
-    "eslint-plugin-es": "^4.1.0",
-    "eslint-plugin-import": "^2.15.0",
-    "eslint-plugin-jsx-a11y": "^6.4.1",
-    "eslint-plugin-prettier": "^3.3.1",
-    "eslint-plugin-react": "^7.22.0",
-    "husky": "^4.3.8",
-    "lint-staged": "^10.5.3",
-    "microbundle": "^0.13.0",
-    "mime": "^2.5.0",
-    "prettier": "^2.2.1"
-  },
-  "engines": {
-    "node": ">=8.2.1"
-  },
-  "homepage": "https://github.com/abramenal/cypress-file-upload#readme",
-  "keywords": [
-    "cypress",
-    "command",
-    "file",
-    "upload",
-    "e2e",
-    "test"
-  ],
-  "license": "MIT",
-  "main": "dist/bundle.js",
-  "name": "cypress-file-upload",
-  "peerDependencies": {
-    "cypress": ">3.0.0"
-  },
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/abramenal/cypress-file-upload.git"
-  },
-  "scripts": {
-    "build": "microbundle build -i src/index.js -f cjs --target node --strict --no-compress --no-generate-types",
-    "lint": "eslint . --ext=js",
-    "test": "echo \"Error: no test specified\" && exit 0"
-  },
-  "types": "./types/index.d.ts",
-  "version": "5.0.7"
-}
diff --git a/node_modules/cypress-file-upload/types/index.d.ts b/node_modules/cypress-file-upload/types/index.d.ts
deleted file mode 100644
index 2d1febebb..000000000
--- a/node_modules/cypress-file-upload/types/index.d.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-/// <reference types="cypress" />
-
-declare namespace Cypress {
-  type FixtureEncoding =
-    | 'ascii'
-    | 'base64'
-    | 'binary'
-    | 'hex'
-    | 'latin1'
-    | 'utf8'
-    | 'utf-8'
-    | 'ucs2'
-    | 'ucs-2'
-    | 'utf16le'
-    | 'utf-16le';
-
-  type FixtureData =
-    | string
-    | {
-        filePath?: string;
-        fileContent?: Blob;
-        fileName?: string;
-        encoding?: FixtureEncoding;
-        mimeType?: string;
-        lastModified?: number;
-      };
-
-  interface FileProcessingOptions {
-    subjectType?: 'input' | 'drag-n-drop';
-    force?: boolean;
-    allowEmpty?: boolean;
-  }
-
-  interface Chainable<Subject = any> {
-    /**
-     * Command to attach file(s) to given HTML element as subject
-     * @param fixture file to attach
-     * @param processingOpts affects the way of fixture processing
-     */
-    attachFile(fixture: FixtureData | FixtureData[], processingOpts?: FileProcessingOptions): Chainable<Subject>;
-  }
-}
diff --git a/package-lock.json b/package-lock.json
index 8f6f5dd7e..9da541216 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,36 @@
 {
+  "name": "si-ore-v2",
+  "lockfileVersion": 2,
   "requires": true,
-  "lockfileVersion": 1,
+  "packages": {
+    "": {
+      "dependencies": {
+        "fsevents": "2.3.2"
+      },
+      "optionalDependencies": {
+        "fsevents": "^2.3.2"
+      }
+    },
+    "node_modules/fsevents": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+      "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+      "hasInstallScript": true,
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+      }
+    }
+  },
   "dependencies": {
-    "cypress-file-upload": {
-      "version": "5.0.7",
-      "resolved": "https://registry.npmjs.org/cypress-file-upload/-/cypress-file-upload-5.0.7.tgz",
-      "integrity": "sha512-cgWsWx7igxjyyVm9/VJ9ukdy69jL00I7z0lrwUWtXXLPvX4neO+8JAZ054Ax8Xf+mdV9OerenXzb9nqRoafjHA==",
-      "dev": true
+    "fsevents": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+      "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+      "optional": true
     }
   }
 }
diff --git a/package.json b/package.json
new file mode 100644
index 000000000..fe6c68ffa
--- /dev/null
+++ b/package.json
@@ -0,0 +1,5 @@
+{
+  "optionalDependencies": {
+    "fsevents": "^2.3.2"
+  }
+}
diff --git a/ui/package-lock.json b/ui/package-lock.json
index 3c374c9da..655c7ff2b 100644
--- a/ui/package-lock.json
+++ b/ui/package-lock.json
@@ -18,6 +18,7 @@
         "buefy": "^0.9.8",
         "chart.js": "^2.9.4",
         "core-js": "^3.17.1",
+        "fsevents": "2.3.2",
         "husky": "^6.0.0",
         "moment": "^2.29.3",
         "sortablejs": "^1.14.0",
@@ -50,7 +51,10 @@
         "vue-cli-plugin-buefy": "~0.3.8",
         "vue-cli-plugin-i18n": "^2.1.3",
         "vue-template-compiler": "^2.6.14",
-        "webpack": "^4.0.0"
+        "webpack": "^4.46.0"
+      },
+      "optionalDependencies": {
+        "fsevents": "^2.3.2"
       }
     },
     "node_modules/@ampproject/remapping": {
@@ -4425,6 +4429,15 @@
         "node": ">=8"
       }
     },
+    "node_modules/bindings": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
+      "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
+      "optional": true,
+      "dependencies": {
+        "file-uri-to-path": "1.0.0"
+      }
+    },
     "node_modules/blob-util": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz",
@@ -8402,6 +8415,12 @@
         "webpack": "^4.0.0"
       }
     },
+    "node_modules/file-uri-to-path": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
+      "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
+      "optional": true
+    },
     "node_modules/filesize": {
       "version": "3.6.1",
       "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
@@ -8680,6 +8699,19 @@
       "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
       "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
     },
+    "node_modules/fsevents": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+      "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+      "hasInstallScript": true,
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+      }
+    },
     "node_modules/function-bind": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
@@ -11600,7 +11632,7 @@
       "version": "2.15.0",
       "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz",
       "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==",
-      "dev": true
+      "devOptional": true
     },
     "node_modules/nanomatch": {
       "version": "1.2.13",
@@ -17628,6 +17660,24 @@
         "fsevents": "^1.2.7"
       }
     },
+    "node_modules/watchpack-chokidar2/node_modules/fsevents": {
+      "version": "1.2.13",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
+      "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
+      "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.",
+      "hasInstallScript": true,
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "dependencies": {
+        "bindings": "^1.5.0",
+        "nan": "^2.12.1"
+      },
+      "engines": {
+        "node": ">= 4.0"
+      }
+    },
     "node_modules/watchpack-chokidar2/node_modules/is-binary-path": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
@@ -17957,6 +18007,24 @@
         "node": ">=6"
       }
     },
+    "node_modules/webpack-dev-server/node_modules/fsevents": {
+      "version": "1.2.13",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
+      "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
+      "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.",
+      "hasInstallScript": true,
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "dependencies": {
+        "bindings": "^1.5.0",
+        "nan": "^2.12.1"
+      },
+      "engines": {
+        "node": ">= 4.0"
+      }
+    },
     "node_modules/webpack-dev-server/node_modules/http-proxy-middleware": {
       "version": "0.19.1",
       "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz",
@@ -22035,6 +22103,15 @@
       "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
       "optional": true
     },
+    "bindings": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
+      "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
+      "optional": true,
+      "requires": {
+        "file-uri-to-path": "1.0.0"
+      }
+    },
     "blob-util": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz",
@@ -25147,6 +25224,12 @@
         "schema-utils": "^2.5.0"
       }
     },
+    "file-uri-to-path": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
+      "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
+      "optional": true
+    },
     "filesize": {
       "version": "3.6.1",
       "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
@@ -25360,6 +25443,12 @@
       "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
       "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
     },
+    "fsevents": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+      "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+      "optional": true
+    },
     "function-bind": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
@@ -27588,7 +27677,7 @@
       "version": "2.15.0",
       "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz",
       "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==",
-      "dev": true
+      "devOptional": true
     },
     "nanomatch": {
       "version": "1.2.13",
@@ -32454,6 +32543,16 @@
             "upath": "^1.1.1"
           }
         },
+        "fsevents": {
+          "version": "1.2.13",
+          "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
+          "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
+          "optional": true,
+          "requires": {
+            "bindings": "^1.5.0",
+            "nan": "^2.12.1"
+          }
+        },
         "is-binary-path": {
           "version": "1.0.1",
           "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
@@ -32739,6 +32838,16 @@
             "locate-path": "^3.0.0"
           }
         },
+        "fsevents": {
+          "version": "1.2.13",
+          "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
+          "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
+          "optional": true,
+          "requires": {
+            "bindings": "^1.5.0",
+            "nan": "^2.12.1"
+          }
+        },
         "http-proxy-middleware": {
           "version": "0.19.1",
           "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz",
diff --git a/ui/package.json b/ui/package.json
index 937a6e36a..be9dca648 100644
--- a/ui/package.json
+++ b/ui/package.json
@@ -13,8 +13,8 @@
     "@cypress/vue": "^3.1.2",
     "@cypress/webpack-dev-server": "^1.8.4",
     "@fortawesome/fontawesome-svg-core": "^1.2.36",
-    "@fortawesome/free-regular-svg-icons": "^6.1.2",
     "@fortawesome/free-brands-svg-icons": "^6.1.1",
+    "@fortawesome/free-regular-svg-icons": "^6.1.2",
     "@fortawesome/free-solid-svg-icons": "^5.15.4",
     "@fortawesome/vue-fontawesome": "^2.0.2",
     "buefy": "^0.9.8",
@@ -64,5 +64,8 @@
       "eslint",
       "prettier --list-different"
     ]
+  },
+  "optionalDependencies": {
+    "fsevents": "^2.3.2"
   }
-}
\ No newline at end of file
+}
-- 
GitLab