chore: coding style fixes
This commit is contained in:
parent
da62cba3f8
commit
7400bd657a
2
flow-typed/promise-toolbox.js
vendored
2
flow-typed/promise-toolbox.js
vendored
@ -3,7 +3,7 @@ declare module 'promise-toolbox' {
|
|||||||
declare export function defer<T>(): {|
|
declare export function defer<T>(): {|
|
||||||
promise: Promise<T>,
|
promise: Promise<T>,
|
||||||
reject: T => void,
|
reject: T => void,
|
||||||
resolve: T => void
|
resolve: T => void,
|
||||||
|}
|
|}
|
||||||
declare export function fromEvent(emitter: mixed, string): Promise<mixed>
|
declare export function fromEvent(emitter: mixed, string): Promise<mixed>
|
||||||
declare export function ignoreErrors(): Promise<void>
|
declare export function ignoreErrors(): Promise<void>
|
||||||
|
@ -58,7 +58,8 @@ export const configurationSchema = {
|
|||||||
},
|
},
|
||||||
port: {
|
port: {
|
||||||
type: 'integer',
|
type: 'integer',
|
||||||
description: 'port of the SMTP server (defaults to 25 or 465 for TLS)',
|
description:
|
||||||
|
'port of the SMTP server (defaults to 25 or 465 for TLS)',
|
||||||
},
|
},
|
||||||
secure: {
|
secure: {
|
||||||
default: false,
|
default: false,
|
||||||
|
@ -8,12 +8,14 @@ try {
|
|||||||
const filtered = frames.filter(function (frame) {
|
const filtered = frames.filter(function (frame) {
|
||||||
const name = frame && frame.getFileName()
|
const name = frame && frame.getFileName()
|
||||||
|
|
||||||
return (// has a filename
|
return (
|
||||||
|
// has a filename
|
||||||
name &&
|
name &&
|
||||||
// contains a separator (no internal modules)
|
// contains a separator (no internal modules)
|
||||||
name.indexOf(sep) !== -1 &&
|
name.indexOf(sep) !== -1 &&
|
||||||
// does not start with `internal`
|
// does not start with `internal`
|
||||||
name.lastIndexOf('internal', 0) !== -1)
|
name.lastIndexOf('internal', 0) !== -1
|
||||||
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
// depd (used amongst other by express requires at least 3 frames
|
// depd (used amongst other by express requires at least 3 frames
|
||||||
|
@ -42,7 +42,9 @@ function handleGetAllObjects (req, res, { filter, limit }) {
|
|||||||
|
|
||||||
export function getAllObjects ({ filter, limit, ndjson = false }) {
|
export function getAllObjects ({ filter, limit, ndjson = false }) {
|
||||||
return ndjson
|
return ndjson
|
||||||
? this.registerHttpRequest(handleGetAllObjects, { filter, limit }).then($getFrom => ({ $getFrom }))
|
? this.registerHttpRequest(handleGetAllObjects, { filter, limit }).then(
|
||||||
|
$getFrom => ({ $getFrom })
|
||||||
|
)
|
||||||
: this.getObjects({ filter, limit })
|
: this.getObjects({ filter, limit })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -154,7 +154,8 @@ export default class {
|
|||||||
id: await generateToken(),
|
id: await generateToken(),
|
||||||
user_id: userId,
|
user_id: userId,
|
||||||
expiration:
|
expiration:
|
||||||
Date.now() + (typeof expiresIn === 'string' ? ms(expiresIn) : expiresIn),
|
Date.now() +
|
||||||
|
(typeof expiresIn === 'string' ? ms(expiresIn) : expiresIn),
|
||||||
})
|
})
|
||||||
|
|
||||||
await this._tokens.add(token)
|
await this._tokens.add(token)
|
||||||
|
@ -15,7 +15,7 @@ export type Schedule = {|
|
|||||||
jobId: string,
|
jobId: string,
|
||||||
name: string,
|
name: string,
|
||||||
timezone?: string,
|
timezone?: string,
|
||||||
userId: string
|
userId: string,
|
||||||
|}
|
|}
|
||||||
|
|
||||||
const normalize = schedule => {
|
const normalize = schedule => {
|
||||||
@ -45,7 +45,7 @@ export default class Scheduling {
|
|||||||
first: Function,
|
first: Function,
|
||||||
get: Function,
|
get: Function,
|
||||||
remove: Function,
|
remove: Function,
|
||||||
update: Function
|
update: Function,
|
||||||
|}
|
|}
|
||||||
_runs: { __proto__: null, [string]: () => void }
|
_runs: { __proto__: null, [string]: () => void }
|
||||||
|
|
||||||
|
@ -327,15 +327,15 @@ export default class SortedTable extends Component {
|
|||||||
'userData' in props
|
'userData' in props
|
||||||
? () => this.props.userData
|
? () => this.props.userData
|
||||||
: createCollectionWrapper(() => {
|
: createCollectionWrapper(() => {
|
||||||
const { props } = this
|
const { props } = this
|
||||||
const userData = {}
|
const userData = {}
|
||||||
Object.keys(props).forEach(key => {
|
Object.keys(props).forEach(key => {
|
||||||
if (startsWith(key, 'data-')) {
|
if (startsWith(key, 'data-')) {
|
||||||
userData[key.slice(5)] = props[key]
|
userData[key.slice(5)] = props[key]
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
return isEmpty(userData) ? undefined : userData
|
||||||
})
|
})
|
||||||
return isEmpty(userData) ? undefined : userData
|
|
||||||
})
|
|
||||||
|
|
||||||
let selectedColumn = props.defaultColumn
|
let selectedColumn = props.defaultColumn
|
||||||
if (selectedColumn == null) {
|
if (selectedColumn == null) {
|
||||||
@ -649,8 +649,8 @@ export default class SortedTable extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const method = (selected === undefined
|
const method = (selected === undefined
|
||||||
? !selectedItemsIds.has(item.id)
|
? !selectedItemsIds.has(item.id)
|
||||||
: selected)
|
: selected)
|
||||||
? 'add'
|
? 'add'
|
||||||
: 'delete'
|
: 'delete'
|
||||||
|
|
||||||
@ -659,16 +659,16 @@ export default class SortedTable extends Component {
|
|||||||
selectedItemsIds:
|
selectedItemsIds:
|
||||||
range && (previous = this._previous) !== undefined
|
range && (previous = this._previous) !== undefined
|
||||||
? selectedItemsIds.withMutations(selectedItemsIds => {
|
? selectedItemsIds.withMutations(selectedItemsIds => {
|
||||||
let i = previous
|
let i = previous
|
||||||
let end = current
|
let end = current
|
||||||
if (previous > current) {
|
if (previous > current) {
|
||||||
i = current
|
i = current
|
||||||
end = previous
|
end = previous
|
||||||
}
|
}
|
||||||
for (; i <= end; ++i) {
|
for (; i <= end; ++i) {
|
||||||
selectedItemsIds[method](visibleItems[i].id)
|
selectedItemsIds[method](visibleItems[i].id)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
: selectedItemsIds[method](item.id),
|
: selectedItemsIds[method](item.id),
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -842,9 +842,9 @@ export default class SortedTable extends Component {
|
|||||||
{nItems === nAllItems
|
{nItems === nAllItems
|
||||||
? _('sortedTableNumberOfItems', { nTotal: nItems })
|
? _('sortedTableNumberOfItems', { nTotal: nItems })
|
||||||
: _('sortedTableNumberOfFilteredItems', {
|
: _('sortedTableNumberOfFilteredItems', {
|
||||||
nFiltered: nItems,
|
nFiltered: nItems,
|
||||||
nTotal: nAllItems,
|
nTotal: nAllItems,
|
||||||
})}
|
})}
|
||||||
{all ? (
|
{all ? (
|
||||||
<span>
|
<span>
|
||||||
{' '}
|
{' '}
|
||||||
|
@ -81,7 +81,7 @@ export default class MigrateVmModalBody extends BaseComponent {
|
|||||||
host =>
|
host =>
|
||||||
host
|
host
|
||||||
? sr =>
|
? sr =>
|
||||||
isSrWritable(sr) &&
|
isSrWritable(sr) &&
|
||||||
(sr.$container === host.id || sr.$container === host.$pool)
|
(sr.$container === host.id || sr.$container === host.$pool)
|
||||||
: false
|
: false
|
||||||
)
|
)
|
||||||
|
@ -73,7 +73,7 @@ export default class MigrateVmsModalBody extends BaseComponent {
|
|||||||
host =>
|
host =>
|
||||||
host
|
host
|
||||||
? sr =>
|
? sr =>
|
||||||
isSrWritable(sr) &&
|
isSrWritable(sr) &&
|
||||||
(sr.$container === host.id || sr.$container === host.$pool)
|
(sr.$container === host.id || sr.$container === host.$pool)
|
||||||
: false
|
: false
|
||||||
)
|
)
|
||||||
|
@ -43,13 +43,13 @@ const formatFilesOptions = (rawFiles, path) => {
|
|||||||
const files =
|
const files =
|
||||||
path !== '/'
|
path !== '/'
|
||||||
? [
|
? [
|
||||||
{
|
{
|
||||||
name: '..',
|
name: '..',
|
||||||
id: '..',
|
id: '..',
|
||||||
path: getParentPath(path),
|
path: getParentPath(path),
|
||||||
content: {},
|
content: {},
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
: []
|
: []
|
||||||
|
|
||||||
return files.concat(
|
return files.concat(
|
||||||
|
@ -425,32 +425,32 @@ export default class New extends Component {
|
|||||||
type: 'crossProduct',
|
type: 'crossProduct',
|
||||||
items: isArray(vms.vms)
|
items: isArray(vms.vms)
|
||||||
? [
|
? [
|
||||||
{
|
{
|
||||||
type: 'set',
|
type: 'set',
|
||||||
values: map(vms.vms, vm => ({ id: extractId(vm) })),
|
values: map(vms.vms, vm => ({ id: extractId(vm) })),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'set',
|
type: 'set',
|
||||||
values: [mainParams],
|
values: [mainParams],
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
: [
|
: [
|
||||||
{
|
{
|
||||||
type: 'set',
|
type: 'set',
|
||||||
values: [mainParams],
|
values: [mainParams],
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'map',
|
|
||||||
collection: {
|
|
||||||
type: 'fetchObjects',
|
|
||||||
pattern: this._constructPattern(vms),
|
|
||||||
},
|
},
|
||||||
iteratee: {
|
{
|
||||||
type: 'extractProperties',
|
type: 'map',
|
||||||
mapping: { id: 'id' },
|
collection: {
|
||||||
|
type: 'fetchObjects',
|
||||||
|
pattern: this._constructPattern(vms),
|
||||||
|
},
|
||||||
|
iteratee: {
|
||||||
|
type: 'extractProperties',
|
||||||
|
mapping: { id: 'id' },
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
],
|
||||||
],
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -607,10 +607,10 @@ export default class New extends Component {
|
|||||||
</fieldset>
|
</fieldset>
|
||||||
{(method === 'vm.rollingDeltaBackup' ||
|
{(method === 'vm.rollingDeltaBackup' ||
|
||||||
method === 'vm.deltaCopy') && (
|
method === 'vm.deltaCopy') && (
|
||||||
<div className='alert alert-warning' role='alert'>
|
<div className='alert alert-warning' role='alert'>
|
||||||
<Icon icon='error' /> {_('backupVersionWarning')}
|
<Icon icon='error' /> {_('backupVersionWarning')}
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
{backupInfo && (
|
{backupInfo && (
|
||||||
<div>
|
<div>
|
||||||
<GenericInput
|
<GenericInput
|
||||||
@ -704,31 +704,31 @@ export default class New extends Component {
|
|||||||
backupInfo &&
|
backupInfo &&
|
||||||
process.env.XOA_PLAN <
|
process.env.XOA_PLAN <
|
||||||
REQUIRED_XOA_PLAN[backupInfo.jobKey] ? (
|
REQUIRED_XOA_PLAN[backupInfo.jobKey] ? (
|
||||||
<Upgrade
|
<Upgrade
|
||||||
place='newBackup'
|
place='newBackup'
|
||||||
available={REQUIRED_XOA_PLAN[backupInfo.jobKey]}
|
available={REQUIRED_XOA_PLAN[backupInfo.jobKey]}
|
||||||
/>
|
/>
|
||||||
) : smartBackupMode && process.env.XOA_PLAN < 3 ? (
|
) : smartBackupMode && process.env.XOA_PLAN < 3 ? (
|
||||||
<Upgrade place='newBackup' available={3} />
|
<Upgrade place='newBackup' available={3} />
|
||||||
) : (
|
) : (
|
||||||
<fieldset className='pull-right pt-1'>
|
<fieldset className='pull-right pt-1'>
|
||||||
<ActionButton
|
<ActionButton
|
||||||
btnStyle='primary'
|
btnStyle='primary'
|
||||||
className='mr-1'
|
className='mr-1'
|
||||||
disabled={!backupInfo}
|
disabled={!backupInfo}
|
||||||
form='form-new-vm-backup'
|
form='form-new-vm-backup'
|
||||||
handler={this._handleSubmit}
|
handler={this._handleSubmit}
|
||||||
icon='save'
|
icon='save'
|
||||||
redirectOnSuccess='/backup/overview'
|
redirectOnSuccess='/backup/overview'
|
||||||
size='large'
|
size='large'
|
||||||
>
|
>
|
||||||
{_('saveBackupJob')}
|
{_('saveBackupJob')}
|
||||||
</ActionButton>
|
</ActionButton>
|
||||||
<Button onClick={this._handleReset} size='large'>
|
<Button onClick={this._handleReset} size='large'>
|
||||||
{_('selectTableReset')}
|
{_('selectTableReset')}
|
||||||
</Button>
|
</Button>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
)}
|
)}
|
||||||
</Col>
|
</Col>
|
||||||
</Row>
|
</Row>
|
||||||
</Container>
|
</Container>
|
||||||
|
@ -647,12 +647,12 @@ export default class Home extends Component {
|
|||||||
this._setFilter(
|
this._setFilter(
|
||||||
pools.length
|
pools.length
|
||||||
? ComplexMatcher.setPropertyClause(
|
? ComplexMatcher.setPropertyClause(
|
||||||
filter,
|
filter,
|
||||||
'$pool',
|
'$pool',
|
||||||
new ComplexMatcher.Or(
|
new ComplexMatcher.Or(
|
||||||
map(pools, pool => new ComplexMatcher.String(pool.id))
|
map(pools, pool => new ComplexMatcher.String(pool.id))
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
|
||||||
: ComplexMatcher.setPropertyClause(filter, '$pool', undefined)
|
: ComplexMatcher.setPropertyClause(filter, '$pool', undefined)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -662,12 +662,12 @@ export default class Home extends Component {
|
|||||||
this._setFilter(
|
this._setFilter(
|
||||||
hosts.length
|
hosts.length
|
||||||
? ComplexMatcher.setPropertyClause(
|
? ComplexMatcher.setPropertyClause(
|
||||||
filter,
|
filter,
|
||||||
'$container',
|
'$container',
|
||||||
new ComplexMatcher.Or(
|
new ComplexMatcher.Or(
|
||||||
map(hosts, host => new ComplexMatcher.String(host.id))
|
map(hosts, host => new ComplexMatcher.String(host.id))
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
|
||||||
: ComplexMatcher.setPropertyClause(filter, '$container', undefined)
|
: ComplexMatcher.setPropertyClause(filter, '$container', undefined)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -677,12 +677,12 @@ export default class Home extends Component {
|
|||||||
this._setFilter(
|
this._setFilter(
|
||||||
tags.length
|
tags.length
|
||||||
? ComplexMatcher.setPropertyClause(
|
? ComplexMatcher.setPropertyClause(
|
||||||
filter,
|
filter,
|
||||||
'tags',
|
'tags',
|
||||||
new ComplexMatcher.Or(
|
new ComplexMatcher.Or(
|
||||||
map(tags, tag => new ComplexMatcher.String(tag.id))
|
map(tags, tag => new ComplexMatcher.String(tag.id))
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
|
||||||
: ComplexMatcher.setPropertyClause(filter, 'tags', undefined)
|
: ComplexMatcher.setPropertyClause(filter, 'tags', undefined)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -692,12 +692,12 @@ export default class Home extends Component {
|
|||||||
this._setFilter(
|
this._setFilter(
|
||||||
resourceSets.length
|
resourceSets.length
|
||||||
? ComplexMatcher.setPropertyClause(
|
? ComplexMatcher.setPropertyClause(
|
||||||
filter,
|
filter,
|
||||||
'resourceSet',
|
'resourceSet',
|
||||||
new ComplexMatcher.Or(
|
new ComplexMatcher.Or(
|
||||||
map(resourceSets, set => new ComplexMatcher.String(set.id))
|
map(resourceSets, set => new ComplexMatcher.String(set.id))
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
|
||||||
: ComplexMatcher.setPropertyClause(filter, 'resourceSet', undefined)
|
: ComplexMatcher.setPropertyClause(filter, 'resourceSet', undefined)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -892,15 +892,15 @@ export default class Home extends Component {
|
|||||||
<span className='text-muted'>
|
<span className='text-muted'>
|
||||||
{this._getNumberOfSelectedItems()
|
{this._getNumberOfSelectedItems()
|
||||||
? _('homeSelectedItems', {
|
? _('homeSelectedItems', {
|
||||||
icon: <Icon icon={type.toLowerCase()} />,
|
icon: <Icon icon={type.toLowerCase()} />,
|
||||||
selected: this._getNumberOfSelectedItems(),
|
selected: this._getNumberOfSelectedItems(),
|
||||||
total: nItems,
|
total: nItems,
|
||||||
})
|
})
|
||||||
: _('homeDisplayedItems', {
|
: _('homeDisplayedItems', {
|
||||||
displayed: filteredItems.length,
|
displayed: filteredItems.length,
|
||||||
icon: <Icon icon={type.toLowerCase()} />,
|
icon: <Icon icon={type.toLowerCase()} />,
|
||||||
total: nItems,
|
total: nItems,
|
||||||
})}
|
})}
|
||||||
</span>
|
</span>
|
||||||
</Col>
|
</Col>
|
||||||
<Col mediumSize={8} className='text-xs-right hidden-sm-down'>
|
<Col mediumSize={8} className='text-xs-right hidden-sm-down'>
|
||||||
|
@ -42,7 +42,10 @@ import styles from './index.css'
|
|||||||
})
|
})
|
||||||
@connectStore(() => ({
|
@connectStore(() => ({
|
||||||
container: createGetObject((_, props) => props.item.$container),
|
container: createGetObject((_, props) => props.item.$container),
|
||||||
totalDiskSize: createSumBy(createGetVmDisks((_, props) => props.item), 'size'),
|
totalDiskSize: createSumBy(
|
||||||
|
createGetVmDisks((_, props) => props.item),
|
||||||
|
'size'
|
||||||
|
),
|
||||||
}))
|
}))
|
||||||
export default class VmItem extends Component {
|
export default class VmItem extends Component {
|
||||||
get _isRunning () {
|
get _isRunning () {
|
||||||
|
@ -765,8 +765,8 @@ export default class NewVm extends BaseComponent {
|
|||||||
<h2>
|
<h2>
|
||||||
{isAdmin || !isEmpty(resourceSets)
|
{isAdmin || !isEmpty(resourceSets)
|
||||||
? _('newVmCreateNewVmOn', {
|
? _('newVmCreateNewVmOn', {
|
||||||
select: isAdmin ? selectPool : selectResourceSet,
|
select: isAdmin ? selectPool : selectResourceSet,
|
||||||
})
|
})
|
||||||
: _('newVmCreateNewVmNoPermission')}
|
: _('newVmCreateNewVmNoPermission')}
|
||||||
</h2>
|
</h2>
|
||||||
</Col>
|
</Col>
|
||||||
@ -1547,15 +1547,15 @@ export default class NewVm extends BaseComponent {
|
|||||||
),
|
),
|
||||||
template &&
|
template &&
|
||||||
template.virtualizationMode === 'hvm' && (
|
template.virtualizationMode === 'hvm' && (
|
||||||
<SectionContent>
|
<SectionContent>
|
||||||
<Item label={_('vmVgpu')}>
|
<Item label={_('vmVgpu')}>
|
||||||
<SelectVgpuType
|
<SelectVgpuType
|
||||||
onChange={this._linkState('vgpuType')}
|
onChange={this._linkState('vgpuType')}
|
||||||
predicate={this._getVgpuTypePredicate()}
|
predicate={this._getVgpuTypePredicate()}
|
||||||
/>
|
/>
|
||||||
</Item>
|
</Item>
|
||||||
</SectionContent>
|
</SectionContent>
|
||||||
),
|
),
|
||||||
]}
|
]}
|
||||||
</Section>
|
</Section>
|
||||||
)
|
)
|
||||||
|
@ -495,11 +495,11 @@ export default class TabXosan extends Component {
|
|||||||
size: isEmpty(vm && vm.$VBDs)
|
size: isEmpty(vm && vm.$VBDs)
|
||||||
? null
|
? null
|
||||||
: sum(
|
: sum(
|
||||||
map(vm.$VBDs, vbdId => {
|
map(vm.$VBDs, vbdId => {
|
||||||
const vdi = vdis[vbds[vbdId].VDI]
|
const vdi = vdis[vbds[vbdId].VDI]
|
||||||
return vdi === undefined ? 0 : vdi.size
|
return vdi === undefined ? 0 : vdi.size
|
||||||
})
|
})
|
||||||
),
|
),
|
||||||
vm,
|
vm,
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -118,8 +118,8 @@ export default connectStore(() => {
|
|||||||
<p className='text-xs-center'>
|
<p className='text-xs-center'>
|
||||||
{lastShutdownTime
|
{lastShutdownTime
|
||||||
? _('vmHaltedSince', {
|
? _('vmHaltedSince', {
|
||||||
ago: <FormattedRelative value={lastShutdownTime * 1000} />,
|
ago: <FormattedRelative value={lastShutdownTime * 1000} />,
|
||||||
})
|
})
|
||||||
: _('vmNotRunning')}
|
: _('vmNotRunning')}
|
||||||
</p>
|
</p>
|
||||||
)}
|
)}
|
||||||
|
@ -54,9 +54,9 @@ const update = () => xoaUpdater.update()
|
|||||||
const upgrade = ({ runningJobsExist }) =>
|
const upgrade = ({ runningJobsExist }) =>
|
||||||
runningJobsExist
|
runningJobsExist
|
||||||
? confirm({
|
? confirm({
|
||||||
title: _('upgradeWarningTitle'),
|
title: _('upgradeWarningTitle'),
|
||||||
body: _('upgradeWarningMessage'),
|
body: _('upgradeWarningMessage'),
|
||||||
}).then(() => xoaUpdater.upgrade())
|
}).then(() => xoaUpdater.upgrade())
|
||||||
: xoaUpdater.upgrade()
|
: xoaUpdater.upgrade()
|
||||||
|
|
||||||
@addSubscriptions({
|
@addSubscriptions({
|
||||||
|
@ -70,12 +70,12 @@ const XOSAN_COLUMNS = [
|
|||||||
const badStatus = every(status[sr.id])
|
const badStatus = every(status[sr.id])
|
||||||
? null
|
? null
|
||||||
: _('xosanBadStatus', {
|
: _('xosanBadStatus', {
|
||||||
badStatuses: (
|
badStatuses: (
|
||||||
<ul>
|
<ul>
|
||||||
{map(status, (_, status) => <li key={status}>{status}</li>)}
|
{map(status, (_, status) => <li key={status}>{status}</li>)}
|
||||||
</ul>
|
</ul>
|
||||||
),
|
),
|
||||||
})
|
})
|
||||||
|
|
||||||
if (pbdsDetached != null || badStatus != null) {
|
if (pbdsDetached != null || badStatus != null) {
|
||||||
return (
|
return (
|
||||||
|
Loading…
Reference in New Issue
Block a user