Passed
Pull Request — master (#555)
by John
03:00
created

src/utils/CancelableRequest.js   A

Complexity

Total Complexity 2
Complexity/F 1

Size

Lines of Code 34
Function Count 2

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 12
c 0
b 0
f 0
dl 0
loc 34
rs 10
wmc 2
mnd 0
bc 0
fnc 2
bpm 0
cpm 1
noi 0
1
/**
2
 * @copyright Copyright (c) 2019 Marco Ambrosini <[email protected]>
3
 *
4
 * @author Marco Ambrosini <[email protected]>
5
 * @author John Molakvoæ <[email protected]>
6
 *
7
 * @license GNU AGPL version 3 or any later version
8
 *
9
 * This program is free software: you can redistribute it and/or modify
10
 * it under the terms of the GNU Affero General Public License as
11
 * published by the Free Software Foundation, either version 3 of the
12
 * License, or (at your option) any later version.
13
 *
14
 * This program is distributed in the hope that it will be useful,
15
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
 * GNU Affero General Public License for more details.
18
 *
19
 * You should have received a copy of the GNU Affero General Public License
20
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
21
 *
22
 */
23
24
import axios from '@nextcloud/axios'
25
26
/**
27
 * Creates a cancelable axios 'request object'.
28
 *
29
 * @param {function} request the axios promise request
30
 * @returns {Object}
31
 */
32
const CancelableRequest = function(request) {
33
	/**
34
	 * Generate an axios cancel token
35
	 */
36
	const CancelToken = axios.CancelToken
37
	const source = CancelToken.source()
38
39
	/**
40
	 * Execute the request
41
	 *
42
	 * @param {string} url the url to send the request to
43
	 * @param {Object} [options] optional config for the request
44
	 */
45
	const fetch = async function(url, options) {
46
		return request(
47
			url,
48
			Object.assign({ cancelToken: source.token }, { options })
49
		)
50
	}
51
	return {
52
		request: fetch,
53
		cancel: source.cancel
54
	}
55
}
56
57
export default CancelableRequest
58