diff --git a/src/Calendars/Main.tsx b/src/Calendars/Main.tsx
index acdebcb..a49f982 100644
--- a/src/Calendars/Main.tsx
+++ b/src/Calendars/Main.tsx
@@ -21,7 +21,7 @@ import LoadingIndicator from "../widgets/LoadingIndicator";
import EventEdit from "./EventEdit";
import PageNotFound, { PageNotFoundRoute } from "../PageNotFound";
-import { CachedCollection, getItemNavigationUid, getDecryptCollectionsFunction, getDecryptItemsFunction, PimFab, itemDelete, itemSave } from "../Pim/helpers";
+import { CachedCollection, getItemNavigationUid, getDecryptCollectionsFunction, getDecryptItemsFunction, PimFab, itemDelete, itemSave, defaultColor } from "../Pim/helpers";
import { historyPersistor } from "../persist-state-history";
const PersistCalendar = historyPersistor("Calendar")(Calendar);
@@ -41,16 +41,26 @@ export default function CalendarsMain() {
const items = useItems(etebase, colType);
React.useEffect(() => {
- if (items) {
- decryptItems(items)
- .then((entries) => setEntries(entries));
- // FIXME: handle failure to decrypt items
+ if (!collections || !items) {
+ return;
}
- if (collections) {
- decryptCollections(collections)
- .then((entries) => setCachedCollections(entries));
+ (async () => {
+ const colEntries = await decryptCollections(collections);
// FIXME: handle failure to decrypt collections
- }
+
+ const entries = await decryptItems(items);
+ // FIXME: handle failure to decrypt items
+
+ for (const collection of colEntries) {
+ const items = entries.get(collection.collection.uid)!;
+ for (const item of items.values()) {
+ item.color = collection.metadata.color || defaultColor;
+ }
+ }
+
+ setCachedCollections(colEntries);
+ setEntries(entries);
+ })();
}, [items, collections]);
if (!entries || !cachedCollections) {
diff --git a/src/Collections/CollectionImport.tsx b/src/Collections/CollectionImport.tsx
index 0470450..7febee5 100644
--- a/src/Collections/CollectionImport.tsx
+++ b/src/Collections/CollectionImport.tsx
@@ -12,7 +12,7 @@ import { List, ListItem } from "../widgets/List";
import AppBarOverride from "../widgets/AppBarOverride";
import Container from "../widgets/Container";
-import { CachedCollection } from "../Pim/helpers";
+import { CachedCollection, defaultColor } from "../Pim/helpers";
import ColorBox from "../widgets/ColorBox";
import ImportDialog from "./ImportDialog";
@@ -36,8 +36,9 @@ export default function CollectionImport(props: PropsType) {
for (const col of props.collections) {
if (collectionMap[col.metadata.type]) {
- const colorBox = (col.metadata.color) ? (
-
+ const supportsColor = (["etebase.vevent", "etebase.vtodo"].includes(col.metadata.type));
+ const colorBox = (supportsColor) ? (
+
) : undefined;
collectionMap[col.metadata.type].push((
diff --git a/src/Collections/CollectionList.tsx b/src/Collections/CollectionList.tsx
index a484794..775fa60 100644
--- a/src/Collections/CollectionList.tsx
+++ b/src/Collections/CollectionList.tsx
@@ -17,7 +17,7 @@ import AppBarOverride from "../widgets/AppBarOverride";
import Container from "../widgets/Container";
import { routeResolver } from "../App";
-import { CachedCollection } from "../Pim/helpers";
+import { CachedCollection, defaultColor } from "../Pim/helpers";
import ColorBox from "../widgets/ColorBox";
interface PropsType {
@@ -39,8 +39,9 @@ export default function CollectionList(props: PropsType) {
for (const col of props.collections) {
if (collectionMap[col.metadata.type]) {
- const colorBox = (col.metadata.color) ? (
-
+ const supportsColor = (["etebase.vevent", "etebase.vtodo"].includes(col.metadata.type));
+ const colorBox = (supportsColor) ? (
+
) : undefined;
collectionMap[col.metadata.type].push((