UNPKG

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
"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;