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.
- package/build/css/help.min.css +2 -2
- package/build/css/public.min.css +2 -2
- package/build/css/themes/default/api_authentication.min.css +3 -3
- package/build/css/themes/default/api_cloud.min.css +3 -3
- package/build/css/themes/default/api_main.min.css +4 -4
- package/build/css/themes/default/api_reports.min.css +4 -4
- package/build/css/themes/default/api_webinstaller.min.css +3 -3
- package/build/css/themes/default/ext_app.min.css +4 -4
- package/build/css/themes/default/ext_authentication.min.css +3 -3
- package/build/css/themes/default/ext_external.min.css +2 -2
- package/build/css/themes/default/ext_in_form_cta.min.css +3 -3
- package/build/css/themes/default/ext_in_form_menu.min.css +3 -3
- package/build/css/themes/default/ext_quickaccess.min.css +3 -3
- package/build/css/themes/midgar/api_authentication.min.css +9 -0
- package/build/css/themes/midgar/api_main.min.css +4 -4
- package/build/css/themes/midgar/api_reports.min.css +4 -4
- package/build/css/themes/midgar/ext_app.min.css +4 -4
- package/build/css/themes/midgar/ext_authentication.min.css +3 -3
- package/build/css/themes/midgar/ext_in_form_cta.min.css +3 -3
- package/build/css/themes/midgar/ext_in_form_menu.min.css +3 -3
- package/build/css/themes/midgar/ext_quickaccess.min.css +3 -3
- package/build/js/dist/api-app.js +1 -1
- package/build/js/dist/api-recover.js +1 -1
- package/build/js/dist/api-setup.js +1 -1
- package/build/js/dist/api-triage.js +1 -1
- package/build/js/dist/api-vendors.js +1 -1
- package/build/js/dist/api-vendors.js.LICENSE.txt +40 -4
- package/package.json +7 -6
- package/src/img/third_party/ChromeWebStore_black.svg +1 -0
- package/src/img/third_party/ChromeWebStore_white.svg +1 -0
- package/src/img/third_party/edge-addon-black.svg +1 -0
- package/src/img/third_party/edge-addon-white.svg +1 -0
- package/src/locales/de-DE/common.json +11 -11
- package/src/locales/en-UK/common.json +11 -12
- package/src/locales/fr/common.json +750 -0
- package/src/locales/fr-FR/common.json +11 -11
- package/src/locales/sv-SE/common.json +11 -11
- package/src/react-extension/ExtApp.js +9 -6
- package/src/react-extension/components/Administration/DisplayEmailNotificationsAdministration/DisplayEmailNotificationsAdministration.js +1 -1
- package/src/react-extension/components/Administration/DisplayMfaAdministration/DisplayMfaAdministration.test.stories.js +0 -1
- package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.js +1 -1
- package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.test.js +1 -1
- package/src/react-extension/components/Administration/DisplaySimulateSynchronizeUserDirectoryAdministration/DisplaySimulateSynchronizeUserDirectoryAdministration.test.stories.js +5 -8
- package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.js +1 -1
- package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.test.data.js +4 -1
- package/src/react-extension/components/Administration/DisplaySubscriptionKey/DisplaySubscriptionKey.test.js +4 -4
- package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.js +1 -1
- package/src/react-extension/components/Administration/DisplaySynchronizeUserDirectoryAdministration/DisplaySynchronizeUserDirectoryAdministration.test.js +1 -1
- package/src/react-extension/components/Administration/DisplayTestUserDirectoryAdministration/DisplayTestUserDirectoryAdministration.test.js +2 -3
- package/src/react-extension/components/Administration/DisplayTestUserDirectoryAdministration/DisplayTestUserDirectoryAdministration.test.stories.js +5 -9
- package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.js +2 -2
- package/src/react-extension/components/Administration/DisplayUserDirectoryAdministration/DisplayUserDirectoryAdministration.test.stories.js +0 -3
- package/src/react-extension/components/Authentication/AskForAuthenticationHelp/AskForAuthenticationHelp.js +1 -1
- package/src/react-extension/components/Authentication/AskForAuthenticationHelp/AskForAuthenticationHelp.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/CheckMailBox/CheckMailBox.js +2 -2
- package/src/react-extension/components/Authentication/CheckMailBox/CheckMailBox.test.js +1 -1
- package/src/react-extension/components/Authentication/CheckMailBox/CheckMailbox.test.stories.js +12 -14
- package/src/react-extension/components/Authentication/CheckPassphrase/CheckPassphrase.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/ChooseSecurityToken/ChooseSecurityToken.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/CreateGpgKey/CreateGpgKey.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/DisplayBrowserNotSupported/DisplayBrowserNotSupported.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/DisplayExpiredTokenError/DisplayExpiredTokenError.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/DisplayRequireInvitationError/DisplayRequireInvitationError.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/DisplayUnexpectedError/DisplayUnexpectedError.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/DownloadRecoveryKit/DownloadRecoveryKit.js +1 -1
- package/src/react-extension/components/Authentication/DownloadRecoveryKit/DownloadRecoveryKit.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/EnterNameForm/EnterNameForm.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/EnterUsernameForm/EnterUsernameForm.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/HandleSessionExpired/HandleSessionExpired.test.data.js +14 -0
- package/src/react-extension/components/Authentication/HandleSessionExpired/HandleSessionExpired.test.js +65 -0
- package/src/react-extension/components/Authentication/HandleSessionExpired/HandleSessionExpired.test.page.js +38 -0
- package/src/react-extension/components/Authentication/ImportGpgKey/ImportGpgKey.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/InstallExtension/InstallExtension.js +15 -6
- package/src/react-extension/components/Authentication/InstallExtension/InstallExtension.test.js +27 -0
- package/src/react-extension/components/Authentication/InstallExtension/InstallExtension.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/IntroduceSetupExtension/IntroduceSetupExtension.test.stories.js +12 -15
- package/src/react-extension/components/Authentication/NotifyExpiredSession/NotifyExpiredSession.test.stories.js +8 -11
- package/src/react-extension/components/AuthenticationLogin/AcceptLoginServerKeyChange/AcceptLoginServerKeyChange.test.stories.js +12 -15
- package/src/react-extension/components/AuthenticationLogin/DisplayLoginError/DisplayLoginError.test.stories.js +12 -15
- package/src/react-extension/components/AuthenticationLogin/DisplayLoginInProgress/DisplayLoginProgress.test.stories.js +12 -15
- package/src/react-extension/components/AuthenticationLogin/Login/Login.test.stories.js +12 -15
- package/src/react-extension/components/AuthenticationPassphrase/InputPassphrase/InputPassphrase.test.stories.js +5 -11
- package/src/react-extension/components/AuthenticationRecover/RecoverAuthentication/RecoverAuthentication.js +1 -1
- package/src/react-extension/components/Common/Error/ShowErrorDetails/ShowErrorDetails.js +1 -1
- package/src/react-extension/components/Common/Icons/Icon.test.stories.js +3 -1
- package/src/react-extension/components/Common/Loading/LoadingSpinner/LoadingSpinner.js +2 -1
- package/src/react-extension/components/Common/Progress/DisplayProgress/DisplayProgress.js +1 -1
- package/src/react-extension/components/Common/Progress/DisplayProgress/DisplayProgress.test.js +1 -1
- package/src/react-extension/components/Common/Progress/DisplayProgress/DisplayProgress.test.stories.js +34 -0
- package/src/react-extension/components/Resource/CreateResource/CreateResource.test.stories.js +14 -4
- package/src/react-extension/components/Resource/DisplayResourcesList/DisplayDragResource.js +68 -0
- package/src/react-extension/components/Resource/DisplayResourcesList/DisplayResourcesList.js +9 -42
- package/src/react-extension/components/Resource/DisplayResourcesList/DisplayResourcesList.test.page.js +4 -1
- package/src/react-extension/components/Resource/ExportResources/ExportResources.test.stories.js +5 -11
- package/src/react-extension/components/Resource/ExportResources/ExportResourcesCredentials.js +6 -10
- package/src/react-extension/components/Resource/ExportResources/ExportResourcesCredentials.test.stories.js +5 -11
- package/src/react-extension/components/Resource/FilterResourcesByBreadcrumb/FilterResourcesByBreadcrumb.test.stories.js +0 -1
- package/src/react-extension/components/Resource/FilterResourcesByFolders/DisplayDragFolderItem.js +109 -0
- package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFolders.js +40 -192
- package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFolders.test.data.js +10 -5
- package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFolders.test.js +9 -12
- package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFolders.test.page.js +5 -1
- package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFolders.test.stories.js +0 -1
- package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFoldersItem.js +83 -58
- package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFoldersItem.test.data.js +52 -59
- package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFoldersItem.test.js +25 -20
- package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFoldersItem.test.page.js +11 -5
- package/src/react-extension/components/Resource/FilterResourcesByShortcuts/FilterResourcesByShortcuts.test.stories.js +0 -1
- package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTags.test.data.js +47 -0
- package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTags.test.js +34 -3
- package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTags.test.page.js +46 -9
- package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTags.test.stories.js +0 -1
- package/src/react-extension/components/Resource/FilterResourcesByTags/FilterResourcesByTagsList.js +124 -4
- package/src/react-extension/components/Resource/FilterResourcesByText/FilterResourcesByText.test.stories.js +0 -2
- package/src/react-extension/components/Resource/ImportResources/ImportResourcesKeyUnlock.js +6 -10
- package/src/react-extension/components/Resource/ImportResources/ImportResourcesKeyUnlock.test.stories.js +5 -11
- package/src/react-extension/components/Resource/ImportResources/ImportResourcesResult.js +3 -3
- package/src/react-extension/components/Resource/ImportResources/ImportResourcesResult.test.js +3 -3
- package/src/react-extension/components/Resource/ImportResources/ImportResourcesResult.test.stories.js +5 -11
- package/src/react-extension/components/ResourceComment/AddResourceComment/AddResourceComment.test.stories.js +8 -14
- package/src/react-extension/components/ResourceComment/ConfirmResourceCommentDeletion/ConfirmResourceCommentDeletion.test.stories.js +5 -11
- package/src/react-extension/components/ResourceComment/DisplayResourceCommentList/DisplayResourceCommentList.test.stories.js +8 -14
- package/src/react-extension/components/ResourceDescription/EditResourceDescription/EditResourceDescription.test.stories.js +8 -15
- package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsActivity.test.stories.js +0 -1
- package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsDescription.test.stories.js +0 -1
- package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsTag.test.js +1 -1
- package/src/react-extension/components/ResourceDetails/DisplayResourceDetails/DisplayResourceDetailsTag.test.stories.js +0 -1
- package/src/react-extension/components/ResourceFolder/CreateResourceFolder/CreateResourceFolder.test.stories.js +0 -3
- package/src/react-extension/components/ResourceFolder/DefineResourceFolderMoveStrategy/DefineResourceFolderMoveStrategy.test.stories.js +0 -6
- package/src/react-extension/components/ResourceFolder/DeleteResourceFolder/DeleteResourceFolder.test.stories.js +0 -5
- package/src/react-extension/components/ResourceFolder/RenameResourceFolder/RenameResourceFolder.test.stories.js +0 -7
- package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetailsActivity.test.stories.js +0 -2
- package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetailsInformation.test.stories.js +0 -2
- package/src/react-extension/components/ResourceFolderDetails/DisplayResourceFolderDetails/DisplayResourceFolderDetailsPermissions.test.stories.js +0 -2
- package/src/react-extension/components/ResourcePassword/GenerateResourcePassword/ConfigurePassphraseGenerator.test.stories.js +0 -1
- package/src/react-extension/components/ResourceTag/DeleteResourceTag/DeleteResourceTag.test.stories.js +0 -2
- package/src/react-extension/components/ResourceTag/EditResourceTag/EditResourceTag.test.stories.js +0 -4
- package/src/react-extension/components/ResourceTag/EditResourceTags/EditResourceTags.js +1 -1
- package/src/react-extension/components/Share/ShareDialog.test.stories.js +5 -9
- package/src/react-extension/components/User/ConfirmDisableUserMFA/ConfirmDisableUserMFA.test.stories.js +5 -9
- package/src/react-extension/components/User/CreateUser/CreateUser.test.stories.js +3 -1
- package/src/react-extension/components/User/DeleteUser/DeleteUser.test.stories.js +5 -8
- package/src/react-extension/components/User/DeleteUser/DeleteUserWithConflicts.test.stories.js +5 -8
- package/src/react-extension/components/User/EditUser/EditUser.test.stories.js +3 -1
- package/src/react-extension/components/User/FilterUsersByBreadcrumb/FilterUsersByBreadcrumb.test.stories.js +5 -8
- package/src/react-extension/components/User/FilterUsersByShortcut/FilterUsersByShortcut.test.stories.js +0 -1
- package/src/react-extension/components/User/FilterUsersByText/FilterUsersByText.test.stories.js +0 -2
- package/src/react-extension/components/UserDetails/DisplayUserDetailsGroups/DisplayUserDetailsGroups.test.stories.js +8 -11
- package/src/react-extension/components/UserDetails/DisplayUserDetailsInformation/DisplayUserDetailsInformation.test.stories.js +8 -11
- package/src/react-extension/components/UserDetails/DisplayUserDetailsPublicKey/DisplayUserDetailsPublicKey.test.stories.js +8 -12
- package/src/react-extension/components/UserGroup/CreateUserGroup/CreateUserGroup.test.stories.js +5 -8
- package/src/react-extension/components/UserGroup/DeleteUserGroup/DeleteUserGroup.test.stories.js +5 -8
- package/src/react-extension/components/UserGroup/DeleteUserGroup/DeleteUserGroupWithConflicts.test.stories.js +5 -8
- package/src/react-extension/components/UserGroup/DisplayUserGroupDetailsInformation/DisplayUserGroupDetailsInformation.test.stories.js +8 -11
- package/src/react-extension/components/UserGroup/DisplayUserGroupDetailsMembers/DisplayUserGroupDetailsMembers.test.stories.js +8 -11
- package/src/react-extension/components/UserGroup/EditUserGroup/EditUserGroup.test.stories.js +5 -8
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/ConfirmPassphrase.js +55 -2
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/ConfirmPassphrase.test.data.js +6 -0
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.js +54 -6
- package/src/react-extension/components/UserSetting/ChangeUserPassphrase/EnterNewPassphrase.test.data.js +6 -0
- package/src/react-extension/components/UserSetting/ChangeUserSecurityToken/ChangeUserSecurityToken.js +1 -1
- package/src/react-extension/components/UserSetting/ChangeUserSecurityToken/ChangeUserSecurityToken.test.stories.js +5 -8
- package/src/react-extension/components/UserSetting/DisplayUserGpgInformation/DisplayUserGpgInformation.js +21 -6
- package/src/react-extension/components/UserSetting/DisplayUserGpgInformation/DisplayUserGpgInformation.test.stories.js +5 -8
- package/src/react-extension/components/UserSetting/DisplayUserProfile/DisplayUserProfile.test.stories.js +5 -8
- package/src/react-extension/components/UserSetting/DisplayUserSettingsWorkspaceBreadcrumb/DisplayUserSettingsWorkspaceBreadcrumb.test.stories.js +5 -8
- package/src/react-extension/components/UserSetting/DisplayUserTheme/DisplayUserTheme.test.stories.js +5 -8
- package/src/react-extension/components/UserSetting/EditUserProfile/EditUserProfile.test.stories.js +5 -8
- package/src/react-extension/components/UserSetting/NavigateIntoUserSettingsWorkspace/NavigateIntoUserSettingsWorkspace.test.stories.js +7 -10
- package/src/react-extension/components/UserSetting/UploadUserProfileAvatar/UploadUserProfileAvatar.js +2 -2
- package/src/react-extension/components/UserSetting/UploadUserProfileAvatar/UploadUserProfileAvatar.test.stories.js +5 -8
- package/src/react-extension/contexts/ApiAppContext.js +1 -1
- package/src/react-extension/contexts/ApiRecoverContext.js +1 -1
- package/src/react-extension/contexts/ApiSetupContext.js +1 -1
- package/src/react-extension/contexts/DragContext.js +122 -0
- package/src/react-extension/contexts/DragContext.test.js +53 -0
- package/src/react-extension/test/mock/components/Internationalisation/MockTranslationProvider.js +42 -7
- package/src/react-quickaccess/components/AnimatedSwitch/AnimatedSwitch.js +3 -3
- package/src/react-quickaccess/components/ExtensionSetup/SetupExtensionInProgress/SetupExtensionInProgressPage.test.stories.js +3 -4
- package/src/react-quickaccess/components/FilterResourcesByFavoritePage/FilterResourcesByFavoritePage.test.stories.js +6 -6
- package/src/react-quickaccess/components/FilterResourcesByGroupPage/FilterResourcesByGroupPage.test.stories.js +7 -3
- package/src/react-quickaccess/components/FilterResourcesByItemsIOwnPage/FilterResourcesByItemsIOwnPage.test.stories.js +6 -6
- package/src/react-quickaccess/components/FilterResourcesByRecentlyModifiedPage/FilterResourcesByRecentlyModifiedPage.test.stories.js +6 -6
- package/src/react-quickaccess/components/FilterResourcesBySharedWithMePage/FilterResourcesBySharedWithMePage.test.stories.js +6 -6
- package/src/react-quickaccess/components/FilterResourcesByTagPage/FilterResourcesByTagPage.test.stories.js +7 -3
- package/src/react-quickaccess/components/Header/Header.test.stories.js +3 -6
- package/src/react-quickaccess/components/HomePage/HomePage.test.stories.js +13 -9
- package/src/react-quickaccess/components/LoginPage/LoginPage.js +41 -5
- package/src/react-quickaccess/components/LoginPage/LoginPage.test.stories.js +3 -5
- package/src/react-quickaccess/components/MoreFiltersPage/MoreFiltersPage.test.stories.js +3 -5
- package/src/react-quickaccess/components/PassphraseDialog/PassphraseDialog.test.stories.js +5 -5
- package/src/react-quickaccess/components/ResourceAutoSave/SaveResource.test.stories.js +5 -5
- package/src/react-quickaccess/components/ResourceCreatePage/ResourceCreatePage.test.stories.js +5 -5
- package/src/react-quickaccess/components/ResourceViewPage/ResourceViewPage.test.stories.js +4 -2
- package/src/react-quickaccess/components/Search/Search.test.stories.js +3 -5
- package/src/react-web-integration/components/AskInFormMenuDisplay/AskInFormMenuDisplay.test.stories.js +6 -2
- package/src/react-web-integration/components/DisplayInFormMenu/DisplayInFormMenu.test.stories.js +9 -2
- package/src/react-web-integration/lib/InForm/InFormCallToActionField.js +3 -3
- package/src/react-web-integration/lib/InForm/InFormManager.js +12 -6
- package/src/react-web-integration/lib/InForm/InformMenuField.js +1 -1
- package/src/shared/lib/Browser/detectBrowserName.js +2 -1
- package/src/img/third_party/ChromeWebStore_black.png +0 -0
- package/src/img/third_party/ChromeWebStore_white.png +0 -0
|
@@ -20,6 +20,7 @@ import AppContext from "../../../contexts/AppContext";
|
|
|
20
20
|
import {BrowserRouter as Router} from "react-router-dom";
|
|
21
21
|
import MockTranslationProvider from "../../../test/mock/components/Internationalisation/MockTranslationProvider";
|
|
22
22
|
import DisplayResourcesList from "./DisplayResourcesList";
|
|
23
|
+
import {DragContext} from "../../../contexts/DragContext";
|
|
23
24
|
|
|
24
25
|
/**
|
|
25
26
|
* The DisplayResourcesListPage component represented as a page
|
|
@@ -35,7 +36,9 @@ export default class DisplayResourcesListPage {
|
|
|
35
36
|
<MockTranslationProvider>
|
|
36
37
|
<AppContext.Provider value={appContext}>
|
|
37
38
|
<Router>
|
|
38
|
-
<
|
|
39
|
+
<DragContext.Provider value={props.dragContext}>
|
|
40
|
+
<DisplayResourcesList {...props}/>
|
|
41
|
+
</DragContext.Provider>
|
|
39
42
|
</Router>
|
|
40
43
|
</AppContext.Provider>
|
|
41
44
|
</MockTranslationProvider>
|
package/src/react-extension/components/Resource/ExportResources/ExportResources.test.stories.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import {MemoryRouter, Route} from "react-router-dom";
|
|
3
|
-
import "../../../../css/themes/default/ext_app.css";
|
|
4
3
|
import AppContext from "../../../contexts/AppContext";
|
|
5
|
-
import MockTranslationProvider from "../../../test/mock/components/Internationalisation/MockTranslationProvider";
|
|
6
4
|
import ExportResources from "./ExportResources";
|
|
7
5
|
|
|
8
6
|
|
|
@@ -59,14 +57,11 @@ const context = {
|
|
|
59
57
|
|
|
60
58
|
|
|
61
59
|
const Template = args =>
|
|
62
|
-
<
|
|
63
|
-
<
|
|
64
|
-
<
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
</AppContext.Provider>
|
|
68
|
-
</MockTranslationProvider>;
|
|
69
|
-
|
|
60
|
+
<AppContext.Provider value={context}>
|
|
61
|
+
<MemoryRouter initialEntries={['/']}>
|
|
62
|
+
<Route component={routerProps => <ExportResources {...args} {...routerProps}/>}></Route>
|
|
63
|
+
</MemoryRouter>
|
|
64
|
+
</AppContext.Provider>;
|
|
70
65
|
|
|
71
66
|
|
|
72
67
|
export const Initial = Template.bind({});
|
|
@@ -78,4 +73,3 @@ Initial.args = {
|
|
|
78
73
|
onResourcesToExport: () => {}
|
|
79
74
|
}
|
|
80
75
|
};
|
|
81
|
-
|
package/src/react-extension/components/Resource/ExportResources/ExportResourcesCredentials.js
CHANGED
|
@@ -243,16 +243,12 @@ class ExportResourcesCredentials extends Component {
|
|
|
243
243
|
ref={this.passwordInputRef}
|
|
244
244
|
disabled={!this.areActionsAllowed}
|
|
245
245
|
autoComplete="off"/>
|
|
246
|
-
<
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
<span className="visually-hidden">view</span>
|
|
253
|
-
</a>
|
|
254
|
-
</li>
|
|
255
|
-
</ul>
|
|
246
|
+
<a
|
|
247
|
+
onClick={this.handlePasswordViewToggled}
|
|
248
|
+
className={`password-view button button-icon toggle ${this.state.showPassword ? "selected" : ""} ${!this.areActionsAllowed ? "disabled" : ""}`}>
|
|
249
|
+
<Icon name="eye-open" big={true}/>
|
|
250
|
+
<span className="visually-hidden">view</span>
|
|
251
|
+
</a>
|
|
256
252
|
</div>
|
|
257
253
|
</div>
|
|
258
254
|
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import {MemoryRouter, Route} from "react-router-dom";
|
|
3
|
-
import "../../../../css/themes/default/ext_app.css";
|
|
4
3
|
import AppContext from "../../../contexts/AppContext";
|
|
5
|
-
import MockTranslationProvider from "../../../test/mock/components/Internationalisation/MockTranslationProvider";
|
|
6
4
|
import ExportResourcesCredentials from "./ExportResourcesCredentials";
|
|
7
5
|
|
|
8
6
|
|
|
@@ -19,14 +17,11 @@ const context = {
|
|
|
19
17
|
|
|
20
18
|
|
|
21
19
|
const Template = args =>
|
|
22
|
-
<
|
|
23
|
-
<
|
|
24
|
-
<
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
</AppContext.Provider>
|
|
28
|
-
</MockTranslationProvider>;
|
|
29
|
-
|
|
20
|
+
<AppContext.Provider value={context}>
|
|
21
|
+
<MemoryRouter initialEntries={['/']}>
|
|
22
|
+
<Route component={routerProps => <ExportResourcesCredentials {...args} {...routerProps}/>}></Route>
|
|
23
|
+
</MemoryRouter>
|
|
24
|
+
</AppContext.Provider>;
|
|
30
25
|
|
|
31
26
|
|
|
32
27
|
export const Initial = Template.bind({});
|
|
@@ -40,4 +35,3 @@ Initial.args = {
|
|
|
40
35
|
}
|
|
41
36
|
}
|
|
42
37
|
};
|
|
43
|
-
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import {ResourceWorkspaceFilterTypes} from "../../../contexts/ResourceWorkspaceContext";
|
|
3
3
|
import {MemoryRouter, Route} from "react-router-dom";
|
|
4
|
-
import "../../../../css/themes/default/ext_app.css";
|
|
5
4
|
import FilterResourcesByBreadcrumb from "./FilterResourcesByBreadcrumb";
|
|
6
5
|
|
|
7
6
|
|
package/src/react-extension/components/Resource/FilterResourcesByFolders/DisplayDragFolderItem.js
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Passbolt ~ Open source password manager for teams
|
|
3
|
+
* Copyright (c) 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) 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
|
+
import React from "react";
|
|
15
|
+
import PropTypes from "prop-types";
|
|
16
|
+
import AppContext, {withAppContext} from "../../../contexts/AppContext";
|
|
17
|
+
import {withResourceWorkspace} from "../../../contexts/ResourceWorkspaceContext";
|
|
18
|
+
import Icon from "../../../components/Common/Icons/Icon";
|
|
19
|
+
import {withDrag} from "../../../contexts/DragContext";
|
|
20
|
+
|
|
21
|
+
class DisplayDragFolderItem extends React.Component {
|
|
22
|
+
/**
|
|
23
|
+
* Check if the user is currently dragging content.
|
|
24
|
+
* @returns {number}
|
|
25
|
+
*/
|
|
26
|
+
isDragging() {
|
|
27
|
+
return this.props.dragContext.dragging;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* return dragged items
|
|
32
|
+
* @returns {*}
|
|
33
|
+
*/
|
|
34
|
+
get draggedItems() {
|
|
35
|
+
return this.props.dragContext.draggedItems;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Check if the user can drag all the items they are currently dragging.
|
|
40
|
+
* @param {array} draggedItems The list of dragged items.
|
|
41
|
+
* @returns {boolean}
|
|
42
|
+
*/
|
|
43
|
+
canDragItems(draggedItems) {
|
|
44
|
+
const draggedFolders = draggedItems.folders;
|
|
45
|
+
let canDragItems = draggedFolders.reduce((accumulator, folder) => accumulator && this.canDragItem(folder), true);
|
|
46
|
+
|
|
47
|
+
const draggedResources = draggedItems.resources;
|
|
48
|
+
canDragItems = canDragItems && draggedResources.reduce((accumulator, folder) => accumulator && this.canDragItem(folder), true);
|
|
49
|
+
|
|
50
|
+
return canDragItems;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Check if the user can drag an item.
|
|
55
|
+
* @param {object} item The target item
|
|
56
|
+
*/
|
|
57
|
+
canDragItem(item) {
|
|
58
|
+
// The user can always drag an element located at their root.
|
|
59
|
+
if (item.folder_parent_id === null) {
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const folderParent = this.props.context.folders.find(folder => folder.id === item.folder_parent_id);
|
|
64
|
+
|
|
65
|
+
// The user can always drag content from a personal folder.
|
|
66
|
+
if (folderParent.personal) {
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// The user cannot drag an element if the parent folder is in READ.
|
|
71
|
+
if (folderParent.permission.type < 7) {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// The user cannot move folder in READ ONLY from a shared folder.
|
|
76
|
+
if (item.permission.type < 7) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Render the component.
|
|
85
|
+
* @returns {JSX}
|
|
86
|
+
*/
|
|
87
|
+
render() {
|
|
88
|
+
const canDrag = this.canDragItems(this.draggedItems);
|
|
89
|
+
const dragFeedbackText = canDrag ? this.draggedItems.folders[0].name : "You are not allowed to move this content";
|
|
90
|
+
return (
|
|
91
|
+
<div className="drag-and-drop">
|
|
92
|
+
{!canDrag &&
|
|
93
|
+
<Icon name="ban"/>
|
|
94
|
+
}
|
|
95
|
+
<span className={`message ${!canDrag ? "not-allowed" : ""}`}>{dragFeedbackText}</span>
|
|
96
|
+
</div>
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
DisplayDragFolderItem.contextType = AppContext;
|
|
102
|
+
|
|
103
|
+
DisplayDragFolderItem.propTypes = {
|
|
104
|
+
context: PropTypes.any, // The app context
|
|
105
|
+
resourceWorkspaceContext: PropTypes.any,
|
|
106
|
+
dragContext: PropTypes.any,
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
export default withAppContext(withResourceWorkspace(withDrag(DisplayDragFolderItem)));
|
package/src/react-extension/components/Resource/FilterResourcesByFolders/FilterResourcesByFolders.js
CHANGED
|
@@ -23,6 +23,7 @@ import PropTypes from "prop-types";
|
|
|
23
23
|
import {withDialog} from "../../../contexts/DialogContext";
|
|
24
24
|
import ReactList from "react-list";
|
|
25
25
|
import {Trans, withTranslation} from "react-i18next";
|
|
26
|
+
import {withDrag} from "../../../contexts/DragContext";
|
|
26
27
|
|
|
27
28
|
// Root virtual folder identifier.
|
|
28
29
|
const ROOT = null;
|
|
@@ -37,7 +38,6 @@ class FilterResourcesByFolders extends React.Component {
|
|
|
37
38
|
this.state = this.getDefaultState();
|
|
38
39
|
this.createElementsRef();
|
|
39
40
|
this.bindCallbacks();
|
|
40
|
-
this.initEventHandlers();
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
/**
|
|
@@ -46,14 +46,9 @@ class FilterResourcesByFolders extends React.Component {
|
|
|
46
46
|
*/
|
|
47
47
|
getDefaultState() {
|
|
48
48
|
return {
|
|
49
|
-
draggedItems: {
|
|
50
|
-
folders: [],
|
|
51
|
-
resources: []
|
|
52
|
-
},
|
|
53
|
-
dragging: false,
|
|
54
49
|
draggingOverTitle: false,
|
|
50
|
+
draggingOverTitleSince: null,
|
|
55
51
|
open: true,
|
|
56
|
-
openFolders: []
|
|
57
52
|
};
|
|
58
53
|
}
|
|
59
54
|
|
|
@@ -68,7 +63,6 @@ class FilterResourcesByFolders extends React.Component {
|
|
|
68
63
|
* Create DOM nodes or React elements references in order to be able to access them programmatically.
|
|
69
64
|
*/
|
|
70
65
|
createElementsRef() {
|
|
71
|
-
this.dragFeedbackElementRef = React.createRef();
|
|
72
66
|
this.listElement = React.createRef();
|
|
73
67
|
this.titleElementRef = React.createRef();
|
|
74
68
|
}
|
|
@@ -82,48 +76,9 @@ class FilterResourcesByFolders extends React.Component {
|
|
|
82
76
|
this.handleDragLeaveTitle = this.handleDragLeaveTitle.bind(this);
|
|
83
77
|
this.handleDragOverTitle = this.handleDragOverTitle.bind(this);
|
|
84
78
|
this.handleDropTitle = this.handleDropTitle.bind(this);
|
|
85
|
-
this.handleFolderCloseEvent = this.handleFolderCloseEvent.bind(this);
|
|
86
|
-
this.handleFolderDragEndEvent = this.handleFolderDragEndEvent.bind(this);
|
|
87
|
-
this.handleFolderDragStartEvent = this.handleFolderDragStartEvent.bind(this);
|
|
88
|
-
this.handleFolderDropEvent = this.handleFolderDropEvent.bind(this);
|
|
89
|
-
this.handleFolderOpenEvent = this.handleFolderOpenEvent.bind(this);
|
|
90
|
-
this.handleFolderSelectEvent = this.handleFolderSelectEvent.bind(this);
|
|
91
|
-
this.handleGridDragStartEvent = this.handleGridDragStartEvent.bind(this);
|
|
92
|
-
this.handleGridDragEndEvent = this.handleGridDragEndEvent.bind(this);
|
|
93
79
|
this.handleTitleMoreClickEvent = this.handleTitleMoreClickEvent.bind(this);
|
|
94
80
|
}
|
|
95
81
|
|
|
96
|
-
/**
|
|
97
|
-
* Initialize event listeners.
|
|
98
|
-
*/
|
|
99
|
-
initEventHandlers() {
|
|
100
|
-
document.addEventListener('passbolt.resources.drag-start', this.handleGridDragStartEvent);
|
|
101
|
-
document.addEventListener('passbolt.resources.drag-end', this.handleGridDragEndEvent);
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* Handle when the user opens a folder.
|
|
106
|
-
* @param {ReactEvent} event The event
|
|
107
|
-
* @param {Object} folder The open folder
|
|
108
|
-
*/
|
|
109
|
-
handleFolderCloseEvent(event, folder) {
|
|
110
|
-
const openFolders = this.state.openFolders;
|
|
111
|
-
const folderIndex = openFolders.findIndex(item => item.id === folder.id);
|
|
112
|
-
openFolders.splice(folderIndex, 1);
|
|
113
|
-
this.setState({openFolders});
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Handle when the user opens a folder.
|
|
118
|
-
* @param {ReactEvent} event The event
|
|
119
|
-
* @param {Object} folder The open folder
|
|
120
|
-
*/
|
|
121
|
-
handleFolderOpenEvent(event, folder) {
|
|
122
|
-
const openFolders = this.state.openFolders;
|
|
123
|
-
openFolders.push(folder);
|
|
124
|
-
this.setState({openFolders});
|
|
125
|
-
}
|
|
126
|
-
|
|
127
82
|
/**
|
|
128
83
|
* Handle when the user clicks on the section title.
|
|
129
84
|
*/
|
|
@@ -170,7 +125,8 @@ class FilterResourcesByFolders extends React.Component {
|
|
|
170
125
|
*/
|
|
171
126
|
handleDragLeaveTitle() {
|
|
172
127
|
const draggingOverTitle = false;
|
|
173
|
-
|
|
128
|
+
const draggingOverTitleSince = null;
|
|
129
|
+
this.setState({draggingOverTitle, draggingOverTitleSince});
|
|
174
130
|
}
|
|
175
131
|
|
|
176
132
|
/**
|
|
@@ -185,18 +141,36 @@ class FilterResourcesByFolders extends React.Component {
|
|
|
185
141
|
event.preventDefault();
|
|
186
142
|
|
|
187
143
|
if (this.state.draggingOverTitle) {
|
|
144
|
+
this.openTitleOnLongDragOver();
|
|
188
145
|
return;
|
|
189
146
|
}
|
|
190
147
|
const draggingOverTitle = true;
|
|
191
|
-
|
|
148
|
+
const draggingOverTitleSince = Date.now();
|
|
149
|
+
this.setState({draggingOverTitle, draggingOverTitleSince});
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Open the root folder when the user is dragging for a defined period on it.
|
|
154
|
+
* @param {ReactEvent} event The event
|
|
155
|
+
*/
|
|
156
|
+
openTitleOnLongDragOver() {
|
|
157
|
+
const period = 2000;
|
|
158
|
+
|
|
159
|
+
// If already open, leave.
|
|
160
|
+
if (!this.state.open) {
|
|
161
|
+
const now = Date.now();
|
|
162
|
+
if (now - this.state.draggingOverTitleSince > period) {
|
|
163
|
+
this.handleSectionTitleClickCaretEvent();
|
|
164
|
+
}
|
|
165
|
+
}
|
|
192
166
|
}
|
|
193
167
|
|
|
194
168
|
/**
|
|
195
169
|
* Handle when the user is dropping the content on the title.
|
|
196
170
|
*/
|
|
197
171
|
handleDropTitle() {
|
|
198
|
-
const folders = this.
|
|
199
|
-
const resources = this.
|
|
172
|
+
const folders = this.props.dragContext.draggedItems.folders.map(folder => folder.id);
|
|
173
|
+
const resources = this.props.dragContext.draggedItems.resources.map(resource => resource.id);
|
|
200
174
|
const folderParentId = null;
|
|
201
175
|
this.props.context.port.request("passbolt.folders.open-move-confirmation-dialog", {folders, resources, folderParentId});
|
|
202
176
|
|
|
@@ -205,96 +179,6 @@ class FilterResourcesByFolders extends React.Component {
|
|
|
205
179
|
this.setState({draggingOverTitle});
|
|
206
180
|
}
|
|
207
181
|
|
|
208
|
-
/**
|
|
209
|
-
* Handle when the user stop dragging a folder.
|
|
210
|
-
*/
|
|
211
|
-
handleFolderDragEndEvent() {
|
|
212
|
-
const draggedItems = {
|
|
213
|
-
folders: [],
|
|
214
|
-
resources: [],
|
|
215
|
-
};
|
|
216
|
-
const dragging = false;
|
|
217
|
-
this.setState({draggedItems, dragging});
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
/**
|
|
221
|
-
* Handle when the user starts dragging a folder.
|
|
222
|
-
* @param {ReactEvent} event The event
|
|
223
|
-
* @param {Object} folder The dragged folder
|
|
224
|
-
*/
|
|
225
|
-
handleFolderDragStartEvent(event, folder) {
|
|
226
|
-
const dragging = true;
|
|
227
|
-
const draggedItems = {
|
|
228
|
-
folders: [folder],
|
|
229
|
-
resources: []
|
|
230
|
-
};
|
|
231
|
-
this.setState({dragging, draggedItems});
|
|
232
|
-
event.dataTransfer.setDragImage(this.dragFeedbackElementRef.current, 5, 5);
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
/**
|
|
236
|
-
* Handle when the user drop the content on a folder.
|
|
237
|
-
* @param {ReactEvent} event The event
|
|
238
|
-
* @param {Object} folder The drop folder
|
|
239
|
-
*/
|
|
240
|
-
handleFolderDropEvent(event, dropFolder) {
|
|
241
|
-
const folders = this.state.draggedItems.folders.map(folder => folder.id);
|
|
242
|
-
const resources = this.state.draggedItems.resources.map(resource => resource.id);
|
|
243
|
-
const folderParentId = dropFolder.id;
|
|
244
|
-
this.props.context.port.request("passbolt.folders.open-move-confirmation-dialog", {folders, resources, folderParentId});
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
/**
|
|
248
|
-
* Handle the user selects a folder from the list.
|
|
249
|
-
* @param {ReactEvent} event The event
|
|
250
|
-
* @param {Object} folder The folder
|
|
251
|
-
*/
|
|
252
|
-
handleFolderSelectEvent(event, folder) {
|
|
253
|
-
this.props.history.push(`/app/folders/view/${folder.id}`);
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
/**
|
|
257
|
-
* Handle when the user is dragging content from the grid.
|
|
258
|
-
* @param {ReactEvent} event The event
|
|
259
|
-
* event.details should be formatted as following:
|
|
260
|
-
* {
|
|
261
|
-
* array folders The list of dragged folders
|
|
262
|
-
* array resources The list of dragged resources
|
|
263
|
-
* }
|
|
264
|
-
*/
|
|
265
|
-
handleGridDragStartEvent(event) {
|
|
266
|
-
const draggedItems = event.detail;
|
|
267
|
-
this.setState({draggedItems});
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
/**
|
|
271
|
-
* Handle when the user stops dragging content from the grid.
|
|
272
|
-
*/
|
|
273
|
-
handleGridDragEndEvent() {
|
|
274
|
-
const draggedItems = {
|
|
275
|
-
folders: [],
|
|
276
|
-
resources: []
|
|
277
|
-
};
|
|
278
|
-
this.setState({draggedItems});
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
/**
|
|
282
|
-
* Open the tree until a given folder
|
|
283
|
-
* @param {object} folder The folder to scroll to
|
|
284
|
-
*/
|
|
285
|
-
openFolderTree(folder) {
|
|
286
|
-
let openFolders = this.state.openFolders;
|
|
287
|
-
|
|
288
|
-
// If the selected folder has a parent. Open it if not yet open.
|
|
289
|
-
if (folder.folder_parent_id) {
|
|
290
|
-
const folderParent = this.props.context.folders.folders.find(item => item.id === folder.folder_parent_id);
|
|
291
|
-
if (folderParent) {
|
|
292
|
-
openFolders = Array.from(new Set([...openFolders, folderParent]));
|
|
293
|
-
this.setState({openFolders}, () => this.openFolderTree(folderParent));
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
|
|
298
182
|
/**
|
|
299
183
|
* Check if the user can drag an item.
|
|
300
184
|
* @param {object} item The target item
|
|
@@ -340,38 +224,6 @@ class FilterResourcesByFolders extends React.Component {
|
|
|
340
224
|
return canDragItems;
|
|
341
225
|
}
|
|
342
226
|
|
|
343
|
-
/**
|
|
344
|
-
* Render the drag feedback
|
|
345
|
-
* @returns {JSX}
|
|
346
|
-
*/
|
|
347
|
-
renderDragFeedback() {
|
|
348
|
-
let error = false;
|
|
349
|
-
let dragFeedbackText = "";
|
|
350
|
-
if (this.state.dragging) {
|
|
351
|
-
const canDrag = this.canDragItems(this.state.draggedItems);
|
|
352
|
-
if (canDrag) {
|
|
353
|
-
dragFeedbackText = this.state.draggedItems.folders[0].name;
|
|
354
|
-
} else {
|
|
355
|
-
error = true;
|
|
356
|
-
dragFeedbackText = this.translate("You are not allowed to move this content");
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
/*
|
|
361
|
-
* We display the drag feedback element even if there is no drag event happening.
|
|
362
|
-
* The start drag event can start using the element before the render is completely rendered, not sure the waiting
|
|
363
|
-
* the status to be updated will be sufficient.
|
|
364
|
-
*/
|
|
365
|
-
return (
|
|
366
|
-
<div ref={this.dragFeedbackElementRef} className="drag-and-drop">
|
|
367
|
-
{error &&
|
|
368
|
-
<Icon name="ban"/>
|
|
369
|
-
}
|
|
370
|
-
<span className={`message ${error ? "not-allowed" : ""}`}>{dragFeedbackText}</span>
|
|
371
|
-
</div>
|
|
372
|
-
);
|
|
373
|
-
}
|
|
374
|
-
|
|
375
227
|
/**
|
|
376
228
|
* Check if the component is loading.
|
|
377
229
|
* @returns {boolean}
|
|
@@ -416,10 +268,18 @@ class FilterResourcesByFolders extends React.Component {
|
|
|
416
268
|
|
|
417
269
|
/**
|
|
418
270
|
* Check if the user is currently dragging content.
|
|
419
|
-
* @returns {
|
|
271
|
+
* @returns {boolean}
|
|
420
272
|
*/
|
|
421
273
|
isDragging() {
|
|
422
|
-
return this.
|
|
274
|
+
return this.props.dragContext.dragging;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* return dragged items
|
|
279
|
+
* @returns {*}
|
|
280
|
+
*/
|
|
281
|
+
get draggedItems() {
|
|
282
|
+
return this.props.dragContext.draggedItems;
|
|
423
283
|
}
|
|
424
284
|
|
|
425
285
|
/**
|
|
@@ -443,7 +303,7 @@ class FilterResourcesByFolders extends React.Component {
|
|
|
443
303
|
let disabled = false;
|
|
444
304
|
|
|
445
305
|
if (isDragging && this.state.draggingOverTitle) {
|
|
446
|
-
const canDragItems = this.canDragItems(this.
|
|
306
|
+
const canDragItems = this.canDragItems(this.draggedItems);
|
|
447
307
|
if (canDragItems) {
|
|
448
308
|
showDropFocus = true;
|
|
449
309
|
} else {
|
|
@@ -454,7 +314,6 @@ class FilterResourcesByFolders extends React.Component {
|
|
|
454
314
|
|
|
455
315
|
return (
|
|
456
316
|
<div className="navigation-secondary-tree navigation-secondary navigation-folders accordion">
|
|
457
|
-
{this.renderDragFeedback()}
|
|
458
317
|
<div className="accordion-header">
|
|
459
318
|
<div className={`${isOpen ? "open" : "close"} node root`}>
|
|
460
319
|
<div className={`row title ${showDropFocus ? "drop-focus" : ""} ${disabled ? "disabled" : ""}`}>
|
|
@@ -498,25 +357,13 @@ class FilterResourcesByFolders extends React.Component {
|
|
|
498
357
|
<ReactList
|
|
499
358
|
itemRenderer={(index, key) => <FilterResourcesByFoldersItem
|
|
500
359
|
key={key}
|
|
501
|
-
|
|
502
|
-
folder={rootFolders[index]}
|
|
503
|
-
folders={this.props.context.folders}
|
|
504
|
-
isDragging={isDragging}
|
|
505
|
-
onClose={this.handleFolderCloseEvent}
|
|
506
|
-
onDragEnd={this.handleFolderDragEndEvent}
|
|
507
|
-
onDragStart={this.handleFolderDragStartEvent}
|
|
508
|
-
onDrop={this.handleFolderDropEvent}
|
|
509
|
-
onOpen={this.handleFolderOpenEvent}
|
|
510
|
-
openFolders={this.state.openFolders}
|
|
511
|
-
onSelect={this.handleFolderSelectEvent}
|
|
512
|
-
selectedFolder={this.selectedFolder}/>
|
|
360
|
+
folder={rootFolders[index]}/>
|
|
513
361
|
}
|
|
514
362
|
itemsRenderer={(items, ref) => <ul ref={ref} className="folders-tree">{items}</ul>}
|
|
515
363
|
length={rootFolders.length}
|
|
516
364
|
pageSize={20}
|
|
517
365
|
minSize={20}
|
|
518
|
-
type="
|
|
519
|
-
useStaticSize={true}
|
|
366
|
+
type="simple"
|
|
520
367
|
ref={this.listElement}>
|
|
521
368
|
</ReactList>
|
|
522
369
|
}
|
|
@@ -532,7 +379,8 @@ FilterResourcesByFolders.propTypes = {
|
|
|
532
379
|
history: PropTypes.object,
|
|
533
380
|
resourceWorkspaceContext: PropTypes.object,
|
|
534
381
|
dialogContext: PropTypes.any,
|
|
382
|
+
dragContext: PropTypes.any,
|
|
535
383
|
t: PropTypes.func, // The translation function
|
|
536
384
|
};
|
|
537
385
|
|
|
538
|
-
export default withRouter(withDialog(withContextualMenu(withResourceWorkspace(withAppContext(withTranslation('common')(FilterResourcesByFolders))))));
|
|
386
|
+
export default withRouter(withDialog(withContextualMenu(withResourceWorkspace(withAppContext(withDrag(withTranslation('common')(FilterResourcesByFolders)))))));
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import MockPort from "../../../test/mock/MockPort";
|
|
2
1
|
import {ResourceWorkspaceFilterTypes} from "../../../contexts/ResourceWorkspaceContext";
|
|
2
|
+
import MockPort from "../../../test/mock/MockPort";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Returns the default app context for the unit test
|
|
@@ -20,10 +20,6 @@ export function defaultAppContext(appContext) {
|
|
|
20
20
|
*/
|
|
21
21
|
export function defaultProps() {
|
|
22
22
|
return {
|
|
23
|
-
context: {
|
|
24
|
-
port: new MockPort(),
|
|
25
|
-
folders: foldersMock
|
|
26
|
-
},
|
|
27
23
|
resourceWorkspaceContext: {
|
|
28
24
|
filter: {
|
|
29
25
|
type: ResourceWorkspaceFilterTypes.FOLDER,
|
|
@@ -32,6 +28,15 @@ export function defaultProps() {
|
|
|
32
28
|
}
|
|
33
29
|
}
|
|
34
30
|
},
|
|
31
|
+
dragContext: {
|
|
32
|
+
dragging: true,
|
|
33
|
+
draggedItems: {
|
|
34
|
+
folders: [foldersMock[3]],
|
|
35
|
+
resources: []
|
|
36
|
+
},
|
|
37
|
+
onDragStart: jest.fn(),
|
|
38
|
+
onDragEnd: jest.fn(),
|
|
39
|
+
},
|
|
35
40
|
history: {
|
|
36
41
|
push: jest.fn()
|
|
37
42
|
},
|
|
@@ -28,8 +28,9 @@ describe("See Folders", () => {
|
|
|
28
28
|
let page; // The page to test against
|
|
29
29
|
const context = defaultAppContext(); // The applicative context
|
|
30
30
|
const props = defaultProps(); // The props to pass
|
|
31
|
-
|
|
32
|
-
const mockContextRequest = implementation => jest.spyOn(
|
|
31
|
+
const requestMockImpl = jest.fn((message, data) => data);
|
|
32
|
+
const mockContextRequest = (context, implementation) => jest.spyOn(context.port, 'request').mockImplementation(implementation);
|
|
33
|
+
mockContextRequest(context, requestMockImpl);
|
|
33
34
|
|
|
34
35
|
describe('As LU I see the folders', () => {
|
|
35
36
|
/**
|
|
@@ -69,27 +70,23 @@ describe("See Folders", () => {
|
|
|
69
70
|
});
|
|
70
71
|
|
|
71
72
|
it('As LU I should be able to drag and drop a folder on the root folder', async() => {
|
|
72
|
-
const requestMockImpl = jest.fn();
|
|
73
|
-
mockContextRequest(requestMockImpl);
|
|
74
73
|
await page.filterResourcesByFoldersItem.dragStartOnFolder(1);
|
|
75
74
|
await page.filterResourcesByFoldersItem.dragEndOnFolder(1);
|
|
76
75
|
await page.filterResourcesByFolders.onDragOver;
|
|
77
76
|
await page.filterResourcesByFolders.onDragLeave;
|
|
78
77
|
await page.filterResourcesByFolders.onDragOver;
|
|
79
78
|
await page.filterResourcesByFolders.onDrop;
|
|
80
|
-
|
|
81
|
-
expect(
|
|
82
|
-
});
|
|
79
|
+
expect(props.dragContext.onDragStart).toHaveBeenCalled();
|
|
80
|
+
expect(context.port.request).toHaveBeenCalledWith("passbolt.folders.open-move-confirmation-dialog", {folders: ["3ed65efd-7c41-5906-9c02-71e2d95951db"], resources: [], folderParentId: null});
|
|
81
|
+
expect(props.dragContext.onDragEnd).toHaveBeenCalled(); });
|
|
83
82
|
|
|
84
83
|
it('As LU I should be able to drag and drop a folder on another folder', async() => {
|
|
85
|
-
const requestMockImpl = jest.fn();
|
|
86
|
-
mockContextRequest(requestMockImpl);
|
|
87
84
|
await page.filterResourcesByFoldersItem.toggleDisplayChildFolders(2);
|
|
88
85
|
await page.filterResourcesByFoldersItem.dragStartOnFolder(3);
|
|
89
86
|
await page.filterResourcesByFoldersItem.dragEndOnFolder(3);
|
|
90
87
|
await page.filterResourcesByFoldersItem.onDropFolder(1);
|
|
91
|
-
|
|
92
|
-
expect(
|
|
88
|
+
expect(props.dragContext.onDragStart).toHaveBeenCalled();
|
|
89
|
+
expect(context.port.request).toHaveBeenCalledWith("passbolt.folders.open-move-confirmation-dialog", {folders: ["3ed65efd-7c41-5906-9c02-71e2d95951db"], resources: [], folderParentId: null});
|
|
93
90
|
});
|
|
94
91
|
|
|
95
92
|
it('As LU I should be able to open and close folder to see or not the child folders', async() => {
|
|
@@ -104,7 +101,7 @@ describe("See Folders", () => {
|
|
|
104
101
|
describe('As LU I should see the Folder section empty', () => {
|
|
105
102
|
const context = defaultAppContext(); // The applicative context
|
|
106
103
|
const props = defaultProps();
|
|
107
|
-
|
|
104
|
+
context.folders = [];
|
|
108
105
|
/**
|
|
109
106
|
* Given an organization with 0 Folders
|
|
110
107
|
* Then I should see the Folder section empty
|