72 lines
2.0 KiB
JavaScript
72 lines
2.0 KiB
JavaScript
import dateFormat from 'dateformat';
|
|
import { urlQueryToFilter } from '~/vue_shared/components/filtered_search_bar/filtered_search_utils';
|
|
import { dateFormats } from './constants';
|
|
|
|
export const filterBySearchTerm = (data = [], searchTerm = '', filterByKey = 'name') => {
|
|
if (!searchTerm?.length) return data;
|
|
return data.filter((item) => item[filterByKey].toLowerCase().includes(searchTerm.toLowerCase()));
|
|
};
|
|
|
|
export const toYmd = (date) => dateFormat(date, dateFormats.isoDate);
|
|
|
|
/**
|
|
* Takes a url and extracts query parameters used for the shared
|
|
* filter bar
|
|
*
|
|
* @param {string} url The URL to extract query parameters from
|
|
* @returns {Object}
|
|
*/
|
|
export const extractFilterQueryParameters = (url = '') => {
|
|
const {
|
|
source_branch_name = null,
|
|
target_branch_name = null,
|
|
author_username = null,
|
|
milestone_title = null,
|
|
assignee_username = [],
|
|
label_name = [],
|
|
} = urlQueryToFilter(url);
|
|
|
|
return {
|
|
selectedSourceBranch: source_branch_name,
|
|
selectedTargetBranch: target_branch_name,
|
|
selectedAuthor: author_username,
|
|
selectedMilestone: milestone_title,
|
|
selectedAssigneeList: assignee_username,
|
|
selectedLabelList: label_name,
|
|
};
|
|
};
|
|
|
|
/**
|
|
* Takes a url and extracts sorting and pagination query parameters into an object
|
|
*
|
|
* @param {string} url The URL to extract query parameters from
|
|
* @returns {Object}
|
|
*/
|
|
export const extractPaginationQueryParameters = (url = '') => {
|
|
const { sort, direction, page } = urlQueryToFilter(url);
|
|
return {
|
|
sort: sort?.value || null,
|
|
direction: direction?.value || null,
|
|
page: page?.value || null,
|
|
};
|
|
};
|
|
|
|
export const getDataZoomOption = ({
|
|
totalItems = 0,
|
|
maxItemsPerPage = 40,
|
|
dataZoom = [{ type: 'slider', bottom: 10, start: 0 }],
|
|
}) => {
|
|
if (totalItems <= maxItemsPerPage) {
|
|
return {};
|
|
}
|
|
|
|
const intervalEnd = Math.ceil((maxItemsPerPage / totalItems) * 100);
|
|
|
|
return dataZoom.map((item) => {
|
|
return {
|
|
...item,
|
|
end: intervalEnd,
|
|
};
|
|
});
|
|
};
|