diff --git a/studio/CHANGELOG.md b/studio/CHANGELOG.md index 28630020c..23e475df0 100644 --- a/studio/CHANGELOG.md +++ b/studio/CHANGELOG.md @@ -1,3 +1,10 @@ +# 3.2.0 (2020-11-28) + +### Fix + +- offline header and footer if not defined +- offline firestore delete fields comparison + # 3.1.0 (2020-11-22) ### Features diff --git a/studio/src/app/services/data/deck/deck.offline.service.tsx b/studio/src/app/services/data/deck/deck.offline.service.tsx index 4fb73158e..fa3c9e30d 100644 --- a/studio/src/app/services/data/deck/deck.offline.service.tsx +++ b/studio/src/app/services/data/deck/deck.offline.service.tsx @@ -46,6 +46,14 @@ export class DeckOfflineService { deck.data.background = null; } + if (deck.data.header && FirestoreUtils.shouldAttributeBeCleaned(deck.data.header)) { + deck.data.header = null; + } + + if (deck.data.footer && FirestoreUtils.shouldAttributeBeCleaned(deck.data.footer)) { + deck.data.footer = null; + } + deck.data.attributes = (await OfflineUtils.cleanAttributes(deck.data.attributes)) as DeckAttributes; await set(`/decks/${deck.id}`, deck); diff --git a/studio/src/app/services/editor/offline/offline.service.tsx b/studio/src/app/services/editor/offline/offline.service.tsx index 650f9a1e7..f7abaacbd 100644 --- a/studio/src/app/services/editor/offline/offline.service.tsx +++ b/studio/src/app/services/editor/offline/offline.service.tsx @@ -357,6 +357,14 @@ export class OfflineService { deckStore.state.deck.data.background = null; } + if (deckStore.state.deck.data.header && FirestoreUtils.shouldAttributeBeCleaned(deckStore.state.deck.data.header)) { + deckStore.state.deck.data.header = null; + } + + if (deckStore.state.deck.data.footer && FirestoreUtils.shouldAttributeBeCleaned(deckStore.state.deck.data.footer)) { + deckStore.state.deck.data.footer = null; + } + await set(`/decks/${deckStore.state.deck.id}`, deckStore.state.deck); this.progress(0.5); @@ -691,6 +699,16 @@ export class OfflineService { deck.data.background = firebase.firestore.FieldValue.delete(); } + if (deck.data.header === null) { + // @ts-ignore + deck.data.header = firebase.firestore.FieldValue.delete(); + } + + if (deck.data.footer === null) { + // @ts-ignore + deck.data.footer = firebase.firestore.FieldValue.delete(); + } + const persistedDeck: Deck = await this.deckOnlineService.update(deck); await del(`/decks/${deck.id}`); diff --git a/studio/src/app/utils/editor/firestore.utils.tsx b/studio/src/app/utils/editor/firestore.utils.tsx index cb96fa023..8edc0f8e0 100644 --- a/studio/src/app/utils/editor/firestore.utils.tsx +++ b/studio/src/app/utils/editor/firestore.utils.tsx @@ -1,3 +1,6 @@ +import firebase from 'firebase/app'; +import 'firebase/firestore'; + export class FirestoreUtils { static filterDelete(obj: T, replaceWithNull: boolean = false): T { if (typeof obj !== 'object' || Array.isArray(obj)) { @@ -30,10 +33,6 @@ export class FirestoreUtils { return false; } - const firestoreDelete = Object.keys(attr).find((key: string) => { - return attr[key] === 'FieldValue.delete'; - }); - - return firestoreDelete !== null && firestoreDelete !== undefined; + return JSON.stringify(attr) === JSON.stringify(firebase.firestore.FieldValue.delete()); } }