diff --git a/src/common/editable/index.js b/src/common/editable/index.js
index 795cd9330..183e06128 100644
--- a/src/common/editable/index.js
+++ b/src/common/editable/index.js
@@ -160,9 +160,9 @@ class Editable extends Component {
)}
>
{this._renderDisplay()}
diff --git a/src/common/form/select.js b/src/common/form/select.js
index 0dc8292fc..f4f965f7b 100644
--- a/src/common/form/select.js
+++ b/src/common/form/select.js
@@ -114,8 +114,8 @@ export default class Select extends Component {
return (
selectValue(option))}
- onMouseOver={!disabled && (() => focusOption(option))}
+ onClick={disabled ? undefined : () => selectValue(option)}
+ onMouseOver={disabled ? undefined : () => focusOption(option)}
style={style}
key={key}
>
diff --git a/src/common/form/toggle.js b/src/common/form/toggle.js
index 53b869ff7..f02331482 100644
--- a/src/common/form/toggle.js
+++ b/src/common/form/toggle.js
@@ -9,12 +9,12 @@ import propTypes from '../prop-types-decorator'
@uncontrollableInput()
@propTypes({
className: propTypes.string,
- onChange: propTypes.func,
+ onChange: propTypes.func.isRequired,
icon: propTypes.string,
iconOn: propTypes.string,
iconOff: propTypes.string,
iconSize: propTypes.number,
- value: propTypes.bool,
+ value: propTypes.bool.isRequired,
})
export default class Toggle extends Component {
static defaultProps = {
diff --git a/src/common/no-objects.js b/src/common/no-objects.js
index a202a638c..b3560c3ea 100644
--- a/src/common/no-objects.js
+++ b/src/common/no-objects.js
@@ -13,19 +13,29 @@ import propTypes from './prop-types-decorator'
// {children}
//
// ````
-const NoObjects = ({ children, collection, emptyMessage }) =>
- collection == null ? (
-

- ) : isEmpty(collection) ? (
-
{emptyMessage}
+const NoObjects = props => {
+ const { collection } = props
+
+ if (collection == null) {
+ return

+ }
+
+ if (isEmpty(collection)) {
+ return
{props.emptyMessage}
+ }
+
+ const { children, component: Component, ...otherProps } = props
+ return children !== undefined ? (
+ children(otherProps)
) : (
-
{children}
+
)
+}
propTypes(NoObjects)({
- children: propTypes.node.isRequired,
- collection: propTypes.oneOfType([propTypes.array, propTypes.object])
- .isRequired,
+ children: propTypes.func,
+ collection: propTypes.oneOfType([propTypes.array, propTypes.object]),
+ component: propTypes.func,
emptyMessage: propTypes.node.isRequired,
})
export default NoObjects
diff --git a/src/common/xo-line-chart/index.js b/src/common/xo-line-chart/index.js
index 53b1acd8d..55de5fb07 100644
--- a/src/common/xo-line-chart/index.js
+++ b/src/common/xo-line-chart/index.js
@@ -173,7 +173,7 @@ export const CpuLineChart = injectIntl(
export const PoolCpuLineChart = injectIntl(
propTypes({
addSumSeries: propTypes.bool,
- data: propTypes.object.isRequired,
+ data: propTypes.array.isRequired,
options: propTypes.object,
})(({ addSumSeries, data, options = {}, intl }) => {
const firstHostData = data[0]
@@ -261,7 +261,7 @@ export const MemoryLineChart = injectIntl(
export const PoolMemoryLineChart = injectIntl(
propTypes({
addSumSeries: propTypes.bool,
- data: propTypes.object.isRequired,
+ data: propTypes.array.isRequired,
options: propTypes.object,
})(({ addSumSeries, data, options = {}, intl }) => {
const firstHostData = data[0]
@@ -384,7 +384,7 @@ export const VifLineChart = injectIntl(
export const PifLineChart = injectIntl(
propTypes({
addSumSeries: propTypes.bool,
- data: propTypes.object.isRequired,
+ data: propTypes.array.isRequired,
options: propTypes.object,
})(({ addSumSeries, data, options = {}, intl }) => {
const stats = data.stats.pifs
@@ -419,7 +419,7 @@ const ios = ['rx', 'tx']
export const PoolPifLineChart = injectIntl(
propTypes({
addSumSeries: propTypes.bool,
- data: propTypes.object.isRequired,
+ data: propTypes.array.isRequired,
options: propTypes.object,
})(({ addSumSeries, data, options = {}, intl }) => {
const firstHostData = data[0]
@@ -508,7 +508,7 @@ export const LoadLineChart = injectIntl(
export const PoolLoadLineChart = injectIntl(
propTypes({
addSumSeries: propTypes.bool,
- data: propTypes.object.isRequired,
+ data: propTypes.array.isRequired,
options: propTypes.object,
})(({ addSumSeries, data, options = {}, intl }) => {
const firstHostData = data[0]
diff --git a/src/xo-app/backup/overview/index.js b/src/xo-app/backup/overview/index.js
index 66ff40888..542e030da 100644
--- a/src/xo-app/backup/overview/index.js
+++ b/src/xo-app/backup/overview/index.js
@@ -226,11 +226,13 @@ export default class Overview extends Component {
collection={schedules}
emptyMessage={_('noScheduledJobs')}
>
-
+ {() => (
+
+ )}
diff --git a/src/xo-app/dashboard/health/index.js b/src/xo-app/dashboard/health/index.js
index 720b56c51..4770672cc 100644
--- a/src/xo-app/dashboard/health/index.js
+++ b/src/xo-app/dashboard/health/index.js
@@ -461,16 +461,18 @@ export default class Health extends Component {
collection={props.areObjectsFetched ? props.userSrs : null}
emptyMessage={_('noSrs')}
>
-
-
-
-
-
+ {() => (
+
+
+
+
+
+ )}
@@ -489,26 +491,28 @@ export default class Health extends Component {
}
emptyMessage={_('noOrphanedObject')}
>
-
-
-
-
-
-
-
-
-
-
-
-
+ {() => (
+
+
+
+
+
+
+
+
+
+
+
+
+ )}
@@ -525,13 +529,10 @@ export default class Health extends Component {
collection={
props.areObjectsFetched ? props.controlDomainVdis : null
}
+ columns={CONTROL_DOMAIN_VDI_COLUMNS}
+ component={SortedTable}
emptyMessage={_('noControlDomainVdis')}
- >
-
-
+ />
@@ -545,14 +546,11 @@ export default class Health extends Component {
-
-
+ shortcutsTarget='.orphaned-vms'
+ />
@@ -570,26 +568,28 @@ export default class Health extends Component {
}
emptyMessage={_('noAlarms')}
>
-
-
-
-
-
-
-
-
-
-
-
-
+ {() => (
+
+
+
+
+
+
+
+
+
+
+
+
+ )}
diff --git a/src/xo-app/home/index.js b/src/xo-app/home/index.js
index 429eb8449..f16cc905a 100644
--- a/src/xo-app/home/index.js
+++ b/src/xo-app/home/index.js
@@ -1083,7 +1083,9 @@ export default class Home extends Component {
map(visibleItems, (item, index) => (
- 1
const forceReboot = host => restartHost(host, true)
-const formatPack = ({ name, author, description, version }) => (
-
+const formatPack = ({ name, author, description, version }, key) => (
+
{_('supplementalPackTitle', { author, name })} |
{description} |
{version} |
@@ -116,7 +116,11 @@ export default connectStore(() => {
{_('hostPowerOnMode')} |
-
+
|
diff --git a/src/xo-app/logs/index.js b/src/xo-app/logs/index.js
index e9c44cb81..906809d78 100644
--- a/src/xo-app/logs/index.js
+++ b/src/xo-app/logs/index.js
@@ -413,13 +413,13 @@ export default class LogList extends Component {
-
-
-
+
)
diff --git a/src/xo-app/pool/tab-advanced.js b/src/xo-app/pool/tab-advanced.js
index 3226cb77c..080891e59 100644
--- a/src/xo-app/pool/tab-advanced.js
+++ b/src/xo-app/pool/tab-advanced.js
@@ -76,7 +76,9 @@ export default connectStore({
{map(gpuGroups, gpuGroup => (
- - {renderXoItem(gpuGroup)}
+ -
+ {renderXoItem(gpuGroup)}
+
))}
diff --git a/src/xo-app/self/index.js b/src/xo-app/self/index.js
index 95639b0f8..c6fa7522e 100644
--- a/src/xo-app/self/index.js
+++ b/src/xo-app/self/index.js
@@ -834,8 +834,11 @@ export default class Self extends Component {
{showNewResourceSetForm && [
- ,
-
,
+ ,
+
,
]}
{resourceSets
? isEmpty(resourceSets)
diff --git a/src/xo-app/settings/logs/index.js b/src/xo-app/settings/logs/index.js
index 568fc97d7..ee3682ed5 100644
--- a/src/xo-app/settings/logs/index.js
+++ b/src/xo-app/settings/logs/index.js
@@ -161,21 +161,23 @@ export default class Logs extends BaseComponent {
message={_('noLogs')}
predicate={this._getPredicate}
>
-
-
- (
+
+
+
+ {' '}
+
- {' '}
-
-
+
+ )}
)
}
diff --git a/src/xo-app/settings/servers/index.js b/src/xo-app/settings/servers/index.js
index 113fc8193..838962012 100644
--- a/src/xo-app/settings/servers/index.js
+++ b/src/xo-app/settings/servers/index.js
@@ -137,7 +137,7 @@ const COLUMNS = [
{
itemRenderer: server => (
editServer(server, { allowUnauthorized })
}
diff --git a/src/xo-app/tasks/index.js b/src/xo-app/tasks/index.js
index 3110f0234..8fc33f5b8 100644
--- a/src/xo-app/tasks/index.js
+++ b/src/xo-app/tasks/index.js
@@ -143,7 +143,7 @@ export default class Tasks extends Component {
props.pools,
pool =>
this._showPoolTasks(pool) && (
-
+
{pool.name_label}
diff --git a/src/xo-app/vm/tab-advanced.js b/src/xo-app/vm/tab-advanced.js
index 9191b8406..8a9005c28 100644
--- a/src/xo-app/vm/tab-advanced.js
+++ b/src/xo-app/vm/tab-advanced.js
@@ -209,26 +209,28 @@ class CoresPerSocket extends Component {
onChange={this._onChange}
value={selectedCoresPerSocket || ''}
>
- {_('vmChooseCoresPerSocket', message => (
-
+ {_({ key: 'none' }, 'vmChooseCoresPerSocket', message => (
+
))}
{this._selectedValueIsNotInOptions() &&
- _('vmCoresPerSocketIncorrectValue', message => (
-
- ))}
- {map(options, coresPerSocket => (
-
+ )
+ )}
+ {map(options, coresPerSocket =>
+ _(
+ { key: coresPerSocket },
+ 'vmCoresPerSocket',
+ {
nSockets: vm.CPUs.number / coresPerSocket,
nCores: coresPerSocket,
- })}
-
- ))}
+ },
+ message =>
+ )
+ )}
{' '}
{this._selectedValueIsNotInOptions() && (
@@ -398,7 +400,7 @@ export default connectStore(() => {
{_('autoPowerOn')} |
editVm(vm, { auto_poweron: value })}
/>
|