Skip to content
This repository was archived by the owner on Feb 6, 2024. It is now read-only.

Commit 937d5b0

Browse files
feat: new slides API path
1 parent 42b8593 commit 937d5b0

File tree

3 files changed

+83
-56
lines changed

3 files changed

+83
-56
lines changed

studio/src/app/handlers/editor/events/deck/deck-events.handler.tsx

Lines changed: 72 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,6 @@ export class DeckEventsHandler {
149149

150150
if (slide.getAttribute('slide_id')) {
151151
// !isNew
152-
153152
this.busyService.slideEditable(slide);
154153

155154
resolve();
@@ -158,40 +157,77 @@ export class DeckEventsHandler {
158157

159158
this.busyService.deckBusy(true);
160159

161-
const slidePost: Slide = {
162-
template: this.getSlideTemplate(slide)
163-
};
160+
this.deckEditorService.watch().pipe(take(1)).subscribe(async (deck: Deck) => {
161+
if (!deck) {
162+
deck = await this.createDeck();
163+
}
164164

165-
const content: string = await this.cleanSlideContent(slide.innerHTML);
166-
if (content && content.length > 0) {
167-
slidePost.content = content
168-
}
165+
const persistedSlide: Slide = await this.postSlide(deck, slide);
166+
167+
await this.updateDeckSlideList(persistedSlide);
169168

170-
const persistedSlide: Slide = await this.slideService.post(slidePost);
169+
this.busyService.deckBusy(false);
170+
171+
resolve();
172+
});
173+
} catch (err) {
174+
this.errorService.error(err);
175+
this.busyService.deckBusy(false);
176+
resolve();
177+
}
178+
});
179+
}
180+
181+
private postSlide(deck: Deck, slide: HTMLElement): Promise<Slide> {
182+
return new Promise<Slide>(async (resolve) => {
183+
const slidePost: Slide = {
184+
template: this.getSlideTemplate(slide)
185+
};
186+
187+
const content: string = await this.cleanSlideContent(slide.innerHTML);
188+
if (content && content.length > 0) {
189+
slidePost.content = content
190+
}
191+
192+
const persistedSlide: Slide = await this.slideService.post(deck.id, slidePost);
193+
194+
if (persistedSlide && persistedSlide.id) {
195+
slide.setAttribute('slide_id', persistedSlide.id);
171196

172197
this.busyService.slideEditable(slide);
198+
}
199+
200+
resolve(persistedSlide);
201+
});
202+
}
173203

174-
if (persistedSlide && persistedSlide.id) {
175-
slide.setAttribute('slide_id', persistedSlide.id);
204+
private createDeck(): Promise<Deck> {
205+
return new Promise<Deck>(async (resolve, reject) => {
206+
try {
207+
this.userService.watch().pipe(filter((user: User) => user !== null && user !== undefined), take(1)).subscribe(async (user: User) => {
208+
const deck: Deck = {
209+
slides: [],
210+
name: `Presentation ${await Utils.getNow()}`,
211+
owner_id: user.id
212+
};
176213

177-
await this.createOrUpdateDeckSlideList(persistedSlide);
178-
}
214+
const persistedDeck: Deck = await this.deckService.post(deck);
215+
this.deckEditorService.next(persistedDeck);
179216

180-
this.busyService.deckBusy(false);
217+
await this.updateNavigation(persistedDeck);
181218

182-
resolve();
219+
resolve(persistedDeck);
220+
});
183221
} catch (err) {
184-
this.errorService.error(err);
185-
this.busyService.deckBusy(false);
186-
resolve();
222+
reject(err);
187223
}
188224
});
189225
}
190226

191-
private createOrUpdateDeckSlideList(slide: Slide): Promise<void> {
227+
private updateDeckSlideList(slide: Slide): Promise<void> {
192228
return new Promise<void>(async (resolve, reject) => {
193229
try {
194-
if (!slide) {
230+
if (!slide || !slide.id) {
195231
reject('Missing slide to create or update the deck');
196232
return;
197233
}
@@ -206,19 +242,6 @@ export class DeckEventsHandler {
206242

207243
const updatedDeck: Deck = await this.deckService.put(deck);
208244
this.deckEditorService.next(updatedDeck);
209-
} else {
210-
this.userService.watch().pipe(filter((user: User) => user !== null && user !== undefined), take(1)).subscribe(async (user: User) => {
211-
deck = {
212-
slides: [slide.id],
213-
name: `Presentation ${await Utils.getNow()}`,
214-
owner_id: user.id
215-
};
216-
217-
const persistedDeck: Deck = await this.deckService.post(deck);
218-
this.deckEditorService.next(persistedDeck);
219-
220-
await this.updateNavigation(persistedDeck);
221-
});
222245
}
223246

224247
resolve();
@@ -350,11 +373,15 @@ export class DeckEventsHandler {
350373
slideUpdate.attributes = attributes;
351374
}
352375

353-
await this.slideService.put(slideUpdate);
376+
this.deckEditorService.watch().pipe(take(1)).subscribe(async (deck: Deck) => {
377+
if (deck) {
378+
await this.slideService.put(deck.id, slideUpdate);
379+
}
354380

355-
this.busyService.deckBusy(false);
381+
this.busyService.deckBusy(false);
356382

357-
resolve();
383+
resolve();
384+
});
358385
} catch (err) {
359386
this.errorService.error(err);
360387
this.busyService.deckBusy(false);
@@ -379,15 +406,17 @@ export class DeckEventsHandler {
379406

380407
const slideId: string = slide.getAttribute('slide_id');
381408

382-
await this.slideService.delete(slideId);
383-
384409
this.deckEditorService.watch().pipe(take(1)).subscribe(async (deck: Deck) => {
385-
// Update list of slide in the deck
386-
if (deck && deck.slides && deck.slides.indexOf(slideId) > -1) {
387-
deck.slides.splice(deck.slides.indexOf(slideId), 1);
410+
if (deck) {
411+
await this.slideService.delete(deck.id, slideId);
388412

389-
const updatedDeck: Deck = await this.deckService.put(deck);
390-
this.deckEditorService.next(updatedDeck);
413+
// Update list of slide in the deck
414+
if (deck.slides && deck.slides.indexOf(slideId) > -1) {
415+
deck.slides.splice(deck.slides.indexOf(slideId), 1);
416+
417+
const updatedDeck: Deck = await this.deckService.put(deck);
418+
this.deckEditorService.next(updatedDeck);
419+
}
391420
}
392421

393422
await this.deleteSlideElement();

studio/src/app/helpers/editor/editor.helper.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ export class EditorHelper {
5858

5959
const promises: Promise<Slide>[] = [];
6060
deck.slides.forEach((slideId: string) => {
61-
promises.push(this.fetchSlide(slideId));
61+
promises.push(this.fetchSlide(deck.id, slideId));
6262
});
6363

6464
let slides: Slide[] = [];
@@ -82,10 +82,10 @@ export class EditorHelper {
8282
});
8383
}
8484

85-
private fetchSlide(slideId: string): Promise<any> {
85+
private fetchSlide(deckId: string, slideId: string): Promise<any> {
8686
return new Promise<any>(async (resolve) => {
8787
try {
88-
const slide: Slide = await this.slideService.get(slideId);
88+
const slide: Slide = await this.slideService.get(deckId, slideId);
8989
const element: any = await ParseSlidesUtils.parseSlide(slide);
9090

9191
resolve(element);

studio/src/app/services/api/slide/slide.service.tsx

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,22 +23,20 @@ export class SlideService {
2323
}
2424

2525

26-
// TODO: get /slides/:slide_id
27-
28-
post(slide: Slide): Promise<Slide> {
29-
return this.query(slide, '/slides', 'POST');
26+
post(deckId: string, slide: Slide): Promise<Slide> {
27+
return this.query(slide, `/decks/${deckId}/slides`, 'POST');
3028
}
3129

32-
put(slide: Slide): Promise<Slide> {
33-
return this.query(slide, '/slides/' + slide.id,'PUT');
30+
put(deckId: string, slide: Slide): Promise<Slide> {
31+
return this.query(slide, `/decks/${deckId}/slides/${slide.id}`,'PUT');
3432
}
3533

36-
delete(slide_id: string): Promise<void> {
34+
delete(deckId: string, slide_id: string): Promise<void> {
3735
return new Promise<void>(async (resolve, reject) => {
3836
try {
3937
const apiUrl: string = EnvironmentConfigService.getInstance().get('apiUrl');
4038

41-
const rawResponse: Response = await fetch(apiUrl + '/slides/' + slide_id, {
39+
const rawResponse: Response = await fetch(apiUrl + `/decks/${deckId}/slides/` + slide_id, {
4240
method: 'DELETE',
4341
headers: {
4442
'Accept': 'application/json',
@@ -88,12 +86,12 @@ export class SlideService {
8886
});
8987
}
9088

91-
get(slideId: string): Promise<Slide> {
89+
get(deckId: string, slideId: string): Promise<Slide> {
9290
return new Promise<Slide>(async (resolve, reject) => {
9391
try {
9492
const apiUrl: string = EnvironmentConfigService.getInstance().get('apiUrl');
9593

96-
const rawResponse: Response = await fetch(apiUrl + `/slides/${slideId}`, {
94+
const rawResponse: Response = await fetch(apiUrl + `/decks/${deckId}/slides/${slideId}`, {
9795
method: 'GET',
9896
headers: {
9997
'Accept': 'application/json',

0 commit comments

Comments
 (0)