mirror of
https://github.com/OpenNebula/one.git
synced 2025-03-16 22:50:10 +03:00
F OpenNebula/one#5422: Add feature to tabs
This commit is contained in:
parent
59c16d7522
commit
b987aaea25
@ -1,9 +1,9 @@
|
||||
import React, { useState, useMemo, memo } from 'react'
|
||||
import React, { useState, useMemo } from 'react'
|
||||
import PropTypes from 'prop-types'
|
||||
|
||||
import { Tabs as MTabs, Tab as MTab } from '@material-ui/core'
|
||||
|
||||
const Content = memo(({ name, renderContent, hidden }) => (
|
||||
const Content = ({ name, renderContent: Content, hidden }) => (
|
||||
<div key={`tab-${name}`}
|
||||
style={{
|
||||
padding: 2,
|
||||
@ -12,11 +12,11 @@ const Content = memo(({ name, renderContent, hidden }) => (
|
||||
display: hidden ? 'none' : 'block'
|
||||
}}
|
||||
>
|
||||
{typeof renderContent === 'function' ? renderContent() : renderContent}
|
||||
{typeof Content === 'function' ? <Content /> : Content}
|
||||
</div>
|
||||
), (prev, next) => prev.hidden === next.hidden)
|
||||
)
|
||||
|
||||
const Tabs = ({ tabs = [] }) => {
|
||||
const Tabs = ({ tabs = [], renderHiddenTabs = false }) => {
|
||||
const [tabSelected, setTab] = useState(0)
|
||||
|
||||
const renderTabs = useMemo(() => (
|
||||
@ -38,7 +38,7 @@ const Tabs = ({ tabs = [] }) => {
|
||||
</MTabs>
|
||||
), [tabSelected])
|
||||
|
||||
const renderTabContent = useMemo(() =>
|
||||
const renderAllHiddenTabContents = useMemo(() =>
|
||||
tabs.map((tabProps, idx) => {
|
||||
const { name, value = idx } = tabProps
|
||||
const hidden = tabSelected !== value
|
||||
@ -49,7 +49,11 @@ const Tabs = ({ tabs = [] }) => {
|
||||
return (
|
||||
<>
|
||||
{renderTabs}
|
||||
{renderTabContent}
|
||||
{renderHiddenTabs ? (
|
||||
renderAllHiddenTabContents
|
||||
) : (
|
||||
<Content {...tabs.find(({ value }, idx) => (value ?? idx) === tabSelected)} />
|
||||
)}
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
import { createSlice, isFulfilled } from '@reduxjs/toolkit'
|
||||
import { createSlice } from '@reduxjs/toolkit'
|
||||
|
||||
import { updateResourceList } from 'client/features/One/utils'
|
||||
import { eventUpdateResourceState } from 'client/features/One/socket/actions'
|
||||
|
Loading…
x
Reference in New Issue
Block a user