Passed
Push — feature/timeline-profile ( c196be...6a324d )
by Tristan
08:11
created

progressHelpers.ts ➔ makeProgressBarSteps   B

Complexity

Conditions 3

Size

Total Lines 73
Code Lines 60

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 60
dl 0
loc 73
rs 8.309
c 0
b 0
f 0
cc 3

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
import { IntlShape } from "react-intl";
2
import { ProgressBarProps, stepNames } from "./ProgressBar";
3
import {
4
  applicationBasic,
5
  applicationFit,
6
  applicationReview,
7
  applicationSubmission,
8
  applicationExperience,
9
  applicationSkills,
10
} from "../../../helpers/routes";
11
import { getLocale } from "../../../helpers/localize";
12
import {
13
  ApplicationStep,
14
  ProgressBarStatus,
15
} from "../../../models/lookupConstants";
16
17
export function makeProgressBarSteps(
18
  applicationId: number,
19
  steps: { [step in ApplicationStep]: ProgressBarStatus },
20
  intl: IntlShape,
21
  currentStep:
22
    | "welcome"
23
    | "basic"
24
    | "experience"
25
    | "skills"
26
    | "fit"
27
    | "review"
28
    | "submission"
29
    | "other",
30
  stepsUpdateInProgress: boolean,
31
): ProgressBarProps["steps"] {
32
  const locale = getLocale(intl.locale);
33
  const makeStatus = (step: ApplicationStep): ProgressBarStatus => {
34
    // eslint-disable-next-line no-nested-ternary
35
    return step === currentStep
36
      ? "current"
37
      : steps[step] !== "default" && stepsUpdateInProgress
38
      ? "loading"
39
      : steps[step];
40
  };
41
  return [
42
    {
43
      link: {
44
        url: applicationBasic(locale, applicationId),
45
        text: intl.formatMessage(stepNames.step01),
46
        title: intl.formatMessage(stepNames.step01),
47
      },
48
      status: makeStatus("basic"),
49
    },
50
    {
51
      link: {
52
        url: applicationExperience(locale, applicationId),
53
        text: intl.formatMessage(stepNames.step02),
54
        title: intl.formatMessage(stepNames.step02),
55
      },
56
      status: makeStatus("experience"),
57
    },
58
    {
59
      link: {
60
        url: applicationSkills(locale, applicationId),
61
        text: intl.formatMessage(stepNames.step03),
62
        title: intl.formatMessage(stepNames.step03),
63
      },
64
      status: makeStatus("skills"),
65
    },
66
    {
67
      link: {
68
        url: applicationFit(locale, applicationId),
69
        text: intl.formatMessage(stepNames.step04),
70
        title: intl.formatMessage(stepNames.step04),
71
      },
72
      status: makeStatus("fit"),
73
    },
74
    {
75
      link: {
76
        url: applicationReview(locale, applicationId),
77
        text: intl.formatMessage(stepNames.step05),
78
        title: intl.formatMessage(stepNames.step05),
79
      },
80
      status: makeStatus("review"),
81
    },
82
    {
83
      link: {
84
        url: applicationSubmission(locale, applicationId),
85
        text: intl.formatMessage(stepNames.step06),
86
        title: intl.formatMessage(stepNames.step06),
87
      },
88
      status: makeStatus("submission"),
89
    },
90
  ];
91
}
92
93
export default makeProgressBarSteps;
94