diff --git a/products/ASC.Files/Client/src/components/Article/Body/ThirdPartyList.js b/products/ASC.Files/Client/src/components/Article/Body/ThirdPartyList.js index 0adf57359f..f631587282 100644 --- a/products/ASC.Files/Client/src/components/Article/Body/ThirdPartyList.js +++ b/products/ASC.Files/Client/src/components/Article/Body/ThirdPartyList.js @@ -14,10 +14,11 @@ import { getWebDavConnect, } from "../../../store/files/selectors"; import { + getOAuthToken, openConnectWindow, setConnectItem, - setSelectedNode, setSelectedFolder, + setSelectedNode, setShowThirdPartyPanel, } from "../../../store/files/actions"; @@ -128,37 +129,20 @@ const PureThirdPartyListContainer = ({ } }; - const getOAuthToken = (modal, serviceData) => { - let t = setInterval(() => { - try { - if (modal.json) { - clearInterval(t); - const token = modal.json.response; - if (token) { - modal.close(); - - const data = { - title: serviceData.title, - provider_key: serviceData.title, - link: serviceData.link, - token, - }; - - setConnectItem(data); - } - } - } catch { - return; - } - }, 1000); - }; - const onConnect = (e) => { const data = e.currentTarget.dataset; data.link ? openConnectWindow(data.title).then((modal) => - getOAuthToken(modal, data) + getOAuthToken(modal).then((token) => { + const serviceData = { + title: data.title, + provider_key: data.title, + link: data.link, + token, + }; + setConnectItem(serviceData); + }) ) : setConnectItem(data); diff --git a/products/ASC.Files/Client/src/components/dialogs/ConnectDialog/index.js b/products/ASC.Files/Client/src/components/dialogs/ConnectDialog/index.js index cb89195a1c..3f4db67ad2 100644 --- a/products/ASC.Files/Client/src/components/dialogs/ConnectDialog/index.js +++ b/products/ASC.Files/Client/src/components/dialogs/ConnectDialog/index.js @@ -11,15 +11,16 @@ import { } from "asc-web-components"; import { utils as commonUtils, toastr } from "asc-web-common"; import { - saveThirdParty, - openConnectWindow, fetchFiles, - setUpdateTree, - setTreeFolders, fetchThirdPartyProviders, fetchTreeFolders, + getOAuthToken, + openConnectWindow, + saveThirdParty, setIsLoading, setSelectedNode, + setTreeFolders, + setUpdateTree, } from "../../../store/files/actions"; import { getTreeFolders, @@ -90,6 +91,7 @@ const PureConnectDialogContainer = (props) => { const [passwordValue, setPasswordValue] = useState(""); const [customerTitle, setCustomerTitleValue] = useState(title); const [isCorporate, setMakeShared] = useState(!!corporate); + const [oAuthToken, setToken] = useState(token); const onChangeUrl = (e) => setUrlValue(e.target.value); const onChangeLogin = (e) => setLoginValue(e.target.value); @@ -104,7 +106,7 @@ const PureConnectDialogContainer = (props) => { urlValue, loginValue, passwordValue, - token, + oAuthToken, isCorporate, customerTitle, provider_key, @@ -131,7 +133,9 @@ const PureConnectDialogContainer = (props) => { }; const onReconnect = () => { - openConnectWindow(title); + openConnectWindow(title).then((modal) => + getOAuthToken(modal).then((token) => setToken(token)) + ); }; const isAccount = !!link; diff --git a/products/ASC.Files/Client/src/components/pages/Settings/Section/Body/ConnectedClouds.js b/products/ASC.Files/Client/src/components/pages/Settings/Section/Body/ConnectedClouds.js index 890151d7b4..ecffbd037d 100644 --- a/products/ASC.Files/Client/src/components/pages/Settings/Section/Body/ConnectedClouds.js +++ b/products/ASC.Files/Client/src/components/pages/Settings/Section/Body/ConnectedClouds.js @@ -16,6 +16,7 @@ import EmptyFolderContainer from "../../../Home/Section/Body/EmptyFolderContaine import { createI18N } from "../../../../../helpers/i18n"; import { Trans } from "react-i18next"; import { + getOAuthToken, openConnectWindow, setConnectItem, setShowThirdPartyPanel, @@ -145,29 +146,14 @@ class ConnectClouds extends React.Component { }); }; - getOAuthToken = (modal, serviceData) => { - let t = setInterval(() => { - try { - if (modal.json) { - clearInterval(t); - const token = modal.json.response; - if (token) { - modal.close(); - this.showOAuthModal(token, serviceData); - } - } - } catch { - return; - } - }, 1000); - }; - onShowService = (e) => { const selectedServiceData = e.currentTarget.dataset; const showAccountSettingDialog = !e.currentTarget.dataset.link; !showAccountSettingDialog && openConnectWindow(selectedServiceData.title).then((modal) => - this.getOAuthToken(modal, selectedServiceData) + getOAuthToken(modal).then((token) => + this.showOAuthModal(token, selectedServiceData) + ) ); this.setState({ diff --git a/products/ASC.Files/Client/src/store/files/actions.js b/products/ASC.Files/Client/src/store/files/actions.js index 00566e02bb..2c57d7e79a 100644 --- a/products/ASC.Files/Client/src/store/files/actions.js +++ b/products/ASC.Files/Client/src/store/files/actions.js @@ -1390,6 +1390,25 @@ const convertServiceName = (serviceName) => { } }; +export function getOAuthToken(modal) { + return new Promise((resolve) => { + const interval = setInterval(() => { + try { + if (modal.json) { + clearInterval(interval); + const token = modal.json.response; + if (token) { + modal.close(); + return resolve(token); + } + } + } catch { + return; + } + }, 500); + }); +} + export function openConnectWindow(serviceName) { const service = convertServiceName(serviceName); return api.files.openConnectWindow(service).then((link) => {