cdd-cli 3.1.3 → 3.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.json +30 -0
- package/.github/workflows/docs.yml +35 -0
- package/CHANGELOG.md +44 -4
- package/FIXES_APPLIED.md +145 -147
- package/README.md +26 -0
- package/dist/App.js +20 -3
- package/dist/components/ContainerCreationPrompt.js +27 -1
- package/dist/components/ContainerList.js +11 -15
- package/dist/components/ContainerRow.js +73 -14
- package/dist/components/ContainerSection.js +16 -2
- package/dist/components/Footer.js +7 -1
- package/dist/components/Header.js +17 -1
- package/dist/components/LogViewer.js +21 -3
- package/dist/components/MessageFeedback.js +15 -1
- package/dist/components/PromptField.js +31 -1
- package/dist/components/StatsBar.js +46 -8
- package/dist/components/UsageMenu.js +30 -1
- package/dist/helpers/actionHelpers.js +17 -6
- package/dist/helpers/constants.js +30 -0
- package/dist/helpers/dockerService/dockerService.js +19 -0
- package/dist/helpers/dockerService/serviceComponents/containerActions.js +194 -35
- package/dist/helpers/dockerService/serviceComponents/containerList.js +45 -8
- package/dist/helpers/dockerService/serviceComponents/containerLogs.js +16 -6
- package/dist/helpers/dockerService/serviceComponents/containerStats.js +28 -9
- package/dist/helpers/exitWithMessage.js +2 -1
- package/dist/helpers/logger.js +112 -0
- package/dist/helpers/safeCall.js +21 -0
- package/dist/helpers/validationHelpers.js +20 -1
- package/dist/hooks/creation/useContainerActions.js +2 -1
- package/dist/hooks/creation/useContainerCreation.js +5 -4
- package/dist/hooks/creation/useLogsViewer.js +3 -2
- package/dist/hooks/useContainers.js +6 -3
- package/dist/hooks/useControls.js +253 -122
- package/dist/hooks/useLogsStream.js +3 -2
- package/dist/index.js +1 -0
- package/docs/components_ContainerCreationPrompt.jsx.html +114 -0
- package/docs/components_ContainerRow.jsx.html +151 -0
- package/docs/components_ContainerSection.jsx.html +75 -0
- package/docs/components_Footer.jsx.html +66 -0
- package/docs/components_Header.jsx.html +84 -0
- package/docs/components_LogViewer.jsx.html +91 -0
- package/docs/components_MessageFeedback.jsx.html +76 -0
- package/docs/components_PromptField.jsx.html +99 -0
- package/docs/components_StatsBar.jsx.html +105 -0
- package/docs/components_UsageMenu.jsx.html +73 -0
- package/docs/fonts/OpenSans-Bold-webfont.eot +0 -0
- package/docs/fonts/OpenSans-Bold-webfont.svg +1830 -0
- package/docs/fonts/OpenSans-Bold-webfont.woff +0 -0
- package/docs/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
- package/docs/fonts/OpenSans-BoldItalic-webfont.svg +1830 -0
- package/docs/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
- package/docs/fonts/OpenSans-Italic-webfont.eot +0 -0
- package/docs/fonts/OpenSans-Italic-webfont.svg +1830 -0
- package/docs/fonts/OpenSans-Italic-webfont.woff +0 -0
- package/docs/fonts/OpenSans-Light-webfont.eot +0 -0
- package/docs/fonts/OpenSans-Light-webfont.svg +1831 -0
- package/docs/fonts/OpenSans-Light-webfont.woff +0 -0
- package/docs/fonts/OpenSans-LightItalic-webfont.eot +0 -0
- package/docs/fonts/OpenSans-LightItalic-webfont.svg +1835 -0
- package/docs/fonts/OpenSans-LightItalic-webfont.woff +0 -0
- package/docs/fonts/OpenSans-Regular-webfont.eot +0 -0
- package/docs/fonts/OpenSans-Regular-webfont.svg +1831 -0
- package/docs/fonts/OpenSans-Regular-webfont.woff +0 -0
- package/docs/global.html +6145 -0
- package/docs/helpers_actionHelpers.js.html +94 -0
- package/docs/helpers_constants.js.html +81 -0
- package/docs/helpers_dockerService_dockerService.js.html +79 -0
- package/docs/helpers_dockerService_serviceComponents_containerActions.js.html +153 -0
- package/docs/helpers_dockerService_serviceComponents_containerList.js.html +81 -0
- package/docs/helpers_dockerService_serviceComponents_containerLogs.js.html +85 -0
- package/docs/helpers_dockerService_serviceComponents_containerStats.js.html +107 -0
- package/docs/helpers_dockerService_serviceComponents_imageUtils.js.html +82 -0
- package/docs/helpers_exitWithMessage.js.html +77 -0
- package/docs/helpers_safeCall.js.html +68 -0
- package/docs/helpers_validationHelpers.js.html +96 -0
- package/docs/hooks_creation_useContainerActions.js.html +120 -0
- package/docs/hooks_creation_useContainerCreation.js.html +152 -0
- package/docs/hooks_creation_useLogsViewer.js.html +102 -0
- package/docs/hooks_useControls.js.html +298 -0
- package/docs/hooks_useLogsStream.js.html +82 -0
- package/docs/index.html +65 -0
- package/docs/index.js.html +65 -0
- package/docs/module-index.html +171 -0
- package/docs/scripts/linenumber.js +25 -0
- package/docs/scripts/prettify/Apache-License-2.0.txt +202 -0
- package/docs/scripts/prettify/lang-css.js +2 -0
- package/docs/scripts/prettify/prettify.js +28 -0
- package/docs/styles/jsdoc-default.css +358 -0
- package/docs/styles/prettify-jsdoc.css +111 -0
- package/docs/styles/prettify-tomorrow.css +132 -0
- package/fix-imports.cjs +33 -6
- package/jest.config.cjs +2 -1
- package/package.json +19 -9
- package/src/App.jsx +16 -2
- package/src/components/ContainerCreationPrompt.jsx +26 -0
- package/src/components/ContainerList.jsx +12 -13
- package/src/components/ContainerRow.jsx +55 -20
- package/src/components/ContainerSection.jsx +15 -1
- package/src/components/Footer.jsx +6 -1
- package/src/components/Header.jsx +16 -0
- package/src/components/LogViewer.jsx +19 -2
- package/src/components/MessageFeedback.jsx +14 -0
- package/src/components/PromptField.jsx +30 -0
- package/src/components/StatsBar.jsx +47 -8
- package/src/components/UsageMenu.jsx +38 -8
- package/src/helpers/actionHelpers.js +16 -7
- package/src/helpers/constants.js +30 -0
- package/src/helpers/dockerService/dockerService.js +19 -0
- package/src/helpers/dockerService/serviceComponents/containerActions.js +123 -12
- package/src/helpers/dockerService/serviceComponents/containerList.js +61 -23
- package/src/helpers/dockerService/serviceComponents/containerLogs.js +20 -6
- package/src/helpers/dockerService/serviceComponents/containerStats.js +24 -5
- package/src/helpers/dockerService/serviceComponents/imageUtils.js +1 -1
- package/src/helpers/exitWithMessage.js +2 -1
- package/src/helpers/logger.js +113 -0
- package/src/helpers/safeCall.js +18 -0
- package/src/helpers/validationHelpers.js +21 -3
- package/src/hooks/creation/useContainerActions.js +4 -3
- package/src/hooks/creation/useContainerCreation.js +5 -4
- package/src/hooks/creation/useLogsViewer.js +2 -1
- package/src/hooks/useContainers.js +6 -3
- package/src/hooks/useControls.js +244 -91
- package/src/hooks/useLogsStream.js +2 -1
- package/src/index.js +1 -0
- package/test/actionHelpers.test.js +106 -0
- package/test/containerActions.test.js +138 -0
- package/test/containerList.test.js +79 -0
- package/test/jest.setup.js +7 -0
- package/test/safeCall.test.js +25 -0
- package/test/useContainerCreation.dom.test.js +97 -0
- package/test/validationHelpers.test.js +2 -2
- package/AUDIT_REPORT.md +0 -1004
- package/dist/cdd.bundle.js +0 -8
- package/dist/components/ContainerCreator.js +0 -81
- package/dist/components/StatsViewer.js +0 -0
- package/dist/helpers/dockerActions.js +0 -64
- package/dist/helpers/dockerService.js +0 -284
- package/dist/hooks/useStatsPolling.js +0 -54
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
var _ref, _parseLevel;
|
|
2
|
+
/**
|
|
3
|
+
* Supported log levels in ascending verbosity.
|
|
4
|
+
* Lower numeric values represent higher severity.
|
|
5
|
+
*/
|
|
6
|
+
var LOG_LEVELS = {
|
|
7
|
+
error: 0,
|
|
8
|
+
warn: 1,
|
|
9
|
+
info: 2,
|
|
10
|
+
debug: 3
|
|
11
|
+
};
|
|
12
|
+
function parseLevel(value) {
|
|
13
|
+
if (typeof value !== "string") {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
var normalized = value.trim().toLowerCase();
|
|
17
|
+
if (normalized in LOG_LEVELS) {
|
|
18
|
+
return LOG_LEVELS[normalized];
|
|
19
|
+
}
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
var envLevel = (_ref = (_parseLevel = parseLevel(process.env.CDD_LOG_LEVEL)) !== null && _parseLevel !== void 0 ? _parseLevel : parseLevel(process.env.LOG_LEVEL)) !== null && _ref !== void 0 ? _ref : LOG_LEVELS.info;
|
|
23
|
+
var currentLevel = typeof envLevel === "number" ? envLevel : LOG_LEVELS.info;
|
|
24
|
+
var listeners = new Set();
|
|
25
|
+
function shouldLog(level) {
|
|
26
|
+
var target = LOG_LEVELS[level];
|
|
27
|
+
return typeof target === "number" && target <= currentLevel;
|
|
28
|
+
}
|
|
29
|
+
function log(level, message) {
|
|
30
|
+
if (!shouldLog(level)) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
var timestamp = new Date().toISOString();
|
|
34
|
+
var upperLevel = level.toUpperCase();
|
|
35
|
+
var formatted = "[".concat(timestamp, "] [").concat(upperLevel, "] ").concat(message);
|
|
36
|
+
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
|
|
37
|
+
args[_key - 2] = arguments[_key];
|
|
38
|
+
}
|
|
39
|
+
var entry = {
|
|
40
|
+
level: level,
|
|
41
|
+
message: message,
|
|
42
|
+
args: args,
|
|
43
|
+
timestamp: timestamp,
|
|
44
|
+
formatted: formatted
|
|
45
|
+
};
|
|
46
|
+
var shouldWriteToConsole = listeners.size === 0 || level === "error" || level === "warn";
|
|
47
|
+
if (shouldWriteToConsole) {
|
|
48
|
+
var method = level === "debug" ? "log" : level;
|
|
49
|
+
if (typeof console[method] === "function") {
|
|
50
|
+
var _console;
|
|
51
|
+
(_console = console)[method].apply(_console, [formatted].concat(args));
|
|
52
|
+
} else {
|
|
53
|
+
var _console2;
|
|
54
|
+
(_console2 = console).log.apply(_console2, [formatted].concat(args));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
listeners.forEach(function (listener) {
|
|
58
|
+
try {
|
|
59
|
+
listener(entry);
|
|
60
|
+
} catch (err) {
|
|
61
|
+
// Ignore listener errors so logging remains resilient.
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Shared logger instance with leveled output and in-memory subscriptions.
|
|
68
|
+
* Consumers can import `{ logger }` to emit messages or to listen for
|
|
69
|
+
* log entries (used by the CLI debug panel).
|
|
70
|
+
*/
|
|
71
|
+
export var logger = {
|
|
72
|
+
debug: function debug(message) {
|
|
73
|
+
for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
|
|
74
|
+
args[_key2 - 1] = arguments[_key2];
|
|
75
|
+
}
|
|
76
|
+
log.apply(void 0, ["debug", message].concat(args));
|
|
77
|
+
},
|
|
78
|
+
info: function info(message) {
|
|
79
|
+
for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
|
|
80
|
+
args[_key3 - 1] = arguments[_key3];
|
|
81
|
+
}
|
|
82
|
+
log.apply(void 0, ["info", message].concat(args));
|
|
83
|
+
},
|
|
84
|
+
warn: function warn(message) {
|
|
85
|
+
for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {
|
|
86
|
+
args[_key4 - 1] = arguments[_key4];
|
|
87
|
+
}
|
|
88
|
+
log.apply(void 0, ["warn", message].concat(args));
|
|
89
|
+
},
|
|
90
|
+
error: function error(message) {
|
|
91
|
+
for (var _len5 = arguments.length, args = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {
|
|
92
|
+
args[_key5 - 1] = arguments[_key5];
|
|
93
|
+
}
|
|
94
|
+
log.apply(void 0, ["error", message].concat(args));
|
|
95
|
+
},
|
|
96
|
+
/**
|
|
97
|
+
* Subscribe to log events.
|
|
98
|
+
*
|
|
99
|
+
* @param {(entry: { level: string, message: string, args: any[], timestamp: string, formatted: string }) => void} listener
|
|
100
|
+
* Listener invoked for every log entry that passes the current level filter.
|
|
101
|
+
* @returns {Function} Cleanup function that removes the listener when called.
|
|
102
|
+
*/
|
|
103
|
+
subscribe: function subscribe(listener) {
|
|
104
|
+
if (typeof listener !== "function") {
|
|
105
|
+
return function () {};
|
|
106
|
+
}
|
|
107
|
+
listeners.add(listener);
|
|
108
|
+
return function () {
|
|
109
|
+
return listeners["delete"](listener);
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { logger } from "./logger.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Call a function safely: if it's a function call it with provided args and
|
|
5
|
+
* catch any errors so they don't bubble to the host application.
|
|
6
|
+
*
|
|
7
|
+
* @param {Function} fn
|
|
8
|
+
* @param {...any} args
|
|
9
|
+
*/
|
|
10
|
+
export function safeCall(fn) {
|
|
11
|
+
if (typeof fn === 'function') {
|
|
12
|
+
try {
|
|
13
|
+
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
14
|
+
args[_key - 1] = arguments[_key];
|
|
15
|
+
}
|
|
16
|
+
return fn.apply(void 0, args);
|
|
17
|
+
} catch (e) {
|
|
18
|
+
logger.error("safeCall caught error", e);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -6,11 +6,20 @@ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" !=
|
|
|
6
6
|
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
7
7
|
// Reusable validations for ports and environment variables
|
|
8
8
|
|
|
9
|
+
/**
|
|
10
|
+
* Validate a comma-separated list of port mappings in the form "host:container".
|
|
11
|
+
* Examples of valid input: "8080:80, 3000:3000"
|
|
12
|
+
*
|
|
13
|
+
* @param {string} portInput - Comma-separated port mappings
|
|
14
|
+
* @returns {boolean} True when all mappings are valid, false otherwise
|
|
15
|
+
*/
|
|
9
16
|
export function validatePorts(portInput) {
|
|
17
|
+
// Empty or whitespace-only input is considered valid (ports are optional)
|
|
18
|
+
if (!portInput || !portInput.trim()) return true;
|
|
10
19
|
var ports = portInput.split(",").map(function (p) {
|
|
11
20
|
return p.trim();
|
|
12
21
|
}).filter(Boolean);
|
|
13
|
-
if (ports.length === 0) return
|
|
22
|
+
if (ports.length === 0) return true;
|
|
14
23
|
var invalid = ports.find(function (pair) {
|
|
15
24
|
var _pair$split = pair.split(":"),
|
|
16
25
|
_pair$split2 = _slicedToArray(_pair$split, 2),
|
|
@@ -20,6 +29,16 @@ export function validatePorts(portInput) {
|
|
|
20
29
|
});
|
|
21
30
|
return !invalid;
|
|
22
31
|
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Validate environment variable input as comma-separated VAR=value pairs.
|
|
35
|
+
* Empty or whitespace-only input is considered valid (no env vars).
|
|
36
|
+
* Variable names must start with a letter or underscore and contain only
|
|
37
|
+
* alphanumeric characters and underscores.
|
|
38
|
+
*
|
|
39
|
+
* @param {string} envInput - Comma-separated environment variable assignments
|
|
40
|
+
* @returns {boolean} True when all env var assignments are valid, false otherwise
|
|
41
|
+
*/
|
|
23
42
|
export function validateEnvVars(envInput) {
|
|
24
43
|
if (!envInput || !envInput.trim()) return true; // Empty is valid
|
|
25
44
|
|
|
@@ -9,6 +9,7 @@ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length)
|
|
|
9
9
|
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
10
10
|
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
11
11
|
import { useState } from "react";
|
|
12
|
+
import { safeCall } from "../../helpers/safeCall.js";
|
|
12
13
|
import { startContainer as svcStartContainer, stopContainer as svcStopContainer, restartContainer as svcRestartContainer, removeContainer as svcRemoveContainer } from "../../helpers/dockerService/serviceComponents/containerActions.js";
|
|
13
14
|
|
|
14
15
|
/**
|
|
@@ -77,7 +78,7 @@ export function useContainerActions(_ref) {
|
|
|
77
78
|
case 4:
|
|
78
79
|
setMessage("".concat(actionLabel, " container successful."));
|
|
79
80
|
setMessageColor("green");
|
|
80
|
-
|
|
81
|
+
safeCall(onAction);
|
|
81
82
|
_context5.n = 6;
|
|
82
83
|
break;
|
|
83
84
|
case 5:
|
|
@@ -5,7 +5,8 @@ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length)
|
|
|
5
5
|
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
6
|
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
7
7
|
import { useState } from "react";
|
|
8
|
-
import { validatePorts
|
|
8
|
+
import { validatePorts } from "../../helpers/validationHelpers.js";
|
|
9
|
+
import { safeCall } from "../../helpers/safeCall.js";
|
|
9
10
|
|
|
10
11
|
/**
|
|
11
12
|
* Custom hook to manage the container creation flow, step by step.
|
|
@@ -93,8 +94,8 @@ export function useContainerCreation(_ref) {
|
|
|
93
94
|
return;
|
|
94
95
|
}
|
|
95
96
|
if (step === 3) {
|
|
96
|
-
// Final step: call onCreate with all data
|
|
97
|
-
onCreate
|
|
97
|
+
// Final step: call onCreate with all data (safely)
|
|
98
|
+
safeCall(onCreate, {
|
|
98
99
|
imageName: imageName,
|
|
99
100
|
containerName: containerName,
|
|
100
101
|
portInput: portInput,
|
|
@@ -114,7 +115,7 @@ export function useContainerCreation(_ref) {
|
|
|
114
115
|
setEnvInput("");
|
|
115
116
|
setMessage("");
|
|
116
117
|
setMessageColor("yellow");
|
|
117
|
-
|
|
118
|
+
safeCall(onCancel);
|
|
118
119
|
}
|
|
119
120
|
return {
|
|
120
121
|
step: step,
|
|
@@ -5,6 +5,7 @@ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length)
|
|
|
5
5
|
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
6
|
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
7
7
|
import { useState, useRef } from "react";
|
|
8
|
+
import { safeCall } from "../../helpers/safeCall.js";
|
|
8
9
|
|
|
9
10
|
/**
|
|
10
11
|
* Custom hook to manage the logs viewer state and stream reference.
|
|
@@ -45,8 +46,8 @@ export function useLogsViewer() {
|
|
|
45
46
|
setShowLogs(false);
|
|
46
47
|
setLogs([]);
|
|
47
48
|
if (logsStreamRef.current) {
|
|
48
|
-
var _logsStreamRef$curren
|
|
49
|
-
(_logsStreamRef$curren =
|
|
49
|
+
var _logsStreamRef$curren;
|
|
50
|
+
safeCall((_logsStreamRef$curren = logsStreamRef.current.destroy) === null || _logsStreamRef$curren === void 0 ? void 0 : _logsStreamRef$curren.bind(logsStreamRef.current));
|
|
50
51
|
logsStreamRef.current = null;
|
|
51
52
|
}
|
|
52
53
|
}
|
|
@@ -11,13 +11,16 @@ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
|
11
11
|
/**
|
|
12
12
|
* React hook to manage Docker containers state.
|
|
13
13
|
*
|
|
14
|
-
* @returns {
|
|
14
|
+
* @returns {{containers: Array<Object>}} An object containing the current
|
|
15
|
+
* containers array. The hook starts a periodic refresh and fetches the
|
|
16
|
+
* container list immediately on mount.
|
|
15
17
|
* @example
|
|
16
18
|
* // Use in a component
|
|
17
|
-
* const
|
|
19
|
+
* const { containers } = useContainers();
|
|
18
20
|
*/
|
|
19
21
|
import React, { useState, useEffect } from "react";
|
|
20
22
|
import { getContainers } from "../helpers/dockerService/serviceComponents/containerList.js";
|
|
23
|
+
import { REFRESH_INTERVALS } from "../helpers/constants.js";
|
|
21
24
|
export function useContainers() {
|
|
22
25
|
var _useState = useState([]),
|
|
23
26
|
_useState2 = _slicedToArray(_useState, 2),
|
|
@@ -43,7 +46,7 @@ export function useContainers() {
|
|
|
43
46
|
};
|
|
44
47
|
}();
|
|
45
48
|
fetch();
|
|
46
|
-
var timer = setInterval(fetch,
|
|
49
|
+
var timer = setInterval(fetch, REFRESH_INTERVALS.CONTAINER_LIST);
|
|
47
50
|
return function () {
|
|
48
51
|
return clearInterval(timer);
|
|
49
52
|
};
|