Blame view

src/components/notice/index.js 3.32 KB
40f8606f   梁灏   add Notice component
1
2
3
4
5
6
7
8
9
  import Notification from '../base/notification';
  
  const prefixCls = 'ivu-notice';
  const iconPrefixCls = 'ivu-icon';
  const prefixKey = 'ivu_notice_key_';
  
  let top = 24;
  let defaultDuration = 4.5;
  let noticeInstance;
833501a4   梁灏   support Notice
10
  let name = 1;
40f8606f   梁灏   add Notice component
11
12
13
14
15
16
17
18
19
20
21
  
  const iconTypes = {
      'info': 'information-circled',
      'success': 'checkmark-circled',
      'warning': 'android-alert',
      'error': 'close-circled'
  };
  
  function getNoticeInstance () {
      noticeInstance = noticeInstance || Notification.newInstance({
          prefixCls: prefixCls,
833501a4   梁灏   support Notice
22
          styles: {
40f8606f   梁灏   add Notice component
23
24
25
26
27
28
29
30
31
32
33
              top: `${top}px`,
              right: 0
          }
      });
  
      return noticeInstance;
  }
  
  function notice (type, options) {
      const title = options.title || '';
      const desc = options.desc || '';
833501a4   梁灏   support Notice
34
      const noticeKey = options.name || `${prefixKey}${name}`;
40f8606f   梁灏   add Notice component
35
      const onClose = options.onClose || function () {};
b24be35a   zhigang.li   make Message and ...
36
      const render = options.render;
40f8606f   梁灏   add Notice component
37
38
39
      // todo const btn = options.btn || null;
      const duration = (options.duration === 0) ? 0 : options.duration || defaultDuration;
  
833501a4   梁灏   support Notice
40
      name++;
40f8606f   梁灏   add Notice component
41
42
43
44
45
  
      let instance = getNoticeInstance();
  
      let content;
  
b24be35a   zhigang.li   make Message and ...
46
47
      let withIcon;
  
efc65a34   zhigang.li   fixed bug of noti...
48
      const with_desc = (options.render && !title) ? '' : (desc || options.render) ? ` ${prefixCls}-with-desc` : '';
03441255   梁灏   optimize Notice s...
49
  
40f8606f   梁灏   add Notice component
50
      if (type == 'normal') {
b24be35a   zhigang.li   make Message and ...
51
          withIcon = false;
40f8606f   梁灏   add Notice component
52
          content = `
03441255   梁灏   optimize Notice s...
53
              <div class="${prefixCls}-custom-content ${prefixCls}-with-normal${with_desc}">
40f8606f   梁灏   add Notice component
54
55
56
57
58
59
                  <div class="${prefixCls}-title">${title}</div>
                  <div class="${prefixCls}-desc">${desc}</div>
              </div>
          `;
      } else {
          const iconType = iconTypes[type];
b24be35a   zhigang.li   make Message and ...
60
          withIcon = true;
40f8606f   梁灏   add Notice component
61
          content = `
03441255   梁灏   optimize Notice s...
62
              <div class="${prefixCls}-custom-content ${prefixCls}-with-icon ${prefixCls}-with-${type}${with_desc}">
40f8606f   梁灏   add Notice component
63
64
65
66
67
68
69
70
                  <span class="${prefixCls}-icon ${prefixCls}-icon-${type}">
                      <i class="${iconPrefixCls} ${iconPrefixCls}-${iconType}"></i>
                  </span>
                  <div class="${prefixCls}-title">${title}</div>
                  <div class="${prefixCls}-desc">${desc}</div>
              </div>
          `;
      }
40f8606f   梁灏   add Notice component
71
      instance.notice({
833501a4   梁灏   support Notice
72
          name: noticeKey.toString(),
40f8606f   梁灏   add Notice component
73
          duration: duration,
833501a4   梁灏   support Notice
74
          styles: {},
be0769d4   Rijn   added move up tra...
75
          transitionName: 'move-notice',
40f8606f   梁灏   add Notice component
76
          content: content,
b24be35a   zhigang.li   make Message and ...
77
78
          withIcon: withIcon,
          render: render,
3f7a5f1a   zhigang.li   udpate notice
79
          hasTitle: !!title,
40f8606f   梁灏   add Notice component
80
          onClose: onClose,
e0bd31a6   Aresn   update Message
81
82
          closable: true,
          type: 'notice'
40f8606f   梁灏   add Notice component
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
      });
  }
  
  export default {
      open (options) {
          return notice('normal', options);
      },
      info (options) {
          return notice('info', options);
      },
      success (options) {
          return notice('success', options);
      },
      warning (options) {
          return notice('warning', options);
      },
      error (options) {
          return notice('error', options);
      },
      config (options) {
          if (options.top) {
              top = options.top;
          }
          if (options.duration || options.duration === 0) {
              defaultDuration = options.duration;
          }
      },
833501a4   梁灏   support Notice
110
111
112
      close (name) {
          if (name) {
              name = name.toString();
40f8606f   梁灏   add Notice component
113
              if (noticeInstance) {
833501a4   梁灏   support Notice
114
                  noticeInstance.remove(name);
40f8606f   梁灏   add Notice component
115
116
117
118
119
120
121
122
              }
          } else {
              return false;
          }
      },
      destroy () {
          let instance = getNoticeInstance();
          noticeInstance = null;
1c82a9ab   Lawrence Lee   bugfix: notice & ...
123
          instance.destroy('ivu-notice');
40f8606f   梁灏   add Notice component
124
      }
b0893113   jingsam   :art: add eslint
125
  };