All files / app/assets/javascripts/environments/mixins environments_pagination_api_mixin.js

52.63% Statements 10/19
50% Branches 2/4
60% Functions 3/5
52.63% Lines 10/19

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69                      1x       1x           1x   1x         3x         3x 3x     3x   3x       4x                                                  
/**
 * API callbacks for pagination and tabs
 *
 * Components need to have `scope`, `page` and `requestData`
 */
import { validateParams } from '~/ci/pipeline_details/utils';
import { historyPushState, buildUrlWithCurrentLocation } from '~/lib/utils/common_utils';
 
export default {
  methods: {
    onChangeTab(scope) {
      Iif (this.scope === scope) {
        return;
      }
 
      let params = {
        scope,
        page: '1',
        nested: true,
      };
 
      params = this.onChangeWithFilter(params);
 
      this.updateContent(params);
    },
 
    onChangePage(page) {
      /* URLS parameters are strings, we need to parse to match types */
      let params = {
        page: Number(page).toString(),
        nested: true,
      };
 
      Eif (this.scope) {
        params.scope = this.scope;
      }
 
      params = this.onChangeWithFilter(params);
 
      this.updateContent(params);
    },
 
    onChangeWithFilter(params) {
      return { ...params, ...validateParams(this.requestData) };
    },
 
    updateInternalState(parameters) {
      // stop polling
      this.poll.stop();
 
      const queryString = Object.keys(parameters)
        .map((parameter) => {
          const value = parameters[parameter];
          // update internal state for UI
          this[parameter] = value;
          return `${parameter}=${encodeURIComponent(value)}`;
        })
        .join('&');
 
      // update polling parameters
      this.requestData = parameters;
 
      historyPushState(buildUrlWithCurrentLocation(`?${queryString}`));
 
      this.isLoading = true;
    },
  },
};