@@ -2,6 +2,7 @@ import create from "zustand";
2
2
import Slide from "model/slide" ;
3
3
import Presentation from "model/interfaces/presentation" ;
4
4
import { updateSlideRemote } from "./updateSlideRemote" ;
5
+ import { updateRemoteForId } from "./updateRemoteTitle" ;
5
6
6
7
type MapToPartial < T > = ( value : T ) => Partial < T > ;
7
8
@@ -12,7 +13,7 @@ type State = {
12
13
"slides" | "isPublished" | "pubmeta" | "title"
13
14
> &
14
15
Partial < Pick < Presentation , "id" > > ;
15
- lastSlideUpdatePromise : Promise < void > | null ;
16
+ lastSlideUpdatePromise : Promise < any > | null ;
16
17
isSaving : boolean ;
17
18
isPresentationMode : boolean ;
18
19
} ;
@@ -28,7 +29,7 @@ type Actions = {
28
29
setPresentation : ( presentation : Presentation ) => void ;
29
30
startPresentationMode : ( ) => void ;
30
31
stopPresentationMode : ( ) => void ;
31
- updateLocalTitle : ( newTitle : string ) => void ;
32
+ updateTitle : ( newTitle : string ) => void ;
32
33
} ;
33
34
34
35
const defaultSlideValue : Slide = {
@@ -78,7 +79,7 @@ export const useStore = create<State & Actions>((set, get) => ({
78
79
updateSlideRemote ( slide , pid , idx , ( promise ) => {
79
80
set ( { lastSlideUpdatePromise : promise } ) ;
80
81
81
- promise . then ( ( ) => {
82
+ promise . finally ( ( ) => {
82
83
const { lastSlideUpdatePromise } = get ( ) ;
83
84
if ( lastSlideUpdatePromise === promise ) {
84
85
set ( { isSaving : false } ) ;
@@ -131,9 +132,31 @@ export const useStore = create<State & Actions>((set, get) => ({
131
132
stopPresentationMode : ( ) => {
132
133
set ( { isPresentationMode : false } ) ;
133
134
} ,
134
- updateLocalTitle : ( newTitle : string ) => {
135
+ updateTitle : ( newTitle : string ) => {
135
136
const { presentation } = get ( ) ;
136
- set ( { presentation : { ...presentation , title : newTitle } } ) ;
137
+
138
+ if ( ! newTitle || newTitle ?. trim ( ) === "" ) {
139
+ return ;
140
+ }
141
+
142
+ updateRemoteForId ( presentation . id ) ( newTitle , ( promise ) => {
143
+ const { lastSlideUpdatePromise } = get ( ) ;
144
+ const combinedPromise = Promise . allSettled (
145
+ [ promise , lastSlideUpdatePromise ] . filter ( Boolean )
146
+ ) ;
147
+
148
+ combinedPromise . finally ( ( ) => {
149
+ const { lastSlideUpdatePromise } = get ( ) ;
150
+ if ( lastSlideUpdatePromise === combinedPromise ) {
151
+ set ( { isSaving : false , lastSlideUpdatePromise : null } ) ;
152
+ }
153
+ } ) ;
154
+
155
+ // @TODO change name to generalize.
156
+ set ( { lastSlideUpdatePromise : combinedPromise } ) ;
157
+ } ) ;
158
+
159
+ set ( { presentation : { ...presentation , title : newTitle } , isSaving : true } ) ;
137
160
} ,
138
161
} ) ) ;
139
162
0 commit comments