passbolt-styleguide 3.3.2 → 3.4.0-alpha1

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 (203) hide show
  1. package/build/css/help.min.css +2 -2
  2. package/build/css/public.min.css +2 -2
  3. package/build/css/themes/default/api_authentication.min.css +3 -3
  4. package/build/css/themes/default/api_cloud.min.css +3 -3
  5. package/build/css/themes/default/api_main.min.css +4 -4
  6. package/build/css/themes/default/api_reports.min.css +4 -4
  7. package/build/css/themes/default/api_webinstaller.min.css +3 -3
  8. package/build/css/themes/default/ext_app.min.css +4 -4
  9. package/build/css/themes/default/ext_authentication.min.css +3 -3
  10. package/build/css/themes/default/ext_external.min.css +2 -2
  11. package/build/css/themes/default/ext_in_form_cta.min.css +3 -3
  12. package/build/css/themes/default/ext_in_form_menu.min.css +3 -3
  13. package/build/css/themes/default/ext_quickaccess.min.css +3 -3
  14. package/build/css/themes/midgar/api_authentication.min.css +9 -0
  15. package/build/css/themes/midgar/api_main.min.css +4 -4
  16. package/build/css/themes/midgar/api_reports.min.css +4 -4
  17. package/build/css/themes/midgar/ext_app.min.css +4 -4
  18. package/build/css/themes/midgar/ext_authentication.min.css +3 -3
  19. package/build/css/themes/midgar/ext_in_form_cta.min.css +3 -3
  20. package/build/css/themes/midgar/ext_in_form_menu.min.css +3 -3
  21. package/build/css/themes/midgar/ext_quickaccess.min.css +3 -3
  22. package/build/js/dist/api-app.js +1 -1
  23. package/build/js/dist/api-recover.js +1 -1
  24. package/build/js/dist/api-setup.js +1 -1
  25. package/build/js/dist/api-triage.js +1 -1
  26. package/build/js/dist/api-vendors.js +1 -1
  27. package/build/js/dist/api-vendors.js.LICENSE.txt +40 -4
  28. package/package.json +7 -6
  29. package/src/img/third_party/ChromeWebStore_black.svg +1 -0
  30. package/src/img/third_party/ChromeWebStore_white.svg +1 -0
  31. package/src/img/third_party/edge-addon-black.svg +1 -0
  32. package/src/img/third_party/edge-addon-white.svg +1 -0
  33. package/src/locales/de-DE/common.json +11 -11
  34. package/src/locales/en-UK/common.json +11 -12
  35. package/src/locales/fr/common.json +750 -0
  36. package/src/locales/fr-FR/common.json +11 -11
  37. package/src/locales/sv-SE/common.json +11 -11
  38. package/src/react-extension/ExtApp.js +9 -6
  39. package/src/react-extension/components/Administration/DisplayEmailNotificationsAdministration/DisplayEmailNotificationsAdministration.js +1 -1
  40. package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.test.stories.js +0 -1
  41. package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.js +1 -1
  42. package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.test.js +1 -1
  43. package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.test.stories.js +5 -8
  44. package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.js +1 -1
  45. package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.test.data.js +4 -1
  46. package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.test.js +4 -4
  47. package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.js +1 -1
  48. package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.test.js +1 -1
  49. package/src/react-extension/components/Administration/DisplayTestUserDirectoryAdministration/DisplayTestUserDirectoryAdministration.test.js +2 -3
  50. package/src/react-extension/components/Administration/DisplayTestUserDirectoryAdministration/DisplayTestUserDirectoryAdministration.test.stories.js +5 -9
  51. package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.js +2 -2
  52. package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.test.stories.js +0 -3
  53. package/src/react-extension/components/Authentication/AskForAuthenticationHelp/AskForAuthenticationHelp.js +1 -1
  54. package/src/react-extension/components/Authentication/AskForAuthenticationHelp/AskForAuthenticationHelp.test.stories.js +12 -15
  55. package/src/react-extension/components/Authentication/CheckMailBox/CheckMailBox.js +2 -2
  56. package/src/react-extension/components/Authentication/CheckMailBox/CheckMailBox.test.js +1 -1
  57. package/src/react-extension/components/Authentication/CheckMailBox/CheckMailbox.test.stories.js +12 -14
  58. package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.test.stories.js +12 -15
  59. package/src/react-extension/components/Authentication/ChooseSecurityToken/ChooseSecurityToken.test.stories.js +12 -15
  60. package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.test.stories.js +12 -15
  61. package/src/react-extension/components/Authentication/DisplayBrowserNotSupported/DisplayBrowserNotSupported.test.stories.js +12 -15
  62. package/src/react-extension/components/Authentication/DisplayExpiredTokenError/DisplayExpiredTokenError.test.stories.js +12 -15
  63. package/src/react-extension/components/Authentication/DisplayRequireInvitationError/DisplayRequireInvitationError.test.stories.js +12 -15
  64. package/src/react-extension/components/Authentication/DisplayUnexpectedError/DisplayUnexpectedError.test.stories.js +12 -15
  65. package/src/react-extension/components/Authentication/DownloadRecoveryKit/DownloadRecoveryKit.js +1 -1
  66. package/src/react-extension/components/Authentication/DownloadRecoveryKit/DownloadRecoveryKit.test.stories.js +12 -15
  67. package/src/react-extension/components/Authentication/EnterNameForm/EnterNameForm.test.stories.js +12 -15
  68. package/src/react-extension/components/Authentication/EnterUsernameForm/EnterUsernameForm.test.stories.js +12 -15
  69. package/src/react-extension/components/Authentication/HandleSessionExpired/HandleSessionExpired.test.data.js +14 -0
  70. package/src/react-extension/components/Authentication/HandleSessionExpired/HandleSessionExpired.test.js +65 -0
  71. package/src/react-extension/components/Authentication/HandleSessionExpired/HandleSessionExpired.test.page.js +38 -0
  72. package/src/react-extension/components/Authentication/ImportGpgKey/ImportGpgKey.test.stories.js +12 -15
  73. package/src/react-extension/components/Authentication/InstallExtension/InstallExtension.js +15 -6
  74. package/src/react-extension/components/Authentication/InstallExtension/InstallExtension.test.js +27 -0
  75. package/src/react-extension/components/Authentication/InstallExtension/InstallExtension.test.stories.js +12 -15
  76. package/src/react-extension/components/Authentication/IntroduceSetupExtension/IntroduceSetupExtension.test.stories.js +12 -15
  77. package/src/react-extension/components/Authentication/NotifyExpiredSession/NotifyExpiredSession.test.stories.js +8 -11
  78. package/src/react-extension/components/AuthenticationLogin/AcceptLoginServerKeyChange/AcceptLoginServerKeyChange.test.stories.js +12 -15
  79. package/src/react-extension/components/AuthenticationLogin/DisplayLoginError/DisplayLoginError.test.stories.js +12 -15
  80. package/src/react-extension/components/AuthenticationLogin/DisplayLoginInProgress/DisplayLoginProgress.test.stories.js +12 -15
  81. package/src/react-extension/components/AuthenticationLogin/Login/Login.test.stories.js +12 -15
  82. package/src/react-extension/components/AuthenticationPassphrase/InputPassphrase/InputPassphrase.test.stories.js +5 -11
  83. package/src/react-extension/components/AuthenticationRecover/RecoverAuthentication/RecoverAuthentication.js +1 -1
  84. package/src/react-extension/components/Common/Error/ShowErrorDetails/ShowErrorDetails.js +1 -1
  85. package/src/react-extension/components/Common/Icons/Icon.test.stories.js +3 -1
  86. package/src/react-extension/components/Common/Loading/LoadingSpinner/LoadingSpinner.js +2 -1
  87. package/src/react-extension/components/Common/Progress/DisplayProgress/DisplayProgress.js +1 -1
  88. package/src/react-extension/components/Common/Progress/DisplayProgress/DisplayProgress.test.js +1 -1
  89. package/src/react-extension/components/Common/Progress/DisplayProgress/DisplayProgress.test.stories.js +34 -0
  90. package/src/react-extension/components/Resource/CreateResource/CreateResource.test.stories.js +14 -4
  91. package/src/react-extension/components/Resource/DisplayResourcesList/DisplayDragResource.js +68 -0
  92. package/src/react-extension/components/Resource/DisplayResourcesList/DisplayResourcesList.js +9 -42
  93. package/src/react-extension/components/Resource/DisplayResourcesList/DisplayResourcesList.test.page.js +4 -1
  94. package/src/react-extension/components/Resource/ExportResources/ExportResources.test.stories.js +5 -11
  95. package/src/react-extension/components/Resource/ExportResources/ExportResourcesCredentials.js +6 -10
  96. package/src/react-extension/components/Resource/ExportResources/ExportResourcesCredentials.test.stories.js +5 -11
  97. package/src/react-extension/components/Resource/FilterResourcesByBreadcrumb/FilterResourcesByBreadcrumb.test.stories.js +0 -1
  98. package/src/react-extension/components/Resource/FilterResourcesByFolders/DisplayDragFolderItem.js +109 -0
  99. package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFolders.js +40 -192
  100. package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFolders.test.data.js +10 -5
  101. package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFolders.test.js +9 -12
  102. package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFolders.test.page.js +5 -1
  103. package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFolders.test.stories.js +0 -1
  104. package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFoldersItem.js +83 -58
  105. package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFoldersItem.test.data.js +52 -59
  106. package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFoldersItem.test.js +25 -20
  107. package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFoldersItem.test.page.js +11 -5
  108. package/src/react-extension/components/Resource/FilterResourcesByShortcuts/FilterResourcesByShortcuts.test.stories.js +0 -1
  109. package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTags.test.data.js +47 -0
  110. package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTags.test.js +34 -3
  111. package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTags.test.page.js +46 -9
  112. package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTags.test.stories.js +0 -1
  113. package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTagsList.js +124 -4
  114. package/src/react-extension/components/Resource/FilterResourcesByText/FilterResourcesByText.test.stories.js +0 -2
  115. package/src/react-extension/components/Resource/ImportResources/ImportResourcesKeyUnlock.js +6 -10
  116. package/src/react-extension/components/Resource/ImportResources/ImportResourcesKeyUnlock.test.stories.js +5 -11
  117. package/src/react-extension/components/Resource/ImportResources/ImportResourcesResult.js +3 -3
  118. package/src/react-extension/components/Resource/ImportResources/ImportResourcesResult.test.js +3 -3
  119. package/src/react-extension/components/Resource/ImportResources/ImportResourcesResult.test.stories.js +5 -11
  120. package/src/react-extension/components/ResourceComment/AddResourceComment/AddResourceComment.test.stories.js +8 -14
  121. package/src/react-extension/components/ResourceComment/ConfirmResourceCommentDeletion/ConfirmResourceCommentDeletion.test.stories.js +5 -11
  122. package/src/react-extension/components/ResourceComment/DisplayResourceCommentList/DisplayResourceCommentList.test.stories.js +8 -14
  123. package/src/react-extension/components/ResourceDescription/EditResourceDescription/EditResourceDescription.test.stories.js +8 -15
  124. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsActivity.test.stories.js +0 -1
  125. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsDescription.test.stories.js +0 -1
  126. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsTag.test.js +1 -1
  127. package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsTag.test.stories.js +0 -1
  128. package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.test.stories.js +0 -3
  129. package/src/react-extension/components/ResourceFolder/DefineResourceFolderMoveStrategy/DefineResourceFolderMoveStrategy.test.stories.js +0 -6
  130. package/src/react-extension/components/ResourceFolder/DeleteResourceFolder/DeleteResourceFolder.test.stories.js +0 -5
  131. package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.test.stories.js +0 -7
  132. package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetailsActivity.test.stories.js +0 -2
  133. package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetailsInformation.test.stories.js +0 -2
  134. package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetailsPermissions.test.stories.js +0 -2
  135. package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/ConfigurePassphraseGenerator.test.stories.js +0 -1
  136. package/src/react-extension/components/ResourceTag/DeleteResourceTag/DeleteResourceTag.test.stories.js +0 -2
  137. package/src/react-extension/components/ResourceTag/EditResourceTag/EditResourceTag.test.stories.js +0 -4
  138. package/src/react-extension/components/ResourceTag/EditResourceTags/EditResourceTags.js +1 -1
  139. package/src/react-extension/components/Share/ShareDialog.test.stories.js +5 -9
  140. package/src/react-extension/components/User/ConfirmDisableUserMFA/ConfirmDisableUserMFA.test.stories.js +5 -9
  141. package/src/react-extension/components/User/CreateUser/CreateUser.test.stories.js +3 -1
  142. package/src/react-extension/components/User/DeleteUser/DeleteUser.test.stories.js +5 -8
  143. package/src/react-extension/components/User/DeleteUser/DeleteUserWithConflicts.test.stories.js +5 -8
  144. package/src/react-extension/components/User/EditUser/EditUser.test.stories.js +3 -1
  145. package/src/react-extension/components/User/FilterUsersByBreadcrumb/FilterUsersByBreadcrumb.test.stories.js +5 -8
  146. package/src/react-extension/components/User/FilterUsersByShortcut/FilterUsersByShortcut.test.stories.js +0 -1
  147. package/src/react-extension/components/User/FilterUsersByText/FilterUsersByText.test.stories.js +0 -2
  148. package/src/react-extension/components/UserDetails/DisplayUserDetailsGroups/DisplayUserDetailsGroups.test.stories.js +8 -11
  149. package/src/react-extension/components/UserDetails/DisplayUserDetailsInformation/DisplayUserDetailsInformation.test.stories.js +8 -11
  150. package/src/react-extension/components/UserDetails/DisplayUserDetailsPublicKey/DisplayUserDetailsPublicKey.test.stories.js +8 -12
  151. package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.test.stories.js +5 -8
  152. package/src/react-extension/components/UserGroup/DeleteUserGroup/DeleteUserGroup.test.stories.js +5 -8
  153. package/src/react-extension/components/UserGroup/DeleteUserGroup/DeleteUserGroupWithConflicts.test.stories.js +5 -8
  154. package/src/react-extension/components/UserGroup/DisplayUserGroupDetailsInformation/DisplayUserGroupDetailsInformation.test.stories.js +8 -11
  155. package/src/react-extension/components/UserGroup/DisplayUserGroupDetailsMembers/DisplayUserGroupDetailsMembers.test.stories.js +8 -11
  156. package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.test.stories.js +5 -8
  157. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/ConfirmPassphrase.js +55 -2
  158. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/ConfirmPassphrase.test.data.js +6 -0
  159. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.js +54 -6
  160. package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.test.data.js +6 -0
  161. package/src/react-extension/components/UserSetting/ChangeUserSecurityToken/ChangeUserSecurityToken.js +1 -1
  162. package/src/react-extension/components/UserSetting/ChangeUserSecurityToken/ChangeUserSecurityToken.test.stories.js +5 -8
  163. package/src/react-extension/components/UserSetting/DisplayUserGpgInformation/DisplayUserGpgInformation.js +21 -6
  164. package/src/react-extension/components/UserSetting/DisplayUserGpgInformation/DisplayUserGpgInformation.test.stories.js +5 -8
  165. package/src/react-extension/components/UserSetting/DisplayUserProfile/DisplayUserProfile.test.stories.js +5 -8
  166. package/src/react-extension/components/UserSetting/DisplayUserSettingsWorkspaceBreadcrumb/DisplayUserSettingsWorkspaceBreadcrumb.test.stories.js +5 -8
  167. package/src/react-extension/components/UserSetting/DisplayUserTheme/DisplayUserTheme.test.stories.js +5 -8
  168. package/src/react-extension/components/UserSetting/EditUserProfile/EditUserProfile.test.stories.js +5 -8
  169. package/src/react-extension/components/UserSetting/NavigateIntoUserSettingsWorkspace/NavigateIntoUserSettingsWorkspace.test.stories.js +7 -10
  170. package/src/react-extension/components/UserSetting/UploadUserProfileAvatar/UploadUserProfileAvatar.js +2 -2
  171. package/src/react-extension/components/UserSetting/UploadUserProfileAvatar/UploadUserProfileAvatar.test.stories.js +5 -8
  172. package/src/react-extension/contexts/ApiAppContext.js +1 -1
  173. package/src/react-extension/contexts/ApiRecoverContext.js +1 -1
  174. package/src/react-extension/contexts/ApiSetupContext.js +1 -1
  175. package/src/react-extension/contexts/DragContext.js +122 -0
  176. package/src/react-extension/contexts/DragContext.test.js +53 -0
  177. package/src/react-extension/test/mock/components/Internationalisation/MockTranslationProvider.js +42 -7
  178. package/src/react-quickaccess/components/AnimatedSwitch/AnimatedSwitch.js +3 -3
  179. package/src/react-quickaccess/components/ExtensionSetup/SetupExtensionInProgress/SetupExtensionInProgressPage.test.stories.js +3 -4
  180. package/src/react-quickaccess/components/FilterResourcesByFavoritePage/FilterResourcesByFavoritePage.test.stories.js +6 -6
  181. package/src/react-quickaccess/components/FilterResourcesByGroupPage/FilterResourcesByGroupPage.test.stories.js +7 -3
  182. package/src/react-quickaccess/components/FilterResourcesByItemsIOwnPage/FilterResourcesByItemsIOwnPage.test.stories.js +6 -6
  183. package/src/react-quickaccess/components/FilterResourcesByRecentlyModifiedPage/FilterResourcesByRecentlyModifiedPage.test.stories.js +6 -6
  184. package/src/react-quickaccess/components/FilterResourcesBySharedWithMePage/FilterResourcesBySharedWithMePage.test.stories.js +6 -6
  185. package/src/react-quickaccess/components/FilterResourcesByTagPage/FilterResourcesByTagPage.test.stories.js +7 -3
  186. package/src/react-quickaccess/components/Header/Header.test.stories.js +3 -6
  187. package/src/react-quickaccess/components/HomePage/HomePage.test.stories.js +13 -9
  188. package/src/react-quickaccess/components/LoginPage/LoginPage.js +41 -5
  189. package/src/react-quickaccess/components/LoginPage/LoginPage.test.stories.js +3 -5
  190. package/src/react-quickaccess/components/MoreFiltersPage/MoreFiltersPage.test.stories.js +3 -5
  191. package/src/react-quickaccess/components/PassphraseDialog/PassphraseDialog.test.stories.js +5 -5
  192. package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.test.stories.js +5 -5
  193. package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.test.stories.js +5 -5
  194. package/src/react-quickaccess/components/ResourceViewPage/ResourceViewPage.test.stories.js +4 -2
  195. package/src/react-quickaccess/components/Search/Search.test.stories.js +3 -5
  196. package/src/react-web-integration/components/AskInFormMenuDisplay/AskInFormMenuDisplay.test.stories.js +6 -2
  197. package/src/react-web-integration/components/DisplayInFormMenu/DisplayInFormMenu.test.stories.js +9 -2
  198. package/src/react-web-integration/lib/InForm/InFormCallToActionField.js +3 -3
  199. package/src/react-web-integration/lib/InForm/InFormManager.js +12 -6
  200. package/src/react-web-integration/lib/InForm/InformMenuField.js +1 -1
  201. package/src/shared/lib/Browser/detectBrowserName.js +2 -1
  202. package/src/img/third_party/ChromeWebStore_black.png +0 -0
  203. package/src/img/third_party/ChromeWebStore_white.png +0 -0
@@ -2,7 +2,6 @@ import {MemoryRouter, Route} from "react-router-dom";
2
2
  import React from "react";
3
3
  import AppContext from "../../../contexts/AppContext";
4
4
  import PropTypes from "prop-types";
5
- import MockTranslationProvider from "../../../test/mock/components/Internationalisation/MockTranslationProvider";
6
5
  import EditUserProfile from "./EditUserProfile";
7
6
 
8
7
 
@@ -50,13 +49,11 @@ const context = {
50
49
 
51
50
 
52
51
  const Template = args =>
53
- <MockTranslationProvider>
54
- <AppContext.Provider value={context}>
55
- <MemoryRouter initialEntries={['/']}>
56
- <Route component={routerProps => <EditUserProfile {...args} {...routerProps}/>}></Route>
57
- </MemoryRouter>
58
- </AppContext.Provider>
59
- </MockTranslationProvider>;
52
+ <AppContext.Provider value={context}>
53
+ <MemoryRouter initialEntries={['/']}>
54
+ <Route component={routerProps => <EditUserProfile {...args} {...routerProps}/>}></Route>
55
+ </MemoryRouter>
56
+ </AppContext.Provider>;
60
57
 
61
58
  Template.propTypes = {
62
59
  context: PropTypes.object,
@@ -2,7 +2,6 @@ import {MemoryRouter, Route} from "react-router-dom";
2
2
  import React from "react";
3
3
  import AppContext from "../../../contexts/AppContext";
4
4
  import PropTypes from "prop-types";
5
- import MockTranslationProvider from "../../../test/mock/components/Internationalisation/MockTranslationProvider";
6
5
  import NavigateIntoUserSettingsWorkspace from "./NavigateIntoUserSettingsWorkspace";
7
6
 
8
7
 
@@ -19,15 +18,13 @@ const context = {
19
18
 
20
19
 
21
20
  const Template = args =>
22
- <MockTranslationProvider>
23
- <AppContext.Provider value={context}>
24
- <div className="panel">
25
- <MemoryRouter initialEntries={['/']}>
26
- <Route component={routerProps => <NavigateIntoUserSettingsWorkspace {...args} {...routerProps}/>}></Route>
27
- </MemoryRouter>
28
- </div>
29
- </AppContext.Provider>
30
- </MockTranslationProvider>;
21
+ <AppContext.Provider value={context}>
22
+ <div className="panel">
23
+ <MemoryRouter initialEntries={['/']}>
24
+ <Route component={routerProps => <NavigateIntoUserSettingsWorkspace {...args} {...routerProps}/>}></Route>
25
+ </MemoryRouter>
26
+ </div>
27
+ </AppContext.Provider>;
31
28
 
32
29
  Template.propTypes = {
33
30
  context: PropTypes.object,
@@ -336,11 +336,11 @@ class UploadUserProfileAvatar extends React.Component {
336
336
  className={`button primary ${this.areActionsAllowed ? "" : "disabled"}`}
337
337
  onClick={this.handleSelectFile}>
338
338
  <Icon name="upload-a"/>
339
- <span><Trans>Choose a file</Trans></span>
339
+ <span className='ellipsis'><Trans>Choose a file</Trans></span>
340
340
  </a>
341
341
  </div>
342
342
  {this.state.errors.message &&
343
- <div className="error message">{this.state.errors.message}</div>
343
+ <div className="error-message">{this.state.errors.message}</div>
344
344
  }
345
345
  </div>
346
346
  </div>
@@ -2,7 +2,6 @@ import {MemoryRouter, Route} from "react-router-dom";
2
2
  import React from "react";
3
3
  import AppContext from "../../../contexts/AppContext";
4
4
  import PropTypes from "prop-types";
5
- import MockTranslationProvider from "../../../test/mock/components/Internationalisation/MockTranslationProvider";
6
5
  import UploadUserProfileAvatar from "./UploadUserProfileAvatar";
7
6
 
8
7
 
@@ -47,13 +46,11 @@ const context = {
47
46
 
48
47
 
49
48
  const Template = args =>
50
- <MockTranslationProvider>
51
- <AppContext.Provider value={context}>
52
- <MemoryRouter initialEntries={['/']}>
53
- <Route component={routerProps => <UploadUserProfileAvatar {...args} {...routerProps}/>}></Route>
54
- </MemoryRouter>
55
- </AppContext.Provider>
56
- </MockTranslationProvider>;
49
+ <AppContext.Provider value={context}>
50
+ <MemoryRouter initialEntries={['/']}>
51
+ <Route component={routerProps => <UploadUserProfileAvatar {...args} {...routerProps}/>}></Route>
52
+ </MemoryRouter>
53
+ </AppContext.Provider>;
57
54
 
58
55
  Template.propTypes = {
59
56
  context: PropTypes.object,
@@ -207,7 +207,7 @@ class ApiAppContextProvider extends React.Component {
207
207
  return true;
208
208
  } catch (error) {
209
209
  if (error instanceof PassboltApiFetchError) {
210
- if (error.data.code === 403) {
210
+ if (error.data.code === 401) {
211
211
  return false;
212
212
  }
213
213
  }
@@ -102,7 +102,7 @@ class ApiRecoverContextProvider extends React.Component {
102
102
  */
103
103
  isBrowserSupported() {
104
104
  const browserName = detectBrowserName();
105
- const supportedBrowserNames = [BROWSER_NAMES.CHROME, BROWSER_NAMES.FIREFOX];
105
+ const supportedBrowserNames = [BROWSER_NAMES.CHROME, BROWSER_NAMES.FIREFOX, BROWSER_NAMES.EDGE];
106
106
  return supportedBrowserNames.includes(browserName);
107
107
  }
108
108
 
@@ -102,7 +102,7 @@ class ApiSetupContextProvider extends React.Component {
102
102
  */
103
103
  isBrowserSupported() {
104
104
  const browserName = detectBrowserName();
105
- const supportedBrowserNames = [BROWSER_NAMES.CHROME, BROWSER_NAMES.FIREFOX];
105
+ const supportedBrowserNames = [BROWSER_NAMES.CHROME, BROWSER_NAMES.FIREFOX, BROWSER_NAMES.EDGE];
106
106
  return supportedBrowserNames.includes(browserName);
107
107
  }
108
108
 
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Passbolt ~ Open source password manager for teams
3
+ * Copyright (c) 2020 Passbolt SA (https://www.passbolt.com)
4
+ *
5
+ * Licensed under GNU Affero General Public License version 3 of the or any later version.
6
+ * For full copyright and license information, please see the LICENSE.txt
7
+ * Redistributions of files must retain the above copyright notice.
8
+ *
9
+ * @copyright Copyright (c) 2020 Passbolt SA (https://www.passbolt.com)
10
+ * @license https://opensource.org/licenses/AGPL-3.0 AGPL License
11
+ * @link https://www.passbolt.com Passbolt(tm)
12
+ * @since 3.4.0
13
+ */
14
+
15
+ import React from "react";
16
+ import PropTypes from "prop-types";
17
+
18
+ /**
19
+ * The drag and drop context
20
+ */
21
+ export const DragContext = React.createContext({
22
+ dragAndDrops: null, // The current component displayed for drag and drop
23
+ dragging: false, // The user dragging or not items
24
+ draggedItems: null, // the dragged items
25
+ onDragStart: () => {}, // on drag start
26
+ onDragEnd: () => {}, // on drag end
27
+ });
28
+
29
+ /**
30
+ * The related context provider
31
+ */
32
+ export default class dragContextProvider extends React.Component {
33
+ /**
34
+ * Default constructor
35
+ * @param props The component props
36
+ */
37
+ constructor(props) {
38
+ super(props);
39
+ this.state = this.defaultState;
40
+ this.createRefs();
41
+ }
42
+
43
+ /**
44
+ * Create DOM nodes or React elements references in order to be able to access them programmatically.
45
+ */
46
+ createRefs() {
47
+ this.elementRef = React.createRef();
48
+ }
49
+
50
+ /**
51
+ * Returns the default component state
52
+ */
53
+ get defaultState() {
54
+ return {
55
+ displayDraggedItemsComponent: [],
56
+ dragging: false,
57
+ draggedItems: null,
58
+ onDragStart: this.handleDragStart.bind(this),
59
+ onDragEnd: this.handleDragEnd.bind(this),
60
+ };
61
+ }
62
+
63
+ /**
64
+ * Handle drag start
65
+ * @param event
66
+ * @param draggedItemComponent
67
+ * @param draggedItems
68
+ */
69
+ async handleDragStart(event, draggedItemComponent, draggedItems) {
70
+ await this.setState({displayDraggedItemsComponent: [{draggedItemComponent}], dragging: true, draggedItems});
71
+ event.dataTransfer.setDragImage(this.elementRef.current, 5, 5);
72
+ }
73
+
74
+ /**
75
+ * Handle drag end
76
+ */
77
+ async handleDragEnd() {
78
+ await this.setState({displayDraggedItemsComponent: [], dragging: false, draggedItems: null});
79
+ }
80
+
81
+ /**
82
+ * Render the component
83
+ * @returns {JSX}
84
+ */
85
+ render() {
86
+ return (
87
+ <DragContext.Provider value={this.state}>
88
+ <div ref={this.elementRef}>
89
+ {this.state.displayDraggedItemsComponent.map((displayDraggedItemComponent, index) =>
90
+ <displayDraggedItemComponent.draggedItemComponent
91
+ key={index}/>
92
+ )
93
+ }
94
+ </div>
95
+ {this.props.children}
96
+ </DragContext.Provider>
97
+ );
98
+ }
99
+ }
100
+
101
+ dragContextProvider.displayName = 'dragContextProvider';
102
+ dragContextProvider.propTypes = {
103
+ children: PropTypes.any
104
+ };
105
+
106
+ /**
107
+ * Contextual Menu Context Consumer HOC
108
+ * @param WrappedComponent
109
+ */
110
+ export function withDrag(WrappedComponent) {
111
+ return class withDrag extends React.Component {
112
+ render() {
113
+ return (
114
+ <DragContext.Consumer>
115
+ {
116
+ dragContext => <WrappedComponent dragContext={dragContext} {...this.props} />
117
+ }
118
+ </DragContext.Consumer>
119
+ );
120
+ }
121
+ };
122
+ }
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Passbolt ~ Open source password manager for teams
3
+ * Copyright (c) 2020 Passbolt SA (https://www.passbolt.com)
4
+ *
5
+ * Licensed under GNU Affero General Public License version 3 of the or any later version.
6
+ * For full copyright and license information, please see the LICENSE.txt
7
+ * Redistributions of files must retain the above copyright notice.
8
+ *
9
+ * @copyright Copyright (c) 2020 Passbolt SA (https://www.passbolt.com)
10
+ * @license https://opensource.org/licenses/AGPL-3.0 AGPL License
11
+ * @link https://www.passbolt.com Passbolt(tm)
12
+ * @since 3.1.0
13
+ */
14
+
15
+ import DragContextProvider from "./DragContext";
16
+
17
+ beforeEach(() => {
18
+ jest.resetModules();
19
+ jest.clearAllMocks();
20
+ });
21
+
22
+ describe("Drag Context", () => {
23
+ let dragContext; // The context to text
24
+
25
+ describe('As LU I should be able to drag', () => {
26
+ beforeEach(() => {
27
+ dragContext = new DragContextProvider();
28
+ const setStateMock = state => dragContext.state = Object.assign(dragContext.state, state);
29
+ jest.spyOn(dragContext, 'setState').mockImplementation(setStateMock);
30
+ });
31
+
32
+ it('As LU I should start dragging', async() => {
33
+ const event = {
34
+ dataTransfer: {
35
+ setDragImage: jest.fn()
36
+ }
37
+ };
38
+ const component = jest.fn();
39
+ const draggedItems = {
40
+ item: "item"
41
+ };
42
+ await dragContext.state.onDragStart(event, component, draggedItems);
43
+ expect(dragContext.state.dragging).toBeTruthy();
44
+ expect(dragContext.state.draggedItems).toBe(draggedItems);
45
+ });
46
+
47
+ it('As LU I should end the dragging', async() => {
48
+ await dragContext.state.onDragEnd();
49
+ expect(dragContext.state.dragging).toBeFalsy();
50
+ expect(dragContext.state.draggedItems).toBe(null);
51
+ });
52
+ });
53
+ });
@@ -15,6 +15,8 @@ import i18n from 'i18next';
15
15
  import {initReactI18next} from 'react-i18next';
16
16
  import {Component} from "react";
17
17
  import PropTypes from "prop-types";
18
+ import enTranslations from "../../../../../locales/en-UK/common.json";
19
+ import frTranslations from "../../../../../locales/fr/common.json";
18
20
 
19
21
  /**
20
22
  * This component set up the translation process
@@ -25,15 +27,22 @@ class MockTranslationProvider extends Component {
25
27
  * @returns {Promise<void>}
26
28
  * @constructor
27
29
  */
28
- async UNSAFE_componentWillMount() {
29
- await i18n
30
+ constructor(props) {
31
+ super();
32
+ i18n
30
33
  // pass the i18n instance to react-i18next.
31
34
  .use(initReactI18next)
32
35
  // init i18next, for all options read: https://www.i18next.com/overview/configuration-options
33
36
  .init({
34
- lng: 'en-UK',
35
- load: 'currentOnly',
36
- resources: [],
37
+ lng: props.language || 'en-UK',
38
+ resources: {
39
+ "en-UK": {
40
+ common: enTranslations
41
+ },
42
+ fr: {
43
+ common: frTranslations
44
+ }
45
+ },
37
46
  react: {
38
47
  useSuspense: false,
39
48
  },
@@ -42,10 +51,34 @@ class MockTranslationProvider extends Component {
42
51
  defaultNS: 'common',
43
52
  keySeparator: false, // don't use the dot for separator of nested json object
44
53
  nsSeparator: false, // allowed ':' in key to avoid namespace separator
45
- debug: false,
54
+ debug: true
46
55
  });
47
56
  }
48
57
 
58
+ /**
59
+ * Applies a language change whenever it's needed.
60
+ * This method is use isntead of the others to provide the new locale before an updates occur.
61
+ * This way the translation used and displayed is the right one.
62
+ *
63
+ * @param {*} nextProps
64
+ * @returns
65
+ */
66
+ async shouldComponentUpdate(nextProps) {
67
+ await this.handleChangeLanguage(nextProps.language);
68
+ return nextProps.language !== this.props.language;
69
+ }
70
+
71
+ /**
72
+ * Whenever the translation language change
73
+ * @param nextLanguage The previous language
74
+ * @returns {Promise<void>}
75
+ */
76
+ async handleChangeLanguage(nextLanguage) {
77
+ if (nextLanguage !== this.props.language) {
78
+ await i18n.changeLanguage(nextLanguage);
79
+ }
80
+ }
81
+
49
82
  /**
50
83
  * Render the component.
51
84
  * @returns {JSX}
@@ -56,7 +89,9 @@ class MockTranslationProvider extends Component {
56
89
  }
57
90
 
58
91
  MockTranslationProvider.propTypes = {
59
- children: PropTypes.any, // The children components
92
+ children: PropTypes.any, // The children components,
93
+ language: PropTypes.string // The current translation language
60
94
  };
61
95
 
62
96
  export default MockTranslationProvider;
97
+
@@ -13,6 +13,7 @@ class AnimatedSwitch extends React.Component {
13
13
  getTransition(currentLocationPath, _previousLocationPathname) {
14
14
  let transition = null;
15
15
 
16
+ // Resource view transition
16
17
  if (currentLocationPath.indexOf("/data/quickaccess/resources/view") != -1 && this._previousLocationPathname === "/data/quickaccess.html") {
17
18
  transition = "slideLeft";
18
19
  }
@@ -164,7 +165,7 @@ class AnimatedSwitch extends React.Component {
164
165
  // The page has changed but not transition has been defined for it.
165
166
  // Use the default noTransition transition
166
167
  if (currentLocationPath !== this._previousLocationPathname) {
167
- transition = "noTransition";
168
+ transition = "slideNoTransition";
168
169
  } else {
169
170
  // The transition is recalculated because of a status change.
170
171
  // Return the previous transition. The transition won't be played twice, and it will allow to complete it properly.
@@ -181,8 +182,7 @@ class AnimatedSwitch extends React.Component {
181
182
  const currentLocationPathname = this.props.location.pathname;
182
183
  const transition = this.getTransition(currentLocationPathname, this._previousLocationPathname);
183
184
  // If no transition, the previous component should be hidden immediately.
184
- const transitionTimeout = transition !== "noTransition" ? 210 : 0;
185
- console.debug(`AnimatedSwitch render from ${this._previousLocationPathname} to ${currentLocationPathname} with transition ${transition}`);
185
+ const transitionTimeout = transition !== "slideNoTransition" ? 210 : 0;
186
186
  this._previousLocationPathname = currentLocationPathname;
187
187
 
188
188
  return (
@@ -1,6 +1,5 @@
1
1
  import React from "react";
2
2
  import {MemoryRouter, Route} from "react-router-dom";
3
- import "../../../../css/themes/default/ext_quickaccess.css";
4
3
  import SetupExtensionInProgress from "./SetupExtensionInProgress";
5
4
  import Header from "../../Header/Header";
6
5
 
@@ -15,10 +14,10 @@ const Template = () =>
15
14
  </MemoryRouter>;
16
15
 
17
16
 
18
-
19
17
  export const Initial = Template.bind({});
20
18
  Initial.args = {
21
19
  };
22
20
 
23
-
24
-
21
+ Initial.parameters = {
22
+ css: "api_main"
23
+ };
@@ -1,6 +1,5 @@
1
1
  import React from "react";
2
2
  import {MemoryRouter, Route} from "react-router-dom";
3
- import "../../../css/themes/default/ext_quickaccess.css";
4
3
  import PropTypes from "prop-types";
5
4
  import FilterResourcesByFavoritePage from "./FilterResourcesByFavoritePage";
6
5
  import AppContext from "../../contexts/AppContext";
@@ -23,12 +22,15 @@ Template.propTypes = {
23
22
  context: PropTypes.object,
24
23
  };
25
24
 
26
-
25
+ const parameters = {
26
+ css: "ext_quickaccess"
27
+ };
27
28
 
28
29
  export const InitialLoad = Template.bind({});
29
30
  InitialLoad.args = {
30
31
  context: defaultAppContext()
31
32
  };
33
+ InitialLoad.parameters = parameters;
32
34
 
33
35
  const contextNoResource = {
34
36
  port: {
@@ -39,6 +41,7 @@ export const NoFavoriteResource = Template.bind({});
39
41
  NoFavoriteResource.args = {
40
42
  context: defaultAppContext(contextNoResource)
41
43
  };
44
+ NoFavoriteResource.parameters = parameters;
42
45
 
43
46
  const contextWithResources = {
44
47
  port: {
@@ -49,7 +52,4 @@ export const FavoriteResources = Template.bind({});
49
52
  FavoriteResources.args = {
50
53
  context: defaultAppContext(contextWithResources)
51
54
  };
52
-
53
-
54
-
55
-
55
+ FavoriteResources.parameters = parameters;
@@ -1,6 +1,5 @@
1
1
  import React from "react";
2
2
  import {MemoryRouter, Route} from "react-router-dom";
3
- import "../../../css/themes/default/ext_quickaccess.css";
4
3
  import PropTypes from "prop-types";
5
4
  import FilterResourcesByGroupPage from "./FilterResourcesByGroupPage";
6
5
  import AppContext from "../../contexts/AppContext";
@@ -24,13 +23,16 @@ Template.propTypes = {
24
23
  initialEntries: PropTypes.array
25
24
  };
26
25
 
27
-
26
+ const parameters = {
27
+ css: "ext_quickaccess"
28
+ };
28
29
 
29
30
  export const InitialLoad = Template.bind({});
30
31
  InitialLoad.args = {
31
32
  context: defaultAppContext(),
32
33
  initialEntries: ['/']
33
34
  };
35
+ InitialLoad.parameters = parameters;
34
36
 
35
37
  const contextNoGroup = {
36
38
  port: {
@@ -42,6 +44,7 @@ NoGroups.args = {
42
44
  context: defaultAppContext(contextNoGroup),
43
45
  initialEntries: ['/']
44
46
  };
47
+ NoGroups.parameters = parameters;
45
48
 
46
49
  const contextGroupsAndResources = {
47
50
  port: {
@@ -52,4 +55,5 @@ export const GroupsResourcesMatched = Template.bind({});
52
55
  GroupsResourcesMatched.args = {
53
56
  context: defaultAppContext(contextGroupsAndResources),
54
57
  initialEntries: ['/']
55
- };
58
+ };
59
+ GroupsResourcesMatched.parameters = parameters;
@@ -1,6 +1,5 @@
1
1
  import React from "react";
2
2
  import {MemoryRouter, Route} from "react-router-dom";
3
- import "../../../css/themes/default/ext_quickaccess.css";
4
3
  import PropTypes from "prop-types";
5
4
  import FilterResourcesByItemsIOwnPage from "./FilterResourcesByItemsIOwnPage";
6
5
  import AppContext from "../../contexts/AppContext";
@@ -23,12 +22,15 @@ Template.propTypes = {
23
22
  context: PropTypes.object,
24
23
  };
25
24
 
26
-
25
+ const parameters = {
26
+ css: "ext_quickaccess"
27
+ };
27
28
 
28
29
  export const InitialLoad = Template.bind({});
29
30
  InitialLoad.args = {
30
31
  context: defaultAppContext()
31
32
  };
33
+ InitialLoad.parameters = parameters;
32
34
 
33
35
  const contextNoItem = {
34
36
  port: {
@@ -39,6 +41,7 @@ export const NoItemsIOwnResource = Template.bind({});
39
41
  NoItemsIOwnResource.args = {
40
42
  context: defaultAppContext(contextNoItem)
41
43
  };
44
+ NoItemsIOwnResource.parameters = parameters;
42
45
 
43
46
  const contextResources = {
44
47
  port: {
@@ -49,7 +52,4 @@ export const ItemsIOwnResources = Template.bind({});
49
52
  ItemsIOwnResources.args = {
50
53
  context: defaultAppContext(contextResources)
51
54
  };
52
-
53
-
54
-
55
-
55
+ ItemsIOwnResources.parameters = parameters;
@@ -1,6 +1,5 @@
1
1
  import React from "react";
2
2
  import {MemoryRouter, Route} from "react-router-dom";
3
- import "../../../css/themes/default/ext_quickaccess.css";
4
3
  import PropTypes from "prop-types";
5
4
  import FilterResourcesByRecentlyModifiedPage from "./FilterResourcesByRecentlyModifiedPage";
6
5
  import AppContext from "../../contexts/AppContext";
@@ -23,12 +22,15 @@ Template.propTypes = {
23
22
  context: PropTypes.object,
24
23
  };
25
24
 
26
-
25
+ const parameters = {
26
+ css: "ext_quickaccess"
27
+ };
27
28
 
28
29
  export const InitialLoad = Template.bind({});
29
30
  InitialLoad.args = {
30
31
  context: defaultAppContext()
31
32
  };
33
+ InitialLoad.parameters = parameters;
32
34
 
33
35
  const contextNoResource = {
34
36
  storage: {
@@ -41,6 +43,7 @@ export const NoRecentlyModifiedResource = Template.bind({});
41
43
  NoRecentlyModifiedResource.args = {
42
44
  context: defaultAppContext(contextNoResource)
43
45
  };
46
+ NoRecentlyModifiedResource.parameters = parameters;
44
47
 
45
48
  const contextResources = {
46
49
  storage: {
@@ -53,7 +56,4 @@ export const RecentlyModifiedResources = Template.bind({});
53
56
  RecentlyModifiedResources.args = {
54
57
  context: defaultAppContext(contextResources)
55
58
  };
56
-
57
-
58
-
59
-
59
+ RecentlyModifiedResources.parameters = parameters;
@@ -1,6 +1,5 @@
1
1
  import React from "react";
2
2
  import {MemoryRouter, Route} from "react-router-dom";
3
- import "../../../css/themes/default/ext_quickaccess.css";
4
3
  import PropTypes from "prop-types";
5
4
  import FilterResourcesBySharedWithMePage from "./FilterResourcesBySharedWithMePage";
6
5
  import AppContext from "../../contexts/AppContext";
@@ -23,12 +22,15 @@ Template.propTypes = {
23
22
  context: PropTypes.object,
24
23
  };
25
24
 
26
-
25
+ const parameters = {
26
+ css: "ext_quickaccess"
27
+ };
27
28
 
28
29
  export const InitialLoad = Template.bind({});
29
30
  InitialLoad.args = {
30
31
  context: defaultAppContext()
31
32
  };
33
+ InitialLoad.parameters = parameters;
32
34
 
33
35
  const contextNoResource = {
34
36
  port: {
@@ -39,6 +41,7 @@ export const NoSharedWithMeResource = Template.bind({});
39
41
  NoSharedWithMeResource.args = {
40
42
  context: defaultAppContext(contextNoResource)
41
43
  };
44
+ NoSharedWithMeResource.parameters = parameters;
42
45
 
43
46
  const contextResources = {
44
47
  port: {
@@ -49,7 +52,4 @@ export const SharedWithMeResources = Template.bind({});
49
52
  SharedWithMeResources.args = {
50
53
  context: defaultAppContext(contextResources)
51
54
  };
52
-
53
-
54
-
55
-
55
+ SharedWithMeResources.parameters = parameters;