summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/groups/members/utils.js
blob: 662eecc4e38dc1061b238979cf0be6a37213768c (plain)
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
import { isUndefined } from 'lodash';
import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils';
import {
  GROUP_MEMBER_BASE_PROPERTY_NAME,
  GROUP_MEMBER_ACCESS_LEVEL_PROPERTY_NAME,
  GROUP_LINK_BASE_PROPERTY_NAME,
  GROUP_LINK_ACCESS_LEVEL_PROPERTY_NAME,
} from './constants';

export const parseDataAttributes = el => {
  const { members, groupId, memberPath } = el.dataset;

  return {
    members: convertObjectPropsToCamelCase(JSON.parse(members), { deep: true }),
    sourceId: parseInt(groupId, 10),
    memberPath,
  };
};

const baseRequestFormatter = (basePropertyName, accessLevelPropertyName) => ({
  accessLevel,
  ...otherProperties
}) => {
  const accessLevelProperty = !isUndefined(accessLevel)
    ? { [accessLevelPropertyName]: accessLevel }
    : {};

  return {
    [basePropertyName]: {
      ...accessLevelProperty,
      ...otherProperties,
    },
  };
};

export const memberRequestFormatter = baseRequestFormatter(
  GROUP_MEMBER_BASE_PROPERTY_NAME,
  GROUP_MEMBER_ACCESS_LEVEL_PROPERTY_NAME,
);

export const groupLinkRequestFormatter = baseRequestFormatter(
  GROUP_LINK_BASE_PROPERTY_NAME,
  GROUP_LINK_ACCESS_LEVEL_PROPERTY_NAME,
);