Blame view

src/components/notice/index.js 3.09 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
36
37
38
      const onClose = options.onClose || function () {};
      // todo const btn = options.btn || null;
      const duration = (options.duration === 0) ? 0 : options.duration || defaultDuration;
  
833501a4   梁灏   support Notice
39
      name++;
40f8606f   梁灏   add Notice component
40
41
42
43
44
  
      let instance = getNoticeInstance();
  
      let content;
  
03441255   梁灏   optimize Notice s...
45
46
      const with_desc = desc === '' ? '' : ` ${prefixCls}-with-desc`;
  
40f8606f   梁灏   add Notice component
47
48
      if (type == 'normal') {
          content = `
03441255   梁灏   optimize Notice s...
49
              <div class="${prefixCls}-custom-content ${prefixCls}-with-normal${with_desc}">
40f8606f   梁灏   add Notice component
50
51
52
53
54
55
56
                  <div class="${prefixCls}-title">${title}</div>
                  <div class="${prefixCls}-desc">${desc}</div>
              </div>
          `;
      } else {
          const iconType = iconTypes[type];
          content = `
03441255   梁灏   optimize Notice s...
57
              <div class="${prefixCls}-custom-content ${prefixCls}-with-icon ${prefixCls}-with-${type}${with_desc}">
40f8606f   梁灏   add Notice component
58
59
60
61
62
63
64
65
66
67
                  <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>
          `;
      }
  
      instance.notice({
833501a4   梁灏   support Notice
68
          name: noticeKey.toString(),
40f8606f   梁灏   add Notice component
69
          duration: duration,
833501a4   梁灏   support Notice
70
          styles: {},
be0769d4   Rijn   added move up tra...
71
          transitionName: 'move-notice',
40f8606f   梁灏   add Notice component
72
73
          content: content,
          onClose: onClose,
e0bd31a6   Aresn   update Message
74
75
          closable: true,
          type: 'notice'
40f8606f   梁灏   add Notice component
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
      });
  }
  
  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
103
104
105
      close (name) {
          if (name) {
              name = name.toString();
40f8606f   梁灏   add Notice component
106
              if (noticeInstance) {
833501a4   梁灏   support Notice
107
                  noticeInstance.remove(name);
40f8606f   梁灏   add Notice component
108
109
110
111
112
113
114
115
              }
          } else {
              return false;
          }
      },
      destroy () {
          let instance = getNoticeInstance();
          noticeInstance = null;
1c82a9ab   Lawrence Lee   bugfix: notice & ...
116
          instance.destroy('ivu-notice');
40f8606f   梁灏   add Notice component
117
      }
b0893113   jingsam   :art: add eslint
118
  };