Skip to content
This repository was archived by the owner on Feb 6, 2024. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions studio/src/app/services/editor/offline/offline.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
29 changes: 29 additions & 0 deletions studio/src/app/utils/editor/firestore.utils.ts
Original file line number Diff line number Diff line change
@@ -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<T>(obj: T, replaceWithNull: boolean = false): T {
if (typeof obj !== 'object' || Array.isArray(obj)) {
Expand Down Expand Up @@ -35,4 +38,30 @@ export class FirestoreUtils {

return JSON.stringify(attr) === JSON.stringify(firebase.firestore.FieldValue.delete());
}

static async prepareAttributes(attributes: SlideAttributes | DeckAttributes): Promise<SlideAttributes | DeckAttributes> {
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;
}
}
32 changes: 0 additions & 32 deletions studio/src/app/utils/editor/offline.utils.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import firebase from 'firebase/app';

import {SlideAttributes} from '../../models/data/slide';
import {DeckAttributes} from '../../models/data/deck';

Expand All @@ -19,34 +17,4 @@ export class OfflineUtils {

return FirestoreUtils.filterDelete(attributes, true);
}

static prepareAttributes(attributes: SlideAttributes | DeckAttributes): Promise<SlideAttributes | DeckAttributes> {
return new Promise<SlideAttributes | DeckAttributes>((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);
});
}
}