From 92cfdde10df836ab372378d827d11fe346315505 Mon Sep 17 00:00:00 2001 From: Duy Nguyen Date: Tue, 28 Feb 2017 17:42:59 +0700 Subject: [PATCH] Fix empty ref, adding interval for progress --- .babelrc | 5 +++++ README.md | 6 ++++++ dev/app.jsx | 4 ++-- lib/main.js | 48 +++++++++++++++++++++++------------------------- package.json | 9 ++++++++- src/main.js | 23 ++++++++++++++++------- 6 files changed, 60 insertions(+), 35 deletions(-) create mode 100644 .babelrc diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..720e06c --- /dev/null +++ b/.babelrc @@ -0,0 +1,5 @@ +// .babelrc +{ + "presets": ["es2015"], + "plugins": ["transform-react-jsx", "babel-plugin-add-module-exports"] +} \ No newline at end of file diff --git a/README.md b/README.md index d89fa96..365dc09 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,12 @@ ## Usage +Accepted props: + +`refreshTimeout`: The milisecond you want to refresh your progress, it will stop and start again. + +`className`: Your custom class name + Include `react-progress-2/main.css` to your project. With [SystemJS CSS plugin](https://github.com/systemjs/plugin-css) you simply need to write this line: ```js import "react-progress-2/main.css!" diff --git a/dev/app.jsx b/dev/app.jsx index af25b91..d4bed9b 100644 --- a/dev/app.jsx +++ b/dev/app.jsx @@ -5,8 +5,8 @@ import Progress from '../src/main' class Application extends React.Component { render() { return ( -
- +
+
diff --git a/lib/main.js b/lib/main.js index 8606d5b..de24ace 100644 --- a/lib/main.js +++ b/lib/main.js @@ -1,20 +1,19 @@ 'use strict'; -Object.defineProperty(exports, '__esModule', { +Object.defineProperty(exports, "__esModule", { value: true }); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - var _react = require('react'); var _react2 = _interopRequireDefault(_react); -var Component = _react2['default'].createClass({ - displayName: 'Component', +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +var Component = _react2.default.createClass({ count: 0, runningTimerId: null, + refreshTimerId: null, hidingTimerId: null, getInitialState: function getInitialState() { @@ -22,28 +21,26 @@ var Component = _react2['default'].createClass({ state: 'hidden' }; }, - getDefaultProps: function getDefaultProps() { return { - cls: '' + className: '', + refreshTimeout: 0 }; }, - render: function render() { - var cls = 'loader-60devs ' + this.props.cls; + var className = 'loader-60devs ' + this.props.className; - return _react2['default'].createElement( + return _react2.default.createElement( 'div', - { className: cls, 'data-state': this.state.state, ref: 'element' }, - _react2['default'].createElement('div', { className: 'loader-60devs-progress' }) + { className: className, 'data-state': this.state.state, ref: 'element' }, + _react2.default.createElement('div', { className: 'loader-60devs-progress' }) ); }, - show: function show() { if (++this.count > 1) return; clearTimeout(this.hidingTimerId); - + clearTimeout(this.refreshTimerId); var element = this.refs.element; var progressEl = element.querySelector('.loader-60devs-progress'); @@ -55,38 +52,39 @@ var Component = _react2['default'].createClass({ element.setAttribute('data-state', ''); element.offsetHeight; element.setAttribute('data-state', 'running'); + var that = this; + if (this.props.refreshTimeout > 0) { + this.refreshTimerId = setTimeout(function () { + that.hide(); + that.show(); + }, this.props.refreshTimeout); + } }, - hide: function hide() { if (--this.count > 0) return; - + clearTimeout(this.refreshTimerId); this.refs.element.setAttribute('data-state', 'finishing'); this.hidingTimerId = setTimeout(this.toHiddenState, 500); }, - hideAll: function hideAll() { this.count = 1; this.hide(); }, - toHiddenState: function toHiddenState() { - this.refs.element.setAttribute('data-state', 'hidden'); + this.refs.element && this.refs.element.setAttribute('data-state', 'hidden'); }, - componentWillMount: function componentWillMount() { Component.instance = this; }, - componentWillUnmount: function componentWillUnmount() { delete Component.instance; }, - isVisible: function isVisible() { - return this.refs.element.getAttribute('data-state') != 'hidden'; + return this.refs.element && this.refs.element.getAttribute('data-state') != 'hidden'; } }); -exports['default'] = { +exports.default = { Component: Component, show: function show() { Component.instance.show(); @@ -101,4 +99,4 @@ exports['default'] = { return Component.instance.isVisible(); } }; -module.exports = exports['default']; +module.exports = exports['default']; \ No newline at end of file diff --git a/package.json b/package.json index 984fd6a..4d11473 100644 --- a/package.json +++ b/package.json @@ -3,11 +3,18 @@ "version": "4.2.1", "description": "React progress 2", "scripts": { + "build": "babel src -d lib --ignore __tests__", "test": "echo \"Error: no test specified\" && exit 1" }, "main": "lib/main.js", "dependencies": {}, - "devDependencies": {}, + "devDependencies": { + "babel-cli": "^6.18.0", + "babel-plugin-add-module-exports": "^0.2.1", + "babel-preset-latest": "^6.16.0", + "babel-register": "^6.18.0", + "babel-plugin-transform-react-jsx": "^6.18.0" + }, "repository": { "type": "git", "url": "git+https://github.com/milworm/react-progress-2.git" diff --git a/src/main.js b/src/main.js index 49cc1d1..ead5d14 100644 --- a/src/main.js +++ b/src/main.js @@ -3,6 +3,7 @@ import React from 'react' let Component = React.createClass({ count: 0, runningTimerId: null, + refreshTimerId: null, hidingTimerId: null, getInitialState() { @@ -13,15 +14,16 @@ let Component = React.createClass({ getDefaultProps() { return { - cls: '' + className: '', + refreshTimeout: 0, } }, render() { - let cls = `loader-60devs ${this.props.cls}` + let className = `loader-60devs ${this.props.className}` return ( -
+
) @@ -32,7 +34,7 @@ let Component = React.createClass({ return clearTimeout(this.hidingTimerId) - + clearTimeout(this.refreshTimerId) var {element} = this.refs let progressEl = element.querySelector('.loader-60devs-progress') @@ -43,12 +45,19 @@ let Component = React.createClass({ element.setAttribute('data-state', '') element.offsetHeight element.setAttribute('data-state', 'running') + var that = this; + if (this.props.refreshTimeout > 0) { + this.refreshTimerId = setTimeout(function() { + that.hide(); + that.show(); + }, this.props.refreshTimeout); + } }, hide() { if(-- this.count > 0) return - + clearTimeout(this.refreshTimerId) this.refs.element.setAttribute('data-state', 'finishing') this.hidingTimerId = setTimeout(this.toHiddenState, 500) }, @@ -59,7 +68,7 @@ let Component = React.createClass({ }, toHiddenState() { - this.refs.element.setAttribute('data-state', 'hidden') + this.refs.element && this.refs.element.setAttribute('data-state', 'hidden') }, componentWillMount() { @@ -71,7 +80,7 @@ let Component = React.createClass({ }, isVisible() { - return this.refs.element.getAttribute('data-state') != 'hidden' + return this.refs.element && this.refs.element.getAttribute('data-state') != 'hidden' } })