Skip to content
Snippets Groups Projects
Commit a02bf913 authored by piotr.kupczyk@id.ethz.ch's avatar piotr.kupczyk@id.ethz.ch
Browse files

NG_UI : table overviews : SSDM-10433 - add 'Tools' search page with plugins and queries grids

parent 188fff7d
No related branches found
No related tags found
No related merge requests found
Showing
with 498 additions and 65 deletions
...@@ -7,6 +7,8 @@ const USER_ROLES_GRID_ID = 'user_roles_grid' ...@@ -7,6 +7,8 @@ const USER_ROLES_GRID_ID = 'user_roles_grid'
const USER_GROUP_USERS_GRID_ID = 'user_group_users_grid' const USER_GROUP_USERS_GRID_ID = 'user_group_users_grid'
const USER_GROUP_ROLES_GRID_ID = 'user_group_roles_grid' const USER_GROUP_ROLES_GRID_ID = 'user_group_roles_grid'
const VOCABULARY_TERMS_GRID_ID = 'vocabulary_terms_grid' const VOCABULARY_TERMS_GRID_ID = 'vocabulary_terms_grid'
const PLUGINS_GRID_ID = 'plugins_grid'
const QUERIES_GRID_ID = 'queries_grid'
export default { export default {
WEB_APP_ID, WEB_APP_ID,
...@@ -17,5 +19,7 @@ export default { ...@@ -17,5 +19,7 @@ export default {
USER_ROLES_GRID_ID, USER_ROLES_GRID_ID,
USER_GROUP_USERS_GRID_ID, USER_GROUP_USERS_GRID_ID,
USER_GROUP_ROLES_GRID_ID, USER_GROUP_ROLES_GRID_ID,
VOCABULARY_TERMS_GRID_ID VOCABULARY_TERMS_GRID_ID,
PLUGINS_GRID_ID,
QUERIES_GRID_ID
} }
import React from 'react'
import LinkToObject from '@src/js/components/common/form/LinkToObject.jsx'
import pages from '@src/js/common/consts/pages.js'
import objectTypes from '@src/js/common/consts/objectType.js'
import openbis from '@src/js/services/openbis.js'
import logger from '@src/js/common/logger.js'
class PluginLink extends React.PureComponent {
render() {
logger.log(logger.DEBUG, 'PluginLink.render')
const { pluginName, pluginType } = this.props
if (pluginName && pluginType) {
let objectType = null
if (pluginType === openbis.PluginType.DYNAMIC_PROPERTY) {
objectType = objectTypes.DYNAMIC_PROPERTY_PLUGIN
} else if (pluginType === openbis.PluginType.ENTITY_VALIDATION) {
objectType = objectTypes.ENTITY_VALIDATION_PLUGIN
} else {
throw new Error('Unsupported plugin type: ' + pluginType)
}
return (
<LinkToObject
page={pages.TOOLS}
object={{
type: objectType,
id: pluginName
}}
>
{pluginName}
</LinkToObject>
)
} else {
return null
}
}
}
export default PluginLink
import React from 'react'
import LinkToObject from '@src/js/components/common/form/LinkToObject.jsx'
import pages from '@src/js/common/consts/pages.js'
import objectTypes from '@src/js/common/consts/objectType.js'
import logger from '@src/js/common/logger.js'
class QueryLink extends React.PureComponent {
render() {
logger.log(logger.DEBUG, 'QueryLink.render')
const { queryName } = this.props
if (queryName) {
return (
<LinkToObject
page={pages.TOOLS}
object={{
type: objectTypes.QUERY,
id: queryName
}}
>
{queryName}
</LinkToObject>
)
} else {
return null
}
}
}
export default QueryLink
import React from 'react'
import LinkToObject from '@src/js/components/common/form/LinkToObject.jsx'
import pages from '@src/js/common/consts/pages.js'
import objectTypes from '@src/js/common/consts/objectType.js'
import logger from '@src/js/common/logger.js'
class UserGroupLink extends React.PureComponent {
render() {
logger.log(logger.DEBUG, 'UserGroupLink.render')
const { groupCode } = this.props
if (groupCode) {
return (
<LinkToObject
page={pages.USERS}
object={{
type: objectTypes.USER_GROUP,
id: groupCode
}}
>
{groupCode}
</LinkToObject>
)
} else {
return null
}
}
}
export default UserGroupLink
import React from 'react'
import LinkToObject from '@src/js/components/common/form/LinkToObject.jsx'
import pages from '@src/js/common/consts/pages.js'
import objectTypes from '@src/js/common/consts/objectType.js'
import logger from '@src/js/common/logger.js'
class UserLink extends React.PureComponent {
render() {
logger.log(logger.DEBUG, 'UserLink.render')
const { userId } = this.props
if (userId) {
return (
<LinkToObject
page={pages.USERS}
object={{
type: objectTypes.USER,
id: userId
}}
>
{userId}
</LinkToObject>
)
} else {
return null
}
}
}
export default UserLink
import _ from 'lodash'
import React from 'react'
import autoBind from 'auto-bind'
import { withStyles } from '@material-ui/core/styles'
import Grid from '@src/js/components/common/grid/Grid.jsx'
import PluginLink from '@src/js/components/common/link/PluginLink.jsx'
import UserLink from '@src/js/components/common/link/UserLink.jsx'
import logger from '@src/js/common/logger.js'
const styles = () => ({})
class PluginsGrid extends React.PureComponent {
constructor(props) {
super(props)
autoBind(this)
}
render() {
logger.log(logger.DEBUG, 'PluginsGrid.render')
const {
id,
rows,
selectedRowId,
onSelectedRowChange,
controllerRef
} = this.props
return (
<Grid
id={id}
controllerRef={controllerRef}
header='Plugins'
columns={[
{
name: 'name',
label: 'Name',
sort: 'asc',
getValue: ({ row }) => row.name.value,
renderValue: ({ row }) => {
return (
<PluginLink
pluginName={row.name.value}
pluginType={row.pluginType.value}
/>
)
}
},
{
name: 'description',
label: 'Description',
getValue: ({ row }) => row.description.value
},
{
name: 'pluginType',
label: 'Plugin Type',
getValue: ({ row }) => row.pluginType.value
},
{
name: 'pluginKind',
label: 'Plugin Kind',
getValue: ({ row }) => row.pluginKind.value
},
{
name: 'entityKind',
label: 'Entity Kind',
getValue: ({ row }) => row.entityKind.value
},
{
name: 'registrator',
label: 'Registrator',
getValue: ({ row }) => row.registrator.value,
renderValue: ({ value }) => {
return <UserLink userId={value} />
}
}
]}
rows={rows}
selectedRowId={selectedRowId}
onSelectedRowChange={onSelectedRowChange}
/>
)
}
}
export default _.flow(withStyles(styles))(PluginsGrid)
import _ from 'lodash'
import React from 'react'
import autoBind from 'auto-bind'
import { withStyles } from '@material-ui/core/styles'
import Grid from '@src/js/components/common/grid/Grid.jsx'
import QueryLink from '@src/js/components/common/link/QueryLink.jsx'
import UserLink from '@src/js/components/common/link/UserLink.jsx'
import logger from '@src/js/common/logger.js'
const styles = () => ({})
class QueriesGrid extends React.PureComponent {
constructor(props) {
super(props)
autoBind(this)
}
render() {
logger.log(logger.DEBUG, 'QueriesGrid.render')
const {
id,
rows,
selectedRowId,
onSelectedRowChange,
controllerRef
} = this.props
return (
<Grid
id={id}
controllerRef={controllerRef}
header='Queries'
columns={[
{
name: 'name',
label: 'Name',
sort: 'asc',
getValue: ({ row }) => row.name.value,
renderValue: ({ value }) => {
return <QueryLink queryName={value} />
}
},
{
name: 'description',
label: 'Description',
getValue: ({ row }) => row.description.value
},
{
name: 'database',
label: 'Database',
getValue: ({ row }) => row.database.value
},
{
name: 'queryType',
label: 'Query Type',
getValue: ({ row }) => row.queryType.value
},
{
name: 'entityTypeCodePattern',
label: 'Entity Type Pattern',
getValue: ({ row }) => row.entityTypeCodePattern.value
},
{
name: 'publicFlag',
label: 'Public',
getValue: ({ row }) => row.publicFlag.value
},
{
name: 'registrator',
label: 'Registrator',
getValue: ({ row }) => row.registrator.value,
renderValue: ({ value }) => {
return <UserLink userId={value} />
}
}
]}
rows={rows}
selectedRowId={selectedRowId}
onSelectedRowChange={onSelectedRowChange}
/>
)
}
}
export default _.flow(withStyles(styles))(QueriesGrid)
import _ from 'lodash'
import autoBind from 'auto-bind'
import React from 'react' import React from 'react'
import GridContainer from '@src/js/components/common/grid/GridContainer.jsx'
import PluginsGrid from '@src/js/components/tools/common/PluginsGrid.jsx'
import QueriesGrid from '@src/js/components/tools/common/QueriesGrid.jsx'
import FormUtil from '@src/js/components/common/form/FormUtil.js'
import ids from '@src/js/common/consts/ids.js'
import store from '@src/js/store/store.js'
import actions from '@src/js/store/actions/actions.js'
import openbis from '@src/js/services/openbis.js'
import logger from '@src/js/common/logger.js' import logger from '@src/js/common/logger.js'
export default class ToolSearch extends React.Component { class ToolSearch extends React.Component {
constructor(props) {
super(props)
autoBind(this)
this.state = {
loaded: false,
selection: null
}
}
componentDidMount() {
Promise.all([this.loadPlugins(), this.loadQueries()])
.then(([plugins, queries]) => {
this.setState(() => ({
loaded: true,
plugins,
queries
}))
})
.catch(error => {
store.dispatch(actions.errorChange(error))
})
}
loadPlugins() {
let query = this.props.objectId
let criteria = new openbis.PluginSearchCriteria()
criteria.withName().thatContains(query)
let fo = new openbis.PluginFetchOptions()
fo.withScript()
fo.withRegistrator()
return openbis.searchPlugins(criteria, fo).then(result => {
return result.objects
.filter(plugin => {
return (
plugin.pluginType === openbis.PluginType.DYNAMIC_PROPERTY ||
plugin.pluginType === openbis.PluginType.ENTITY_VALIDATION
)
})
.map(plugin => {
const entityKinds = _.get(plugin, 'entityKinds', [])
return {
id: _.get(plugin, 'name'),
name: FormUtil.createField({ value: _.get(plugin, 'name') }),
description: FormUtil.createField({
value: _.get(plugin, 'description')
}),
pluginType: FormUtil.createField({
value: _.get(plugin, 'pluginType')
}),
pluginKind: FormUtil.createField({
value: _.get(plugin, 'pluginKind')
}),
entityKind: FormUtil.createField({
value: entityKinds.length === 1 ? entityKinds[0] : null
}),
script: FormUtil.createField({ value: _.get(plugin, 'script') }),
registrator: FormUtil.createField({
value: _.get(plugin, 'registrator.userId')
})
}
})
})
}
loadQueries() {
let query = this.props.objectId
let criteria = new openbis.QuerySearchCriteria()
criteria.withName().thatContains(query)
let fo = new openbis.QueryFetchOptions()
fo.withRegistrator()
return openbis.searchQueries(criteria, fo).then(result => {
return result.objects.map(query => ({
id: _.get(query, 'name'),
name: FormUtil.createField({ value: _.get(query, 'name') }),
description: FormUtil.createField({
value: _.get(query, 'description')
}),
database: FormUtil.createField({
value: _.get(query, 'databaseLabel')
}),
queryType: FormUtil.createField({
value: _.get(query, 'queryType')
}),
entityTypeCodePattern: FormUtil.createField({
value: _.get(query, 'entityTypeCodePattern')
}),
sql: FormUtil.createField({
value: _.get(query, 'sql')
}),
publicFlag: FormUtil.createField({
value: _.get(query, 'publicFlag')
}),
registrator: FormUtil.createField({
value: _.get(query, 'registrator.userId')
})
}))
})
}
handleClickContainer() {
this.setState({
selection: null
})
}
handleSelectedPluginRowChange(row) {
if (row) {
this.setState({
selection: {
type: 'plugin',
id: row.id
}
})
}
}
handleSelectedQueryRowChange(row) {
if (row) {
this.setState({
selection: {
type: 'query',
id: row.id
}
})
}
}
render() { render() {
logger.log(logger.DEBUG, 'ToolSearch.render') logger.log(logger.DEBUG, 'ToolSearch.render')
return 'ToolSearch'
if (!this.state.loaded) {
return null
}
const { selection } = this.state
return (
<GridContainer onClick={this.handleClickContainer}>
<PluginsGrid
id={ids.PLUGINS_GRID_ID}
rows={this.state.plugins}
onSelectedRowChange={this.handleSelectedPluginRowChange}
selectedRowId={
selection && selection.type === 'plugin' ? selection.id : null
}
/>
<QueriesGrid
id={ids.QUERIES_GRID_ID}
rows={this.state.queries}
onSelectedRowChange={this.handleSelectedQueryRowChange}
selectedRowId={
selection && selection.type === 'query' ? selection.id : null
}
/>
</GridContainer>
)
} }
} }
export default ToolSearch
...@@ -3,10 +3,8 @@ import React from 'react' ...@@ -3,10 +3,8 @@ import React from 'react'
import autoBind from 'auto-bind' import autoBind from 'auto-bind'
import { withStyles } from '@material-ui/core/styles' import { withStyles } from '@material-ui/core/styles'
import Grid from '@src/js/components/common/grid/Grid.jsx' import Grid from '@src/js/components/common/grid/Grid.jsx'
import LinkToObject from '@src/js/components/common/form/LinkToObject.jsx' import UserGroupLink from '@src/js/components/common/link/UserGroupLink.jsx'
import openbis from '@src/js/services/openbis.js' import openbis from '@src/js/services/openbis.js'
import pages from '@src/js/common/consts/pages.js'
import objectTypes from '@src/js/common/consts/objectType.js'
import ids from '@src/js/common/consts/ids.js' import ids from '@src/js/common/consts/ids.js'
import logger from '@src/js/common/logger.js' import logger from '@src/js/common/logger.js'
...@@ -175,25 +173,8 @@ class RolesGrid extends React.PureComponent { ...@@ -175,25 +173,8 @@ class RolesGrid extends React.PureComponent {
return row.role.value return row.role.value
} }
renderInheritedFromValue({ value, row }) { renderInheritedFromValue({ value }) {
if (value) { return <UserGroupLink groupCode={value} />
return this.renderDefault({
value: (
<LinkToObject
page={pages.USERS}
object={{
type: objectTypes.USER_GROUP,
id: row.inheritedFrom.value
}}
>
{row.inheritedFrom.value}
</LinkToObject>
),
row
})
} else {
return null
}
} }
renderLevelValue({ value, row }) { renderLevelValue({ value, row }) {
......
import React from 'react' import React from 'react'
import Grid from '@src/js/components/common/grid/Grid.jsx' import Grid from '@src/js/components/common/grid/Grid.jsx'
import LinkToObject from '@src/js/components/common/form/LinkToObject.jsx' import UserGroupLink from '@src/js/components/common/link/UserGroupLink.jsx'
import pages from '@src/js/common/consts/pages.js'
import objectTypes from '@src/js/common/consts/objectType.js'
import logger from '@src/js/common/logger.js' import logger from '@src/js/common/logger.js'
export default class GroupsGrid extends React.PureComponent { export default class GroupsGrid extends React.PureComponent {
...@@ -29,21 +27,7 @@ export default class GroupsGrid extends React.PureComponent { ...@@ -29,21 +27,7 @@ export default class GroupsGrid extends React.PureComponent {
sort: 'asc', sort: 'asc',
getValue: ({ row }) => row.code.value, getValue: ({ row }) => row.code.value,
renderValue: ({ value }) => { renderValue: ({ value }) => {
if (value) { return <UserGroupLink groupCode={value} />
return (
<LinkToObject
page={pages.USERS}
object={{
type: objectTypes.USER_GROUP,
id: value
}}
>
{value}
</LinkToObject>
)
} else {
return ''
}
} }
}, },
{ {
......
...@@ -3,9 +3,7 @@ import React from 'react' ...@@ -3,9 +3,7 @@ import React from 'react'
import autoBind from 'auto-bind' import autoBind from 'auto-bind'
import { withStyles } from '@material-ui/core/styles' import { withStyles } from '@material-ui/core/styles'
import Grid from '@src/js/components/common/grid/Grid.jsx' import Grid from '@src/js/components/common/grid/Grid.jsx'
import LinkToObject from '@src/js/components/common/form/LinkToObject.jsx' import UserLink from '@src/js/components/common/link/UserLink.jsx'
import pages from '@src/js/common/consts/pages.js'
import objectTypes from '@src/js/common/consts/objectType.js'
import logger from '@src/js/common/logger.js' import logger from '@src/js/common/logger.js'
const styles = () => ({}) const styles = () => ({})
...@@ -39,21 +37,7 @@ class UsersGrid extends React.PureComponent { ...@@ -39,21 +37,7 @@ class UsersGrid extends React.PureComponent {
sort: 'asc', sort: 'asc',
getValue: ({ row }) => row.userId.value, getValue: ({ row }) => row.userId.value,
renderValue: ({ value }) => { renderValue: ({ value }) => {
if (value) { return <UserLink userId={value} />
return (
<LinkToObject
page={pages.USERS}
object={{
type: objectTypes.USER,
id: value
}}
>
{value}
</LinkToObject>
)
} else {
return ''
}
} }
}, },
{ {
......
import React from 'react' import React from 'react'
import GroupsGrid from '@src/js/components/users/common/GroupsGrid.jsx' import UserGroupsGrid from '@src/js/components/users/common/UserGroupsGrid.jsx'
import ids from '@src/js/common/consts/ids.js' import ids from '@src/js/common/consts/ids.js'
import logger from '@src/js/common/logger.js' import logger from '@src/js/common/logger.js'
...@@ -7,6 +7,6 @@ export default class UserFormGridGroups extends React.PureComponent { ...@@ -7,6 +7,6 @@ export default class UserFormGridGroups extends React.PureComponent {
render() { render() {
logger.log(logger.DEBUG, 'UserFormGridGroups.render') logger.log(logger.DEBUG, 'UserFormGridGroups.render')
return <GroupsGrid {...this.props} id={ids.USER_USER_GROUPS_GRID_ID} /> return <UserGroupsGrid {...this.props} id={ids.USER_USER_GROUPS_GRID_ID} />
} }
} }
...@@ -3,7 +3,7 @@ import autoBind from 'auto-bind' ...@@ -3,7 +3,7 @@ import autoBind from 'auto-bind'
import React from 'react' import React from 'react'
import GridContainer from '@src/js/components/common/grid/GridContainer.jsx' import GridContainer from '@src/js/components/common/grid/GridContainer.jsx'
import UsersGrid from '@src/js/components/users/common/UsersGrid.jsx' import UsersGrid from '@src/js/components/users/common/UsersGrid.jsx'
import GroupsGrid from '@src/js/components/users/common/GroupsGrid.jsx' import UserGroupsGrid from '@src/js/components/users/common/UserGroupsGrid.jsx'
import FormUtil from '@src/js/components/common/form/FormUtil.js' import FormUtil from '@src/js/components/common/form/FormUtil.js'
import ids from '@src/js/common/consts/ids.js' import ids from '@src/js/common/consts/ids.js'
import store from '@src/js/store/store.js' import store from '@src/js/store/store.js'
...@@ -135,7 +135,7 @@ class UserSearch extends React.Component { ...@@ -135,7 +135,7 @@ class UserSearch extends React.Component {
selection && selection.type === 'user' ? selection.id : null selection && selection.type === 'user' ? selection.id : null
} }
/> />
<GroupsGrid <UserGroupsGrid
id={ids.USER_GROUPS_GRID_ID} id={ids.USER_GROUPS_GRID_ID}
rows={this.state.groups} rows={this.state.groups}
onSelectedRowChange={this.handleSelectedGroupRowChange} onSelectedRowChange={this.handleSelectedGroupRowChange}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment