@@ -16,16 +16,10 @@ export function useCreateStaff() {
1616
1717 return useMutation ( {
1818 mutationFn : ( data : StaffSchema ) => createStaff ( data ) ,
19-
20- // 🛡️ Defesa de Arquiteto: Optimistic Update para UX instantânea
2119 onMutate : async ( newStaff ) => {
22- // Cancela queries em andamento para não sobrescrever o cache otimista
2320 await queryClient . cancelQueries ( { queryKey : [ 'staffs' ] } )
24-
25- // Snapshot do cache atual para rollback em caso de erro
2621 const previousStaffs = queryClient . getQueryData < Staff [ ] > ( [ 'staffs' ] )
2722
28- // Atualiza o cache instantaneamente
2923 queryClient . setQueryData ( [ 'staffs' ] , ( old : Staff [ ] | undefined ) => {
3024 const optimisticEntry : Staff = {
3125 ...newStaff ,
@@ -39,18 +33,27 @@ export function useCreateStaff() {
3933
4034 return { previousStaffs }
4135 } ,
42-
43- // Em caso de erro real (ex: timeout longo), restaura o cache anterior
36+ onSuccess : ( result , newStaff ) => {
37+ if ( result . synced ) {
38+ // Online: Firebase é a fonte da verdade, busca os dados reais
39+ queryClient . invalidateQueries ( { queryKey : [ 'staffs' ] } )
40+ } else {
41+ // Offline: substitui a entrada temporária pelo registro real do localStorage
42+ // sem disparar um refetch (Firebase está indisponível)
43+ const pendingEntry = getPendingStaffs ( ) . find ( s => s . email === newStaff . email )
44+ if ( pendingEntry ) {
45+ queryClient . setQueryData ( [ 'staffs' ] , ( old : Staff [ ] | undefined ) => {
46+ const withoutTemp = ( old || [ ] ) . filter ( s => ! s . id . startsWith ( 'temp-' ) )
47+ return [ pendingEntry , ...withoutTemp ]
48+ } )
49+ }
50+ }
51+ } ,
4452 onError : ( _err , _newStaff , context ) => {
4553 if ( context ?. previousStaffs ) {
4654 queryClient . setQueryData ( [ 'staffs' ] , context . previousStaffs )
4755 }
4856 } ,
49-
50- // Sempre invalida após finalizar para sincronizar com a "verdade" do servidor
51- onSettled : ( ) => {
52- queryClient . invalidateQueries ( { queryKey : [ 'staffs' ] } )
53- } ,
5457 } )
5558}
5659
0 commit comments