Pim: move all of the item save/delete functions to one place.

master
Tom Hacohen 4 years ago
parent 85ef564b63
commit 460c2e2b4a

@ -13,7 +13,7 @@ import IconChangeHistory from "@material-ui/icons/ChangeHistory";
import { EventType, PimType } from "../pim-types"; import { EventType, PimType } from "../pim-types";
import { useCredentials } from "../credentials"; import { useCredentials } from "../credentials";
import { useItems, useCollections, getCollectionManager } from "../etebase-helpers"; import { useItems, useCollections } from "../etebase-helpers";
import { routeResolver } from "../App"; import { routeResolver } from "../App";
import Calendar from "./Calendar"; import Calendar from "./Calendar";
import Event from "./Event"; import Event from "./Event";
@ -21,7 +21,7 @@ import LoadingIndicator from "../widgets/LoadingIndicator";
import EventEdit from "./EventEdit"; import EventEdit from "./EventEdit";
import PageNotFound from "../PageNotFound"; import PageNotFound from "../PageNotFound";
import { CachedCollection, getItemNavigationUid, getDecryptCollectionsFunction, getDecryptItemsFunction, PimFab } from "../Pim/helpers"; import { CachedCollection, getItemNavigationUid, getDecryptCollectionsFunction, getDecryptItemsFunction, PimFab, itemDelete, itemSave } from "../Pim/helpers";
import { historyPersistor } from "../persist-state-history"; import { historyPersistor } from "../persist-state-history";
const PersistCalendar = historyPersistor("Calendar")(Calendar); const PersistCalendar = historyPersistor("Calendar")(Calendar);
@ -60,47 +60,13 @@ export default function CalendarsMain() {
} }
async function onItemSave(item: PimType, collectionUid: string, originalItem?: PimType): Promise<void> { async function onItemSave(item: PimType, collectionUid: string, originalItem?: PimType): Promise<void> {
const itemUid = originalItem?.itemUid;
const colMgr = getCollectionManager(etebase);
const collection = collections!.find((x) => x.uid === collectionUid)!; const collection = collections!.find((x) => x.uid === collectionUid)!;
const itemMgr = colMgr.getItemManager(collection); await itemSave(etebase, collection, items!, item, collectionUid, originalItem);
const mtime = (new Date()).getTime();
const content = item.toIcal();
let eteItem;
if (itemUid) {
// Existing item
eteItem = items!.get(collectionUid)?.get(itemUid)!;
await eteItem.setContent(content);
const meta = await eteItem.getMeta();
meta.mtime = mtime;
await eteItem.setMeta(meta);
} else {
// New
const meta: Etebase.CollectionItemMetadata = {
mtime,
name: item.uid,
};
eteItem = await itemMgr.create(meta, content);
}
await itemMgr.batch([eteItem]);
} }
async function onItemDelete(item: PimType, collectionUid: string) { async function onItemDelete(item: PimType, collectionUid: string) {
const itemUid = item.itemUid!;
const colMgr = getCollectionManager(etebase);
const collection = collections!.find((x) => x.uid === collectionUid)!; const collection = collections!.find((x) => x.uid === collectionUid)!;
const itemMgr = colMgr.getItemManager(collection); await itemDelete(etebase, collection, items!, item, collectionUid);
const eteItem = items!.get(collectionUid)?.get(itemUid)!;
const mtime = (new Date()).getTime();
const meta = await eteItem.getMeta();
meta.mtime = mtime;
await eteItem.setMeta(meta);
await eteItem.delete();
await itemMgr.batch([eteItem]);
history.push(routeResolver.getRoute("pim.events")); history.push(routeResolver.getRoute("pim.events"));
} }

@ -12,7 +12,7 @@ import IconChangeHistory from "@material-ui/icons/ChangeHistory";
import { ContactType, PimType } from "../pim-types"; import { ContactType, PimType } from "../pim-types";
import { useCredentials } from "../credentials"; import { useCredentials } from "../credentials";
import { useItems, useCollections, getCollectionManager } from "../etebase-helpers"; import { useItems, useCollections } from "../etebase-helpers";
import { routeResolver } from "../App"; import { routeResolver } from "../App";
import SearchableAddressBook from "./SearchableAddressBook"; import SearchableAddressBook from "./SearchableAddressBook";
import Contact from "./Contact"; import Contact from "./Contact";
@ -20,7 +20,7 @@ import LoadingIndicator from "../widgets/LoadingIndicator";
import ContactEdit from "./ContactEdit"; import ContactEdit from "./ContactEdit";
import PageNotFound from "../PageNotFound"; import PageNotFound from "../PageNotFound";
import { CachedCollection, getItemNavigationUid, getDecryptCollectionsFunction, getDecryptItemsFunction, PimFab } from "../Pim/helpers"; import { CachedCollection, getItemNavigationUid, getDecryptCollectionsFunction, getDecryptItemsFunction, PimFab, itemSave, itemDelete } from "../Pim/helpers";
const colType = "etebase.vcard"; const colType = "etebase.vcard";
@ -56,47 +56,13 @@ export default function ContactsMain() {
} }
async function onItemSave(item: PimType, collectionUid: string, originalItem?: PimType): Promise<void> { async function onItemSave(item: PimType, collectionUid: string, originalItem?: PimType): Promise<void> {
const itemUid = originalItem?.itemUid;
const colMgr = getCollectionManager(etebase);
const collection = collections!.find((x) => x.uid === collectionUid)!; const collection = collections!.find((x) => x.uid === collectionUid)!;
const itemMgr = colMgr.getItemManager(collection); await itemSave(etebase, collection, items!, item, collectionUid, originalItem);
const mtime = (new Date()).getTime();
const content = item.toIcal();
let eteItem;
if (itemUid) {
// Existing item
eteItem = items!.get(collectionUid)?.get(itemUid)!;
await eteItem.setContent(content);
const meta = await eteItem.getMeta();
meta.mtime = mtime;
await eteItem.setMeta(meta);
} else {
// New
const meta: Etebase.CollectionItemMetadata = {
mtime,
name: item.uid,
};
eteItem = await itemMgr.create(meta, content);
}
await itemMgr.batch([eteItem]);
} }
async function onItemDelete(item: PimType, collectionUid: string) { async function onItemDelete(item: PimType, collectionUid: string) {
const itemUid = item.itemUid!;
const colMgr = getCollectionManager(etebase);
const collection = collections!.find((x) => x.uid === collectionUid)!; const collection = collections!.find((x) => x.uid === collectionUid)!;
const itemMgr = colMgr.getItemManager(collection); await itemDelete(etebase, collection, items!, item, collectionUid);
const eteItem = items!.get(collectionUid)?.get(itemUid)!;
const mtime = (new Date()).getTime();
const meta = await eteItem.getMeta();
meta.mtime = mtime;
await eteItem.setMeta(meta);
await eteItem.delete();
await itemMgr.batch([eteItem]);
history.push(routeResolver.getRoute("pim.contacts")); history.push(routeResolver.getRoute("pim.contacts"));
} }

@ -10,6 +10,7 @@ import memoize from "memoizee";
import * as Etebase from "etebase"; import * as Etebase from "etebase";
import { PimType } from "../pim-types"; import { PimType } from "../pim-types";
import { getCollectionManager } from "../etebase-helpers";
export const defaultColor = "#8BC34A"; export const defaultColor = "#8BC34A";
@ -65,6 +66,48 @@ export function getDecryptItemsFunction<T extends PimType>(_colType: string, par
); );
} }
export async function itemSave(etebase: Etebase.Account, collection: Etebase.Collection, items: Map<string, Map<string, Etebase.CollectionItem>>, item: PimType, collectionUid: string, originalItem?: PimType): Promise<void> {
const itemUid = originalItem?.itemUid;
const colMgr = getCollectionManager(etebase);
const itemMgr = colMgr.getItemManager(collection);
const mtime = (new Date()).getTime();
const content = item.toIcal();
let eteItem;
if (itemUid) {
// Existing item
eteItem = items!.get(collectionUid)?.get(itemUid)!;
await eteItem.setContent(content);
const meta = await eteItem.getMeta();
meta.mtime = mtime;
await eteItem.setMeta(meta);
} else {
// New
const meta: Etebase.CollectionItemMetadata = {
mtime,
name: item.uid,
};
eteItem = await itemMgr.create(meta, content);
}
await itemMgr.batch([eteItem]);
}
export async function itemDelete(etebase: Etebase.Account, collection: Etebase.Collection, items: Map<string, Map<string, Etebase.CollectionItem>>, item: PimType, collectionUid: string) {
const itemUid = item.itemUid!;
const colMgr = getCollectionManager(etebase);
const itemMgr = colMgr.getItemManager(collection);
const eteItem = items!.get(collectionUid)?.get(itemUid)!;
const mtime = (new Date()).getTime();
const meta = await eteItem.getMeta();
meta.mtime = mtime;
await eteItem.setMeta(meta);
await eteItem.delete();
await itemMgr.batch([eteItem]);
}
interface PimFabPropsType { interface PimFabPropsType {
onClick: () => void; onClick: () => void;
} }

@ -12,7 +12,7 @@ import IconChangeHistory from "@material-ui/icons/ChangeHistory";
import { TaskType, PimType } from "../pim-types"; import { TaskType, PimType } from "../pim-types";
import { useCredentials } from "../credentials"; import { useCredentials } from "../credentials";
import { useItems, useCollections, getCollectionManager } from "../etebase-helpers"; import { useItems, useCollections } from "../etebase-helpers";
import { routeResolver } from "../App"; import { routeResolver } from "../App";
import TaskList from "./TaskList"; import TaskList from "./TaskList";
import Task from "./Task"; import Task from "./Task";
@ -20,7 +20,7 @@ import LoadingIndicator from "../widgets/LoadingIndicator";
import TaskEdit from "./TaskEdit"; import TaskEdit from "./TaskEdit";
import PageNotFound from "../PageNotFound"; import PageNotFound from "../PageNotFound";
import { CachedCollection, getItemNavigationUid, getDecryptCollectionsFunction, getDecryptItemsFunction, PimFab } from "../Pim/helpers"; import { CachedCollection, getItemNavigationUid, getDecryptCollectionsFunction, getDecryptItemsFunction, PimFab, itemSave, itemDelete } from "../Pim/helpers";
const colType = "etebase.vtodo"; const colType = "etebase.vtodo";
@ -56,47 +56,13 @@ export default function TasksMain() {
} }
async function onItemSave(item: PimType, collectionUid: string, originalItem?: PimType): Promise<void> { async function onItemSave(item: PimType, collectionUid: string, originalItem?: PimType): Promise<void> {
const itemUid = originalItem?.itemUid;
const colMgr = getCollectionManager(etebase);
const collection = collections!.find((x) => x.uid === collectionUid)!; const collection = collections!.find((x) => x.uid === collectionUid)!;
const itemMgr = colMgr.getItemManager(collection); await itemSave(etebase, collection, items!, item, collectionUid, originalItem);
const mtime = (new Date()).getTime();
const content = item.toIcal();
let eteItem;
if (itemUid) {
// Existing item
eteItem = items!.get(collectionUid)?.get(itemUid)!;
await eteItem.setContent(content);
const meta = await eteItem.getMeta();
meta.mtime = mtime;
await eteItem.setMeta(meta);
} else {
// New
const meta: Etebase.CollectionItemMetadata = {
mtime,
name: item.uid,
};
eteItem = await itemMgr.create(meta, content);
}
await itemMgr.batch([eteItem]);
} }
async function onItemDelete(item: PimType, collectionUid: string) { async function onItemDelete(item: PimType, collectionUid: string) {
const itemUid = item.itemUid!;
const colMgr = getCollectionManager(etebase);
const collection = collections!.find((x) => x.uid === collectionUid)!; const collection = collections!.find((x) => x.uid === collectionUid)!;
const itemMgr = colMgr.getItemManager(collection); await itemDelete(etebase, collection, items!, item, collectionUid);
const eteItem = items!.get(collectionUid)?.get(itemUid)!;
const mtime = (new Date()).getTime();
const meta = await eteItem.getMeta();
meta.mtime = mtime;
await eteItem.setMeta(meta);
await eteItem.delete();
await itemMgr.batch([eteItem]);
history.push(routeResolver.getRoute("pim.tasks")); history.push(routeResolver.getRoute("pim.tasks"));
} }

Loading…
Cancel
Save