coreui-free-react-admin-template
752 строки · 27.7 Кб
1import React, { useState } from 'react'2import {3CButton,4CCard,5CCardBody,6CCardHeader,7CCol,8CLink,9CModal,10CModalBody,11CModalFooter,12CModalHeader,13CModalTitle,14CPopover,15CRow,16CTooltip,17} from '@coreui/react'18import { DocsExample } from 'src/components'19
20const LiveDemo = () => {21const [visible, setVisible] = useState(false)22return (23<>24<CButton color="primary" onClick={() => setVisible(!visible)}>25Launch demo modal
26</CButton>27<CModal visible={visible} onClose={() => setVisible(false)}>28<CModalHeader>29<CModalTitle>Modal title</CModalTitle>30</CModalHeader>31<CModalBody>Woohoo, you're reading this text in a modal!</CModalBody>32<CModalFooter>33<CButton color="secondary" onClick={() => setVisible(false)}>34Close
35</CButton>36<CButton color="primary">Save changes</CButton>37</CModalFooter>38</CModal>39</>40)41}
42
43const StaticBackdrop = () => {44const [visible, setVisible] = useState(false)45return (46<>47<CButton color="primary" onClick={() => setVisible(!visible)}>48Launch static backdrop modal49</CButton>50<CModal backdrop="static" visible={visible} onClose={() => setVisible(false)}>51<CModalHeader>52<CModalTitle>Modal title</CModalTitle>53</CModalHeader>54<CModalBody>55I will not close if you click outside me. Don'teven try to press escape key.56</CModalBody>57<CModalFooter>58<CButton color="secondary" onClick={() => setVisible(false)}>59Close
60</CButton>61<CButton color="primary">Save changes</CButton>62</CModalFooter>63</CModal>64</>65)66}
67
68const ScrollingLongContent = () => {69const [visible, setVisible] = useState(false)70return (71<>72<CButton color="primary" onClick={() => setVisible(!visible)}>73Launch demo modal
74</CButton>75<CModal visible={visible} onClose={() => setVisible(false)}>76<CModalHeader>77<CModalTitle>Modal title</CModalTitle>78</CModalHeader>79<CModalBody>80<p>81Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis82in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.83</p>84<p>85Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis86lacus vel augue laoreet rutrum faucibus dolor auctor.87</p>88<p>89Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel90scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus91auctor fringilla.92</p>93<p>94Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis95in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.96</p>97<p>98Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis99lacus vel augue laoreet rutrum faucibus dolor auctor.100</p>101<p>102Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel103scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus104auctor fringilla.105</p>106<p>107Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis108in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.109</p>110<p>111Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis112lacus vel augue laoreet rutrum faucibus dolor auctor.113</p>114<p>115Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel116scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus117auctor fringilla.118</p>119<p>120Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis121in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.122</p>123<p>124Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis125lacus vel augue laoreet rutrum faucibus dolor auctor.126</p>127<p>128Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel129scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus130auctor fringilla.131</p>132<p>133Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis134in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.135</p>136<p>137Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis138lacus vel augue laoreet rutrum faucibus dolor auctor.139</p>140<p>141Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel142scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus143auctor fringilla.144</p>145<p>146Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis147in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.148</p>149<p>150Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis151lacus vel augue laoreet rutrum faucibus dolor auctor.152</p>153<p>154Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel155scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus156auctor fringilla.157</p>158</CModalBody>159<CModalFooter>160<CButton color="secondary" onClick={() => setVisible(false)}>161Close
162</CButton>163<CButton color="primary">Save changes</CButton>164</CModalFooter>165</CModal>166</>167)168}
169
170const ScrollingLongContent2 = () => {171const [visible, setVisible] = useState(false)172return (173<>174<CButton color="primary" onClick={() => setVisible(!visible)}>175Launch demo modal
176</CButton>177<CModal scrollable visible={visible} onClose={() => setVisible(false)}>178<CModalHeader>179<CModalTitle>Modal title</CModalTitle>180</CModalHeader>181<CModalBody>182<p>183Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis184in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.185</p>186<p>187Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis188lacus vel augue laoreet rutrum faucibus dolor auctor.189</p>190<p>191Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel192scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus193auctor fringilla.194</p>195<p>196Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis197in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.198</p>199<p>200Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis201lacus vel augue laoreet rutrum faucibus dolor auctor.202</p>203<p>204Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel205scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus206auctor fringilla.207</p>208<p>209Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis210in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.211</p>212<p>213Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis214lacus vel augue laoreet rutrum faucibus dolor auctor.215</p>216<p>217Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel218scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus219auctor fringilla.220</p>221<p>222Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis223in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.224</p>225<p>226Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis227lacus vel augue laoreet rutrum faucibus dolor auctor.228</p>229<p>230Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel231scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus232auctor fringilla.233</p>234<p>235Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis236in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.237</p>238<p>239Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis240lacus vel augue laoreet rutrum faucibus dolor auctor.241</p>242<p>243Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel244scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus245auctor fringilla.246</p>247<p>248Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis249in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.250</p>251<p>252Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis253lacus vel augue laoreet rutrum faucibus dolor auctor.254</p>255<p>256Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel257scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus258auctor fringilla.259</p>260</CModalBody>261<CModalFooter>262<CButton color="secondary" onClick={() => setVisible(false)}>263Close
264</CButton>265<CButton color="primary">Save changes</CButton>266</CModalFooter>267</CModal>268</>269)270}
271
272const VerticallyCentered = () => {273const [visible, setVisible] = useState(false)274return (275<>276<CButton color="primary" onClick={() => setVisible(!visible)}>277Vertically centered modal
278</CButton>279<CModal alignment="center" visible={visible} onClose={() => setVisible(false)}>280<CModalHeader>281<CModalTitle>Modal title</CModalTitle>282</CModalHeader>283<CModalBody>284Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis285in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.286</CModalBody>287<CModalFooter>288<CButton color="secondary" onClick={() => setVisible(false)}>289Close
290</CButton>291<CButton color="primary">Save changes</CButton>292</CModalFooter>293</CModal>294</>295)296}
297
298const VerticallyCentered2 = () => {299const [visible, setVisible] = useState(false)300return (301<>302<CButton color="primary" onClick={() => setVisible(!visible)}>303Vertically centered scrollable modal
304</CButton>305<CModal alignment="center" scrollable visible={visible} onClose={() => setVisible(false)}>306<CModalHeader>307<CModalTitle>Modal title</CModalTitle>308</CModalHeader>309<CModalBody>310<p>311Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis312in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.313</p>314<p>315Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis316lacus vel augue laoreet rutrum faucibus dolor auctor.317</p>318<p>319Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel320scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus321auctor fringilla.322</p>323<p>324Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis325in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.326</p>327<p>328Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis329lacus vel augue laoreet rutrum faucibus dolor auctor.330</p>331</CModalBody>332<CModalFooter>333<CButton color="secondary" onClick={() => setVisible(false)}>334Close
335</CButton>336<CButton color="primary">Save changes</CButton>337</CModalFooter>338</CModal>339</>340)341}
342
343const TooltipsPopovers = () => {344const [visible, setVisible] = useState(false)345return (346<>347<CButton color="primary" onClick={() => setVisible(!visible)}>348Launch demo modal
349</CButton>350<CModal alignment="center" visible={visible} onClose={() => setVisible(false)}>351<CModalHeader>352<CModalTitle>Modal title</CModalTitle>353</CModalHeader>354<CModalBody>355<h5>Popover in a modal</h5>356<p>357This
358<CPopover title="Popover title" content="Popover body content is set in this property.">359<CButton color="primary">button</CButton>360</CPopover>{' '}361triggers a popover on click.362</p>363<hr />364<h5>Tooltips in a modal</h5>365<p>366<CTooltip content="Tooltip">367<CLink>This link</CLink>368</CTooltip>{' '}369and
370<CTooltip content="Tooltip">371<CLink>that link</CLink>372</CTooltip>{' '}373have tooltips on hover.374</p>375</CModalBody>376<CModalFooter>377<CButton color="secondary" onClick={() => setVisible(false)}>378Close
379</CButton>380<CButton color="primary">Save changes</CButton>381</CModalFooter>382</CModal>383</>384)385}
386
387const OptionalSizes = () => {388const [visibleXL, setVisibleXL] = useState(false)389const [visibleLg, setVisibleLg] = useState(false)390const [visibleSm, setVisibleSm] = useState(false)391return (392<>393<CButton color="primary" onClick={() => setVisibleXL(!visibleXL)}>394Extra large modal
395</CButton>396<CButton color="primary" onClick={() => setVisibleLg(!visibleLg)}>397Large modal
398</CButton>399<CButton color="primary" onClick={() => setVisibleSm(!visibleSm)}>400Small large modal
401</CButton>402<CModal size="xl" visible={visibleXL} onClose={() => setVisibleXL(false)}>403<CModalHeader>404<CModalTitle>Extra large modal</CModalTitle>405</CModalHeader>406<CModalBody>...</CModalBody>407</CModal>408<CModal size="lg" visible={visibleLg} onClose={() => setVisibleLg(false)}>409<CModalHeader>410<CModalTitle>Large modal</CModalTitle>411</CModalHeader>412<CModalBody>...</CModalBody>413</CModal>414<CModal size="sm" visible={visibleSm} onClose={() => setVisibleSm(false)}>415<CModalHeader>416<CModalTitle>Small modal</CModalTitle>417</CModalHeader>418<CModalBody>...</CModalBody>419</CModal>420</>421)422}
423
424const FullscreenModal = () => {425const [visible, setVisible] = useState(false)426const [visibleSm, setVisibleSm] = useState(false)427const [visibleMd, setVisibleMd] = useState(false)428const [visibleLg, setVisibleLg] = useState(false)429const [visibleXL, setVisibleXL] = useState(false)430const [visibleXXL, setVisibleXXL] = useState(false)431
432return (433<>434<CButton color="primary" onClick={() => setVisible(!visible)}>435Full screen
436</CButton>437<CButton color="primary" onClick={() => setVisibleSm(!visibleSm)}>438Full screen below sm
439</CButton>440<CButton color="primary" onClick={() => setVisibleMd(!visibleMd)}>441Full screen below md
442</CButton>443<CButton color="primary" onClick={() => setVisibleLg(!visibleLg)}>444Full screen below lg
445</CButton>446<CButton color="primary" onClick={() => setVisibleXL(!visibleXL)}>447Full screen below xl
448</CButton>449<CButton color="primary" onClick={() => setVisibleXXL(!visibleXXL)}>450Full screen below xxl
451</CButton>452<CModal fullscreen visible={visible} onClose={() => setVisible(false)}>453<CModalHeader>454<CModalTitle>Full screen</CModalTitle>455</CModalHeader>456<CModalBody>...</CModalBody>457</CModal>458<CModal fullscreen="sm" visible={visibleSm} onClose={() => setVisibleSm(false)}>459<CModalHeader>460<CModalTitle>Full screen below sm</CModalTitle>461</CModalHeader>462<CModalBody>...</CModalBody>463</CModal>464<CModal fullscreen="md" visible={visibleMd} onClose={() => setVisibleMd(false)}>465<CModalHeader>466<CModalTitle>Full screen below md</CModalTitle>467</CModalHeader>468<CModalBody>...</CModalBody>469</CModal>470<CModal fullscreen="lg" visible={visibleLg} onClose={() => setVisibleLg(false)}>471<CModalHeader>472<CModalTitle>Full screen below lg</CModalTitle>473</CModalHeader>474<CModalBody>...</CModalBody>475</CModal>476<CModal fullscreen="xl" visible={visibleXL} onClose={() => setVisibleXL(false)}>477<CModalHeader>478<CModalTitle>Full screen below xl</CModalTitle>479</CModalHeader>480<CModalBody>...</CModalBody>481</CModal>482<CModal fullscreen="xxl" visible={visibleXXL} onClose={() => setVisibleXXL(false)}>483<CModalHeader>484<CModalTitle>Full screen below xxl</CModalTitle>485</CModalHeader>486<CModalBody>...</CModalBody>487</CModal>488</>489)490}
491
492const Modals = () => {493return (494<CRow>495<CCol xs={12}>496<CCard className="mb-4">497<CCardHeader>498<strong>React Modal</strong>499</CCardHeader>500<CCardBody>501<p className="text-body-secondary small">502Below is a static modal example (meaning its <code>position</code> and{' '}503<code>display</code> have been overridden). Included are the modal header, modal body504(required for <code>padding</code>), and modal footer (optional). We ask that you505include modal headers with dismiss actions whenever possible, or provide another506explicit dismiss action.507</p>508<DocsExample href="components/modal">509<CModal510className="show d-block position-static"511backdrop={false}512keyboard={false}513portal={false}514visible
515>516<CModalHeader>517<CModalTitle>Modal title</CModalTitle>518</CModalHeader>519<CModalBody>Modal body text goes here.</CModalBody>520<CModalFooter>521<CButton color="secondary">Close</CButton>522<CButton color="primary">Save changes</CButton>523</CModalFooter>524</CModal>525</DocsExample>526</CCardBody>527</CCard>528</CCol>529<CCol xs={12}>530<CCard className="mb-4">531<CCardHeader>532<strong>React Modal</strong> <small>Live demo</small>533</CCardHeader>534<CCardBody>535<p className="text-body-secondary small">536Toggle a working modal demo by clicking the button below. It will slide down and fade537in from the top of the page.538</p>539<DocsExample href="components/modal#live-demo">{LiveDemo()}</DocsExample>540</CCardBody>541</CCard>542</CCol>543<CCol xs={12}>544<CCard className="mb-4">545<CCardHeader>546<strong>React Modal</strong> <small>Static backdrop</small>547</CCardHeader>548<CCardBody>549<p className="text-body-secondary small">550If you don’t provide an <code>onDimsiss</code> handler to the Modal component, your551modal will behave as though the backdrop is static, meaning it will not close when552clicking outside it. Click the button below to try it.553</p>554<DocsExample href="components/modal#static-backdrop">{StaticBackdrop()}</DocsExample>555</CCardBody>556</CCard>557</CCol>558<CCol xs={12}>559<CCard className="mb-4">560<CCardHeader>561<strong>React Modal</strong> <small>Scrolling long content</small>562</CCardHeader>563<CCardBody>564<p className="text-body-secondary small">565If you don’t provide an <code>onDimsiss</code> handler to the Modal component, your566modal will behave as though the backdrop is static, meaning it will not close when567clicking outside it. Click the button below to try it.568</p>569<DocsExample href="components/modal#scrolling-long-content">570{ScrollingLongContent()}571</DocsExample>572<p className="text-body-secondary small">573You can also create a scrollable modal that allows scroll the modal body by adding{' '}574<code>scrollable</code> prop.575</p>576<DocsExample href="components/modal#scrolling-long-content">577{ScrollingLongContent2()}578</DocsExample>579</CCardBody>580</CCard>581</CCol>582<CCol xs={12}>583<CCard className="mb-4">584<CCardHeader>585<strong>React Modal</strong> <small>Vertically centered</small>586</CCardHeader>587<CCardBody>588<p className="text-body-secondary small">589Add <code>alignment="center"</code> to <code><CModal></code> to590vertically center the modal.591</p>592<DocsExample href="components/modal#vertically-centered">593{VerticallyCentered()}594</DocsExample>595<DocsExample href="components/modal#vertically-centered">596{VerticallyCentered2()}597</DocsExample>598</CCardBody>599</CCard>600</CCol>601<CCol xs={12}>602<CCard className="mb-4">603<CCardHeader>604<strong>React Modal</strong> <small>Tooltips and popovers</small>605</CCardHeader>606<CCardBody>607<p className="text-body-secondary small">608<code><CTooltips></code> and <code><CPopovers></code> can be placed within609modals as needed. When modals are closed, any tooltips and popovers within are also610automatically dismissed.611</p>612<DocsExample href="components/modal#tooltips-and-popovers">613{TooltipsPopovers()}614</DocsExample>615</CCardBody>616</CCard>617</CCol>618<CCol xs={12}>619<CCard className="mb-4">620<CCardHeader>621<strong>React Modal</strong> <small>Optional sizes</small>622</CCardHeader>623<CCardBody>624<p className="text-body-secondary small">625Modals have three optional sizes, available via modifier classes to be placed on a{' '}626<code><CModal></code>. These sizes kick in at certain breakpoints to avoid627horizontal scrollbars on narrower viewports.628</p>629<table className="table">630<thead>631<tr>632<th>Size</th>633<th>Property size</th>634<th>Modal max-width</th>635</tr>636</thead>637<tbody>638<tr>639<td>Small</td>640<td>641<code>'sm'</code>642</td>643<td>644<code>300px</code>645</td>646</tr>647<tr>648<td>Default</td>649<td className="text-body-secondary">None</td>650<td>651<code>500px</code>652</td>653</tr>654<tr>655<td>Large</td>656<td>657<code>'lg'</code>658</td>659<td>660<code>800px</code>661</td>662</tr>663<tr>664<td>Extra large</td>665<td>666<code>'xl'</code>667</td>668<td>669<code>1140px</code>670</td>671</tr>672</tbody>673</table>674<DocsExample href="components/modal#optional-sizes">{OptionalSizes()}</DocsExample>675</CCardBody>676</CCard>677</CCol>678<CCol xs={12}>679<CCard className="mb-4">680<CCardHeader>681<strong>React Modal</strong> <small>Fullscreen Modal</small>682</CCardHeader>683<CCardBody>684<p className="text-body-secondary small">685Another override is the option to pop up a modal that covers the user viewport,686available via property <code>fullscrean</code>.687</p>688<table className="table">689<thead>690<tr>691<th>Property fullscrean</th>692<th>Availability</th>693</tr>694</thead>695<tbody>696<tr>697<td>698<code>true</code>699</td>700<td>Always</td>701</tr>702<tr>703<td>704<code>'sm'</code>705</td>706<td>707Below <code>576px</code>708</td>709</tr>710<tr>711<td>712<code>'md'</code>713</td>714<td>715Below <code>768px</code>716</td>717</tr>718<tr>719<td>720<code>'lg'</code>721</td>722<td>723Below <code>992px</code>724</td>725</tr>726<tr>727<td>728<code>'xl'</code>729</td>730<td>731Below <code>1200px</code>732</td>733</tr>734<tr>735<td>736<code>'xxl'</code>737</td>738<td>739Below <code>1400px</code>740</td>741</tr>742</tbody>743</table>744<DocsExample href="components/modal#fullscreen-modal">{FullscreenModal()}</DocsExample>745</CCardBody>746</CCard>747</CCol>748</CRow>749)750}
751
752export default Modals753