feat(defined): helpers to deal with undefined (#3436)
Extracted from xo-web.
This commit is contained in:
parent
a71740d49a
commit
83d1a5ff13
3
@xen-orchestra/defined/.babelrc.js
Normal file
3
@xen-orchestra/defined/.babelrc.js
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
module.exports = require('../../@xen-orchestra/babel-config')(
|
||||||
|
require('./package.json')
|
||||||
|
)
|
24
@xen-orchestra/defined/.npmignore
Normal file
24
@xen-orchestra/defined/.npmignore
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
/benchmark/
|
||||||
|
/benchmarks/
|
||||||
|
*.bench.js
|
||||||
|
*.bench.js.map
|
||||||
|
|
||||||
|
/examples/
|
||||||
|
example.js
|
||||||
|
example.js.map
|
||||||
|
*.example.js
|
||||||
|
*.example.js.map
|
||||||
|
|
||||||
|
/fixture/
|
||||||
|
/fixtures/
|
||||||
|
*.fixture.js
|
||||||
|
*.fixture.js.map
|
||||||
|
*.fixtures.js
|
||||||
|
*.fixtures.js.map
|
||||||
|
|
||||||
|
/test/
|
||||||
|
/tests/
|
||||||
|
*.spec.js
|
||||||
|
*.spec.js.map
|
||||||
|
|
||||||
|
__snapshots__/
|
49
@xen-orchestra/defined/README.md
Normal file
49
@xen-orchestra/defined/README.md
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
# ${pkg.name} [](https://travis-ci.org/${pkg.shortGitHubPath})
|
||||||
|
|
||||||
|
> ${pkg.description}
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
Installation of the [npm package](https://npmjs.org/package/${pkg.name}):
|
||||||
|
|
||||||
|
```
|
||||||
|
> npm install --save ${pkg.name}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
**TODO**
|
||||||
|
|
||||||
|
## Development
|
||||||
|
|
||||||
|
```
|
||||||
|
# Install dependencies
|
||||||
|
> yarn
|
||||||
|
|
||||||
|
# Run the tests
|
||||||
|
> yarn test
|
||||||
|
|
||||||
|
# Continuously compile
|
||||||
|
> yarn dev
|
||||||
|
|
||||||
|
# Continuously run the tests
|
||||||
|
> yarn dev-test
|
||||||
|
|
||||||
|
# Build for production (automatically called by npm install)
|
||||||
|
> yarn build
|
||||||
|
```
|
||||||
|
|
||||||
|
## Contributions
|
||||||
|
|
||||||
|
Contributions are *very* welcomed, either on the documentation or on
|
||||||
|
the code.
|
||||||
|
|
||||||
|
You may:
|
||||||
|
|
||||||
|
- report any [issue](${pkg.bugs})
|
||||||
|
you've encountered;
|
||||||
|
- fork and create a pull request.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
${pkg.license} © [${pkg.author.name}](${pkg.author.url})
|
48
@xen-orchestra/defined/package.json
Normal file
48
@xen-orchestra/defined/package.json
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
{
|
||||||
|
"private": true,
|
||||||
|
"name": "@xen-orchestra/defined",
|
||||||
|
"version": "0.0.0",
|
||||||
|
"license": "ISC",
|
||||||
|
"description": "",
|
||||||
|
"keywords": [],
|
||||||
|
"homepage": "https://github.com/vatesfr/xen-orchestra/tree/master/@xen-orchestra/defined",
|
||||||
|
"bugs": "https://github.com/vatesfr/xen-orchestra/issues",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/vatesfr/xen-orchestra.git"
|
||||||
|
},
|
||||||
|
"author": {
|
||||||
|
"name": "Julien Fontanet",
|
||||||
|
"email": "julien.fontanet@vates.fr"
|
||||||
|
},
|
||||||
|
"preferGlobal": false,
|
||||||
|
"main": "dist/",
|
||||||
|
"bin": {},
|
||||||
|
"files": [
|
||||||
|
"dist/"
|
||||||
|
],
|
||||||
|
"browserslist": [
|
||||||
|
">2%"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6"
|
||||||
|
},
|
||||||
|
"dependencies": {},
|
||||||
|
"devDependencies": {
|
||||||
|
"@babel/cli": "7.0.0",
|
||||||
|
"@babel/core": "7.0.0",
|
||||||
|
"@babel/preset-env": "7.0.0",
|
||||||
|
"@babel/preset-flow": "7.0.0",
|
||||||
|
"babel-plugin-lodash": "^3.3.2",
|
||||||
|
"cross-env": "^5.1.3",
|
||||||
|
"rimraf": "^2.6.2"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"build": "cross-env NODE_ENV=production babel --source-maps --out-dir=dist/ src/",
|
||||||
|
"clean": "rimraf dist/",
|
||||||
|
"dev": "cross-env NODE_ENV=development babel --watch --source-maps --out-dir=dist/ src/",
|
||||||
|
"prebuild": "yarn run clean",
|
||||||
|
"predev": "yarn run prebuild",
|
||||||
|
"prepublishOnly": "yarn run build"
|
||||||
|
}
|
||||||
|
}
|
@ -1,3 +1,5 @@
|
|||||||
|
// @flow
|
||||||
|
|
||||||
// Usage:
|
// Usage:
|
||||||
//
|
//
|
||||||
// ```js
|
// ```js
|
||||||
@ -39,7 +41,7 @@ export default function defined () {
|
|||||||
// const getFriendName = _ => _.friends[0].name
|
// const getFriendName = _ => _.friends[0].name
|
||||||
// const friendName = get(getFriendName, props.user)
|
// const friendName = get(getFriendName, props.user)
|
||||||
// ```
|
// ```
|
||||||
export const get = (accessor, arg) => {
|
export const get = (accessor: (input: ?any) => any, arg: ?any) => {
|
||||||
try {
|
try {
|
||||||
return accessor(arg)
|
return accessor(arg)
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@ -58,5 +60,5 @@ export const get = (accessor, arg) => {
|
|||||||
// _ => new ProxyAgent(_)
|
// _ => new ProxyAgent(_)
|
||||||
// )
|
// )
|
||||||
// ```
|
// ```
|
||||||
export const ifDef = (value, thenFn) =>
|
export const ifDef = (value: ?any, thenFn: (value: any) => any) =>
|
||||||
value !== undefined ? thenFn(value) : value
|
value !== undefined ? thenFn(value) : value
|
@ -27,8 +27,9 @@
|
|||||||
|
|
||||||
- xo-server-backup-reports v0.14.0
|
- xo-server-backup-reports v0.14.0
|
||||||
- @xen-orchestra/async-map v0.0.0
|
- @xen-orchestra/async-map v0.0.0
|
||||||
- @xen-orchestra/mixin v0.0.0
|
- @xen-orchestra/defined v0.0.0
|
||||||
- @xen-orchestra/emit-async v0.0.0
|
- @xen-orchestra/emit-async v0.0.0
|
||||||
|
- @xen-orchestra/mixin v0.0.0
|
||||||
- xo-server v5.27.0
|
- xo-server v5.27.0
|
||||||
- xo-web v5.27.0
|
- xo-web v5.27.0
|
||||||
|
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
"@julien-f/freactal": "0.4.0",
|
"@julien-f/freactal": "0.4.0",
|
||||||
"@nraynaud/novnc": "0.6.1",
|
"@nraynaud/novnc": "0.6.1",
|
||||||
"@xen-orchestra/cron": "^1.0.3",
|
"@xen-orchestra/cron": "^1.0.3",
|
||||||
|
"@xen-orchestra/defined": "^0.0.0",
|
||||||
"ansi_up": "^3.0.0",
|
"ansi_up": "^3.0.0",
|
||||||
"asap": "^2.0.6",
|
"asap": "^2.0.6",
|
||||||
"babel-core": "^6.26.0",
|
"babel-core": "^6.26.0",
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import BaseComponent from 'base-component'
|
import BaseComponent from 'base-component'
|
||||||
import classNames from 'classnames'
|
import classNames from 'classnames'
|
||||||
|
import defined from '@xen-orchestra/defined'
|
||||||
import Icon from 'icon'
|
import Icon from 'icon'
|
||||||
import map from 'lodash/map'
|
import map from 'lodash/map'
|
||||||
import randomPassword from 'random-password'
|
import randomPassword from 'random-password'
|
||||||
@ -11,7 +12,6 @@ import { DropdownButton, MenuItem } from 'react-bootstrap-4/lib'
|
|||||||
|
|
||||||
import Button from '../button'
|
import Button from '../button'
|
||||||
import Component from '../base-component'
|
import Component from '../base-component'
|
||||||
import defined from '../xo-defined'
|
|
||||||
import getEventValue from '../get-event-value'
|
import getEventValue from '../get-event-value'
|
||||||
import propTypes from '../prop-types-decorator'
|
import propTypes from '../prop-types-decorator'
|
||||||
import { formatSizeRaw, parseSize } from '../utils'
|
import { formatSizeRaw, parseSize } from '../utils'
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import _ from 'intl'
|
import _ from 'intl'
|
||||||
import PropTypes from 'prop-types'
|
import PropTypes from 'prop-types'
|
||||||
import React from 'react'
|
import React from 'react'
|
||||||
|
import { get } from '@xen-orchestra/defined'
|
||||||
import { startsWith } from 'lodash'
|
import { startsWith } from 'lodash'
|
||||||
|
|
||||||
import Icon from './icon'
|
import Icon from './icon'
|
||||||
@ -9,7 +10,6 @@ import propTypes from './prop-types-decorator'
|
|||||||
import { addSubscriptions, connectStore, formatSize } from './utils'
|
import { addSubscriptions, connectStore, formatSize } from './utils'
|
||||||
import { createGetObject, createSelector } from './selectors'
|
import { createGetObject, createSelector } from './selectors'
|
||||||
import { FormattedDate } from 'react-intl'
|
import { FormattedDate } from 'react-intl'
|
||||||
import { get } from './xo-defined'
|
|
||||||
import { isSrWritable, subscribeRemotes } from './xo'
|
import { isSrWritable, subscribeRemotes } from './xo'
|
||||||
|
|
||||||
// ===================================================================
|
// ===================================================================
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import * as CM from 'complex-matcher'
|
import * as CM from 'complex-matcher'
|
||||||
import _ from 'intl'
|
import _ from 'intl'
|
||||||
import classNames from 'classnames'
|
import classNames from 'classnames'
|
||||||
|
import defined, { get } from '@xen-orchestra/defined'
|
||||||
import DropdownMenu from 'react-bootstrap-4/lib/DropdownMenu' // https://phabricator.babeljs.io/T6662 so Dropdown.Menu won't work like https://react-bootstrap.github.io/components.html#btn-dropdowns-custom
|
import DropdownMenu from 'react-bootstrap-4/lib/DropdownMenu' // https://phabricator.babeljs.io/T6662 so Dropdown.Menu won't work like https://react-bootstrap.github.io/components.html#btn-dropdowns-custom
|
||||||
import DropdownToggle from 'react-bootstrap-4/lib/DropdownToggle' // https://phabricator.babeljs.io/T6662 so Dropdown.Toggle won't work https://react-bootstrap.github.io/components.html#btn-dropdowns-custom
|
import DropdownToggle from 'react-bootstrap-4/lib/DropdownToggle' // https://phabricator.babeljs.io/T6662 so Dropdown.Toggle won't work https://react-bootstrap.github.io/components.html#btn-dropdowns-custom
|
||||||
import React from 'react'
|
import React from 'react'
|
||||||
@ -25,7 +26,6 @@ import ActionRowButton from '../action-row-button'
|
|||||||
import Button from '../button'
|
import Button from '../button'
|
||||||
import ButtonGroup from '../button-group'
|
import ButtonGroup from '../button-group'
|
||||||
import Component from '../base-component'
|
import Component from '../base-component'
|
||||||
import defined, { get } from '../xo-defined'
|
|
||||||
import Icon from '../icon'
|
import Icon from '../icon'
|
||||||
import Pagination from '../pagination'
|
import Pagination from '../pagination'
|
||||||
import propTypes from '../prop-types-decorator'
|
import propTypes from '../prop-types-decorator'
|
||||||
|
@ -9,7 +9,7 @@ import { Card, CardHeader, CardBlock } from 'card'
|
|||||||
import { confirm } from 'modal'
|
import { confirm } from 'modal'
|
||||||
import { constructQueryString } from 'smart-backup'
|
import { constructQueryString } from 'smart-backup'
|
||||||
import { Container, Row, Col } from 'grid'
|
import { Container, Row, Col } from 'grid'
|
||||||
import { get } from 'xo-defined'
|
import { get } from '@xen-orchestra/defined'
|
||||||
import { isEmpty, map, groupBy, some } from 'lodash'
|
import { isEmpty, map, groupBy, some } from 'lodash'
|
||||||
import { NavLink, NavTabs } from 'nav'
|
import { NavLink, NavTabs } from 'nav'
|
||||||
import { routes } from 'utils'
|
import { routes } from 'utils'
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import _ from 'intl'
|
import _ from 'intl'
|
||||||
import ActionButton from 'action-button'
|
import ActionButton from 'action-button'
|
||||||
import defined, { get } from 'xo-defined'
|
import defined, { get } from '@xen-orchestra/defined'
|
||||||
import Icon from 'icon'
|
import Icon from 'icon'
|
||||||
import Link from 'link'
|
import Link from 'link'
|
||||||
import moment from 'moment-timezone'
|
import moment from 'moment-timezone'
|
||||||
|
@ -6,7 +6,7 @@ import Button from 'button'
|
|||||||
import CenterPanel from 'center-panel'
|
import CenterPanel from 'center-panel'
|
||||||
import classNames from 'classnames'
|
import classNames from 'classnames'
|
||||||
import Component from 'base-component'
|
import Component from 'base-component'
|
||||||
import defined, { get } from 'xo-defined'
|
import defined, { get } from '@xen-orchestra/defined'
|
||||||
import Icon from 'icon'
|
import Icon from 'icon'
|
||||||
import invoke from 'invoke'
|
import invoke from 'invoke'
|
||||||
import Link from 'link'
|
import Link from 'link'
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import _ from 'intl'
|
import _ from 'intl'
|
||||||
import Component from 'base-component'
|
import Component from 'base-component'
|
||||||
import defined from 'xo-defined'
|
import defined from '@xen-orchestra/defined'
|
||||||
import Ellipsis, { EllipsisContainer } from 'ellipsis'
|
import Ellipsis, { EllipsisContainer } from 'ellipsis'
|
||||||
import Icon from 'icon'
|
import Icon from 'icon'
|
||||||
import Link from 'link'
|
import Link from 'link'
|
||||||
|
@ -15,7 +15,7 @@ import { connectStore, noop } from 'utils'
|
|||||||
import { Container, Row, Col } from 'grid'
|
import { Container, Row, Col } from 'grid'
|
||||||
import { createGetObjectsOfType } from 'selectors'
|
import { createGetObjectsOfType } from 'selectors'
|
||||||
import { error } from 'notification'
|
import { error } from 'notification'
|
||||||
import { get } from 'xo-defined'
|
import { get } from '@xen-orchestra/defined'
|
||||||
import { Select, Number } from 'editable'
|
import { Select, Number } from 'editable'
|
||||||
import { Toggle } from 'form'
|
import { Toggle } from 'form'
|
||||||
import {
|
import {
|
||||||
|
@ -2,7 +2,7 @@ import _, { messages } from 'intl'
|
|||||||
import ActionButton from 'action-button'
|
import ActionButton from 'action-button'
|
||||||
import Button from 'button'
|
import Button from 'button'
|
||||||
import Component from 'base-component'
|
import Component from 'base-component'
|
||||||
import defined from 'xo-defined'
|
import defined from '@xen-orchestra/defined'
|
||||||
import GenericInput from 'json-schema-input'
|
import GenericInput from 'json-schema-input'
|
||||||
import Icon from 'icon'
|
import Icon from 'icon'
|
||||||
import React from 'react'
|
import React from 'react'
|
||||||
|
@ -8,7 +8,7 @@ import { alert } from 'modal'
|
|||||||
import { Card, CardHeader, CardBlock } from 'card'
|
import { Card, CardHeader, CardBlock } from 'card'
|
||||||
import { formatSize } from 'utils'
|
import { formatSize } from 'utils'
|
||||||
import { FormattedDate } from 'react-intl'
|
import { FormattedDate } from 'react-intl'
|
||||||
import { get } from 'xo-defined'
|
import { get } from '@xen-ochestra/defined'
|
||||||
import { isEmpty, keyBy } from 'lodash'
|
import { isEmpty, keyBy } from 'lodash'
|
||||||
import { subscribeBackupNgJobs, subscribeBackupNgLogs } from 'xo'
|
import { subscribeBackupNgJobs, subscribeBackupNgLogs } from 'xo'
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ import { connectStore, formatSize, formatSpeed } from 'utils'
|
|||||||
import { createGetObject, createSelector } from 'selectors'
|
import { createGetObject, createSelector } from 'selectors'
|
||||||
import { filter, forEach, includes, keyBy, map, orderBy } from 'lodash'
|
import { filter, forEach, includes, keyBy, map, orderBy } from 'lodash'
|
||||||
import { FormattedDate } from 'react-intl'
|
import { FormattedDate } from 'react-intl'
|
||||||
import { get } from 'xo-defined'
|
import { get } from '@xen-orchestra/defined'
|
||||||
import {
|
import {
|
||||||
deleteJobsLogs,
|
deleteJobsLogs,
|
||||||
subscribeJobs,
|
subscribeJobs,
|
||||||
|
@ -8,7 +8,7 @@ import Icon from 'icon'
|
|||||||
import React from 'react'
|
import React from 'react'
|
||||||
import ReportBugButton, { CAN_REPORT_BUG } from 'report-bug-button'
|
import ReportBugButton, { CAN_REPORT_BUG } from 'report-bug-button'
|
||||||
import Tooltip from 'tooltip'
|
import Tooltip from 'tooltip'
|
||||||
import { get } from 'xo-defined'
|
import { get } from '@xen-orchestra/defined'
|
||||||
import { injectState, provideState } from '@julien-f/freactal'
|
import { injectState, provideState } from '@julien-f/freactal'
|
||||||
import { runBackupNgJob, subscribeBackupNgLogs } from 'xo'
|
import { runBackupNgJob, subscribeBackupNgLogs } from 'xo'
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ import ActionButton from 'action-button'
|
|||||||
import BaseComponent from 'base-component'
|
import BaseComponent from 'base-component'
|
||||||
import Button from 'button'
|
import Button from 'button'
|
||||||
import classNames from 'classnames'
|
import classNames from 'classnames'
|
||||||
import defined, { get } from 'xo-defined'
|
import defined, { get } from '@xen-orchestra/defined'
|
||||||
import Icon from 'icon'
|
import Icon from 'icon'
|
||||||
import isIp from 'is-ip'
|
import isIp from 'is-ip'
|
||||||
import Link from 'link'
|
import Link from 'link'
|
||||||
|
@ -2,7 +2,7 @@ import _ from 'intl'
|
|||||||
import ActionButton from 'action-button'
|
import ActionButton from 'action-button'
|
||||||
import Collapse from 'collapse'
|
import Collapse from 'collapse'
|
||||||
import Component from 'base-component'
|
import Component from 'base-component'
|
||||||
import defined from 'xo-defined'
|
import defined from '@xen-orchestra/defined'
|
||||||
import differenceBy from 'lodash/differenceBy'
|
import differenceBy from 'lodash/differenceBy'
|
||||||
import filter from 'lodash/filter'
|
import filter from 'lodash/filter'
|
||||||
import forEach from 'lodash/forEach'
|
import forEach from 'lodash/forEach'
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import _ from 'intl'
|
import _ from 'intl'
|
||||||
import ActionButton from 'action-button'
|
import ActionButton from 'action-button'
|
||||||
import defined from 'xo-defined'
|
import defined from '@xen-orchestra/defined'
|
||||||
import React from 'react'
|
import React from 'react'
|
||||||
import SortedTable from 'sorted-table'
|
import SortedTable from 'sorted-table'
|
||||||
import { addSubscriptions, generateRandomId } from 'utils'
|
import { addSubscriptions, generateRandomId } from 'utils'
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import _ from 'intl'
|
import _ from 'intl'
|
||||||
import ActionButton from 'action-button'
|
import ActionButton from 'action-button'
|
||||||
import Component from 'base-component'
|
import Component from 'base-component'
|
||||||
import defined from 'xo-defined'
|
import defined from '@xen-orchestra/defined'
|
||||||
import getEventValue from 'get-event-value'
|
import getEventValue from 'get-event-value'
|
||||||
import Icon from 'icon'
|
import Icon from 'icon'
|
||||||
import React from 'react'
|
import React from 'react'
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import _ from 'intl'
|
import _ from 'intl'
|
||||||
import Copiable from 'copiable'
|
import Copiable from 'copiable'
|
||||||
import defined from 'xo-defined'
|
import defined from '@xen-orchestra/defined'
|
||||||
import Icon from 'icon'
|
import Icon from 'icon'
|
||||||
import isEmpty from 'lodash/isEmpty'
|
import isEmpty from 'lodash/isEmpty'
|
||||||
import map from 'lodash/map'
|
import map from 'lodash/map'
|
||||||
|
@ -5,12 +5,12 @@ import Link from 'link'
|
|||||||
import React from 'react'
|
import React from 'react'
|
||||||
import renderXoItem from 'render-xo-item'
|
import renderXoItem from 'render-xo-item'
|
||||||
import SortedTable from 'sorted-table'
|
import SortedTable from 'sorted-table'
|
||||||
|
import { addSubscriptions, connectStore, ShortDate } from 'utils'
|
||||||
import { Container, Row, Col } from 'grid'
|
import { Container, Row, Col } from 'grid'
|
||||||
import { createSelector, createGetObjectsOfType } from 'selectors'
|
import { createSelector, createGetObjectsOfType } from 'selectors'
|
||||||
import { find, forEach } from 'lodash'
|
import { find, forEach } from 'lodash'
|
||||||
import { addSubscriptions, connectStore, ShortDate } from 'utils'
|
import { get } from '@xen-orchestra/defined'
|
||||||
import { subscribePlugins, getLicenses } from 'xo'
|
import { subscribePlugins, getLicenses } from 'xo'
|
||||||
import { get } from 'xo-defined'
|
|
||||||
|
|
||||||
import Xosan from './xosan'
|
import Xosan from './xosan'
|
||||||
|
|
||||||
|
@ -7,10 +7,10 @@ import renderXoItem, { PoolItem } from 'render-xo-item'
|
|||||||
import SortedTable from 'sorted-table'
|
import SortedTable from 'sorted-table'
|
||||||
import { connectStore } from 'utils'
|
import { connectStore } from 'utils'
|
||||||
import { createSelector, createGetObjectsOfType, createFilter } from 'selectors'
|
import { createSelector, createGetObjectsOfType, createFilter } from 'selectors'
|
||||||
import { unlockXosan } from 'xo'
|
|
||||||
import { get } from 'xo-defined'
|
|
||||||
import { filter, forEach, includes, map } from 'lodash'
|
import { filter, forEach, includes, map } from 'lodash'
|
||||||
|
import { get } from '@xen-orchestra/defined'
|
||||||
import { injectIntl } from 'react-intl'
|
import { injectIntl } from 'react-intl'
|
||||||
|
import { unlockXosan } from 'xo'
|
||||||
|
|
||||||
@injectIntl
|
@injectIntl
|
||||||
class SelectLicense extends Component {
|
class SelectLicense extends Component {
|
||||||
|
@ -9,9 +9,9 @@ import React from 'react'
|
|||||||
import SortedTable from 'sorted-table'
|
import SortedTable from 'sorted-table'
|
||||||
import Tooltip from 'tooltip'
|
import Tooltip from 'tooltip'
|
||||||
import { Container, Col, Row } from 'grid'
|
import { Container, Col, Row } from 'grid'
|
||||||
import { get } from 'xo-defined'
|
|
||||||
import { every, filter, find, flatten, forEach, isEmpty, map } from 'lodash'
|
|
||||||
import { createGetObjectsOfType, createSelector, isAdmin } from 'selectors'
|
import { createGetObjectsOfType, createSelector, isAdmin } from 'selectors'
|
||||||
|
import { every, filter, find, flatten, forEach, isEmpty, map } from 'lodash'
|
||||||
|
import { get } from '@xen-orchestra/defined'
|
||||||
import {
|
import {
|
||||||
addSubscriptions,
|
addSubscriptions,
|
||||||
connectStore,
|
connectStore,
|
||||||
|
Loading…
Reference in New Issue
Block a user