Skip to content

Commit

Permalink
Added initial package
Browse files Browse the repository at this point in the history
  • Loading branch information
tiberiuichim committed Aug 4, 2020
0 parents commit 4d664fd
Show file tree
Hide file tree
Showing 9 changed files with 179 additions and 0 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
node_modules/
*~
11 changes: 11 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"name": "volto-tabsblock",
"version": "1.0.0",
"description": "A Volto block that provides tabs for regular composite pages",
"main": "src/index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
51 changes: 51 additions & 0 deletions src/Tabs/TabsBlockEdit.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import React from 'react';
import { SidebarPortal } from '@plone/volto/components'; // EditBlock
import TabsBlockView from './TabsBlockView';
import InlineForm from '@plone/volto/components/manage/Form/InlineForm';
import schema from './schema';
import { useFormStateContext } from '@plone/volto/components/manage/Form/FormContext';

const EditTabsBlock = (props) => {
const [activeTab, setActiveTab] = React.useState(0);
console.log('activeTab', activeTab);
const { contextData, setContextData } = useFormStateContext();
const currentContextData = React.useRef(null);

React.useEffect(() => {
if (!currentContextData.current) {
currentContextData.current = contextData;
console.log('current', currentContextData.current);
}
});

return (
<div className="block selected">
<div className="block-inner-wrapper">
<TabsBlockView
data={props.data}
onTabChange={(index) => {
setActiveTab(index);
}}
activeIndex={activeTab}
/>
</div>

<SidebarPortal selected={props.selected}>
<InlineForm
schema={schema}
title={schema.title}
onChangeField={(id, value) => {
props.onChangeBlock(props.block, {
...props.data,
[id]: value,
});
}}
formData={props.data}
block={props.block}
/>
</SidebarPortal>
</div>
);
};

export default EditTabsBlock;
27 changes: 27 additions & 0 deletions src/Tabs/TabsBlockView.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import React from 'react';
import { Tab } from 'semantic-ui-react';
import './public.less';

const TabsBlockView = ({ onTabChange, data, activeIndex, ...rest }) => {
const { tabs = [{ title: 'Default' }] } = data;
console.log('activeTab', activeIndex);
return (
<div className="children-tabs-view">
<div id="page-document" className="ui container">
<Tab
menu={{ attached: false, tabular: false }}
panes={tabs.map((child) => ({
menuItem: child.title,
render: () => '',
}))}
onTabChange={(event, { activeIndex }) => {
onTabChange && onTabChange(activeIndex);
}}
activeIndex={activeIndex}
/>
</div>
</div>
);
};

export default TabsBlockView;
2 changes: 2 additions & 0 deletions src/Tabs/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export TabsBlockEdit from './TabsBlockEdit';
export TabsBlockView from './TabsBlockView';
6 changes: 6 additions & 0 deletions src/Tabs/public.less
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
@import "~volto-tabsblock/less/globals.less";

.ui.menu .active.item {
background-color: @highlightBackground !important;
color: @highlightColor !important;
}
44 changes: 44 additions & 0 deletions src/Tabs/schema.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
export const Tab = {
title: 'Tab',
fieldsets: [
{
id: 'default',
title: 'Default',
fields: ['title'],
},
],

properties: {
title: {
type: 'string',
title: 'Title',
},
},

required: ['title'],
};

export const Tabs = {
title: 'Tabs',

fieldsets: [
{
id: 'default',
title: 'Default',
fields: ['tabs'],
},
],

properties: {
tabs: {
widget: 'object_list',
title: 'Tabs',
// this is an invention, should confront with dexterity serializer
schema: Tab,
},
},

required: ['display', 'cards'],
};

export default Tabs;
21 changes: 21 additions & 0 deletions src/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import codeSVG from '@plone/volto/icons/code.svg';
import { TabsBlockEdit, TabsBlockView } from './Tabs';

export default (config) => {
config.blocks.blocksConfig.tabs = {
id: 'tabs',
title: 'Tabs',
icon: codeSVG,
group: 'text',
view: TabsBlockView,
edit: TabsBlockEdit,
restricted: false,
mostUsed: true,
sidebarTab: 1,
security: {
addPermission: [],
view: [],
},
};
return config;
};
15 changes: 15 additions & 0 deletions src/less/globals.less
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
@type: 'extra';
@element: 'custom';

@import (multiple, reference, optional) '~@package/../theme/theme.config';

/* Enables customization of addons */
.loadAddonOverrides() {
@import (optional) "@{siteFolder}/../addons/@{addon}/@{addontype}s/@{addonelement}.overrides";
}

/* Helper to load variables */
.loadAddonVariables() {
@import (optional) "@{addonelement}.variables";
@import (optional) "@{siteFolder}/../addons/@{addon}/@{addontype}s/@{addonelement}.variables";
}

0 comments on commit 4d664fd

Please sign in to comment.