Register
Login
Resources
Docs Blog Datasets Glossary Case Studies Tutorials & Webinars
Product
Data Engine LLMs Platform Enterprise
Pricing Explore
Connect to our Discord channel

CarouselPagination.js 3.9 KB

You have to be logged in to leave a comment. Sign In
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
  1. var builder = require('botbuilder');
  2. var defaultSettings = {
  3. showMoreTitle: 'title_show_more',
  4. showMoreValue: 'show_more',
  5. selectTemplate: 'select',
  6. pageSize: 10,
  7. unknownOption: 'unknown_option'
  8. };
  9. module.exports = {
  10. create: function (getPageFunc, getItemFunc, itemToCardFunc, settings) {
  11. // parameter validation
  12. settings = Object.assign({}, defaultSettings, settings);
  13. if (typeof getPageFunc !== 'function') {
  14. throw new Error('getPageFunc must be a function');
  15. }
  16. if (typeof getItemFunc !== 'function') {
  17. throw new Error('getItemFunc must be a function');
  18. }
  19. if (typeof itemToCardFunc !== 'function') {
  20. throw new Error('itemToCardFunc must be a function');
  21. }
  22. // map item info into HeroCard
  23. var asCard = function (session, cardInfo) {
  24. var card = new builder.HeroCard()
  25. .title(cardInfo.title)
  26. .buttons([
  27. new builder.CardAction()
  28. .type('imBack')
  29. .value(session.gettext(settings.selectTemplate) + cardInfo.title)
  30. .title(session.gettext(cardInfo.buttonLabel))
  31. ]);
  32. if (cardInfo.subtitle) {
  33. card = card.subtitle(cardInfo.subtitle);
  34. }
  35. if (cardInfo.imageUrl) {
  36. card = card.images([new builder.CardImage().url(cardInfo.imageUrl).alt(cardInfo.title)]);
  37. }
  38. return card;
  39. };
  40. // return dialog handler funciton
  41. return function (session, args, next) {
  42. var pageNumber = session.dialogData.pageNumber || 1;
  43. var input = session.message.text;
  44. var selectPrefix = session.gettext(settings.selectTemplate);
  45. if (input && input.toLowerCase() === session.gettext(settings.showMoreValue).toLowerCase()) {
  46. // next page
  47. pageNumber++;
  48. } else if (input && isSelection(input, selectPrefix)) {
  49. // Validate selection
  50. var selectedName = input.substring(selectPrefix.length);
  51. getItemFunc(selectedName).then(function (selectedItem) {
  52. if (!selectedItem) {
  53. return session.send(settings.unknownOption);
  54. }
  55. // reset page
  56. session.dialogData.pageNumber = null;
  57. // return selection to dialog stack
  58. return next({ selected: selectedItem });
  59. });
  60. return;
  61. }
  62. // retrieve from service and send items
  63. getPageFunc(pageNumber, settings.pageSize).then(function (pageResult) {
  64. // save current page number
  65. session.dialogData.pageNumber = pageNumber;
  66. // items carousel
  67. var cards = pageResult.items
  68. .map(itemToCardFunc)
  69. .map(function (cardData) { return asCard(session, cardData); });
  70. var message = new builder.Message(session)
  71. .attachmentLayout(builder.AttachmentLayout.carousel)
  72. .attachments(cards);
  73. session.send(message);
  74. // more items link
  75. if (pageResult.totalCount > pageNumber * settings.pageSize) {
  76. var moreCard = new builder.HeroCard(session)
  77. .title(settings.showMoreTitle)
  78. .buttons([
  79. builder.CardAction.imBack(session, session.gettext(settings.showMoreValue), settings.showMoreValue)
  80. ]);
  81. session.send(new builder.Message(session).addAttachment(moreCard));
  82. }
  83. });
  84. };
  85. }
  86. };
  87. function isSelection(input, selectPrefix) {
  88. return input.toLowerCase().indexOf(selectPrefix.toLowerCase()) === 0;
  89. }
Tip!

Press p or to see the previous file or, n or to see the next file

Comments

Loading...