@lysaab/lysa-pep 1.0.0 → 1.0.2-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/.vscode/settings.json +4 -0
  2. package/lib/Exports.d.ts +7 -8
  3. package/lib/Exports.js +7 -8
  4. package/lib/components/CountrySelect.d.ts +15 -22
  5. package/lib/components/CountrySelect.js +30 -21
  6. package/lib/components/PepAnswers.d.ts +8 -8
  7. package/lib/components/PepAnswers.js +131 -39
  8. package/lib/components/PepAnswers.scss +7 -7
  9. package/lib/model/Countries.d.ts +4 -4
  10. package/lib/model/Countries.js +1002 -1002
  11. package/lib/model/PepModel.d.ts +7 -7
  12. package/lib/model/PepModel.js +40 -40
  13. package/lib/model/PepTexts.d.ts +322 -380
  14. package/lib/model/PepTexts.js +467 -552
  15. package/lib/pages/IsPep/IsPepMessages.d.ts +32 -0
  16. package/lib/pages/IsPep/IsPepMessages.js +66 -0
  17. package/lib/pages/IsPep/IsPepPage.d.ts +14 -0
  18. package/lib/pages/IsPep/IsPepPage.js +59 -0
  19. package/lib/pages/PepContext.d.ts +80 -80
  20. package/lib/pages/PepContext.js +88 -88
  21. package/lib/pages/PepIsPepPage.d.ts +6 -15
  22. package/lib/pages/PepIsPepPage.js +57 -59
  23. package/lib/pages/PepRelationPage.d.ts +6 -6
  24. package/lib/pages/PepRelationPage.js +83 -79
  25. package/lib/pages/PepRolePage.d.ts +9 -10
  26. package/lib/pages/PepRolePage.js +127 -127
  27. package/lib/pages/PepStatusPage.d.ts +6 -6
  28. package/lib/pages/PepStatusPage.js +57 -58
  29. package/lib/pages/RelationPage/RelationMessages.d.ts +105 -0
  30. package/lib/pages/RelationPage/RelationMessages.js +283 -0
  31. package/lib/pages/RelationPage/RelationPage.d.ts +6 -0
  32. package/lib/pages/RelationPage/RelationPage.js +153 -0
  33. package/lib/pages/RolePage/RoleMessages.d.ts +185 -0
  34. package/lib/pages/RolePage/RoleMessages.js +385 -0
  35. package/lib/pages/RolePage/RolePage.d.ts +11 -0
  36. package/lib/pages/RolePage/RolePage.js +220 -0
  37. package/lib/pages/StatusPage/StatusMessages.d.ts +72 -0
  38. package/lib/pages/StatusPage/StatusMessages.js +266 -0
  39. package/lib/pages/StatusPage/StatusPage.d.ts +6 -0
  40. package/lib/pages/StatusPage/StatusPage.js +95 -0
  41. package/lib/utils/Possession.d.ts +1 -0
  42. package/lib/utils/Possession.js +18 -0
  43. package/package.json +57 -53
  44. package/src/Exports.ts +12 -13
  45. package/src/components/CountrySelect.tsx +47 -43
  46. package/src/components/PepAnswers.scss +7 -7
  47. package/src/components/PepAnswers.tsx +252 -120
  48. package/src/demo/Done.tsx +16 -20
  49. package/src/demo/Pep.tsx +112 -106
  50. package/src/model/PepModel.ts +52 -52
  51. package/src/pages/IsPep/IsPepMessages.ts +67 -0
  52. package/src/pages/IsPep/IsPepPage.tsx +114 -0
  53. package/src/pages/PepContext.tsx +144 -144
  54. package/src/pages/RelationPage/RelationMessages.ts +288 -0
  55. package/src/pages/RelationPage/RelationPage.tsx +299 -0
  56. package/src/pages/RolePage/RoleMessages.ts +393 -0
  57. package/src/pages/RolePage/RolePage.tsx +356 -0
  58. package/src/pages/StatusPage/StatusMessages.ts +272 -0
  59. package/src/pages/StatusPage/StatusPage.tsx +207 -0
  60. package/src/utils/Possession.ts +21 -0
  61. package/src/model/PepTexts.ts +0 -607
  62. package/src/pages/PepIsPepPage.tsx +0 -107
  63. package/src/pages/PepRelationPage.tsx +0 -188
  64. package/src/pages/PepRolePage.tsx +0 -272
  65. package/src/pages/PepStatusPage.tsx +0 -157
@@ -0,0 +1,207 @@
1
+ import React, {
2
+ FunctionComponent,
3
+ useRef,
4
+ useCallback,
5
+ useContext,
6
+ } from "react";
7
+ import {
8
+ Form,
9
+ RadioGroup,
10
+ RequiredValidator,
11
+ PrimaryButton,
12
+ LysaFormRef,
13
+ Datepicker,
14
+ } from "@lysaab/ui-2";
15
+ import { Alternative } from "@lysaab/ui-2/components/input/InputAPI";
16
+ import { PepContext, PepStatus, EntityType, PepType } from "../PepContext";
17
+ import { CountrySelect } from "../../components/CountrySelect";
18
+ import { useIntl, FormattedMessage, IntlShape } from "react-intl";
19
+ import {
20
+ isOngoingMessages,
21
+ endedMessages,
22
+ isLocalCountryMessages,
23
+ countrySelectionMessages,
24
+ localCountryAltMessages,
25
+ stateAltMessages,
26
+ } from "./StatusMessages";
27
+ import { formatPossessive } from "../../utils/Possession";
28
+
29
+ interface Props {
30
+ next: () => void;
31
+ }
32
+
33
+ export const StatusPage: FunctionComponent<Props> = ({ next }) => {
34
+ const pepContext = useContext(PepContext);
35
+ const formRef = useRef<LysaFormRef>();
36
+ const intl = useIntl();
37
+ const stateAlternatives = getStateAlternatives(intl);
38
+ const isSwedenAlternatives = getIsLocalCountryAlternatives(intl);
39
+ const entityType = pepContext.state.legalEntityType || EntityType.PERSON;
40
+
41
+ const nextPage = useCallback(() => {
42
+ if (formRef.current && formRef.current.isValid) {
43
+ next();
44
+ }
45
+ }, [formRef, next]);
46
+
47
+ const updateIsSweden = useCallback(
48
+ (alternative: Alternative<string>) => {
49
+ pepContext.setState({ isSweden: alternative.value });
50
+
51
+ if (alternative.value === "other") {
52
+ pepContext.setState({ country: undefined });
53
+ }
54
+ },
55
+ [pepContext]
56
+ );
57
+
58
+ const updateIsOngoing = useCallback(
59
+ (alternative: Alternative<PepStatus>) => {
60
+ pepContext.setState({ isOngoing: alternative.value });
61
+
62
+ if (alternative.value === PepStatus.ONGOING) {
63
+ pepContext.setState({ ended: undefined });
64
+ }
65
+ },
66
+ [pepContext]
67
+ );
68
+
69
+ return (
70
+ <div>
71
+ <Form
72
+ lysaFormRef={formRef}
73
+ onSubmit={() => {
74
+ nextPage();
75
+ }}
76
+ >
77
+ <RadioGroup
78
+ alternatives={stateAlternatives}
79
+ header={intl.formatMessage(isOngoingMessages.header, {
80
+ entityType,
81
+ name: pepContext.state.ownerName,
82
+ possessiveName: formatPossessive(
83
+ pepContext.state.ownerName,
84
+ intl.locale
85
+ ),
86
+ relation:
87
+ pepContext.state.type === PepType.COLLEAGUE
88
+ ? pepContext.state.businessRelation
89
+ : pepContext.state.relationToPEP,
90
+ pepType: pepContext.state.type,
91
+ })}
92
+ onChange={updateIsOngoing}
93
+ value={stateAlternatives.find(
94
+ (alt) => alt.value === pepContext.state.isOngoing
95
+ )}
96
+ validators={[
97
+ new RequiredValidator(
98
+ intl.formatMessage(isOngoingMessages.required)
99
+ ),
100
+ ]}
101
+ />
102
+
103
+ {pepContext.state.isOngoing &&
104
+ pepContext.state.isOngoing === PepStatus.ENDED ? (
105
+ <Datepicker
106
+ label={intl.formatMessage(endedMessages.header)}
107
+ selected={pepContext.state.ended}
108
+ onChange={(event) =>
109
+ pepContext.setState({ ended: event || undefined })
110
+ }
111
+ validators={[
112
+ new RequiredValidator(
113
+ intl.formatMessage(isOngoingMessages.required)
114
+ ),
115
+ ]}
116
+ showMonthYearPicker
117
+ dateFormat="yyyy-MM"
118
+ maxDate={new Date()}
119
+ />
120
+ ) : null}
121
+
122
+ <RadioGroup
123
+ alternatives={isSwedenAlternatives}
124
+ header={intl.formatMessage(isLocalCountryMessages.header, {
125
+ possessiveName: formatPossessive(
126
+ pepContext.state.ownerName,
127
+ intl.locale
128
+ ),
129
+ })}
130
+ onChange={updateIsSweden}
131
+ value={isSwedenAlternatives.find(
132
+ (alt) => alt.value === pepContext.state.isSweden
133
+ )}
134
+ validators={[
135
+ new RequiredValidator(
136
+ intl.formatMessage(isLocalCountryMessages.required)
137
+ ),
138
+ ]}
139
+ />
140
+
141
+ {pepContext.state.isSweden && pepContext.state.isSweden === "other" ? (
142
+ <CountrySelect
143
+ label={intl.formatMessage(countrySelectionMessages.header, {
144
+ entityType,
145
+ name: pepContext.state.ownerName,
146
+ possessiveName: formatPossessive(
147
+ pepContext.state.ownerName,
148
+ intl.locale
149
+ ),
150
+ relation:
151
+ pepContext.state.type === PepType.COLLEAGUE
152
+ ? pepContext.state.businessRelation
153
+ : pepContext.state.relationToPEP,
154
+ pepType: pepContext.state.type,
155
+ })}
156
+ onChange={(event) =>
157
+ pepContext.setState({
158
+ country: event.value ? event.value.toString() : undefined,
159
+ })
160
+ }
161
+ validators={[
162
+ new RequiredValidator(
163
+ intl.formatMessage(countrySelectionMessages.required)
164
+ ),
165
+ ]}
166
+ value={pepContext.state.country}
167
+ omitCountries={["SE"]}
168
+ />
169
+ ) : null}
170
+
171
+ <PrimaryButton type="submit">
172
+ <FormattedMessage
173
+ id="pep.status.next"
174
+ description="Next button"
175
+ defaultMessage="Gå vidare"
176
+ />
177
+ </PrimaryButton>
178
+ </Form>
179
+ </div>
180
+ );
181
+ };
182
+
183
+ function getIsLocalCountryAlternatives(intl: IntlShape): Alternative<string>[] {
184
+ return [
185
+ {
186
+ text: intl.formatMessage(localCountryAltMessages.localCountry),
187
+ value: "sweden",
188
+ },
189
+ {
190
+ text: intl.formatMessage(localCountryAltMessages.otherCountry),
191
+ value: "other",
192
+ },
193
+ ];
194
+ }
195
+
196
+ function getStateAlternatives(intl: IntlShape): Alternative<PepStatus>[] {
197
+ return [
198
+ {
199
+ text: intl.formatMessage(stateAltMessages[PepStatus.ONGOING]),
200
+ value: PepStatus.ONGOING,
201
+ },
202
+ {
203
+ text: intl.formatMessage(stateAltMessages[PepStatus.ENDED]),
204
+ value: PepStatus.ENDED,
205
+ },
206
+ ];
207
+ }
@@ -0,0 +1,21 @@
1
+ export function formatPossessive(text: string | undefined, locale: string) {
2
+ if (!text) {
3
+ return;
4
+ }
5
+ const language = locale.substr(0, 2);
6
+ if (language === "sv") {
7
+ return formatSwedish(text);
8
+ }
9
+ return text;
10
+ }
11
+
12
+ function formatSwedish(text: string) {
13
+ if (
14
+ text[text.length - 1] !== "s" &&
15
+ text[text.length - 1] !== "z" &&
16
+ text[text.length - 1] !== "x"
17
+ ) {
18
+ text += "s";
19
+ }
20
+ return text;
21
+ }