All Downloads are FREE. Search and download functionalities are using the official Maven repository.

components.core.ModalPage.jsx Maven / Gradle / Ivy

The newest version!
import React from 'react'
import PropTypes from 'prop-types'
import { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'
import classNames from 'classnames'
import { compose } from 'recompose'

import Toolbar from '../buttons/Toolbar'

// eslint-disable-next-line import/no-cycle,import/no-named-as-default
import Page from './Page'
import { PageTitle } from './PageTitle'
import withOverlayMethods from './withOverlayMethods'
/**
 * Компонент, отображающий модальное окно
 * @reactProps {string} pageId - id пейджа
 * @reactProps {string} name - имя модалки
 * @reactProps {boolean} visible - отображается модалка или нет
 * @reactProps {string} size - размер('sm' или 'lg')
 * @reactProps {string | bool} backdrop -  наличие фона модального окна  false/true/'static'
 * @reactProps {string} modalHeaderTitle - заголовок в хэдере
 * @reactProps {boolean} closeButton - Есть кнопка закрытия или нет
 * @reactProps {array} toolbar - массив, описывающий внений вид кнопок-экшенов
 * @reactProps {object} props - аргументы для экшенов-функций
 * @reactProps {boolean}  disabled - блокировка модалки
 * @reactProps {function}  hidePrompt - скрытие окна подтверждения
 * @example
 *  
 */

function ModalPage({
    entityKey,
    toolbar,
    visible,
    loading,
    pageUrl,
    pageId,
    src,
    pathMapping,
    queryMapping,
    size,
    disabled,
    scrollable,
    prompt,
    className,
    backdrop,
    style,
    hasHeader,
    renderFromSrc,
    closeOverlay,
    metadata = {},
    ...modalProps
}) {
    const { page = {} } = metadata
    const { modalHeaderTitle, datasource, model: modelPrefix = 'resolve' } = page

    const pageMapping = {
        pathMapping,
        queryMapping,
    }

    const classes = classNames({ 'd-none': loading })

    return (
         closeOverlay(prompt)}
            size={size}
            style={style}
            scrollable={scrollable}
            className={className}
            backdrop={backdrop}
        >
            {hasHeader && (
                 closeOverlay(prompt)}
                >
                    
                
            )}

            
                {/* eslint-disable-next-line no-nested-ternary */}
                {pageUrl ? (
                    
                ) : src ? (
                    renderFromSrc(src)
                ) : null}
            

            {toolbar && (
                
                    
)}
) } export const ModalWindow = ModalPage ModalPage.propTypes = { /** * ID страницы */ pageId: PropTypes.string, /** * Видимость модального окна */ visible: PropTypes.bool, /** * Размер окна */ size: PropTypes.oneOf(['lg', 'sm']), /** * Настройка кнопок */ toolbar: PropTypes.array, disabled: PropTypes.bool, /** * Класс модального окна */ className: PropTypes.string, /** * Объект стилей */ style: PropTypes.object, /** * Значение для отоборажения хедера */ hasHeader: PropTypes.bool, /** * Фон модального окна */ backdrop: PropTypes.oneOfType([PropTypes.bool, PropTypes.oneOf(['static'])]), entityKey: PropTypes.string, loading: PropTypes.bool, pageUrl: PropTypes.string, src: PropTypes.any, pathMapping: PropTypes.any, queryMapping: PropTypes.any, scrollable: PropTypes.bool, prompt: PropTypes.func, renderFromSrc: PropTypes.func, closeOverlay: PropTypes.func, metadata: PropTypes.object, } ModalPage.defaultProps = { size: 'lg', disabled: false, hasHeader: false, backdrop: 'static', } ModalPage.contextTypes = { resolveProps: PropTypes.func, scrollable: false, } export default compose(withOverlayMethods)(ModalPage)




© 2015 - 2024 Weber Informatics LLC | Privacy Policy