Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* @flow */
- import React, { PureComponent } from 'react';
- import { connect } from 'react-redux';
- import type { Connector } from 'react-redux';
- import * as action from '../../../actions/TabBar';
- import { Row, Col, Tab } from '../../../components/rubix';
- import type {
- ReduxState,
- Dispatch,
- TabBar as TabBarType
- } from '../../../types';
- import Datatable from '../../../components/Datatable';
- import Widget from '../../../components/Widget';
- import InputForm from '../../../components/InputForm';
- import config from '../../../config';
- type Props = {
- match: Object,
- dispatchTabBarSetTabs: (tabs: TabBarType) => void,
- dispatchTabBarSelectTab: (selectedTab: Object) => void,
- tabBar: TabBarType
- };
- class App extends PureComponent<Props> {
- componentDidMount() {
- this.setTabBarTabs();
- // set default tab
- const { dispatchTabBarSelectTab } = this.props;
- dispatchTabBarSelectTab({ key: 1 });
- }
- setTabBarTabs() {
- const { dispatchTabBarSetTabs } = this.props;
- dispatchTabBarSetTabs([
- {
- id: 1,
- label: 'Summary'
- },
- {
- id: 2,
- label: 'Custom Tables'
- },
- {
- id: 3,
- label: 'Custom Buttons'
- },
- {
- id: 4,
- label: 'Custom Fields'
- },
- {
- id: 5,
- label: 'Instances'
- },
- {
- id: 99,
- label: 'Activity Log'
- }
- ]);
- }
- handleSelect(key) {
- // this doesn't do anything, we just need it to suppress warnings
- // eslint-disable-next-line react/no-unused-state
- this.setState({ key });
- }
- props: Props;
- render() {
- const { match: { params } } = this.props;
- return (
- <div>
- <Tab.Container
- id="tabs-with-dropdown"
- onSelect={this.handleSelect}
- activeKey={this.props.tabBar.selectedTab.key}
- >
- <Row className="clearfix">
- <Col sm={12}>
- <Tab.Content animation={false}>
- <Tab.Pane eventKey={1}>
- <div>
- <Row>
- <Col sm={3} collapseRight>
- <Widget
- label="App Installs"
- APIRoute="apps/widgets"
- APIQuery={params.id}
- data="num_installs"
- loadDataFromAPI
- typeOf="app"
- id={params.id}
- type="text"
- color="#e74c3c"
- icon="icon-fontello-group-circled"
- />
- </Col>
- <Col sm={3} collapseRight>
- <Widget
- label="Placeholder 1"
- data="num_installs"
- loadDataFromWidget={`app:${params.id}`}
- type="text"
- color="#f1c40f"
- />
- </Col>
- <Col sm={3} collapseRight>
- <Widget
- label="Placeholder 2"
- data="num_installs"
- loadDataFromWidget={`app:${params.id}`}
- type="text"
- color="#4cd137"
- />
- </Col>
- <Col sm={3}>
- <Widget
- label="Placeholder 3"
- data="num_installs"
- loadDataFromWidget={`app:${params.id}`}
- type="text"
- color="#14bfff"
- />
- </Col>
- </Row>
- </div>
- <InputForm
- label="App Summary"
- APIRoute="apps"
- APIQuery={params.id}
- loadDataFromAPI
- typeOf="manageapp"
- id={params.id}
- fields={{
- display_name: {
- label: 'Name',
- type: 'dynamicText',
- width: 25,
- validate: ['required']
- },
- publisher: {
- label: 'Publisher',
- type: 'dynamicText',
- validate: ['required'],
- width: 25
- },
- version: {
- label: 'Version',
- type: 'dynamicText',
- width: 10,
- validate: ['required']
- },
- app_slots: {
- label: 'App Slots',
- type: 'dynamicText',
- width: 10,
- validate: ['required']
- },
- subdomain: {
- label: 'Subdomain',
- type: 'dynamicText',
- width: 15,
- validate: ['required']
- },
- brand_id: {
- type: 'selector',
- width: 15,
- label: 'Brand',
- validate: ['required'],
- params: {
- APIRoute: 'brands',
- orderby: 'display_name',
- searchItems: ['display_name'],
- submitValue: 'id'
- }
- },
- hide_save: {
- label: 'Hide Save',
- type: 'switch',
- width: 10
- },
- RequiresDomain: {
- label: 'Req Domain',
- type: 'switch',
- width: 15
- },
- show_app: {
- label: 'Show App',
- type: 'switch',
- width: 10
- },
- admin_only: {
- label: 'Admin Only',
- type: 'switch',
- width: 10
- },
- enabled: {
- label: 'Enabled',
- type: 'switch',
- width: 10
- },
- featured: {
- label: 'Featured',
- type: 'switch',
- width: 10
- },
- allow_multiple: {
- label: 'Allow Multi',
- type: 'switch',
- width: 10
- },
- ssl: {
- label: 'SSL',
- type: 'switch',
- width: 10
- },
- IsWebApp: {
- label: 'Web App',
- type: 'switch',
- width: 15
- },
- reinstall_on_cylo_change: {
- label: `Reinstall on ${config.entity.single} Change`,
- type: 'switch',
- width: 20
- },
- server_default: {
- label: 'Server Default',
- type: 'switch',
- width: 16
- },
- cylo_default: {
- label: 'Cylo Default',
- type: 'switch',
- width: 16
- },
- notify_on_install: {
- label: 'Notify Install',
- type: 'switch',
- width: 16
- },
- wildcard_ssl: {
- label: 'Wildcard SSL',
- type: 'switch',
- width: 16
- },
- expect_callback: {
- label: 'API Callback',
- type: 'switch',
- width: 16
- },
- usernsmode: {
- type: 'selector',
- label: 'User NS Mode',
- params: {
- menuItems: {
- host: 'host'
- }
- },
- width: 25
- },
- rating: {
- label: 'Rating',
- type: 'number',
- width: 10
- },
- upvotes: {
- label: 'Upvotes',
- type: 'number',
- width: 10
- },
- downvotes: {
- label: 'Downvotes',
- type: 'number',
- width: 10
- },
- NetworkMode: {
- type: 'selector',
- label: 'Network Mode',
- params: {
- menuItems: {
- bridge: 'bridge',
- default: 'default',
- host: 'host',
- none: 'none'
- }
- },
- width: 20
- },
- static_4th_ip_octet: {
- label: 'Static 4th IP Octet',
- type: 'number',
- width: 25
- },
- short_description: {
- label: 'Short Description',
- type: 'dynamicText',
- width: 70,
- validate: ['required']
- },
- devsite: {
- label: 'Dev Site',
- type: 'dynamicText',
- width: 30
- },
- description: {
- label: 'Description',
- type: 'textArea',
- width: 100,
- params: {
- multiline: true
- }
- },
- type: {
- type: 'selector',
- label: 'Type',
- params: {
- menuItems: {
- docker: 'docker'
- }
- },
- width: 10
- },
- registry: {
- type: 'selector',
- label: 'Registry',
- params: {
- menuItems: {
- 'repo.cylo.io': 'repo.cylo.io',
- 'Docker Hub': 'dockerhub'
- }
- },
- width: 20
- },
- Image: {
- label: 'Image',
- type: 'dynamicText',
- width: 20
- },
- tag: {
- label: 'Tag',
- type: 'dynamicText',
- width: 10,
- validate: ['required']
- },
- source_repo: {
- label: 'Source Repo URL',
- type: 'dynamicText',
- width: 20
- },
- spc0: {
- label: 'spc',
- type: 'spacer',
- width: 20
- },
- Memory: {
- label: 'Memory',
- type: 'number',
- width: 10
- },
- MemorySwap: {
- label: 'MemorySwap',
- type: 'number',
- width: 10
- },
- MemoryReservation: {
- label: 'MemoryReservation',
- type: 'number',
- width: 10
- },
- CPUs: {
- label: 'CPUs',
- type: 'number',
- width: 10
- },
- PidsLimit: {
- label: 'PID Limit',
- type: 'number',
- width: 10
- },
- TCPDynamicPorts: {
- label: 'Dynamic TCP Ports',
- type: 'number',
- width: 10
- },
- UDPDynamicPorts: {
- label: 'Dynamic UDP Ports',
- type: 'number',
- width: 10
- },
- TCPPortRange: {
- label: 'TCP Port Range',
- type: 'dynamicText',
- width: 15
- },
- UDPPortRange: {
- label: 'UDP Port Range',
- type: 'dynamicText',
- width: 15
- },
- cmd: {
- label: 'Command',
- type: 'dynamicText',
- width: 30
- },
- volumes: {
- label: 'Volumes',
- type: 'dynamicText',
- width: 30
- },
- // links: {
- // label: 'Links',
- // type: 'dynamicText',
- // width: 30
- // },
- Privileged: {
- label: 'Privileged',
- type: 'switch',
- width: 25
- },
- Init: {
- label: 'Init',
- type: 'switch',
- width: 15
- },
- LogConfig: {
- type: 'selector',
- label: 'Log Config',
- params: {
- menuItems: {
- jsonFile: 'json-file',
- syslog: 'syslog',
- journald: 'journald',
- gelf: 'gelf',
- fluentd: 'fluentd',
- awslogs: 'awslogs',
- splunk: 'splunk',
- etwlogs: 'etwlogs',
- null: 'none'
- }
- },
- width: 25
- },
- SecurityOpt: {
- label: 'Security Opt',
- type: 'dynamicText',
- width: 25
- },
- // custom_description: {
- // label: 'Custom Description',
- // type: 'dynamicText',
- // width: 100
- // },
- icon_image: {
- width: 100,
- type: 'cropper',
- label: 'Icon',
- params: {
- width: 250,
- height: 250,
- aspectRatio: 1,
- maxFileSize: 300000,
- path: 'assets/images/apps/icons/'
- }
- }
- }}
- />
- <div>
- <Row>
- <Col sm={4} collapseRight>
- <Datatable
- label="Categories"
- typeOf="category"
- belongsTo="app"
- id={params.id}
- APIRoute={`appcategories/app/${params.id}`}
- columns={[
- {
- name: 'category',
- title: 'Name',
- inputField: {
- type: 'search',
- validate: ['required'],
- params: {
- wildcardSearch: true,
- minLength: 0,
- APIRoute: 'appcategories',
- orderby: 'display_name',
- searchItems: ['display_name'],
- submitValue: 'id'
- }
- }
- }
- ]}
- sorting={[{ columnName: 'id', direction: 'asc' }]}
- columnOrder={['category']}
- enableAdding
- enableDeleting
- enableSelection
- />
- </Col>
- <Col sm={8}>
- <Datatable
- label="Mounts"
- typeOf="mounts"
- belongsTo="app"
- id={params.id}
- APIRoute="appmounts"
- columns={[
- {
- name: 'app_id',
- type: 'hidden',
- defaultValue: params.id
- },
- {
- name: 'Target',
- title: 'Target',
- inputField: {
- type: 'dynamicText',
- validate: ['required']
- },
- filter: {
- type: 'dynamicText'
- }
- },
- {
- name: 'Source',
- title: 'Source',
- inputField: {
- type: 'dynamicText',
- validate: ['required']
- },
- filter: {
- type: 'dynamicText'
- }
- },
- {
- name: 'Type',
- title: 'Type',
- inputField: {
- type: 'selector',
- params: {
- menuItems: {
- bind: 'bind',
- volume: 'volume',
- tmpfs: 'tmpfs'
- }
- }
- },
- filter: {
- type: 'selector',
- params: {
- menuItems: {
- bind: 'bind',
- volume: 'volume',
- tmpfs: 'tmpfs'
- }
- }
- }
- },
- {
- name: 'ReadOnly',
- title: 'Read Only',
- type: 'IsEnabledCell',
- inputField: {
- validate: ['required'],
- type: 'selector',
- defaultValue: 0,
- params: {
- menuItems: {
- Enabled: 1,
- Disabled: 0
- }
- }
- },
- filter: {
- validate: ['required'],
- type: 'selector',
- params: {
- menuItems: {
- Enabled: 1,
- Disabled: 0
- }
- }
- }
- },
- {
- name: 'Consistency',
- title: 'Consistency',
- inputField: {
- type: 'selector',
- params: {
- menuItems: {
- default: 'default',
- consistent: 'consistent',
- cached: 'cached',
- delegated: 'delegated'
- }
- }
- },
- filter: {
- type: 'selector',
- params: {
- menuItems: {
- default: 'default',
- consistent: 'consistent',
- cached: 'cached',
- delegated: 'delegated'
- }
- }
- }
- },
- {
- name: 'lock_to_bind_dir',
- title: 'Lock to bind dir',
- type: 'IsEnabledCell',
- inputField: {
- validate: ['required'],
- type: 'selector',
- defaultValue: 'home',
- params: {
- menuItems: {
- host: 'host',
- private: 'private',
- home: 'home',
- volume: 'volume'
- }
- }
- },
- filter: {
- type: 'selector',
- params: {
- menuItems: {
- host: 'host',
- private: 'private',
- home: 'home',
- volume: 'volume'
- }
- }
- }
- }
- ]}
- sorting={[{ columnName: 'id', direction: 'asc' }]}
- columnOrder={[
- 'Target',
- 'Source',
- 'Type',
- 'ReadOnly',
- 'Consistency',
- 'lock_to_bind_dir'
- ]}
- filters={{ app_id: params.id }}
- enableAdding
- enableDeleting
- enableSelection
- enableEditing
- />
- </Col>
- </Row>
- <Row>
- <Col sm={12}>
- <Datatable
- label="Binds"
- typeOf="binds"
- belongsTo="app"
- id={params.id}
- APIRoute="appbinds"
- columns={[
- {
- name: 'app_id',
- type: 'hidden',
- defaultValue: params.id
- },
- {
- name: 'Source',
- title: 'Source',
- inputField: {
- type: 'dynamicText'
- },
- filter: {
- type: 'dynamicText'
- }
- },
- {
- name: 'Destination',
- title: 'Destination',
- inputField: {
- type: 'dynamicText'
- },
- filter: {
- type: 'dynamicText'
- }
- },
- {
- name: 'Permissions',
- title: 'Permissions',
- inputField: {
- type: 'dynamicText'
- },
- filter: {
- type: 'dynamicText'
- }
- },
- {
- name: 'UID',
- title: 'UID',
- inputField: {
- type: 'dynamicText'
- },
- filter: {
- type: 'dynamicText'
- }
- },
- {
- name: 'lock_to_bind_dir',
- title: 'Lock to bind dir',
- inputField: {
- validate: ['required'],
- type: 'selector',
- defaultValue: 'home',
- params: {
- menuItems: {
- host: 'host',
- private: 'private',
- home: 'home',
- volume: 'volume'
- }
- }
- },
- filter: {
- validate: ['required'],
- type: 'selector',
- params: {
- menuItems: {
- host: 'host',
- private: 'private',
- home: 'home',
- volume: 'volume'
- }
- }
- }
- }
- ]}
- sorting={[{ columnName: 'id', direction: 'asc' }]}
- columnOrder={[
- 'Source',
- 'Desintation',
- 'Permissions',
- 'UID',
- 'lock_to_bind_dir'
- ]}
- filters={{ app_id: params.id }}
- enableAdding
- enableDeleting
- enableSelection
- enableEditing
- />
- </Col>
- </Row>
- <Row>
- <Col sm={12}>
- <Datatable
- label="Block IO"
- typeOf="blockio"
- belongsTo="app"
- id={params.id}
- APIRoute="appblockio"
- columns={[
- {
- name: 'type',
- type: 'hidden',
- defaultValue: 'app'
- },
- {
- name: 'relid',
- type: 'hidden',
- defaultValue: params.id
- },
- {
- name: 'Device',
- title: 'Device',
- inputField: {
- type: 'dynamicText'
- },
- filter: {
- type: 'dynamicText'
- }
- },
- {
- name: 'ReadBps',
- title: 'ReadBps',
- inputField: {
- type: 'dynamicText'
- },
- filter: {
- type: 'dynamicText'
- }
- },
- {
- name: 'WriteBps',
- title: 'WriteBps',
- inputField: {
- type: 'dynamicText'
- },
- filter: {
- type: 'dynamicText'
- }
- },
- {
- name: 'ReadIOps',
- title: 'ReadIOps',
- inputField: {
- type: 'dynamicText'
- },
- filter: {
- type: 'dynamicText'
- }
- },
- {
- name: 'WriteIOps',
- title: 'WriteIOps',
- inputField: {
- type: 'dynamicText'
- },
- filter: {
- type: 'dynamicText'
- }
- }
- ]}
- sorting={[{ columnName: 'id', direction: 'asc' }]}
- columnOrder={[
- 'Device',
- 'ReadBps',
- 'WriteBps',
- 'ReadIOps',
- 'WriteIOps'
- ]}
- filters={{ type: 'app', relid: params.id }}
- enableAdding
- enableDeleting
- enableSelection
- enableEditing
- />
- </Col>
- </Row>
- <Row>
- <Col sm={12}>
- <Datatable
- label="Environment Variables"
- typeOf="envvars"
- belongsTo="app"
- id={params.id}
- APIRoute="appenvvars"
- columns={[
- {
- name: 'app_id',
- type: 'hidden',
- defaultValue: params.id
- },
- {
- name: 'Key',
- title: 'Key',
- inputField: {
- type: 'dynamicText'
- },
- filter: {
- type: 'dynamicText'
- }
- },
- {
- name: 'Value',
- title: 'Value',
- inputField: {
- type: 'dynamicText'
- },
- filter: {
- type: 'dynamicText'
- }
- },
- {
- name: 'template_type',
- validate: ['required'],
- title: 'Template Type',
- inputField: {
- type: 'selector',
- params: {
- menuItems: {
- none: 'none',
- cylo: 'cylo',
- app: 'app',
- instance: 'instance',
- alldomains: 'alldomains'
- }
- }
- },
- filter: {
- type: 'selector',
- params: {
- menuItems: {
- none: 'none',
- cylo: 'cylo',
- app: 'app',
- instance: 'instance',
- alldomains: 'alldomains'
- }
- }
- }
- }
- ]}
- sorting={[{ columnName: 'id', direction: 'asc' }]}
- columnOrder={['Key', 'Value', 'template_type']}
- filters={{ app_id: params.id }}
- enableAdding
- enableDeleting
- enableSelection
- enableEditing
- />
- </Col>
- </Row>
- <Row>
- <Col sm={4} collapseRight>
- <Datatable
- label="Volumes From"
- typeOf="volsfrom"
- belongsTo="app"
- id={params.id}
- APIRoute="appvolumes_from"
- columns={[
- {
- name: 'app_id',
- type: 'hidden',
- defaultValue: params.id
- },
- {
- name: 'from_instance',
- title: 'From Instance',
- inputField: {
- type: 'dynamicText'
- },
- filter: {
- type: 'dynamicText'
- }
- },
- {
- name: 'Permissions',
- title: 'Permissions',
- inputField: {
- type: 'dynamicText'
- },
- filter: {
- type: 'dynamicText'
- }
- }
- ]}
- sorting={[{ columnName: 'id', direction: 'asc' }]}
- columnOrder={['from_instance', 'Permissions']}
- filters={{ app_id: params.id }}
- enableAdding
- enableDeleting
- enableSelection
- enableEditing
- />
- </Col>
- <Col sm={8}>
- <Datatable
- label="ULimits"
- typeOf="ulimits"
- belongsTo="app"
- id={params.id}
- APIRoute="appulimits"
- columns={[
- {
- name: 'type',
- type: 'hidden',
- defaultValue: 'app'
- },
- {
- name: 'relid',
- type: 'hidden',
- defaultValue: params.id
- },
- {
- name: 'Name',
- title: 'Name',
- inputField: {
- type: 'dynamicText'
- },
- filter: {
- type: 'dynamicText'
- }
- },
- {
- name: 'Soft',
- title: 'Soft',
- inputField: {
- type: 'dynamicText'
- },
- filter: {
- type: 'dynamicText'
- }
- },
- {
- name: 'Hard',
- title: 'Hard',
- inputField: {
- type: 'dynamicText'
- },
- filter: {
- type: 'dynamicText'
- }
- }
- ]}
- sorting={[{ columnName: 'id', direction: 'asc' }]}
- columnOrder={['Name', 'Soft', 'Hard']}
- filters={{ type: 'app', relid: params.id }}
- enableAdding
- enableDeleting
- enableSelection
- enableEditing
- />
- </Col>
- </Row>
- <Row>
- <Col sm={4} collapseRight>
- <Datatable
- label="Chained Apps"
- typeOf="appchains"
- belongsTo="app"
- id={params.id}
- APIRoute="appchains"
- columns={[
- {
- name: 'app_id',
- type: 'hidden',
- defaultValue: params.id
- },
- {
- name: 'chained_to',
- title: 'Chained To',
- type: 'select',
- defaultValueFrom: ['chained_to_name'],
- inputField: {
- defaultValueFrom: 'chained_to',
- type: 'selector',
- params: {
- APIRoute: 'apps',
- orderby: 'display_name',
- searchItems: ['display_name'],
- submitValue: 'id'
- }
- },
- filter: {
- type: 'selector',
- params: {
- APIRoute: 'apps',
- orderby: 'display_name',
- searchItems: ['display_name'],
- submitValue: 'id'
- }
- }
- }
- ]}
- sorting={[{ columnName: 'id', direction: 'asc' }]}
- columnOrder={['chained_to']}
- filters={{ app_id: params.id }}
- enableAdding
- enableDeleting
- enableSelection
- />
- </Col>
- <Col sm={8}> </Col>
- </Row>
- </div>
- </Tab.Pane>
- <Tab.Pane eventKey={2}>
- <Datatable
- label="App Custom Tables"
- typeOf="table"
- belongsTo="app"
- id={params.id}
- APIRoute="tables"
- columns={[
- {
- name: 'type',
- type: 'hidden',
- defaultValue: 'app'
- },
- {
- name: 'relid',
- type: 'hidden',
- defaultValue: params.id
- },
- {
- name: 'tableName',
- title: 'Table Name',
- inputField: {
- type: 'dynamicText',
- validate: ['required']
- },
- filter: {
- type: 'dynamicText',
- wildcardSearch: true
- }
- },
- {
- name: 'maxRows',
- title: 'Max Rows',
- inputField: {
- type: 'number'
- },
- filter: {
- type: 'number'
- }
- },
- {
- name: 'dockerAdd',
- title: 'Add Command',
- inputField: {
- type: 'dynamicText'
- },
- filter: {
- type: 'dynamicText'
- }
- },
- {
- name: 'dockerUpdate',
- title: 'Update Command',
- inputField: {
- type: 'dynamicText'
- },
- filter: {
- type: 'dynamicText'
- }
- },
- {
- name: 'dockerDelete',
- title: 'Delete Command',
- inputField: {
- type: 'dynamicText'
- },
- filter: {
- type: 'dynamicText'
- }
- },
- {
- name: 'icon',
- title: 'Icon',
- inputField: {
- type: 'dynamicText'
- },
- filter: {
- type: 'dynamicText'
- }
- },
- {
- name: 'description',
- title: 'Description',
- inputField: {
- type: 'dynamicText'
- },
- filter: {
- type: 'dynamicText'
- }
- },
- {
- name: 'admin_only',
- title: 'Admin Only',
- type: 'IsEnabledCell',
- inputField: {
- type: 'selector',
- params: {
- menuItems: {
- Yes: 1,
- No: 0
- }
- }
- },
- filter: {
- type: 'selector',
- params: {
- menuItems: {
- Yes: 1,
- No: 0
- }
- }
- }
- }
- ]}
- sorting={[{ columnName: 'id', direction: 'asc' }]}
- columnOrder={[
- 'tableName',
- 'maxRows',
- 'dockerAdd',
- 'dockerUpdate',
- 'dockerDelete',
- 'icon',
- 'description',
- 'admin_only'
- ]}
- filters={{ type: 'app', relid: params.id }}
- enableFilters
- enableAdding
- enableDeleting
- enableSelection
- enableEditing
- />
- </Tab.Pane>
- <Tab.Pane eventKey={3}>
- <Datatable
- label="App Custom Buttons"
- typeOf="button"
- belongsTo="app"
- id={params.id}
- APIRoute="buttons"
- columns={[
- {
- name: 'type',
- type: 'hidden',
- defaultValue: 'app'
- },
- {
- name: 'relid',
- type: 'hidden',
- defaultValue: params.id
- },
- {
- name: 'buttonName',
- title: 'buttonName',
- inputField: {
- type: 'dynamicText',
- validate: ['required']
- },
- filter: {
- type: 'dynamicText',
- wildcardSearch: true
- }
- },
- {
- name: 'buttonIcon',
- title: 'buttonIcon',
- inputField: {
- type: 'dynamicText',
- validate: ['required']
- },
- filter: {
- type: 'dynamicText',
- wildcardSearch: true
- }
- },
- {
- name: 'command',
- title: 'Command',
- inputField: {
- type: 'dynamicText'
- },
- filter: {
- type: 'dynamicText'
- }
- },
- {
- name: 'route_on_submit',
- title: 'Route On Submit',
- inputField: {
- type: 'dynamicText'
- },
- filter: {
- type: 'dynamicText'
- }
- },
- {
- name: 'dialog_text',
- title: 'Dialog Text',
- inputField: {
- type: 'dynamicText'
- },
- filter: {
- type: 'dynamicText'
- }
- },
- {
- name: 'admin_only',
- title: 'Admin Only',
- type: 'IsEnabledCell',
- inputField: {
- type: 'selector',
- params: {
- menuItems: {
- Yes: 1,
- No: 0
- }
- }
- },
- filter: {
- type: 'selector',
- params: {
- menuItems: {
- Yes: 1,
- No: 0
- }
- }
- }
- }
- ]}
- sorting={[{ columnName: 'id', direction: 'asc' }]}
- columnOrder={[
- 'buttonName',
- 'buttonIcon',
- 'command',
- 'route_on_submit',
- 'dialog_text',
- 'admin_only'
- ]}
- filters={{ type: 'app', relid: params.id }}
- enableFilters
- enableAdding
- enableDeleting
- enableSelection
- enableEditing
- />
- </Tab.Pane>
- <Tab.Pane eventKey={4}>
- <Datatable
- label="Custom Fields"
- typeOf="field"
- belongsTo="app"
- id={params.id}
- APIRoute="fields"
- columns={[
- {
- name: 'type',
- type: 'hidden',
- defaultValue: 'app'
- },
- {
- name: 'relid',
- type: 'hidden',
- defaultValue: params.id
- },
- {
- name: 'display_name',
- title: 'Name',
- inputField: {
- type: 'dynamicText',
- validate: ['required']
- },
- filter: {
- type: 'dynamicText',
- wildcardSearch: true
- }
- },
- {
- name: 'fname',
- title: 'Field Name',
- inputField: {
- type: 'dynamicText',
- validate: ['required']
- },
- filter: {
- type: 'dynamicText',
- wildcardSearch: true
- }
- },
- {
- name: 'fieldtype',
- title: 'Field Type',
- inputField: {
- type: 'selector',
- validate: ['required'],
- params: {
- menuItems: {
- dynamicText: 'dynamicText',
- password: 'password',
- textArea: 'textArea',
- selector: 'selector',
- switch: 'switch',
- hidden: 'hidden',
- clientURL: 'clientURL',
- externalURL: 'externalURL',
- staticText: 'staticText',
- date: 'date',
- email: 'email',
- number: 'number',
- IsEnabledCell: 'IsEnabledCell'
- }
- }
- },
- filter: {
- type: 'selector',
- params: {
- menuItems: {
- dynamicText: 'dynamicText',
- password: 'password',
- textArea: 'textArea',
- selector: 'selector',
- switch: 'switch',
- hidden: 'hidden',
- clientURL: 'clientURL',
- externalURL: 'externalURL',
- staticText: 'staticText',
- date: 'date',
- email: 'email',
- number: 'number',
- IsEnabledCell: 'IsEnabledCell'
- }
- }
- }
- },
- {
- name: 'description',
- title: 'Description',
- inputField: {
- type: 'dynamicText',
- validate: ['required']
- },
- filter: {
- type: 'dynamicText',
- wildcardSearch: true
- }
- },
- {
- name: 'default_value',
- title: 'Default Value',
- inputField: {
- type: 'dynamicText'
- },
- filter: {
- type: 'dynamicText',
- wildcardSearch: true
- }
- },
- {
- name: 'options',
- title: 'Options',
- inputField: {
- type: 'dynamicText'
- },
- filter: {
- type: 'dynamicText',
- wildcardSearch: true
- }
- },
- {
- name: 'required',
- title: 'Req',
- type: 'IsEnabledCell',
- width: 50,
- inputField: {
- type: 'selector',
- params: {
- menuItems: {
- Enabled: 1,
- Disabled: 0
- }
- }
- },
- filter: {
- type: 'selector',
- params: {
- menuItems: {
- Enabled: 1,
- Disabled: 0
- }
- }
- }
- },
- {
- name: 'minLength',
- title: 'Min',
- width: 50,
- inputField: {
- type: 'number'
- },
- filter: {
- type: 'number',
- wildcardSearch: true
- }
- },
- {
- name: 'maxLength',
- title: 'Max',
- width: 50,
- inputField: {
- type: 'number'
- },
- filter: {
- type: 'number',
- wildcardSearch: true
- }
- },
- {
- name: 'regex',
- title: 'Regex',
- inputField: {
- type: 'dynamicText'
- },
- filter: {
- type: 'dynamicText',
- wildcardSearch: true
- }
- },
- {
- name: 'adminonly',
- title: 'Admin',
- type: 'IsEnabledCell',
- width: 50,
- inputField: {
- type: 'selector',
- params: {
- menuItems: {
- Enabled: 1,
- Disabled: 0
- }
- }
- },
- filter: {
- type: 'selector',
- params: {
- menuItems: {
- Enabled: 1,
- Disabled: 0
- }
- }
- }
- },
- {
- name: 'sort_order',
- title: 'Sort',
- width: 50,
- inputField: {
- type: 'number'
- },
- filter: {
- type: 'number'
- }
- },
- {
- name: 'flex',
- title: 'Flex',
- width: 50,
- inputField: {
- validate: ['required'],
- type: 'number'
- },
- filter: {
- type: 'number',
- wildcardSearch: true
- }
- },
- {
- name: 'template_type',
- title: 'Tpl Type',
- width: 100,
- inputField: {
- type: 'selector',
- validate: ['required'],
- params: {
- menuItems: {
- none: 'none',
- app: 'app',
- user: 'user',
- instance: 'instance',
- password: 'password'
- }
- }
- }
- }
- ]}
- sorting={[{ columnName: 'id', direction: 'asc' }]}
- columnOrder={[
- 'display_name',
- 'fname',
- 'fieldtype',
- 'description',
- 'default_value',
- 'sort_order',
- 'flex',
- 'template_type',
- 'required',
- 'adminonly',
- 'minLength',
- 'maxLength',
- 'options',
- 'regex'
- ]}
- filters={{ type: 'app', relid: params.id }}
- enableFilters
- enableAdding
- enableDeleting
- enableEditing
- />
- </Tab.Pane>
- <Tab.Pane eventKey={5}>
- <Datatable
- label="Installed Instances"
- typeOf="appInstance"
- belongsTo={config.entity.single.toLowerCase()}
- id={params.id}
- APIRoute="apps/instances"
- onClickedURL={`/${config.entity.single.toLowerCase()}manager/installedapps`}
- onClickedParam="id"
- columns={[
- {
- name: 'created_at',
- title: 'Install Date',
- filter: { type: 'date' }
- },
- {
- name: 'user_id',
- title: 'User Name',
- defaultValueFrom: ['firstname', 'lastname'],
- filter: {
- type: 'search',
- params: {
- wildcardSearch: true,
- minLength: 3,
- APIRoute: 'users',
- orderby: 'id',
- searchItems: ['firstname', 'lastname'],
- submitValue: 'id',
- isSearch: true
- }
- }
- },
- {
- name: 'cylo_id',
- title: 'Cylo',
- defaultValueFrom: ['cyloname'],
- filter: {
- type: 'search',
- params: {
- wildcardSearch: true,
- minLength: 3,
- APIRoute: 'cylos',
- orderby: 'id',
- searchItems: ['cyloname'],
- submitValue: 'id'
- }
- }
- },
- {
- name: 'version',
- title: 'Version'
- },
- {
- name: 'latest_ver',
- title: 'Latest'
- },
- {
- name: 'app_slots',
- title: 'Slots'
- },
- {
- name: 'installing',
- title: 'Installing',
- type: 'IsEnabledCell',
- filter: {
- type: 'selector',
- params: {
- menuItems: {
- Yes: 1,
- No: 0
- }
- }
- }
- },
- {
- name: 'enabled',
- title: 'Enabled',
- type: 'IsEnabledCell',
- filter: {
- type: 'selector',
- params: {
- menuItems: {
- Enabled: 1,
- Disabled: 0
- }
- }
- }
- }
- ]}
- sorting={[{ columnName: 'created_at', direction: 'desc' }]}
- columnOrder={[
- 'user_id',
- 'cylo_id',
- 'version',
- 'latest_ver',
- 'app_slots',
- 'installing',
- 'enabled'
- ]}
- filters={{ app_id: params.id }}
- enableFilters
- />
- </Tab.Pane>
- <Tab.Pane eventKey={99}>
- <Datatable
- label="User Activity Logs"
- typeOf="log"
- belongsTo="user"
- id={params.id}
- APIRoute="activitylog"
- onClickedURL="/logs/activitylogs"
- onClickedParam="id"
- columns={[
- {
- name: 'user_id',
- title: 'Name',
- defaultValueFrom: [
- 'firstname',
- 'lastname',
- 'servername'
- ],
- filter: {
- type: 'search',
- params: {
- wildcardSearch: true,
- minLength: 3,
- APIRoute: 'users',
- orderby: 'id',
- searchItems: ['firstname', 'lastname'],
- submitValue: 'id',
- isSearch: true
- }
- }
- },
- {
- name: 'created_at',
- title: 'Time',
- filter: { type: 'date' }
- },
- {
- name: 'ip',
- title: 'IP Address',
- filter: { type: 'dynamicText', wildcardSearch: true }
- },
- {
- name: 'route',
- title: 'Route',
- filter: { type: 'dynamicText' }
- },
- {
- name: 'action',
- title: 'Action',
- filter: { type: 'dynamicText' }
- },
- {
- name: 'type',
- title: 'Type',
- filter: { type: 'dynamicText' }
- },
- {
- name: 'relid',
- title: 'ID',
- filter: { type: 'number' }
- }
- ]}
- sorting={[{ columnName: 'created_at', direction: 'desc' }]}
- columnOrder={[
- 'created_at',
- 'ip',
- 'route',
- 'action',
- 'type',
- 'relid'
- ]}
- filters={{ type: 'App', relid: params.id }}
- enableFilters
- enableDragging
- />
- </Tab.Pane>
- </Tab.Content>
- </Col>
- </Row>
- </Tab.Container>
- </div>
- );
- }
- }
- const connector: Connector<{}, Props> = connect(
- ({ tabBar }: ReduxState) => ({ tabBar }),
- (dispatch: Dispatch) => ({
- dispatchTabBarSetTabs: (tabs: TabBarType) =>
- dispatch(action.tabBarSetTabs(tabs)),
- dispatchTabBarSelectTab: (selectedTab: Object) =>
- dispatch(action.tabBarSelectTab(selectedTab))
- })
- );
- export default connector(App);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement