Merge branch 'staging' of github.com:FarmBot/Farmbot-Web-App into folders
commit
a0abdcb198
|
@ -1,6 +1,7 @@
|
|||
.cache
|
||||
.env
|
||||
.vscode
|
||||
.idea
|
||||
*.log
|
||||
*.pem
|
||||
coverage_api
|
||||
|
|
134
Gemfile.lock
134
Gemfile.lock
|
@ -7,38 +7,38 @@ GIT
|
|||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
actioncable (6.0.1)
|
||||
actionpack (= 6.0.1)
|
||||
actioncable (6.0.2.1)
|
||||
actionpack (= 6.0.2.1)
|
||||
nio4r (~> 2.0)
|
||||
websocket-driver (>= 0.6.1)
|
||||
actionmailbox (6.0.1)
|
||||
actionpack (= 6.0.1)
|
||||
activejob (= 6.0.1)
|
||||
activerecord (= 6.0.1)
|
||||
activestorage (= 6.0.1)
|
||||
activesupport (= 6.0.1)
|
||||
actionmailbox (6.0.2.1)
|
||||
actionpack (= 6.0.2.1)
|
||||
activejob (= 6.0.2.1)
|
||||
activerecord (= 6.0.2.1)
|
||||
activestorage (= 6.0.2.1)
|
||||
activesupport (= 6.0.2.1)
|
||||
mail (>= 2.7.1)
|
||||
actionmailer (6.0.1)
|
||||
actionpack (= 6.0.1)
|
||||
actionview (= 6.0.1)
|
||||
activejob (= 6.0.1)
|
||||
actionmailer (6.0.2.1)
|
||||
actionpack (= 6.0.2.1)
|
||||
actionview (= 6.0.2.1)
|
||||
activejob (= 6.0.2.1)
|
||||
mail (~> 2.5, >= 2.5.4)
|
||||
rails-dom-testing (~> 2.0)
|
||||
actionpack (6.0.1)
|
||||
actionview (= 6.0.1)
|
||||
activesupport (= 6.0.1)
|
||||
rack (~> 2.0)
|
||||
actionpack (6.0.2.1)
|
||||
actionview (= 6.0.2.1)
|
||||
activesupport (= 6.0.2.1)
|
||||
rack (~> 2.0, >= 2.0.8)
|
||||
rack-test (>= 0.6.3)
|
||||
rails-dom-testing (~> 2.0)
|
||||
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
||||
actiontext (6.0.1)
|
||||
actionpack (= 6.0.1)
|
||||
activerecord (= 6.0.1)
|
||||
activestorage (= 6.0.1)
|
||||
activesupport (= 6.0.1)
|
||||
actiontext (6.0.2.1)
|
||||
actionpack (= 6.0.2.1)
|
||||
activerecord (= 6.0.2.1)
|
||||
activestorage (= 6.0.2.1)
|
||||
activesupport (= 6.0.2.1)
|
||||
nokogiri (>= 1.8.5)
|
||||
actionview (6.0.1)
|
||||
activesupport (= 6.0.1)
|
||||
actionview (6.0.2.1)
|
||||
activesupport (= 6.0.2.1)
|
||||
builder (~> 3.1)
|
||||
erubi (~> 1.4)
|
||||
rails-dom-testing (~> 2.0)
|
||||
|
@ -48,20 +48,20 @@ GEM
|
|||
activemodel (>= 4.1, < 6.1)
|
||||
case_transform (>= 0.2)
|
||||
jsonapi-renderer (>= 0.1.1.beta1, < 0.3)
|
||||
activejob (6.0.1)
|
||||
activesupport (= 6.0.1)
|
||||
activejob (6.0.2.1)
|
||||
activesupport (= 6.0.2.1)
|
||||
globalid (>= 0.3.6)
|
||||
activemodel (6.0.1)
|
||||
activesupport (= 6.0.1)
|
||||
activerecord (6.0.1)
|
||||
activemodel (= 6.0.1)
|
||||
activesupport (= 6.0.1)
|
||||
activestorage (6.0.1)
|
||||
actionpack (= 6.0.1)
|
||||
activejob (= 6.0.1)
|
||||
activerecord (= 6.0.1)
|
||||
activemodel (6.0.2.1)
|
||||
activesupport (= 6.0.2.1)
|
||||
activerecord (6.0.2.1)
|
||||
activemodel (= 6.0.2.1)
|
||||
activesupport (= 6.0.2.1)
|
||||
activestorage (6.0.2.1)
|
||||
actionpack (= 6.0.2.1)
|
||||
activejob (= 6.0.2.1)
|
||||
activerecord (= 6.0.2.1)
|
||||
marcel (~> 0.3.1)
|
||||
activesupport (6.0.1)
|
||||
activesupport (6.0.2.1)
|
||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||
i18n (>= 0.7, < 2)
|
||||
minitest (~> 5.1)
|
||||
|
@ -71,7 +71,7 @@ GEM
|
|||
public_suffix (>= 2.0.2, < 5.0)
|
||||
amq-protocol (2.3.0)
|
||||
bcrypt (3.1.13)
|
||||
builder (3.2.3)
|
||||
builder (3.2.4)
|
||||
bunny (2.14.3)
|
||||
amq-protocol (~> 2.3, >= 2.3.0)
|
||||
case_transform (0.2)
|
||||
|
@ -109,7 +109,7 @@ GEM
|
|||
factory_bot_rails (5.1.1)
|
||||
factory_bot (~> 5.1.0)
|
||||
railties (>= 4.2.0)
|
||||
faker (2.7.0)
|
||||
faker (2.9.0)
|
||||
i18n (>= 1.6, < 1.8)
|
||||
faraday (0.15.4)
|
||||
multipart-post (>= 1.2, < 3)
|
||||
|
@ -119,7 +119,7 @@ GEM
|
|||
railties (>= 3.2, < 6.1)
|
||||
globalid (0.4.2)
|
||||
activesupport (>= 4.2.0)
|
||||
google-api-client (0.34.1)
|
||||
google-api-client (0.36.1)
|
||||
addressable (~> 2.5, >= 2.5.1)
|
||||
googleauth (~> 0.9)
|
||||
httpclient (>= 2.8.1, < 3.0)
|
||||
|
@ -131,7 +131,7 @@ GEM
|
|||
google-cloud-env (~> 1.0)
|
||||
google-cloud-env (1.3.0)
|
||||
faraday (~> 0.11)
|
||||
google-cloud-storage (1.24.0)
|
||||
google-cloud-storage (1.25.0)
|
||||
addressable (~> 2.5)
|
||||
digest-crc (~> 0.4)
|
||||
google-api-client (~> 0.33)
|
||||
|
@ -150,17 +150,17 @@ GEM
|
|||
httpclient (2.8.3)
|
||||
i18n (1.7.0)
|
||||
concurrent-ruby (~> 1.0)
|
||||
json (2.2.0)
|
||||
json (2.3.0)
|
||||
jsonapi-renderer (0.2.2)
|
||||
jwt (2.2.1)
|
||||
loofah (2.3.1)
|
||||
loofah (2.4.0)
|
||||
crass (~> 1.0.2)
|
||||
nokogiri (>= 1.5.9)
|
||||
mail (2.7.1)
|
||||
mini_mime (>= 0.1.1)
|
||||
marcel (0.3.3)
|
||||
mimemagic (~> 0.3.2)
|
||||
memoist (0.16.1)
|
||||
memoist (0.16.2)
|
||||
method_source (0.9.2)
|
||||
mimemagic (0.3.3)
|
||||
mini_mime (1.0.2)
|
||||
|
@ -171,7 +171,7 @@ GEM
|
|||
mutations (0.9.0)
|
||||
activesupport
|
||||
nio4r (2.5.2)
|
||||
nokogiri (1.10.5)
|
||||
nokogiri (1.10.7)
|
||||
mini_portile2 (~> 2.4.0)
|
||||
orm_adapter (0.5.0)
|
||||
os (1.0.1)
|
||||
|
@ -190,27 +190,27 @@ GEM
|
|||
faraday_middleware (~> 0.13.0)
|
||||
hashie (~> 3.6)
|
||||
multi_json (~> 1.13.1)
|
||||
rack (2.0.7)
|
||||
rack-attack (6.2.1)
|
||||
rack (2.0.8)
|
||||
rack-attack (6.2.2)
|
||||
rack (>= 1.0, < 3)
|
||||
rack-cors (1.0.6)
|
||||
rack (>= 1.6.0)
|
||||
rack-cors (1.1.0)
|
||||
rack (>= 2.0.0)
|
||||
rack-test (1.1.0)
|
||||
rack (>= 1.0, < 3)
|
||||
rails (6.0.1)
|
||||
actioncable (= 6.0.1)
|
||||
actionmailbox (= 6.0.1)
|
||||
actionmailer (= 6.0.1)
|
||||
actionpack (= 6.0.1)
|
||||
actiontext (= 6.0.1)
|
||||
actionview (= 6.0.1)
|
||||
activejob (= 6.0.1)
|
||||
activemodel (= 6.0.1)
|
||||
activerecord (= 6.0.1)
|
||||
activestorage (= 6.0.1)
|
||||
activesupport (= 6.0.1)
|
||||
rails (6.0.2.1)
|
||||
actioncable (= 6.0.2.1)
|
||||
actionmailbox (= 6.0.2.1)
|
||||
actionmailer (= 6.0.2.1)
|
||||
actionpack (= 6.0.2.1)
|
||||
actiontext (= 6.0.2.1)
|
||||
actionview (= 6.0.2.1)
|
||||
activejob (= 6.0.2.1)
|
||||
activemodel (= 6.0.2.1)
|
||||
activerecord (= 6.0.2.1)
|
||||
activestorage (= 6.0.2.1)
|
||||
activesupport (= 6.0.2.1)
|
||||
bundler (>= 1.3.0)
|
||||
railties (= 6.0.1)
|
||||
railties (= 6.0.2.1)
|
||||
sprockets-rails (>= 2.0.0)
|
||||
rails-dom-testing (2.0.3)
|
||||
activesupport (>= 4.2.0)
|
||||
|
@ -222,9 +222,9 @@ GEM
|
|||
rails_stdout_logging
|
||||
rails_serve_static_assets (0.0.5)
|
||||
rails_stdout_logging (0.0.5)
|
||||
railties (6.0.1)
|
||||
actionpack (= 6.0.1)
|
||||
activesupport (= 6.0.1)
|
||||
railties (6.0.2.1)
|
||||
actionpack (= 6.0.2.1)
|
||||
activesupport (= 6.0.2.1)
|
||||
method_source
|
||||
rake (>= 0.8.7)
|
||||
thor (>= 0.20.3, < 2.0)
|
||||
|
@ -234,13 +234,13 @@ GEM
|
|||
declarative (< 0.1.0)
|
||||
declarative-option (< 0.2.0)
|
||||
uber (< 0.2.0)
|
||||
request_store (1.4.1)
|
||||
request_store (1.5.0)
|
||||
rack (>= 1.4)
|
||||
responders (3.0.0)
|
||||
actionpack (>= 5.0)
|
||||
railties (>= 5.0)
|
||||
retriable (3.1.2)
|
||||
rollbar (2.22.1)
|
||||
rollbar (2.23.1)
|
||||
rspec (3.9.0)
|
||||
rspec-core (~> 3.9.0)
|
||||
rspec-expectations (~> 3.9.0)
|
||||
|
@ -283,7 +283,7 @@ GEM
|
|||
actionpack (>= 4.0)
|
||||
activesupport (>= 4.0)
|
||||
sprockets (>= 3.0.0)
|
||||
thor (0.20.3)
|
||||
thor (1.0.1)
|
||||
thread_safe (0.3.6)
|
||||
tzinfo (1.2.5)
|
||||
thread_safe (~> 0.1)
|
||||
|
@ -297,7 +297,7 @@ GEM
|
|||
websocket-driver (0.7.1)
|
||||
websocket-extensions (>= 0.1.0)
|
||||
websocket-extensions (0.1.4)
|
||||
zeitwerk (2.2.1)
|
||||
zeitwerk (2.2.2)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
|
|
@ -10,6 +10,7 @@ describe("<Grid/>", () => {
|
|||
function fakeProps(): GridProps {
|
||||
return {
|
||||
mapTransformProps: fakeMapTransformProps(),
|
||||
zoomLvl: 1,
|
||||
onClick: jest.fn(),
|
||||
onMouseDown: jest.fn(),
|
||||
};
|
||||
|
@ -38,4 +39,27 @@ describe("<Grid/>", () => {
|
|||
expect.objectContaining(expectedGridShape));
|
||||
});
|
||||
|
||||
it("render default patterns strokes above 0.5 zoom", () => {
|
||||
const p = fakeProps();
|
||||
p.zoomLvl = 0.6;
|
||||
const wrapper = shallow(<Grid {...p} />);
|
||||
const minorGrid = wrapper.find("#minor_grid>path");
|
||||
const majorGrid = wrapper.find("#major_grid>path");
|
||||
const superiorGrid = wrapper.find("#superior_grid>path");
|
||||
expect(minorGrid.props()).toHaveProperty("stroke", "rgba(0, 0, 0, 0.15)");
|
||||
expect(majorGrid.props()).toHaveProperty("stroke", "rgba(0, 0, 0, 0.3)");
|
||||
expect(superiorGrid.props()).toHaveProperty("stroke", "rgba(0, 0, 0, 0.4)");
|
||||
});
|
||||
|
||||
it("change patterns strokes on 0.5 zoom and below", () => {
|
||||
const p = fakeProps();
|
||||
p.zoomLvl = 0.5;
|
||||
const wrapper = shallow(<Grid {...p} />);
|
||||
const minorGrid = wrapper.find("#minor_grid>path");
|
||||
const majorGrid = wrapper.find("#major_grid>path");
|
||||
const superiorGrid = wrapper.find("#superior_grid>path");
|
||||
expect(minorGrid.props()).toHaveProperty("stroke", "rgba(0, 0, 0, 0)");
|
||||
expect(majorGrid.props()).toHaveProperty("stroke", "rgba(0, 0, 0, 0.6)");
|
||||
expect(superiorGrid.props()).toHaveProperty("stroke", "rgba(0, 0, 0, 0.8)");
|
||||
});
|
||||
});
|
||||
|
|
|
@ -5,7 +5,7 @@ import { Color } from "../../../ui/index";
|
|||
import { range } from "lodash";
|
||||
|
||||
export function Grid(props: GridProps) {
|
||||
const { mapTransformProps } = props;
|
||||
const { mapTransformProps, zoomLvl } = props;
|
||||
const { gridSize, xySwap } = mapTransformProps;
|
||||
const gridSizeW = xySwap ? gridSize.y : gridSize.x;
|
||||
const gridSizeH = xySwap ? gridSize.x : gridSize.y;
|
||||
|
@ -13,19 +13,27 @@ export function Grid(props: GridProps) {
|
|||
const arrowEnd = transformXY(25, 25, mapTransformProps);
|
||||
const xLabel = transformXY(15, -10, mapTransformProps);
|
||||
const yLabel = transformXY(-11, 18, mapTransformProps);
|
||||
const minorGridStroke = zoomLvl <= 0.5 ? "rgba(0, 0, 0, 0)" : "rgba(0, 0, 0, 0.15)";
|
||||
const majorGridStroke = zoomLvl <= 0.5 ? "rgba(0, 0, 0, 0.6)" : "rgba(0, 0, 0, 0.3)";
|
||||
const superiorGridStroke = zoomLvl <= 0.5 ? "rgba(0, 0, 0, 0.8)" : "rgba(0, 0, 0, 0.4)";
|
||||
return <g className="drop-area-background" onClick={props.onClick}
|
||||
onMouseDown={props.onMouseDown}>
|
||||
<defs>
|
||||
<pattern id="minor_grid"
|
||||
width={10} height={10} patternUnits="userSpaceOnUse">
|
||||
<path d="M10,0 L0,0 L0,10" strokeWidth={1}
|
||||
fill="none" stroke="rgba(0, 0, 0, 0.15)" />
|
||||
fill="none" stroke={minorGridStroke} />
|
||||
</pattern>
|
||||
|
||||
<pattern id={"major_grid"}
|
||||
width={100} height={100} patternUnits="userSpaceOnUse">
|
||||
<path d="M100,0 L0,0 0,100" strokeWidth={2}
|
||||
fill="none" stroke="rgba(0, 0, 0, 0.15)" />
|
||||
fill="none" stroke={majorGridStroke} />
|
||||
</pattern>
|
||||
|
||||
<pattern id="superior_grid" width={1000} height={1000} patternUnits="userSpaceOnUse">
|
||||
<path d="M1000,0 L0,0 0,1000" strokeWidth={2}
|
||||
fill="none" stroke={superiorGridStroke} />
|
||||
</pattern>
|
||||
|
||||
<marker id="arrow"
|
||||
|
@ -40,6 +48,8 @@ export function Grid(props: GridProps) {
|
|||
width={gridSizeW} height={gridSizeH} fill="url(#minor_grid)" />
|
||||
<rect id="major-grid" transform={transformForQuadrant(mapTransformProps)}
|
||||
width={gridSizeW} height={gridSizeH} fill="url(#major_grid)" />
|
||||
<rect id="superior-grid" transform={transformForQuadrant(mapTransformProps)}
|
||||
width={gridSizeW} height={gridSizeH} fill="url(#superior_grid)" />
|
||||
<rect id="border" width={gridSizeW} height={gridSizeH} fill="none"
|
||||
stroke="rgba(0,0,0,0.3)" strokeWidth={2} />
|
||||
</g>
|
||||
|
|
|
@ -300,7 +300,8 @@ export class GardenMap extends
|
|||
Grid = () => <Grid
|
||||
onClick={this.closePanel()}
|
||||
onMouseDown={this.startDragOnBackground}
|
||||
mapTransformProps={this.mapTransformProps} />
|
||||
mapTransformProps={this.mapTransformProps}
|
||||
zoomLvl={this.props.zoomLvl} />
|
||||
SensorReadingsLayer = () => <SensorReadingsLayer
|
||||
visible={!!this.props.showSensorReadings}
|
||||
sensorReadings={this.props.sensorReadings}
|
||||
|
|
|
@ -110,6 +110,7 @@ export interface MapBackgroundProps {
|
|||
|
||||
export interface GridProps {
|
||||
mapTransformProps: MapTransformProps;
|
||||
zoomLvl: number;
|
||||
onClick(): void;
|
||||
onMouseDown(e: React.MouseEvent<SVGElement>): void;
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@ describe Api::SensorReadingsController do
|
|||
params: { format: :json }
|
||||
|
||||
expect(response.status).to eq(200)
|
||||
expect(json[:created_at]).to eq(json[:read_at])
|
||||
expect(json[:created_at].first(22)).to eq(json[:read_at].first(22))
|
||||
end
|
||||
|
||||
it "makes a sensor reading" do
|
||||
|
@ -52,7 +52,7 @@ describe Api::SensorReadingsController do
|
|||
expect(json[:z]).to eq(2)
|
||||
expect(json[:pin]).to eq(13)
|
||||
expect(json[:mode]).to eq(1)
|
||||
expect(read_at.as_json.first(23)).to eq(json[:read_at].first(23))
|
||||
expect(read_at.as_json.first(22)).to eq(json[:read_at].first(22))
|
||||
expect(before < SensorReading.count).to be_truthy
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in New Issue