From 8a90c5035294a5dc8f3c57504ddb4aab64d1b7fe Mon Sep 17 00:00:00 2001 From: muerwre Date: Thu, 7 Feb 2019 16:17:32 +0700 Subject: [PATCH] fixed some provider issues --- src/components/dialogs/ProviderDialog.jsx | 6 ++--- src/components/panels/EditorDialog.jsx | 4 +-- src/modules/Editor.js | 8 +++--- src/redux/user/actions.js | 1 + src/redux/user/constants.js | 1 + src/redux/user/sagas.js | 33 ++++++++++++----------- 6 files changed, 30 insertions(+), 23 deletions(-) diff --git a/src/components/dialogs/ProviderDialog.jsx b/src/components/dialogs/ProviderDialog.jsx index 2018718..0ad4c6b 100644 --- a/src/components/dialogs/ProviderDialog.jsx +++ b/src/components/dialogs/ProviderDialog.jsx @@ -5,7 +5,7 @@ import classnames from 'classnames'; import { MODES } from '$constants/modes'; type Props = { - setProvider: Function, + changeProvider: Function, setMode: Function, provider: String, }; @@ -14,7 +14,7 @@ export class ProviderDialog extends React.Component { closeDialog = () => this.props.setMode(MODES.NONE); render() { - const { provider, setProvider } = this.props; + const { provider, changeProvider } = this.props; return (
@@ -26,7 +26,7 @@ export class ProviderDialog extends React.Component { style={{ backgroundImage: `url(${replaceProviderUrl(item, { x: 5980, y: 2589, zoom: 13 })})`, }} - onClick={() => setProvider(item)} + onClick={() => changeProvider(item)} key={PROVIDERS[item].name} > { diff --git a/src/components/panels/EditorDialog.jsx b/src/components/panels/EditorDialog.jsx index 76e404b..7bba162 100644 --- a/src/components/panels/EditorDialog.jsx +++ b/src/components/panels/EditorDialog.jsx @@ -24,7 +24,7 @@ import { stopEditing, setEditing, sendSaveRequest, - setProvider, + changeProvider, } from '$redux/user/actions'; import { ProviderDialog } from '$components/dialogs/ProviderDialog'; import { ShotPrefetchDialog } from '$components/dialogs/ShotPrefetchDialog'; @@ -70,7 +70,7 @@ const mapDispatchToProps = dispatch => bindActionCreators({ setEditing, setMode, sendSaveRequest, - setProvider, + changeProvider, }, dispatch); export const EditorDialog = connect( diff --git a/src/modules/Editor.js b/src/modules/Editor.js index d185603..21bcc8b 100644 --- a/src/modules/Editor.js +++ b/src/modules/Editor.js @@ -9,6 +9,7 @@ import { DEFAULT_LOGO, LOGOS } from '$constants/logos'; import { getUrlData } from '$utils/history'; import { store } from '$redux/store'; import { + changeProvider, resetSaveDialog, setActiveSticker, setAddress, @@ -16,7 +17,7 @@ import { setDistance, setLogo, setMode, - setProvider, setPublic, + setPublic, setRouterPoints, setTitle, } from '$redux/user/actions'; @@ -99,6 +100,7 @@ export class Editor { getUser = () => store.getState().user.user; getMode = () => store.getState().user.mode; + getProvider = () => store.getState().user.provider; getTitle = () => store.getState().user.title; getEditing = () => store.getState().user.editing; getChanged = () => store.getState().user.changed; @@ -316,10 +318,10 @@ export class Editor { dumpData = () => ({ route: this.poly.dumpData(), stickers: this.stickers.dumpData(), - provider: this.provider, + provider: this.getProvider(), }); - setProvider = provider => store.dispatch(setProvider(provider)); + setProvider = provider => store.dispatch(changeProvider(provider)); get isEmpty() { const { route, stickers } = this.dumpData(); diff --git a/src/redux/user/actions.js b/src/redux/user/actions.js index e1509e0..8f46f2a 100644 --- a/src/redux/user/actions.js +++ b/src/redux/user/actions.js @@ -41,6 +41,7 @@ export const takeAShot = () => ({ type: ACTIONS.TAKE_A_SHOT }); export const cropAShot = payload => ({ type: ACTIONS.CROP_A_SHOT, ...payload }); export const setProvider = provider => ({ type: ACTIONS.SET_PROVIDER, provider }); +export const changeProvider = provider => ({ type: ACTIONS.CHANGE_PROVIDER, provider }); export const setDialog = dialog => ({ type: ACTIONS.SET_DIALOG, dialog }); export const setDialogActive = dialog_active => ({ type: ACTIONS.SET_DIALOG_ACTIVE, dialog_active }); diff --git a/src/redux/user/constants.js b/src/redux/user/constants.js index ed432eb..75553ec 100644 --- a/src/redux/user/constants.js +++ b/src/redux/user/constants.js @@ -42,6 +42,7 @@ export const ACTIONS = ({ CROP_A_SHOT: 'CROP_A_SHOT', SET_PROVIDER: 'SET_PROVIDER', + CHANGE_PROVIDER: 'CHANGE_PROVIDER', SET_DIALOG: 'SET_DIALOG', SET_DIALOG_ACTIVE: 'SET_DIALOG_ACTIVE', diff --git a/src/redux/user/sagas.js b/src/redux/user/sagas.js index 3f5dcb0..7a622b9 100644 --- a/src/redux/user/sagas.js +++ b/src/redux/user/sagas.js @@ -17,7 +17,7 @@ import { setSaveError, setSaveOverwrite, setSaveSuccess, setTitle, searchSetTab, - setUser, setDialog, setPublic, setAddressOrigin, + setUser, setDialog, setPublic, setAddressOrigin, setProvider, changeProvider, } from '$redux/user/actions'; import { getUrlData, parseQuery, pushLoaderState, pushNetworkInitError, pushPath, replacePath } from '$utils/history'; import { editor } from '$modules/Editor'; @@ -34,7 +34,7 @@ import { imageFetcher } from '$utils/renderer'; import { LOGOS } from '$constants/logos'; -import { DEFAULT_PROVIDER } from '$constants/providers'; +import { DEFAULT_PROVIDER, PROVIDERS } from '$constants/providers'; import { DIALOGS } from '$constants/dialogs'; const getUser = state => (state.user.user); @@ -55,7 +55,7 @@ function* generateGuestSaga() { } function* startEmptyEditorSaga() { - const { id, random_url, provider = DEFAULT_PROVIDER } = yield select(getUser); + const { user: { id, random_url }, provider = DEFAULT_PROVIDER } = yield select(getState); pushPath(`/${random_url}/edit`); @@ -111,11 +111,6 @@ function* loadMapSaga(path) { return map; } -function* iframeLoginVkSaga({ viewer_id, access_token, auth_key }) { - return yield console.log('GOT', { viewer_id, access_token, auth_key }); -} - - function* replaceAddressIfItsBusy(destination, original) { if (original) { yield put(setAddressOrigin(original)); @@ -128,7 +123,10 @@ function* mapInitSaga() { pushLoaderState(90); const { path, mode, hash } = getUrlData(); - const { user: { id } } = yield select(getState); + const { provider, user: { id } } = yield select(getState); + + editor.map.setProvider(provider); + yield put(changeProvider(provider)); if (hash && /^#map/.test(hash)) { const [, newUrl] = hash.match(/^#map[:/?!](.*)$/); @@ -382,13 +380,18 @@ function* cropAShotSaga(params) { return yield put(hideRenderer()); } -function* setProviderSaga({ provider }) { - // editor.setProvider(provider); - editor.provider = provider; - editor.map.setProvider(provider); +function* changeProviderSaga({ provider }) { + const { provider: current_provider } = yield select(getState); + + yield put(setProvider(provider)); + + if (current_provider === provider) return; yield put(setChanged(true)); + editor.provider = provider; + editor.map.setProvider(provider); + return put(setMode(MODES.NONE)); } @@ -559,13 +562,13 @@ export function* userSaga() { yield takeLatest(ACTIONS.TAKE_A_SHOT, takeAShotSaga); yield takeLatest(ACTIONS.CROP_A_SHOT, cropAShotSaga); - yield takeEvery(ACTIONS.SET_PROVIDER, setProviderSaga); + yield takeEvery(ACTIONS.CHANGE_PROVIDER, changeProviderSaga); yield takeLatest(ACTIONS.LOCATION_CHANGED, locationChangeSaga); yield takeLatest(ACTIONS.GOT_VK_USER, gotVkUserSaga); yield takeLatest(ACTIONS.KEY_PRESSED, keyPressedSaga); - yield takeLatest(ACTIONS.IFRAME_LOGIN_VK, iframeLoginVkSaga); + // yield takeLatest(ACTIONS.IFRAME_LOGIN_VK, iframeLoginVkSaga); yield takeLatest([ ACTIONS.SEARCH_SET_TITLE,