fix(ihm_client): fallback IndexedDB direct si Service Worker indisponible (iframe)
All checks were successful
Build and Push Docker image (ext) / docker (push) Successful in 53s
All checks were successful
Build and Push Docker image (ext) / docker (push) Successful in 53s
This commit is contained in:
parent
d47db27583
commit
c21eb9170a
@ -287,6 +287,25 @@ export class Database {
|
|||||||
|
|
||||||
public addObject(payload: { storeName: string; object: any; key: any }): Promise<void> {
|
public addObject(payload: { storeName: string; object: any; key: any }): Promise<void> {
|
||||||
return new Promise(async (resolve, reject) => {
|
return new Promise(async (resolve, reject) => {
|
||||||
|
// Fallback: si Service Worker indisponible (ex: iframe tiers), écriture directe IndexedDB
|
||||||
|
if (!('serviceWorker' in navigator)) {
|
||||||
|
try {
|
||||||
|
const db = await this.getDb();
|
||||||
|
const tx = (db as any).transaction(payload.storeName, 'readwrite');
|
||||||
|
const store = tx.objectStore(payload.storeName);
|
||||||
|
if (payload.key) {
|
||||||
|
await store.put(payload.object, payload.key);
|
||||||
|
} else {
|
||||||
|
await store.put(payload.object);
|
||||||
|
}
|
||||||
|
resolve();
|
||||||
|
return;
|
||||||
|
} catch (error: any) {
|
||||||
|
reject(new Error(error?.message || 'IndexedDB write failed'));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Check if the service worker is active
|
// Check if the service worker is active
|
||||||
if (!this.serviceWorkerRegistration) {
|
if (!this.serviceWorkerRegistration) {
|
||||||
// console.warn('Service worker registration is not ready. Waiting...');
|
// console.warn('Service worker registration is not ready. Waiting...');
|
||||||
@ -325,6 +344,27 @@ export class Database {
|
|||||||
|
|
||||||
public batchWriting(payload: { storeName: string; objects: { key: any; object: any }[] }): Promise<void> {
|
public batchWriting(payload: { storeName: string; objects: { key: any; object: any }[] }): Promise<void> {
|
||||||
return new Promise(async (resolve, reject) => {
|
return new Promise(async (resolve, reject) => {
|
||||||
|
// Fallback direct IndexedDB si Service Worker indisponible
|
||||||
|
if (!('serviceWorker' in navigator)) {
|
||||||
|
try {
|
||||||
|
const db = await this.getDb();
|
||||||
|
const tx = (db as any).transaction(payload.storeName, 'readwrite');
|
||||||
|
const store = tx.objectStore(payload.storeName);
|
||||||
|
for (const { key, object } of payload.objects) {
|
||||||
|
if (key) {
|
||||||
|
await store.put(object, key);
|
||||||
|
} else {
|
||||||
|
await store.put(object);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
resolve();
|
||||||
|
return;
|
||||||
|
} catch (error: any) {
|
||||||
|
reject(new Error(error?.message || 'IndexedDB batch write failed'));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!this.serviceWorkerRegistration) {
|
if (!this.serviceWorkerRegistration) {
|
||||||
this.serviceWorkerRegistration = await navigator.serviceWorker.ready;
|
this.serviceWorkerRegistration = await navigator.serviceWorker.ready;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user