[INJIMOB-632] show backup / restore in progress banner (#1264)

* [INJIMOB-632] show backup in progress banner

Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com>

* [INJIMOB-632] show restore in progress banner

Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com>

* [INJIMOB-632] change info banner's color

Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com>

---------

Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com>
This commit is contained in:
KiruthikaJeyashankar
2024-02-20 12:11:37 +05:30
committed by GitHub
parent c2525565ff
commit 688a33f3cc
18 changed files with 192 additions and 147 deletions

View File

@@ -146,7 +146,7 @@ fileignoreconfig:
- filename: machines/backupAndRestore/backup.ts
checksum: d3453abfc10400e094b841e84283efc194a4fe0443c63ec880c5ddd6741f5293
- filename: machines/backupAndRestore/backup.typegen.ts
checksum: 483e237dc29256d7718d0c6137084da79a7d297d9eb86fa9689bc1170bb9f185
checksum: 4a477f92aabf0a974382df45ef12ff5207dc73c270595cd810406983a65d9ce6
- filename: components/BackupAndRestoreAllScreenBanner.tsx
checksum: 2c98e7e83959c9dac4dd12da32f81483c3d334bd05e279637cf465475fbf54b8
checksum: f26489ce4ac607884437ad06c3117cc34d6cbcbcd3dd5719790fbe01a0853ee5
@@ -213,6 +213,6 @@ fileignoreconfig:
- filename: screens/Home/MyVcsTab.tsx
checksum: 8133e2fefddfd0207eb7207b660d317f9a6acafbab6a65762d29ea86e33787cb
- filename: components/BackupAndRestoreBannerNotification.tsx
checksum: 7bb544ecd2f691f8cef916d0463106ec67645253107dd407236ce3a81f4e9ba7
version: ""
checksum: e465a9947727687d784d0cb9d8db1e28f765b0659bf4a3aa6d75643aa7b14102
version: ""

View File

@@ -44,6 +44,16 @@ export const BackupAndRestoreBannerNotification: React.FC = () => {
return (
<>
{backUpController.showBackupInProgress && (
<BannerNotification
type="info"
message={t('backupInProgress')}
onClosePress={backUpController.DISMISS_SHOW_BACKUP_IN_PROGRESS}
key={'dataBackupInProgress'}
testId={'dataBackupInProgress'}
/>
)}
{backUpController.isBackingUpSuccess && (
<BannerNotification
type="success"
@@ -56,6 +66,16 @@ export const BackupAndRestoreBannerNotification: React.FC = () => {
{backUpController.isBackingUpFailure && backupFailure()}
{restoreController.showRestoreInProgress && (
<BannerNotification
type="info"
message={t('restoreInProgress')}
onClosePress={restoreController.DISMISS_SHOW_RESTORE_IN_PROGRESS}
key={'restoreInProgress'}
testId={'restoreInProgress'}
/>
)}
{restoreController.isBackUpRestoreSuccess && (
<BannerNotification
type="success"

View File

@@ -36,5 +36,5 @@ export interface BannerNotificationProps {
message: string;
onClosePress: () => void;
testId: string;
type: 'error' | 'success';
type: 'error' | 'success' | 'info';
}

View File

@@ -25,6 +25,7 @@ const Colors = {
DimGray: '#737373',
platinumGrey: '#EDEDED',
Orange: '#F2811D',
OrangeBrown: '#D9822B',
Blue: '#0000FF',
LightGrey: '#F7F7F7',
ShadeOfGrey: '#6F6F6F',
@@ -694,6 +695,9 @@ export const DefaultTheme = {
fontFamily: 'Inter_600SemiBold',
},
dismiss: {paddingLeft: 9},
info: {
backgroundColor: Colors.OrangeBrown,
},
success: {
backgroundColor: Colors.Green,
},

View File

@@ -25,6 +25,7 @@ const Colors = {
DimGray: '#737373',
platinumGrey: '#EDEDED',
Orange: '#F2811D',
OrangeBrown: '#D9822B',
Blue: '#0000FF',
LightOrange: '#FDF1E6',
LightGrey: '#FAF9FF',
@@ -698,6 +699,9 @@ export const PurpleTheme = {
fontFamily: 'Inter_600SemiBold',
},
dismiss: {paddingLeft: 9},
info: {
backgroundColor: Colors.OrangeBrown,
},
success: {
backgroundColor: Colors.Green,
},

View File

@@ -751,6 +751,7 @@
}
},
"BackupAndRestoreBanner": {
"backupInProgress": "النسخ الاحتياطي للبيانات قيد التقدم. من فضلك لا تغلق التطبيق.",
"backupSuccessful": "تمت عملية النسخ الاحتياطي الخاصة بك بنجاح!",
"backupFailure": {
"networkError": "بسبب عدم استقرار الاتصال بالإنترنت، لم نتمكن من إجراء النسخ الاحتياطي للبيانات. الرجاء معاودة المحاولة في وقت لاحق.",
@@ -759,6 +760,7 @@
"noDataForBackup": "عذرًا، ولكن لا توجد بيانات متاحة لإجراء نسخ احتياطي في الوقت الحالي.",
"storageLimitReached": "يتعذر علينا إكمال عملية النسخ الاحتياطي نظرًا لعدم توفر مساحة تخزين كافية على جهازك. يرجى تحرير مساحة عن طريق حذف الملفات أو التطبيقات غير الضرورية، ثم حاول مرة أخرى."
},
"restoreInProgress": "استعادة البيانات قيد التقدم. من فضلك لا تغلق التطبيق.",
"restoreSuccessful": "تمت استعادة النسخة الاحتياطية الخاصة بك بنجاح",
"restoreFailure": {
"networkError": "بسبب عدم استقرار الاتصال بالإنترنت، لم نتمكن من إجراء استعادة البيانات. الرجاء معاودة المحاولة في وقت لاحق.",

View File

@@ -759,6 +759,7 @@
}
},
"BackupAndRestoreBanner": {
"backupInProgress": "Data backup is in progress. Please do not close the application.",
"backupSuccessful": "Your backup was successful!",
"backupFailure": {
"networkError": "Due to unstable internet connection, we were unable to perform data backup. Please try again later.",
@@ -767,6 +768,7 @@
"noDataForBackup": "We're sorry, but there is no data available to back up at the moment.",
"storageLimitReached": "We're unable to complete the backup process due to insufficient storage space on your device. Please free up space by deleting unnecessary files or apps, and try again."
},
"restoreInProgress": "Data restore is in progress. Please do not close the application.",
"restoreSuccessful": "Your backup has been restored successfully",
"restoreFailure": {
"networkError": "Due to unstable internet connection, we were unable to perform data restore. Please try again later.",
@@ -847,4 +849,4 @@
"description": "Please use fingerprint to unlock the app"
}
}
}
}

View File

@@ -754,6 +754,7 @@
}
},
"BackupAndRestoreBanner": {
"backupInProgress": "Kasalukuyang isinasagawa ang backup ng data. Mangyaring huwag isara ang application.",
"backupSuccessful": "Ang iyong backup ay matagumpay!",
"backupFailure": {
"networkError": "Dahil sa hindi matatag na koneksyon sa internet, hindi kami nakapagsagawa ng pag-backup ng data. Subukang muli mamaya.",
@@ -762,6 +763,7 @@
"noDataForBackup": "Ikinalulungkot namin, ngunit walang data na magagamit upang i-back up sa ngayon.",
"storageLimitReached": "Hindi namin makumpleto ang proseso ng pag-backup dahil sa hindi sapat na espasyo sa storage sa iyong device. Mangyaring magbakante ng espasyo sa pamamagitan ng pagtanggal ng mga hindi kinakailangang file o app, at subukang muli."
},
"restoreInProgress": "Kasalukuyang isinasagawa ang pagpapanumbalik ng data. Mangyaring huwag isara ang application.",
"restoreSuccessful": "Matagumpay na naibalik ang iyong backup",
"restoreFailure": {
"networkError": "Dahil sa hindi matatag na koneksyon sa internet, hindi namin nagawang magsagawa ng data restore. Subukang muli mamaya.",

View File

@@ -751,6 +751,7 @@
}
},
"BackupAndRestoreBanner": {
"backupInProgress": "डेटा बैकअप चल रहा है. कृपया एप्लिकेशन को बंद न करें.",
"backupSuccessful": "आपका बैकअप सफल रहा!",
"backupFailure": {
"networkError": "अस्थिर इंटरनेट कनेक्शन के कारण, हम डेटा बैकअप करने में असमर्थ थे। कृपया बाद में पुन: प्रयास करें।",
@@ -759,6 +760,7 @@
"noDataForBackup": "हमें खेद है, लेकिन इस समय बैकअप के लिए कोई डेटा उपलब्ध नहीं है।",
"storageLimitReached": "आपके डिवाइस पर अपर्याप्त संग्रहण स्थान के कारण हम बैकअप प्रक्रिया पूरी करने में असमर्थ हैं। कृपया अनावश्यक फ़ाइलें या ऐप्स हटाकर स्थान खाली करें और पुनः प्रयास करें।"
},
"restoreInProgress": "डेटा पुनर्स्थापना प्रगति पर है. कृपया एप्लिकेशन को बंद न करें.",
"restoreSuccessful": "आपका बैकअप सफलतापूर्वक बहाल कर दिया गया है",
"restoreFailure": {
"networkError": "अस्थिर इंटरनेट कनेक्शन के कारण, हम डेटा पुनर्स्थापना करने में असमर्थ थे। कृपया बाद में पुन: प्रयास करें।",

View File

@@ -743,6 +743,7 @@
}
},
"BackupAndRestoreBanner": {
"backupInProgress": "ಡೇಟಾ ಬ್ಯಾಕಪ್ ಪ್ರಗತಿಯಲ್ಲಿದೆ. ದಯವಿಟ್ಟು ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಮುಚ್ಚಬೇಡಿ.",
"backupSuccessful": "ನಿಮ್ಮ ಬ್ಯಾಕಪ್ ಯಶಸ್ವಿಯಾಗಿದೆ!",
"backupFailure": {
"networkError": "ಅಸ್ಥಿರ ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕದಿಂದಾಗಿ, ನಮಗೆ ಡೇಟಾ ಬ್ಯಾಕಪ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ದಯವಿಟ್ಟು ನಂತರ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.",
@@ -751,6 +752,7 @@
"noDataForBackup": "ನಮ್ಮನ್ನು ಕ್ಷಮಿಸಿ, ಆದರೆ ಸದ್ಯಕ್ಕೆ ಬ್ಯಾಕಪ್ ಮಾಡಲು ಯಾವುದೇ ಡೇಟಾ ಲಭ್ಯವಿಲ್ಲ.",
"storageLimitReached": "ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಸಾಕಷ್ಟು ಸಂಗ್ರಹಣೆ ಸ್ಥಳಾವಕಾಶವಿಲ್ಲದ ಕಾರಣ ಬ್ಯಾಕಪ್ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ನಮಗೆ ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ. ದಯವಿಟ್ಟು ಅನಗತ್ಯ ಫೈಲ್‌ಗಳು ಅಥವಾ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಅಳಿಸುವ ಮೂಲಕ ಜಾಗವನ್ನು ಮುಕ್ತಗೊಳಿಸಿ ಮತ್ತು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."
},
"restoreInProgress": "ಡೇಟಾ ಮರುಸ್ಥಾಪನೆ ಪ್ರಗತಿಯಲ್ಲಿದೆ. ದಯವಿಟ್ಟು ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಮುಚ್ಚಬೇಡಿ.",
"restoreSuccessful": "ನಿಮ್ಮ ಬ್ಯಾಕಪ್ ಅನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಮರುಸ್ಥಾಪಿಸಲಾಗಿದೆ",
"restoreFailure": {
"networkError": "ಅಸ್ಥಿರ ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕದ ಕಾರಣ, ನಮಗೆ ಡೇಟಾ ಮರುಸ್ಥಾಪನೆ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ದಯವಿಟ್ಟು ನಂತರ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.",

View File

@@ -721,6 +721,7 @@
}
},
"BackupAndRestoreBanner": {
"backupInProgress": "La copia de seguridad de datos está en progreso. Por favor no cierre la aplicación.",
"backupSuccessful": "¡Su copia de seguridad fue exitosa!",
"backupFailure": {
"networkError": "Debido a una conexión a Internet inestable, no pudimos realizar una copia de seguridad de los datos. Por favor, inténtelo de nuevo más tarde.",
@@ -729,6 +730,7 @@
"noDataForBackup": "Lo sentimos, pero no hay datos disponibles para realizar una copia de seguridad en este momento.",
"storageLimitReached": "No podemos completar el proceso de copia de seguridad debido a que no hay suficiente espacio de almacenamiento en su dispositivo. Libere espacio eliminando archivos o aplicaciones innecesarios y vuelva a intentarlo."
},
"restoreInProgress": "La restauración de datos está en curso. Por favor no cierre la aplicación.",
"restoreSuccessful": "Su copia de seguridad ha sido restaurada exitosamente",
"restoreFailure": {
"networkError": "Debido a una conexión a Internet inestable, no pudimos realizar la restauración de datos. Por favor, inténtelo de nuevo más tarde.",

View File

@@ -749,6 +749,7 @@
}
},
"BackupAndRestoreBanner": {
"backupInProgress": "தரவு காப்புப்பிரதி செயலில் உள்ளது. தயவுசெய்து விண்ணப்பத்தை மூட வேண்டாம்.",
"backupSuccessful": "உங்கள் காப்புப்பிரதி வெற்றிகரமாக இருந்தது!",
"backupFailure": {
"networkError": "நிலையற்ற இணைய இணைப்பு காரணமாக, தரவு காப்புப் பிரதி எடுக்க முடியவில்லை. பிறகு முயற்சிக்கவும்.",
@@ -757,6 +758,7 @@
"noDataForBackup": "மன்னிக்கவும், தற்போது காப்புப் பிரதி எடுக்க தரவு எதுவும் இல்லை.",
"storageLimitReached": "உங்கள் சாதனத்தில் போதுமான சேமிப்பிடம் இல்லாததால், காப்புப் பிரதி செயல்முறையை எங்களால் முடிக்க முடியவில்லை. தேவையற்ற கோப்புகள் அல்லது பயன்பாடுகளை நீக்கி இடத்தை காலி செய்து, மீண்டும் முயற்சிக்கவும்."
},
"restoreInProgress": "தரவு மீட்டெடுப்பு செயலில் உள்ளது. விண்ணப்பத்தை மூட வேண்டாம்.",
"restoreSuccessful": "உங்கள் காப்புப்பிரதி வெற்றிகரமாக மீட்டெடுக்கப்பட்டது",
"restoreFailure": {
"networkError": "நிலையற்ற இணைய இணைப்பு காரணமாக, தரவு மீட்டமைப்பைச் செய்ய முடியவில்லை. பிறகு முயற்சிக்கவும்.",

View File

@@ -36,11 +36,13 @@ const model = createModel(
errorReason: '' as string,
isAutoBackUp: true as boolean,
isLoading: true as boolean,
showBackupInProgress: false as boolean,
},
{
events: {
DATA_BACKUP: (isAutoBackUp: boolean) => ({isAutoBackUp}),
DISMISS: () => ({}),
DISMISS_SHOW_BACKUP_IN_PROGRESS: () => ({}),
LAST_BACKUP_DETAILS: () => ({}),
STORE_RESPONSE: (response: unknown) => ({response}),
STORE_ERROR: (error: Error, requester?: string) => ({error, requester}),
@@ -108,6 +110,7 @@ export const backupMachine = model.createMachine(
},
},
backingUp: {
entry: 'setShowBackupInProgress',
initial: 'checkDataAvailabilityForBackup',
states: {
idle: {},
@@ -241,28 +244,25 @@ export const backupMachine = model.createMachine(
},
},
success: {
entry: 'sendDataBackupSuccessEvent',
entry: ['unsetShowBackupInProgress', 'sendDataBackupSuccessEvent'],
},
silentSuccess: {
entry: 'sendDataBackupSuccessEvent',
},
failure: {
entry: [
'sendDataBackupFailureEvent',
(ctx, event) => console.log('failure state ', event),
],
entry: ['unsetShowBackupInProgress', 'sendDataBackupFailureEvent'],
},
silentFailure: {
entry: [
'sendDataBackupFailureEvent',
(ctx, event) => console.log('failure state ', event),
],
entry: ['sendDataBackupFailureEvent'],
},
},
on: {
DISMISS: {
target: 'init',
},
DISMISS_SHOW_BACKUP_IN_PROGRESS: {
actions: 'unsetShowBackupInProgress',
},
},
},
},
@@ -284,6 +284,16 @@ export const backupMachine = model.createMachine(
},
}),
setShowBackupInProgress: model.assign({
showBackupInProgress: (context, _event) => {
return !context.isAutoBackUp;
},
}),
unsetShowBackupInProgress: model.assign({
showBackupInProgress: false,
}),
setFileName: model.assign({
fileName: (_context, event) => {
return event.filename;
@@ -467,4 +477,7 @@ export function lastBackupDetails(state: State) {
export function selectBackupErrorReason(state: State) {
return state.context.errorReason;
}
export function selectShowBackupInProgress(state: State) {
return state.context.showBackupInProgress;
}
type State = StateFrom<typeof backupMachine>;

View File

@@ -1,132 +1,70 @@
// This file was automatically generated. Edits will be overwritten
export interface Typegen0 {
'@@xstate/typegen': true;
internalEvents: {
'done.invoke.backup.backingUp.checkStorageAvailability:invocation[0]': {
type: 'done.invoke.backup.backingUp.checkStorageAvailability:invocation[0]';
data: unknown;
__tip: 'See the XState TS docs to learn how to strongly type this.';
};
'done.invoke.backup.backingUp.uploadBackupFile:invocation[0]': {
type: 'done.invoke.backup.backingUp.uploadBackupFile:invocation[0]';
data: unknown;
__tip: 'See the XState TS docs to learn how to strongly type this.';
};
'done.invoke.backup.backingUp.zipBackupFile:invocation[0]': {
type: 'done.invoke.backup.backingUp.zipBackupFile:invocation[0]';
data: unknown;
__tip: 'See the XState TS docs to learn how to strongly type this.';
};
'done.invoke.backup.fetchLastBackupDetails.checkCloud:invocation[0]': {
type: 'done.invoke.backup.fetchLastBackupDetails.checkCloud:invocation[0]';
data: unknown;
__tip: 'See the XState TS docs to learn how to strongly type this.';
};
'error.platform.backup.backingUp.checkStorageAvailability:invocation[0]': {
type: 'error.platform.backup.backingUp.checkStorageAvailability:invocation[0]';
data: unknown;
};
'error.platform.backup.backingUp.uploadBackupFile:invocation[0]': {
type: 'error.platform.backup.backingUp.uploadBackupFile:invocation[0]';
data: unknown;
};
'error.platform.backup.backingUp.zipBackupFile:invocation[0]': {
type: 'error.platform.backup.backingUp.zipBackupFile:invocation[0]';
data: unknown;
};
'error.platform.backup.fetchLastBackupDetails.checkCloud:invocation[0]': {
type: 'error.platform.backup.fetchLastBackupDetails.checkCloud:invocation[0]';
data: unknown;
};
'xstate.init': {type: 'xstate.init'};
};
invokeSrcNameMap: {
checkStorageAvailability: 'done.invoke.backup.backingUp.checkStorageAvailability:invocation[0]';
getLastBackupDetailsFromCloud: 'done.invoke.backup.fetchLastBackupDetails.checkCloud:invocation[0]';
uploadBackupFile: 'done.invoke.backup.backingUp.uploadBackupFile:invocation[0]';
writeDataToFile: 'done.invoke.backup.backingUp.writeDataToFile:invocation[0]';
zipBackupFile: 'done.invoke.backup.backingUp.zipBackupFile:invocation[0]';
};
missingImplementations: {
actions: never;
delays: never;
guards: never;
services: never;
};
eventsCausingActions: {
extractLastBackupDetails: 'done.invoke.backup.backingUp.uploadBackupFile:invocation[0]';
fetchAllDataFromDB: 'done.invoke.backup.backingUp.checkStorageAvailability:invocation[0]';
getLastBackupDetailsFromStore: 'LAST_BACKUP_DETAILS';
loadVcs: 'DATA_BACKUP';
sendDataBackupFailureEvent:
| 'STORE_ERROR'
| 'STORE_RESPONSE'
| 'done.invoke.backup.backingUp.checkStorageAvailability:invocation[0]'
| 'error.platform.backup.backingUp.checkStorageAvailability:invocation[0]'
| 'error.platform.backup.backingUp.uploadBackupFile:invocation[0]'
| 'error.platform.backup.backingUp.zipBackupFile:invocation[0]';
sendDataBackupStartEvent: 'DATA_BACKUP';
sendDataBackupSuccessEvent: 'STORE_RESPONSE';
setBackUpNotPossible:
| 'STORE_ERROR'
| 'STORE_RESPONSE'
| 'error.platform.backup.backingUp.checkStorageAvailability:invocation[0]';
setBackupErrorReason: 'error.platform.backup.backingUp.uploadBackupFile:invocation[0]';
setDataFromStorage: 'STORE_RESPONSE';
setErrorReasonAsStorageLimitReached: 'done.invoke.backup.backingUp.checkStorageAvailability:invocation[0]';
setFileName: 'FILE_NAME';
setLastBackupDetails:
| 'STORE_RESPONSE'
| 'done.invoke.backup.fetchLastBackupDetails.checkCloud:invocation[0]';
storeLastBackupDetails:
| 'STORE_RESPONSE'
| 'done.invoke.backup.backingUp.uploadBackupFile:invocation[0]';
unsetIsLoading:
| 'STORE_RESPONSE'
| 'done.invoke.backup.fetchLastBackupDetails.checkCloud:invocation[0]'
| 'error.platform.backup.fetchLastBackupDetails.checkCloud:invocation[0]';
};
eventsCausingDelays: {};
eventsCausingGuards: {
isDataAvailableInStorage: 'STORE_RESPONSE';
isMinimumStorageRequiredForBackupReached: 'done.invoke.backup.backingUp.checkStorageAvailability:invocation[0]';
isVCFound: 'STORE_RESPONSE';
};
eventsCausingServices: {
checkStorageAvailability: 'STORE_RESPONSE';
getLastBackupDetailsFromCloud: 'STORE_ERROR' | 'STORE_RESPONSE';
uploadBackupFile: 'done.invoke.backup.backingUp.zipBackupFile:invocation[0]';
writeDataToFile: 'STORE_RESPONSE';
zipBackupFile: 'FILE_NAME';
};
matchesStates:
| 'backingUp'
| 'backingUp.checkDataAvailabilityForBackup'
| 'backingUp.checkStorageAvailability'
| 'backingUp.failure'
| 'backingUp.fetchDataFromDB'
| 'backingUp.idle'
| 'backingUp.success'
| 'backingUp.uploadBackupFile'
| 'backingUp.writeDataToFile'
| 'backingUp.zipBackupFile'
| 'fetchLastBackupDetails'
| 'fetchLastBackupDetails.checkCloud'
| 'fetchLastBackupDetails.checkStore'
| 'init'
| {
backingUp?:
| 'checkDataAvailabilityForBackup'
| 'checkStorageAvailability'
| 'failure'
| 'fetchDataFromDB'
| 'idle'
| 'success'
| 'uploadBackupFile'
| 'writeDataToFile'
| 'zipBackupFile';
fetchLastBackupDetails?: 'checkCloud' | 'checkStore';
};
tags: never;
}
// This file was automatically generated. Edits will be overwritten
export interface Typegen0 {
'@@xstate/typegen': true;
internalEvents: {
"done.invoke.backup.backingUp.checkStorageAvailability:invocation[0]": { type: "done.invoke.backup.backingUp.checkStorageAvailability:invocation[0]"; data: unknown; __tip: "See the XState TS docs to learn how to strongly type this." };
"done.invoke.backup.backingUp.uploadBackupFile:invocation[0]": { type: "done.invoke.backup.backingUp.uploadBackupFile:invocation[0]"; data: unknown; __tip: "See the XState TS docs to learn how to strongly type this." };
"done.invoke.backup.backingUp.zipBackupFile:invocation[0]": { type: "done.invoke.backup.backingUp.zipBackupFile:invocation[0]"; data: unknown; __tip: "See the XState TS docs to learn how to strongly type this." };
"done.invoke.backup.fetchLastBackupDetails.checkCloud:invocation[0]": { type: "done.invoke.backup.fetchLastBackupDetails.checkCloud:invocation[0]"; data: unknown; __tip: "See the XState TS docs to learn how to strongly type this." };
"error.platform.backup.backingUp.checkStorageAvailability:invocation[0]": { type: "error.platform.backup.backingUp.checkStorageAvailability:invocation[0]"; data: unknown };
"error.platform.backup.backingUp.uploadBackupFile:invocation[0]": { type: "error.platform.backup.backingUp.uploadBackupFile:invocation[0]"; data: unknown };
"error.platform.backup.backingUp.zipBackupFile:invocation[0]": { type: "error.platform.backup.backingUp.zipBackupFile:invocation[0]"; data: unknown };
"error.platform.backup.fetchLastBackupDetails.checkCloud:invocation[0]": { type: "error.platform.backup.fetchLastBackupDetails.checkCloud:invocation[0]"; data: unknown };
"xstate.init": { type: "xstate.init" };
};
invokeSrcNameMap: {
"checkStorageAvailability": "done.invoke.backup.backingUp.checkStorageAvailability:invocation[0]";
"getLastBackupDetailsFromCloud": "done.invoke.backup.fetchLastBackupDetails.checkCloud:invocation[0]";
"uploadBackupFile": "done.invoke.backup.backingUp.uploadBackupFile:invocation[0]";
"writeDataToFile": "done.invoke.backup.backingUp.writeDataToFile:invocation[0]";
"zipBackupFile": "done.invoke.backup.backingUp.zipBackupFile:invocation[0]";
};
missingImplementations: {
actions: never;
delays: never;
guards: never;
services: never;
};
eventsCausingActions: {
"extractLastBackupDetails": "done.invoke.backup.backingUp.uploadBackupFile:invocation[0]";
"fetchAllDataFromDB": "done.invoke.backup.backingUp.checkStorageAvailability:invocation[0]";
"getLastBackupDetailsFromStore": "LAST_BACKUP_DETAILS";
"loadVcs": "DATA_BACKUP";
"sendDataBackupFailureEvent": "STORE_ERROR" | "STORE_RESPONSE" | "done.invoke.backup.backingUp.checkStorageAvailability:invocation[0]" | "error.platform.backup.backingUp.checkStorageAvailability:invocation[0]" | "error.platform.backup.backingUp.uploadBackupFile:invocation[0]" | "error.platform.backup.backingUp.zipBackupFile:invocation[0]";
"sendDataBackupStartEvent": "DATA_BACKUP";
"sendDataBackupSuccessEvent": "STORE_RESPONSE";
"setBackUpNotPossible": "STORE_RESPONSE" | "error.platform.backup.backingUp.checkStorageAvailability:invocation[0]";
"setBackupErrorReason": "STORE_ERROR" | "error.platform.backup.backingUp.uploadBackupFile:invocation[0]";
"setDataFromStorage": "STORE_RESPONSE";
"setErrorReasonAsStorageLimitReached": "done.invoke.backup.backingUp.checkStorageAvailability:invocation[0]";
"setFileName": "FILE_NAME";
"setIsAutoBackup": "DATA_BACKUP";
"setLastBackupDetails": "STORE_RESPONSE" | "done.invoke.backup.fetchLastBackupDetails.checkCloud:invocation[0]";
"setShowBackupInProgress": "DATA_BACKUP";
"storeLastBackupDetails": "done.invoke.backup.backingUp.uploadBackupFile:invocation[0]";
"unsetIsLoading": "STORE_RESPONSE" | "done.invoke.backup.fetchLastBackupDetails.checkCloud:invocation[0]" | "error.platform.backup.fetchLastBackupDetails.checkCloud:invocation[0]";
"unsetShowBackupInProgress": "DISMISS_SHOW_BACKUP_IN_PROGRESS" | "STORE_ERROR" | "STORE_RESPONSE" | "done.invoke.backup.backingUp.checkStorageAvailability:invocation[0]" | "error.platform.backup.backingUp.checkStorageAvailability:invocation[0]" | "error.platform.backup.backingUp.uploadBackupFile:invocation[0]" | "error.platform.backup.backingUp.zipBackupFile:invocation[0]";
};
eventsCausingDelays: {
};
eventsCausingGuards: {
"checkIfAutoBackup": "STORE_ERROR" | "STORE_RESPONSE" | "done.invoke.backup.backingUp.checkStorageAvailability:invocation[0]" | "error.platform.backup.backingUp.checkStorageAvailability:invocation[0]" | "error.platform.backup.backingUp.uploadBackupFile:invocation[0]" | "error.platform.backup.backingUp.zipBackupFile:invocation[0]";
"isDataAvailableInStorage": "STORE_RESPONSE";
"isMinimumStorageRequiredForBackupAvailable": "done.invoke.backup.backingUp.checkStorageAvailability:invocation[0]";
"isVCFound": "STORE_RESPONSE";
};
eventsCausingServices: {
"checkStorageAvailability": "STORE_RESPONSE";
"getLastBackupDetailsFromCloud": "STORE_ERROR" | "STORE_RESPONSE";
"uploadBackupFile": "done.invoke.backup.backingUp.zipBackupFile:invocation[0]";
"writeDataToFile": "STORE_RESPONSE";
"zipBackupFile": "FILE_NAME";
};
matchesStates: "backingUp" | "backingUp.checkDataAvailabilityForBackup" | "backingUp.checkStorageAvailability" | "backingUp.failure" | "backingUp.fetchDataFromDB" | "backingUp.idle" | "backingUp.silentFailure" | "backingUp.silentSuccess" | "backingUp.success" | "backingUp.uploadBackupFile" | "backingUp.writeDataToFile" | "backingUp.zipBackupFile" | "fetchLastBackupDetails" | "fetchLastBackupDetails.checkCloud" | "fetchLastBackupDetails.checkStore" | "init" | { "backingUp"?: "checkDataAvailabilityForBackup" | "checkStorageAvailability" | "failure" | "fetchDataFromDB" | "idle" | "silentFailure" | "silentSuccess" | "success" | "uploadBackupFile" | "writeDataToFile" | "zipBackupFile";
"fetchLastBackupDetails"?: "checkCloud" | "checkStore"; };
tags: never;
}

View File

@@ -28,12 +28,14 @@ const model = createModel(
fileName: '',
dataFromBackupFile: {},
errorReason: '' as string,
showRestoreInProgress: false as boolean,
},
{
events: {
BACKUP_RESTORE: () => ({}),
DOWNLOAD_UNSYNCED_BACKUP_FILES: () => ({}),
DISMISS: () => ({}),
DISMISS_SHOW_RESTORE_IN_PROGRESS: () => ({}),
STORE_RESPONSE: (response: unknown) => ({response}),
STORE_ERROR: (error: Error, requester?: string) => ({error, requester}),
DATA_FROM_FILE: (dataFromBackupFile: {}) => ({dataFromBackupFile}),
@@ -85,6 +87,7 @@ export const backupRestoreMachine = model.createMachine(
init: {},
restoreBackup: {
initial: 'checkStorageAvailability',
entry: 'setShowRestoreInProgress',
states: {
idle: {},
checkStorageAvailability: {
@@ -161,16 +164,25 @@ export const backupRestoreMachine = model.createMachine(
},
},
success: {
entry: 'sendDataRestoreSuccessEvent',
entry: [
'unsetShowRestoreInProgress',
'sendDataRestoreSuccessEvent',
],
},
failure: {
entry: 'sendDataRestoreFailureEvent',
entry: [
'unsetShowRestoreInProgress',
'sendDataRestoreFailureEvent',
],
},
},
on: {
DISMISS: {
target: 'init',
},
DISMISS_SHOW_RESTORE_IN_PROGRESS: {
actions: 'unsetShowRestoreInProgress',
},
},
},
},
@@ -178,6 +190,15 @@ export const backupRestoreMachine = model.createMachine(
{
actions: {
downloadUnsyncedBackupFiles: () => Cloud.downloadUnSyncedBackupFiles(),
setShowRestoreInProgress: model.assign({
showRestoreInProgress: true,
}),
unsetShowRestoreInProgress: model.assign({
showRestoreInProgress: false,
}),
setRestoreTechnicalError: model.assign({
errorReason: 'technicalError',
}),
@@ -344,6 +365,9 @@ export function selectIsBackUpRestoreSuccess(state: State) {
export function selectIsBackUpRestoreFailure(state: State) {
return state.matches('restoreBackup.failure');
}
export function selectShowRestoreInProgress(state: State) {
return state.context.showRestoreInProgress;
}
type State = StateFrom<typeof backupRestoreMachine>;
function getFileNameFromZIPfile(fileName: string): string {

View File

@@ -73,6 +73,16 @@ export interface Typegen0 {
setRestoreTechnicalError:
| 'STORE_ERROR'
| 'done.invoke.backupRestore.restoreBackup.checkStorageAvailability:invocation[0]';
setShowRestoreInProgress:
| 'BACKUP_RESTORE'
| 'done.invoke.backupRestore.preload:invocation[0]';
unsetShowRestoreInProgress:
| 'DISMISS_SHOW_RESTORE_IN_PROGRESS'
| 'STORE_ERROR'
| 'done.invoke.backupRestore.restoreBackup.checkStorageAvailability:invocation[0]'
| 'done.invoke.backupRestore.restoreBackup.deleteBackupDir:invocation[0]'
| 'error.platform.backupRestore.restoreBackup.downloadBackupFileFromCloud:invocation[0]'
| 'error.platform.backupRestore.restoreBackup.unzipBackupFile:invocation[0]';
};
eventsCausingDelays: {};
eventsCausingGuards: {

View File

@@ -6,6 +6,7 @@ import {
selectIsBackUpRestoreFailure,
selectIsBackUpRestoreSuccess,
selectErrorReason,
selectShowRestoreInProgress,
} from '../../machines/backupRestore';
import {GlobalContext} from '../../shared/GlobalContext';
@@ -31,11 +32,20 @@ export function useBackupRestoreScreen() {
backupRestoreService?.send(
BackupRestoreEvents.DOWNLOAD_UNSYNCED_BACKUP_FILES(),
),
showRestoreInProgress: useSelector(
backupRestoreService!,
selectShowRestoreInProgress,
),
BACKUP_RESTORE: () => {
backupRestoreService.send(BackupRestoreEvents.BACKUP_RESTORE());
},
DISMISS: () => {
backupRestoreService.send(BackupRestoreEvents.DISMISS());
},
DISMISS_SHOW_RESTORE_IN_PROGRESS: () => {
backupRestoreService?.send(
BackupRestoreEvents.DISMISS_SHOW_RESTORE_IN_PROGRESS(),
);
},
};
}

View File

@@ -8,6 +8,7 @@ import {
selectBackupErrorReason,
lastBackupDetails,
selectIsLoading,
selectShowBackupInProgress,
} from '../../machines/backupAndRestore/backup';
import {GlobalContext} from '../../shared/GlobalContext';
@@ -22,6 +23,10 @@ export function useBackupScreen() {
isBackingUpSuccess: useSelector(backupService, selectIsBackingUpSuccess),
isBackingUpFailure: useSelector(backupService, selectIsBackingUpFailure),
isBackupInProgress: useSelector(backupService, selectIsBackupInprogress),
showBackupInProgress: useSelector(
backupService!,
selectShowBackupInProgress,
),
DATA_BACKUP: (isAutoBackup: boolean) => {
backupService.send(BackupEvents.DATA_BACKUP(isAutoBackup));
},
@@ -32,5 +37,8 @@ export function useBackupScreen() {
DISMISS: () => {
backupService.send(BackupEvents.DISMISS());
},
DISMISS_SHOW_BACKUP_IN_PROGRESS: () => {
backupService?.send(BackupEvents.DISMISS_SHOW_BACKUP_IN_PROGRESS());
},
};
}