diff --git a/src/components/panels/EditorDialog.jsx b/src/components/panels/EditorDialog.jsx index a230e5f..fa87e9e 100644 --- a/src/components/panels/EditorDialog.jsx +++ b/src/components/panels/EditorDialog.jsx @@ -8,7 +8,7 @@ import { LogoDialog } from '$components/logo/LogoDialog'; import { SaveDialog } from '$components/save/SaveDialog'; export const EditorDialog = ({ - mode, routerPoints, editor, activeSticker, logo, user, + mode, routerPoints, editor, activeSticker, logo, user, title, address, }) => { const showDialog = ( mode === MODES.ROUTER @@ -25,7 +25,7 @@ export const EditorDialog = ({ { mode === MODES.STICKERS && <StickersDialog editor={editor} /> } { mode === MODES.TRASH && <TrashDialog editor={editor} /> } { mode === MODES.LOGO && <LogoDialog editor={editor} logo={logo} /> } - { mode === MODES.SAVE && <SaveDialog editor={editor} user={user} /> } + { mode === MODES.SAVE && <SaveDialog editor={editor} user={user} title={title} address={address} /> } </div> ); }; diff --git a/src/components/panels/EditorPanel.jsx b/src/components/panels/EditorPanel.jsx index 7ee1002..c1651de 100644 --- a/src/components/panels/EditorPanel.jsx +++ b/src/components/panels/EditorPanel.jsx @@ -29,7 +29,7 @@ export class EditorPanel extends React.PureComponent { render() { const { - mode, routerPoints, editor, totalDistance, estimateTime, activeSticker, logo, user, editing, + mode, routerPoints, editor, totalDistance, estimateTime, activeSticker, logo, user, editing, title, address, } = this.props; return ( @@ -42,6 +42,8 @@ export class EditorPanel extends React.PureComponent { editor={editor} logo={logo} user={user} + title={title} + address={address} /> <LogoPreview logo={logo} /> diff --git a/src/components/save/SaveDialog.jsx b/src/components/save/SaveDialog.jsx index 3975870..894ec58 100644 --- a/src/components/save/SaveDialog.jsx +++ b/src/components/save/SaveDialog.jsx @@ -8,14 +8,18 @@ import { postMap } from '$utils/api'; import classnames from 'classnames'; export class SaveDialog extends React.Component { - state = { - address: '', - title: '', - error: '', - sending: false, - finished: false, - overwriting: false, - }; + constructor(props) { + super(props); + + this.state = { + address: props.address || '', + title: props.title || '', + error: '', + sending: false, + finished: false, + overwriting: false, + }; + } getAddress = () => { const { path } = getUrlData(); diff --git a/src/constants/auth.js b/src/constants/auth.js index 81054ca..913d249 100644 --- a/src/constants/auth.js +++ b/src/constants/auth.js @@ -10,6 +10,8 @@ export const DEFAULT_USER = { role: ROLES.guest, routes: [], success: false, + id: null, + token: null, userdata: { name: '', agent: '', diff --git a/src/containers/App.jsx b/src/containers/App.jsx index 57e72fa..3848f8e 100644 --- a/src/containers/App.jsx +++ b/src/containers/App.jsx @@ -23,6 +23,8 @@ export class App extends React.Component { user: { ...DEFAULT_USER, }, + title: '', + address: '', }; componentDidMount() { @@ -50,7 +52,6 @@ export class App extends React.Component { }; startEmptyEditor = () => { - console.log('starting empty'); const { user } = this.state; if (!user || !user.random_url || !user.id) return; @@ -62,6 +63,9 @@ export class App extends React.Component { this.hideLoader(); }; + setTitle = title => this.setState({ title }); + setAddress = address => this.setState({ address }); + setDataOnLoad = data => { this.editor.setData(data); this.hideLoader(); @@ -99,6 +103,8 @@ export class App extends React.Component { this.setState({ editing }); }; + getUser = () => this.state.user; + editor = new Editor({ container: 'map', mode: this.state.mode, @@ -108,6 +114,9 @@ export class App extends React.Component { setActiveSticker: this.setActiveSticker, setLogo: this.setLogo, setEditing: this.setEditing, + setTitle: this.setTitle, + setAddress: this.setAddress, + getUser: this.getUser, }); authInit = () => { @@ -132,6 +141,10 @@ export class App extends React.Component { setUser = user => { if (!user.token || !user.id) return; + if (this.state.user.id === this.editor.owner) { + this.editor.owner = user.id; + } + this.setState({ user: { ...DEFAULT_USER, @@ -149,6 +162,10 @@ export class App extends React.Component { getUserData = () => getData('user') || null; userLogout = () => { + if (this.state.user.id === this.editor.owner) { + this.editor.owner = null; + } + this.setState({ user: { ...DEFAULT_USER, @@ -162,7 +179,7 @@ export class App extends React.Component { const { editor, state: { - mode, routerPoints, totalDistance, estimateTime, activeSticker, logo, user, editing, + mode, routerPoints, totalDistance, estimateTime, activeSticker, logo, user, editing, title, address }, } = this; @@ -190,6 +207,8 @@ export class App extends React.Component { logo={logo} user={user} editing={editing} + title={title} + address={address} /> </div> ); diff --git a/src/modules/Editor.js b/src/modules/Editor.js index ff69d70..f6f5159 100644 --- a/src/modules/Editor.js +++ b/src/modules/Editor.js @@ -19,6 +19,9 @@ export class Editor { setActiveSticker, setLogo, setEditing, + setTitle, + setAddress, + getUser, }) { this.logo = DEFAULT_LOGO; this.owner = null; @@ -66,6 +69,9 @@ export class Editor { this.setLogo = setLogo; this.setMode = setMode; this.setEditing = setEditing; + this.setTitle = setTitle; + this.setAddress = setAddress; + this.getUser = getUser; this.mode = mode; map.addEventListener('mouseup', this.onClick); @@ -171,8 +177,12 @@ export class Editor { this.changeMode(MODES.NONE); }; - setData = ({ route, stickers, version = 1, owner }) => { - console.log('setting?', stickers); + setData = ({ route, stickers, version = 1, owner, title, address }) => { + this.setTitle(title || ''); + this.setAddress(address || ''); + + console.log('setting address', address); + if (route) { this.poly.setPoints(route); } @@ -198,7 +208,14 @@ export class Editor { startEditing = () => { const { path } = getUrlData(); - pushPath(`/${path}/edit`); + const { random_url, id } = this.getUser(); + + // console.log('ID', id, this.owner); + + const url = (this.owner && this.owner === id) ? path : random_url; + + this.setAddress(url); + pushPath(`/${url}/edit`); if (this.poly.latlngs && this.poly.latlngs.length > 1) this.poly.poly.enableEdit(); diff --git a/src/utils/api.js b/src/utils/api.js index b9e21e7..a00036a 100644 --- a/src/utils/api.js +++ b/src/utils/api.js @@ -31,7 +31,11 @@ export const getStoredMap = ({ name }) => axios.get(API.GET_MAP, { name, action: 'load' } -}).then(result => (result && result.data && result.data.data && { ...result.data.data, owner: (result.data.owner || null) })); +}).then(result => (result && result.data && result.data.data && { + ...result.data.data, + owner: (result.data.owner || null), + address: (result.data.name || name), +})); export const postMap = ({ title, address, route, stickers, id, token, force,