mirror of
https://bitbucket.org/wisemapping/wisemapping-frontend.git
synced 2024-11-15 11:37:57 +01:00
Fix jslint errors.
This commit is contained in:
parent
9cc51b1a9e
commit
c032d1e311
@ -1,4 +1,4 @@
|
|||||||
import React from 'react';
|
import React, { ReactElement } from 'react';
|
||||||
import { IntlProvider } from 'react-intl';
|
import { IntlProvider } from 'react-intl';
|
||||||
import { Route, Switch, Redirect, BrowserRouter as Router } from 'react-router-dom';
|
import { Route, Switch, Redirect, BrowserRouter as Router } from 'react-router-dom';
|
||||||
|
|
||||||
@ -25,14 +25,14 @@ const queryClient = new QueryClient({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const App = () => {
|
const App = ():ReactElement => {
|
||||||
const appi18n = new AppI18n();
|
const appi18n = new AppI18n();
|
||||||
const locale = appi18n.getBrowserLocale();
|
const locale = appi18n.getBrowserLocale();
|
||||||
|
|
||||||
return locale.message ? (
|
return locale.message ? (
|
||||||
<Provider store={store}>
|
<Provider store={store}>
|
||||||
<QueryClientProvider client={queryClient}>
|
<QueryClientProvider client={queryClient}>
|
||||||
<IntlProvider locale={locale.code} defaultLocale={Locales.EN.code} messages={locale.message}>
|
<IntlProvider locale={locale.code} defaultLocale={Locales.EN.code} messages={locale.message as Record<string, string> }>
|
||||||
<CssBaseline />
|
<CssBaseline />
|
||||||
<ThemeProvider theme={theme}>
|
<ThemeProvider theme={theme}>
|
||||||
<Router>
|
<Router>
|
||||||
|
@ -6,12 +6,12 @@ import 'dayjs/locale/es';
|
|||||||
export class Locale {
|
export class Locale {
|
||||||
code: LocaleCode;
|
code: LocaleCode;
|
||||||
label: string;
|
label: string;
|
||||||
message: any;
|
message: Record<string, string> ;
|
||||||
|
|
||||||
constructor(code: LocaleCode, label: string, message: any) {
|
constructor(code: LocaleCode, label: string, message: unknown) {
|
||||||
this.code = code;
|
this.code = code;
|
||||||
this.label = label;
|
this.label = label;
|
||||||
this.message = message;
|
this.message = message as Record<string, string>;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ import DialogActions from '@material-ui/core/DialogActions';
|
|||||||
import Button from '@material-ui/core/Button';
|
import Button from '@material-ui/core/Button';
|
||||||
import AlertTitle from '@material-ui/lab/AlertTitle';
|
import AlertTitle from '@material-ui/lab/AlertTitle';
|
||||||
|
|
||||||
const ClientHealthSentinel = () => {
|
const ClientHealthSentinel = (): React.ReactElement => {
|
||||||
const status: ClientStatus = useSelector(activeInstanceStatus);
|
const status: ClientStatus = useSelector(activeInstanceStatus);
|
||||||
|
|
||||||
const handleOnClose = () => {
|
const handleOnClose = () => {
|
||||||
|
@ -36,14 +36,16 @@ class MockClient implements Client {
|
|||||||
}
|
}
|
||||||
|
|
||||||
deleteAccount(): Promise<void> {
|
deleteAccount(): Promise<void> {
|
||||||
return Promise.resolve();
|
return Promise.resolve();
|
||||||
}
|
}
|
||||||
|
|
||||||
updateAccountInfo(firstname: string, lastname: string): Promise<void> {
|
updateAccountInfo(firstname: string, lastname: string): Promise<void> {
|
||||||
return Promise.resolve();
|
console.log("firstname:" + firstname, +lastname)
|
||||||
|
return Promise.resolve();
|
||||||
}
|
}
|
||||||
|
|
||||||
updateAccountPassword(pasword: string): Promise<void> {
|
updateAccountPassword(pasword: string): Promise<void> {
|
||||||
|
console.log("password:" + pasword)
|
||||||
return Promise.resolve();
|
return Promise.resolve();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -53,6 +55,7 @@ class MockClient implements Client {
|
|||||||
}
|
}
|
||||||
|
|
||||||
importMap(model: ImportMapInfo): Promise<number> {
|
importMap(model: ImportMapInfo): Promise<number> {
|
||||||
|
console.log("model:" + model);
|
||||||
return Promise.resolve(10);
|
return Promise.resolve(10);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -72,11 +75,12 @@ class MockClient implements Client {
|
|||||||
return Promise.resolve();
|
return Promise.resolve();
|
||||||
}
|
}
|
||||||
revertHistory(id: number, cid: number): Promise<void> {
|
revertHistory(id: number, cid: number): Promise<void> {
|
||||||
|
console.log("model:" + id + cid);
|
||||||
return Promise.resolve();
|
return Promise.resolve();
|
||||||
}
|
}
|
||||||
|
|
||||||
createMap(map: BasicMapInfo): Promise<number> {
|
createMap(map: BasicMapInfo): Promise<number> {
|
||||||
throw new Error("Method not implemented.");
|
throw new Error("Method not implemented." + map);
|
||||||
}
|
}
|
||||||
|
|
||||||
fetchLabels(): Promise<Label[]> {
|
fetchLabels(): Promise<Label[]> {
|
||||||
@ -127,6 +131,7 @@ class MockClient implements Client {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
fetchHistory(id: number): Promise<ChangeHistory[]> {
|
fetchHistory(id: number): Promise<ChangeHistory[]> {
|
||||||
|
console.log(`Fetching history for ${id}`)
|
||||||
const result = [{
|
const result = [{
|
||||||
id: 1,
|
id: 1,
|
||||||
lastModificationBy: 'Paulo',
|
lastModificationBy: 'Paulo',
|
||||||
@ -211,6 +216,7 @@ class MockClient implements Client {
|
|||||||
}
|
}
|
||||||
|
|
||||||
registerNewUser(user: NewUser): Promise<void> {
|
registerNewUser(user: NewUser): Promise<void> {
|
||||||
|
console.log("user:" + user)
|
||||||
return Promise.resolve();
|
return Promise.resolve();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -220,6 +226,7 @@ class MockClient implements Client {
|
|||||||
}
|
}
|
||||||
|
|
||||||
resetPassword(email: string): Promise<void> {
|
resetPassword(email: string): Promise<void> {
|
||||||
|
console.log("email:" + email)
|
||||||
return Promise.resolve();
|
return Promise.resolve();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -163,7 +163,7 @@ export default class RestClient implements Client {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fetchHistory(id: number): Promise<ChangeHistory[]> {
|
fetchHistory(id: number): Promise<ChangeHistory[]> {
|
||||||
throw new Error('Method not implemented.');
|
throw new Error(`Method not implemented. ${id}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
renameMap(id: number, basicInfo: BasicMapInfo): Promise<void> {
|
renameMap(id: number, basicInfo: BasicMapInfo): Promise<void> {
|
||||||
@ -213,6 +213,7 @@ export default class RestClient implements Client {
|
|||||||
}
|
}
|
||||||
).then(response => {
|
).then(response => {
|
||||||
const data = response.data;
|
const data = response.data;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
const maps: MapInfo[] = (data.mindmapsInfo as any[]).map(m => {
|
const maps: MapInfo[] = (data.mindmapsInfo as any[]).map(m => {
|
||||||
return {
|
return {
|
||||||
id: m.id,
|
id: m.id,
|
||||||
@ -247,7 +248,7 @@ export default class RestClient implements Client {
|
|||||||
axios.post(this.baseUrl + '/service/users/',
|
axios.post(this.baseUrl + '/service/users/',
|
||||||
JSON.stringify(user),
|
JSON.stringify(user),
|
||||||
{ headers: { 'Content-Type': 'application/json' } }
|
{ headers: { 'Content-Type': 'application/json' } }
|
||||||
).then(response => {
|
).then(() => {
|
||||||
// All was ok, let's sent to success page ...;
|
// All was ok, let's sent to success page ...;
|
||||||
success();
|
success();
|
||||||
}).catch(error => {
|
}).catch(error => {
|
||||||
@ -264,7 +265,7 @@ export default class RestClient implements Client {
|
|||||||
const handler = (success: () => void, reject: (error: ErrorInfo) => void) => {
|
const handler = (success: () => void, reject: (error: ErrorInfo) => void) => {
|
||||||
axios.delete(this.baseUrl + `/c/restful/maps/${id}`,
|
axios.delete(this.baseUrl + `/c/restful/maps/${id}`,
|
||||||
{ headers: { 'Content-Type': 'application/json' } }
|
{ headers: { 'Content-Type': 'application/json' } }
|
||||||
).then(response => {
|
).then(() => {
|
||||||
success();
|
success();
|
||||||
}).catch(error => {
|
}).catch(error => {
|
||||||
const errorInfo = this.parseResponseOnError(error.response);
|
const errorInfo = this.parseResponseOnError(error.response);
|
||||||
@ -280,7 +281,7 @@ export default class RestClient implements Client {
|
|||||||
axios.put(`${this.baseUrl}/service/users/resetPassword?email=${email}`,
|
axios.put(`${this.baseUrl}/service/users/resetPassword?email=${email}`,
|
||||||
null,
|
null,
|
||||||
{ headers: { 'Content-Type': 'application/json' } }
|
{ headers: { 'Content-Type': 'application/json' } }
|
||||||
).then(response => {
|
).then(() => {
|
||||||
// All was ok, let's sent to success page ...;
|
// All was ok, let's sent to success page ...;
|
||||||
success();
|
success();
|
||||||
}).catch(error => {
|
}).catch(error => {
|
||||||
@ -335,6 +336,7 @@ export default class RestClient implements Client {
|
|||||||
}
|
}
|
||||||
).then(response => {
|
).then(response => {
|
||||||
const data = response.data;
|
const data = response.data;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
const maps: Label[] = (data.labels as any[]).map(l => {
|
const maps: Label[] = (data.labels as any[]).map(l => {
|
||||||
return {
|
return {
|
||||||
id: l.id,
|
id: l.id,
|
||||||
@ -354,7 +356,7 @@ export default class RestClient implements Client {
|
|||||||
|
|
||||||
deleteLabel(id: number): Promise<void> {
|
deleteLabel(id: number): Promise<void> {
|
||||||
const handler = (success: () => void, reject: (error: ErrorInfo) => void) => {
|
const handler = (success: () => void, reject: (error: ErrorInfo) => void) => {
|
||||||
axios.delete(this.baseUrl + `/c/restful/label/${id}`).then(response => {
|
axios.delete(this.baseUrl + `/c/restful/label/${id}`).then(() => {
|
||||||
success();
|
success();
|
||||||
}).catch(error => {
|
}).catch(error => {
|
||||||
const errorInfo = this.parseResponseOnError(error.response);
|
const errorInfo = this.parseResponseOnError(error.response);
|
||||||
@ -364,6 +366,7 @@ export default class RestClient implements Client {
|
|||||||
return new Promise(handler);
|
return new Promise(handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
private parseResponseOnError = (response: any): ErrorInfo => {
|
private parseResponseOnError = (response: any): ErrorInfo => {
|
||||||
let result: ErrorInfo | undefined;
|
let result: ErrorInfo | undefined;
|
||||||
if (response) {
|
if (response) {
|
||||||
|
@ -32,7 +32,7 @@ const ForgotPassword = () => {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
const handleOnSubmit = (event: React.FormEvent<any>) => {
|
const handleOnSubmit = (event: React.FormEvent<HTMLFormElement>) => {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
mutation.mutate(email);
|
mutation.mutate(email);
|
||||||
}
|
}
|
||||||
@ -59,7 +59,7 @@ const ForgotPassword = () => {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const ForgotPasswordPage = () => {
|
const ForgotPasswordPage = ():React.ReactElement => {
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
document.title = 'Reset Password | WiseMapping';
|
document.title = 'Reset Password | WiseMapping';
|
||||||
|
@ -3,12 +3,12 @@ import { FormattedMessage } from 'react-intl'
|
|||||||
import FormContainer from '../layout/form-container';
|
import FormContainer from '../layout/form-container';
|
||||||
import Header from '../layout/header'
|
import Header from '../layout/header'
|
||||||
import Footer from '../layout/footer'
|
import Footer from '../layout/footer'
|
||||||
import { Link as RouterLink} from 'react-router-dom'
|
import { Link as RouterLink } from 'react-router-dom'
|
||||||
import Typography from '@material-ui/core/Typography';
|
import Typography from '@material-ui/core/Typography';
|
||||||
import Button from '@material-ui/core/Button';
|
import Button from '@material-ui/core/Button';
|
||||||
|
|
||||||
|
|
||||||
const ForgotPasswordSuccessPage = () => {
|
const ForgotPasswordSuccessPage = (): React.ReactElement => {
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
document.title = 'Reset Password | WiseMapping';
|
document.title = 'Reset Password | WiseMapping';
|
||||||
});
|
});
|
||||||
|
@ -7,14 +7,14 @@ type GlobalErrorProps = {
|
|||||||
error?: ErrorInfo;
|
error?: ErrorInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
const GlobalError = (props: GlobalErrorProps) => {
|
const GlobalError = (props: GlobalErrorProps): React.ReactElement | null => {
|
||||||
|
|
||||||
const error = props.error;
|
const error = props.error;
|
||||||
const hasError = Boolean(error?.msg);
|
const hasError = Boolean(error?.msg);
|
||||||
const errorMsg = error?.msg;
|
const errorMsg = error?.msg;
|
||||||
|
|
||||||
return (hasError ?
|
return (hasError ?
|
||||||
<StyledAlert severity="error" variant="filled" hidden={!hasError}> {errorMsg}</StyledAlert> : null);
|
<StyledAlert severity="error" variant="filled" hidden={!hasError}> {errorMsg}</StyledAlert> : null);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ const Input = ({
|
|||||||
fullWidth = true,
|
fullWidth = true,
|
||||||
disabled = false
|
disabled = false
|
||||||
|
|
||||||
}: InputProps) => {
|
}: InputProps): React.ReactElement => {
|
||||||
|
|
||||||
const fieldError = error?.fields?.[name];
|
const fieldError = error?.fields?.[name];
|
||||||
return (
|
return (
|
||||||
|
@ -6,15 +6,15 @@ type SubmitButton = {
|
|||||||
value: string;
|
value: string;
|
||||||
disabled?: boolean;
|
disabled?: boolean;
|
||||||
}
|
}
|
||||||
const SubmitButton = (props: SubmitButton) => {
|
const SubmitButton = (props: SubmitButton): React.ReactElement => {
|
||||||
const [disabled, setDisabled] = useState(props.disabled ? true : false);
|
const [disabled] = useState(props.disabled ? true : false);
|
||||||
const intl = useIntl();
|
const intl = useIntl();
|
||||||
|
|
||||||
let valueTxt = props.value;
|
let valueTxt = props.value;
|
||||||
if (disabled) {
|
if (disabled) {
|
||||||
valueTxt = intl.formatMessage({ id: "common.wait", defaultMessage: "Please wait ..." });
|
valueTxt = intl.formatMessage({ id: "common.wait", defaultMessage: "Please wait ..." });
|
||||||
}
|
}
|
||||||
const [value, setValue] = useState(valueTxt);
|
const [value] = useState(valueTxt);
|
||||||
return (
|
return (
|
||||||
<Button color="primary" size="medium" variant="contained" type="submit"
|
<Button color="primary" size="medium" variant="contained" type="submit"
|
||||||
disableElevation={true} disabled={disabled}
|
disableElevation={true} disabled={disabled}
|
||||||
|
@ -6,7 +6,7 @@ import { StyledFooter } from './styled'
|
|||||||
// eslint-disable-next-line
|
// eslint-disable-next-line
|
||||||
const poweredByIcon = require('../../../images/pwrdby-white.svg')
|
const poweredByIcon = require('../../../images/pwrdby-white.svg')
|
||||||
|
|
||||||
const Footer = () => {
|
const Footer = (): React.ReactElement => {
|
||||||
return (
|
return (
|
||||||
<StyledFooter>
|
<StyledFooter>
|
||||||
<div style={{ padding: 0, margin: 0 }}>
|
<div style={{ padding: 0, margin: 0 }}>
|
||||||
|
@ -16,7 +16,7 @@ class Header extends React.Component<HeaderProps, HeaderProps> {
|
|||||||
super(props);
|
super(props);
|
||||||
this.state = { type: props.type };
|
this.state = { type: props.type };
|
||||||
}
|
}
|
||||||
render() {
|
render(): React.ReactElement {
|
||||||
let signUpButton;
|
let signUpButton;
|
||||||
let signInButton;
|
let signInButton;
|
||||||
let text;
|
let text;
|
||||||
@ -53,14 +53,14 @@ interface ButtonProps {
|
|||||||
className?: string;
|
className?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
const SignInButton = (props: ButtonProps) => {
|
const SignInButton = (props: ButtonProps): React.ReactElement => {
|
||||||
return (
|
return (
|
||||||
<span className={`${props.className}`}>
|
<span className={`${props.className}`}>
|
||||||
<Button color="primary" size="medium" variant="outlined" component={Link} to="/c/login"><FormattedMessage id="login.signin" defaultMessage="Sign In" /></Button>
|
<Button color="primary" size="medium" variant="outlined" component={Link} to="/c/login"><FormattedMessage id="login.signin" defaultMessage="Sign In" /></Button>
|
||||||
</span>);
|
</span>);
|
||||||
}
|
}
|
||||||
|
|
||||||
const SignUpButton = (props: ButtonProps) => {
|
const SignUpButton = (props: ButtonProps): React.ReactElement => {
|
||||||
return (
|
return (
|
||||||
<span className={`${props.className}`}>
|
<span className={`${props.className}`}>
|
||||||
<Button color="primary" size="medium" variant="outlined" component={Link} to="/c/registration"><FormattedMessage id="login.signup" defaultMessage="Sign Up" /></Button>
|
<Button color="primary" size="medium" variant="outlined" component={Link} to="/c/registration"><FormattedMessage id="login.signup" defaultMessage="Sign Up" /></Button>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import React, { useEffect } from 'react';
|
import React, { useEffect } from 'react';
|
||||||
import { FormattedMessage, useIntl } from 'react-intl';
|
import { FormattedMessage, useIntl } from 'react-intl';
|
||||||
import { Link as RouterLink} from 'react-router-dom';
|
import { Link as RouterLink } from 'react-router-dom';
|
||||||
import Header from '../layout/header';
|
import Header from '../layout/header';
|
||||||
import Footer from '../layout/footer';
|
import Footer from '../layout/footer';
|
||||||
import SubmitButton from '../form/submit-button';
|
import SubmitButton from '../form/submit-button';
|
||||||
@ -11,9 +11,11 @@ import Typography from '@material-ui/core/Typography';
|
|||||||
import FormControl from '@material-ui/core/FormControl';
|
import FormControl from '@material-ui/core/FormControl';
|
||||||
import Link from '@material-ui/core/Link';
|
import Link from '@material-ui/core/Link';
|
||||||
|
|
||||||
|
type ConfigStatusProps = {
|
||||||
|
enabled?: boolean
|
||||||
|
}
|
||||||
|
|
||||||
const ConfigStatusMessage = (props: any) => {
|
const ConfigStatusMessage = ({ enabled = false }: ConfigStatusProps): React.ReactElement => {
|
||||||
const enabled = props.enabled
|
|
||||||
let result;
|
let result;
|
||||||
if (enabled === true) {
|
if (enabled === true) {
|
||||||
result = (<div className="db-warn-msg">
|
result = (<div className="db-warn-msg">
|
||||||
@ -45,7 +47,7 @@ const LoginError = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const LoginPage = () => {
|
const LoginPage = (): React.ReactElement => {
|
||||||
const intl = useIntl();
|
const intl = useIntl();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
@ -25,7 +25,7 @@ type AccountInfoModel = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const defaultModel: AccountInfoModel = { firstname: '', lastname: '', email: '' };
|
const defaultModel: AccountInfoModel = { firstname: '', lastname: '', email: '' };
|
||||||
const AccountInfoDialog = ({ onClose }: AccountInfoDialogProps) => {
|
const AccountInfoDialog = ({ onClose }: AccountInfoDialogProps):React.ReactElement => {
|
||||||
const client: Client = useSelector(activeInstance);
|
const client: Client = useSelector(activeInstance);
|
||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
const [remove, setRemove] = React.useState<boolean>(false);
|
const [remove, setRemove] = React.useState<boolean>(false);
|
||||||
|
@ -19,7 +19,7 @@ type ChangePasswordModel = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const defaultModel: ChangePasswordModel = { password: '', retryPassword: '' };
|
const defaultModel: ChangePasswordModel = { password: '', retryPassword: '' };
|
||||||
const ChangePasswordDialog = ({ onClose }: ChangePasswordDialogProps) => {
|
const ChangePasswordDialog = ({ onClose }: ChangePasswordDialogProps):React.ReactElement => {
|
||||||
const client: Client = useSelector(activeInstance);
|
const client: Client = useSelector(activeInstance);
|
||||||
const [model, setModel] = React.useState<ChangePasswordModel>(defaultModel);
|
const [model, setModel] = React.useState<ChangePasswordModel>(defaultModel);
|
||||||
const [error, setError] = React.useState<ErrorInfo>();
|
const [error, setError] = React.useState<ErrorInfo>();
|
||||||
|
@ -15,7 +15,7 @@ import Link from "@material-ui/core/Link";
|
|||||||
import ExitToAppOutlined from "@material-ui/icons/ExitToAppOutlined";
|
import ExitToAppOutlined from "@material-ui/icons/ExitToAppOutlined";
|
||||||
|
|
||||||
type ActionType = 'change-password' | 'account-info' | undefined;
|
type ActionType = 'change-password' | 'account-info' | undefined;
|
||||||
const AccountMenu = () => {
|
const AccountMenu = (): React.ReactElement => {
|
||||||
const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);
|
const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);
|
||||||
const open = Boolean(anchorEl);
|
const open = Boolean(anchorEl);
|
||||||
const [action, setAction] = React.useState<ActionType>(undefined);
|
const [action, setAction] = React.useState<ActionType>(undefined);
|
||||||
|
@ -24,7 +24,7 @@ interface ActionProps {
|
|||||||
mapId?: number
|
mapId?: number
|
||||||
}
|
}
|
||||||
|
|
||||||
const ActionChooser = (props: ActionProps) => {
|
const ActionChooser = (props: ActionProps): React.ReactElement => {
|
||||||
const { anchor, onClose, mapId } = props;
|
const { anchor, onClose, mapId } = props;
|
||||||
|
|
||||||
const handleOnClose = (action: ActionType): ((event: React.MouseEvent<HTMLLIElement>) => void) => {
|
const handleOnClose = (action: ActionType): ((event: React.MouseEvent<HTMLLIElement>) => void) => {
|
||||||
|
@ -5,5 +5,5 @@ export const StyledMenuItem = withStyles({
|
|||||||
root: {
|
root: {
|
||||||
width: '300px',
|
width: '300px',
|
||||||
}
|
}
|
||||||
})(MenuItem)
|
})(MenuItem);
|
||||||
|
|
@ -1,5 +1,5 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import { FormattedMessage, useIntl } from "react-intl";
|
import { FormattedMessage } from "react-intl";
|
||||||
import { ErrorInfo } from "../../../../classes/client";
|
import { ErrorInfo } from "../../../../classes/client";
|
||||||
import { StyledDialog, StyledDialogActions, StyledDialogContent, StyledDialogTitle } from "./style";
|
import { StyledDialog, StyledDialogActions, StyledDialogContent, StyledDialogTitle } from "./style";
|
||||||
import GlobalError from "../../../form/global-error";
|
import GlobalError from "../../../form/global-error";
|
||||||
@ -9,7 +9,7 @@ import Button from "@material-ui/core/Button";
|
|||||||
export type DialogProps = {
|
export type DialogProps = {
|
||||||
onClose: () => void;
|
onClose: () => void;
|
||||||
onSubmit?: (event: React.FormEvent<HTMLFormElement>) => void;
|
onSubmit?: (event: React.FormEvent<HTMLFormElement>) => void;
|
||||||
children: any;
|
children: unknown;
|
||||||
error?: ErrorInfo;
|
error?: ErrorInfo;
|
||||||
|
|
||||||
title: string;
|
title: string;
|
||||||
@ -19,9 +19,8 @@ export type DialogProps = {
|
|||||||
actionUrl?: string;
|
actionUrl?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
const BaseDialog = (props: DialogProps) => {
|
const BaseDialog = (props: DialogProps): React.ReactElement => {
|
||||||
const intl = useIntl();
|
const { onClose, onSubmit } = props;
|
||||||
const { onClose, onSubmit, actionUrl = "" } = props;
|
|
||||||
|
|
||||||
const handleOnSubmit = (e: React.FormEvent<HTMLFormElement>) => {
|
const handleOnSubmit = (e: React.FormEvent<HTMLFormElement>) => {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
@ -2,7 +2,7 @@ import React from 'react';
|
|||||||
import { useIntl } from 'react-intl';
|
import { useIntl } from 'react-intl';
|
||||||
import { useMutation } from 'react-query';
|
import { useMutation } from 'react-query';
|
||||||
import { useSelector } from 'react-redux';
|
import { useSelector } from 'react-redux';
|
||||||
import FormControl from '@material-ui/core/FormControl';
|
import FormControl from '@material-ui/core/FormControl';
|
||||||
|
|
||||||
import Client, { BasicMapInfo, ErrorInfo } from '../../../../classes/client';
|
import Client, { BasicMapInfo, ErrorInfo } from '../../../../classes/client';
|
||||||
import { activeInstance } from '../../../../redux/clientSlice';
|
import { activeInstance } from '../../../../redux/clientSlice';
|
||||||
@ -19,7 +19,7 @@ export type CreateProps = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const defaultModel: CreateModel = { title: '', description: '' };
|
const defaultModel: CreateModel = { title: '', description: '' };
|
||||||
const CreateDialog = ({onClose}: CreateProps) => {
|
const CreateDialog = ({ onClose }: CreateProps): React.ReactElement => {
|
||||||
const client: Client = useSelector(activeInstance);
|
const client: Client = useSelector(activeInstance);
|
||||||
const [model, setModel] = React.useState<CreateModel>(defaultModel);
|
const [model, setModel] = React.useState<CreateModel>(defaultModel);
|
||||||
const [error, setError] = React.useState<ErrorInfo>();
|
const [error, setError] = React.useState<ErrorInfo>();
|
||||||
|
@ -10,7 +10,7 @@ import Alert from "@material-ui/lab/Alert";
|
|||||||
import AlertTitle from "@material-ui/lab/AlertTitle";
|
import AlertTitle from "@material-ui/lab/AlertTitle";
|
||||||
|
|
||||||
|
|
||||||
const DeleteDialog = ({ mapId, onClose } : SimpleDialogProps) => {
|
const DeleteDialog = ({ mapId, onClose }: SimpleDialogProps): React.ReactElement => {
|
||||||
const intl = useIntl();
|
const intl = useIntl();
|
||||||
const client: Client = useSelector(activeInstance);
|
const client: Client = useSelector(activeInstance);
|
||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
@ -36,13 +36,13 @@ const DeleteDialog = ({ mapId, onClose } : SimpleDialogProps) => {
|
|||||||
<div>
|
<div>
|
||||||
<BaseDialog
|
<BaseDialog
|
||||||
onClose={handleOnClose} onSubmit={handleOnSubmit}
|
onClose={handleOnClose} onSubmit={handleOnSubmit}
|
||||||
title={intl.formatMessage({id: "action.delete-title", defaultMessage: "Delete"})}
|
title={intl.formatMessage({ id: "action.delete-title", defaultMessage: "Delete" })}
|
||||||
submitButton={intl.formatMessage({id: "action.delete-title", defaultMessage: "Delete"})}>
|
submitButton={intl.formatMessage({ id: "action.delete-title", defaultMessage: "Delete" })}>
|
||||||
|
|
||||||
<Alert severity="warning">
|
<Alert severity="warning">
|
||||||
<AlertTitle>{alertTitle}</AlertTitle>
|
<AlertTitle>{alertTitle}</AlertTitle>
|
||||||
<FormattedMessage id="action.delete-description"
|
<FormattedMessage id="action.delete-description"
|
||||||
defaultMessage="Deleted mindmap can not be recovered. Do you want to continue ?."/>
|
defaultMessage="Deleted mindmap can not be recovered. Do you want to continue ?." />
|
||||||
</Alert>
|
</Alert>
|
||||||
|
|
||||||
</BaseDialog>
|
</BaseDialog>
|
||||||
|
@ -14,11 +14,11 @@ export type DeleteMultiselectDialogProps = {
|
|||||||
onClose: () => void
|
onClose: () => void
|
||||||
}
|
}
|
||||||
|
|
||||||
const DeleteMultiselectDialog = ({ onClose, mapsId }: DeleteMultiselectDialogProps) => {
|
const DeleteMultiselectDialog = ({ onClose, mapsId }: DeleteMultiselectDialogProps): React.ReactElement => {
|
||||||
const intl = useIntl();
|
const intl = useIntl();
|
||||||
const client: Client = useSelector(activeInstance);
|
const client: Client = useSelector(activeInstance);
|
||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
|
|
||||||
const mutation = useMutation((ids: number[]) => client.deleteMaps(ids),
|
const mutation = useMutation((ids: number[]) => client.deleteMaps(ids),
|
||||||
{
|
{
|
||||||
onSuccess: () => handleOnMutationSuccess(onClose, queryClient)
|
onSuccess: () => handleOnMutationSuccess(onClose, queryClient)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import React, { useEffect } from "react";
|
import React, { useEffect } from "react";
|
||||||
import { useIntl } from "react-intl";
|
import { useIntl } from "react-intl";
|
||||||
import { useMutation } from "react-query";
|
import { useMutation } from "react-query";
|
||||||
import FormControl from "@material-ui/core/FormControl";
|
import FormControl from "@material-ui/core/FormControl";
|
||||||
import { useSelector } from "react-redux";
|
import { useSelector } from "react-redux";
|
||||||
|
|
||||||
import Client, { BasicMapInfo, ErrorInfo } from "../../../../classes/client";
|
import Client, { BasicMapInfo, ErrorInfo } from "../../../../classes/client";
|
||||||
@ -17,7 +17,7 @@ export type DuplicateModel = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const defaultModel: DuplicateModel = { title: '', description: '', id: -1 };
|
const defaultModel: DuplicateModel = { title: '', description: '', id: -1 };
|
||||||
const DuplicateDialog = ({ mapId, onClose }: SimpleDialogProps) => {
|
const DuplicateDialog = ({ mapId, onClose }: SimpleDialogProps): React.ReactElement => {
|
||||||
const service: Client = useSelector(activeInstance);
|
const service: Client = useSelector(activeInstance);
|
||||||
const [model, setModel] = React.useState<DuplicateModel>(defaultModel);
|
const [model, setModel] = React.useState<DuplicateModel>(defaultModel);
|
||||||
const [error, setError] = React.useState<ErrorInfo>();
|
const [error, setError] = React.useState<ErrorInfo>();
|
||||||
|
@ -21,10 +21,12 @@ type ExportDialogProps = {
|
|||||||
onClose: () => void,
|
onClose: () => void,
|
||||||
}
|
}
|
||||||
|
|
||||||
const ExportDialog = ({ mapId, onClose, enableImgExport, svgXml }: ExportDialogProps) => {
|
const ExportDialog = ({ mapId, onClose, enableImgExport, svgXml }: ExportDialogProps): React.ReactElement => {
|
||||||
const intl = useIntl();
|
const intl = useIntl();
|
||||||
const [submit, setSubmit] = React.useState<boolean>(false);
|
const [submit, setSubmit] = React.useState<boolean>(false);
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
const [formExportRef, setExportFormRef] = React.useState<any>();
|
const [formExportRef, setExportFormRef] = React.useState<any>();
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
const [formTransformtRef, setTransformFormRef] = React.useState<any>();
|
const [formTransformtRef, setTransformFormRef] = React.useState<any>();
|
||||||
const [exportGroup, setExportGroup] = React.useState<ExportGroup>(enableImgExport ? 'image' : 'document');
|
const [exportGroup, setExportGroup] = React.useState<ExportGroup>(enableImgExport ? 'image' : 'document');
|
||||||
const [exportFormat, setExportFormat] = React.useState<ExportFormat>(enableImgExport ? 'svg' : 'xls');
|
const [exportFormat, setExportFormat] = React.useState<ExportFormat>(enableImgExport ? 'svg' : 'xls');
|
||||||
@ -66,10 +68,10 @@ const ExportDialog = ({ mapId, onClose, enableImgExport, svgXml }: ExportDialogP
|
|||||||
if (submit) {
|
if (submit) {
|
||||||
// Depending on the type of export. It will require differt POST.
|
// Depending on the type of export. It will require differt POST.
|
||||||
if (exportFormat == 'pdf' || exportFormat == "svg" || exportFormat == "jpg" || exportFormat == "png") {
|
if (exportFormat == 'pdf' || exportFormat == "svg" || exportFormat == "jpg" || exportFormat == "png") {
|
||||||
formTransformtRef.submit();
|
formTransformtRef?.submit();
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
formExportRef.submit();
|
formExportRef?.submit();
|
||||||
}
|
}
|
||||||
onClose();
|
onClose();
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
import { Theme } from "@material-ui/core/styles/createMuiTheme";
|
|
||||||
import createStyles from "@material-ui/core/styles/createStyles";
|
import createStyles from "@material-ui/core/styles/createStyles";
|
||||||
import makeStyles from "@material-ui/core/styles/makeStyles";
|
import makeStyles from "@material-ui/core/styles/makeStyles";
|
||||||
|
|
||||||
export const useStyles = makeStyles((theme: Theme) =>
|
export const useStyles = makeStyles(() =>
|
||||||
createStyles({
|
createStyles({
|
||||||
select: {
|
select: {
|
||||||
height: '40px',
|
height: '40px',
|
||||||
|
@ -19,11 +19,11 @@ import Link from "@material-ui/core/Link";
|
|||||||
import Paper from "@material-ui/core/Paper";
|
import Paper from "@material-ui/core/Paper";
|
||||||
|
|
||||||
|
|
||||||
const HistoryDialog = ({ mapId, onClose }: SimpleDialogProps) => {
|
const HistoryDialog = ({ mapId, onClose }: SimpleDialogProps): React.ReactElement => {
|
||||||
const intl = useIntl();
|
const intl = useIntl();
|
||||||
|
|
||||||
const client: Client = useSelector(activeInstance);
|
const client: Client = useSelector(activeInstance);
|
||||||
const { isLoading, error, data } = useQuery<unknown, ErrorInfo, ChangeHistory[]>('history', () => {
|
const { data } = useQuery<unknown, ErrorInfo, ChangeHistory[]>('history', () => {
|
||||||
return client.fetchHistory(mapId);
|
return client.fetchHistory(mapId);
|
||||||
});
|
});
|
||||||
const changeHistory: ChangeHistory[] = data ? data : [];
|
const changeHistory: ChangeHistory[] = data ? data : [];
|
||||||
@ -35,7 +35,7 @@ const HistoryDialog = ({ mapId, onClose }: SimpleDialogProps) => {
|
|||||||
const handleOnClick = (event, vid): void => {
|
const handleOnClick = (event, vid): void => {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
client.revertHistory(mapId, vid)
|
client.revertHistory(mapId, vid)
|
||||||
.then((mapId) => {
|
.then(() => {
|
||||||
handleOnClose();
|
handleOnClose();
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
@ -22,7 +22,7 @@ export type CreateProps = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const defaultModel: ImportModel = { title: '' };
|
const defaultModel: ImportModel = { title: '' };
|
||||||
const ImportDialog = ({onClose}: CreateProps) => {
|
const ImportDialog = ({ onClose }: CreateProps): React.ReactElement => {
|
||||||
const client: Client = useSelector(activeInstance);
|
const client: Client = useSelector(activeInstance);
|
||||||
const [model, setModel] = React.useState<ImportModel>(defaultModel);
|
const [model, setModel] = React.useState<ImportModel>(defaultModel);
|
||||||
const [error, setError] = React.useState<ErrorInfo>();
|
const [error, setError] = React.useState<ErrorInfo>();
|
||||||
@ -66,11 +66,8 @@ const ImportDialog = ({onClose}: CreateProps) => {
|
|||||||
|
|
||||||
if (files) {
|
if (files) {
|
||||||
const file = files[0];
|
const file = files[0];
|
||||||
let title = file.name;
|
|
||||||
title = title.substring(0, title.lastIndexOf("."));
|
|
||||||
|
|
||||||
// Closure to capture the file information.
|
// Closure to capture the file information.
|
||||||
reader.onload = (event) => {
|
reader.onload = (event) => {
|
||||||
const fileContent = event?.target?.result;
|
const fileContent = event?.target?.result;
|
||||||
model.content = fileContent;
|
model.content = fileContent;
|
||||||
|
|
||||||
@ -83,7 +80,7 @@ const ImportDialog = ({onClose}: CreateProps) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
model.contentType = file.name.lastIndexOf(".wxml") != -1 ? "application/xml" : "application/freemind";
|
model.contentType = file.name.lastIndexOf(".wxml") != -1 ? "application/xml" : "application/freemind";
|
||||||
setModel({...model});
|
setModel({ ...model });
|
||||||
};
|
};
|
||||||
|
|
||||||
// Read in the image file as a data URL.
|
// Read in the image file as a data URL.
|
||||||
|
@ -11,6 +11,7 @@ import PublishDialog from './publish-dialog';
|
|||||||
import InfoDialog from './info-dialog';
|
import InfoDialog from './info-dialog';
|
||||||
import DeleteMultiselectDialog from './delete-multiselect-dialog';
|
import DeleteMultiselectDialog from './delete-multiselect-dialog';
|
||||||
import ExportDialog from './export-dialog';
|
import ExportDialog from './export-dialog';
|
||||||
|
import ShareDialog from './share-dialog';
|
||||||
|
|
||||||
export type BasicMapInfo = {
|
export type BasicMapInfo = {
|
||||||
name: string;
|
name: string;
|
||||||
@ -23,12 +24,10 @@ type ActionDialogProps = {
|
|||||||
onClose: () => void
|
onClose: () => void
|
||||||
}
|
}
|
||||||
|
|
||||||
const ActionDispatcher = (props: ActionDialogProps) => {
|
const ActionDispatcher = ({ mapsId, action, onClose }: ActionDialogProps): React.ReactElement => {
|
||||||
const mapsId = props.mapsId;
|
|
||||||
const action = props.action;
|
|
||||||
|
|
||||||
const handleOnClose = (): void => {
|
const handleOnClose = (): void => {
|
||||||
props.onClose();
|
onClose();
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (action) {
|
switch (action) {
|
||||||
@ -54,6 +53,7 @@ const ActionDispatcher = (props: ActionDialogProps) => {
|
|||||||
{action === 'info' && <InfoDialog onClose={handleOnClose} mapId={mapsId[0]} />}
|
{action === 'info' && <InfoDialog onClose={handleOnClose} mapId={mapsId[0]} />}
|
||||||
{action === 'create' && <CreateDialog onClose={handleOnClose} />}
|
{action === 'create' && <CreateDialog onClose={handleOnClose} />}
|
||||||
{action === 'export' && <ExportDialog onClose={handleOnClose} mapId={mapsId[0]} enableImgExport={false} />}
|
{action === 'export' && <ExportDialog onClose={handleOnClose} mapId={mapsId[0]} enableImgExport={false} />}
|
||||||
|
{action === 'share' && <ShareDialog onClose={handleOnClose} mapId={mapsId[0]} />}
|
||||||
</span >
|
</span >
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@ import { FormattedMessage, useIntl } from 'react-intl';
|
|||||||
|
|
||||||
import { ErrorInfo } from '../../../../classes/client';
|
import { ErrorInfo } from '../../../../classes/client';
|
||||||
import BaseDialog from '../base-dialog';
|
import BaseDialog from '../base-dialog';
|
||||||
import { SimpleDialogProps } from '..';
|
import { SimpleDialogProps } from '..';
|
||||||
import { useStyles } from './style';
|
import { useStyles } from './style';
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import { fetchMapById } from '../../../../redux/clientSlice';
|
import { fetchMapById } from '../../../../redux/clientSlice';
|
||||||
@ -13,7 +13,7 @@ import ListItem from '@material-ui/core/ListItem';
|
|||||||
import Typography from '@material-ui/core/Typography';
|
import Typography from '@material-ui/core/Typography';
|
||||||
import List from '@material-ui/core/List';
|
import List from '@material-ui/core/List';
|
||||||
|
|
||||||
const InfoDialog = ({ mapId, onClose }: SimpleDialogProps) => {
|
const InfoDialog = ({ mapId, onClose }: SimpleDialogProps): React.ReactElement => {
|
||||||
const { map } = fetchMapById(mapId);
|
const { map } = fetchMapById(mapId);
|
||||||
const [error, setError] = React.useState<ErrorInfo>();
|
const [error, setError] = React.useState<ErrorInfo>();
|
||||||
|
|
||||||
@ -31,7 +31,7 @@ const InfoDialog = ({ mapId, onClose }: SimpleDialogProps) => {
|
|||||||
description={intl.formatMessage({ id: 'info.description-msg', defaultMessage: 'By publishing the map you make it visible to everyone on the Internet.' })}
|
description={intl.formatMessage({ id: 'info.description-msg', defaultMessage: 'By publishing the map you make it visible to everyone on the Internet.' })}
|
||||||
submitButton={intl.formatMessage({ id: 'info.button', defaultMessage: 'Accept' })}>
|
submitButton={intl.formatMessage({ id: 'info.button', defaultMessage: 'Accept' })}>
|
||||||
|
|
||||||
<Paper style={{ maxHeight: '200px' }}>
|
<Paper style={{ maxHeight: 200, overflowY: 'scroll' }} variant="outlined" elevation={0}>
|
||||||
<Card variant="outlined">
|
<Card variant="outlined">
|
||||||
<List dense={true}>
|
<List dense={true}>
|
||||||
<ListItem>
|
<ListItem>
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
import { Theme } from "@material-ui/core/styles/createMuiTheme";
|
|
||||||
import createStyles from "@material-ui/core/styles/createStyles";
|
import createStyles from "@material-ui/core/styles/createStyles";
|
||||||
import makeStyles from "@material-ui/core/styles/makeStyles";
|
import makeStyles from "@material-ui/core/styles/makeStyles";
|
||||||
|
|
||||||
export const useStyles = makeStyles((theme: Theme) =>
|
export const useStyles = makeStyles(() =>
|
||||||
createStyles({
|
createStyles({
|
||||||
textarea: {
|
textarea: {
|
||||||
width: '100%',
|
width: '100%',
|
||||||
|
@ -20,7 +20,7 @@ import Typography from '@material-ui/core/Typography';
|
|||||||
import TextareaAutosize from '@material-ui/core/TextareaAutosize';
|
import TextareaAutosize from '@material-ui/core/TextareaAutosize';
|
||||||
|
|
||||||
|
|
||||||
const PublishDialog = ({ mapId, onClose }: SimpleDialogProps) => {
|
const PublishDialog = ({ mapId, onClose }: SimpleDialogProps): React.ReactElement => {
|
||||||
const { map } = fetchMapById(mapId);
|
const { map } = fetchMapById(mapId);
|
||||||
|
|
||||||
const client: Client = useSelector(activeInstance);
|
const client: Client = useSelector(activeInstance);
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
import { Theme } from "@material-ui/core/styles/createMuiTheme";
|
|
||||||
import createStyles from "@material-ui/core/styles/createStyles";
|
import createStyles from "@material-ui/core/styles/createStyles";
|
||||||
import makeStyles from "@material-ui/core/styles/makeStyles";
|
import makeStyles from "@material-ui/core/styles/makeStyles";
|
||||||
|
|
||||||
export const useStyles = makeStyles((theme: Theme) =>
|
export const useStyles = makeStyles(() =>
|
||||||
createStyles({
|
createStyles({
|
||||||
textarea: {
|
textarea: {
|
||||||
width: '100%',
|
width: '100%',
|
||||||
|
@ -16,7 +16,7 @@ export type RenameModel = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const defaultModel: RenameModel = { title: '', description: '', id: -1 };
|
const defaultModel: RenameModel = { title: '', description: '', id: -1 };
|
||||||
const RenameDialog = ({ mapId, onClose }: SimpleDialogProps) => {
|
const RenameDialog = ({ mapId, onClose }: SimpleDialogProps): React.ReactElement => {
|
||||||
const service: Client = useSelector(activeInstance);
|
const service: Client = useSelector(activeInstance);
|
||||||
const [model, setModel] = React.useState<RenameModel>(defaultModel);
|
const [model, setModel] = React.useState<RenameModel>(defaultModel);
|
||||||
const [error, setError] = React.useState<ErrorInfo>();
|
const [error, setError] = React.useState<ErrorInfo>();
|
||||||
|
@ -0,0 +1,76 @@
|
|||||||
|
import React from "react";
|
||||||
|
import { useIntl } from "react-intl";
|
||||||
|
import { useMutation, useQueryClient } from "react-query";
|
||||||
|
import { useSelector } from "react-redux";
|
||||||
|
import Client from "../../../../classes/client";
|
||||||
|
import { activeInstance } from '../../../../redux/clientSlice';
|
||||||
|
import { SimpleDialogProps, handleOnMutationSuccess } from "..";
|
||||||
|
import BaseDialog from "../base-dialog";
|
||||||
|
import List from "@material-ui/core/List";
|
||||||
|
import ListItem from "@material-ui/core/ListItem";
|
||||||
|
import ListItemText from "@material-ui/core/ListItemText";
|
||||||
|
import IconButton from "@material-ui/core/IconButton";
|
||||||
|
import ListItemSecondaryAction from "@material-ui/core/ListItemSecondaryAction";
|
||||||
|
import DeleteIcon from '@material-ui/icons/Delete';
|
||||||
|
import Paper from "@material-ui/core/Paper";
|
||||||
|
|
||||||
|
|
||||||
|
const ShareDialog = ({ mapId, onClose }: SimpleDialogProps): React.ReactElement => {
|
||||||
|
const intl = useIntl();
|
||||||
|
const client: Client = useSelector(activeInstance);
|
||||||
|
const queryClient = useQueryClient();
|
||||||
|
|
||||||
|
const mutation = useMutation((id: number) => client.deleteMap(id),
|
||||||
|
{
|
||||||
|
onSuccess: () => handleOnMutationSuccess(onClose, queryClient)
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
const handleOnClose = (): void => {
|
||||||
|
onClose();
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleOnSubmit = (): void => {
|
||||||
|
mutation.mutate(mapId);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fetch map model to be rendered ...
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<BaseDialog
|
||||||
|
onClose={handleOnClose} onSubmit={handleOnSubmit}
|
||||||
|
title={intl.formatMessage({ id: "share.delete-title", defaultMessage: "Share with collaborators" })}
|
||||||
|
description={intl.formatMessage({ id: "share.delete-description", defaultMessage: "Collaboration " })}
|
||||||
|
submitButton={intl.formatMessage({ id: "share.delete-title", defaultMessage: "Share" })} >
|
||||||
|
|
||||||
|
|
||||||
|
<div style={{ margin: "10px 0px", padding:"30px 0px" ,background:"gray" }}>
|
||||||
|
<input type="text" placeholder="Enter collaboratior emails separated by comas" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<Paper elevation={1} style={{ maxHeight: 200, overflowY: 'scroll' }} variant="outlined">
|
||||||
|
<List>
|
||||||
|
{[.4, 5, 7, 7, 8, 9, 100, 1, 2, 3].map((value) => {
|
||||||
|
const labelId = `checkbox-list-label-${value}`;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<ListItem key={value} role={undefined} dense button>
|
||||||
|
<ListItemText id={labelId} primary={`Line item ${value + 1}`} />
|
||||||
|
<ListItemSecondaryAction>
|
||||||
|
<IconButton edge="end">
|
||||||
|
<DeleteIcon />
|
||||||
|
</IconButton>
|
||||||
|
</ListItemSecondaryAction>
|
||||||
|
</ListItem>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</List>
|
||||||
|
</Paper>
|
||||||
|
|
||||||
|
</BaseDialog>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export default ShareDialog;
|
@ -12,7 +12,7 @@ import MenuItem from "@material-ui/core/MenuItem";
|
|||||||
import Link from "@material-ui/core/Link";
|
import Link from "@material-ui/core/Link";
|
||||||
import ListItemIcon from "@material-ui/core/ListItemIcon";
|
import ListItemIcon from "@material-ui/core/ListItemIcon";
|
||||||
|
|
||||||
const HelpMenu = () => {
|
const HelpMenu = (): React.ReactElement => {
|
||||||
const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);
|
const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);
|
||||||
const open = Boolean(anchorEl);
|
const open = Boolean(anchorEl);
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import React, { ErrorInfo, useEffect } from 'react';
|
import React, { ErrorInfo, ReactElement, useEffect } from 'react';
|
||||||
import clsx from 'clsx';
|
import clsx from 'clsx';
|
||||||
import Drawer from '@material-ui/core/Drawer';
|
import Drawer from '@material-ui/core/Drawer';
|
||||||
import AppBar from '@material-ui/core/AppBar';
|
import AppBar from '@material-ui/core/AppBar';
|
||||||
@ -56,10 +56,10 @@ export interface LabelFilter {
|
|||||||
interface ToolbarButtonInfo {
|
interface ToolbarButtonInfo {
|
||||||
filter: GenericFilter | LabelFilter,
|
filter: GenericFilter | LabelFilter,
|
||||||
label: string
|
label: string
|
||||||
icon: any;
|
icon: React.ReactElement;
|
||||||
}
|
}
|
||||||
|
|
||||||
const MapsPage = () => {
|
const MapsPage = (): ReactElement => {
|
||||||
const classes = useStyles();
|
const classes = useStyles();
|
||||||
const [filter, setFilter] = React.useState<Filter>({ type: 'all' });
|
const [filter, setFilter] = React.useState<Filter>({ type: 'all' });
|
||||||
const client: Client = useSelector(activeInstance);
|
const client: Client = useSelector(activeInstance);
|
||||||
@ -221,7 +221,7 @@ const MapsPage = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
interface ListItemProps {
|
interface ListItemProps {
|
||||||
icon: any,
|
icon: React.ReactElement,
|
||||||
label: string,
|
label: string,
|
||||||
filter: Filter,
|
filter: Filter,
|
||||||
active?: Filter
|
active?: Filter
|
||||||
@ -241,12 +241,12 @@ const StyleListItem = (props: ListItemProps) => {
|
|||||||
&& (activeFilter.type != 'label' || ((activeFilter as LabelFilter).label == (filter as LabelFilter).label));
|
&& (activeFilter.type != 'label' || ((activeFilter as LabelFilter).label == (filter as LabelFilter).label));
|
||||||
|
|
||||||
|
|
||||||
const handleOnClick = (event: any, filter: Filter) => {
|
const handleOnClick = (event: React.MouseEvent<HTMLDivElement, MouseEvent>, filter: Filter) => {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
onClick(filter);
|
onClick(filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleOnDelete = (event: any, filter: Filter) => {
|
const handleOnDelete = (event: React.MouseEvent<HTMLButtonElement, MouseEvent>, filter: Filter) => {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
if (!onDeleteLabel) {
|
if (!onDeleteLabel) {
|
||||||
throw "Illegal state exeption";
|
throw "Illegal state exeption";
|
||||||
|
@ -18,7 +18,7 @@ import DialogActions from '@material-ui/core/DialogActions';
|
|||||||
import Divider from '@material-ui/core/Divider';
|
import Divider from '@material-ui/core/Divider';
|
||||||
|
|
||||||
|
|
||||||
const LanguageMenu = () => {
|
const LanguageMenu = (): React.ReactElement => {
|
||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
const client: Client = useSelector(activeInstance);
|
const client: Client = useSelector(activeInstance);
|
||||||
const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);
|
const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);
|
||||||
|
@ -51,6 +51,7 @@ function descendingComparator<T>(a: T, b: T, orderBy: keyof T) {
|
|||||||
|
|
||||||
type Order = 'asc' | 'desc';
|
type Order = 'asc' | 'desc';
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
function getComparator<Key extends keyof any>(
|
function getComparator<Key extends keyof any>(
|
||||||
order: Order,
|
order: Order,
|
||||||
orderBy: Key,
|
orderBy: Key,
|
||||||
@ -195,7 +196,7 @@ const mapsFilter = (filter: Filter, search: string): ((mapInfo: MapInfo) => bool
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const MapsList = (props: MapsListProps) => {
|
export const MapsList = (props: MapsListProps):React.ReactElement => {
|
||||||
const classes = useStyles();
|
const classes = useStyles();
|
||||||
const [order, setOrder] = React.useState<Order>('asc');
|
const [order, setOrder] = React.useState<Order>('asc');
|
||||||
const [filter, setFilter] = React.useState<Filter>({ type: 'all' });
|
const [filter, setFilter] = React.useState<Filter>({ type: 'all' });
|
||||||
@ -280,8 +281,8 @@ export const MapsList = (props: MapsListProps) => {
|
|||||||
setPage(0);
|
setPage(0);
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleActionClick = (mapId: number): ((event: any) => void) => {
|
const handleActionClick = (mapId: number): ((event) => void) => {
|
||||||
return (event: any): void => {
|
return (event): void => {
|
||||||
setActiveRowAction(
|
setActiveRowAction(
|
||||||
{
|
{
|
||||||
mapId: mapId,
|
mapId: mapId,
|
||||||
@ -435,7 +436,7 @@ export const MapsList = (props: MapsListProps) => {
|
|||||||
return (
|
return (
|
||||||
<TableRow
|
<TableRow
|
||||||
hover
|
hover
|
||||||
onClick={(event: any) => handleRowClick(event, row.id)}
|
onClick={(event) => handleRowClick(event, row.id)}
|
||||||
role="checkbox"
|
role="checkbox"
|
||||||
aria-checked={isItemSelected}
|
aria-checked={isItemSelected}
|
||||||
tabIndex={-1}
|
tabIndex={-1}
|
||||||
|
@ -102,7 +102,7 @@ const RegistrationForm = () => {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const RegistationPage = () => {
|
const RegistationPage = (): React.ReactElement => {
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
document.title = 'Registration | WiseMapping';
|
document.title = 'Registration | WiseMapping';
|
||||||
|
@ -8,7 +8,7 @@ import Typography from '@material-ui/core/Typography';
|
|||||||
import Button from '@material-ui/core/Button';
|
import Button from '@material-ui/core/Button';
|
||||||
|
|
||||||
|
|
||||||
const RegistrationSuccessPage = () => {
|
const RegistrationSuccessPage = (): React.ReactElement => {
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
document.title = 'Reset Password | WiseMapping';
|
document.title = 'Reset Password | WiseMapping';
|
||||||
});
|
});
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import { createSlice, PayloadAction } from '@reduxjs/toolkit';
|
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
|
||||||
|
import { createSlice } from '@reduxjs/toolkit';
|
||||||
import { useQuery } from 'react-query';
|
import { useQuery } from 'react-query';
|
||||||
import Client, { AccountInfo, ErrorInfo, MapInfo } from '../classes/client';
|
import Client, { AccountInfo, ErrorInfo, MapInfo } from '../classes/client';
|
||||||
import MockClient from '../classes/client/mock-client';
|
import MockClient from '../classes/client/mock-client';
|
||||||
@ -15,6 +16,7 @@ class RutimeConfig {
|
|||||||
load() {
|
load() {
|
||||||
|
|
||||||
// Config can be inserted in the html page to define the global properties ...
|
// Config can be inserted in the html page to define the global properties ...
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
this.config = (window as any).serverconfig;
|
this.config = (window as any).serverconfig;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
@ -53,8 +55,8 @@ export const clientSlice = createSlice({
|
|||||||
name: "client",
|
name: "client",
|
||||||
initialState: initialState,
|
initialState: initialState,
|
||||||
reducers: {
|
reducers: {
|
||||||
sessionExpired(state, action: PayloadAction<void>) {
|
sessionExpired(state) {
|
||||||
state.status = { state: 'session-expired', msg: 'Sessions has expired. You need to login again.' }
|
state.status = { state: 'session-expired', msg: 'Sessions has expired. You need to login again' }
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
@ -87,10 +89,12 @@ export const fetchAccount = (): AccountInfo | undefined => {
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
export const activeInstance = (state: any): Client => {
|
export const activeInstance = (state: any): Client => {
|
||||||
return state.client.instance;
|
return state.client.instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
export const activeInstanceStatus = (state: any): ClientStatus => {
|
export const activeInstanceStatus = (state: any): ClientStatus => {
|
||||||
return state.client.status;
|
return state.client.status;
|
||||||
}
|
}
|
||||||
|
1
packages/webapp/stats.json
Normal file
1
packages/webapp/stats.json
Normal file
File diff suppressed because one or more lines are too long
@ -1,6 +1,8 @@
|
|||||||
const { merge } = require('webpack-merge');
|
const { merge } = require('webpack-merge');
|
||||||
const common = require('./webpack.common.js');
|
const common = require('./webpack.common.js');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
|
const HtmlWebpackPlugin = require('html-webpack-plugin');
|
||||||
|
|
||||||
|
|
||||||
const CompressionPlugin = require('compression-webpack-plugin');
|
const CompressionPlugin = require('compression-webpack-plugin');
|
||||||
|
|
||||||
@ -11,6 +13,13 @@ module.exports = merge(common, {
|
|||||||
minimize: true
|
minimize: true
|
||||||
},
|
},
|
||||||
plugins: [
|
plugins: [
|
||||||
new CompressionPlugin()
|
new CompressionPlugin(),
|
||||||
|
new HtmlWebpackPlugin({
|
||||||
|
template: path.join(__dirname, 'public/index.html'),
|
||||||
|
templateParameters: {
|
||||||
|
PUBLIC_URL: process.env.PUBLIC_URL ? process.env.PUBLIC_URL : 'https://www.wisemapping.com'
|
||||||
|
},
|
||||||
|
base: process.env.PUBLIC_URL ? process.env.PUBLIC_URL : 'https://www.wisemapping.com'
|
||||||
|
})
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
|
@ -3034,6 +3034,10 @@ dayjs@^1.10.4:
|
|||||||
resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.4.tgz#8e544a9b8683f61783f570980a8a80eaf54ab1e2"
|
resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.4.tgz#8e544a9b8683f61783f570980a8a80eaf54ab1e2"
|
||||||
integrity sha512-RI/Hh4kqRc1UKLOAf/T5zdMMX5DQIlDxwUe3wSyMMnEbGunnpENCdbUgM+dW7kXidZqCttBrmw7BhN4TMddkCw==
|
integrity sha512-RI/Hh4kqRc1UKLOAf/T5zdMMX5DQIlDxwUe3wSyMMnEbGunnpENCdbUgM+dW7kXidZqCttBrmw7BhN4TMddkCw==
|
||||||
|
|
||||||
|
dayjs@^1.10.4:
|
||||||
|
version "1.10.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.4.tgz#8e544a9b8683f61783f570980a8a80eaf54ab1e2"
|
||||||
|
|
||||||
debug@2.6.9, debug@^2.2.0, debug@^2.3.3:
|
debug@2.6.9, debug@^2.2.0, debug@^2.3.3:
|
||||||
version "2.6.9"
|
version "2.6.9"
|
||||||
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
|
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
|
||||||
@ -6132,7 +6136,10 @@ mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.5:
|
|||||||
modify-values@^1.0.0:
|
modify-values@^1.0.0:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022"
|
resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022"
|
||||||
|
<<<<<<< Updated upstream
|
||||||
integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==
|
integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==
|
||||||
|
=======
|
||||||
|
>>>>>>> Stashed changes
|
||||||
|
|
||||||
move-concurrently@^1.0.1:
|
move-concurrently@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
|
Loading…
Reference in New Issue
Block a user