1 | /**
|
2 | * Toast component
|
3 | * @class ApToast
|
4 | */
|
5 |
|
6 | ;
|
7 |
|
8 | Object.defineProperty(exports, "__esModule", {
|
9 | value: true
|
10 | });
|
11 |
|
12 | var _react = require('react');
|
13 |
|
14 | var _react2 = _interopRequireDefault(_react);
|
15 |
|
16 | var _apemanReactMixins = require('apeman-react-mixins');
|
17 |
|
18 | var _classnames = require('classnames');
|
19 |
|
20 | var _classnames2 = _interopRequireDefault(_classnames);
|
21 |
|
22 | var _arrayfilter = require('arrayfilter');
|
23 |
|
24 | var _arrayfilter2 = _interopRequireDefault(_arrayfilter);
|
25 |
|
26 | var _ap_toast_item = require('./ap_toast_item');
|
27 |
|
28 | var _ap_toast_item2 = _interopRequireDefault(_ap_toast_item);
|
29 |
|
30 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
31 |
|
32 | /** @lends ApToast */
|
33 | var ApToast = _react2.default.createClass({
|
34 | displayName: 'ApToast',
|
35 |
|
36 |
|
37 | // --------------------
|
38 | // Specs
|
39 | // --------------------
|
40 |
|
41 | propTypes: {
|
42 | message: _react.PropTypes.string,
|
43 | duration: _react.PropTypes.number,
|
44 | icon: _react.PropTypes.string,
|
45 | name: _react.PropTypes.string,
|
46 | onDismiss: _react.PropTypes.func
|
47 | },
|
48 |
|
49 | mixins: [_apemanReactMixins.ApPureMixin],
|
50 |
|
51 | statics: {
|
52 | itemJoiner: '____'
|
53 | },
|
54 |
|
55 | getInitialState: function getInitialState() {
|
56 | return {
|
57 | items: ''
|
58 | };
|
59 | },
|
60 | getDefaultProps: function getDefaultProps() {
|
61 | return {
|
62 | message: null,
|
63 | duration: 2000,
|
64 | icon: null,
|
65 | name: null,
|
66 | onDismiss: null
|
67 | };
|
68 | },
|
69 | render: function render() {
|
70 | var s = this;
|
71 | var state = s.state;
|
72 | var props = s.props;
|
73 |
|
74 |
|
75 | var valid = state.items.length;
|
76 | if (!valid) {
|
77 | return null;
|
78 | }
|
79 | return _react2.default.createElement(
|
80 | 'div',
|
81 | { className: (0, _classnames2.default)('ap-toast', props.className, {}),
|
82 | style: Object.assign({}, props.style) },
|
83 | _react2.default.createElement(
|
84 | 'div',
|
85 | { className: 'ap-toast-inner' },
|
86 | s._renderToastItem()
|
87 | )
|
88 | );
|
89 | },
|
90 |
|
91 |
|
92 | // --------------------
|
93 | // Lifecycle
|
94 | // --------------------
|
95 |
|
96 | componentWillMount: function componentWillMount() {
|
97 | var s = this;
|
98 | },
|
99 | componentDidMount: function componentDidMount() {
|
100 | var s = this;
|
101 | var props = s.props;
|
102 |
|
103 | s.startTicking();
|
104 | s.pushToastItem(props.message);
|
105 | },
|
106 | componentWillReceiveProps: function componentWillReceiveProps(nextProps) {
|
107 | var s = this;
|
108 | s.pushToastItem(nextProps.message);
|
109 | },
|
110 | componentWillUnmount: function componentWillUnmount() {
|
111 | var s = this;
|
112 | s.stopTicking();
|
113 | },
|
114 |
|
115 |
|
116 | // ------------------
|
117 | // Custom
|
118 | // ------------------
|
119 |
|
120 | startTicking: function startTicking() {
|
121 | var s = this;
|
122 | clearTimeout(s._tickTimer);
|
123 | s._ticking = true;
|
124 | s.doTick();
|
125 | },
|
126 | stopTicking: function stopTicking() {
|
127 | var s = this;
|
128 | clearTimeout(s._tickTimer);
|
129 | s._ticking = false;
|
130 | },
|
131 | doTick: function doTick() {
|
132 | var s = this;
|
133 | var props = s.props;
|
134 |
|
135 | if (!s._ticking) {
|
136 | return;
|
137 | }
|
138 | s._tickTimer = setTimeout(function () {
|
139 | s.shiftToastItem();
|
140 | s.doTick();
|
141 | }, props.duration);
|
142 | },
|
143 | pushToastItem: function pushToastItem(message) {
|
144 | var s = this;
|
145 | if (!message) {
|
146 | return;
|
147 | }
|
148 | var items = (s.state.items || '').split(ApToast.itemJoiner);
|
149 | var duplicate = items[items.length - 1] === message;
|
150 | if (duplicate) {
|
151 | return;
|
152 | }
|
153 | s.setState({
|
154 | items: items.concat(message).join(ApToast.itemJoiner)
|
155 | });
|
156 | },
|
157 | shiftToastItem: function shiftToastItem() {
|
158 | var s = this;
|
159 | var props = s.props;
|
160 |
|
161 | var items = (s.state.items || '').split(ApToast.itemJoiner);
|
162 | if (!items.length) {
|
163 | s.setState({ items: null });
|
164 | return;
|
165 | }
|
166 | s.dismissToastItem(items[0]);
|
167 | },
|
168 | dismissToastItem: function dismissToastItem(message) {
|
169 | var s = this;
|
170 | var props = s.props;
|
171 |
|
172 | var items = (s.state.items || '').split(ApToast.itemJoiner);
|
173 | s.setState({
|
174 | items: items.filter(function (filtering) {
|
175 | return filtering !== message;
|
176 | }).join(ApToast.itemJoiner)
|
177 | });
|
178 | if (props.onDismiss) {
|
179 | props.onDismiss({ dismissed: message, name: props.name });
|
180 | }
|
181 | },
|
182 | handleToastItemTap: function handleToastItemTap(e) {
|
183 | var s = this;
|
184 | var text = e.target.dataset['text'];
|
185 | s.dismissToastItem(text);
|
186 | },
|
187 |
|
188 |
|
189 | // ------------------
|
190 | // Private
|
191 | // ------------------
|
192 | _ticking: false,
|
193 | _tickTimer: null,
|
194 | _renderToastItem: function _renderToastItem() {
|
195 | var s = this;
|
196 | var state = s.state;
|
197 | var props = s.props;
|
198 |
|
199 | return (state.items || '').split(ApToast.itemJoiner).filter(_arrayfilter2.default.emptyReject()).map(function (text, i) {
|
200 | return _react2.default.createElement(_ap_toast_item2.default, { key: 'toast-' + text + '-' + i,
|
201 | text: text,
|
202 | icon: props.icon,
|
203 | onTap: s.handleToastItemTap
|
204 | });
|
205 | });
|
206 | }
|
207 | });
|
208 |
|
209 | exports.default = ApToast;
|
210 | //# sourceMappingURL=data:application/json;base64,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LEtBQVg7QUFJQSxRQUFJLE1BQU0sU0FBVixFQUFxQjtBQUNuQixZQUFNLFNBQU4sQ0FBZ0IsRUFBRSxXQUFXLE9BQWIsRUFBc0IsTUFBTSxNQUFNLElBQWxDLEVBQWhCO0FBQ0Q7QUFDRixHQW5KK0I7QUFxSmhDLG9CQXJKZ0MsOEJBcUpaLENBckpZLEVBcUpUO0FBQ3JCLFFBQU0sSUFBSSxJQUFWO0FBQ0EsUUFBSSxPQUFPLEVBQUUsTUFBRixDQUFTLE9BQVQsQ0FBa0IsTUFBbEIsQ0FBWDtBQUNBLE1BQUUsZ0JBQUYsQ0FBbUIsSUFBbkI7QUFDRCxHQXpKK0I7Ozs7OztBQThKaEMsWUFBVSxLQTlKc0I7QUErSmhDLGNBQVksSUEvSm9CO0FBZ0toQyxrQkFoS2dDLDhCQWdLWjtBQUNsQixRQUFNLElBQUksSUFBVjtBQURrQixRQUVaLEtBRlksR0FFSyxDQUZMLENBRVosS0FGWTtBQUFBLFFBRUwsS0FGSyxHQUVLLENBRkwsQ0FFTCxLQUZLOztBQUdsQixXQUFPLENBQUMsTUFBTSxLQUFOLElBQWUsRUFBaEIsRUFBb0IsS0FBcEIsQ0FBMEIsUUFBUSxVQUFsQyxFQUNKLE1BREksQ0FDRyxzQkFBWSxXQUFaLEVBREgsRUFFSixHQUZJLENBRUEsVUFBQyxJQUFELEVBQU8sQ0FBUDtBQUFBLGFBQ0QseURBQWEsZ0JBQWMsSUFBZCxTQUFzQixDQUFuQztBQUNhLGNBQU0sSUFEbkI7QUFFYSxjQUFNLE1BQU0sSUFGekI7QUFHYSxlQUFPLEVBQUU7QUFIdEIsUUFEQztBQUFBLEtBRkEsQ0FBUDtBQVdEO0FBOUsrQixDQUFsQixDQUFoQjs7a0JBaUxlLE8iLCJmaWxlIjoiYXBfdG9hc3QuanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL29rdW5pc2hpbmlzaGkvUHJvamVjdHMvYXBlbWFuLXByb2plY3RzL2FwZW1hbi1yZWFjdC10b2FzdC9saWIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRvYXN0IGNvbXBvbmVudFxuICogQGNsYXNzIEFwVG9hc3RcbiAqL1xuXG4ndXNlIHN0cmljdCdcblxuaW1wb3J0IFJlYWN0LCB7UHJvcFR5cGVzIGFzIHR5cGVzfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7QXBQdXJlTWl4aW59IGZyb20gJ2FwZW1hbi1yZWFjdC1taXhpbnMnXG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IGFycmF5ZmlsdGVyIGZyb20gJ2FycmF5ZmlsdGVyJ1xuaW1wb3J0IEFwVG9hc3RJdGVtIGZyb20gJy4vYXBfdG9hc3RfaXRlbSdcblxuLyoqIEBsZW5kcyBBcFRvYXN0ICovXG5jb25zdCBBcFRvYXN0ID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIFNwZWNzXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHJvcFR5cGVzOiB7XG4gICAgbWVzc2FnZTogdHlwZXMuc3RyaW5nLFxuICAgIGR1cmF0aW9uOiB0eXBlcy5udW1iZXIsXG4gICAgaWNvbjogdHlwZXMuc3RyaW5nLFxuICAgIG5hbWU6IHR5cGVzLnN0cmluZyxcbiAgICBvbkRpc21pc3M6IHR5cGVzLmZ1bmNcbiAgfSxcblxuICBtaXhpbnM6IFtcbiAgICBBcFB1cmVNaXhpblxuICBdLFxuXG4gIHN0YXRpY3M6IHtcbiAgICBpdGVtSm9pbmVyOiAnX19fXydcbiAgfSxcblxuICBnZXRJbml0aWFsU3RhdGUgKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpdGVtczogJydcbiAgICB9XG4gIH0sXG5cbiAgZ2V0RGVmYXVsdFByb3BzICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgIGR1cmF0aW9uOiAyMDAwLFxuICAgICAgaWNvbjogbnVsbCxcbiAgICAgIG5hbWU6IG51bGwsXG4gICAgICBvbkRpc21pc3M6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgcmVuZGVyICgpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIGxldCB7IHN0YXRlLCBwcm9wcyB9ID0gc1xuXG4gICAgbGV0IHZhbGlkID0gc3RhdGUuaXRlbXMubGVuZ3RoXG4gICAgaWYgKCF2YWxpZCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXsgY2xhc3NuYW1lcygnYXAtdG9hc3QnLCBwcm9wcy5jbGFzc05hbWUsIHt9KSB9XG4gICAgICAgICAgIHN0eWxlPXsgT2JqZWN0LmFzc2lnbih7fSwgcHJvcHMuc3R5bGUpIH0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYXAtdG9hc3QtaW5uZXJcIj5cbiAgICAgICAgICB7cy5fcmVuZGVyVG9hc3RJdGVtKCl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKVxuICB9LFxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIExpZmVjeWNsZVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIGNvbXBvbmVudFdpbGxNb3VudCAoKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgfSxcblxuICBjb21wb25lbnREaWRNb3VudCAoKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBsZXQgeyBwcm9wcyB9ID0gc1xuICAgIHMuc3RhcnRUaWNraW5nKClcbiAgICBzLnB1c2hUb2FzdEl0ZW0ocHJvcHMubWVzc2FnZSlcbiAgfSxcblxuICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIChuZXh0UHJvcHMpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIHMucHVzaFRvYXN0SXRlbShuZXh0UHJvcHMubWVzc2FnZSlcbiAgfSxcblxuICBjb21wb25lbnRXaWxsVW5tb3VudCAoKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBzLnN0b3BUaWNraW5nKClcbiAgfSxcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gQ3VzdG9tXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHN0YXJ0VGlja2luZyAoKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBjbGVhclRpbWVvdXQocy5fdGlja1RpbWVyKVxuICAgIHMuX3RpY2tpbmcgPSB0cnVlXG4gICAgcy5kb1RpY2soKVxuICB9LFxuXG4gIHN0b3BUaWNraW5nICgpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIGNsZWFyVGltZW91dChzLl90aWNrVGltZXIpXG4gICAgcy5fdGlja2luZyA9IGZhbHNlXG4gIH0sXG5cbiAgZG9UaWNrICgpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIGxldCB7IHByb3BzIH0gPSBzXG4gICAgaWYgKCFzLl90aWNraW5nKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgcy5fdGlja1RpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzLnNoaWZ0VG9hc3RJdGVtKClcbiAgICAgIHMuZG9UaWNrKClcbiAgICB9LCBwcm9wcy5kdXJhdGlvbilcbiAgfSxcblxuICBwdXNoVG9hc3RJdGVtIChtZXNzYWdlKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBpZiAoIW1lc3NhZ2UpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBsZXQgaXRlbXMgPSAocy5zdGF0ZS5pdGVtcyB8fCAnJykuc3BsaXQoQXBUb2FzdC5pdGVtSm9pbmVyKVxuICAgIGxldCBkdXBsaWNhdGUgPSBpdGVtc1sgaXRlbXMubGVuZ3RoIC0gMSBdID09PSBtZXNzYWdlXG4gICAgaWYgKGR1cGxpY2F0ZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXM6IGl0ZW1zLmNvbmNhdChtZXNzYWdlKS5qb2luKEFwVG9hc3QuaXRlbUpvaW5lcilcbiAgICB9KVxuICB9LFxuXG4gIHNoaWZ0VG9hc3RJdGVtICgpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIGxldCB7IHByb3BzIH0gPSBzXG4gICAgbGV0IGl0ZW1zID0gKHMuc3RhdGUuaXRlbXMgfHwgJycpLnNwbGl0KEFwVG9hc3QuaXRlbUpvaW5lcilcbiAgICBpZiAoIWl0ZW1zLmxlbmd0aCkge1xuICAgICAgcy5zZXRTdGF0ZSh7IGl0ZW1zOiBudWxsIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgcy5kaXNtaXNzVG9hc3RJdGVtKGl0ZW1zWyAwIF0pXG4gIH0sXG5cbiAgZGlzbWlzc1RvYXN0SXRlbSAobWVzc2FnZSkge1xuICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgbGV0IHsgcHJvcHMgfSA9IHNcbiAgICBsZXQgaXRlbXMgPSAocy5zdGF0ZS5pdGVtcyB8fCAnJykuc3BsaXQoQXBUb2FzdC5pdGVtSm9pbmVyKVxuICAgIHMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXM6IGl0ZW1zLmZpbHRlcigoZmlsdGVyaW5nKSA9PiBmaWx0ZXJpbmcgIT09IG1lc3NhZ2UpXG4gICAgICAgIC5qb2luKEFwVG9hc3QuaXRlbUpvaW5lcilcbiAgICB9KVxuICAgIGlmIChwcm9wcy5vbkRpc21pc3MpIHtcbiAgICAgIHByb3BzLm9uRGlzbWlzcyh7IGRpc21pc3NlZDogbWVzc2FnZSwgbmFtZTogcHJvcHMubmFtZSB9KVxuICAgIH1cbiAgfSxcblxuICBoYW5kbGVUb2FzdEl0ZW1UYXAgKGUpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIGxldCB0ZXh0ID0gZS50YXJnZXQuZGF0YXNldFsgJ3RleHQnIF1cbiAgICBzLmRpc21pc3NUb2FzdEl0ZW0odGV4dClcbiAgfSxcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gUHJpdmF0ZVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS1cbiAgX3RpY2tpbmc6IGZhbHNlLFxuICBfdGlja1RpbWVyOiBudWxsLFxuICBfcmVuZGVyVG9hc3RJdGVtICgpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIGxldCB7IHN0YXRlLCBwcm9wcyB9ID0gc1xuICAgIHJldHVybiAoc3RhdGUuaXRlbXMgfHwgJycpLnNwbGl0KEFwVG9hc3QuaXRlbUpvaW5lcilcbiAgICAgIC5maWx0ZXIoYXJyYXlmaWx0ZXIuZW1wdHlSZWplY3QoKSlcbiAgICAgIC5tYXAoKHRleHQsIGkpID0+IChcbiAgICAgICAgICA8QXBUb2FzdEl0ZW0ga2V5PXtgdG9hc3QtJHt0ZXh0fS0ke2l9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgdGV4dD17dGV4dH1cbiAgICAgICAgICAgICAgICAgICAgICAgaWNvbj17cHJvcHMuaWNvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgb25UYXA9e3MuaGFuZGxlVG9hc3RJdGVtVGFwfVxuICAgICAgICAgID5cbiAgICAgICAgICA8L0FwVG9hc3RJdGVtPlxuICAgICAgICApXG4gICAgICApXG4gIH1cbn0pXG5cbmV4cG9ydCBkZWZhdWx0IEFwVG9hc3RcbiJdfQ== |
\ | No newline at end of file |