aboutsummaryrefslogtreecommitdiffstats
path: root/src/utils/helpers/strings.ts
blob: b8af61d0b04a5bdd0398f2d3d1c9c419fa0b0472 (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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/**
 * Convert a text into a slug or id.
 * https://gist.github.com/codeguy/6684588#gistcomment-3332719
 *
 * @param {string} text - A text to slugify.
 * @returns {string} The slug.
 */
export const slugify = (text: string): string =>
  text
    .toString()
    .normalize('NFKD')
    .replace(/[\u0300-\u036f]/g, '')
    .toLowerCase()
    .trim()
    .replace(/\s+/g, '-')
    .replace(/[^\w-]+/g, '-')
    .replace(/--+/g, '-')
    .replace(/(?:^-)|(?:-$)/g, '');

/**
 * Capitalize the first letter of a string.
 *
 * @param {string} text - A text to capitalize.
 * @returns {string} The capitalized text.
 */
export const capitalize = (text: string): string =>
  text.replace(/^\w/, (firstLetter) => firstLetter.toUpperCase());

/**
 * Convert a text from kebab case (foo-bar) to camel case (fooBar).
 *
 * @param {string} text - A text to transform.
 * @returns {string} The text in camel case.
 */
export const fromKebabCaseToCamelCase = (text: string): string =>
  text.replace(/-./g, (x) => x[1].toUpperCase());

/**
 * Retrieve a valid data attribute from a string.
 *
 * @param {string} str - A string.
 * @returns {string} A data attribute (ie. `data-...`)
 */
export const getDataAttributeFrom = (str: string) => {
  if (str.startsWith('data-')) return str;
  return `data-${str}`;
};

/**
 * Remove the given character if present at the end of the given string.
 *
 * @param {string} str - A string to trim.
 * @param {string} char - The character to remove.
 * @returns {string} The trimmed string.
 */
export const trimTrailingChars = (str: string, char: string): string => {
  const regExp = new RegExp(`${char}+$`);

  return str.replace(regExp, '');
};