Skip to content
Snippets Groups Projects
Select Git revision
  • master
  • gitkeep
  • dev protected
  • Issue/2072-wormResourceType
  • Sprint/2022-05
  • Issue/2001-extendAnalyticsLogger
  • Issue/1799-APCreationOptionOnResourceCreation
  • Issue/1913-ModificationsResourceMetadata
  • Issue/1870-publicPrivateVisibility
  • Sprint/2022-01
  • Issue/1804-fixedValueFix
  • Sprint/2021-22
  • Issue/43-saveButton
  • Issue/1762-renamingResourceTypes
  • Hotfix/64-releaseUDE
  • Sprint/2021-16
  • Product/1666-removeRadioButtons
  • Topic/1686-removeRadioButtons
  • Sprint/2021-14
  • Sprint/2021-12
  • v1.23.1
  • v1.23.0
  • v1.22.0
  • v1.21.0
  • v1.20.0
  • v1.19.0
  • v1.18.1
  • v1.18.0
  • v1.17.6
  • v1.17.5
  • v1.17.4
  • v1.17.3
  • v1.17.2
  • v1.17.1
  • v1.17.0
  • v1.16.1
  • v1.16.0
  • v1.15.1
  • v1.15.0
  • v1.14.1
40 results

Setup.vue

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    Setup.vue 5.95 KiB
    <template>
      <div class="setup">
        <div
          id="validationErrorMessage"
          class="alert alert-danger"
          role="alert"
          v-if="validationError"
        >
          {{ $t("validationErrorMessage") }}
        </div>
        <div v-if="resourceTypes.length > 0">
          <coscine-form-group
            :mandatory="true"
            labelFor="ResourceTypes"
            :label="$t('resourceTypesLabel')"
          >
            <multiselect
              v-if="resourceTypes.length > 1"
              id="ResourceTypes"
              v-model="selectedResourceType"
              :options="resourceTypes"
              @input="retrieveFields"
              :multiple="false"
              :hide-selected="false"
              label="iDisplayName"
              track-by="iDisplayName"
              :placeholder="$t('MultiselectPlaceholderResourceType')"
              select-label=""
              selected-label=""
              deselect-label=""
            >
              <span slot="noResult">{{ $t("MultiselectNoResults") }}</span>
              <span slot="noOptions">{{ $t("MultiselectNoOptions") }}</span>
            </multiselect>
            <b-input
              v-else-if="resourceTypes.length === 1"
              id="ResourceType"
              v-model="selectedResourceType.iDisplayName"
              disabled
            >
            </b-input>
          </coscine-form-group>
          <coscine-form-group
            v-if="selectedResourceType !== null"
            :label="selectedResourceType.iFullName"
          >
            <p>{{ selectedResourceType.iDescription }}</p>
          </coscine-form-group>
        </div>
        <SetupPage
          v-if="
            selectedResourceType !== null &&
            selectedResourceType.displayName !== undefined
          "
          ref="setupSubPage"
          :isProjectOwner="isProjectOwner"
          :finishedLoadingResourceTypes="finishedLoadingResourceTypes"
          :projectId="projectId"
          :resource="resource"
          :formFields="
            this.selectedResourceTypeInformation.resourceCreate.components[0]
          "
          :sliderValue="sliderValue"
          :selectedResourceType="selectedResourceType"
          @waitingForResponse="setWaitingForResponse"
          @sliderValChange="setSliderValue"
        />
        <div @mouseenter="showPopover">
          <b-button
            id="button-enabledPopover"
            @click.prevent="validateAndProceed"
            class="float-right"
            variant="outline-primary"
            :disabled="sliderValue <= 0 || selectedResourceType === null"
            >{{ $t("next") }}
          </b-button>
          <b-popover ref="popover" target="button-enabledPopover" placement="top">
            <template v-slot:title>{{ $t("popoverHeader") }}</template>
            {{ $t("popoverContent") }}
            <b-link :href="quotaLink">{{ $t("needMore") }}</b-link>
          </b-popover>
        </div>
      </div>
    </template>
    
    <script lang="ts">
    import Vue from "vue";
    import { BlobApi, ProjectApi, ResourceTypeApi } from "@coscine/api-connection";
    import { GuidUtil, LinkUtil } from "@coscine/app-util";
    import { CoscineFormGroup } from "@coscine/component-library";
    import "@coscine/component-library/dist/index.css";
    
    import SetupPage from "./Setup/SetupPage.vue";
    
    import Multiselect from "vue-multiselect";
    import "vue-multiselect/dist/vue-multiselect.min.css";
    Vue.component("multiselect", Multiselect);
    
    export default Vue.extend({
      name: "Setup",
      components: {
        SetupPage,
        CoscineFormGroup,
      },
      data() {
        return {
          quotaLink: LinkUtil.getProjectLink("QuotaManagement"),
          sliderValue: 1,
          validationError: false,
          selectedResourceType: {} as any,
        };
      },
      methods: {
        showPopover() {
          if (this.sliderValue <= 0 && this.resourceTypeHasSize()) {
            (this as any).$refs.popover.$emit("open");
            setTimeout(() => {
              (this as any).$refs.popover.$emit("close");
            }, 5000);
          }
        },
        setSliderValue(val: any) {
          this.sliderValue = val;
          this.resource.resourceTypeOption["Size"] = this.sliderValue;
        },
        getComponentsLength() {
          if (
            this.selectedResourceTypeInformation === undefined ||
            this.selectedResourceTypeInformation.resourceCreate === undefined ||
            this.selectedResourceTypeInformation.resourceCreate.components ===
              undefined ||
            this.selectedResourceTypeInformation.resourceCreate.components[0] ===
              undefined
          ) {
            return -1;
          }
          return this.selectedResourceTypeInformation.resourceCreate.components[0]
            .length;
        },
        resourceTypeHasSize() {
          if (this.getComponentsLength() > 0) {
            for (const field of this.selectedResourceTypeInformation.resourceCreate
              .components[0]) {
              if (field === "Size") {
                return true;
              }
            }
          }
          return false;
        },
        next() {
          this.$emit("next");
        },
        setWaitingForResponse(newIsWaitingForResponse: boolean) {
          this.$emit("waitingForResponse", newIsWaitingForResponse);
        },
        validateAndProceed() {
          if (
            this.$refs.setupSubPage !== undefined &&
            (this.$refs.setupSubPage as any).validateResource()
          ) {
            this.validationError = false;
            this.$emit("next");
          } else {
            this.validationError = true;
          }
        },
        retrieveFields(resourceType: any) {
          if (GuidUtil.isValidGuid(resourceType.id)) {
            this.$emit("setSelectedResourceTypeInformation", resourceType);
          }
        },
        getResourceTypeInformation(id: string): any {
          for (const resourceTypeInformation of this.resourceTypes) {
            if ((resourceTypeInformation as any).id === id) {
              return resourceTypeInformation;
            }
          }
        },
        init() {
          this.selectedResourceType = null;
        },
      },
      props: {
        resource: Object,
        resourceTypes: Array,
        isProjectOwner: Boolean,
        isWaitingForResponse: Boolean,
        finishedLoadingResourceTypes: Boolean,
        projectId: String,
        selectedResourceTypeInformation: Object,
      },
      watch: {
        finishedLoadingResourceTypes() {
          this.init();
        },
      },
      mounted() {
        this.init();
      },
    });
    </script>
    
    <style scoped>
    #validationErrorMessage {
      margin-left: 1em;
      margin-right: 1em;
    }
    </style>