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
@@ -1,3 +1,4 @@
1
+
1
2
  /**
2
3
  * Passbolt ~ Open source password manager for teams
3
4
  * Copyright (c) 2020 Passbolt SA (https://www.passbolt.com)
@@ -18,6 +19,7 @@ import {BrowserRouter as Router} from 'react-router-dom';
18
19
  import {FilterResourcesByFoldersItemPageObject} from "./FilterResourcesByFoldersItem.test.page";
19
20
  import MockTranslationProvider from "../../../test/mock/components/Internationalisation/MockTranslationProvider";
20
21
  import FilterResourcesByFolders from "./FilterResourcesByFolders";
22
+ import {DragContext} from "../../../contexts/DragContext";
21
23
 
22
24
  /**
23
25
  * The FilterResourcesByFolders component represented as a page
@@ -33,7 +35,9 @@ export default class FilterResourcesByFoldersPage {
33
35
  <MockTranslationProvider>
34
36
  <AppContext.Provider value={appContext}>
35
37
  <Router>
36
- <FilterResourcesByFolders.WrappedComponent {...props}/>
38
+ <DragContext.Provider value={props.dragContext}>
39
+ <FilterResourcesByFolders.WrappedComponent {...props}/>
40
+ </DragContext.Provider>
37
41
  </Router>
38
42
  </AppContext.Provider>
39
43
  </MockTranslationProvider>
@@ -1,7 +1,6 @@
1
1
  import React from "react";
2
2
  import {MemoryRouter, Route} from "react-router-dom";
3
3
  import AppContext from "../../../contexts/AppContext";
4
- import "../../../../css/themes/default/ext_app.css";
5
4
  import FilterResourcesByFolders from "./FilterResourcesByFolders";
6
5
 
7
6
 
@@ -18,6 +18,9 @@ import {withContextualMenu} from "../../../contexts/ContextualMenuContext";
18
18
  import FilterResourcesByFoldersItemContextualMenu from "./FilterResourcesByFoldersItemContextualMenu";
19
19
  import {withAppContext} from "../../../contexts/AppContext";
20
20
  import {ResourceWorkspaceFilterTypes, withResourceWorkspace} from "../../../contexts/ResourceWorkspaceContext";
21
+ import {withDrag} from "../../../contexts/DragContext";
22
+ import DisplayDragFolderItem from "./DisplayDragFolderItem";
23
+ import {withRouter} from "react-router-dom";
21
24
 
22
25
  class FilterResourcesByFoldersItem extends React.Component {
23
26
  /**
@@ -45,7 +48,7 @@ class FilterResourcesByFoldersItem extends React.Component {
45
48
 
46
49
 
47
50
  bindCallbacks() {
48
- this.handleClickLeftCaretEvent = this.handleClickLeftCaretEvent.bind(this);
51
+ this.handleToggleOpenFolder = this.handleToggleOpenFolder.bind(this);
49
52
  this.handleContextualMenuEvent = this.handleContextualMenuEvent.bind(this);
50
53
  this.handleDragEndEvent = this.handleDragEndEvent.bind(this);
51
54
  this.handleDragLeaveEvent = this.handleDragLeaveEvent.bind(this);
@@ -56,14 +59,24 @@ class FilterResourcesByFoldersItem extends React.Component {
56
59
  this.handleSelectEvent = this.handleSelectEvent.bind(this);
57
60
  }
58
61
 
62
+ componentDidMount() {
63
+ if (this.props.match.params.filterByFolderId) {
64
+ // Expand folder tree until the selected folder
65
+ this.openFolderParentTree(this.props.match.params.filterByFolderId);
66
+ }
67
+ }
68
+
59
69
  /**
60
70
  * Handle when the user start dragging the folder.
61
71
  * @param {ReactEvent} event The event
62
72
  */
63
73
  handleDragStartEvent(event) {
64
- const dragging = true;
65
- this.setState({dragging});
66
- this.props.onDragStart(event, this.props.folder);
74
+ event.persist();
75
+ const draggedItems = {
76
+ folders: [this.props.folder],
77
+ resources: []
78
+ };
79
+ this.props.dragContext.onDragStart(event, DisplayDragFolderItem, draggedItems);
67
80
  }
68
81
 
69
82
  /**
@@ -71,16 +84,29 @@ class FilterResourcesByFoldersItem extends React.Component {
71
84
  * Fold/Unfold the folder.
72
85
  * @param {ReactEvent} event The event
73
86
  */
74
- handleClickLeftCaretEvent(event) {
87
+ handleToggleOpenFolder(event) {
75
88
  /*
76
89
  * Prevent the component to select the folder.
77
90
  * @todo This default behavior should not be allowed as it will break other behavior, such as closing a contextual menu closing.
78
91
  */
79
92
  event.stopPropagation();
80
- if (this.isOpen()) {
81
- this.props.onClose(event, this.props.folder);
82
- } else {
83
- this.props.onOpen(event, this.props.folder);
93
+ const open = !this.state.open;
94
+ this.setState({open});
95
+ }
96
+
97
+ /**
98
+ * Open the tree until a given folder
99
+ * @param {object} selectedFolderId The folder id to scroll to
100
+ */
101
+ openFolderParentTree(selectedFolderId) {
102
+ const selectedFolder = this.props.context.folders.find(folder => folder.id === selectedFolderId);
103
+ // If the selected folder has a parent. Open it if not yet open.
104
+ if (selectedFolder.folder_parent_id) {
105
+ if (selectedFolder.folder_parent_id === this.props.folder.id) {
106
+ this.setState({open: true});
107
+ } else {
108
+ this.openFolderParentTree(selectedFolder.folder_parent_id);
109
+ }
84
110
  }
85
111
  }
86
112
 
@@ -89,7 +115,7 @@ class FilterResourcesByFoldersItem extends React.Component {
89
115
  * @return {boolean}
90
116
  */
91
117
  isOpen() {
92
- return this.props.openFolders.some(folder => folder.id === this.props.folder.id);
118
+ return this.state.open;
93
119
  }
94
120
 
95
121
  /**
@@ -123,8 +149,8 @@ class FilterResourcesByFoldersItem extends React.Component {
123
149
  * Handle when the user stop dragging content.
124
150
  * @param {ReactEvent} event The event
125
151
  */
126
- handleDragEndEvent(event) {
127
- this.props.onDragEnd(event);
152
+ handleDragEndEvent() {
153
+ this.props.dragContext.onDragEnd();
128
154
  }
129
155
 
130
156
  /**
@@ -169,7 +195,7 @@ class FilterResourcesByFoldersItem extends React.Component {
169
195
  if (!open) {
170
196
  const now = Date.now();
171
197
  if (now - this.state.draggingOverSince > period) {
172
- this.props.onOpen(event, this.props.folder);
198
+ this.handleToggleOpenFolder(event);
173
199
  }
174
200
  }
175
201
  }
@@ -178,11 +204,14 @@ class FilterResourcesByFoldersItem extends React.Component {
178
204
  * Handle when the user drop content on this component.
179
205
  * @param {ReactEvent} event The event
180
206
  */
181
- handleDropEvent(event) {
207
+ handleDropEvent() {
182
208
  // The user cannot drop the dragged content on a dragged item.
183
- const isDroppingOnDraggedItem = this.props.draggedItems.folders.some(item => item.id === this.props.folder.id);
209
+ const folders = this.props.dragContext.draggedItems.folders.map(folder => folder.id);
210
+ const resources = this.props.dragContext.draggedItems.resources.map(resource => resource.id);
211
+ const folderParentId = this.props.folder.id;
212
+ const isDroppingOnDraggedItem = this.draggedItems.folders.some(item => item.id === folderParentId);
184
213
  if (!isDroppingOnDraggedItem) {
185
- this.props.onDrop(event, this.props.folder);
214
+ this.props.context.port.request("passbolt.folders.open-move-confirmation-dialog", {folders, resources, folderParentId});
186
215
  }
187
216
 
188
217
  // The dragLeave event is not fired when a drop is happening. Cancel the state manually.
@@ -191,11 +220,10 @@ class FilterResourcesByFoldersItem extends React.Component {
191
220
  }
192
221
 
193
222
  /**
194
- * Handle when this component is selected.
195
- * @param {ReactEvent} event The event
223
+ * Handle the user selects a folder from the list.
196
224
  */
197
- handleSelectEvent(event) {
198
- this.props.onSelect(event, this.props.folder);
225
+ handleSelectEvent() {
226
+ this.props.history.push(`/app/folders/view/${this.props.folder.id}`);
199
227
  }
200
228
 
201
229
  /**
@@ -296,8 +324,8 @@ class FilterResourcesByFoldersItem extends React.Component {
296
324
  * @returns {int}
297
325
  */
298
326
  getDraggedItemsLowestPermission() {
299
- const draggedFoldersLowestPermission = this.getItemsListLowestPermission(this.props.draggedItems.folders);
300
- const draggedResourcesLowestPermission = this.getItemsListLowestPermission(this.props.draggedItems.resources);
327
+ const draggedFoldersLowestPermission = this.getItemsListLowestPermission(this.draggedItems.folders);
328
+ const draggedResourcesLowestPermission = this.getItemsListLowestPermission(this.draggedItems.resources);
301
329
 
302
330
  return draggedFoldersLowestPermission < draggedResourcesLowestPermission ? draggedFoldersLowestPermission : draggedResourcesLowestPermission;
303
331
  }
@@ -307,7 +335,7 @@ class FilterResourcesByFoldersItem extends React.Component {
307
335
  * @returns {boolean}
308
336
  */
309
337
  canDropInto() {
310
- if (!this.props.isDragging) {
338
+ if (!this.isDragging()) {
311
339
  return false;
312
340
  }
313
341
 
@@ -325,13 +353,13 @@ class FilterResourcesByFoldersItem extends React.Component {
325
353
  }
326
354
 
327
355
  // Cannot move a folder into one of its own children.
328
- if (this.isChildOfAny(this.props.folder, this.props.draggedItems.folders)) {
356
+ if (this.isChildOfAny(this.props.folder, this.draggedItems.folders)) {
329
357
  return false;
330
358
  }
331
359
 
332
360
  // Cannot move a folder into itself.
333
- for (const i in this.props.draggedItems.folders) {
334
- if (this.props.folder.id === this.props.draggedItems.folders[i].id) {
361
+ for (const i in this.draggedItems.folders) {
362
+ if (this.props.folder.id === this.draggedItems.folders[i].id) {
335
363
  return false;
336
364
  }
337
365
  }
@@ -344,12 +372,9 @@ class FilterResourcesByFoldersItem extends React.Component {
344
372
  * @returns {boolean}
345
373
  */
346
374
  isDragged() {
347
- for (const i in this.props.draggedItems.folders) {
348
- if (this.props.folder.id === this.props.draggedItems.folders[i].id) {
349
- return true;
350
- }
375
+ if (this.isDragging()) {
376
+ return this.draggedItems.folders.some(folder => folder.id === this.props.folder.id);
351
377
  }
352
-
353
378
  return false;
354
379
  }
355
380
 
@@ -363,8 +388,8 @@ class FilterResourcesByFoldersItem extends React.Component {
363
388
  * - The user is not allowed to drag any of dragged items;
364
389
  * - The user is not allowed to drop content in the folder associated to this component.
365
390
  */
366
- if (this.props.isDragging) {
367
- const canDragItems = this.canDragItems(this.props.draggedItems);
391
+ if (this.isDragging()) {
392
+ const canDragItems = this.canDragItems(this.draggedItems);
368
393
  if (!canDragItems) {
369
394
  return true;
370
395
  }
@@ -407,6 +432,22 @@ class FilterResourcesByFoldersItem extends React.Component {
407
432
  return folders;
408
433
  }
409
434
 
435
+ /**
436
+ * return dragged items
437
+ * @returns {*}
438
+ */
439
+ get draggedItems() {
440
+ return this.props.dragContext.draggedItems;
441
+ }
442
+
443
+ /**
444
+ * Check if the user is currently dragging content.
445
+ * @returns {boolean}
446
+ */
447
+ isDragging() {
448
+ return this.props.dragContext.dragging;
449
+ }
450
+
410
451
  /**
411
452
  * Render the component
412
453
  * @returns {JSX}
@@ -438,10 +479,10 @@ class FilterResourcesByFoldersItem extends React.Component {
438
479
  {hasChildren &&
439
480
  <Fragment>
440
481
  {isOpen &&
441
- <Icon name="caret-down" onClick={this.handleClickLeftCaretEvent}/>
482
+ <Icon name="caret-down" onClick={this.handleToggleOpenFolder}/>
442
483
  }
443
484
  {!isOpen &&
444
- <Icon name="caret-right" onClick={this.handleClickLeftCaretEvent}/>
485
+ <Icon name="caret-right" onClick={this.handleToggleOpenFolder}/>
445
486
  }
446
487
  </Fragment>
447
488
  }
@@ -465,17 +506,7 @@ class FilterResourcesByFoldersItem extends React.Component {
465
506
  <ul className="folders-tree">
466
507
  {folderChildren.map(folder => <DecoratedFoldersTreeItem
467
508
  key={`folders-tree-${folder.id}`}
468
- draggedItems={this.props.draggedItems}
469
- folder={folder}
470
- folders={this.props.context.folders}
471
- isDragging={this.props.isDragging}
472
- onClose={this.props.onClose}
473
- onDragEnd={this.props.onDragEnd}
474
- onDragStart={this.props.onDragStart}
475
- onDrop={this.props.onDrop}
476
- onOpen={this.props.onOpen}
477
- onSelect={this.props.onSelect}
478
- openFolders={this.props.openFolders}/>)}
509
+ folder={folder}/>)}
479
510
  </ul>
480
511
  }
481
512
  </li>
@@ -486,19 +517,13 @@ class FilterResourcesByFoldersItem extends React.Component {
486
517
  FilterResourcesByFoldersItem.propTypes = {
487
518
  context: PropTypes.any, // The app context
488
519
  contextualMenuContext: PropTypes.any, // The contextual menu context
489
- draggedItems: PropTypes.object,
520
+ history: PropTypes.object,
521
+ match: PropTypes.object,
490
522
  folder: PropTypes.object,
491
- isDragging: PropTypes.bool,
492
- onClose: PropTypes.func,
493
- onDragEnd: PropTypes.func,
494
- onDragStart: PropTypes.func,
495
- onDrop: PropTypes.func,
496
- onOpen: PropTypes.func,
497
- onSelect: PropTypes.func,
498
- openFolders: PropTypes.array,
499
- resourceWorkspaceContext: PropTypes.any
523
+ resourceWorkspaceContext: PropTypes.any,
524
+ dragContext: PropTypes.any,
500
525
  };
501
526
 
502
- const DecoratedFoldersTreeItem = withAppContext(withContextualMenu(withResourceWorkspace(FilterResourcesByFoldersItem)));
527
+ const DecoratedFoldersTreeItem = withRouter(withAppContext(withContextualMenu(withResourceWorkspace(withDrag(FilterResourcesByFoldersItem)))));
503
528
 
504
- export default withAppContext(withContextualMenu(withResourceWorkspace(FilterResourcesByFoldersItem)));
529
+ export default withRouter(withAppContext(withContextualMenu(withResourceWorkspace(withDrag(FilterResourcesByFoldersItem)))));
@@ -1,3 +1,5 @@
1
+ import {ResourceWorkspaceFilterTypes} from "../../../contexts/ResourceWorkspaceContext";
2
+ import MockPort from "../../../test/mock/MockPort";
1
3
 
2
4
  /**
3
5
  * Returns the default app context for the unit test
@@ -6,7 +8,8 @@
6
8
  */
7
9
  export function defaultAppContext(appContext) {
8
10
  const defaultAppContext = {
9
- folders: foldersMock
11
+ port: new MockPort(),
12
+ folders: foldersMock,
10
13
  };
11
14
  return Object.assign(defaultAppContext, appContext || {});
12
15
  }
@@ -17,27 +20,34 @@ export function defaultAppContext(appContext) {
17
20
  */
18
21
  export function defaultProps() {
19
22
  return {
20
- draggedItems: {
21
- folders: [foldersMock[4]],
22
- resources: []
23
- },
24
- folders: foldersMock,
25
- folder: foldersMock[1],
26
- selectedFolder: {
27
- id: foldersMock[1].id
23
+ resourceWorkspaceContext: {
24
+ filter: {
25
+ type: ResourceWorkspaceFilterTypes.FOLDER,
26
+ payload: {
27
+ folder: foldersMock[0]
28
+ }
29
+ }
28
30
  },
29
- isDragging: true,
30
- onClose: jest.fn(),
31
- onDragEnd: jest.fn(),
32
- onDragStart: jest.fn(),
33
- onDrop: jest.fn(),
34
- onOpen: jest.fn(),
35
- onSelect: jest.fn(),
36
- openFolders: {
37
- some: () => true
31
+ dragContext: {
32
+ dragging: true,
33
+ draggedItems: {
34
+ folders: [foldersMock[2]],
35
+ resources: []
36
+ },
37
+ onDragStart: jest.fn(),
38
+ onDragEnd: jest.fn(),
38
39
  },
40
+ folder: foldersMock[0],
39
41
  contextualMenuContext: {
40
42
  show: jest.fn()
43
+ },
44
+ history: {
45
+ push: jest.fn(),
46
+ },
47
+ match: {
48
+ params: {
49
+ filterByFolderId: foldersMock[2].id
50
+ }
41
51
  }
42
52
  };
43
53
  }
@@ -48,22 +58,24 @@ export function defaultProps() {
48
58
  */
49
59
  export function defaultPropsCloseFolders() {
50
60
  return {
51
- draggedItems: {
52
- folders: []
61
+ dragContext: {
62
+ dragging: false,
63
+ draggedItems: null
53
64
  },
54
- folders: foldersMock,
55
- folder: foldersMock[1],
56
- onClose: jest.fn(),
57
- onDragEnd: jest.fn(),
58
- onDragStart: jest.fn(),
59
- onDrop: jest.fn(),
60
- onOpen: jest.fn(),
61
- onSelect: jest.fn(),
62
- openFolders: {
63
- some: () => false
65
+ resourceWorkspaceContext: {
66
+ filter: {
67
+ type: ResourceWorkspaceFilterTypes.ALL,
68
+ }
64
69
  },
70
+ folder: foldersMock[0],
65
71
  contextualMenuContext: {
66
72
  show: jest.fn()
73
+ },
74
+ history: {
75
+ push: jest.fn()
76
+ },
77
+ match: {
78
+ params: jest.fn()
67
79
  }
68
80
  };
69
81
  }
@@ -73,27 +85,8 @@ export function defaultPropsCloseFolders() {
73
85
  */
74
86
  export const foldersMock = [
75
87
  {
76
- "id": "9e03fd73-04c0-5514-95fa-1a6cf2c7c093",
77
- "name": "Accounting",
78
- "created": "2020-02-01T00:00:00+00:00",
79
- "modified": "2020-02-01T00:00:00+00:00",
80
- "created_by": "d57c10f5-639d-5160-9c81-8a0c6c4ec856",
81
- "modified_by": "d57c10f5-639d-5160-9c81-8a0c6c4ec856",
82
- "permission": {
83
- "id": "6aada140-fe8b-5e69-a90f-ae0cec6d3dcf",
84
- "aco": "Folder",
85
- "aco_foreign_key": "9e03fd73-04c0-5514-95fa-1a6cf2c7c093",
86
- "aro": "User",
87
- "aro_foreign_key": "f848277c-5398-58f8-a82a-72397af2d450",
88
- "type": 1,
89
- "created": "2020-05-11T10:11:13+00:00",
90
- "modified": "2020-05-11T10:11:13+00:00"
91
- },
92
- "folder_parent_id": null,
93
- "personal": false
94
- }, {
95
- "id": "299f613b-0706-570a-8636-956186384e0a",
96
- "name": "ParentCertificates",
88
+ "id": "3ed65efd-7c41-5906-9c02-71e2d95951da",
89
+ "name": "Certificates",
97
90
  "created": "2020-02-01T00:00:00+00:00",
98
91
  "modified": "2020-02-01T00:00:00+00:00",
99
92
  "created_by": "d57c10f5-639d-5160-9c81-8a0c6c4ec856",
@@ -111,8 +104,8 @@ export const foldersMock = [
111
104
  "folder_parent_id": null,
112
105
  "personal": false
113
106
  }, {
114
- "id": "3ed65efd-7c41-5906-9c02-71e2d95951da",
115
- "name": "Certificates",
107
+ "id": "3ed65efd-7c41-5906-9c02-71e2d95951db",
108
+ "name": "ChildCertificates2",
116
109
  "created": "2020-02-01T00:00:00+00:00",
117
110
  "modified": "2020-02-01T00:00:00+00:00",
118
111
  "created_by": "d57c10f5-639d-5160-9c81-8a0c6c4ec856",
@@ -127,11 +120,11 @@ export const foldersMock = [
127
120
  "created": "2020-05-11T10:11:13+00:00",
128
121
  "modified": "2020-05-11T10:11:13+00:00"
129
122
  },
130
- "folder_parent_id": "299f613b-0706-570a-8636-956186384e0a",
123
+ "folder_parent_id": "3ed65efd-7c41-5906-9c02-71e2d95951da",
131
124
  "personal": false
132
125
  }, {
133
- "id": "3ed65efd-7c41-5906-9c02-71e2d95951db",
134
- "name": "ChildCertificates2",
126
+ "id": "3ed65efd-7c41-5906-9c02-71e2d95951dc",
127
+ "name": "ChildCertificates1",
135
128
  "created": "2020-02-01T00:00:00+00:00",
136
129
  "modified": "2020-02-01T00:00:00+00:00",
137
130
  "created_by": "d57c10f5-639d-5160-9c81-8a0c6c4ec856",
@@ -149,8 +142,8 @@ export const foldersMock = [
149
142
  "folder_parent_id": "3ed65efd-7c41-5906-9c02-71e2d95951da",
150
143
  "personal": false
151
144
  }, {
152
- "id": "3ed65efd-7c41-5906-9c02-71e2d95951dc",
153
- "name": "ChildCertificates1",
145
+ "id": "3ed65efd-7c41-5906-9c02-71e2d95951dg",
146
+ "name": "ChildCertificates3",
154
147
  "created": "2020-02-01T00:00:00+00:00",
155
148
  "modified": "2020-02-01T00:00:00+00:00",
156
149
  "created_by": "d57c10f5-639d-5160-9c81-8a0c6c4ec856",
@@ -165,7 +158,7 @@ export const foldersMock = [
165
158
  "created": "2020-05-11T10:11:13+00:00",
166
159
  "modified": "2020-05-11T10:11:13+00:00"
167
160
  },
168
- "folder_parent_id": "3ed65efd-7c41-5906-9c02-71e2d95951da",
161
+ "folder_parent_id": "3ed65efd-7c41-5906-9c02-71e2d95951dc",
169
162
  "personal": false
170
163
  }
171
164
  ];
@@ -30,7 +30,10 @@ beforeEach(() => {
30
30
 
31
31
  describe("As LU I should see each folders", () => {
32
32
  let page; // The page to test against
33
- const context = defaultAppContext(); // The applicative context
33
+ const appContext = defaultAppContext(); // The app context to pass
34
+ const requestMockImpl = jest.fn((message, data) => data);
35
+ const mockContextRequest = (context, implementation) => jest.spyOn(appContext.port, 'request').mockImplementation(implementation);
36
+ mockContextRequest(appContext, requestMockImpl);
34
37
 
35
38
  describe('As LU I should see and identify each folders open', () => {
36
39
  const props = defaultProps(); // The props to pass
@@ -42,52 +45,54 @@ describe("As LU I should see each folders", () => {
42
45
  */
43
46
 
44
47
  beforeEach(() => {
45
- page = new FilterResourcesByFoldersItemPage(context, props);
48
+ page = new FilterResourcesByFoldersItemPage(appContext, props);
46
49
  });
47
50
 
48
- it('As LU I should see all folders name', () => {
51
+ it('As LU I should see all folders name', async() => {
49
52
  expect(page.filterResourcesByFoldersItem.exists()).toBeTruthy();
53
+ await page.filterResourcesByFoldersItem.toggleDisplayChildFolders(2);
50
54
  expect(page.filterResourcesByFoldersItem.count).toBe(4);
51
- expect(page.filterResourcesByFoldersItem.name(1)).toBe("ParentCertificates");
52
- expect(page.filterResourcesByFoldersItem.name(2)).toBe("Certificates");
53
- expect(page.filterResourcesByFoldersItem.name(3)).toBe("ChildCertificates1");
55
+ expect(page.filterResourcesByFoldersItem.name(1)).toBe("Certificates");
56
+ expect(page.filterResourcesByFoldersItem.name(2)).toBe("ChildCertificates1");
57
+ expect(page.filterResourcesByFoldersItem.name(3)).toBe("ChildCertificates3");
54
58
  expect(page.filterResourcesByFoldersItem.name(4)).toBe("ChildCertificates2");
59
+ expect(page.filterResourcesByFoldersItem.selectedFolderName).toBe("Certificates");
55
60
  });
56
61
 
57
62
  it('As LU I should filter by folder', async() => {
58
- await page.filterResourcesByFoldersItem.filter(2);
59
- expect(props.onSelect).toHaveBeenCalled();
63
+ await page.filterResourcesByFoldersItem.filter(1);
64
+ expect(props.history.push).toHaveBeenCalledWith('/app/folders/view/3ed65efd-7c41-5906-9c02-71e2d95951da');
60
65
  });
61
66
 
62
67
  it('As LU I should be able to open a contextual menu for a folder with the more button', async() => {
63
68
  await page.filterResourcesByFoldersItem.openContextualMenuWithButton(1);
64
- expect(props.contextualMenuContext.show).toHaveBeenCalledWith(FilterResourcesByFoldersItemContextualMenu, {folder: foldersMock[1]});
69
+ expect(props.contextualMenuContext.show).toHaveBeenCalledWith(FilterResourcesByFoldersItemContextualMenu, {folder: foldersMock[0]});
65
70
  });
66
71
 
67
72
  it('As LU I should be able to open a contextual menu for a folder with right click on parent folder', async() => {
68
73
  await page.filterResourcesByFoldersItem.openContextualMenuWithRightClick(1);
69
- expect(props.contextualMenuContext.show).toHaveBeenCalledWith(FilterResourcesByFoldersItemContextualMenu, {folder: foldersMock[1]});
74
+ expect(props.contextualMenuContext.show).toHaveBeenCalledWith(FilterResourcesByFoldersItemContextualMenu, {folder: foldersMock[0]});
70
75
  });
71
76
 
72
77
  it('As LU I should be able to open a contextual menu for a folder with right click on a child folder', async() => {
73
78
  await page.filterResourcesByFoldersItem.openContextualMenuWithRightClick(3);
74
- expect(props.contextualMenuContext.show).toHaveBeenCalledWith(FilterResourcesByFoldersItemContextualMenu, {folder: foldersMock[1]});
79
+ expect(props.contextualMenuContext.show).toHaveBeenCalledWith(FilterResourcesByFoldersItemContextualMenu, {folder: foldersMock[0]});
75
80
  });
76
81
 
77
82
  it('As LU I should be able to drag and drop a folder on another folder', async() => {
78
83
  await page.filterResourcesByFoldersItem.dragStartOnFolder(3);
79
- await page.filterResourcesByFoldersItem.dragEndOnFolder(3);
84
+ await page.filterResourcesByFoldersItem.dragEndOnFolder(1);
80
85
  await page.filterResourcesByFoldersItem.dragOverOnFolder(1);
81
86
  await page.filterResourcesByFoldersItem.dragLeaveOnFolder(1);
82
- await page.filterResourcesByFoldersItem.onDropFolder(1);
83
- expect(props.onDragStart).toHaveBeenCalled();
84
- expect(props.onDragEnd).toHaveBeenCalled();
85
- expect(props.onDrop).toHaveBeenCalled();
87
+ await page.filterResourcesByFoldersItem.onDropFolder(3);
88
+ expect(props.dragContext.onDragStart).toHaveBeenCalled();
89
+ expect(props.dragContext.onDragEnd).toHaveBeenCalled();
90
+ expect(appContext.port.request).toHaveBeenCalledWith("passbolt.folders.open-move-confirmation-dialog", {folders: ["3ed65efd-7c41-5906-9c02-71e2d95951dc"], resources:[], folderParentId: foldersMock[1].id});
86
91
  });
87
92
 
88
93
  it('As LU I should be able to close folder to hide the child folders', async() => {
89
- await page.filterResourcesByFoldersItem.toggleDisplayChildFolders(2);
90
- expect(props.onClose).toHaveBeenCalled();
94
+ await page.filterResourcesByFoldersItem.toggleDisplayChildFolders(1);
95
+ expect(page.filterResourcesByFoldersItem.count).toBe(1);
91
96
  });
92
97
  });
93
98
 
@@ -99,12 +104,12 @@ describe("As LU I should see each folders", () => {
99
104
  */
100
105
 
101
106
  beforeEach(() => {
102
- page = new FilterResourcesByFoldersItemPage(context, props);
107
+ page = new FilterResourcesByFoldersItemPage(appContext, props);
103
108
  });
104
109
 
105
110
  it('As LU I should be able to open folder to see or not the child folders', async() => {
106
111
  await page.filterResourcesByFoldersItem.toggleDisplayChildFolders(1);
107
- expect(props.onOpen).toHaveBeenCalled();
112
+ expect(page.filterResourcesByFoldersItem.count).toBe(3);
108
113
  });
109
114
  });
110
115
  });
@@ -15,9 +15,11 @@
15
15
 
16
16
 
17
17
  import {fireEvent, render, waitFor} from "@testing-library/react";
18
- import AppContext from "../../../contexts/AppContext";
19
18
  import React from "react";
20
19
  import FilterResourcesByFoldersItem from "./FilterResourcesByFoldersItem";
20
+ import {BrowserRouter as Router} from "react-router-dom";
21
+ import AppContext from "../../../contexts/AppContext";
22
+ import {DragContext} from "../../../contexts/DragContext";
21
23
 
22
24
  /**
23
25
  * The FilterResourcesByFolders component represented as a page
@@ -31,7 +33,11 @@ export default class FilterResourcesByFoldersItemPage {
31
33
  constructor(appContext, props) {
32
34
  this._page = render(
33
35
  <AppContext.Provider value={appContext}>
34
- <FilterResourcesByFoldersItem {...props}/>
36
+ <Router>
37
+ <DragContext.Provider value={props.dragContext}>
38
+ <FilterResourcesByFoldersItem.WrappedComponent {...props}/>
39
+ </DragContext.Provider>
40
+ </Router>
35
41
  </AppContext.Provider>
36
42
  );
37
43
  this.setupPageObjects();
@@ -83,10 +89,10 @@ export class FilterResourcesByFoldersItemPageObject {
83
89
  }
84
90
 
85
91
  /**
86
- * Returns the folder selected
92
+ * Returns the name of the folder selected
87
93
  */
88
- get isSelected() {
89
- return this._container.querySelector('li.folder-item .row.selected') !== null;
94
+ get selectedFolderName() {
95
+ return this._container.querySelector('li.folder-item .row.selected').textContent;
90
96
  }
91
97
 
92
98
  /**
@@ -1,7 +1,6 @@
1
1
  import React from "react";
2
2
  import {MemoryRouter, Route} from "react-router-dom";
3
3
  import AppContext from "../../../contexts/AppContext";
4
- import "../../../../css/themes/default/ext_app.css";
5
4
  import FilterResourcesByShortcuts from "./FilterResourcesByShortcuts";
6
5
 
7
6