sources/new-label-added-to-card/new-label-added-to-card.mjs
import common from "../common/common-webhook.mjs"; import sampleEmit from "./test-event.mjs"; export default { ...common, key: "trello-new-label-added-to-card", name: "New Label Added To Card (Instant)", description: "Emit new event for each label added to a card.", version: "0.1.3", type: "source", props: { ...common.props, board: { propDefinition: [ common.props.app, "board", ], }, list: { propDefinition: [ common.props.app, "lists", (c) => ({ board: c.board, }), ], type: "string", label: "List", description: "If specified, events will only be emitted when a label is added to a card in the specified lists", }, cards: { propDefinition: [ common.props.app, "cards", (c) => ({ board: c.board, list: c.list, }), ], description: "If specified, events will only be emitted when a label is added to one of the specified cards", }, }, hooks: { ...common.hooks, async deploy() { if (this.cards?.length) { await this.emitLabelsFromCardIds(this.cards); return; } if (this.list) { const cards = await this.app.getCardsInList({ listId: this.list, }); await this.emitLabelsFromCards(cards); return; } const cards = await this.app.getCards({ boardId: this.board, }); await this.emitLabelsFromCards(cards); }, }, methods: { ...common.methods, async emitLabelsFromCards(cards) { for (const card of cards) { const labelIds = card.idLabels; for (const labelId of labelIds) { const label = await this.app.getLabel({ labelId, }); let summary = label.color; summary += label.name ? ` - ${label.name}` : ""; summary += `; added to ${card.name}`; this.$emit(card, { id: `${labelId}${card.id}`, summary, ts: Date.now(), }); } } }, async emitLabelsFromCardIds(cardIds) { const cards = []; for (const cardId of cardIds) { const card = await this.app.getCard({ cardId, }); cards.push(card); } await this.emitLabelsFromCards(cards); }, _getLabelName() { return this.db.get("labelName"); }, _setLabelName(labelName) { this.db.set("labelName", labelName); }, _getLabelColor() { return this.db.get("labelColor"); }, _setLabelColor(labelColor) { this.db.set("labelColor", labelColor); }, isCorrectEventType({ type }) { return type === "addLabelToCard"; }, getResult({ data }) { this._setLabelName(data?.label?.name); this._setLabelColor(data?.label?.color); return this.app.getCard({ cardId: data?.card?.id, }); }, isRelevant({ result: card }) { return ( (!this.board || this.board === card.idBoard) && (!this.list || this.list === card.idList) && (!this.cards?.length || this.cards.includes(card.id)) ); }, generateMeta({ id, name, }) { const labelName = this._getLabelName(); const labelColor = this._getLabelColor(); let summary = labelColor; summary += labelName ? ` - ${labelName}` : ""; summary += `; added to ${name}`; return { id, summary, ts: Date.now(), }; }, emitEvent(card, labelName, labelColor) { const meta = this.generateMeta(card, labelName, labelColor); this.$emit(card, meta); }, }, sampleEmit, };