@balena/ui-shared-components 12.3.4-build-renovate-virtua-ae170de1ccec9b655c424b4ed8cd7f80017d4545-1 → 12.3.4
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.
|
@@ -14,7 +14,7 @@ interface ImageFormProps {
|
|
|
14
14
|
model: DownloadImageFormModel;
|
|
15
15
|
hasEsrVersions?: boolean;
|
|
16
16
|
onSelectedOsTypeChange: (osType: string) => void;
|
|
17
|
-
onChange: (
|
|
17
|
+
onChange: (obj: Partial<DownloadImageFormModel>) => void;
|
|
18
18
|
}
|
|
19
19
|
export declare const ImageForm: import("react").NamedExoticComponent<ImageFormProps>;
|
|
20
20
|
export {};
|
|
@@ -44,25 +44,42 @@ export const ImageForm = memo(function ImageForm({ compatibleDeviceTypes, osVers
|
|
|
44
44
|
const { selectionOpts, preferredSelectionOpts } = useMemo(() => getCategorizedVersions(osVersions, model.deviceType, osType), [osVersions, model.deviceType, osType]);
|
|
45
45
|
const versionSelectionOpts = useMemo(() => (showAllVersions ? selectionOpts : preferredSelectionOpts), [preferredSelectionOpts, selectionOpts, showAllVersions]);
|
|
46
46
|
const showAllVersionsToggle = useMemo(() => preferredSelectionOpts.length < selectionOpts.length, [preferredSelectionOpts.length, selectionOpts.length]);
|
|
47
|
-
const handleVariantChange = useCallback((
|
|
48
|
-
setVariant(
|
|
49
|
-
|
|
50
|
-
|
|
47
|
+
const handleVariantChange = useCallback((newVariant) => {
|
|
48
|
+
setVariant(newVariant);
|
|
49
|
+
const newState = {
|
|
50
|
+
developmentMode: newVariant === 'dev',
|
|
51
|
+
};
|
|
52
|
+
// For non-unified OS releases (ones w/ separate prod & dev releases)
|
|
53
|
+
// we also need to update raw version string, since it's different
|
|
54
|
+
// depending on the variant selected.
|
|
55
|
+
if (version === null || version === void 0 ? void 0 : version.hasPrebuiltVariants) {
|
|
56
|
+
const rawVersionForVariant = version.rawVersions[newVariant];
|
|
57
|
+
if (rawVersionForVariant != null) {
|
|
58
|
+
newState.version = rawVersionForVariant;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
onChange(newState);
|
|
62
|
+
}, [onChange, version]);
|
|
51
63
|
const handleVersionChange = useCallback((ver) => {
|
|
52
64
|
var _a;
|
|
53
65
|
ver !== null && ver !== void 0 ? ver : (ver = (_a = versionSelectionOpts.find((v) => v.isRecommended)) !== null && _a !== void 0 ? _a : versionSelectionOpts[0]);
|
|
66
|
+
const newState = {
|
|
67
|
+
developmentMode: variant === 'dev',
|
|
68
|
+
};
|
|
54
69
|
if (ver === null || ver === void 0 ? void 0 : ver.hasPrebuiltVariants) {
|
|
70
|
+
// For non-unified OS releases (ones w/ separate prod & dev releases)
|
|
71
|
+
// we need to set the correct raw version string based on the selected variant.
|
|
55
72
|
const rawVersionForVariant = ver.rawVersions[variant];
|
|
56
|
-
if (rawVersionForVariant) {
|
|
57
|
-
onChange('version', rawVersionForVariant);
|
|
58
|
-
setVersion(ver);
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
73
|
+
if (!rawVersionForVariant) {
|
|
61
74
|
handleVariantChange(variant === 'dev' ? 'prod' : 'dev');
|
|
75
|
+
return;
|
|
62
76
|
}
|
|
63
|
-
|
|
77
|
+
newState.version = rawVersionForVariant;
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
newState.version = ver === null || ver === void 0 ? void 0 : ver.rawVersion;
|
|
64
81
|
}
|
|
65
|
-
onChange(
|
|
82
|
+
onChange(newState);
|
|
66
83
|
setVersion(ver);
|
|
67
84
|
}, [versionSelectionOpts, variant, onChange, handleVariantChange]);
|
|
68
85
|
// TODO: Revisit this as it is clearly not using hooks as intended
|
|
@@ -94,7 +111,7 @@ export const ImageForm = memo(function ImageForm({ compatibleDeviceTypes, osVers
|
|
|
94
111
|
if (!newDeviceType) {
|
|
95
112
|
return;
|
|
96
113
|
}
|
|
97
|
-
onChange(
|
|
114
|
+
onChange({ deviceType: newDeviceType });
|
|
98
115
|
}, [compatibleDeviceTypes, model.deviceType.slug, onChange]);
|
|
99
116
|
const recommendedVersion = useMemo(() => { var _a; return (_a = versionSelectionOpts.find((v) => { var _a; return !((_a = v.knownIssueList) === null || _a === void 0 ? void 0 : _a.length); })) === null || _a === void 0 ? void 0 : _a.value; }, [versionSelectionOpts]);
|
|
100
117
|
return (_jsxs(Stack, { action: downloadUrl, method: "post", component: "form", noValidate: true, autoComplete: "off", ref: formElement, gap: 3, children: [_jsx("input", { type: "hidden", name: "deviceType", value: model.deviceType.slug }), _jsx("input", { type: "hidden", name: "_token", value: authToken }), _jsx("input", { type: "hidden", name: "appId", value: applicationId }), _jsx("input", { type: "hidden", name: "fileType", value: ".zip" }), _jsx("input", { type: "hidden", name: "version", value: model.version }), _jsxs(Stack, { direction: "row", flexWrap: "wrap", gap: 2, children: [compatibleDeviceTypes && compatibleDeviceTypes.length > 1 && (_jsx(Autocomplete, { fullWidth: true, value: model.deviceType, options: compatibleDeviceTypes, getOptionLabel: (option) => option.name, renderOption: (props, option) => {
|
|
@@ -129,14 +146,17 @@ export const ImageForm = memo(function ImageForm({ compatibleDeviceTypes, osVers
|
|
|
129
146
|
sx: { mt: 3 } }))] })), _jsx(Divider, { variant: "fullWidth", flexItem: true, sx: { borderStyle: 'dashed' } }), (!isInitialDefault || !variant) && (_jsx(VariantSelector, { version: version, variant: variant, onVariantChange: (v) => {
|
|
130
147
|
handleVariantChange(v ? 'dev' : 'prod');
|
|
131
148
|
} })), _jsx(Divider, { variant: "fullWidth", flexItem: true, sx: { borderStyle: 'dashed' } }), _jsxs(Stack, { children: [_jsxs(FormControl, { children: [_jsx(FormLabel, { id: "network-radio-buttons-group-label", children: _jsx(Typography, { variant: "titleSm", children: "Network" }) }), _jsxs(RadioGroup, { "aria-labelledby": "network-radio-buttons-group-label", value: model.network, name: "network", onChange: (event) => {
|
|
132
|
-
onChange(
|
|
149
|
+
onChange({
|
|
150
|
+
network: event.target
|
|
151
|
+
.value,
|
|
152
|
+
});
|
|
133
153
|
}, children: [_jsx(FormControlLabel, { value: "ethernet", control: _jsx(Radio, {}), label: "Ethernet only" }), _jsx(FormControlLabel, { value: "wifi", control: _jsx(Radio, {}), label: "Wifi + Ethernet" })] })] }), model.network === 'wifi' && (_jsxs(Stack, { gap: 3, children: [_jsx(TextField, { value: model.wifiSsid, id: "device-wifi-ssid", slotProps: {
|
|
134
154
|
htmlInput: {
|
|
135
155
|
name: 'wifiSsid',
|
|
136
156
|
autoComplete: 'wifiSsid-auto-complete',
|
|
137
157
|
},
|
|
138
158
|
}, onChange: (event) => {
|
|
139
|
-
onChange(
|
|
159
|
+
onChange({ wifiSsid: event.target.value });
|
|
140
160
|
}, label: "WiFi SSID" }), _jsx(TextField, { type: showPassword ? 'text' : 'password', id: "device-wifi-password", value: model.wifiKey, slotProps: {
|
|
141
161
|
htmlInput: {
|
|
142
162
|
name: 'wifiKey',
|
|
@@ -150,7 +170,7 @@ export const ImageForm = memo(function ImageForm({ compatibleDeviceTypes, osVers
|
|
|
150
170
|
}, edge: "end", children: showPassword ? _jsx(VisibilityOff, {}) : _jsx(Visibility, {}) }) })),
|
|
151
171
|
},
|
|
152
172
|
}, onChange: (event) => {
|
|
153
|
-
onChange(
|
|
173
|
+
onChange({ wifiKey: event.target.value });
|
|
154
174
|
}, label: "Wifi Passphrase" })] }))] }), _jsx(Divider, { variant: "fullWidth", sx: { borderStyle: 'dashed' } }), _jsxs(Accordion, { disableGutters: true, elevation: 0, expanded: showAdvancedSettings, onChange: () => {
|
|
155
175
|
setShowAdvancedSettings(!showAdvancedSettings);
|
|
156
176
|
}, sx: {
|
|
@@ -167,7 +187,9 @@ export const ImageForm = memo(function ImageForm({ compatibleDeviceTypes, osVers
|
|
|
167
187
|
autoComplete: 'appUpdatePollInterval-auto-complete',
|
|
168
188
|
},
|
|
169
189
|
}, onChange: (event) => {
|
|
170
|
-
onChange(
|
|
190
|
+
onChange({
|
|
191
|
+
appUpdatePollInterval: parseInt(event.target.value, 10),
|
|
192
|
+
});
|
|
171
193
|
}, label: _jsxs(Stack, { direction: "row", alignItems: "center", gap: 1, children: ["Check for updates every X minutes", ' ', _jsx(MUILinkWithTracking, { href: POLL_INTERVAL_DOCS, sx: {
|
|
172
194
|
display: 'flex',
|
|
173
195
|
alignItems: 'center',
|
|
@@ -178,14 +200,14 @@ export const ImageForm = memo(function ImageForm({ compatibleDeviceTypes, osVers
|
|
|
178
200
|
autoComplete: 'provisioningKeyName-auto-complete',
|
|
179
201
|
},
|
|
180
202
|
}, onChange: (event) => {
|
|
181
|
-
onChange(
|
|
203
|
+
onChange({ provisioningKeyName: event.target.value });
|
|
182
204
|
}, label: "Provisioning Key name" }), _jsx(TextField, { type: "date", value: (_b = model.provisioningKeyExpiryDate) !== null && _b !== void 0 ? _b : '', slotProps: {
|
|
183
205
|
htmlInput: {
|
|
184
206
|
name: 'provisioningKeyExpiryDate',
|
|
185
207
|
autoComplete: 'provisioningKeyExpiryDate-auto-complete',
|
|
186
208
|
},
|
|
187
209
|
}, onChange: (event) => {
|
|
188
|
-
onChange(
|
|
210
|
+
onChange({ provisioningKeyExpiryDate: event.target.value });
|
|
189
211
|
}, label: "Provisioning Key expiring on" })] })] })] }));
|
|
190
212
|
});
|
|
191
213
|
// TODO: We need a better way than just copying the styling. Consider creating a component to export
|
|
@@ -242,13 +242,13 @@ export const DownloadImageDialog = ({ open, applicationId, releaseId, compatible
|
|
|
242
242
|
const setOsTypeCallback = useCallback((osT) => {
|
|
243
243
|
setOsType(osT);
|
|
244
244
|
}, []);
|
|
245
|
-
const handleChange = useCallback((
|
|
245
|
+
const handleChange = useCallback((updatedProps) => {
|
|
246
246
|
let newFormModelState;
|
|
247
|
-
if (
|
|
248
|
-
newFormModelState = getInitialState(
|
|
247
|
+
if (updatedProps.deviceType != null) {
|
|
248
|
+
newFormModelState = getInitialState(updatedProps.deviceType, applicationId, releaseId);
|
|
249
249
|
}
|
|
250
250
|
else {
|
|
251
|
-
newFormModelState = Object.assign(Object.assign({}, formModel),
|
|
251
|
+
newFormModelState = Object.assign(Object.assign({}, formModel), updatedProps);
|
|
252
252
|
onFieldChange === null || onFieldChange === void 0 ? void 0 : onFieldChange(newFormModelState);
|
|
253
253
|
}
|
|
254
254
|
setFormModel(newFormModelState);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@balena/ui-shared-components",
|
|
3
|
-
"version": "12.3.4
|
|
3
|
+
"version": "12.3.4",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"files": [
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"rimraf": "^6.0.0",
|
|
51
51
|
"ts-jest": "^29.2.5",
|
|
52
52
|
"typescript": "^5.8.2",
|
|
53
|
-
"virtua": "^0.
|
|
53
|
+
"virtua": "^0.37.3",
|
|
54
54
|
"zxcvbn": "^4.4.2"
|
|
55
55
|
},
|
|
56
56
|
"devDependencies": {
|
|
@@ -138,6 +138,6 @@
|
|
|
138
138
|
},
|
|
139
139
|
"homepage": "https://github.com/balena-io/ui-shared-components#readme",
|
|
140
140
|
"versionist": {
|
|
141
|
-
"publishedAt": "2025-04-
|
|
141
|
+
"publishedAt": "2025-04-24T13:53:05.428Z"
|
|
142
142
|
}
|
|
143
143
|
}
|