mirror of
https://bitbucket.org/wisemapping/wisemapping-frontend.git
synced 2024-11-11 01:43:23 +01:00
Complete starred support for rest
This commit is contained in:
parent
0d7cf3e5b1
commit
858050096f
@ -1,3 +0,0 @@
|
|||||||
{
|
|
||||||
"apiBaseUrl": "http://localhost:8080"
|
|
||||||
}
|
|
@ -17,6 +17,12 @@ export type MapInfo = {
|
|||||||
isPublic: boolean;
|
isPublic: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type HistoryChange = {
|
||||||
|
id: number;
|
||||||
|
creator: string;
|
||||||
|
modified: string;
|
||||||
|
}
|
||||||
|
|
||||||
export type BasicMapInfo = {
|
export type BasicMapInfo = {
|
||||||
title: string;
|
title: string;
|
||||||
description?: string;
|
description?: string;
|
||||||
@ -44,8 +50,7 @@ interface Client {
|
|||||||
renameMap(id: number, basicInfo: BasicMapInfo): Promise<void>;
|
renameMap(id: number, basicInfo: BasicMapInfo): Promise<void>;
|
||||||
duplicateMap(id: number, basicInfo: BasicMapInfo): Promise<number>;
|
duplicateMap(id: number, basicInfo: BasicMapInfo): Promise<number>;
|
||||||
loadMapInfo(id: number): Promise<BasicMapInfo>;
|
loadMapInfo(id: number): Promise<BasicMapInfo>;
|
||||||
changeStarred(id: number): Promise<void>;
|
changeStarred(id: number, starred: boolean): Promise<void>;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ class MockClient implements Client {
|
|||||||
return Promise.resolve(this.labels);
|
return Promise.resolve(this.labels);
|
||||||
}
|
}
|
||||||
|
|
||||||
changeStarred(id: number): Promise<void> {
|
changeStarred(id: number, starred: boolean): Promise<void> {
|
||||||
const mapInfo = this.maps.find(m => m.id == id);
|
const mapInfo = this.maps.find(m => m.id == id);
|
||||||
if (!mapInfo) {
|
if (!mapInfo) {
|
||||||
console.log(`Could not find the map iwth id ${id}`);
|
console.log(`Could not find the map iwth id ${id}`);
|
||||||
|
@ -56,6 +56,10 @@ export default class RestClient extends MockClient {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
renameMap(id: number, basicInfo: BasicMapInfo): Promise<void> {
|
||||||
|
throw "Method not implemented yet";
|
||||||
|
}
|
||||||
|
|
||||||
createMap(model: BasicMapInfo): Promise<number> {
|
createMap(model: BasicMapInfo): Promise<number> {
|
||||||
const handler = (success: (mapId: number) => void, reject: (error: ErrorInfo) => void) => {
|
const handler = (success: (mapId: number) => void, reject: (error: ErrorInfo) => void) => {
|
||||||
axios.post(this.baseUrl + `/c/restful/maps?title=${model.title}&description=${model.description ? model.description : ''}`,
|
axios.post(this.baseUrl + `/c/restful/maps?title=${model.title}&description=${model.description ? model.description : ''}`,
|
||||||
@ -73,7 +77,6 @@ export default class RestClient extends MockClient {
|
|||||||
return new Promise(handler);
|
return new Promise(handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fetchAllMaps(): Promise<MapInfo[]> {
|
fetchAllMaps(): Promise<MapInfo[]> {
|
||||||
const handler = (success: (mapsInfo: MapInfo[]) => void, reject: (error: ErrorInfo) => void) => {
|
const handler = (success: (mapsInfo: MapInfo[]) => void, reject: (error: ErrorInfo) => void) => {
|
||||||
axios.get(
|
axios.get(
|
||||||
@ -142,7 +145,6 @@ export default class RestClient extends MockClient {
|
|||||||
return new Promise(handler);
|
return new Promise(handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
resetPassword(email: string): Promise<void> {
|
resetPassword(email: string): Promise<void> {
|
||||||
|
|
||||||
const handler = (success: () => void, reject: (error: ErrorInfo) => void) => {
|
const handler = (success: () => void, reject: (error: ErrorInfo) => void) => {
|
||||||
@ -178,5 +180,21 @@ export default class RestClient extends MockClient {
|
|||||||
}
|
}
|
||||||
return new Promise(handler);
|
return new Promise(handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
changeStarred(id: number, starred: boolean): Promise<void> {
|
||||||
|
const handler = (success: () => void, reject: (error: ErrorInfo) => void) => {
|
||||||
|
axios.put(this.baseUrl + `/c/restful/maps/${id}/starred`,
|
||||||
|
starred,
|
||||||
|
{ headers: { 'Content-Type': 'text/plain' } }
|
||||||
|
).then(() => {
|
||||||
|
success();
|
||||||
|
}).catch(error => {
|
||||||
|
const response = error.response;
|
||||||
|
const errorInfo = this.parseResponseOnError(response);
|
||||||
|
reject(errorInfo);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return new Promise(handler);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ import { FormControl } from '@material-ui/core';
|
|||||||
import Client, { BasicMapInfo, ErrorInfo } from '../../../../client';
|
import Client, { BasicMapInfo, ErrorInfo } from '../../../../client';
|
||||||
import { activeInstance } from '../../../../reducers/serviceSlice';
|
import { activeInstance } from '../../../../reducers/serviceSlice';
|
||||||
import Input from '../../../form/input';
|
import Input from '../../../form/input';
|
||||||
import BaseDialog from '../action-dialog';
|
import BaseDialog from '../base-dialog';
|
||||||
|
|
||||||
export type CreateModel = {
|
export type CreateModel = {
|
||||||
title: string;
|
title: string;
|
@ -6,7 +6,7 @@ import { useSelector } from "react-redux";
|
|||||||
import Client from "../../../../client";
|
import Client from "../../../../client";
|
||||||
import { activeInstance } from '../../../../reducers/serviceSlice';
|
import { activeInstance } from '../../../../reducers/serviceSlice';
|
||||||
import { DialogProps, fetchMapById, handleOnMutationSuccess } from "..";
|
import { DialogProps, fetchMapById, handleOnMutationSuccess } from "..";
|
||||||
import BaseDialog from "../action-dialog";
|
import BaseDialog from "../base-dialog";
|
||||||
|
|
||||||
|
|
||||||
const DeleteDialog = (props: DialogProps) => {
|
const DeleteDialog = (props: DialogProps) => {
|
@ -1,14 +1,14 @@
|
|||||||
import React, { useEffect } from "react";
|
import React, { useEffect } from "react";
|
||||||
import { useIntl } from "react-intl";
|
import { useIntl } from "react-intl";
|
||||||
import { useMutation, useQueryClient } from "react-query";
|
import { useMutation, useQueryClient } from "react-query";
|
||||||
import { useSelector } from "react-redux";
|
|
||||||
import { FormControl } from "@material-ui/core";
|
import { FormControl } from "@material-ui/core";
|
||||||
|
import { useSelector } from "react-redux";
|
||||||
|
|
||||||
import Client, { BasicMapInfo, ErrorInfo } from "../../../../client";
|
import Client, { BasicMapInfo, ErrorInfo } from "../../../../client";
|
||||||
import { activeInstance } from '../../../../reducers/serviceSlice';
|
import { activeInstance } from '../../../../reducers/serviceSlice';
|
||||||
import Input from "../../../form/input";
|
import Input from "../../../form/input";
|
||||||
import { DialogProps, fetchMapById, handleOnMutationSuccess } from "..";
|
import { DialogProps, fetchMapById } from "..";
|
||||||
import BaseDialog from "../action-dialog";
|
import BaseDialog from "../base-dialog";
|
||||||
|
|
||||||
export type DuplicateModel = {
|
export type DuplicateModel = {
|
||||||
id: number;
|
id: number;
|
@ -1,17 +1,15 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import RenameDialog from './rename';
|
import RenameDialog from './rename';
|
||||||
import DeleteDialog from './delete';
|
import DeleteDialog from './delete-dialog';
|
||||||
import { ActionType } from '../action-chooser';
|
import { ActionType } from '../action-chooser';
|
||||||
import { ErrorInfo, MapInfo } from '../../../client';
|
import { ErrorInfo, MapInfo } from '../../../client';
|
||||||
import Client from '../../../client';
|
import Client from '../../../client';
|
||||||
import { useSelector } from 'react-redux';
|
import { useSelector } from "react-redux";
|
||||||
import { QueryClient, useQuery } from 'react-query';
|
import { QueryClient, useQuery } from 'react-query';
|
||||||
import { activeInstance } from '../../../reducers/serviceSlice';
|
import { activeInstance } from '../../../reducers/serviceSlice';
|
||||||
import DuplicateDialog from './duplicate';
|
import DuplicateDialog from './duplicate-dialog';
|
||||||
import { useHistory } from 'react-router-dom';
|
import { useHistory } from 'react-router-dom';
|
||||||
import InfoDialog from './info';
|
import CreateDialog from './create-dialog';
|
||||||
import CreateDialog from './create';
|
|
||||||
|
|
||||||
|
|
||||||
export type BasicMapInfo = {
|
export type BasicMapInfo = {
|
||||||
name: string;
|
name: string;
|
||||||
@ -35,10 +33,10 @@ const ActionDispatcher = (props: ActionDialogProps) => {
|
|||||||
|
|
||||||
switch (action) {
|
switch (action) {
|
||||||
case 'open':
|
case 'open':
|
||||||
history.push(`/c/maps/${mapId}/edit`);
|
window.location.href = `/c/maps/${mapId}/edit`;
|
||||||
break;
|
break;
|
||||||
case 'print':
|
case 'print':
|
||||||
history.push(`/c/maps/${mapId}/print`);
|
window.open(`/c/maps/${mapId}/print`,'print');
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -48,7 +46,6 @@ const ActionDispatcher = (props: ActionDialogProps) => {
|
|||||||
<DeleteDialog open={action === 'delete'} onClose={handleOnClose} mapId={mapId} />
|
<DeleteDialog open={action === 'delete'} onClose={handleOnClose} mapId={mapId} />
|
||||||
<RenameDialog open={action === 'rename'} onClose={handleOnClose} mapId={mapId} />
|
<RenameDialog open={action === 'rename'} onClose={handleOnClose} mapId={mapId} />
|
||||||
<DuplicateDialog open={action === 'duplicate'} onClose={handleOnClose} mapId={mapId} />
|
<DuplicateDialog open={action === 'duplicate'} onClose={handleOnClose} mapId={mapId} />
|
||||||
<InfoDialog open={action === 'info'} onClose={handleOnClose} mapId={mapId} />
|
|
||||||
</span >
|
</span >
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -1,37 +0,0 @@
|
|||||||
import React from "react";
|
|
||||||
import { useQueryClient } from "react-query";
|
|
||||||
import { useSelector } from "react-redux";
|
|
||||||
import Client from "../../../../client";
|
|
||||||
import { activeInstance } from '../../../../reducers/serviceSlice';
|
|
||||||
import { DialogProps, fetchMapById } from "..";
|
|
||||||
import BaseDialog from "../action-dialog";
|
|
||||||
import { useIntl } from "react-intl";
|
|
||||||
|
|
||||||
|
|
||||||
const InfoDialog = (props: DialogProps) => {
|
|
||||||
const service: Client = useSelector(activeInstance);
|
|
||||||
const queryClient = useQueryClient();
|
|
||||||
const intl = useIntl();
|
|
||||||
|
|
||||||
|
|
||||||
const mapId = props.mapId;
|
|
||||||
const handleOnClose = (): void => {
|
|
||||||
props.onClose();
|
|
||||||
};
|
|
||||||
|
|
||||||
const { map } = fetchMapById(mapId);
|
|
||||||
return (
|
|
||||||
<div>
|
|
||||||
<BaseDialog
|
|
||||||
open={props.open} onClose={handleOnClose}
|
|
||||||
title={intl.formatMessage({ id: "action.info-title", defaultMessage: "Info" })}>
|
|
||||||
|
|
||||||
<iframe src="http://www.clarin.com" style={{ width: '100%', height: '400px' }} />
|
|
||||||
|
|
||||||
</BaseDialog>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
export default InfoDialog;
|
|
@ -7,7 +7,7 @@ import { activeInstance } from '../../../../reducers/serviceSlice';
|
|||||||
import { DialogProps, fetchMapById, handleOnMutationSuccess } from "..";
|
import { DialogProps, fetchMapById, handleOnMutationSuccess } from "..";
|
||||||
import Input from "../../../form/input";
|
import Input from "../../../form/input";
|
||||||
import { FormControl } from "@material-ui/core";
|
import { FormControl } from "@material-ui/core";
|
||||||
import BaseDialog from "../action-dialog";
|
import BaseDialog from "../base-dialog";
|
||||||
|
|
||||||
export type RenameModel = {
|
export type RenameModel = {
|
||||||
id: number;
|
id: number;
|
||||||
|
@ -317,7 +317,7 @@ const HelpToobarButton = () => {
|
|||||||
}}>
|
}}>
|
||||||
|
|
||||||
<MenuItem onClick={handleClose}>
|
<MenuItem onClick={handleClose}>
|
||||||
<Link color="textSecondary" href="https://www.wisemapping.com/termsofuse.html">
|
<Link color="textSecondary" href="https://www.wisemapping.com/termsofuse.html" target="help">
|
||||||
<ListItemIcon>
|
<ListItemIcon>
|
||||||
<PolicyOutlined fontSize="small" />
|
<PolicyOutlined fontSize="small" />
|
||||||
</ListItemIcon>
|
</ListItemIcon>
|
||||||
@ -335,7 +335,7 @@ const HelpToobarButton = () => {
|
|||||||
</MenuItem>
|
</MenuItem>
|
||||||
|
|
||||||
<MenuItem onClick={handleClose}>
|
<MenuItem onClick={handleClose}>
|
||||||
<Link color="textSecondary" href="feedback@wisemapping.com">
|
<Link color="textSecondary" href="mailto:feedback@wisemapping.com">
|
||||||
<ListItemIcon>
|
<ListItemIcon>
|
||||||
<FeedbackOutlined fontSize="small" />
|
<FeedbackOutlined fontSize="small" />
|
||||||
</ListItemIcon>
|
</ListItemIcon>
|
||||||
@ -344,7 +344,7 @@ const HelpToobarButton = () => {
|
|||||||
</MenuItem>
|
</MenuItem>
|
||||||
|
|
||||||
<MenuItem onClick={handleClose}>
|
<MenuItem onClick={handleClose}>
|
||||||
<Link color="textSecondary" href="https://www.wisemapping.com/aboutus.html">
|
<Link color="textSecondary" href="https://www.wisemapping.com/aboutus.html" target="help">
|
||||||
<ListItemIcon>
|
<ListItemIcon>
|
||||||
<EmojiPeopleOutlined fontSize="small" />
|
<EmojiPeopleOutlined fontSize="small" />
|
||||||
</ListItemIcon>
|
</ListItemIcon>
|
||||||
|
@ -276,7 +276,8 @@ export const MapsList = (props: MapsListProps) => {
|
|||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
|
|
||||||
const starredMultation = useMutation<void, ErrorInfo, number>((id: number) => {
|
const starredMultation = useMutation<void, ErrorInfo, number>((id: number) => {
|
||||||
return client.changeStarred(id);
|
const map = mapsInfo.find(m => m.id == id);
|
||||||
|
return client.changeStarred(id, !Boolean(map?.starred));
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
onSuccess: () => {
|
onSuccess: () => {
|
||||||
@ -395,7 +396,7 @@ export const MapsList = (props: MapsListProps) => {
|
|||||||
{isLoading ? (
|
{isLoading ? (
|
||||||
<TableRow><TableCell colSpan={6}>Loading ...</TableCell></TableRow>) :
|
<TableRow><TableCell colSpan={6}>Loading ...</TableCell></TableRow>) :
|
||||||
(mapsInfo.length == 0 ?
|
(mapsInfo.length == 0 ?
|
||||||
(<TableRow><TableCell colSpan={6} style={{textAlign:'center'}}><FormattedMessage id="maps.emptyresult" defaultMessage="No matching record found with the current filter criteria." /></TableCell></TableRow>) :
|
(<TableRow><TableCell colSpan={6} style={{ textAlign: 'center' }}><FormattedMessage id="maps.emptyresult" defaultMessage="No matching record found with the current filter criteria." /></TableCell></TableRow>) :
|
||||||
stableSort(mapsInfo, getComparator(order, orderBy))
|
stableSort(mapsInfo, getComparator(order, orderBy))
|
||||||
.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage)
|
.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage)
|
||||||
.map((row: MapInfo) => {
|
.map((row: MapInfo) => {
|
||||||
@ -434,7 +435,7 @@ export const MapsList = (props: MapsListProps) => {
|
|||||||
|
|
||||||
<TableCell className={classes.bodyCell}>
|
<TableCell className={classes.bodyCell}>
|
||||||
<Tooltip title="Open for edition" placement="bottom-start">
|
<Tooltip title="Open for edition" placement="bottom-start">
|
||||||
<Link href={`/c/maps/${row.id}/edit`} color="textPrimary" underline="always" onClick={(e)=>e.stopPropagation()}>
|
<Link href={`/c/maps/${row.id}/edit`} color="textPrimary" underline="always" onClick={(e) => e.stopPropagation()}>
|
||||||
{row.title}
|
{row.title}
|
||||||
</Link>
|
</Link>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
|
Loading…
Reference in New Issue
Block a user