Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix update deprecated things #2

Open
wants to merge 14 commits into
base: master
Choose a base branch
from
3 changes: 2 additions & 1 deletion .babelrc
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
{
"presets": ["es2015", "react", "stage-2"]
"presets": ["@babel/react", "@babel/env"],
"plugins": ["@babel/plugin-proposal-class-properties"]
}
5 changes: 3 additions & 2 deletions .eslintignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
lib
example
lib/*.js
example/*.js
src/*.js
8 changes: 4 additions & 4 deletions .eslintrc
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"extends": "gitbook",
"env": {
"mocha": true
}
"extends": "gitbook",
"env": {
"mocha": true
}
}
3 changes: 0 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,6 @@ jspm_packages
# Optional REPL history
.node_repl_history

# Babel dist directory
lib

# Example build
example/bundle.js
example/main.css
Expand Down
2 changes: 2 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
lib/*.js
example/*.js
35 changes: 16 additions & 19 deletions example/main.js
Original file line number Diff line number Diff line change
@@ -1,23 +1,20 @@
const React = require('react');
const ReactDOM = require('react-dom');
const React = require("react");
const ReactDOM = require("react-dom");

const NPSInput = require('../src');
const NPSInput = require("../src");

const Example = React.createClass({
onSubmit({ score }) {
alert('Submitted ' + score);
},
class Example extends React.Component {
onSubmitAll = ({ score, comment }) => {
alert("Submitted " + score + " " + comment);
};

render() {
return (
<div>
<NPSInput onSubmit={this.onSubmit}></NPSInput>
</div>
);
}
});
render() {
return (
<div>
<NPSInput onSubmitAll={this.onSubmitAll} />
</div>
);
}
}

ReactDOM.render(
<Example />,
document.getElementById('example')
);
ReactDOM.render(<Example />, document.getElementById("example"));
197 changes: 197 additions & 0 deletions lib/NPSInput.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,197 @@
// prettier-ignore
"use strict";

var PropTypes = require('prop-types');

var React = require("react");
var classNames = require("classnames");
var NPSScale = require("./NPSScale");

/**
* Promp the current user for its NPM score.
* @param {ReactClass}
*/
class NPSInput extends React.Component {
static displayName = "NPSInput";

static propTypes = {
animated: PropTypes.bool,
onSubmit: PropTypes.func.isRequired,
onSubmitComment: PropTypes.func.isRequired,
onSubmitAll: PropTypes.func.isRequired,
onDismissed: PropTypes.func.isRequired,
children: PropTypes.func
};

static defaultProps = {
animated: true,
onSubmit: function onSubmit() {},
onSubmitComment: function onSubmitComment() {},
onSubmitAll: function onSubmitAll() {},
onDismissed: function onDismissed() {},
children: function children() {
return React.createElement(
"p",
{ className: "NPSInput-Label" },
"Ange ytterligare kommentarer (valfritt):"
);
}
};

state = {
dismissed: false,
score: null,
comment: null,
submitted: false
};

/**
* User clicked on a value.
*/
onSubmit = (score) => {
this.setState({
score: score
});
};

/**
* User clicked on a value.
*/
onSubmitComment = (event) => {
var _state = this.state,
score = _state.score,
comment = _state.comment;

this.submit(score, comment);
event.preventDefault();
};

submit = (score, comment) => {
var onSubmitAll = this.props.onSubmitAll;

this.setState(
{
score: score,
comment: comment,
submitted: true
},
function() {
onSubmitAll({ score: score, comment: comment });
}
);
};

onChangeComment = (event) => {
this.setState({
comment: event.target.value
});
};

/**
* User clicked to dismiss this form.
*/
onDismiss = () => {
var onDismissed = this.props.onDismissed;
var score = this.state.score;

this.setState(
{
dismissed: true
},
function() {
onDismissed({ score: score });
}
);
};

render() {
var _props = this.props,
animated = _props.animated,
children = _props.children;
var _state2 = this.state,
dismissed = _state2.dismissed,
score = _state2.score,
submitted = _state2.submitted;

var message =
"Hur sannolikt är det att du skulle rekommendera tjänsten Mitt Fortum till en vän eller kollega?";

if (dismissed) {
return null;
}

return React.createElement(
"div",
{ className: classNames("NPSInput", { animated: animated }) },
React.createElement(
"button",
{ className: "NPSInput-Close", onClick: this.onDismiss },
"\u2715"
),
submitted
? React.createElement(
"div",
{ className: "NPSInput-Inner" },
React.createElement(
"p",
{ className: "NPSInput-Message" },
"Tack f\xF6r ditt svar!"
)
)
: score !== null
? React.createElement(
"div",
null,
React.createElement(
"div",
{ className: "NPSInput-Inner" },
children({
score: score,
dismiss: this.onDismiss
})
),
React.createElement("label", { className: "NPSComment-Label" }),
React.createElement(
"form",
null,
React.createElement(
"div",
{ className: classNames("NPSComment") },
React.createElement("input", {
id: "comment",
className: "NPSComment-Text",
type: "text",
placeholder: "",
onChange: this.onChangeComment
})
),
React.createElement(
"div",
{ className: classNames("NPSComment") },
React.createElement(
"button",
{
className: "NPSComment-Button",
type: "button",
onClick: this.onSubmitComment
},
"Skicka"
)
)
)
)
: React.createElement(
"div",
{ className: "NPSInput-Inner" },
React.createElement(
"p",
{ className: "NPSInput-Message" },
message
),
React.createElement(NPSScale, { onSubmit: this.onSubmit })
)
);
}
}

module.exports = NPSInput;
108 changes: 108 additions & 0 deletions lib/NPSScale.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
// prettier-ignore
"use strict";

var PropTypes = require('prop-types');

var React = require("react");
var classNames = require("classnames");

var MIN = 0;
var MAX = 10;

/**
* Scale to select NPS value.
* @param {ReactClass}
*/
class NPSScale extends React.Component {
static displayName = "NPSScale";

static propTypes = {
onSubmit: PropTypes.func.isRequired
};

static defaultProps = {
onSubmit: function onSubmit(value) {}
};

state = {
value: null
};

onMouseEnter = (value) => {
this.setState({
value: value
});
};

onMouseLeave = (value) => {
this.setState({
value: null
});
};

onSelect = (value) => {
var onSubmit = this.props.onSubmit;

onSubmit(value);
};

render() {
var _this = this;

var value = this.state.value;

return React.createElement(
"div",
{ className: "NPSScale" },
React.createElement(
"div",
{ className: "NPSScale-Values" },
range(MIN, MAX).map(function(i) {
return React.createElement(
"div",
{
key: i,
className: classNames("NPSScale-Value", {
selected: value !== null && value >= i
}),
onMouseEnter: function onMouseEnter() {
return _this.onMouseEnter(i);
},
onMouseLeave: function onMouseLeave() {
return _this.onMouseLeave(i);
},
onClick: function onClick() {
return _this.onSelect(i);
}
},
React.createElement("div", null, i)
);
})
),
React.createElement(
"div",
{ className: "NPSScale-Legend" },
React.createElement(
"div",
{ className: "NPSScale-Label left" },
"Inte sannolikt"
),
React.createElement(
"div",
{ className: "NPSScale-Label right" },
"Mycket sannolikt"
)
)
);
}
}

function range(start, end) {
return Array(end - start + 1)
.fill()
.map(function(_, idx) {
return start + idx;
});
}

module.exports = NPSScale;
3 changes: 3 additions & 0 deletions lib/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
"use strict";

module.exports = require('./NPSInput');
Loading