123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
- return c > 3 && r && Object.defineProperty(target, key, r), r;
- };
- import { SuperComponent, wxComponent } from '../common/src/index';
- import config from '../common/config';
- import props from './props';
- import { getRect } from '../common/utils';
- const { prefix } = config;
- const name = `${prefix}-message`;
- const SHOW_DURATION = 500;
- let Message = class Message extends SuperComponent {
- constructor() {
- super(...arguments);
- this.externalClasses = ['t-class', 't-class-content', 't-class-icon', 't-class-action', 't-class-close-btn'];
- this.options = {
- styleIsolation: 'apply-shared',
- multipleSlots: true,
- };
- this.properties = Object.assign({}, props);
- this.data = {
- prefix,
- classPrefix: name,
- visible: false,
- loop: -1,
- animation: [],
- showAnimation: [],
- iconName: '',
- wrapTop: -92,
- };
- this.observers = {
- marquee(val) {
- if (JSON.stringify(val) === '{}') {
- this.setData({
- marquee: {
- speed: 50,
- loop: -1,
- delay: 5000,
- },
- });
- }
- },
- };
- this.closeTimeoutContext = 0;
- this.nextAnimationContext = 0;
- this.resetAnimation = wx.createAnimation({
- duration: 0,
- timingFunction: 'linear',
- });
- this.showAnimation = wx.createAnimation({ duration: SHOW_DURATION, timingFunction: 'ease' }).translateY(0).step().export();
- this.hideAnimation = wx
- .createAnimation({ duration: SHOW_DURATION, timingFunction: 'ease' })
- .translateY(this.data.wrapTop)
- .step()
- .export();
- }
- ready() {
- this.memoInitalData();
- this.setIcon();
- }
- memoInitalData() {
- this.initalData = Object.assign(Object.assign({}, this.properties), this.data);
- }
- resetData(cb) {
- this.setData(Object.assign({}, this.initalData), cb);
- }
- detached() {
- this.clearMessageAnimation();
- }
- setIcon(icon = this.properties.icon) {
- if (!icon) {
- this.setData({ iconName: '' });
- return;
- }
- if (typeof icon === 'string') {
- this.setData({
- iconName: `${icon}`,
- });
- return;
- }
- if (icon) {
- let nextValue = 'notification';
- const { theme } = this.properties;
- const themeMessage = {
- info: 'error-circle',
- success: 'check-circle',
- warning: 'error-circle',
- error: 'error-circle',
- };
- nextValue = themeMessage[theme];
- this.setData({ iconName: nextValue });
- }
- }
- checkAnimation() {
- if (!this.properties.marquee) {
- return;
- }
- const speeding = this.properties.marquee.speed;
- if (this.data.loop > 0) {
- this.data.loop -= 1;
- }
- else if (this.data.loop === 0) {
- this.setData({ animation: this.resetAnimation.translateX(0).step().export() });
- return;
- }
- if (this.nextAnimationContext) {
- this.clearMessageAnimation();
- }
- const warpID = `#${name}__text-wrap`;
- const nodeID = `#${name}__text`;
- Promise.all([getRect(this, nodeID), getRect(this, warpID)]).then(([nodeRect, wrapRect]) => {
- this.setData({
- animation: this.resetAnimation.translateX(wrapRect.width).step().export(),
- }, () => {
- const durationTime = ((nodeRect.width + wrapRect.width) / speeding) * 1000;
- const nextAnimation = wx
- .createAnimation({
- duration: durationTime,
- })
- .translateX(-nodeRect.width)
- .step()
- .export();
- setTimeout(() => {
- this.nextAnimationContext = setTimeout(this.checkAnimation.bind(this), durationTime);
- this.setData({ animation: nextAnimation });
- }, 20);
- });
- });
- }
- clearMessageAnimation() {
- clearTimeout(this.nextAnimationContext);
- this.nextAnimationContext = 0;
- }
- show() {
- const { duration, icon, marquee } = this.properties;
- this.setData({ visible: true, loop: marquee.loop });
- this.reset();
- this.setIcon(icon);
- this.checkAnimation();
- if (duration && duration > 0) {
- this.closeTimeoutContext = setTimeout(() => {
- this.hide();
- this.triggerEvent('durationEnd', { self: this });
- }, duration);
- }
- const wrapID = `#${name}`;
- getRect(this, wrapID).then((wrapRect) => {
- this.setData({ wrapTop: -wrapRect.height }, () => {
- this.setData({ showAnimation: this.showAnimation });
- });
- });
- }
- hide() {
- this.reset();
- this.setData({ showAnimation: this.hideAnimation });
- setTimeout(() => {
- this.setData({ visible: false, animation: [] });
- }, SHOW_DURATION);
- }
- reset() {
- if (this.nextAnimationContext) {
- this.clearMessageAnimation();
- }
- clearTimeout(this.closeTimeoutContext);
- this.closeTimeoutContext = 0;
- }
- handleClose() {
- this.hide();
- this.triggerEvent('closeBtnClick');
- }
- handleBtnClick() {
- this.triggerEvent('actionBtnClick', { self: this });
- }
- };
- Message = __decorate([
- wxComponent()
- ], Message);
- export default Message;
|