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}`);
+};