CreateColumnPanel.ts 2,0 КБ
Newer Older
avathar's avatar
avathar включено в состав коммита
1
2
// @ts-nocheck

avathar's avatar
avathar включено в состав коммита
3
import { TreeNode } from 'src/types/stores/kanvaso';
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
4
5
import { COLOR_LIGHT, COLOR_PRIMARY, COLOR_DARK } from './Const';
import { DefaultDepth, DragObjectDepth } from './Const';
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
6
import CreateItemsBox from '../cards/CreateItemsBox';
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
7

Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
8
type DialogFunction = (config: any) => any;
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
9
10
11
12
13
type RoundRectangleFunction = (config: any) => any;
type LabelFunction = (config: any) => any;
type TextFunction = (x: number, y: number, text: string, style: any) => any;

type SceneType = {
avathar's avatar
avathar включено в состав коммита
14
  rexUI: {
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
15
    add: {
avathar's avatar
avathar включено в состав коммита
16
17
18
19
20
21
22
23
24
      dialog: DialogFunction;
      roundRectangle: RoundRectangleFunction;
      label: LabelFunction;
    };
  };
  add: {
    text: TextFunction;
  };
};
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
25

avathar's avatar
avathar включено в состав коммита
26
27
28
const CreateColumnPanel = (
  scene: SceneType,
  title: string,
avathar's avatar
avathar включено в состав коммита
29
  cards: TreeNode,
avathar's avatar
avathar включено в состав коммита
30
31
32
33
34
35
36
37
38
) => {
  const panel = scene.rexUI.add
    .dialog({
      width: 120,
      space: { left: 10, right: 10, top: 10, bottom: 10 },
      background: scene.rexUI.add.roundRectangle({
        strokeColor: COLOR_DARK,
      }),
      title: CreateTitle(scene, title),
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
39
      content: CreateItemsBox(scene, cards),
avathar's avatar
avathar включено в состав коммита
40
41
42
      proportion: {
        content: 1,
      },
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
43
44
45
    })
    .setOrigin(0, 0);

avathar's avatar
avathar включено в состав коммита
46
  SetDraggable(panel);
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
47

avathar's avatar
avathar включено в состав коммита
48
  return panel;
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
49
50
51
};

const CreateTitle = (scene: SceneType, text: string) => {
avathar's avatar
avathar включено в состав коммита
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
  return scene.rexUI.add.label({
    background: scene.rexUI.add.roundRectangle({
      color: COLOR_LIGHT,
    }),
    text: scene.add.text(0, 0, text, {
      fontSize: 18,
    }),
    align: 'left',
    space: {
      left: 5,
      right: 5,
      top: 5,
      bottom: 5,
    },
  });
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
67
68
69
};

const SetDraggable = (panel: any) => {
avathar's avatar
avathar включено в состав коммита
70
71
72
73
74
75
76
  panel
    .setDraggable({
      sensor: 'title',
      target: panel,
    })
    .on('sizer.dragstart', OnPanelDragStart, panel)
    .on('sizer.dragend', OnPanelDragEnd, panel);
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
77
78
};

avathar's avatar
avathar включено в состав коммита
79
80
81
const OnPanelDragStart = function (this: any) {
  this.setDepth(DragObjectDepth);
  this.getElement('background').setStrokeStyle(3, 0xff0000);
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
82
83
};

avathar's avatar
avathar включено в состав коммита
84
85
86
const OnPanelDragEnd = function (this: any) {
  this.setDepth(DefaultDepth);
  this.getElement('background').setStrokeStyle(2, COLOR_DARK);
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
87
88
89
};

export default CreateColumnPanel;