/
VkCard.ts
113 lines (110 loc) · 3.94 KB
/
VkCard.ts
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import {TemplateCardTypes} from './TemplateCardTypes';
import {ImageTokens} from '../../../models/ImageTokens';
import {Buttons, IVkButton} from '../../button';
export interface IVkCardElement {
/**
* Заголовок
*/
title: string;
/**
* Описание
*/
description: string;
/**
* Ид изображения
*/
photo_id: string;
/**
* Кнопки
*/
buttons?: IVkButton[];
/**
* Действие, происходящее при нажатии на элемент карточки
*/
action?: {
type: string;
}
}
export interface IVkCard {
/**
* Тип карточки
*/
type: string;
/**
* Элементы карточки
*/
elements: IVkCardElement[]
}
/**
* Класс отвечающий за отображение карточки в ВКонтакте.
* @class VkCard
*/
export class VkCard extends TemplateCardTypes {
/**
* Получение карточки для отображения пользователю.
*
* @param {boolean} isOne True, если в любом случае отобразить 1 элемент карточки
* @return {Promise<IVkCard | string[]>}
* @api
*/
public async getCard(isOne: boolean): Promise<IVkCard | string[]> {
const object = [];
const countImage = this.images.length;
if (countImage) {
if (countImage === 1 || isOne) {
if (!this.images[0].imageToken) {
if (this.images[0].imageDir) {
const mImage = new ImageTokens();
mImage.type = ImageTokens.T_VK;
mImage.path = this.images[0].imageDir;
this.images[0].imageToken = await mImage.getToken();
}
}
if (this.images[0].imageToken) {
object.push(this.images[0].imageToken);
}
} else {
const elements = [];
for (let i = 0; i < this.images.length; i++) {
const image = this.images[i];
if (!image.imageToken) {
if (image.imageDir) {
const mImage = new ImageTokens();
mImage.type = ImageTokens.T_VK;
mImage.path = image.imageDir;
image.imageToken = await mImage.getToken();
}
}
if (image.imageToken) {
if (this.isUsedGallery) {
object.push(image.imageToken);
} else {
const element: IVkCardElement = {
title: image.title,
description: image.desc,
photo_id: image.imageToken.replace('photo', '')
};
const button = image.button.getButtons(Buttons.T_VK_BUTTONS);
/**
* У карточки в любом случае должна быть хоть одна кнопка.
* Максимальное количество кнопок 3
*/
if (button.one_time) {
element.buttons = button.buttons.splice(0, 3);
element.action = {type: 'open_photo'};
elements.push(element);
}
}
}
}
if (elements.length) {
return {
type: 'carousel',
elements
};
}
}
}
return object;
}
}