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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
| import React, { useRef, useEffect } from "react";
| import { Stencil } from '@antv/x6-plugin-stencil';
|
| export const StencilComponent = (({ graphRef, isReady, stencilContainer }) => {
|
| useEffect(() => {
| if (isReady) {
| const graph = graphRef.current;
|
| const stencil = new Stencil({
| title: 'Stencil',
| target: graphRef.current,
| search(cell, keyword) {
| return cell.shape.indexOf(keyword) !== -1
| },
| placeholder: 'Search by shape name',
| notFoundText: 'Not Found',
| collapsable: true,
| stencilGraphHeight: 0,
| groups: [
| {
| name: 'group1',
| title: 'Group(Collapsable)',
| },
| {
| name: 'group2',
| title: 'Group',
| collapsable: false,
| },
| ],
| })
|
| stencilContainer.current.appendChild(stencil.container)
|
| const commonAttrs = {
| body: {
| fill: '#fff',
| stroke: '#8f8f8f',
| strokeWidth: 1,
| },
| }
|
| const n1 = graph.createNode({
| shape: 'rect',
| x: 40,
| y: 40,
| width: 80,
| height: 40,
| label: 'rect',
| attrs: commonAttrs,
| })
|
| const n2 = graph.createNode({
| shape: 'circle',
| x: 180,
| y: 40,
| width: 40,
| height: 40,
| label: 'circle',
| attrs: commonAttrs,
| })
|
| const n3 = graph.createNode({
| shape: 'ellipse',
| x: 280,
| y: 40,
| width: 80,
| height: 40,
| label: 'ellipse',
| attrs: commonAttrs,
| })
|
| const n4 = graph.createNode({
| shape: 'path',
| x: 420,
| y: 40,
| width: 40,
| height: 40,
| // https://www.svgrepo.com/svg/13653/like
| path: 'M24.85,10.126c2.018-4.783,6.628-8.125,11.99-8.125c7.223,0,12.425,6.179,13.079,13.543c0,0,0.353,1.828-0.424,5.119c-1.058,4.482-3.545,8.464-6.898,11.503L24.85,48L7.402,32.165c-3.353-3.038-5.84-7.021-6.898-11.503c-0.777-3.291-0.424-5.119-0.424-5.119C0.734,8.179,5.936,2,13.159,2C18.522,2,22.832,5.343,24.85,10.126z',
| attrs: commonAttrs,
| label: 'path123',
| })
|
| stencil.load([n1, n2], 'group1')
| stencil.load([n3, n4], 'group2')
| }
|
| })
|
| return <div className="app-stencil" ref={stencilContainer} />
| })
|
|