98 lines
2.5 KiB
JavaScript
98 lines
2.5 KiB
JavaScript
|
import { __ } from '~/locale';
|
||
|
import { getParameterByName } from '~/lib/utils/common_utils';
|
||
|
import { setUrlParams } from '~/lib/utils/url_utility';
|
||
|
import { FIELDS, DEFAULT_SORT } from './constants';
|
||
|
|
||
|
export const generateBadges = (member, isCurrentUser) => [
|
||
|
{
|
||
|
show: isCurrentUser,
|
||
|
text: __("It's you"),
|
||
|
variant: 'success',
|
||
|
},
|
||
|
{
|
||
|
show: member.user?.blocked,
|
||
|
text: __('Blocked'),
|
||
|
variant: 'danger',
|
||
|
},
|
||
|
{
|
||
|
show: member.user?.twoFactorEnabled,
|
||
|
text: __('2FA'),
|
||
|
variant: 'info',
|
||
|
},
|
||
|
];
|
||
|
|
||
|
export const isGroup = member => {
|
||
|
return Boolean(member.sharedWithGroup);
|
||
|
};
|
||
|
|
||
|
export const isDirectMember = (member, sourceId) => {
|
||
|
return isGroup(member) || member.source?.id === sourceId;
|
||
|
};
|
||
|
|
||
|
export const isCurrentUser = (member, currentUserId) => {
|
||
|
return member.user?.id === currentUserId;
|
||
|
};
|
||
|
|
||
|
export const canRemove = (member, sourceId) => {
|
||
|
return isDirectMember(member, sourceId) && member.canRemove;
|
||
|
};
|
||
|
|
||
|
export const canResend = member => {
|
||
|
return Boolean(member.invite?.canResend);
|
||
|
};
|
||
|
|
||
|
export const canUpdate = (member, currentUserId, sourceId) => {
|
||
|
return (
|
||
|
!isCurrentUser(member, currentUserId) && isDirectMember(member, sourceId) && member.canUpdate
|
||
|
);
|
||
|
};
|
||
|
|
||
|
export const parseSortParam = sortableFields => {
|
||
|
const sortParam = getParameterByName('sort');
|
||
|
|
||
|
const sortedField = FIELDS.filter(field => sortableFields.includes(field.key)).find(
|
||
|
field => field.sort?.asc === sortParam || field.sort?.desc === sortParam,
|
||
|
);
|
||
|
|
||
|
if (!sortedField) {
|
||
|
return DEFAULT_SORT;
|
||
|
}
|
||
|
|
||
|
return {
|
||
|
sortByKey: sortedField.key,
|
||
|
sortDesc: sortedField?.sort?.desc === sortParam,
|
||
|
};
|
||
|
};
|
||
|
|
||
|
export const buildSortHref = ({
|
||
|
sortBy,
|
||
|
sortDesc,
|
||
|
filteredSearchBarTokens,
|
||
|
filteredSearchBarSearchParam,
|
||
|
}) => {
|
||
|
const sortDefinition = FIELDS.find(field => field.key === sortBy)?.sort;
|
||
|
|
||
|
if (!sortDefinition) {
|
||
|
return '';
|
||
|
}
|
||
|
|
||
|
const sortParam = sortDesc ? sortDefinition.desc : sortDefinition.asc;
|
||
|
|
||
|
const filterParams =
|
||
|
filteredSearchBarTokens?.reduce((accumulator, token) => {
|
||
|
return {
|
||
|
...accumulator,
|
||
|
[token]: getParameterByName(token),
|
||
|
};
|
||
|
}, {}) || {};
|
||
|
|
||
|
if (filteredSearchBarSearchParam) {
|
||
|
filterParams[filteredSearchBarSearchParam] = getParameterByName(filteredSearchBarSearchParam);
|
||
|
}
|
||
|
|
||
|
return setUrlParams({ ...filterParams, sort: sortParam }, window.location.href, true);
|
||
|
};
|
||
|
|
||
|
// Defined in `ee/app/assets/javascripts/vue_shared/components/members/utils.js`
|
||
|
export const canOverride = () => false;
|