Skip to content
Snippets Groups Projects
FeatureFetchOffsetRoute.vue 2.72 KiB
Newer Older
    :is="query && position >= 0 ? 'router-link' : 'span'"
      params: { slug },
      query,
    }"
  >
    {{ properties.title || featureId }}
  </router-link>
</template>

<script>

import { mapState } from 'vuex';
import axios from '@/axios-client.js';

import projectAPI from '@/services/project-api';

export default {

  name: 'FeatureFetchOffsetRoute',

  props: {
    featureId: {
      type: String,
      default: '',
    },
    properties: {
      type: Object,
      default: () => {},
      slug: this.$route.params.slug || this.properties.project_slug,
      ordering: null,
      filter: null,
      if (this.ordering) {

        const searchParams = { ordering: this.ordering };
        if (this.filter === 'feature_type_slug') { // when feature_type is the default filter of the project, 
          searchParams['feature_type_slug'] = this.properties.feature_type.slug; // get its slug for the current feature
        }
        if (this.position >= 0) {
          searchParams['offset'] = this.position; // get its slug for the current feature
        }
        return searchParams;
    async initData() {
      if (this.project) {
        this.setProjectParams(this.project);
      } else {
        await this.getProjectFilterAndSort();
      }
      this.getFeaturePosition(this.featureId)
        .then((position) => {
          if (position >= 0) {
            this.position = position;
          }
        })
        .catch((error) => {
          console.error(error);
        });
    },

    setProjectParams(project) {
      this.ordering = project.feature_browsing_default_sort;
      if (project.feature_browsing_default_filter === 'feature_type_slug') { // when feature_type is the default filter of the project, 
        this.filter = this.properties.feature_type.slug;
      }
    },

      const searchParams = new URLSearchParams(this.query);
      const response = await axios.get(`${this.$store.state.configuration.VUE_APP_DJANGO_API_BASE}projects/${this.slug}/feature/${featureId}/position-in-list/?${searchParams.toString()}`);
      if (response && response.status === 200) {
        return response.data;
      }
      return null;
    },

    async getProjectFilterAndSort() {
      const project = await projectAPI.getProject(this.$store.state.configuration.VUE_APP_DJANGO_API_BASE, this.slug);
      if (project) this.setProjectParams(project);
    }