slack-block-builder
Version:
Maintainable code for interactive Slack messages, modals, home tabs, and workflow steps. A must-have for the Slack Block Kit framework.
52 lines (51 loc) • 2.41 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.PaginatorUIComponent = void 0;
const blocks_1 = require("../blocks");
const elements_1 = require("../elements");
const constants_1 = require("../internal/constants");
const lib_1 = require("../internal/lib");
const defaultPageCountText = ({ page, totalPages }) => `Page ${page} of ${totalPages}`;
class PaginatorUIComponent {
constructor(params) {
this.items = params.items;
this.paginator = params.paginator;
this.nextButtonText = params.nextButtonText || constants_1.ComponentUIText.Next;
this.previousButtonText = params.previousButtonText || constants_1.ComponentUIText.Previous;
this.pageCountTextFunction = params.pageCountTextFunction || defaultPageCountText;
this.actionIdFunction = params.actionIdFunction;
this.builderFunction = params.builderFunction;
}
getBlocks() {
const blocksForEach = [];
for (let i = 0; i < this.paginator.getTotalItems() && i < this.items.length; i += 1) {
blocksForEach.push(this.builderFunction({ item: this.items[i] }).flat());
}
const unpruned = this.paginator.getTotalPages() > 1
? [
...blocksForEach.flat(),
blocks_1.Blocks.Context().elements(this.pageCountTextFunction({
page: this.paginator.getPage(),
totalPages: this.paginator.getTotalPages(),
})),
blocks_1.Blocks.Divider(),
blocks_1.Blocks.Actions()
.elements(elements_1.Elements.Button({
text: this.previousButtonText,
actionId: this.actionIdFunction({
buttonId: constants_1.PaginatorButtonId.Previous,
...this.paginator.getPreviousPageState(),
}),
}), elements_1.Elements.Button({
text: this.nextButtonText,
actionId: this.actionIdFunction({
buttonId: constants_1.PaginatorButtonId.Next,
...this.paginator.getNextPageState(),
}),
})),
]
: blocksForEach.flat();
return lib_1.Builder.pruneUndefinedFromArray(unpruned);
}
}
exports.PaginatorUIComponent = PaginatorUIComponent;