From db55e633b50e9faba5760363abf2d4d659ae0731 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D0=B0=D0=B2=D0=B5=D0=BB=20=D0=90=D1=85=D0=BC=D0=B5?= =?UTF-8?q?=D1=82=D1=87=D0=B0=D0=BD=D0=BE=D0=B2?= Date: Mon, 30 Aug 2021 17:44:11 +0300 Subject: [PATCH] [#148] add new function read board Id for update JIRA Cloud 2021-09-30 --- package.json | 2 +- src/charts/AddChartGrid.js | 2 +- src/charts/AddSlaLine.js | 2 +- src/column-limits/BoardPage/index.js | 2 +- src/column-limits/SettingsPage/index.js | 2 +- src/routing.js | 56 ++++++++++++++++++++- src/shared/PageModification.js | 16 +++--- src/shared/jiraApi.js | 4 +- src/shared/styles.css | 5 ++ src/swimlane/SwimlaneLimits.js | 2 +- src/swimlane/SwimlaneSettingsPopup.js | 2 +- src/swimlane/SwimlaneStats.js | 2 +- src/tetris-planning/TetrisPlanning.js | 2 +- src/tetris-planning/TetrisPlanningButton.js | 4 +- 14 files changed, 81 insertions(+), 22 deletions(-) diff --git a/package.json b/package.json index 7a26847..cd4cfb1 100644 --- a/package.json +++ b/package.json @@ -96,7 +96,7 @@ "eslint-plugin-import": "^2.22.1", "eslint-plugin-jsx-a11y": "^6.4.1", "eslint-plugin-prettier": "^3.3.1", - "eslint-plugin-react": "^7.22.0", + "eslint-plugin-react": "^7.24.0", "html-loader": "^0.5.5", "html-webpack-plugin": "3.0.4", "husky": "^4.3.8", diff --git a/src/charts/AddChartGrid.js b/src/charts/AddChartGrid.js index 2d525da..875a554 100644 --- a/src/charts/AddChartGrid.js +++ b/src/charts/AddChartGrid.js @@ -248,7 +248,7 @@ export default class extends PageModification { } getModificationId() { - return `add-sla-${this.getSearchParam('rapidView')}`; + return `add-sla-${this.getBoardId()}`; } waitForLoading() { diff --git a/src/charts/AddSlaLine.js b/src/charts/AddSlaLine.js index c554b81..e60cd6b 100644 --- a/src/charts/AddSlaLine.js +++ b/src/charts/AddSlaLine.js @@ -273,7 +273,7 @@ export default class extends PageModification { } getModificationId() { - return `add-sla-${this.getSearchParam('rapidView')}`; + return `add-sla-${this.getBoardId()}`; } waitForLoading() { diff --git a/src/column-limits/BoardPage/index.js b/src/column-limits/BoardPage/index.js index 274b9d7..5218b92 100644 --- a/src/column-limits/BoardPage/index.js +++ b/src/column-limits/BoardPage/index.js @@ -12,7 +12,7 @@ export default class extends PageModification { } getModificationId() { - return `add-wip-limits-${this.getSearchParam('rapidView')}`; + return `add-wip-limits-${this.getBoardId()}`; } waitForLoading() { diff --git a/src/column-limits/SettingsPage/index.js b/src/column-limits/SettingsPage/index.js index c061c21..b0d39ba 100644 --- a/src/column-limits/SettingsPage/index.js +++ b/src/column-limits/SettingsPage/index.js @@ -47,7 +47,7 @@ export default class SettingsWIPLimits extends PageModification { } getModificationId() { - return `add-wip-settings-${this.getSearchParam('rapidView')}`; + return `add-wip-settings-${this.getBoardId()}`; } waitForLoading() { diff --git a/src/routing.js b/src/routing.js index 0098a65..e21d157 100644 --- a/src/routing.js +++ b/src/routing.js @@ -11,7 +11,53 @@ export const Routes = { ALL: 'ALL', }; -export const getSearchParam = param => new URLSearchParams(window.location.search).get(param); +export const getSearchParam = param => { + return new URLSearchParams(window.location.search).get(param); +}; + +/* + sheme old https://companyname.atlassian.net/secure/RapidBoard.jspa?projectKey=PN&rapidView=12 + sheme new https://companyname.atlassian.net/jira/software/c/projects/PN/boards/12 +*/ +export const getBoardIdFromURL = () => { + if (window.location.href.indexOf('rapidView') > 0) { + return getSearchParam('rapidView'); + } + + const matchRapidView = window.location.pathname.match(/boards\/(\d+)/im); + if (matchRapidView != null) { + return matchRapidView[1]; + } + + return null; +}; + +export const getProjectKeyFromURL = () => { + if (window.location.href.indexOf('projectKey') > 0) { + return getSearchParam('projectKey'); + } + + // eslint-disable-next-line no-useless-escape + const matchProjectKey = window.location.pathname.match(/projects\/([^\/]+)/im); + if (matchProjectKey != null) { + return matchProjectKey[1]; + } + + return null; +}; + +/* +cloud update 2021-09-30 +https://mycompany.atlassian.net/jira/software/c/projects/MP/boards/138?config=filter +https://mycompany.atlassian.net/jira/software/c/projects/MP/boards/138?config=columns +https://mycompany.atlassian.net/jira/software/c/projects/MP/boards/138?config=swimlanes +https://mycompany.atlassian.net/jira/software/c/projects/MP/boards/138?config=swimlanes +https://mycompany.atlassian.net/jira/software/c/projects/MP/boards/138?config=cardColors +https://mycompany.atlassian.net/jira/software/c/projects/MP/boards/138?config=cardLayout +https://mycompany.atlassian.net/jira/software/c/projects/MP/boards/138?config=cardLayout +https://mycompany.atlassian.net/jira/software/c/projects/MP/boards/138?config=detailView +https://mycompany.atlassian.net/jira/software/c/projects/MP/boards/138?config=roadmapConfig +*/ export const getCurrentRoute = () => { const { pathname, search } = window.location; @@ -26,6 +72,14 @@ export const getCurrentRoute = () => { return Routes.BOARD; } + // cloud update 2021-09-30 + if (/boards\/(\d+)/im.test(pathname)) { + if (params.get('config')) return Routes.SETTINGS; + if (params.get('view') === 'reporting') return Routes.REPORTS; + + return Routes.BOARD; + } + if (pathname.startsWith('/browse')) { return params.get('jql') ? Routes.SEARCH : Routes.ISSUE; } diff --git a/src/shared/PageModification.js b/src/shared/PageModification.js index 097380e..2116492 100644 --- a/src/shared/PageModification.js +++ b/src/shared/PageModification.js @@ -1,4 +1,4 @@ -import { getSearchParam } from '../routing'; +import { getBoardIdFromURL, getSearchParam } from '../routing'; import { waitForElement } from './utils'; import { deleteBoardProperty, @@ -54,39 +54,39 @@ export class PageModification { getBoardProperty(property) { const { cancelRequest, abortPromise } = this.createAbortPromise(); this.sideEffects.push(cancelRequest); - return getBoardProperty(getSearchParam('rapidView'), property, { abortPromise }); + return getBoardProperty(getBoardIdFromURL(), property, { abortPromise }); } getBoardConfiguration() { const { cancelRequest, abortPromise } = this.createAbortPromise(); this.sideEffects.push(cancelRequest); - return getBoardConfiguration(getSearchParam('rapidView', { abortPromise })); + return getBoardConfiguration(getBoardIdFromURL(), { abortPromise }); } updateBoardProperty(property, value) { const { cancelRequest, abortPromise } = this.createAbortPromise(); this.sideEffects.push(cancelRequest); - return updateBoardProperty(getSearchParam('rapidView'), property, value, { abortPromise }); + return updateBoardProperty(getBoardIdFromURL(), property, value, { abortPromise }); } deleteBoardProperty(property) { const { cancelRequest, abortPromise } = this.createAbortPromise(); this.sideEffects.push(cancelRequest); - return deleteBoardProperty(getSearchParam('rapidView'), property, { abortPromise }); + return deleteBoardProperty(getBoardIdFromURL(), property, { abortPromise }); } getBoardEditData() { const { cancelRequest, abortPromise } = this.createAbortPromise(); this.sideEffects.push(cancelRequest); - return getBoardEditData(getSearchParam('rapidView', { abortPromise })); + return getBoardEditData(getBoardIdFromURL(), { abortPromise }); } getBoardEstimationData() { const { cancelRequest, abortPromise } = this.createAbortPromise(); this.sideEffects.push(cancelRequest); - return getBoardEstimationData(getSearchParam('rapidView', { abortPromise })); + return getBoardEstimationData(getBoardIdFromURL(), { abortPromise }); } searchIssues(jql, params = {}) { @@ -186,6 +186,6 @@ export class PageModification { } getBoardId() { - return this.getSearchParam('rapidView'); + return getBoardIdFromURL(); } } diff --git a/src/shared/jiraApi.js b/src/shared/jiraApi.js index 4cae15d..feccadb 100644 --- a/src/shared/jiraApi.js +++ b/src/shared/jiraApi.js @@ -12,7 +12,7 @@ import isNil from '@tinkoff/utils/is/nil'; import path from '@tinkoff/utils/object/path'; import pathOr from '@tinkoff/utils/object/pathOr'; import { defaultHeaders } from './defaultHeaders'; -import { getSearchParam } from '../routing'; +import { getBoardIdFromURL } from '../routing'; export const configVersion = 'v1'; const getPropName = property => `${property}${configVersion}`; @@ -42,7 +42,7 @@ const getBoardProperties = boardId => { delete invalidatedProperties[cacheKey]; return requestJira({ - url: boardPropertiesUrl(getSearchParam('rapidView')), + url: boardPropertiesUrl(getBoardIdFromURL()), memoryCacheForce, type: 'json', }); diff --git a/src/shared/styles.css b/src/shared/styles.css index 75cf3de..e946d73 100644 --- a/src/shared/styles.css +++ b/src/shared/styles.css @@ -17,3 +17,8 @@ flex: 0.7; background: red; } + +.ghx-flags { + border-radius: 2px 2px !important; + background: yellow !important; +} \ No newline at end of file diff --git a/src/swimlane/SwimlaneLimits.js b/src/swimlane/SwimlaneLimits.js index 48ad947..b415f5f 100644 --- a/src/swimlane/SwimlaneLimits.js +++ b/src/swimlane/SwimlaneLimits.js @@ -13,7 +13,7 @@ export default class extends PageModification { } getModificationId() { - return `add-swimlane-limits-${this.getSearchParam('rapidView')}`; + return `add-swimlane-limits-${this.getBoardId()}`; } appendStyles() { diff --git a/src/swimlane/SwimlaneSettingsPopup.js b/src/swimlane/SwimlaneSettingsPopup.js index 7edb0dc..548d02e 100644 --- a/src/swimlane/SwimlaneSettingsPopup.js +++ b/src/swimlane/SwimlaneSettingsPopup.js @@ -26,7 +26,7 @@ export default class SwimlaneSettingsLimit extends PageModification { } getModificationId() { - return `add-swimlane-settings-${this.getSearchParam('rapidView')}`; + return `add-swimlane-settings-${this.getBoardId()}`; } waitForLoading() { diff --git a/src/swimlane/SwimlaneStats.js b/src/swimlane/SwimlaneStats.js index 016b834..0889d28 100644 --- a/src/swimlane/SwimlaneStats.js +++ b/src/swimlane/SwimlaneStats.js @@ -11,7 +11,7 @@ export default class extends PageModification { } getModificationId() { - return `add-swimlane-stats-${this.getSearchParam('rapidView')}`; + return `add-swimlane-stats-${this.getBoardId()}`; } waitForLoading() { diff --git a/src/tetris-planning/TetrisPlanning.js b/src/tetris-planning/TetrisPlanning.js index 440768a..b31194a 100644 --- a/src/tetris-planning/TetrisPlanning.js +++ b/src/tetris-planning/TetrisPlanning.js @@ -8,7 +8,7 @@ export default class extends PageModification { } getModificationId() { - return `tetris-planning-${this.getSearchParam('rapidView')}`; + return `tetris-planning-${this.getBoardId()}`; } waitForLoading() { diff --git a/src/tetris-planning/TetrisPlanningButton.js b/src/tetris-planning/TetrisPlanningButton.js index a9d9c21..a90fd9f 100644 --- a/src/tetris-planning/TetrisPlanningButton.js +++ b/src/tetris-planning/TetrisPlanningButton.js @@ -12,7 +12,7 @@ export default class extends PageModification { } getModificationId() { - return `add-tetris-button-${this.getSearchParam('rapidView')}`; + return `add-tetris-button-${this.getBoardId()}`; } waitForLoading() { @@ -47,7 +47,7 @@ export default class extends PageModification { this.insertHTML( document.body, 'beforeend', - formatTemplateForInserting(template).replace(/\$BOARD/g, this.getSearchParam('rapidView')) + formatTemplateForInserting(template).replace(/\$BOARD/g, this.getBoardId()) ); this.insertHTML(