diff --git a/studio/src/app/services/editor/offline/offline.service.ts b/studio/src/app/services/editor/offline/offline.service.ts index 2622f72a4..fd98e9832 100644 --- a/studio/src/app/services/editor/offline/offline.service.ts +++ b/studio/src/app/services/editor/offline/offline.service.ts @@ -11,7 +11,6 @@ import {Slide, SlideAttributes} from '../../../models/data/slide'; import {SlotType} from '../../../types/editor/slot-type'; -import {OfflineUtils} from '../../../utils/editor/offline.utils'; import {FirestoreUtils} from '../../../utils/editor/firestore.utils'; import {ServiceWorkerUtils} from '../../../utils/core/service-worker.utils'; @@ -633,7 +632,7 @@ export class OfflineService { return; } - slide.data.attributes = (await OfflineUtils.prepareAttributes(slide.data.attributes)) as SlideAttributes; + slide.data.attributes = (await FirestoreUtils.prepareAttributes(slide.data.attributes)) as SlideAttributes; if (slide.data.content === null) { // @ts-ignore @@ -669,7 +668,7 @@ export class OfflineService { return; } - deck.data.attributes = (await OfflineUtils.prepareAttributes(deck.data.attributes)) as DeckAttributes; + deck.data.attributes = (await FirestoreUtils.prepareAttributes(deck.data.attributes)) as DeckAttributes; if (deck.data.background === null) { // @ts-ignore diff --git a/studio/src/app/utils/editor/firestore.utils.ts b/studio/src/app/utils/editor/firestore.utils.ts index 8edc0f8e0..29ee74e17 100644 --- a/studio/src/app/utils/editor/firestore.utils.ts +++ b/studio/src/app/utils/editor/firestore.utils.ts @@ -1,6 +1,9 @@ import firebase from 'firebase/app'; import 'firebase/firestore'; +import {SlideAttributes} from '../../models/data/slide'; +import {DeckAttributes} from '../../models/data/deck'; + export class FirestoreUtils { static filterDelete(obj: T, replaceWithNull: boolean = false): T { if (typeof obj !== 'object' || Array.isArray(obj)) { @@ -35,4 +38,30 @@ export class FirestoreUtils { return JSON.stringify(attr) === JSON.stringify(firebase.firestore.FieldValue.delete()); } + + static async prepareAttributes(attributes: SlideAttributes | DeckAttributes): Promise { + if (!attributes) { + // @ts-ignore + return firebase.firestore.FieldValue.delete(); + } + + const keys: string[] = Object.keys(attributes); + + if (!keys || keys.length <= 0) { + // @ts-ignore + return firebase.firestore.FieldValue.delete(); + } + + keys.forEach((key: string) => { + const attr = attributes[key]; + + // Replace null values with Firestore "to delete fields" + if (attr === null) { + // @ts-ignore + attributes[key] = firebase.firestore.FieldValue.delete(); + } + }); + + return attributes; + } } diff --git a/studio/src/app/utils/editor/offline.utils.ts b/studio/src/app/utils/editor/offline.utils.ts index d3ff264f0..aad08e6a5 100644 --- a/studio/src/app/utils/editor/offline.utils.ts +++ b/studio/src/app/utils/editor/offline.utils.ts @@ -1,5 +1,3 @@ -import firebase from 'firebase/app'; - import {SlideAttributes} from '../../models/data/slide'; import {DeckAttributes} from '../../models/data/deck'; @@ -19,34 +17,4 @@ export class OfflineUtils { return FirestoreUtils.filterDelete(attributes, true); } - - static prepareAttributes(attributes: SlideAttributes | DeckAttributes): Promise { - return new Promise((resolve) => { - if (!attributes) { - // @ts-ignore - resolve(firebase.firestore.FieldValue.delete()); - return; - } - - const keys: string[] = Object.keys(attributes); - - if (!keys || keys.length <= 0) { - // @ts-ignore - resolve(firebase.firestore.FieldValue.delete()); - return; - } - - keys.forEach((key: string) => { - const attr = attributes[key]; - - // Replace null values with Firestore "to delete fields" - if (attr === null) { - // @ts-ignore - attributes[key] = firebase.firestore.FieldValue.delete(); - } - }); - - resolve(attributes); - }); - } }