Skip to content
Snippets Groups Projects
Select Git revision
  • Topic/1125-apiTokens
  • master default protected
  • gitkeep
  • Issue/2446-responsibleOrganizations
  • dev protected
  • Issue/2309-docs
  • Issue/2355-topLevelOrg
  • Issue/2412-gitlabDuplicatesinProjectQuotas
  • Issue/2287-guestRole
  • Issue/2364-testingKpiParser
  • Issue/2102-gitLabResTypeRCV
  • Issue/2278-gitlabToS
  • Issue/2284-dbLogIndex
  • Issue/5678-addingGuestRoleToRoles
  • Issue/2265-UpdatingS3EndpointUDE
  • Issue/XXXX-testingMigrationsTimestamp
  • Issue/2101-gitLabResTypeUi
  • Issue/1788-extractionCronjob
  • Issue/2222-resourceDateCreated
  • Issue/2221-projectDateCreated
  • Issue/1321-pidEnquiryOverhaul
  • v2.20.1
  • v2.20.0
  • v2.19.0
  • v2.18.0
  • v2.17.0
  • v2.16.0
  • v2.15.0
  • v2.14.0
  • v2.13.0
  • v2.12.0
  • v2.11.0
  • v2.10.0
  • v2.9.0
  • v2.8.0
  • v2.7.0
  • v2.6.0
  • v2.5.0
  • v2.4.0
  • v2.3.0
  • v2.2.1
41 results

build.sh

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>