2019-04-30 16:20:43 +02:00
|
|
|
import React, { useState, useEffect } from "react";
|
2019-04-29 09:01:51 +02:00
|
|
|
import PropTypes from "prop-types";
|
|
|
|
import withGist from "../withGist";
|
|
|
|
import { FormattedMessage, IntlProvider } from "react-intl";
|
|
|
|
import Button from "@material-ui/core/Button";
|
|
|
|
import { MuiThemeProvider, createMuiTheme } from "@material-ui/core/styles";
|
2019-05-03 13:23:40 +02:00
|
|
|
import { strings } from "@freesewing/i18n";
|
2019-04-29 09:01:51 +02:00
|
|
|
import Navbar from "../Navbar";
|
2019-05-03 13:23:40 +02:00
|
|
|
import { defaultGist, storage } from "@freesewing/utils";
|
2019-04-29 09:01:51 +02:00
|
|
|
import { dark, light } from "@freesewing/mui-theme";
|
|
|
|
import Logo from "../Logo";
|
|
|
|
import withLanguage from "../withLanguage";
|
|
|
|
import LanguageIcon from "@material-ui/icons/Translate";
|
|
|
|
import DarkModeIcon from "@material-ui/icons/Brightness3";
|
|
|
|
import LanguageChooser from "./LanguageChooser";
|
|
|
|
import Pattern from "./Pattern";
|
|
|
|
|
|
|
|
const Workbench = props => {
|
|
|
|
const [display, setDisplay] = useState("pattern");
|
|
|
|
const [pattern, setPattern] = useState(false);
|
|
|
|
const [settings, setSettings] = useState(false);
|
|
|
|
const [theme, setTheme] = useState("light");
|
2019-05-01 10:43:39 +02:00
|
|
|
useEffect(() => {
|
|
|
|
if (props.from) props.importGist(props.from);
|
|
|
|
}, [props.from]);
|
2019-04-29 09:01:51 +02:00
|
|
|
|
|
|
|
const showLanguageChooser = () => setDisplay("language");
|
2019-04-29 10:43:45 +02:00
|
|
|
const toggleSettings = () => setSettings(!settings);
|
2019-04-29 09:01:51 +02:00
|
|
|
const updatePattern = p => {
|
|
|
|
setPattern(p);
|
|
|
|
store.set("pattern", p);
|
|
|
|
};
|
|
|
|
const toggleDarkMode = () => {
|
|
|
|
if (theme === "light") setTheme("dark");
|
|
|
|
else setTheme("light");
|
|
|
|
};
|
|
|
|
const raiseEvent = (type, data) => {
|
2019-04-30 16:20:43 +02:00
|
|
|
console.log("FIXME: Event raised", type, data);
|
2019-04-29 09:01:51 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
const navs = {
|
2019-05-01 10:43:39 +02:00
|
|
|
left: {
|
|
|
|
docs: {
|
2019-04-29 09:01:51 +02:00
|
|
|
type: "link",
|
|
|
|
href: "https://freesewing.dev/",
|
|
|
|
text: "app.docs"
|
|
|
|
},
|
2019-05-01 10:43:39 +02:00
|
|
|
help: {
|
2019-04-29 09:01:51 +02:00
|
|
|
type: "link",
|
|
|
|
href: "https://gitter.im/freesewing/freesewing/",
|
|
|
|
text: "app.askForHelp"
|
|
|
|
}
|
2019-05-01 10:43:39 +02:00
|
|
|
},
|
|
|
|
right: {
|
|
|
|
version: {
|
2019-04-29 09:01:51 +02:00
|
|
|
type: "link",
|
|
|
|
href: "https://github.com/freesewing/freesewing",
|
|
|
|
text: "v" + props.freesewing.version
|
|
|
|
},
|
2019-05-01 10:43:39 +02:00
|
|
|
language: {
|
2019-04-29 09:01:51 +02:00
|
|
|
type: "button",
|
|
|
|
onClick: () => setDisplay("languages"),
|
|
|
|
text: <LanguageIcon className="nav-icon" />,
|
|
|
|
title: "Languages"
|
|
|
|
},
|
2019-05-01 10:43:39 +02:00
|
|
|
dark: {
|
2019-04-29 09:01:51 +02:00
|
|
|
type: "button",
|
|
|
|
onClick: toggleDarkMode,
|
|
|
|
text: <DarkModeIcon className="nav-icon moon" />,
|
|
|
|
title: "Toggle dark mode"
|
|
|
|
}
|
2019-05-01 10:43:39 +02:00
|
|
|
}
|
2019-04-29 09:01:51 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
let main = null;
|
|
|
|
switch (display) {
|
|
|
|
case "languages":
|
|
|
|
main = (
|
|
|
|
<LanguageChooser
|
|
|
|
setLanguage={props.setLanguage}
|
|
|
|
setDisplay={setDisplay}
|
|
|
|
/>
|
|
|
|
);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
main = (
|
|
|
|
<Pattern
|
|
|
|
freesewing={props.freesewing}
|
2019-05-01 10:43:39 +02:00
|
|
|
Pattern={props.Pattern}
|
2019-04-30 16:20:43 +02:00
|
|
|
config={props.config}
|
2019-04-29 09:01:51 +02:00
|
|
|
gist={props.gist}
|
|
|
|
updateGist={props.updateGist}
|
|
|
|
raiseEvent={raiseEvent}
|
2019-04-30 16:20:43 +02:00
|
|
|
units={props.units}
|
2019-04-29 09:01:51 +02:00
|
|
|
/>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2019-04-29 10:43:45 +02:00
|
|
|
const themes = { dark, light };
|
2019-04-30 16:20:43 +02:00
|
|
|
|
2019-04-29 09:01:51 +02:00
|
|
|
return (
|
|
|
|
<MuiThemeProvider theme={createMuiTheme(themes[theme])}>
|
|
|
|
<div
|
|
|
|
className={
|
|
|
|
theme === "light" ? "theme-wrapper light" : "theme-wrapper dark"
|
|
|
|
}
|
|
|
|
>
|
|
|
|
<Navbar navs={navs} />
|
|
|
|
{main}
|
|
|
|
</div>
|
|
|
|
</MuiThemeProvider>
|
|
|
|
);
|
|
|
|
};
|
|
|
|
|
|
|
|
Workbench.propTypes = {
|
2019-04-30 16:20:43 +02:00
|
|
|
freesewing: PropTypes.object.isRequired,
|
2019-05-01 10:43:39 +02:00
|
|
|
Pattern: PropTypes.func.isRequired,
|
2019-04-30 16:20:43 +02:00
|
|
|
config: PropTypes.object.isRequired,
|
|
|
|
from: PropTypes.object
|
|
|
|
};
|
|
|
|
|
|
|
|
Workbench.defaultProps = {
|
|
|
|
from: false
|
2019-04-29 09:01:51 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
export default withLanguage(
|
|
|
|
withGist(Workbench, {
|
|
|
|
gist: defaultGist,
|
|
|
|
store: true
|
|
|
|
}),
|
2019-04-30 16:20:43 +02:00
|
|
|
"en"
|
2019-04-29 09:01:51 +02:00
|
|
|
);
|