Remove PimMain.
parent
b796217cd1
commit
460c712411
@ -1,179 +0,0 @@
|
||||
// SPDX-FileCopyrightText: © 2017 EteSync Authors
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
import * as React from "react";
|
||||
import Fab from "@material-ui/core/Fab";
|
||||
import ContentAdd from "@material-ui/icons/Add";
|
||||
import Tab from "@material-ui/core/Tab";
|
||||
import Tabs from "@material-ui/core/Tabs";
|
||||
import { Theme, withTheme } from "@material-ui/core/styles";
|
||||
|
||||
import * as ICAL from "ical.js";
|
||||
|
||||
import * as EteSync from "etesync";
|
||||
|
||||
import { Location, History } from "history";
|
||||
|
||||
import Container from "../widgets/Container";
|
||||
|
||||
import SearchableAddressBook from "../components/SearchableAddressBook";
|
||||
import Calendar from "../components/Calendar";
|
||||
import TaskList from "../components/Tasks/TaskList";
|
||||
|
||||
import { EventType, ContactType, TaskType, PimType } from "../pim-types";
|
||||
|
||||
import { routeResolver } from "../App";
|
||||
|
||||
import { historyPersistor } from "../persist-state-history";
|
||||
import { SyncInfo } from "../SyncGate";
|
||||
import { UserInfoData, CredentialsData } from "../store";
|
||||
|
||||
const addressBookTitle = "Address Book";
|
||||
const calendarTitle = "Calendar";
|
||||
const tasksTitle = "Tasks";
|
||||
|
||||
const PersistCalendar = historyPersistor("Calendar")(Calendar);
|
||||
|
||||
interface PropsType {
|
||||
contacts: ContactType[];
|
||||
events: EventType[];
|
||||
tasks: TaskType[];
|
||||
location?: Location;
|
||||
history?: History;
|
||||
theme: Theme;
|
||||
collectionsTaskList: EteSync.CollectionInfo[];
|
||||
onItemSave: (item: PimType, journalUid: string, originalItem?: PimType) => Promise<void>;
|
||||
syncInfo: SyncInfo;
|
||||
userInfo: UserInfoData;
|
||||
etesync: CredentialsData;
|
||||
}
|
||||
|
||||
class PimMain extends React.PureComponent<PropsType> {
|
||||
public state: {
|
||||
tab: number;
|
||||
};
|
||||
|
||||
constructor(props: any) {
|
||||
super(props);
|
||||
this.state = { tab: 1 };
|
||||
this.eventClicked = this.eventClicked.bind(this);
|
||||
this.taskClicked = this.taskClicked.bind(this);
|
||||
this.contactClicked = this.contactClicked.bind(this);
|
||||
this.floatingButtonClicked = this.floatingButtonClicked.bind(this);
|
||||
this.newEvent = this.newEvent.bind(this);
|
||||
}
|
||||
|
||||
public eventClicked(event: ICAL.Event) {
|
||||
// FIXME:Hack
|
||||
const itemUid = `${(event as any).journalUid}|${encodeURIComponent(event.uid)}`;
|
||||
|
||||
this.props.history!.push(
|
||||
routeResolver.getRoute("pim.events._id", { itemUid }));
|
||||
}
|
||||
|
||||
public taskClicked(event: ICAL.Event) {
|
||||
// FIXME:Hack
|
||||
const itemUid = `${(event as any).journalUid}|${encodeURIComponent(event.uid)}`;
|
||||
|
||||
this.props.history!.push(
|
||||
routeResolver.getRoute("pim.tasks._id.edit", { itemUid }));
|
||||
}
|
||||
|
||||
public contactClicked(contact: ContactType) {
|
||||
// FIXME:Hack
|
||||
const itemUid = `${(contact as any).journalUid}|${encodeURIComponent(contact.uid)}`;
|
||||
|
||||
this.props.history!.push(
|
||||
routeResolver.getRoute("pim.contacts._id", { itemUid }));
|
||||
}
|
||||
|
||||
public newEvent(start?: Date, end?: Date) {
|
||||
this.props.history!.push(
|
||||
routeResolver.getRoute("pim.events.new"),
|
||||
{ start, end }
|
||||
);
|
||||
}
|
||||
|
||||
public floatingButtonClicked() {
|
||||
if (this.state.tab === 0) {
|
||||
this.props.history!.push(
|
||||
routeResolver.getRoute("pim.contacts.new")
|
||||
);
|
||||
} else if (this.state.tab === 1) {
|
||||
this.newEvent();
|
||||
} else if (this.state.tab === 2) {
|
||||
this.props.history!.push(
|
||||
routeResolver.getRoute("pim.tasks.new")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public render() {
|
||||
const { theme } = this.props;
|
||||
const { tab } = this.state;
|
||||
const style = {
|
||||
floatingButton: {
|
||||
margin: 0,
|
||||
top: "auto",
|
||||
right: 20,
|
||||
bottom: 20,
|
||||
left: "auto",
|
||||
position: "fixed",
|
||||
} as any,
|
||||
};
|
||||
|
||||
return (
|
||||
<React.Fragment>
|
||||
<Tabs
|
||||
variant="fullWidth"
|
||||
style={{ backgroundColor: theme.palette.primary.main }}
|
||||
value={tab}
|
||||
onChange={(_event, value) => this.setState({ tab: value })}
|
||||
>
|
||||
<Tab
|
||||
label={addressBookTitle}
|
||||
/>
|
||||
<Tab
|
||||
label={calendarTitle}
|
||||
/>
|
||||
<Tab
|
||||
label={tasksTitle}
|
||||
/>
|
||||
</Tabs>
|
||||
|
||||
<Container>
|
||||
{tab === 0 &&
|
||||
<SearchableAddressBook entries={this.props.contacts} onItemClick={this.contactClicked} />
|
||||
}
|
||||
{tab === 1 &&
|
||||
<PersistCalendar
|
||||
entries={this.props.events}
|
||||
onItemClick={this.eventClicked}
|
||||
onSlotClick={this.newEvent}
|
||||
/>
|
||||
}
|
||||
{tab === 2 &&
|
||||
<TaskList
|
||||
entries={this.props.tasks}
|
||||
collections={this.props.collectionsTaskList}
|
||||
onItemClick={this.taskClicked}
|
||||
onItemSave={this.props.onItemSave}
|
||||
syncInfo={this.props.syncInfo}
|
||||
userInfo={this.props.userInfo}
|
||||
/>
|
||||
}
|
||||
</Container>
|
||||
|
||||
<Fab
|
||||
color="primary"
|
||||
style={style.floatingButton}
|
||||
onClick={this.floatingButtonClicked}
|
||||
>
|
||||
<ContentAdd />
|
||||
</Fab>
|
||||
</React.Fragment>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default withTheme(historyPersistor("PimMain")(PimMain));
|
Loading…
Reference in New Issue