diff --git a/examples/redux-react-app/package.json b/examples/redux-react-app/package.json index df6ee38cb..9aa21cc47 100644 --- a/examples/redux-react-app/package.json +++ b/examples/redux-react-app/package.json @@ -15,9 +15,9 @@ "@fortawesome/react-fontawesome": "^0.1.9", "@material-ui/core": "^4.9.14", "@material-ui/icons": "^4.11.2", - "@metacell/geppetto-meta-client": "^1.1.0", - "@metacell/geppetto-meta-core": "^1.1.0", - "@metacell/geppetto-meta-ui": "^1.1.0", + "@metacell/geppetto-meta-client": "file:.yalc/@metacell/geppetto-meta-client", + "@metacell/geppetto-meta-core": "file:.yalc/@metacell/geppetto-meta-core", + "@metacell/geppetto-meta-ui": "file:.yalc/@metacell/geppetto-meta-ui", "@nosferatu500/react-sortable-tree": "3.0.5", "@pmmmwh/react-refresh-webpack-plugin": "0.4.3", "@reduxjs/toolkit": "^1.5.1", diff --git a/examples/redux-react-app/src/app/icons.js b/examples/redux-react-app/src/app/icons.js new file mode 100644 index 000000000..79e1dd0b4 --- /dev/null +++ b/examples/redux-react-app/src/app/icons.js @@ -0,0 +1,17 @@ +export const CloseIcon = (props) => ( + + + +); \ No newline at end of file diff --git a/examples/redux-react-app/src/app/showcase.js b/examples/redux-react-app/src/app/showcase.js index b8e016257..23bebbd85 100644 --- a/examples/redux-react-app/src/app/showcase.js +++ b/examples/redux-react-app/src/app/showcase.js @@ -3,6 +3,8 @@ import { getLayoutManagerInstance } from "@metacell/geppetto-meta-client/common/ import CircularProgress from '@material-ui/core/CircularProgress'; import { useStore } from 'react-redux'; import { makeStyles } from '@material-ui/core/styles'; +import { Button } from '@material-ui/core'; +import { CloseIcon } from './icons'; const useStyles = makeStyles({ layoutContainer: { @@ -24,24 +26,69 @@ const MainLayout = () => { const store = useStore(); const [Component, setComponent] = useState(undefined); - useEffect(() => { - // Workaround because getLayoutManagerInstance - // is undefined when calling it in global scope - // Need to wait until store is ready ... - // TODO: find better way to retrieve the LayoutManager component! - if (Component === undefined) { - const myManager = getLayoutManagerInstance(); - if (myManager) { - setComponent(myManager.getComponent()); - } - } - }, [store]) + useEffect(() => { + // Workaround because getLayoutManagerInstance + // is undefined when calling it in global scope + // Need to wait until store is ready ... + // TODO: find better way to retrieve the LayoutManager component! + if (Component === undefined) { + const myManager = getLayoutManagerInstance(); + if (myManager) { + setComponent( + myManager.getComponent( + { + icons: { + close: , + }, + tabSetButtons: [ + ({ panel }) => { + return ( + + ); + }, + ], + tabButtons: [ + ({ panel }) => { + return ( + + ); + }, + ], + }) + ); + } + } + }, [Component, store]); + console.log(Component, 'Component'); + - return ( -
- {Component === undefined ? : } -
- ); -} + return ( +
+ {Component === undefined ? ( + + ) : ( + + )} +
+ ); +}; export default MainLayout; diff --git a/examples/redux-react-app/src/icons/close.svg b/examples/redux-react-app/src/icons/close.svg new file mode 100644 index 000000000..154f35808 --- /dev/null +++ b/examples/redux-react-app/src/icons/close.svg @@ -0,0 +1,3 @@ + + + diff --git a/geppetto.js/geppetto-client/package.json b/geppetto.js/geppetto-client/package.json index 5ed7e3169..0986dc83b 100644 --- a/geppetto.js/geppetto-client/package.json +++ b/geppetto.js/geppetto-client/package.json @@ -27,13 +27,11 @@ }, "dependencies": { "@material-ui/core": "^4.1.3", - "@metacell/geppetto-meta-core": "1.1.0", - "@metacell/geppetto-meta-ui": "1.1.0", "pako": "^1.0.3", "react": "^17.0.2", + "react-redux": "^7.2.3", "react-rnd": "^7.3.0", "redux": "^4.1.0", - "react-redux": "^7.2.3", "url-join": "^4.0.0" }, "devDependencies": { @@ -49,6 +47,10 @@ "jest": "^24.9.0", "less": "^3.9.0" }, + "peerDepedencies": { + "@metacell/geppetto-meta-core": "1.1.0", + "@metacell/geppetto-meta-ui": "1.1.0" + }, "buildOptions": { "emitEntryPoint": true, "compile": { diff --git a/geppetto.js/geppetto-client/src/common/layout/LayoutManager.tsx b/geppetto.js/geppetto-client/src/common/layout/LayoutManager.tsx index 383734e5c..1452fdff8 100644 --- a/geppetto.js/geppetto-client/src/common/layout/LayoutManager.tsx +++ b/geppetto.js/geppetto-client/src/common/layout/LayoutManager.tsx @@ -3,7 +3,7 @@ import * as FlexLayout from '@metacell/geppetto-meta-ui/flex-layout/src/index'; import Actions from '@metacell/geppetto-meta-ui/flex-layout/src/model/Actions'; import DockLocation from '@metacell/geppetto-meta-ui/flex-layout/src/DockLocation'; import Model from '@metacell/geppetto-meta-ui/flex-layout/src/model/Model'; -import { WidgetStatus, Widget, ComponentMap, TabsetPosition } from './model'; +import { WidgetStatus, Widget, ComponentMap, TabsetPosition, IComponentConfig } from './model'; import { withStyles, createStyles } from '@material-ui/core/styles' import WidgetFactory from "./WidgetFactory"; import TabsetIconFactory from "./TabsetIconFactory"; @@ -107,17 +107,52 @@ class LayoutManager { * * @param panel * @param renderValues + * @param tabSetButtons */ - onRenderTabSet = (panel, renderValues) => { - if (panel.getType() === "tabset" && this.enableMinimize) { - if (panel.getChildren().length > 0) { - renderValues.buttons.push(
{ - this.minimizeWidget(panel.getActiveNode().getId()) - }} />); + onRenderTabSet = (panel, renderValues, tabSetButtons) => { + if (panel.getType() === 'tabset') { + if (this.enableMinimize) { + if (panel.getChildren().length > 0) { + renderValues.buttons.push( +
{ + this.minimizeWidget(panel.getActiveNode().getId()); + }} + /> + ); + } + } + + if (Array.isArray(tabSetButtons) && tabSetButtons.length > 0) { + tabSetButtons.forEach(Button => { + renderValues.stickyButtons.push( +