mirror of
https://github.com/balena-io/etcher.git
synced 2025-08-02 07:57:44 +00:00
wip
This commit is contained in:
parent
1398ca2931
commit
868a35337c
@ -43,10 +43,10 @@ interface CompatibilityStatus {
|
|||||||
}
|
}
|
||||||
|
|
||||||
interface DriveSelectorProps {
|
interface DriveSelectorProps {
|
||||||
|
title: string;
|
||||||
close: () => void;
|
close: () => void;
|
||||||
selectDrive: (drive: Drive) => void;
|
setSelectedDrives: (drives: Drive[]) => void;
|
||||||
deselectDrive: (drive: Drive) => void;
|
isDriveSelected: (drive: Drive) => boolean;
|
||||||
isDriveSelected: (drive: Drive) => boolean;
|
|
||||||
isDriveValid: (drive: Drive) => boolean;
|
isDriveValid: (drive: Drive) => boolean;
|
||||||
getDriveBadges: (drive: Drive) => CompatibilityStatus[];
|
getDriveBadges: (drive: Drive) => CompatibilityStatus[];
|
||||||
}
|
}
|
||||||
@ -139,7 +139,7 @@ export class DriveSelector2 extends React.Component<
|
|||||||
for (let i = 0; i < drives.length; i++) {
|
for (let i = 0; i < drives.length; i++) {
|
||||||
drives[i] = { ...drives[i] };
|
drives[i] = { ...drives[i] };
|
||||||
}
|
}
|
||||||
drives = sortBy(drives, 'device');
|
drives = sortBy(drives, 'device');
|
||||||
const selected = drives.filter(d => this.props.isDriveSelected(d));
|
const selected = drives.filter(d => this.props.isDriveSelected(d));
|
||||||
const disabledDrives = drives
|
const disabledDrives = drives
|
||||||
.filter(d => !this.props.isDriveValid(d))
|
.filter(d => !this.props.isDriveValid(d))
|
||||||
@ -192,22 +192,20 @@ export class DriveSelector2 extends React.Component<
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
result.push(
|
result.push(
|
||||||
...this.props.getDriveBadges(row).map(
|
...this.props.getDriveBadges(row).map((status: CompatibilityStatus) => {
|
||||||
(status: CompatibilityStatus) => {
|
const props: {
|
||||||
const props: {
|
key: string;
|
||||||
key: string;
|
xsmall: true;
|
||||||
xsmall: true;
|
danger?: boolean;
|
||||||
danger?: boolean;
|
warning?: boolean;
|
||||||
warning?: boolean;
|
} = { xsmall: true, key: status.message };
|
||||||
} = { xsmall: true, key: status.message };
|
if (status.type === COMPATIBILITY_STATUS_TYPES.ERROR) {
|
||||||
if (status.type === COMPATIBILITY_STATUS_TYPES.ERROR) {
|
props.danger = true;
|
||||||
props.danger = true;
|
} else if (status.type === COMPATIBILITY_STATUS_TYPES.WARNING) {
|
||||||
} else if (status.type === COMPATIBILITY_STATUS_TYPES.WARNING) {
|
props.warning = true;
|
||||||
props.warning = true;
|
}
|
||||||
}
|
return <Badge {...props}>{status.message}</Badge>;
|
||||||
return <Badge {...props}>{status.message}</Badge>;
|
}),
|
||||||
},
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
return <React.Fragment>{result}</React.Fragment>;
|
return <React.Fragment>{result}</React.Fragment>;
|
||||||
}
|
}
|
||||||
@ -231,7 +229,7 @@ export class DriveSelector2 extends React.Component<
|
|||||||
<Modal
|
<Modal
|
||||||
titleElement={
|
titleElement={
|
||||||
<div style={titleStyle}>
|
<div style={titleStyle}>
|
||||||
Available targets
|
{this.props.title}
|
||||||
<span style={subtitleStyle}>
|
<span style={subtitleStyle}>
|
||||||
{this.state.drives.length} found
|
{this.state.drives.length} found
|
||||||
</span>
|
</span>
|
||||||
@ -261,13 +259,6 @@ export class DriveSelector2 extends React.Component<
|
|||||||
}
|
}
|
||||||
|
|
||||||
private onCheck(checkedDrives: Drive[]): void {
|
private onCheck(checkedDrives: Drive[]): void {
|
||||||
const checkedDevices = checkedDrives.map(d => d.device);
|
this.props.setSelectedDrives(checkedDrives);
|
||||||
for (const drive of getDrives()) {
|
|
||||||
if (checkedDevices.indexOf(drive.device) !== -1) {
|
|
||||||
this.props.selectDrive(drive);
|
|
||||||
} else {
|
|
||||||
this.props.deselectDrive(drive);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,10 +25,14 @@ angular
|
|||||||
.module(MODULE_NAME, [])
|
.module(MODULE_NAME, [])
|
||||||
.component(
|
.component(
|
||||||
'driveSelector2',
|
'driveSelector2',
|
||||||
react2angular(
|
react2angular(DriveSelector2, [
|
||||||
DriveSelector2,
|
'close',
|
||||||
['close', 'selectDrive', 'deselectDrive', 'isDriveSelected', 'isDriveValid', 'getDriveBadges']
|
'getDriveBadges',
|
||||||
)
|
'isDriveSelected',
|
||||||
)
|
'isDriveValid',
|
||||||
|
'setSelectedDrives',
|
||||||
|
'title',
|
||||||
|
]),
|
||||||
|
);
|
||||||
|
|
||||||
export = MODULE_NAME;
|
export = MODULE_NAME;
|
||||||
|
@ -22,6 +22,7 @@ const prettyBytes = require('pretty-bytes')
|
|||||||
const store = require('../../../models/store')
|
const store = require('../../../models/store')
|
||||||
// eslint-disable-next-line node/no-missing-require
|
// eslint-disable-next-line node/no-missing-require
|
||||||
const settings = require('../../../models/settings')
|
const settings = require('../../../models/settings')
|
||||||
|
const availableDrives = require('../../../models/available-drives')
|
||||||
const selectionState = require('../../../models/selection-state')
|
const selectionState = require('../../../models/selection-state')
|
||||||
const driveConstraints = require('../../../modules/drive-constraints')
|
const driveConstraints = require('../../../modules/drive-constraints')
|
||||||
const analytics = require('../../../modules/analytics')
|
const analytics = require('../../../modules/analytics')
|
||||||
@ -171,12 +172,15 @@ module.exports = function ($timeout, DriveSelectorService) {
|
|||||||
$timeout()
|
$timeout()
|
||||||
}
|
}
|
||||||
|
|
||||||
this.selectDrive = (drive) => {
|
this.setSelectedDrives = (drives) => {
|
||||||
return selectionState.selectDrive(drive.device)
|
const devices = drives.map(d => d.device);
|
||||||
}
|
for (const drive of availableDrives.getDrives()) {
|
||||||
|
if (devices.indexOf(drive.device) !== -1) {
|
||||||
this.deselectDrive = (drive) => {
|
selectionState.selectDrive(drive.device)
|
||||||
return selectionState.deselectDrive(drive.device)
|
} else {
|
||||||
|
selectionState.deselectDrive(drive.device)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.isDriveSelected = (drive) => {
|
this.isDriveSelected = (drive) => {
|
||||||
|
@ -277,28 +277,38 @@ module.exports = function (
|
|||||||
$timeout()
|
$timeout()
|
||||||
}
|
}
|
||||||
|
|
||||||
this.closeDriveSelector = () => {
|
this.closeDriveSelectorModal = () => {
|
||||||
this.driveSelectorModalOpen = false;
|
this.driveSelectorModalOpen = false;
|
||||||
$timeout()
|
$timeout()
|
||||||
}
|
}
|
||||||
|
|
||||||
this.selectDrive = (drive) => {
|
this.setSelectedDrives = (drives) => {
|
||||||
selectionState.selectImage({
|
const currentlySelected = this.getSelectedDrive()
|
||||||
path: drive.device,
|
if (currentlySelected) {
|
||||||
size: drive.size,
|
drives = drives.filter(d => d.device !== currentlySelected.path)
|
||||||
isDrive: true
|
}
|
||||||
})
|
if (drives.length === 0) {
|
||||||
|
this.deselectImage()
|
||||||
|
} else {
|
||||||
|
selectionState.selectImage({
|
||||||
|
path: drives[0].device,
|
||||||
|
size: drives[0].size,
|
||||||
|
isDrive: true
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.deselectDrive = (drive) => {
|
this.getSelectedDrive = () => {
|
||||||
if (this.isDriveSelected(drive)) {
|
const image = selectionState.getImage()
|
||||||
this.deselectImage()
|
if (image && image.isDrive) {
|
||||||
|
return image
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.isDriveSelected = (drive) => {
|
this.isDriveSelected = (drive) => {
|
||||||
const image = selectionState.getImage()
|
const selectedDrive = this.getSelectedDrive()
|
||||||
return image && image.isDrive && image.path === drive.device
|
return selectedDrive && selectedDrive.path === drive.device
|
||||||
}
|
}
|
||||||
|
|
||||||
this.isDriveValid = (drive) => {
|
this.isDriveValid = (drive) => {
|
||||||
|
@ -2,9 +2,9 @@
|
|||||||
<div class="col-xs" ng-controller="ImageSelectionController as image">
|
<div class="col-xs" ng-controller="ImageSelectionController as image">
|
||||||
<drive-selector-2
|
<drive-selector-2
|
||||||
ng-if="image.driveSelectorModalOpen"
|
ng-if="image.driveSelectorModalOpen"
|
||||||
|
title="'Select a source drive'"
|
||||||
close="image.closeDriveSelectorModal"
|
close="image.closeDriveSelectorModal"
|
||||||
select-drive="image.selectDrive"
|
set-selected-drives="image.setSelectedDrives"
|
||||||
deselect-drive="image.deselectDrive"
|
|
||||||
is-drive-selected="image.isDriveSelected"
|
is-drive-selected="image.isDriveSelected"
|
||||||
is-drive-valid="image.isDriveValid"
|
is-drive-valid="image.isDriveValid"
|
||||||
get-drive-badges="image.getDriveBadges"
|
get-drive-badges="image.getDriveBadges"
|
||||||
@ -39,9 +39,9 @@
|
|||||||
<div class="col-xs" ng-controller="DriveSelectionController as drive">
|
<div class="col-xs" ng-controller="DriveSelectionController as drive">
|
||||||
<drive-selector-2
|
<drive-selector-2
|
||||||
ng-if="drive.driveSelectorModalOpen"
|
ng-if="drive.driveSelectorModalOpen"
|
||||||
|
title="'Available targets'"
|
||||||
close="drive.closeDriveSelectorModal"
|
close="drive.closeDriveSelectorModal"
|
||||||
select-drive="drive.selectDrive"
|
set-selected-drives="drive.setSelectedDrives"
|
||||||
deselect-drive="drive.deselectDrive"
|
|
||||||
is-drive-selected="drive.isDriveSelected"
|
is-drive-selected="drive.isDriveSelected"
|
||||||
is-drive-valid="drive.isDriveValid"
|
is-drive-valid="drive.isDriveValid"
|
||||||
get-drive-badges="drive.getDriveBadges"
|
get-drive-badges="drive.getDriveBadges"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user