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 _apemanReactMixinPure = require('apeman-react-mixin-pure');
|
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: [_apemanReactMixinPure.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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LEtBQVg7QUFJQSxRQUFJLE1BQU0sU0FBVixFQUFxQjtBQUNuQixZQUFNLFNBQU4sQ0FBZ0IsRUFBRSxXQUFXLE9BQWIsRUFBc0IsTUFBTSxNQUFNLElBQWxDLEVBQWhCO0FBQ0Q7QUFDRixHQW5KK0I7QUFxSmhDLG9CQXJKZ0MsOEJBcUpaLENBckpZLEVBcUpUO0FBQ3JCLFFBQU0sSUFBSSxJQUFWO0FBQ0EsUUFBSSxPQUFPLEVBQUUsTUFBRixDQUFTLE9BQVQsQ0FBa0IsTUFBbEIsQ0FBWDtBQUNBLE1BQUUsZ0JBQUYsQ0FBbUIsSUFBbkI7QUFDRCxHQXpKK0I7Ozs7OztBQThKaEMsWUFBVSxLQTlKc0I7QUErSmhDLGNBQVksSUEvSm9CO0FBZ0toQyxrQkFoS2dDLDhCQWdLWjtBQUNsQixRQUFNLElBQUksSUFBVjtBQURrQixRQUVaLEtBRlksR0FFSyxDQUZMLENBRVosS0FGWTtBQUFBLFFBRUwsS0FGSyxHQUVLLENBRkwsQ0FFTCxLQUZLOztBQUdsQixXQUFPLENBQUMsTUFBTSxLQUFOLElBQWUsRUFBaEIsRUFBb0IsS0FBcEIsQ0FBMEIsUUFBUSxVQUFsQyxFQUNKLE1BREksQ0FDRyxzQkFBWSxXQUFaLEVBREgsRUFFSixHQUZJLENBRUEsVUFBQyxJQUFELEVBQU8sQ0FBUDtBQUFBLGFBQ0QseURBQWEsZ0JBQWMsSUFBZCxTQUFzQixDQUFuQztBQUNhLGNBQU0sSUFEbkI7QUFFYSxjQUFNLE1BQU0sSUFGekI7QUFHYSxlQUFPLEVBQUU7QUFIdEIsUUFEQztBQUFBLEtBRkEsQ0FBUDtBQVdEO0FBOUsrQixDQUFsQixDQUFoQjs7a0JBaUxlLE8iLCJmaWxlIjoiYXBfdG9hc3QuanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL29rdW5pc2hpbmlzaGkvUHJvamVjdHMvYXBlbWFuLXByb2plY3RzL2FwZW1hbi1yZWFjdC10b2FzdC9saWIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRvYXN0IGNvbXBvbmVudFxuICogQGNsYXNzIEFwVG9hc3RcbiAqL1xuXG4ndXNlIHN0cmljdCdcblxuaW1wb3J0IFJlYWN0LCB7UHJvcFR5cGVzIGFzIHR5cGVzfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7QXBQdXJlTWl4aW59IGZyb20gJ2FwZW1hbi1yZWFjdC1taXhpbi1wdXJlJ1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCBhcnJheWZpbHRlciBmcm9tICdhcnJheWZpbHRlcidcbmltcG9ydCBBcFRvYXN0SXRlbSBmcm9tICcuL2FwX3RvYXN0X2l0ZW0nXG5cbi8qKiBAbGVuZHMgQXBUb2FzdCAqL1xuY29uc3QgQXBUb2FzdCA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBTcGVjc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHByb3BUeXBlczoge1xuICAgIG1lc3NhZ2U6IHR5cGVzLnN0cmluZyxcbiAgICBkdXJhdGlvbjogdHlwZXMubnVtYmVyLFxuICAgIGljb246IHR5cGVzLnN0cmluZyxcbiAgICBuYW1lOiB0eXBlcy5zdHJpbmcsXG4gICAgb25EaXNtaXNzOiB0eXBlcy5mdW5jXG4gIH0sXG5cbiAgbWl4aW5zOiBbXG4gICAgQXBQdXJlTWl4aW5cbiAgXSxcblxuICBzdGF0aWNzOiB7XG4gICAgaXRlbUpvaW5lcjogJ19fX18nXG4gIH0sXG5cbiAgZ2V0SW5pdGlhbFN0YXRlICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6ICcnXG4gICAgfVxuICB9LFxuXG4gIGdldERlZmF1bHRQcm9wcyAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICBkdXJhdGlvbjogMjAwMCxcbiAgICAgIGljb246IG51bGwsXG4gICAgICBuYW1lOiBudWxsLFxuICAgICAgb25EaXNtaXNzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIHJlbmRlciAoKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBsZXQgeyBzdGF0ZSwgcHJvcHMgfSA9IHNcblxuICAgIGxldCB2YWxpZCA9IHN0YXRlLml0ZW1zLmxlbmd0aFxuICAgIGlmICghdmFsaWQpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17IGNsYXNzbmFtZXMoJ2FwLXRvYXN0JywgcHJvcHMuY2xhc3NOYW1lLCB7fSkgfVxuICAgICAgICAgICBzdHlsZT17IE9iamVjdC5hc3NpZ24oe30sIHByb3BzLnN0eWxlKSB9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFwLXRvYXN0LWlubmVyXCI+XG4gICAgICAgICAge3MuX3JlbmRlclRvYXN0SXRlbSgpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfSxcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBMaWZlY3ljbGVcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBjb21wb25lbnRXaWxsTW91bnQgKCkge1xuICAgIGNvbnN0IHMgPSB0aGlzXG4gIH0sXG5cbiAgY29tcG9uZW50RGlkTW91bnQgKCkge1xuICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgbGV0IHsgcHJvcHMgfSA9IHNcbiAgICBzLnN0YXJ0VGlja2luZygpXG4gICAgcy5wdXNoVG9hc3RJdGVtKHByb3BzLm1lc3NhZ2UpXG4gIH0sXG5cbiAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyAobmV4dFByb3BzKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBzLnB1c2hUb2FzdEl0ZW0obmV4dFByb3BzLm1lc3NhZ2UpXG4gIH0sXG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQgKCkge1xuICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgcy5zdG9wVGlja2luZygpXG4gIH0sXG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEN1c3RvbVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS1cblxuICBzdGFydFRpY2tpbmcgKCkge1xuICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgY2xlYXJUaW1lb3V0KHMuX3RpY2tUaW1lcilcbiAgICBzLl90aWNraW5nID0gdHJ1ZVxuICAgIHMuZG9UaWNrKClcbiAgfSxcblxuICBzdG9wVGlja2luZyAoKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBjbGVhclRpbWVvdXQocy5fdGlja1RpbWVyKVxuICAgIHMuX3RpY2tpbmcgPSBmYWxzZVxuICB9LFxuXG4gIGRvVGljayAoKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBsZXQgeyBwcm9wcyB9ID0gc1xuICAgIGlmICghcy5fdGlja2luZykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHMuX3RpY2tUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgcy5zaGlmdFRvYXN0SXRlbSgpXG4gICAgICBzLmRvVGljaygpXG4gICAgfSwgcHJvcHMuZHVyYXRpb24pXG4gIH0sXG5cbiAgcHVzaFRvYXN0SXRlbSAobWVzc2FnZSkge1xuICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgaWYgKCFtZXNzYWdlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgbGV0IGl0ZW1zID0gKHMuc3RhdGUuaXRlbXMgfHwgJycpLnNwbGl0KEFwVG9hc3QuaXRlbUpvaW5lcilcbiAgICBsZXQgZHVwbGljYXRlID0gaXRlbXNbIGl0ZW1zLmxlbmd0aCAtIDEgXSA9PT0gbWVzc2FnZVxuICAgIGlmIChkdXBsaWNhdGUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zOiBpdGVtcy5jb25jYXQobWVzc2FnZSkuam9pbihBcFRvYXN0Lml0ZW1Kb2luZXIpXG4gICAgfSlcbiAgfSxcblxuICBzaGlmdFRvYXN0SXRlbSAoKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBsZXQgeyBwcm9wcyB9ID0gc1xuICAgIGxldCBpdGVtcyA9IChzLnN0YXRlLml0ZW1zIHx8ICcnKS5zcGxpdChBcFRvYXN0Lml0ZW1Kb2luZXIpXG4gICAgaWYgKCFpdGVtcy5sZW5ndGgpIHtcbiAgICAgIHMuc2V0U3RhdGUoeyBpdGVtczogbnVsbCB9KVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHMuZGlzbWlzc1RvYXN0SXRlbShpdGVtc1sgMCBdKVxuICB9LFxuXG4gIGRpc21pc3NUb2FzdEl0ZW0gKG1lc3NhZ2UpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIGxldCB7IHByb3BzIH0gPSBzXG4gICAgbGV0IGl0ZW1zID0gKHMuc3RhdGUuaXRlbXMgfHwgJycpLnNwbGl0KEFwVG9hc3QuaXRlbUpvaW5lcilcbiAgICBzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zOiBpdGVtcy5maWx0ZXIoKGZpbHRlcmluZykgPT4gZmlsdGVyaW5nICE9PSBtZXNzYWdlKVxuICAgICAgICAuam9pbihBcFRvYXN0Lml0ZW1Kb2luZXIpXG4gICAgfSlcbiAgICBpZiAocHJvcHMub25EaXNtaXNzKSB7XG4gICAgICBwcm9wcy5vbkRpc21pc3MoeyBkaXNtaXNzZWQ6IG1lc3NhZ2UsIG5hbWU6IHByb3BzLm5hbWUgfSlcbiAgICB9XG4gIH0sXG5cbiAgaGFuZGxlVG9hc3RJdGVtVGFwIChlKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBsZXQgdGV4dCA9IGUudGFyZ2V0LmRhdGFzZXRbICd0ZXh0JyBdXG4gICAgcy5kaXNtaXNzVG9hc3RJdGVtKHRleHQpXG4gIH0sXG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIFByaXZhdGVcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG4gIF90aWNraW5nOiBmYWxzZSxcbiAgX3RpY2tUaW1lcjogbnVsbCxcbiAgX3JlbmRlclRvYXN0SXRlbSAoKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBsZXQgeyBzdGF0ZSwgcHJvcHMgfSA9IHNcbiAgICByZXR1cm4gKHN0YXRlLml0ZW1zIHx8ICcnKS5zcGxpdChBcFRvYXN0Lml0ZW1Kb2luZXIpXG4gICAgICAuZmlsdGVyKGFycmF5ZmlsdGVyLmVtcHR5UmVqZWN0KCkpXG4gICAgICAubWFwKCh0ZXh0LCBpKSA9PiAoXG4gICAgICAgICAgPEFwVG9hc3RJdGVtIGtleT17YHRvYXN0LSR7dGV4dH0tJHtpfWB9XG4gICAgICAgICAgICAgICAgICAgICAgIHRleHQ9e3RleHR9XG4gICAgICAgICAgICAgICAgICAgICAgIGljb249e3Byb3BzLmljb259XG4gICAgICAgICAgICAgICAgICAgICAgIG9uVGFwPXtzLmhhbmRsZVRvYXN0SXRlbVRhcH1cbiAgICAgICAgICA+XG4gICAgICAgICAgPC9BcFRvYXN0SXRlbT5cbiAgICAgICAgKVxuICAgICAgKVxuICB9XG59KVxuXG5leHBvcnQgZGVmYXVsdCBBcFRvYXN0XG4iXX0= |
\ | No newline at end of file |