diff --git a/assets/src/js/components/SiteSettings.js b/assets/src/js/components/SiteSettings.js index 1f7a304..d65e0c4 100644 --- a/assets/src/js/components/SiteSettings.js +++ b/assets/src/js/components/SiteSettings.js @@ -31,25 +31,27 @@ class SiteSettings extends Component { return; } - Client.request(`/sites/${this.props.site.id}`, { + let site = this.props.site; + Client.request(`/sites/${site.id}`, { method: "DELETE", - }).then((r) => { - console.log(r) + }).then((d) => { + this.props.onDelete(site) }) } @bind onSubmit(evt) { evt.preventDefault(); + let site = this.props.site; Client.request('sites', { method: "POST", data: { - id: this.props.site.id, - name: this.props.site.name, + id: site.id, + name: site.name, } - }).then((r) => { - console.log(r) + }).then((d) => { + this.props.onUpdate(d) }) } diff --git a/assets/src/js/pages/dashboard.js b/assets/src/js/pages/dashboard.js index 19a413e..4b3edb6 100644 --- a/assets/src/js/pages/dashboard.js +++ b/assets/src/js/pages/dashboard.js @@ -23,7 +23,7 @@ class Dashboard extends Component { before: 0, after: 0, isPublic: document.cookie.indexOf('auth') < 0, - site: { id: 0, name: "Default site"}, + site: { id: 0 }, sites: [], settingsOpen: false, } @@ -37,7 +37,12 @@ class Dashboard extends Component { fetchSites() { Client.request(`sites`) .then((data) => { - this.setState({sites: data}) + // TODO: Account for no sites here + // TODO: Get selected site from localstorage + this.setState({ + sites: data, + site: data[0] + }) }) } @@ -60,10 +65,35 @@ class Dashboard extends Component { } @bind - changeSite(site) { + changeSelectedSite(site) { this.setState({site: site}) } + @bind + updateSite(site) { + let updated = false; + let newSites = this.state.sites.map((s) => { + if(s.id != site.id) { + return s; + } + + updated = true; + return site; + }) + + if(!updated) { + newSites.push(site); + } + + this.setState({sites: newSites, site: site}) + } + + @bind + deleteSite(site) { + let newSites = this.state.sites.filter((s) => (s.id != site.id)) + this.setState({ sites: newSites, site: newSites[0] }) + } + render(props, state) { // only show logout link if this dashboard is not public @@ -72,13 +102,14 @@ class Dashboard extends Component { ); return ( -
+
+
+ +
)} } diff --git a/assets/src/sass/styles.scss b/assets/src/sass/styles.scss index 4de3f11..41fe0c9 100644 --- a/assets/src/sass/styles.scss +++ b/assets/src/sass/styles.scss @@ -42,7 +42,7 @@ body { } .app-page { - &.wrapper { max-width: 1180px; margin: 0 auto; text-align: left; } + .wrapper { max-width: 1180px; margin: 0 auto; text-align: left; } .section { margin-bottom: 32px; } header {} section {} diff --git a/pkg/api/sites.go b/pkg/api/sites.go index 8ff2240..9daa13c 100644 --- a/pkg/api/sites.go +++ b/pkg/api/sites.go @@ -28,7 +28,8 @@ func (api *API) SaveSiteHandler(w http.ResponseWriter, r *http.Request) error { return err } - if s.TrackingID == "" { + // generate tracking ID if this is a new site + if s.ID == 0 && s.TrackingID == "" { s.TrackingID = randomString(8) }