Thank you for a great starter. It's great to have a starter gatsby with mobx. But I'm having some issues regarding to mobx.
import React from 'react';
import { Provider } from 'mobx-react';
import ShopModel from './src/models/ShopModel';
// eslint-disable-next-line react/display-name,react/prop-types
export default ({ element }) => (
<Provider shopStore={ShopModel}>{element}</Provider>
);
import React from 'react';
import { inject, observer } from 'mobx-react';
import Counter from '../../components/Counter';
import Cage from '../../components/Cage';
// @observer
@inject('shopStore')
@observer
class PositioningSite extends React.Component {
constructor(props) {
super(props);
this.state = {
activeDrags: 0,
};
}
onStart = () => {
this.setState(prevState => ({ activeDrags: prevState.activeDrags + 1 }));
};
onStop = () => {
this.setState(prevState => ({ activeDrags: prevState.activeDrags - 1 }));
};
render() {
return (
<>
<section className="section is-large">
<div className="container">
<div id="drag-and-drop">
{this.props.shopStore.cagesActive.map(cage => {
return (
<Cage
key={cage.title}
className="box"
title={cage.title}
onStart={this.onStart}
onStop={this.onStop}
/>
);
})}
</div>
<div>
<h1>Place your box above</h1>
<h3>
<strong>Box {this.props.shopStore.compassDirection}</strong>
</h3>
<Counter
title="Compass"
counter={this.props.shopStore.compassDirection}
onIncrement={() =>
this.props.shopStore.IncrementCompassDirection()
}
onDecrement={() =>
this.props.shopStore.DecrementCompassDirection()
}
/>
<h3>
<strong>Cage</strong>
</h3>
<Counter
title="Active"
counter={this.props.shopStore.cagesActive.length}
onIncrement={() => this.props.shopStore.AddActiveCage()}
onDecrement={() => this.props.shopStore.RemoveLastActiveCage()}
/>
<Counter
title="Inactive"
counter={this.props.shopStore.cagesInactive.length}
onIncrement={() => this.props.shopStore.AddInactiveCage()}
onDecrement={() =>
this.props.shopStore.RemoveLastInactiveCage()
}
/>
</div>
</div>
</section>
</>
);
}
}
export default PositioningSite;
import { observable, action, decorate } from 'mobx';
class ShopModel {
compassDirection = -20;
cagesActive = [{ title: '1' }, { title: '2' }];
cagesInactive = [{ title: '103' }];
AddActiveCage() {
this.cagesActive.push({ title: `${this.cagesActive.length + 1}` });
}
RemoveLastActiveCage() {
if (this.cagesActive.length > 0) {
const removedCage = this.cagesActive.pop();
return removedCage !== undefined;
}
return false;
}
AddInactiveCage() {
this.cagesInactive.push({ title: `${this.cagesInactive.length + 1}` });
}
RemoveLastInactiveCage() {
if (this.cagesInactive.length > 0) {
const removedCage = this.cagesInactive.pop();
return removedCage !== undefined;
}
return false;
}
DecrementCompassDirection() {
this.compassDirection -= 1;
}
IncrementCompassDirection() {
this.compassDirection += 1;
}
}
decorate(ShopModel, {
compassDirection: observable,
cagesActive: observable,
cagesInactive: observable,
AddActiveCage: action,
RemoveLastActiveCage: action,
AddInactiveCage: action,
RemoveLastInactiveCage: action,
DecrementCompassDirection: action,
IncrementCompassDirection: action,
});
const ShopStore = new ShopModel();
export default ShopStore;