@balena/ui-shared-components 12.3.4-build-fix-non-unified-os-release-variant-selection-27d9e11156ba31dbdeb0e30f51debaf0e6789b13-1 → 12.3.4-build-renovate-virtua-ae170de1ccec9b655c424b4ed8cd7f80017d4545-1

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: (obj: Partial<DownloadImageFormModel>) => void;
17
+ onChange: (key: keyof DownloadImageFormModel, value: DownloadImageFormModel[keyof DownloadImageFormModel]) => void;
18
18
  }
19
19
  export declare const ImageForm: import("react").NamedExoticComponent<ImageFormProps>;
20
20
  export {};
@@ -44,42 +44,25 @@ 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((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]);
47
+ const handleVariantChange = useCallback((v) => {
48
+ setVariant(v);
49
+ onChange('developmentMode', v === 'dev');
50
+ }, [onChange]);
63
51
  const handleVersionChange = useCallback((ver) => {
64
52
  var _a;
65
53
  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
- };
69
54
  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.
72
55
  const rawVersionForVariant = ver.rawVersions[variant];
73
- if (!rawVersionForVariant) {
56
+ if (rawVersionForVariant) {
57
+ onChange('version', rawVersionForVariant);
58
+ setVersion(ver);
59
+ }
60
+ else {
74
61
  handleVariantChange(variant === 'dev' ? 'prod' : 'dev');
75
- return;
76
62
  }
77
- newState.version = rawVersionForVariant;
78
- }
79
- else {
80
- newState.version = ver === null || ver === void 0 ? void 0 : ver.rawVersion;
63
+ return;
81
64
  }
82
- onChange(newState);
65
+ onChange('version', ver === null || ver === void 0 ? void 0 : ver.rawVersion);
83
66
  setVersion(ver);
84
67
  }, [versionSelectionOpts, variant, onChange, handleVariantChange]);
85
68
  // TODO: Revisit this as it is clearly not using hooks as intended
@@ -111,7 +94,7 @@ export const ImageForm = memo(function ImageForm({ compatibleDeviceTypes, osVers
111
94
  if (!newDeviceType) {
112
95
  return;
113
96
  }
114
- onChange({ deviceType: newDeviceType });
97
+ onChange('deviceType', newDeviceType);
115
98
  }, [compatibleDeviceTypes, model.deviceType.slug, onChange]);
116
99
  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]);
117
100
  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) => {
@@ -146,17 +129,14 @@ export const ImageForm = memo(function ImageForm({ compatibleDeviceTypes, osVers
146
129
  sx: { mt: 3 } }))] })), _jsx(Divider, { variant: "fullWidth", flexItem: true, sx: { borderStyle: 'dashed' } }), (!isInitialDefault || !variant) && (_jsx(VariantSelector, { version: version, variant: variant, onVariantChange: (v) => {
147
130
  handleVariantChange(v ? 'dev' : 'prod');
148
131
  } })), _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) => {
149
- onChange({
150
- network: event.target
151
- .value,
152
- });
132
+ onChange('network', event.target.value);
153
133
  }, 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: {
154
134
  htmlInput: {
155
135
  name: 'wifiSsid',
156
136
  autoComplete: 'wifiSsid-auto-complete',
157
137
  },
158
138
  }, onChange: (event) => {
159
- onChange({ wifiSsid: event.target.value });
139
+ onChange('wifiSsid', event.target.value);
160
140
  }, label: "WiFi SSID" }), _jsx(TextField, { type: showPassword ? 'text' : 'password', id: "device-wifi-password", value: model.wifiKey, slotProps: {
161
141
  htmlInput: {
162
142
  name: 'wifiKey',
@@ -170,7 +150,7 @@ export const ImageForm = memo(function ImageForm({ compatibleDeviceTypes, osVers
170
150
  }, edge: "end", children: showPassword ? _jsx(VisibilityOff, {}) : _jsx(Visibility, {}) }) })),
171
151
  },
172
152
  }, onChange: (event) => {
173
- onChange({ wifiKey: event.target.value });
153
+ onChange('wifiKey', event.target.value);
174
154
  }, label: "Wifi Passphrase" })] }))] }), _jsx(Divider, { variant: "fullWidth", sx: { borderStyle: 'dashed' } }), _jsxs(Accordion, { disableGutters: true, elevation: 0, expanded: showAdvancedSettings, onChange: () => {
175
155
  setShowAdvancedSettings(!showAdvancedSettings);
176
156
  }, sx: {
@@ -187,9 +167,7 @@ export const ImageForm = memo(function ImageForm({ compatibleDeviceTypes, osVers
187
167
  autoComplete: 'appUpdatePollInterval-auto-complete',
188
168
  },
189
169
  }, onChange: (event) => {
190
- onChange({
191
- appUpdatePollInterval: parseInt(event.target.value, 10),
192
- });
170
+ onChange('appUpdatePollInterval', event.target.value);
193
171
  }, label: _jsxs(Stack, { direction: "row", alignItems: "center", gap: 1, children: ["Check for updates every X minutes", ' ', _jsx(MUILinkWithTracking, { href: POLL_INTERVAL_DOCS, sx: {
194
172
  display: 'flex',
195
173
  alignItems: 'center',
@@ -200,14 +178,14 @@ export const ImageForm = memo(function ImageForm({ compatibleDeviceTypes, osVers
200
178
  autoComplete: 'provisioningKeyName-auto-complete',
201
179
  },
202
180
  }, onChange: (event) => {
203
- onChange({ provisioningKeyName: event.target.value });
181
+ onChange('provisioningKeyName', event.target.value);
204
182
  }, label: "Provisioning Key name" }), _jsx(TextField, { type: "date", value: (_b = model.provisioningKeyExpiryDate) !== null && _b !== void 0 ? _b : '', slotProps: {
205
183
  htmlInput: {
206
184
  name: 'provisioningKeyExpiryDate',
207
185
  autoComplete: 'provisioningKeyExpiryDate-auto-complete',
208
186
  },
209
187
  }, onChange: (event) => {
210
- onChange({ provisioningKeyExpiryDate: event.target.value });
188
+ onChange('provisioningKeyExpiryDate', event.target.value);
211
189
  }, label: "Provisioning Key expiring on" })] })] })] }));
212
190
  });
213
191
  // 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((updatedProps) => {
245
+ const handleChange = useCallback((key, value) => {
246
246
  let newFormModelState;
247
- if (updatedProps.deviceType != null) {
248
- newFormModelState = getInitialState(updatedProps.deviceType, applicationId, releaseId);
247
+ if (key === 'deviceType') {
248
+ newFormModelState = getInitialState(value, applicationId, releaseId);
249
249
  }
250
250
  else {
251
- newFormModelState = Object.assign(Object.assign({}, formModel), updatedProps);
251
+ newFormModelState = Object.assign(Object.assign({}, formModel), { [key]: value });
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-build-fix-non-unified-os-release-variant-selection-27d9e11156ba31dbdeb0e30f51debaf0e6789b13-1",
3
+ "version": "12.3.4-build-renovate-virtua-ae170de1ccec9b655c424b4ed8cd7f80017d4545-1",
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.37.3",
53
+ "virtua": "^0.40.0",
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-24T13:53:05.428Z"
141
+ "publishedAt": "2025-04-24T14:06:33.910Z"
142
142
  }
143
143
  }