![JAR search and dependency download from the Maven repository](/logo.png)
amework.n2o-react.7.28.2.source-code.N2o.jsx Maven / Gradle / Ivy
import React, { Component } from 'react'
import PropTypes from 'prop-types'
import { Provider } from 'react-redux'
import pick from 'lodash/pick'
import { compose, withContext, defaultProps, withProps } from 'recompose'
import { withTranslation } from 'react-i18next'
import './i18n'
import packageJson from '../package.json'
import history from './history'
import configureStore from './store'
import { FactoryProvider } from './core/factory/FactoryProvider'
import factoryPoints from './core/factory/factoryPoints'
import factoryConfigShape from './core/factory/factoryConfigShape'
import apiProvider from './core/api'
import Router from './components/core/Router'
import Application from './components/core/Application'
import { Template } from './components/core/templates'
import globalFnDate from './utils/globalFnDate'
import { errorTemplates } from './components/errors/errorTemplates'
import locales from './locales'
import { ErrorHandlersProvider } from './core/error/Container'
import '@fortawesome/fontawesome-free/css/all.css'
import { ExpressionContext } from './core/Expression/Context'
import functions from './utils/functions'
import { defaultProvider } from './core/auth/Provider'
const { version } = packageJson
class N2o extends Component {
constructor(props) {
super(props)
this.state = { isOnline: true }
const config = {
security: {
provider: defaultProvider,
...props.security,
},
messages: props.messages,
customReducers: props.customReducers,
customSagas: props.customSagas,
apiProvider: props.apiProvider,
factories: this.generateConfig(),
}
this.store = configureStore(props.initialState, history, config)
globalFnDate.addFormat(props.formats)
}
generateConfig() {
return pick(this.props, factoryPoints)
}
componentDidMount() {
window.addEventListener('offline', this.handleOffline)
window.addEventListener('online', this.handleOnline)
}
componentWillUnmount() {
window.removeEventListener('offline', this.handleOffline)
window.removeEventListener('online', this.handleOnline)
}
handleOffline = () => { this.setState({ isOnline: false }) }
handleOnline = () => { this.setState({ isOnline: true }) }
render() {
const {
realTimeConfig,
embeddedRouting,
children,
i18n,
locales: customLocales = {},
evalContext,
extraDefaultErrorPages,
} = this.props
const { isOnline } = this.state
const config = this.generateConfig()
const handlers = [errorTemplates(extraDefaultErrorPages, isOnline)]
const context = {
// eslint-disable-next-line no-underscore-dangle
...(window._n2oEvalContext || {}),
...functions,
...(evalContext || {}),
}
return (
{children} }
/>
)
}
}
N2o.propTypes = {
...factoryConfigShape,
formats: PropTypes.shape({
dateFormat: PropTypes.string,
timeFormat: PropTypes.string,
}),
security: PropTypes.shape({
provider: PropTypes.func,
authUrl: PropTypes.string,
}),
messages: PropTypes.shape({
timeout: PropTypes.shape({
error: PropTypes.number,
success: PropTypes.number,
warning: PropTypes.number,
info: PropTypes.number,
}),
}),
customReducers: PropTypes.object,
customSagas: PropTypes.array,
apiProvider: PropTypes.func,
realTimeConfig: PropTypes.bool,
embeddedRouting: PropTypes.bool,
evalContext: PropTypes.object,
children: PropTypes.oneOfType([
PropTypes.arrayOf(PropTypes.node),
PropTypes.node,
]),
locales: PropTypes.object,
initialState: PropTypes.object,
}
const EnhancedN2O = compose(
withTranslation(),
defaultProps({
defaultTemplate: Template,
defaultPage: 'StandardPage',
extraDefaultErrorPages: {},
formats: {
dateFormat: 'YYYY-MM-DD',
timeFormat: 'HH:mm:ss',
},
security: {
provider: defaultProvider,
},
messages: {},
customReducers: {},
customSagas: [],
apiProvider,
realTimeConfig: true,
embeddedRouting: true,
evalContext: {},
locales: {},
initialState: {},
markdownFieldMappers: {},
}),
withContext(
{
defaultTemplate: PropTypes.oneOfType([
PropTypes.func,
PropTypes.element,
PropTypes.node,
]),
defaultPage: PropTypes.oneOfType([
PropTypes.func,
PropTypes.element,
PropTypes.node,
]),
extraDefaultErrorPages: PropTypes.arrayOf(
PropTypes.oneOfType([PropTypes.node, PropTypes.element, PropTypes.func]),
),
version: PropTypes.string,
markdownFieldMappers: PropTypes.object,
},
props => ({
defaultTemplate: props.defaultTemplate,
defaultPage: props.defaultPage,
extraDefaultErrorPages: props.extraDefaultErrorPages,
markdownFieldMappers: props.markdownFieldMappers,
version,
}),
),
withProps(props => ({
ref: props.forwardedRef,
})),
)(N2o)
// This works! Because forwardedRef is now treated like a regular prop.
export default React.forwardRef(({ ...props }, ref) => (
))
© 2015 - 2025 Weber Informatics LLC | Privacy Policy