Blame view

src/Cascader/Cascader.js 1.44 KB
3a3ecabe   Imshann   init
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
  /**
   * 级联
   *
   * @Author: Shann
   * @LastEditors: Shann
   * @Date: 2021-08-04 09:48:49
   * @LastEditTime: 2021-08-04 11:00:19
   * @Copyright: Copyright 2021-2021, all rights reserved. Essa.cn
   */
  class Cascader {
      props = {
          options: Array,
      };
  
      state = {
          options: [],
          menus: [],
      };
  
      constructor() {
          this.state.options = this.flatten(this.props.options);
      }
  
      flatten(array, level = 1) {
          let elements = [];
          array.forEach((element) => {
              element.level = level;
              elements.push(element);
              if (
                  typeof element.children !== "undefined" &&
                  element.children.length > 0
              ) {
                  elements = elements.concat(
                      this.flatten(element.children, level + 1)
                  );
              }
          });
          return elements;
      }
  
      handleFocus() {
          this.state.menus.push(this.props.options)
      }
  
      handleBlur() {
          this.state.menus = [];
      }
  
      handleExpand(value) {
          let current = this.state.options.filter(
              (item) => item.value === value
          )[0];
          if (this.state.menus.length > current.level) {
              this.state.menus.splice(current.level);
          }
          if (
              typeof current.children !== "undefined" &&
              current.children.length > 0
          ) {
              this.state.menus.push(current.children);
          }
      }
  }