@griddo/ax 10.1.96 → 10.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 (201) hide show
  1. package/package.json +3 -2
  2. package/src/__mocks__/axios/Roles.ts +10 -0
  3. package/src/__mocks__/axios/UserList.ts +545 -0
  4. package/src/__mocks__/store/GenericStore.ts +25 -0
  5. package/src/__mocks__/store/Roles.ts +1050 -0
  6. package/src/__mocks__/store/SitesList.ts +7 -1
  7. package/src/__mocks__/store/UserList.ts +482 -0
  8. package/src/__mocks__/store/UsersCreate.ts +298 -0
  9. package/src/__tests__/components/Avatar/Avatar.test.tsx +49 -48
  10. package/src/__tests__/components/ConfigPanel/ConfigPanel.test.tsx +2 -0
  11. package/src/__tests__/components/ConfigPanel/Form/Form.test.tsx +2 -0
  12. package/src/__tests__/components/ConfigPanel/GlobalPageForm/GlobalPageForm.test.tsx +25 -0
  13. package/src/__tests__/components/Fields/Button/Button.test.tsx +2 -2
  14. package/src/__tests__/components/Fields/ImageField/ImageField.test.tsx +2 -0
  15. package/src/__tests__/components/Fields/IntegrationsField/IntegrationsField.test.tsx +44 -2
  16. package/src/__tests__/components/Fields/Tooltip/Tooltip.test.tsx +0 -1
  17. package/src/__tests__/components/Gallery/Gallery.test.tsx +4 -0
  18. package/src/__tests__/components/Gallery/GalleryPanel/DetailPanel/DetailPanel.test.tsx +14 -0
  19. package/src/__tests__/components/Gallery/GalleryPanel/GalleryPanel.test.tsx +2 -1
  20. package/src/__tests__/components/Lists/Lists.test.tsx +3 -3
  21. package/src/__tests__/components/Login/Login.test.tsx +1 -1
  22. package/src/__tests__/components/TableFilters/DateFilter/DateFilter.test.tsx +1 -1
  23. package/src/__tests__/components/TableFilters/NameFilter/NameFilter.test.tsx +1 -1
  24. package/src/__tests__/components/TableFilters/RoleFilter/RoleFilter.test.tsx +165 -0
  25. package/src/__tests__/components/TableFilters/StatusFilter/StatusFilter.test.tsx +2 -2
  26. package/src/__tests__/components/TableFilters/UsersFilter/UsersFilter.test.tsx +153 -0
  27. package/src/__tests__/components/Tabs/Tabs.test.tsx +1 -1
  28. package/src/__tests__/modules/Settings/Integrations/Integrations.test.tsx +6 -0
  29. package/src/__tests__/modules/Sites/Sites.test.tsx +2 -1
  30. package/src/__tests__/modules/Sites/SitesList/ListView/BulkHeader/BulkHeader.test.tsx +14 -5
  31. package/src/__tests__/modules/Sites/SitesList/SitesList.test.tsx +6 -4
  32. package/src/__tests__/modules/Users/Roles/BulkHeader/BulkHeader.test.tsx +158 -0
  33. package/src/__tests__/modules/Users/Roles/Roles.test.tsx +619 -0
  34. package/src/__tests__/modules/Users/UserCreate/SiteItem/RolesModal/RoleItem/RoleItem.test.tsx +107 -0
  35. package/src/__tests__/modules/Users/UserCreate/SiteItem/RolesModal/RolesModal.test.tsx +159 -0
  36. package/src/__tests__/modules/Users/UserCreate/SiteItem/SiteItem.test.tsx +175 -0
  37. package/src/__tests__/modules/Users/UserCreate/UserCreate.test.tsx +320 -0
  38. package/src/__tests__/modules/Users/UserList/UserItem/UserItem.test.tsx +417 -0
  39. package/src/__tests__/modules/Users/UserList/UserList.test.tsx +310 -0
  40. package/src/api/index.tsx +2 -0
  41. package/src/api/roles.tsx +77 -0
  42. package/src/api/users.tsx +22 -2
  43. package/src/components/ActionMenu/index.tsx +12 -6
  44. package/src/components/Avatar/index.tsx +5 -3
  45. package/src/components/Avatar/style.tsx +8 -9
  46. package/src/components/BulkSelectionOptions/index.tsx +19 -12
  47. package/src/components/BulkSelectionOptions/style.tsx +6 -11
  48. package/src/components/ConfigPanel/Form/index.tsx +24 -1
  49. package/src/components/ConfigPanel/GlobalPageForm/index.tsx +17 -4
  50. package/src/components/ElementsTooltip/index.tsx +1 -1
  51. package/src/components/Fields/IntegrationsField/index.tsx +5 -6
  52. package/src/components/Fields/RadioField/index.tsx +1 -1
  53. package/src/components/Fields/ReferenceField/AutoPanel/index.tsx +3 -3
  54. package/src/components/Fields/ReferenceField/ItemList/index.tsx +1 -1
  55. package/src/components/Fields/ReferenceField/ManualPanel/index.tsx +3 -3
  56. package/src/components/Fields/TagsField/index.tsx +4 -2
  57. package/src/components/Fields/TextField/index.tsx +3 -0
  58. package/src/components/Fields/UrlField/index.tsx +5 -5
  59. package/src/components/Gallery/GalleryPanel/DetailPanel/index.tsx +42 -15
  60. package/src/components/Gallery/GalleryPanel/GalleryDragAndDrop/index.tsx +1 -1
  61. package/src/components/Gallery/GalleryPanel/index.tsx +20 -5
  62. package/src/components/Gallery/index.tsx +12 -6
  63. package/src/components/Icon/index.tsx +9 -1
  64. package/src/components/MainWrapper/AppBar/atoms.tsx +2 -2
  65. package/src/components/MainWrapper/AppBar/index.tsx +12 -10
  66. package/src/components/MainWrapper/AppBar/style.tsx +2 -1
  67. package/src/components/Modal/style.tsx +2 -2
  68. package/src/components/Nav/index.tsx +12 -2
  69. package/src/components/PageFinder/index.tsx +2 -2
  70. package/src/components/SearchField/index.tsx +3 -8
  71. package/src/components/TableFilters/PermissionsFilter/index.tsx +50 -0
  72. package/src/{modules/Users/UserList/HeaderMenus/Name → components/TableFilters/PermissionsFilter}/style.tsx +6 -2
  73. package/src/components/TableFilters/RoleFilter/index.tsx +61 -0
  74. package/src/components/TableFilters/RoleFilter/style.tsx +28 -0
  75. package/src/components/TableFilters/UsersFilter/index.tsx +55 -0
  76. package/src/components/TableFilters/UsersFilter/style.tsx +31 -0
  77. package/src/components/TableFilters/index.tsx +6 -0
  78. package/src/components/TableList/TableItem/style.tsx +2 -2
  79. package/src/components/TableList/style.tsx +1 -1
  80. package/src/components/index.tsx +7 -1
  81. package/src/containers/App/actions.tsx +3 -3
  82. package/src/containers/PageEditor/actions.tsx +14 -20
  83. package/src/containers/Redirects/actions.tsx +1 -0
  84. package/src/containers/Sites/actions.tsx +22 -14
  85. package/src/containers/Sites/interfaces.tsx +3 -3
  86. package/src/containers/Sites/reducer.tsx +1 -1
  87. package/src/containers/StructuredData/actions.tsx +15 -3
  88. package/src/containers/Users/actions.tsx +160 -26
  89. package/src/containers/Users/constants.tsx +8 -10
  90. package/src/containers/Users/interfaces.tsx +25 -3
  91. package/src/containers/Users/reducer.tsx +24 -15
  92. package/src/guards/index.tsx +2 -1
  93. package/src/guards/restricted/index.tsx +21 -0
  94. package/src/hooks/index.tsx +3 -0
  95. package/src/hooks/users.tsx +38 -0
  96. package/src/modules/App/Routing/NavMenu/NavItem/index.tsx +10 -5
  97. package/src/modules/App/Routing/NavMenu/index.tsx +16 -7
  98. package/src/modules/App/Routing/PrivateRoute/index.tsx +13 -5
  99. package/src/modules/App/Routing/index.tsx +17 -6
  100. package/src/modules/Categories/CategoriesList/BulkHeader/TableHeader/style.tsx +1 -0
  101. package/src/modules/Categories/CategoriesList/BulkHeader/index.tsx +2 -10
  102. package/src/modules/Categories/CategoriesList/CategoryItem/index.tsx +27 -12
  103. package/src/modules/Categories/CategoriesList/CategoryItem/style.tsx +4 -2
  104. package/src/modules/Categories/CategoriesList/index.tsx +27 -8
  105. package/src/modules/Content/BulkHeader/index.tsx +7 -3
  106. package/src/modules/Content/PageImporter/index.tsx +1 -1
  107. package/src/modules/Content/PageItem/index.tsx +45 -31
  108. package/src/modules/Content/PageItem/style.tsx +2 -1
  109. package/src/modules/Content/index.tsx +22 -13
  110. package/src/modules/FramePreview/index.tsx +2 -2
  111. package/src/modules/GlobalEditor/index.tsx +68 -53
  112. package/src/modules/GlobalSettings/index.tsx +2 -0
  113. package/src/modules/Navigation/Defaults/BulkHeader/index.tsx +2 -10
  114. package/src/modules/Navigation/Defaults/DefaultsEditor/Editor/DefaultsBrowser/index.tsx +9 -11
  115. package/src/modules/Navigation/Defaults/DefaultsEditor/Editor/index.tsx +5 -1
  116. package/src/modules/Navigation/Defaults/DefaultsEditor/index.tsx +10 -5
  117. package/src/modules/Navigation/Defaults/Item/index.tsx +41 -27
  118. package/src/modules/Navigation/Defaults/Item/style.tsx +2 -1
  119. package/src/modules/Navigation/Defaults/index.tsx +29 -10
  120. package/src/modules/Navigation/Menus/List/Table/Header/index.tsx +7 -5
  121. package/src/modules/Navigation/Menus/List/Table/Item/index.tsx +10 -10
  122. package/src/modules/Navigation/Menus/List/Table/Item/style.tsx +2 -1
  123. package/src/modules/Navigation/Menus/List/index.tsx +6 -2
  124. package/src/modules/Navigation/Menus/index.tsx +12 -7
  125. package/src/modules/PageEditor/Editor/index.tsx +5 -1
  126. package/src/modules/PageEditor/PageBrowser/index.tsx +9 -3
  127. package/src/modules/PageEditor/index.tsx +67 -57
  128. package/src/modules/Redirects/index.tsx +97 -98
  129. package/src/modules/Settings/ContentTypes/DataPacks/AddModal/index.tsx +5 -1
  130. package/src/modules/Settings/ContentTypes/DataPacks/Config/Form/TemplateConfig/TemplateEditor/Editor/TemplateBrowser/index.tsx +8 -9
  131. package/src/modules/Settings/ContentTypes/DataPacks/Config/Form/index.tsx +7 -3
  132. package/src/modules/Settings/ContentTypes/DataPacks/Config/index.tsx +5 -1
  133. package/src/modules/Settings/ContentTypes/DataPacks/Item/index.tsx +5 -1
  134. package/src/modules/Settings/Integrations/BulkHeader/index.tsx +2 -17
  135. package/src/modules/Settings/Integrations/IntegrationForm/index.tsx +6 -2
  136. package/src/modules/Settings/Integrations/IntegrationItem/index.tsx +18 -8
  137. package/src/modules/Settings/Integrations/IntegrationItem/style.tsx +6 -3
  138. package/src/modules/Settings/Integrations/index.tsx +32 -7
  139. package/src/modules/Settings/Languages/LanguagePanel/index.tsx +6 -2
  140. package/src/modules/Settings/Languages/Table/Header/index.tsx +4 -2
  141. package/src/modules/Settings/Languages/Table/Item/index.tsx +19 -43
  142. package/src/modules/Settings/Languages/Table/Item/style.tsx +11 -54
  143. package/src/modules/Settings/Languages/index.tsx +2 -2
  144. package/src/modules/Settings/SeoAnalyticsSettings/Analytics/index.tsx +2 -4
  145. package/src/modules/Settings/SeoAnalyticsSettings/index.tsx +4 -2
  146. package/src/modules/Settings/Social/index.tsx +1 -1
  147. package/src/modules/Settings/index.tsx +17 -11
  148. package/src/modules/Sites/SitesList/GridView/GridSiteItem/index.tsx +31 -18
  149. package/src/modules/Sites/SitesList/ListView/BulkHeader/index.tsx +21 -12
  150. package/src/modules/Sites/SitesList/ListView/ListSiteItem/index.tsx +31 -18
  151. package/src/modules/Sites/SitesList/RecentSiteItem/index.tsx +1 -1
  152. package/src/modules/Sites/SitesList/index.tsx +16 -24
  153. package/src/modules/Sites/index.tsx +7 -3
  154. package/src/modules/StructuredData/Form/index.tsx +1 -1
  155. package/src/modules/StructuredData/StructuredDataList/BulkHeader/index.tsx +8 -5
  156. package/src/modules/StructuredData/StructuredDataList/ContentFilters/index.tsx +8 -5
  157. package/src/modules/StructuredData/StructuredDataList/GlobalPageItem/index.tsx +29 -15
  158. package/src/modules/StructuredData/StructuredDataList/StructuredDataItem/index.tsx +50 -19
  159. package/src/modules/StructuredData/StructuredDataList/index.tsx +9 -6
  160. package/src/modules/Users/Profile/index.tsx +16 -4
  161. package/src/modules/Users/Roles/BulkHeader/TableHeader/index.tsx +52 -0
  162. package/src/modules/Users/Roles/BulkHeader/TableHeader/style.tsx +43 -0
  163. package/src/modules/Users/Roles/BulkHeader/index.tsx +74 -0
  164. package/src/modules/Users/Roles/RoleItem/index.tsx +104 -0
  165. package/src/modules/Users/Roles/RoleItem/style.tsx +127 -0
  166. package/src/modules/Users/Roles/SideModal/index.tsx +81 -0
  167. package/src/modules/Users/Roles/SideModal/style.tsx +132 -0
  168. package/src/modules/Users/Roles/hooks.tsx +78 -0
  169. package/src/modules/Users/Roles/index.tsx +256 -0
  170. package/src/modules/Users/Roles/style.tsx +23 -0
  171. package/src/modules/Users/Roles/utils.tsx +12 -0
  172. package/src/modules/Users/UserCreate/OptionItem/index.tsx +45 -0
  173. package/src/modules/Users/UserCreate/OptionItem/style.tsx +48 -0
  174. package/src/modules/Users/UserCreate/SiteItem/RolesModal/RoleItem/index.tsx +48 -0
  175. package/src/modules/Users/UserCreate/SiteItem/RolesModal/RoleItem/style.tsx +42 -0
  176. package/src/modules/Users/UserCreate/SiteItem/RolesModal/index.tsx +140 -0
  177. package/src/modules/Users/UserCreate/SiteItem/RolesModal/style.tsx +94 -0
  178. package/src/modules/Users/UserCreate/SiteItem/index.tsx +103 -22
  179. package/src/modules/Users/UserCreate/SiteItem/style.tsx +49 -6
  180. package/src/modules/Users/UserCreate/index.tsx +278 -121
  181. package/src/modules/Users/UserCreate/style.tsx +71 -4
  182. package/src/modules/Users/UserEdit/index.tsx +71 -24
  183. package/src/modules/Users/UserForm/atoms.tsx +40 -8
  184. package/src/modules/Users/UserForm/index.tsx +335 -116
  185. package/src/modules/Users/UserForm/style.tsx +70 -6
  186. package/src/modules/Users/UserList/BulkHeader/TableHeader/index.tsx +61 -31
  187. package/src/modules/Users/UserList/BulkHeader/TableHeader/style.tsx +18 -4
  188. package/src/modules/Users/UserList/BulkHeader/index.tsx +10 -3
  189. package/src/modules/Users/UserList/UserItem/index.tsx +121 -38
  190. package/src/modules/Users/UserList/UserItem/style.tsx +32 -14
  191. package/src/modules/Users/UserList/hooks.tsx +13 -8
  192. package/src/modules/Users/UserList/index.tsx +67 -29
  193. package/src/modules/Users/UserList/utils.tsx +1 -1
  194. package/src/modules/Users/index.tsx +20 -3
  195. package/src/routes/index.tsx +9 -17
  196. package/src/routes/multisite.tsx +73 -8
  197. package/src/routes/site.tsx +96 -10
  198. package/src/types/index.tsx +42 -1
  199. package/tsconfig.paths.json +1 -0
  200. package/src/__tests__/components/Avatar/__snapshots__/Avatar.test.tsx.snap +0 -61
  201. package/src/modules/Users/UserList/HeaderMenus/Name/index.tsx +0 -55
@@ -3,9 +3,9 @@ import { connect } from "react-redux";
3
3
 
4
4
  import { appActions } from "@ax/containers/App";
5
5
  import { usersActions } from "@ax/containers/Users";
6
- import { Loading, MainWrapper, Modal } from "@ax/components";
7
- import { IRootState, ISite, IUser } from "@ax/types";
8
- import { useModal } from "@ax/hooks";
6
+ import { Loading, MainWrapper, Modal, Toast } from "@ax/components";
7
+ import { IRootState, ISite, ISiteRoles, IUser } from "@ax/types";
8
+ import { useModal, useToast } from "@ax/hooks";
9
9
  import UserForm from "../UserForm";
10
10
 
11
11
  import * as S from "./style";
@@ -14,13 +14,15 @@ const UserEdit = (props: IProps) => {
14
14
  const { user, updateUser, isSaving, isLoading, deleteUser, currentUser, setHistoryPush, site, sites } = props;
15
15
 
16
16
  const { timezone } = user;
17
- const initForm = { ...user, sites: user.sites || [] };
17
+ const initForm = { ...user };
18
18
  if (!timezone) initForm.timezone = "Europe/Madrid";
19
19
  const isSiteView = !!site;
20
20
  const sitesIds = sites.map((site: ISite) => site.id);
21
21
  const usersRoute = isSiteView ? "/sites/users" : "users";
22
22
  const [form, setForm] = useState<IUser>(initForm);
23
23
  const { isOpen, toggleModal } = useModal();
24
+ const { isOpen: isOpenAdvise, toggleModal: toggleAdviseModal } = useModal(false);
25
+ const { isVisible, toggleToast, setIsVisible } = useToast();
24
26
 
25
27
  useEffect(() => {
26
28
  const { timezone } = user;
@@ -29,14 +31,20 @@ const UserEdit = (props: IProps) => {
29
31
  setForm(initForm);
30
32
  }, [user]);
31
33
 
32
- const handleSave = () => {
33
- form.id && updateUser(form.id, form, false);
34
+ const handleSave = async () => {
35
+ if(isOpenAdvise){
36
+ toggleAdviseModal();
37
+ }
38
+ const updated = form.id ? await updateUser(form.id, form, false) : false;
39
+ if (updated) {
40
+ toggleToast();
41
+ }
34
42
  };
35
43
 
36
44
  const rightButtonProps = {
37
45
  label: isSaving ? "Saving" : "Update User",
38
46
  disabled: isSaving,
39
- action: handleSave,
47
+ action: form.roles.length === 0 && !form.isSuperAdmin ? toggleAdviseModal : handleSave,
40
48
  };
41
49
 
42
50
  const handleDelete = () => {
@@ -49,36 +57,61 @@ const UserEdit = (props: IProps) => {
49
57
  });
50
58
  };
51
59
 
52
- const isSameUser = currentUser.id === user.id;
60
+ const isSameUser = currentUser && currentUser.id === user.id;
61
+ const isDeleteDisabled = isSiteView && user.isSuperAdmin;
53
62
 
54
- const rightLineButtonProps = !isSameUser
63
+ const rightLineButtonProps = !isSameUser && !isDeleteDisabled
55
64
  ? {
56
65
  label: isSiteView ? "Remove user from this site" : "Delete User",
57
66
  action: toggleModal,
58
67
  }
59
68
  : undefined;
60
69
 
61
- const getUpdatedSites = (currentUserSiteIds: any) =>
62
- currentUserSiteIds[0] === "all"
63
- ? sitesIds.filter((id: number) => id !== site.id)
64
- : currentUserSiteIds.filter((id: number) => id !== site.id);
70
+ const getUpdatedSites = () => {
71
+ const hasAll = form.roles.find((siteRole: ISiteRoles) => siteRole.siteId === "all");
72
+ if (hasAll) {
73
+ const oldRoleSites = form.roles.filter((siteRole: ISiteRoles) => siteRole.siteId !== "all");
74
+ const roleSites = sitesIds
75
+ .filter((siteId: number) => siteId !== site?.id)
76
+ .map((siteId: number) => {
77
+ return { siteId, roles: hasAll.roles };
78
+ });
79
+ return [...oldRoleSites, ...roleSites];
80
+ } else {
81
+ return form.roles.filter((siteRole: ISiteRoles) => siteRole.siteId !== site?.id);
82
+ }
83
+ };
65
84
 
66
- const removeUserFromSite = () => {
67
- const updatedSites = getUpdatedSites(form.sites);
68
- const formWithUpdatedSites = { ...form, sites: updatedSites };
85
+ const removeUserFromSite = async () => {
86
+ if (!user.id) return;
87
+ const updatedSites = getUpdatedSites();
88
+ const formWithUpdatedSites = { ...form, roles: updatedSites };
69
89
 
70
- user.id &&
71
- updateUser(user.id, formWithUpdatedSites, true).then(() => {
72
- setHistoryPush(usersRoute);
73
- });
90
+ const updated = await updateUser(user.id, formWithUpdatedSites, true);
91
+ if (updated) {
92
+ setHistoryPush(usersRoute);
93
+ }
74
94
  };
75
95
 
76
96
  const mainDeleteAction = {
77
97
  title: isSiteView ? "Remove user" : "Delete User",
78
98
  onClick: isSiteView ? removeUserFromSite : handleDelete,
79
99
  };
100
+
80
101
  const secondaryDeleteAction = { title: "Cancel", onClick: toggleModal };
81
102
 
103
+ const toastProps = {
104
+ setIsVisible,
105
+ message: "User updated",
106
+ };
107
+
108
+ const mainModalAction = {
109
+ title: "Edit User",
110
+ onClick: handleSave,
111
+ };
112
+
113
+ const secondaryModalAction = { title: "Cancel", onClick: toggleAdviseModal };
114
+
82
115
  if (isLoading) return <Loading />;
83
116
 
84
117
  return (
@@ -88,7 +121,7 @@ const UserEdit = (props: IProps) => {
88
121
  backLink={true}
89
122
  rightLineButton={isSiteView ? rightLineButtonProps : undefined}
90
123
  >
91
- <UserForm form={form} setForm={setForm} user={user} isSiteView={isSiteView} />
124
+ <UserForm form={form} setForm={setForm} user={user} isSiteView={isSiteView} site={site} />
92
125
  <Modal
93
126
  isOpen={isOpen}
94
127
  hide={toggleModal}
@@ -115,6 +148,20 @@ const UserEdit = (props: IProps) => {
115
148
  </S.ModalContent>
116
149
  ) : null}
117
150
  </Modal>
151
+ <Modal
152
+ isOpen={isOpenAdvise}
153
+ hide={toggleAdviseModal}
154
+ title="Edit User?"
155
+ secondaryAction={secondaryModalAction}
156
+ mainAction={mainModalAction}
157
+ size="S"
158
+ >
159
+ <S.ModalContent>
160
+ Before editing an user, <strong>select the user's permissions and site access</strong>. If you proceed without selecting
161
+ any permissions, the user <strong>won't have access to anything or view any content</strong>.
162
+ </S.ModalContent>
163
+ </Modal>
164
+ {isVisible && <Toast {...toastProps} />}
118
165
  </MainWrapper>
119
166
  );
120
167
  };
@@ -130,7 +177,7 @@ const mapStateToProps = (state: IRootState) => ({
130
177
 
131
178
  interface IDispatchProps {
132
179
  setHistoryPush(path: string): void;
133
- updateUser(id: number, data: any, isProfile: boolean): any;
180
+ updateUser(id: number, data: any, isProfile: boolean): Promise<boolean>;
134
181
  deleteUser(id: number): Promise<boolean>;
135
182
  }
136
183
 
@@ -142,10 +189,10 @@ const mapDispatchToProps = {
142
189
 
143
190
  interface IProfileProps {
144
191
  user: IUser;
145
- site: ISite;
192
+ site: ISite | null;
146
193
  isSaving: boolean;
147
194
  isLoading: boolean;
148
- currentUser: IUser;
195
+ currentUser: IUser | null;
149
196
  sites: ISite[];
150
197
  }
151
198
 
@@ -3,14 +3,35 @@ import { connect } from "react-redux";
3
3
 
4
4
  import { ErrorToast, FieldsBehavior, Modal } from "@ax/components";
5
5
  import { usersActions } from "@ax/containers/Users";
6
- import { IRootState } from "@ax/types";
6
+ import { IModal, IRootState } from "@ax/types";
7
7
 
8
8
  import * as S from "./style";
9
9
 
10
- const PasswordForm = (props: IProps) => {
10
+ const TypeChangeModal = (props: ITypeChangeProps): JSX.Element => {
11
+ const { isOpen, toggleModal, mainModalAction, secondaryModalAction, email, isSuperAdmin } = props;
12
+
13
+ const type = isSuperAdmin ? "member" : "Super admin";
14
+
15
+ return (
16
+ <Modal
17
+ isOpen={isOpen}
18
+ hide={toggleModal}
19
+ title="Change user type?"
20
+ secondaryAction={secondaryModalAction}
21
+ mainAction={mainModalAction}
22
+ size="S"
23
+ >
24
+ <S.ModalContent>
25
+ Are you sure you want to change {email} as a {type} user?
26
+ </S.ModalContent>
27
+ </Modal>
28
+ );
29
+ };
30
+
31
+ const PasswordForm = (props: IPasswordFormProps) => {
11
32
  const { id, isOpen, toggleModal, isSaving, updatePassword } = props;
12
33
 
13
- const initForm = { currentPassword: "", password: "", retypedPassword: "" };
34
+ const initForm: IState = { currentPassword: "", password: "", retypedPassword: "" };
14
35
  const [form, setForm] = useState(initForm);
15
36
 
16
37
  const handleCurrentPasswordChange = (value: string) => setForm({ ...form, currentPassword: value });
@@ -80,12 +101,17 @@ const PasswordForm = (props: IProps) => {
80
101
  );
81
102
  };
82
103
 
104
+ interface ITypeChangeProps extends IModal {
105
+ email: string;
106
+ isSuperAdmin: boolean;
107
+ }
108
+
83
109
  const mapStateToProps = (state: IRootState) => ({
84
110
  isSaving: state.app.isSaving,
85
111
  });
86
112
 
87
113
  interface IDispatchProps {
88
- updatePassword(id: string, data: any): any;
114
+ updatePassword(id: number | null, data: IState): Promise<boolean>;
89
115
  }
90
116
 
91
117
  const mapDispatchToProps = {
@@ -93,14 +119,20 @@ const mapDispatchToProps = {
93
119
  };
94
120
 
95
121
  interface IPasswordProps {
96
- id: string;
122
+ id: number | null;
97
123
  isOpen: boolean;
98
- toggleModal: any;
124
+ toggleModal: () => void;
99
125
  isSaving: boolean;
100
126
  }
101
127
 
102
- type IProps = IPasswordProps & IDispatchProps;
128
+ interface IState {
129
+ currentPassword: string;
130
+ password: string;
131
+ retypedPassword: string;
132
+ }
133
+
134
+ type IPasswordFormProps = IPasswordProps & IDispatchProps;
103
135
 
104
136
  const PasswordModal = connect(mapStateToProps, mapDispatchToProps)(PasswordForm);
105
137
 
106
- export { PasswordModal };
138
+ export { PasswordModal, TypeChangeModal };