Fix yarn issues

This commit is contained in:
Rick Carlino 2017-08-22 13:16:30 -05:00
commit 492adb7fe7
7 changed files with 259 additions and 249 deletions

View file

@ -2,6 +2,7 @@
@import "temp"; @import "temp";
// Node Modules // Node Modules
@import "../../node_modules/@blueprintjs/core/dist/blueprint.css"; @import "../../node_modules/@blueprintjs/core/dist/blueprint.css";
@import "../../node_modules/@blueprintjs/datetime/dist/blueprint-datetime.css";
// Partials // Partials
@import "animations"; @import "animations";
@import "colors"; @import "colors";

View file

@ -209,17 +209,18 @@
.garden-map-legend { .garden-map-legend {
position: fixed; position: fixed;
top: 11rem; top: 110px;
right: -12rem; right: -120px;
transition: all 0.4s ease; transition: all 0.4s ease;
box-shadow: 0px 1px 4px #555; box-shadow: 0px 1px 4px #555;
max-width: 336px;
&.active { &.active {
transform: translateX(-14rem); transform: translateX(-140px);
} }
.content { .content {
background: $light_green; background: $light_green;
padding: 1rem; padding: 10px;
border-radius: 0.5rem; border-radius: 5px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
flex-wrap: wrap; flex-wrap: wrap;

View file

@ -236,7 +236,8 @@ export class EditFEForm extends React.Component<EditFEProps, State> {
/> />
</Col> </Col>
<Col xs={6}> <Col xs={6}>
<BlurableInput type="time" <BlurableInput
type="time"
className="add-event-start-time" className="add-event-start-time"
name="start_time" name="start_time"
value={this.fieldGet("startTime")} value={this.fieldGet("startTime")}

View file

@ -22,75 +22,77 @@ export function GardenMapLegend(props: GardenMapLegendProps) {
let minusBtnClass = (zoomLvl && zoomLvl <= 0.4) ? "disabled" : ""; let minusBtnClass = (zoomLvl && zoomLvl <= 0.4) ? "disabled" : "";
let menuClass = legendMenuOpen ? "active" : ""; let menuClass = legendMenuOpen ? "active" : "";
return <div return (
className={"garden-map-legend " + menuClass}
style={{ zoom: 1 }}>
<div <div
className={"menu-pullout " + menuClass} className={"garden-map-legend " + menuClass}
onClick={toggle("legendMenuOpen")}> style={{ zoom: 1 }}>
<span> <div
{t("Menu")} className={"menu-pullout " + menuClass}
</span> onClick={toggle("legendMenuOpen")}>
<i className="fa fa-2x fa-arrow-left" /> <span>
</div> {t("Menu")}
<div className="content"> </span>
<div className="zoom-buttons"> <i className="fa fa-2x fa-arrow-left" />
<button
className={"fb-button plus-button green top " + plusBtnClass}
onClick={zoom(0.1)}>
<i className="fa fa-2x fa-plus" />
</button>
<button
className={"fb-button plus-button green bottom " + minusBtnClass}
onClick={zoom(-0.1)}>
<i className="fa fa-2x fa-minus" />
</button>
</div> </div>
<div className="toggle-buttons"> <div className="content">
<LayerToggle <div className="zoom-buttons">
value={showPlants} <button
label={t("Plants?")} className={"fb-button plus-button green top " + plusBtnClass}
onClick={toggle("showPlants")} onClick={zoom(0.1)}>
/> <i className="fa fa-2x fa-plus" />
<LayerToggle </button>
value={showPoints} <button
label={t("Points?")} className={"fb-button plus-button green bottom " + minusBtnClass}
onClick={toggle("showPoints")} onClick={zoom(-0.1)}>
/> <i className="fa fa-2x fa-minus" />
<LayerToggle </button>
value={showSpread} </div>
label={t("Spread?")} <div className="toggle-buttons">
onClick={toggle("showSpread")} <LayerToggle
/> value={showPlants}
<LayerToggle label={t("Plants?")}
value={showFarmbot} onClick={toggle("showPlants")}
label={t("FarmBot?")}
onClick={toggle("showFarmbot")}
/>
</div>
<div className="farmbot-origin">
<label>
{t("Origin")}
</label>
<div className="quadrants">
<div
className={"quadrant " + (botOriginQuadrant === 2 && "selected")}
onClick={updateBotOriginQuadrant(2)}
/> />
<div <LayerToggle
className={"quadrant " + (botOriginQuadrant === 1 && "selected")} value={showPoints}
onClick={updateBotOriginQuadrant(1)} label={t("Points?")}
onClick={toggle("showPoints")}
/> />
<div <LayerToggle
className={"quadrant " + (botOriginQuadrant === 3 && "selected")} value={showSpread}
onClick={updateBotOriginQuadrant(3)} label={t("Spread?")}
onClick={toggle("showSpread")}
/> />
<div <LayerToggle
className={"quadrant " + (botOriginQuadrant === 4 && "selected")} value={showFarmbot}
onClick={updateBotOriginQuadrant(4)} label={t("FarmBot?")}
onClick={toggle("showFarmbot")}
/> />
</div> </div>
<div className="farmbot-origin">
<label>
{t("Origin")}
</label>
<div className="quadrants">
<div
className={"quadrant " + (botOriginQuadrant === 2 && "selected")}
onClick={updateBotOriginQuadrant(2)}
/>
<div
className={"quadrant " + (botOriginQuadrant === 1 && "selected")}
onClick={updateBotOriginQuadrant(1)}
/>
<div
className={"quadrant " + (botOriginQuadrant === 3 && "selected")}
onClick={updateBotOriginQuadrant(3)}
/>
<div
className={"quadrant " + (botOriginQuadrant === 4 && "selected")}
onClick={updateBotOriginQuadrant(4)}
/>
</div>
</div>
</div> </div>
</div> </div>
</div> );
} }

View file

@ -2,11 +2,7 @@ import * as React from "react";
import { Component } from "react"; import { Component } from "react";
import { TaggedPlantPointer } from "../../../resources/tagged_resources"; import { TaggedPlantPointer } from "../../../resources/tagged_resources";
import { BotOriginQuadrant } from "../../interfaces"; import { BotOriginQuadrant } from "../../interfaces";
import { import { round, scale, getXYFromQuadrant } from "../util";
round,
scale,
getXYFromQuadrant
} from "../util";
import { cachedCrop } from "../../../open_farm/index"; import { cachedCrop } from "../../../open_farm/index";
interface SpreadLayerProps { interface SpreadLayerProps {
@ -18,20 +14,23 @@ interface SpreadLayerProps {
export function SpreadLayer(props: SpreadLayerProps) { export function SpreadLayer(props: SpreadLayerProps) {
let { plants, visible, currentPlant, botOriginQuadrant } = props; let { plants, visible, currentPlant, botOriginQuadrant } = props;
return (
return <g> <g>
{ {
plants.map((p, index) => { plants.map((p, index) => {
let isSelected = p === currentPlant; let isSelected = p === currentPlant;
return (visible || isSelected) ? return (visible || isSelected) ?
<SpreadCircle <SpreadCircle
plant={p} plant={p}
key={index} key={index}
quadrant={botOriginQuadrant} quadrant={botOriginQuadrant}
/> : <g key={index} />; />
}) :
} <g key={index} />;
</g>; })
}
</g>
);
} }
interface SpreadCircleProps { interface SpreadCircleProps {
@ -48,7 +47,7 @@ export class SpreadCircle extends
state: SpreadCircleState = { spread: undefined }; state: SpreadCircleState = { spread: undefined };
componentWillReceiveProps() { componentDidMount() {
cachedCrop(this.props.plant.body.openfarm_slug) cachedCrop(this.props.plant.body.openfarm_slug)
.then(({ spread }) => this.setState({ spread })); .then(({ spread }) => this.setState({ spread }));
} }

View file

@ -30,14 +30,13 @@ export class FrontPage extends React.Component<{}, Partial<FrontPageState>> {
} }
componentDidMount() { componentDidMount() {
if (Session.get()) { window.location.href = "/app/controls"; }
logInit(); logInit();
API.setBaseUrl(API.fetchBrowserLocation()); API.setBaseUrl(API.fetchBrowserLocation());
this.setState({ this.setState({
serverURL: API.fetchHostName(), serverURL: API.fetchHostName(),
serverPort: API.inferPort() serverPort: API.inferPort()
}); });
// RICK CHECK ME ON THIS PLZ -CV
if (Session.get()) { window.location.href = "/app/controls"; }
} }
set = (name: keyof FrontPageState) => set = (name: keyof FrontPageState) =>
@ -120,7 +119,8 @@ export class FrontPage extends React.Component<{}, Partial<FrontPageState>> {
}).catch(error => { }).catch(error => {
let errorMessage = prettyPrintApiErrors(error); let errorMessage = prettyPrintApiErrors(error);
if (errorMessage.toLowerCase().includes("not found")) { if (errorMessage.toLowerCase().includes("not found")) {
errorMessage = "That email address is not associated with an account."; errorMessage =
`That email address is not associated with an account.`;
} }
log(errorMessage); log(errorMessage);
}); });
@ -136,7 +136,8 @@ export class FrontPage extends React.Component<{}, Partial<FrontPageState>> {
<label>{t("I agree to the terms of use")}</label> <label>{t("I agree to the terms of use")}</label>
<input type="checkbox" <input type="checkbox"
onChange={this.set("agreeToTerms").bind(this)} onChange={this.set("agreeToTerms").bind(this)}
value={this.state.agreeToTerms ? "false" : "true"} /> value={this.state.agreeToTerms ? "false" : "true"}
/>
</div> </div>
<ul> <ul>
<li> <li>
@ -173,192 +174,197 @@ export class FrontPage extends React.Component<{}, Partial<FrontPageState>> {
let expandIcon = showServerOpts ? "minus" : "plus"; let expandIcon = showServerOpts ? "minus" : "plus";
let { toggleServerOpts } = this; let { toggleServerOpts } = this;
return ( // If the user is already logged in, don't show this page.
<div className="static-page"> if (!Session.get()) {
<Row> return (
<Col xs={12}> <div className="static-page">
<h1 className="text-center">
{t("Welcome to the")}
<br className="hidden-sm hidden-md hidden-lg hidden-xl" />
&nbsp;
{t("FarmBot Web App")}
</h1>
</Col>
</Row>
<div className="inner-width">
<Row> <Row>
<h2 className="text-center"> <Col xs={12}>
<Col xs={12}> <h1 className="text-center">
{t("Setup, customize, and control FarmBot from your")} {t("Welcome to the")}
<br className="hidden-sm hidden-md hidden-lg hidden-xl" />
&nbsp; &nbsp;
<span className="hidden-xs hidden-sm hidden-md"> {t("FarmBot Web App")}
{t("computer")} </h1>
</span> </Col>
<span className="hidden-xs hidden-lg hidden-xl">
{t("tablet")}
</span>
<span className="hidden-sm hidden-md hidden-lg hidden-xl">
{t("smartphone")}
</span>
</Col>
</h2>
</Row> </Row>
<img
className="hidden-xs hidden-sm col-md-7" <div className="inner-width">
src="/app-resources/img/farmbot-desktop.png" <Row>
/> <h2 className="text-center">
<img <Col xs={12}>
className="hidden-xs hidden-md hidden-lg hidden-xl col-sm-7" {t("Setup, customize, and control FarmBot from your")}
src="/app-resources/img/farmbot-tablet.png" &nbsp;
/> <span className="hidden-xs hidden-sm hidden-md">
<Row> {t("computer")}
{!forgotPassword && ( </span>
<span className="hidden-xs hidden-lg hidden-xl">
{t("tablet")}
</span>
<span className="hidden-sm hidden-md hidden-lg hidden-xl">
{t("smartphone")}
</span>
</Col>
</h2>
</Row>
<img
className="hidden-xs hidden-sm col-md-7"
src="/app-resources/img/farmbot-desktop.png"
/>
<img
className="hidden-xs hidden-md hidden-lg hidden-xl col-sm-7"
src="/app-resources/img/farmbot-tablet.png"
/>
<Row>
{!forgotPassword && (
<Col xs={12} sm={5}>
<Widget>
<WidgetHeader title={"Login"}>
<button
className="fb-button gray"
onClick={toggleServerOpts}
>
<i className={`fa fa-${expandIcon}`} />
</button>
</WidgetHeader>
<WidgetBody>
<form onSubmit={this.submitLogin.bind(this)}>
<label>
{t("Email")}
</label>
<input
type="email"
value={this.state.email}
onChange={this.set("email").bind(this)}
/>
<label>
{t("Password")}
</label>
<input
type="password"
onChange={this.set("loginPassword").bind(this)}
/>
<a
className="forgot-password"
onClick={this.toggleForgotPassword.bind(this)}
>
{t("Forgot password?")}
</a>
{this.state.showServerOpts &&
<div>
<label>
{t("Server URL")}
</label>
<input
type="text"
onChange={this.set("serverURL").bind(this)}
value={this.state.serverURL}
/>
<label>
{t("Server Port")}
</label>
<input
type="text"
onChange={this.set("serverPort").bind(this)}
value={this.state.serverPort}
/>
</div>
}
<Row>
<button
className="fb-button green pull-right"
style={buttonStylesUniqueToOnlyThisPage}
>
{t("Login")}
</button>
</Row>
</form>
</WidgetBody>
</Widget>
</Col>
)}
{forgotPassword && (
<Col xs={12} sm={5}>
<Widget>
<WidgetHeader title={"Reset Password"}>
<button
className="fb-button gray"
onClick={this.toggleForgotPassword.bind(this)}
>
{t("BACK")}
</button>
</WidgetHeader>
<WidgetBody>
<form onSubmit={this.submitForgotPassword.bind(this)}>
<label>{t("Enter Email")}</label>
<input
type="email"
value={this.state.email}
onChange={this.set("email").bind(this)}
/>
<Row>
<button
className="fb-button green"
style={buttonStylesUniqueToOnlyThisPage}
>
{t("Reset Password")}
</button>
</Row>
</form>
</WidgetBody>
</Widget>
</Col>
)}
<Col xs={12} sm={5}> <Col xs={12} sm={5}>
<Widget> <Widget>
<WidgetHeader title={"Login"}> <WidgetHeader title={"Create An Account"} />
<button
className="fb-button gray"
onClick={toggleServerOpts}
>
<i className={`fa fa-${expandIcon}`} />
</button>
</WidgetHeader>
<WidgetBody> <WidgetBody>
<form onSubmit={this.submitLogin.bind(this)}> <form onSubmit={this.submitRegistration.bind(this)}>
<label> <label>
{t("Email")} {t("Email")}
</label> </label>
<input <input
type="email" type="email"
value={this.state.email} onChange={this.set("regEmail").bind(this)}
onChange={this.set("email").bind(this)} />
<label>
{t("Name")}
</label>
<input
type="text"
onChange={this.set("regName").bind(this)}
/> />
<label> <label>
{t("Password")} {t("Password")}
</label> </label>
<input <input
type="password" type="password"
onChange={this.set("loginPassword").bind(this)} onChange={this.set("regPassword").bind(this)}
/> />
<a <label>{t("Verify Password")}</label>
className="forgot-password"
onClick={this.toggleForgotPassword.bind(this)}
>
{t("Forgot password?")}
</a>
{this.state.showServerOpts &&
<div>
<label>
{t("Server URL")}
</label>
<input
type="text"
onChange={this.set("serverURL").bind(this)}
value={this.state.serverURL}
/>
<label>
{t("Server Port")}
</label>
<input
type="text"
onChange={this.set("serverPort").bind(this)}
value={this.state.serverPort}
/>
</div>
}
<Row>
<button
className="fb-button green pull-right"
style={buttonStylesUniqueToOnlyThisPage}
>
{t("Login")}
</button>
</Row>
</form>
</WidgetBody>
</Widget>
</Col>
)}
{forgotPassword && (
<Col xs={12} sm={5}>
<Widget>
<WidgetHeader title={"Reset Password"}>
<button
className="fb-button gray"
onClick={this.toggleForgotPassword.bind(this)}
>
{t("BACK")}
</button>
</WidgetHeader>
<WidgetBody>
<form onSubmit={this.submitForgotPassword.bind(this)}>
<label>{t("Enter Email")}</label>
<input <input
type="email" type="password"
value={this.state.email} onChange={this.set("regConfirmation").bind(this)}
onChange={this.set("email").bind(this)}
/> />
{this.maybeRenderTos()}
<Row> <Row>
<button <button
className="fb-button green" className="fb-button green"
style={buttonStylesUniqueToOnlyThisPage} style={buttonStylesUniqueToOnlyThisPage}
> >
{t("Reset Password")} {t("Create Account")}
</button> </button>
</Row> </Row>
</form> </form>
</WidgetBody> </WidgetBody>
</Widget> </Widget>
</Col> </Col>
)} </Row>
<Col xs={12} sm={5}> </div>
<Widget>
<WidgetHeader title={"Create An Account"} />
<WidgetBody>
<form onSubmit={this.submitRegistration.bind(this)}>
<label>
{t("Email")}
</label>
<input
type="email"
onChange={this.set("regEmail").bind(this)}
/>
<label>
{t("Name")}
</label>
<input
type="text"
onChange={this.set("regName").bind(this)}
/>
<label>
{t("Password")}
</label>
<input
type="password"
onChange={this.set("regPassword").bind(this)}
/>
<label>{t("Verify Password")}</label>
<input
type="password"
onChange={this.set("regConfirmation").bind(this)}
/>
{this.maybeRenderTos()}
<Row>
<button
className="fb-button green"
style={buttonStylesUniqueToOnlyThisPage}
>
{t("Create Account")}
</button>
</Row>
</form>
</WidgetBody>
</Widget>
</Col>
</Row>
</div> </div>
</div> );
); } else {
return <div />;
}
} }
} }

View file

@ -1395,13 +1395,13 @@ debug@2.6.4:
dependencies: dependencies:
ms "0.7.3" ms "0.7.3"
debug@^2.1.1, debug@^2.2.0, debug@^2.4.5, debug@^2.6.3, debug@^2.6.6: debug@^2.1.1, debug@^2.2.0, debug@^2.4.5, debug@^2.6.6:
version "2.6.6" version "2.6.6"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.6.tgz#a9fa6fbe9ca43cf1e79f73b75c0189cbb7d6db5a" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.6.tgz#a9fa6fbe9ca43cf1e79f73b75c0189cbb7d6db5a"
dependencies: dependencies:
ms "0.7.3" ms "0.7.3"
debug@^2.6.8: debug@^2.6.3, debug@^2.6.8:
version "2.6.8" version "2.6.8"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc"
dependencies: dependencies: