kanban / webapp /src /components /viewHeader /viewHeaderActionsMenu.tsx
Leon4gr45's picture
Upload folder using huggingface_hub
13555f3 verified
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import React from 'react'
import {useIntl, IntlShape} from 'react-intl'
import {CsvExporter} from '../../csvExporter'
import {Archiver} from '../../archiver'
import {Board} from '../../blocks/board'
import {BoardView} from '../../blocks/boardView'
import {Card} from '../../blocks/card'
import IconButton from '../../widgets/buttons/iconButton'
import OptionsIcon from '../../widgets/icons/options'
import Menu from '../../widgets/menu'
import MenuWrapper from '../../widgets/menuWrapper'
import {Utils} from '../../utils'
import ModalWrapper from '../modalWrapper'
import {sendFlashMessage} from '../flashMessages'
type Props = {
board: Board
activeView: BoardView
cards: Card[]
}
// import {mutator} from '../../mutator'
// import {CardFilter} from '../../cardFilter'
// import {BlockIcons} from '../../blockIcons'
// async function testAddCards(board: Board, activeView: BoardView, startCount: number, count: number) {
// let optionIndex = 0
// mutator.performAsUndoGroup(async () => {
// for (let i = 0; i < count; i++) {
// const card = new Card()
// card.parentId = board.id
// card.boardId = board.boardId
// card.fields.properties = CardFilter.propertiesThatMeetFilterGroup(activeView.fields.filter, board.cardProperties)
// card.title = `Test Card ${startCount + i + 1}`
// card.fields.icon = BlockIcons.shared.randomIcon()
// const groupByProperty = board.cardProperties.find((o) => o.id === activeView.fields.groupById)
// if (groupByProperty && groupByProperty.options.length > 0) {
// // Cycle through options
// const option = groupByProperty.options[optionIndex]
// optionIndex = (optionIndex + 1) % groupByProperty.options.length
// card.fields.properties[groupByProperty.id] = option.id
// }
// mutator.insertBlock(card, 'test add card')
// }
// })
// }
// async function testDistributeCards(boardTree: BoardTree) {
// mutator.performAsUndoGroup(async () => {
// let optionIndex = 0
// for (const card of boardTree.cards) {
// if (boardTree.groupByProperty && boardTree.groupByProperty.options.length > 0) {
// // Cycle through options
// const option = boardTree.groupByProperty.options[optionIndex]
// optionIndex = (optionIndex + 1) % boardTree.groupByProperty.options.length
// const newCard = new Card(card)
// if (newCard.properties[boardTree.groupByProperty.id] !== option.id) {
// newCard.properties[boardTree.groupByProperty.id] = option.id
// mutator.updateBlock(newCard, card, 'test distribute cards')
// }
// }
// }
// })
// }
// async function testRandomizeIcons(boardTree: BoardTree) {
// mutator.performAsUndoGroup(async () => {
// for (const card of boardTree.cards) {
// mutator.changeIcon(card.id, card.fields.icon, BlockIcons.shared.randomIcon(), 'randomize icon')
// }
// })
// }
function onExportCsvTrigger(board: Board, activeView: BoardView, cards: Card[], intl: IntlShape) {
try {
CsvExporter.exportTableCsv(board, activeView, cards, intl)
const exportCompleteMessage = intl.formatMessage({
id: 'ViewHeader.export-complete',
defaultMessage: 'Export complete!',
})
sendFlashMessage({content: exportCompleteMessage, severity: 'normal'})
} catch (e) {
Utils.logError(`ExportCSV ERROR: ${e}`)
const exportFailedMessage = intl.formatMessage({
id: 'ViewHeader.export-failed',
defaultMessage: 'Export failed!',
})
sendFlashMessage({content: exportFailedMessage, severity: 'high'})
}
}
const ViewHeaderActionsMenu = (props: Props) => {
const {board, activeView, cards} = props
const intl = useIntl()
return (
<ModalWrapper>
<MenuWrapper label={intl.formatMessage({id: 'ViewHeader.view-header-menu', defaultMessage: 'View header menu'})}>
<IconButton icon={<OptionsIcon/>}/>
<Menu position='left'>
<Menu.Text
id='exportCsv'
name={intl.formatMessage({id: 'ViewHeader.export-csv', defaultMessage: 'Export to CSV'})}
onClick={() => onExportCsvTrigger(board, activeView, cards, intl)}
/>
<Menu.Text
id='exportBoardArchive'
name={intl.formatMessage({id: 'ViewHeader.export-board-archive', defaultMessage: 'Export board archive'})}
onClick={() => Archiver.exportBoardArchive(board)}
/>
{/*
<Menu.Separator/>
<Menu.Text
id='testAdd100Cards'
name={intl.formatMessage({id: 'ViewHeader.test-add-100-cards', defaultMessage: 'TEST: Add 100 cards'})}
onClick={() => testAddCards(board, activeView, cards.length, 100)}
/>
<Menu.Text
id='testAdd1000Cards'
name={intl.formatMessage({id: 'ViewHeader.test-add-1000-cards', defaultMessage: 'TEST: Add 1,000 cards'})}
onClick={() => testAddCards(board, activeView, cards.length, 1000)}
/>
<Menu.Text
id='testDistributeCards'
name={intl.formatMessage({id: 'ViewHeader.test-distribute-cards', defaultMessage: 'TEST: Distribute cards'})}
onClick={() => testDistributeCards()}
/>
<Menu.Text
id='testRandomizeIcons'
name={intl.formatMessage({id: 'ViewHeader.test-randomize-icons', defaultMessage: 'TEST: Randomize icons'})}
onClick={() => testRandomizeIcons()}
/>
*/}
</Menu>
</MenuWrapper>
</ModalWrapper>
)
}
export default React.memo(ViewHeaderActionsMenu)