@atlaskit/editor-plugin-extension
Version:
editor-plugin-extension plugin for @atlaskit/editor-core
50 lines (48 loc) • 1.37 kB
JavaScript
/**
* @jsxRuntime classic
* @jsx jsx
*/
import React, { useState } from 'react';
// eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
import { css, jsx } from '@emotion/react';
import { injectIntl } from 'react-intl';
import Tabs, { Tab, TabList, TabPanel } from '@atlaskit/tabs';
const panelWrapperStyles = css({
flexGrow: 1,
maxWidth: '100%'
});
const TabGroupImpl = props => {
const {
field,
renderPanel
} = props;
const {
fields
} = field;
const [activeTab, setActiveTab] = useState(() => {
const activeTabName = field.defaultTab || fields[0].name;
const index = fields.findIndex(f => f.name === activeTabName);
return Math.max(index, 0);
});
const onChange = React.useCallback(index => {
setActiveTab(index);
}, [setActiveTab]);
return jsx(Tabs, {
id: `configPanelTabs-${field.name}`,
onChange: onChange,
selected: activeTab
}, jsx(TabList, null, fields.map(({
name,
label
}) => jsx(Tab, {
key: `tab-${name}`
}, label))), fields.map(field => jsx(TabPanel, {
key: `panel-${field.name}`
}, jsx("div", {
css: panelWrapperStyles
}, renderPanel(field)))));
};
TabGroupImpl.displayName = 'TabGroup';
// eslint-disable-next-line @typescript-eslint/ban-types
const TabGroup = injectIntl(TabGroupImpl);
export default TabGroup;