diff --git a/frontend/src/issues-list-board/issues-list-boards.tsx b/frontend/src/issues-list-board/issues-list-boards.tsx index c404685..c9250bb 100644 --- a/frontend/src/issues-list-board/issues-list-boards.tsx +++ b/frontend/src/issues-list-board/issues-list-boards.tsx @@ -4,6 +4,7 @@ import * as IssuesListBoardStore from './store'; import * as IssuesListBoardNs from './issues-list-board'; import * as TopRightMenuNs from '../misc-components/top-right-menu'; import { SetIssuesReadingTimestamp } from '../utils/unreaded-provider'; +import * as ServiceActionsButtons from '../utils/service-actions-buttons'; export type Props = { store: IssuesListBoardStore.IPageStore @@ -31,6 +32,8 @@ export const IssuesListBoards = observer((props: Props): JSX.Element => { <> + + {list} diff --git a/frontend/src/kanban-board/kanban-boards.tsx b/frontend/src/kanban-board/kanban-boards.tsx index a4a9634..aa2448b 100644 --- a/frontend/src/kanban-board/kanban-boards.tsx +++ b/frontend/src/kanban-board/kanban-boards.tsx @@ -5,6 +5,7 @@ import { observer } from 'mobx-react-lite'; import * as TopRightMenuNs from '../misc-components/top-right-menu'; import { SetIssuesReadingTimestamp } from '../utils/unreaded-provider'; import axios from 'axios'; +import * as ServiceActionsButtons from '../utils/service-actions-buttons'; export type Props = { store: IPageStore @@ -37,30 +38,13 @@ export const KanbanBoards = observer((props: Props) => { } treeRefreshMenuItem = ; } - const onIssuesRefreshClick = (e: React.MouseEvent) => { - if (e.target !== e.currentTarget) return; - e.stopPropagation(); - const rawInput = prompt("Force issues refresh (delimiters - space, comma, semicolon, tab or new line)", ""); - if (!rawInput) return; - const list = rawInput.split(/[ ,;\t\n\r]/).map(item => Number(item)).filter(item => (Number.isFinite(item) && item > 0)); - if (!list) return; - axios.post(`/redmine-event-emitter/append-issues`, list); - }; - const onGetIssuesQueueSizeClick = async (e: React.MouseEvent): Promise => { - if (e.target !== e.currentTarget) return; - e.stopPropagation(); - const resp = await axios.get(`/redmine-event-emitter/get-issues-queue-size`); - console.debug(`resp -`, resp); // DEBUG - if (!resp || typeof resp.data !== 'number') return; - alert(`Issues queue size - ${resp.data}`); - }; return ( <> {treeRefreshMenuItem} - - + + {list} diff --git a/frontend/src/utils/service-actions-buttons.tsx b/frontend/src/utils/service-actions-buttons.tsx new file mode 100644 index 0000000..16c1706 --- /dev/null +++ b/frontend/src/utils/service-actions-buttons.tsx @@ -0,0 +1,14 @@ +import React from 'react'; +import { onGetIssuesQueueSizeClick, onIssuesRefreshClick } from './service-actions'; + +export const IssuesForceRefreshButton = (): JSX.Element => { + return ( + + ); +}; + +export const GetIssuesQueueSizeButton = (): JSX.Element => { + return ( + + ); +}; diff --git a/frontend/src/utils/service-actions.ts b/frontend/src/utils/service-actions.ts new file mode 100644 index 0000000..0c96ed0 --- /dev/null +++ b/frontend/src/utils/service-actions.ts @@ -0,0 +1,21 @@ +import axios from "axios"; +import React from 'react'; + +export const onIssuesRefreshClick = (e: React.MouseEvent) => { + if (e.target !== e.currentTarget) return; + e.stopPropagation(); + const rawInput = prompt("Force issues refresh (delimiters - space, comma, semicolon or tab)", ""); + if (!rawInput) return; + const list = rawInput.split(" ,;\t").map(item => Number(item)).filter(item => Number.isFinite(item)); + if (!list) return; + axios.post(`/redmine-event-emitter/append-issues`, list); +}; + +export const onGetIssuesQueueSizeClick = async (e: React.MouseEvent): Promise => { + if (e.target !== e.currentTarget) return; + e.stopPropagation(); + const resp = await axios.get(`/redmine-event-emitter/get-issues-queue-size`); + console.debug(`resp -`, resp); // DEBUG + if (!resp || typeof resp.data !== 'number') return; + alert(`Issues queue size - ${resp.data}`); +};