Skip to content

Commit

Permalink
move AnalyticsNudge component into TopBar, hide if no nudge needed (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
Maia McCormick authored May 16, 2019
1 parent 499c5f6 commit 4e921aa
Show file tree
Hide file tree
Showing 10 changed files with 214 additions and 548 deletions.
10 changes: 7 additions & 3 deletions web/src/AnalyticsNudge.scss
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
@import "constants";

.AnalyticsNudge {
border-left: $sidebar-item solid #03c7d3;
padding: $spacing-unit/4;
border-bottom: 1px solid $color-gray-light;
border: 1px solid $color-white;

display: none;
}

.is-visible {
display: block;
}

.AnalyticsNudge-buttons {
width: 100%;
align-content: center;
}
32 changes: 22 additions & 10 deletions web/src/AnalyticsNudge.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
import React, { Component } from "react"
import React, { PureComponent } from "react"
import "./AnalyticsNudge.scss"
import { ResourceView } from "./types"

class AnalyticsNudge extends Component {
type AnalyticsNudgeProps = {
needsNudge: boolean
}

class AnalyticsNudge extends PureComponent<AnalyticsNudgeProps> {
static analyticsOpt(optIn: boolean) {
let url = `//${window.location.host}/api/analytics_opt`

Expand All @@ -10,27 +15,34 @@ class AnalyticsNudge extends Component {
fetch(url, {
method: "post",
body: JSON.stringify(payload),
}).then(function(response) {
console.log("got response -->", response.status) // returns 200
})
}
render() {
let classes = ["AnalyticsNudge"]
if (this.props.needsNudge) {
// or if already visible...
classes.push("is-visible")
}

return (
<div className="AnalyticsNudge" key="AnalyticsNudge">
<div>
Congrats on your first Tilt resource 🎉 Help us help you: may we
collect anonymized data on your usage? (Read more{" "}
<div className={classes.join(" ")}>
<span>
Congrats on your first Tilt resource 🎉 Opt into analytics? (Read more{" "}
<a href="https://github.com/windmilleng/tilt#privacy" target="_blank">
here
</a>
.)
</div>
<div className="AnalyticsNudge-buttons">
.)&nbsp;
</span>
<span className="AnalyticsNudge-buttons">
<button onClick={() => AnalyticsNudge.analyticsOpt(true)}>
Yes!
</button>
<button onClick={() => AnalyticsNudge.analyticsOpt(false)}>
Nope!
</button>
</div>
</span>
</div>
)
}
Expand Down
2 changes: 1 addition & 1 deletion web/src/HUD.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,6 @@ class HUD extends Component<HudProps, HudState> {
<Sidebar
selected={name}
items={sidebarItems}
needsNudge={needsNudge}
isClosed={isSidebarClosed}
toggleSidebar={toggleSidebar}
resourceView={t}
Expand Down Expand Up @@ -234,6 +233,7 @@ class HUD extends Component<HudProps, HudState> {
sailEnabled={sailEnabled}
sailUrl={sailUrl}
numberOfAlerts={numAlerts}
needsNudge={needsNudge}
/>
)
}
Expand Down
51 changes: 0 additions & 51 deletions web/src/Sidebar.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ describe("sidebar", () => {
<Sidebar
isClosed={true}
items={[]}
needsNudge={false}
selected=""
toggleSidebar={null}
resourceView={ResourceView.Log}
Expand All @@ -54,7 +53,6 @@ describe("sidebar", () => {
<Sidebar
isClosed={false}
items={items}
needsNudge={false}
selected=""
toggleSidebar={null}
resourceView={ResourceView.Log}
Expand All @@ -76,7 +74,6 @@ describe("sidebar", () => {
<Sidebar
isClosed={false}
items={items}
needsNudge={false}
selected=""
toggleSidebar={null}
resourceView={ResourceView.Log}
Expand All @@ -103,7 +100,6 @@ describe("sidebar", () => {
<Sidebar
isClosed={false}
items={items}
needsNudge={false}
selected=""
toggleSidebar={null}
resourceView={ResourceView.Log}
Expand All @@ -127,53 +123,6 @@ describe("sidebar", () => {
<Sidebar
isClosed={false}
items={items}
needsNudge={false}
selected=""
toggleSidebar={null}
resourceView={ResourceView.Log}
pathBuilder={pathBuilder}
/>
</MemoryRouter>
)
.toJSON()

expect(tree).toMatchSnapshot()
})

it("renders analytics nudge", () => {
let items = twoResourceView().Resources.map((res: any) => {
return new SidebarItem(res)
})
const tree = renderer
.create(
<MemoryRouter initialEntries={["/"]}>
<Sidebar
isClosed={false}
items={items}
needsNudge={true}
selected=""
toggleSidebar={null}
resourceView={ResourceView.Log}
pathBuilder={pathBuilder}
/>
</MemoryRouter>
)
.toJSON()

expect(tree).toMatchSnapshot()
})

it("renders analytics nudge as third list item", () => {
let items = allResourcesOK().map((res: any) => {
return new SidebarItem(res)
})
const tree = renderer
.create(
<MemoryRouter initialEntries={["/"]}>
<Sidebar
isClosed={false}
items={items.slice(0, 6)}
needsNudge={true}
selected=""
toggleSidebar={null}
resourceView={ResourceView.Log}
Expand Down
15 changes: 0 additions & 15 deletions web/src/Sidebar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import React, { PureComponent } from "react"
import { ReactComponent as ChevronSvg } from "./assets/svg/chevron.svg"
import { ReactComponent as DotSvg } from "./assets/svg/dot.svg"
import { ReactComponent as DotBuildingSvg } from "./assets/svg/dot-building.svg"
import AnalyticsNudge from "./AnalyticsNudge"
import { Link } from "react-router-dom"
import { combinedStatus, warnings } from "./status"
import "./Sidebar.scss"
Expand Down Expand Up @@ -42,7 +41,6 @@ class SidebarItem {
type SidebarProps = {
isClosed: boolean
items: SidebarItem[]
needsNudge: boolean
selected: string
toggleSidebar: any
resourceView: ResourceView
Expand Down Expand Up @@ -139,19 +137,6 @@ class Sidebar extends PureComponent<SidebarProps> {
)
})

if (this.props.needsNudge) {
let nudgeItem = (
<li key="AnalyticsNudge">
<AnalyticsNudge />
</li>
)
if (listItems.length > 2) {
listItems.splice(2, 0, nudgeItem)
} else {
listItems.push(nudgeItem)
}
}

return (
<section className={classes.join(" ")}>
<nav className="Sidebar-resources">
Expand Down
5 changes: 5 additions & 0 deletions web/src/TopBar.scss
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,11 @@
z-index: $z-topbar;
color: $color-gray-light;

display: flex;
flex-direction: column;
}

.TopBar-row {
display: flex;
flex-direction: row;
align-items: center;
Expand Down
2 changes: 2 additions & 0 deletions web/src/TopBar.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ it("shows sail share button", () => {
sailEnabled={true}
sailUrl=""
numberOfAlerts={0}
needsNudge={false}
/>
</MemoryRouter>
)
Expand All @@ -36,6 +37,7 @@ it("shows sail url", () => {
sailEnabled={true}
sailUrl="www.sail.dev/xyz"
numberOfAlerts={1}
needsNudge={false}
/>
</MemoryRouter>
)
Expand Down
29 changes: 17 additions & 12 deletions web/src/TopBar.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import React, { PureComponent } from "react"
import { ResourceView } from "./types"
import "./TopBar.scss"
import AnalyticsNudge from "./AnalyticsNudge"
import SailInfo from "./SailInfo"
import TabNav from "./TabNav"

Expand All @@ -12,24 +13,28 @@ type TopBarProps = {
sailEnabled: boolean
sailUrl: string
numberOfAlerts: number
needsNudge: boolean
}

class TopBar extends PureComponent<TopBarProps> {
render() {
return (
<div className="TopBar">
<TabNav
previewUrl={this.props.previewUrl}
logUrl={this.props.logUrl}
alertsUrl={this.props.alertsUrl}
resourceView={this.props.resourceView}
numberOfAlerts={this.props.numberOfAlerts}
/>
<span className="TopBar-spacer">&nbsp;</span>
<SailInfo
sailEnabled={this.props.sailEnabled}
sailUrl={this.props.sailUrl}
/>
<AnalyticsNudge needsNudge={this.props.needsNudge} />
<div className="TopBar-row">
<TabNav
previewUrl={this.props.previewUrl}
logUrl={this.props.logUrl}
alertsUrl={this.props.alertsUrl}
resourceView={this.props.resourceView}
numberOfAlerts={this.props.numberOfAlerts}
/>
<span className="TopBar-spacer">&nbsp;</span>
<SailInfo
sailEnabled={this.props.sailEnabled}
sailUrl={this.props.sailUrl}
/>
</div>
</div>
)
}
Expand Down
Loading

0 comments on commit 4e921aa

Please sign in to comment.