debian-mirror-gitlab/app/assets/javascripts/members/utils.js

132 lines
3.3 KiB
JavaScript
Raw Normal View History

2021-03-11 19:13:27 +05:30
import { isUndefined } from 'lodash';
2021-09-30 23:02:18 +05:30
import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils';
import { getParameterByName, setUrlParams } from '~/lib/utils/url_utility';
2021-03-11 19:13:27 +05:30
import { __ } from '~/locale';
import {
FIELDS,
DEFAULT_SORT,
GROUP_LINK_BASE_PROPERTY_NAME,
GROUP_LINK_ACCESS_LEVEL_PROPERTY_NAME,
} from './constants';
2021-02-22 17:27:13 +05:30
2021-04-17 20:07:23 +05:30
export const generateBadges = ({ member, isCurrentUser, canManageMembers }) => [
2021-02-22 17:27:13 +05:30
{
show: isCurrentUser,
text: __("It's you"),
variant: 'success',
},
{
show: member.user?.blocked,
text: __('Blocked'),
variant: 'danger',
},
{
2021-04-17 20:07:23 +05:30
show: member.user?.twoFactorEnabled && (canManageMembers || isCurrentUser),
2021-02-22 17:27:13 +05:30
text: __('2FA'),
variant: 'info',
},
];
2021-03-08 18:12:59 +05:30
export const isGroup = (member) => {
2021-02-22 17:27:13 +05:30
return Boolean(member.sharedWithGroup);
};
2021-03-11 19:13:27 +05:30
export const isDirectMember = (member) => {
2022-06-21 17:19:12 +05:30
return member.isDirectMember;
2021-02-22 17:27:13 +05:30
};
export const isCurrentUser = (member, currentUserId) => {
return member.user?.id === currentUserId;
};
2021-03-11 19:13:27 +05:30
export const canRemove = (member) => {
return isDirectMember(member) && member.canRemove;
2021-02-22 17:27:13 +05:30
};
2021-03-08 18:12:59 +05:30
export const canResend = (member) => {
2021-02-22 17:27:13 +05:30
return Boolean(member.invite?.canResend);
};
2021-03-11 19:13:27 +05:30
export const canUpdate = (member, currentUserId) => {
return !isCurrentUser(member, currentUserId) && isDirectMember(member) && member.canUpdate;
2021-02-22 17:27:13 +05:30
};
2021-03-08 18:12:59 +05:30
export const parseSortParam = (sortableFields) => {
2021-02-22 17:27:13 +05:30
const sortParam = getParameterByName('sort');
2021-03-08 18:12:59 +05:30
const sortedField = FIELDS.filter((field) => sortableFields.includes(field.key)).find(
(field) => field.sort?.asc === sortParam || field.sort?.desc === sortParam,
2021-02-22 17:27:13 +05:30
);
if (!sortedField) {
return DEFAULT_SORT;
}
return {
sortByKey: sortedField.key,
sortDesc: sortedField?.sort?.desc === sortParam,
};
};
export const buildSortHref = ({
sortBy,
sortDesc,
filteredSearchBarTokens,
filteredSearchBarSearchParam,
}) => {
2021-03-08 18:12:59 +05:30
const sortDefinition = FIELDS.find((field) => field.key === sortBy)?.sort;
2021-02-22 17:27:13 +05:30
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;
2021-03-11 19:13:27 +05:30
export const parseDataAttributes = (el) => {
2021-06-08 01:23:25 +05:30
const { membersData } = el.dataset;
2021-03-11 19:13:27 +05:30
2021-06-08 01:23:25 +05:30
return convertObjectPropsToCamelCase(JSON.parse(membersData), {
deep: true,
ignoreKeyNames: ['params'],
});
2021-03-11 19:13:27 +05:30
};
export const baseRequestFormatter = (basePropertyName, accessLevelPropertyName) => ({
accessLevel,
...otherProperties
}) => {
const accessLevelProperty = !isUndefined(accessLevel)
? { [accessLevelPropertyName]: accessLevel }
: {};
return {
[basePropertyName]: {
...accessLevelProperty,
...otherProperties,
},
};
};
export const groupLinkRequestFormatter = baseRequestFormatter(
GROUP_LINK_BASE_PROPERTY_NAME,
GROUP_LINK_ACCESS_LEVEL_PROPERTY_NAME,
);