UNPKG

toasted

Version:

Simple and Easy Toast Notifications for React

73 lines (54 loc) 3.98 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _reactDom = require('react-dom'); var _reactDom2 = _interopRequireDefault(_reactDom); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var style = document.createElement('style'); //You can customize the toast CSS here var css = '@keyframes bottom {\n 0% {\n opacity: 0;\n transform: translateY(0px);\n }\n 20% {\n opacity: 1;\n transform: translateY(-25px);\n }\n 80% {\n opacity: 1;\n transform: translateY(-25px);\n }\n 100% {\n opacity: 0;\n transform: translateY(0px);\n }\n}\n\n@keyframes top {\n 0% {\n opacity: 0;\n transform: translateY(0px);\n }\n 20% {\n opacity: 1;\n transform: translateY(25px);\n }\n 80% {\n opacity: 1;\n transform: translateY(25px);\n }\n 100% {\n opacity: 0;\n transform: translateY(0px);\n }\n}\n\n.onTop--true{\n transform: rotate(180deg);\n}\n\n.onTop--true li{\n transform: rotate(-180deg);\n}\n\n.bottom {\n bottom: 0px;\n}\n\n.top {\n top: 0px;\n}\n\n.center {\n left: 25%;\n width: 50%;\n}\n\n.left{\n left: 10px;\n width: 225px;\n}\n\n.right{\n right: 10px;\n width: 225px;\n}\n\n.fullWidth{\n width: 100%;\n left: 0;\n}\n\n#toasted{\n display: flex;\n text-align: center;\n position: absolute;\n z-index: 9999;\n opacity: 1;\n flex-direction: column;\n list-style: none;\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n}\n\n.toasted {\n padding: 15px;\n color: white;\n font-weight: bold;\n border-radius: 5px;\n -webkit-box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.75);\n -moz-box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.75);\n box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.75);\n margin: 10px;\n}\n\n.success{\n background-color: rgba(30, 156, 4, 0.84);\n}\n\n.info{\n background-color: rgba(4, 102, 156, 0.84);\n}\n\n.warning{\n background-color: rgba(238, 114, 0, 0.84);\n}\n\n.error{\n background-color: rgba(158, 40, 40, 0.84);\n}'; style.type = 'text/css'; style.appendChild(document.createTextNode(css)); //Toasted Function - You can change the default values for the toast here //classname can be info, warning, success and error OR you can create another style in the css above //position should respect the order VERTICAL first HORIZONTAL second. IE: top left or bottom right //timeout can be any number in milliseconds. 5000 is 5 seconds //if true, OnTop displays new toats above the last one var Toasted = function Toasted(children) { var type = arguments.length <= 1 || arguments[1] === undefined ? 'info' : arguments[1]; var position = arguments.length <= 2 || arguments[2] === undefined ? 'bottom center' : arguments[2]; var timeout = arguments.length <= 3 || arguments[3] === undefined ? 5000 : arguments[3]; var onTop = arguments.length <= 4 || arguments[4] === undefined ? false : arguments[4]; var duration = timeout / 1000; var elementExists = document.getElementById('toasted'); var ul = document.createElement('ul'); ul.id = 'toasted'; ul.className = position + ' onTop--' + onTop; var node = document.createElement('li'); var Tstr = function Tstr() { return _react2.default.createElement( 'div', { className: 'toasted ' + type, style: { animation: position.split(' ')[0] + ' ' + duration + 's' } }, children ); }; if (elementExists) { elementExists.appendChild(node); _reactDom2.default.render(_react2.default.createElement(Tstr, null), node); } else { document.getElementsByTagName('head')[0].appendChild(style); document.body.appendChild(ul); ul.appendChild(node); _reactDom2.default.render(_react2.default.createElement(Tstr, null), node); } setTimeout(function () { document.getElementById('toasted').removeChild(node); }, timeout - 50); }; exports.default = Toasted;