@dhis2/app-service-offline 3.5.0 → 3.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/index.js +8 -0
- package/build/cjs/lib/__tests__/clear-sensitive-caches.test.js +12 -7
- package/build/cjs/lib/__tests__/use-online-staus-message.test.js +34 -0
- package/build/cjs/lib/clear-sensitive-caches.js +1 -2
- package/build/cjs/lib/offline-provider.js +3 -1
- package/build/cjs/lib/online-status-message.js +46 -0
- package/build/es/index.js +1 -0
- package/build/es/lib/__tests__/clear-sensitive-caches.test.js +12 -7
- package/build/es/lib/__tests__/use-online-staus-message.test.js +25 -0
- package/build/es/lib/clear-sensitive-caches.js +1 -2
- package/build/es/lib/offline-provider.js +2 -1
- package/build/es/lib/online-status-message.js +27 -0
- package/build/types/index.d.ts +1 -0
- package/build/types/lib/online-status-message.d.ts +6 -0
- package/build/types/types.d.ts +5 -0
- package/package.json +2 -2
package/build/cjs/index.js
CHANGED
|
@@ -33,6 +33,12 @@ Object.defineProperty(exports, "useOnlineStatus", {
|
|
|
33
33
|
return _onlineStatus.useOnlineStatus;
|
|
34
34
|
}
|
|
35
35
|
});
|
|
36
|
+
Object.defineProperty(exports, "useOnlineStatusMessage", {
|
|
37
|
+
enumerable: true,
|
|
38
|
+
get: function () {
|
|
39
|
+
return _onlineStatusMessage.useOnlineStatusMessage;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
36
42
|
Object.defineProperty(exports, "clearSensitiveCaches", {
|
|
37
43
|
enumerable: true,
|
|
38
44
|
get: function () {
|
|
@@ -48,4 +54,6 @@ var _cacheableSectionState = require("./lib/cacheable-section-state");
|
|
|
48
54
|
|
|
49
55
|
var _onlineStatus = require("./lib/online-status");
|
|
50
56
|
|
|
57
|
+
var _onlineStatusMessage = require("./lib/online-status-message");
|
|
58
|
+
|
|
51
59
|
var _clearSensitiveCaches = require("./lib/clear-sensitive-caches");
|
|
@@ -20,7 +20,11 @@ const keysMockDefault = jest.fn().mockImplementation(async () => []);
|
|
|
20
20
|
const deleteMockDefault = makeCachesDeleteMock([]);
|
|
21
21
|
const cachesDefault = {
|
|
22
22
|
keys: keysMockDefault,
|
|
23
|
-
delete: deleteMockDefault
|
|
23
|
+
delete: deleteMockDefault,
|
|
24
|
+
// the following to satisfy types:
|
|
25
|
+
has: () => Promise.resolve(true),
|
|
26
|
+
open: () => Promise.resolve(new Cache()),
|
|
27
|
+
match: () => Promise.resolve(new Response())
|
|
24
28
|
};
|
|
25
29
|
window.caches = cachesDefault;
|
|
26
30
|
afterEach(() => {
|
|
@@ -51,7 +55,7 @@ it('returns false if caches.keys throws', async () => {
|
|
|
51
55
|
const spy = jest.fn(() => {
|
|
52
56
|
throw new Error('Security Error');
|
|
53
57
|
});
|
|
54
|
-
window.caches = {
|
|
58
|
+
window.caches = { ...cachesDefault,
|
|
55
59
|
keys: spy
|
|
56
60
|
};
|
|
57
61
|
const result = await (0, _clearSensitiveCaches.clearSensitiveCaches)();
|
|
@@ -59,19 +63,20 @@ it('returns false if caches.keys throws', async () => {
|
|
|
59
63
|
expect(result).toBe(false);
|
|
60
64
|
});
|
|
61
65
|
it('clears potentially sensitive caches', async () => {
|
|
62
|
-
const testKeys = ['cache1', 'cache2', 'app-shell'];
|
|
66
|
+
const testKeys = ['cache1', 'cache2', 'app-shell', 'other-assets'];
|
|
63
67
|
const keysMock = jest.fn().mockImplementation(() => Promise.resolve(testKeys));
|
|
64
68
|
const deleteMock = makeCachesDeleteMock(testKeys);
|
|
65
|
-
window.caches = {
|
|
69
|
+
window.caches = { ...cachesDefault,
|
|
66
70
|
keys: keysMock,
|
|
67
71
|
delete: deleteMock
|
|
68
72
|
};
|
|
69
73
|
const cachesDeleted = await (0, _clearSensitiveCaches.clearSensitiveCaches)();
|
|
70
74
|
expect(cachesDeleted).toBe(true);
|
|
71
|
-
expect(deleteMock).toHaveBeenCalledTimes(
|
|
75
|
+
expect(deleteMock).toHaveBeenCalledTimes(4);
|
|
72
76
|
expect(deleteMock.mock.calls[0][0]).toBe('cache1');
|
|
73
77
|
expect(deleteMock.mock.calls[1][0]).toBe('cache2');
|
|
74
78
|
expect(deleteMock.mock.calls[2][0]).toBe('app-shell');
|
|
79
|
+
expect(deleteMock.mock.calls[3][0]).toBe('other-assets');
|
|
75
80
|
});
|
|
76
81
|
it('preserves keepable caches', async () => {
|
|
77
82
|
const keysMock = jest.fn().mockImplementation(async () => ['cache1', 'cache2', 'app-shell', 'other-assets', 'workbox-precache-v2-https://hey.howareya.now/']);
|
|
@@ -79,11 +84,11 @@ it('preserves keepable caches', async () => {
|
|
|
79
84
|
keys: keysMock
|
|
80
85
|
};
|
|
81
86
|
await (0, _clearSensitiveCaches.clearSensitiveCaches)();
|
|
82
|
-
expect(deleteMockDefault).toHaveBeenCalledTimes(
|
|
87
|
+
expect(deleteMockDefault).toHaveBeenCalledTimes(4);
|
|
83
88
|
expect(deleteMockDefault.mock.calls[0][0]).toBe('cache1');
|
|
84
89
|
expect(deleteMockDefault.mock.calls[1][0]).toBe('cache2');
|
|
85
90
|
expect(deleteMockDefault.mock.calls[2][0]).toBe('app-shell');
|
|
86
|
-
expect(deleteMockDefault).
|
|
91
|
+
expect(deleteMockDefault.mock.calls[3][0]).toBe('other-assets');
|
|
87
92
|
expect(deleteMockDefault).not.toHaveBeenCalledWith('workbox-precache-v2-https://hey.howareya.now/');
|
|
88
93
|
});
|
|
89
94
|
describe('clears sections-db', () => {
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _reactHooks = require("@testing-library/react-hooks");
|
|
4
|
+
|
|
5
|
+
var _react = _interopRequireDefault(require("react"));
|
|
6
|
+
|
|
7
|
+
var _testMocks = require("../../utils/test-mocks");
|
|
8
|
+
|
|
9
|
+
var _offlineProvider = require("../offline-provider");
|
|
10
|
+
|
|
11
|
+
var _onlineStatusMessage = require("../online-status-message");
|
|
12
|
+
|
|
13
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
14
|
+
|
|
15
|
+
describe('useOnlineStatusMessage', () => {
|
|
16
|
+
it('should allow the online status to be updated ', () => {
|
|
17
|
+
const wrapper = ({
|
|
18
|
+
children
|
|
19
|
+
}) => /*#__PURE__*/_react.default.createElement(_offlineProvider.OfflineProvider, {
|
|
20
|
+
offlineInterface: _testMocks.mockOfflineInterface
|
|
21
|
+
}, children);
|
|
22
|
+
|
|
23
|
+
const {
|
|
24
|
+
result
|
|
25
|
+
} = (0, _reactHooks.renderHook)(() => (0, _onlineStatusMessage.useOnlineStatusMessage)(), {
|
|
26
|
+
wrapper
|
|
27
|
+
});
|
|
28
|
+
expect(result.current.onlineStatusMessage).toBeUndefined();
|
|
29
|
+
(0, _reactHooks.act)(() => {
|
|
30
|
+
result.current.setOnlineStatusMessage('8 offline events');
|
|
31
|
+
});
|
|
32
|
+
expect(result.current.onlineStatusMessage).toEqual('8 offline events');
|
|
33
|
+
});
|
|
34
|
+
});
|
|
@@ -11,8 +11,7 @@ exports.SECTIONS_DB = SECTIONS_DB;
|
|
|
11
11
|
const SECTIONS_STORE = 'sections-store'; // Non-sensitive caches that can be kept:
|
|
12
12
|
|
|
13
13
|
exports.SECTIONS_STORE = SECTIONS_STORE;
|
|
14
|
-
const KEEPABLE_CACHES = [/^workbox-precache
|
|
15
|
-
/^other-assets/ // static assets cached at runtime - shouldn't be sensitive
|
|
14
|
+
const KEEPABLE_CACHES = [/^workbox-precache/ // precached static assets
|
|
16
15
|
];
|
|
17
16
|
|
|
18
17
|
/*
|
|
@@ -13,6 +13,8 @@ var _cacheableSectionState = require("./cacheable-section-state");
|
|
|
13
13
|
|
|
14
14
|
var _offlineInterface = require("./offline-interface");
|
|
15
15
|
|
|
16
|
+
var _onlineStatusMessage = require("./online-status-message");
|
|
17
|
+
|
|
16
18
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
19
|
|
|
18
20
|
/** A context provider for all the relevant offline contexts */
|
|
@@ -28,7 +30,7 @@ function OfflineProvider({
|
|
|
28
30
|
|
|
29
31
|
return /*#__PURE__*/_react.default.createElement(_offlineInterface.OfflineInterfaceProvider, {
|
|
30
32
|
offlineInterface: offlineInterface
|
|
31
|
-
}, /*#__PURE__*/_react.default.createElement(_cacheableSectionState.CacheableSectionProvider, null, children));
|
|
33
|
+
}, /*#__PURE__*/_react.default.createElement(_cacheableSectionState.CacheableSectionProvider, null, /*#__PURE__*/_react.default.createElement(_onlineStatusMessage.OnlineStatusMessageProvider, null, children)));
|
|
32
34
|
}
|
|
33
35
|
|
|
34
36
|
OfflineProvider.propTypes = {
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.OnlineStatusMessageProvider = exports.useOnlineStatusMessage = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
|
|
10
|
+
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
|
|
11
|
+
|
|
12
|
+
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
13
|
+
|
|
14
|
+
const defaultApi = {
|
|
15
|
+
onlineStatusMessage: undefined,
|
|
16
|
+
setOnlineStatusMessage: () => undefined
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const OnlineStatusMessageContext = /*#__PURE__*/_react.default.createContext(defaultApi);
|
|
20
|
+
|
|
21
|
+
const useOnlineStatusMessage = () => {
|
|
22
|
+
const {
|
|
23
|
+
onlineStatusMessage,
|
|
24
|
+
setOnlineStatusMessage
|
|
25
|
+
} = (0, _react.useContext)(OnlineStatusMessageContext);
|
|
26
|
+
return {
|
|
27
|
+
onlineStatusMessage,
|
|
28
|
+
setOnlineStatusMessage
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
exports.useOnlineStatusMessage = useOnlineStatusMessage;
|
|
33
|
+
|
|
34
|
+
const OnlineStatusMessageProvider = ({
|
|
35
|
+
children
|
|
36
|
+
}) => {
|
|
37
|
+
const [onlineStatusMessage, setOnlineStatusMessage] = (0, _react.useState)();
|
|
38
|
+
return /*#__PURE__*/_react.default.createElement(OnlineStatusMessageContext.Provider, {
|
|
39
|
+
value: {
|
|
40
|
+
onlineStatusMessage,
|
|
41
|
+
setOnlineStatusMessage
|
|
42
|
+
}
|
|
43
|
+
}, children);
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
exports.OnlineStatusMessageProvider = OnlineStatusMessageProvider;
|
package/build/es/index.js
CHANGED
|
@@ -2,4 +2,5 @@ export { OfflineProvider } from './lib/offline-provider';
|
|
|
2
2
|
export { CacheableSection, useCacheableSection } from './lib/cacheable-section';
|
|
3
3
|
export { useCachedSections } from './lib/cacheable-section-state';
|
|
4
4
|
export { useOnlineStatus } from './lib/online-status';
|
|
5
|
+
export { useOnlineStatusMessage } from './lib/online-status-message';
|
|
5
6
|
export { clearSensitiveCaches } from './lib/clear-sensitive-caches';
|
|
@@ -12,7 +12,11 @@ const keysMockDefault = jest.fn().mockImplementation(async () => []);
|
|
|
12
12
|
const deleteMockDefault = makeCachesDeleteMock([]);
|
|
13
13
|
const cachesDefault = {
|
|
14
14
|
keys: keysMockDefault,
|
|
15
|
-
delete: deleteMockDefault
|
|
15
|
+
delete: deleteMockDefault,
|
|
16
|
+
// the following to satisfy types:
|
|
17
|
+
has: () => Promise.resolve(true),
|
|
18
|
+
open: () => Promise.resolve(new Cache()),
|
|
19
|
+
match: () => Promise.resolve(new Response())
|
|
16
20
|
};
|
|
17
21
|
window.caches = cachesDefault;
|
|
18
22
|
afterEach(() => {
|
|
@@ -43,7 +47,7 @@ it('returns false if caches.keys throws', async () => {
|
|
|
43
47
|
const spy = jest.fn(() => {
|
|
44
48
|
throw new Error('Security Error');
|
|
45
49
|
});
|
|
46
|
-
window.caches = {
|
|
50
|
+
window.caches = { ...cachesDefault,
|
|
47
51
|
keys: spy
|
|
48
52
|
};
|
|
49
53
|
const result = await clearSensitiveCaches();
|
|
@@ -51,19 +55,20 @@ it('returns false if caches.keys throws', async () => {
|
|
|
51
55
|
expect(result).toBe(false);
|
|
52
56
|
});
|
|
53
57
|
it('clears potentially sensitive caches', async () => {
|
|
54
|
-
const testKeys = ['cache1', 'cache2', 'app-shell'];
|
|
58
|
+
const testKeys = ['cache1', 'cache2', 'app-shell', 'other-assets'];
|
|
55
59
|
const keysMock = jest.fn().mockImplementation(() => Promise.resolve(testKeys));
|
|
56
60
|
const deleteMock = makeCachesDeleteMock(testKeys);
|
|
57
|
-
window.caches = {
|
|
61
|
+
window.caches = { ...cachesDefault,
|
|
58
62
|
keys: keysMock,
|
|
59
63
|
delete: deleteMock
|
|
60
64
|
};
|
|
61
65
|
const cachesDeleted = await clearSensitiveCaches();
|
|
62
66
|
expect(cachesDeleted).toBe(true);
|
|
63
|
-
expect(deleteMock).toHaveBeenCalledTimes(
|
|
67
|
+
expect(deleteMock).toHaveBeenCalledTimes(4);
|
|
64
68
|
expect(deleteMock.mock.calls[0][0]).toBe('cache1');
|
|
65
69
|
expect(deleteMock.mock.calls[1][0]).toBe('cache2');
|
|
66
70
|
expect(deleteMock.mock.calls[2][0]).toBe('app-shell');
|
|
71
|
+
expect(deleteMock.mock.calls[3][0]).toBe('other-assets');
|
|
67
72
|
});
|
|
68
73
|
it('preserves keepable caches', async () => {
|
|
69
74
|
const keysMock = jest.fn().mockImplementation(async () => ['cache1', 'cache2', 'app-shell', 'other-assets', 'workbox-precache-v2-https://hey.howareya.now/']);
|
|
@@ -71,11 +76,11 @@ it('preserves keepable caches', async () => {
|
|
|
71
76
|
keys: keysMock
|
|
72
77
|
};
|
|
73
78
|
await clearSensitiveCaches();
|
|
74
|
-
expect(deleteMockDefault).toHaveBeenCalledTimes(
|
|
79
|
+
expect(deleteMockDefault).toHaveBeenCalledTimes(4);
|
|
75
80
|
expect(deleteMockDefault.mock.calls[0][0]).toBe('cache1');
|
|
76
81
|
expect(deleteMockDefault.mock.calls[1][0]).toBe('cache2');
|
|
77
82
|
expect(deleteMockDefault.mock.calls[2][0]).toBe('app-shell');
|
|
78
|
-
expect(deleteMockDefault).
|
|
83
|
+
expect(deleteMockDefault.mock.calls[3][0]).toBe('other-assets');
|
|
79
84
|
expect(deleteMockDefault).not.toHaveBeenCalledWith('workbox-precache-v2-https://hey.howareya.now/');
|
|
80
85
|
});
|
|
81
86
|
describe('clears sections-db', () => {
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { renderHook, act } from '@testing-library/react-hooks';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { mockOfflineInterface } from '../../utils/test-mocks';
|
|
4
|
+
import { OfflineProvider } from '../offline-provider';
|
|
5
|
+
import { useOnlineStatusMessage } from '../online-status-message';
|
|
6
|
+
describe('useOnlineStatusMessage', () => {
|
|
7
|
+
it('should allow the online status to be updated ', () => {
|
|
8
|
+
const wrapper = ({
|
|
9
|
+
children
|
|
10
|
+
}) => /*#__PURE__*/React.createElement(OfflineProvider, {
|
|
11
|
+
offlineInterface: mockOfflineInterface
|
|
12
|
+
}, children);
|
|
13
|
+
|
|
14
|
+
const {
|
|
15
|
+
result
|
|
16
|
+
} = renderHook(() => useOnlineStatusMessage(), {
|
|
17
|
+
wrapper
|
|
18
|
+
});
|
|
19
|
+
expect(result.current.onlineStatusMessage).toBeUndefined();
|
|
20
|
+
act(() => {
|
|
21
|
+
result.current.setOnlineStatusMessage('8 offline events');
|
|
22
|
+
});
|
|
23
|
+
expect(result.current.onlineStatusMessage).toEqual('8 offline events');
|
|
24
|
+
});
|
|
25
|
+
});
|
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
export const SECTIONS_DB = 'sections-db';
|
|
3
3
|
export const SECTIONS_STORE = 'sections-store'; // Non-sensitive caches that can be kept:
|
|
4
4
|
|
|
5
|
-
const KEEPABLE_CACHES = [/^workbox-precache
|
|
6
|
-
/^other-assets/ // static assets cached at runtime - shouldn't be sensitive
|
|
5
|
+
const KEEPABLE_CACHES = [/^workbox-precache/ // precached static assets
|
|
7
6
|
];
|
|
8
7
|
|
|
9
8
|
/*
|
|
@@ -2,6 +2,7 @@ import PropTypes from 'prop-types';
|
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { CacheableSectionProvider } from './cacheable-section-state';
|
|
4
4
|
import { OfflineInterfaceProvider } from './offline-interface';
|
|
5
|
+
import { OnlineStatusMessageProvider } from './online-status-message';
|
|
5
6
|
|
|
6
7
|
/** A context provider for all the relevant offline contexts */
|
|
7
8
|
export function OfflineProvider({
|
|
@@ -16,7 +17,7 @@ export function OfflineProvider({
|
|
|
16
17
|
|
|
17
18
|
return /*#__PURE__*/React.createElement(OfflineInterfaceProvider, {
|
|
18
19
|
offlineInterface: offlineInterface
|
|
19
|
-
}, /*#__PURE__*/React.createElement(CacheableSectionProvider, null, children));
|
|
20
|
+
}, /*#__PURE__*/React.createElement(CacheableSectionProvider, null, /*#__PURE__*/React.createElement(OnlineStatusMessageProvider, null, children)));
|
|
20
21
|
}
|
|
21
22
|
OfflineProvider.propTypes = {
|
|
22
23
|
children: PropTypes.node,
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React, { useContext, useState } from 'react';
|
|
2
|
+
const defaultApi = {
|
|
3
|
+
onlineStatusMessage: undefined,
|
|
4
|
+
setOnlineStatusMessage: () => undefined
|
|
5
|
+
};
|
|
6
|
+
const OnlineStatusMessageContext = /*#__PURE__*/React.createContext(defaultApi);
|
|
7
|
+
export const useOnlineStatusMessage = () => {
|
|
8
|
+
const {
|
|
9
|
+
onlineStatusMessage,
|
|
10
|
+
setOnlineStatusMessage
|
|
11
|
+
} = useContext(OnlineStatusMessageContext);
|
|
12
|
+
return {
|
|
13
|
+
onlineStatusMessage,
|
|
14
|
+
setOnlineStatusMessage
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
export const OnlineStatusMessageProvider = ({
|
|
18
|
+
children
|
|
19
|
+
}) => {
|
|
20
|
+
const [onlineStatusMessage, setOnlineStatusMessage] = useState();
|
|
21
|
+
return /*#__PURE__*/React.createElement(OnlineStatusMessageContext.Provider, {
|
|
22
|
+
value: {
|
|
23
|
+
onlineStatusMessage,
|
|
24
|
+
setOnlineStatusMessage
|
|
25
|
+
}
|
|
26
|
+
}, children);
|
|
27
|
+
};
|
package/build/types/index.d.ts
CHANGED
|
@@ -2,4 +2,5 @@ export { OfflineProvider } from './lib/offline-provider';
|
|
|
2
2
|
export { CacheableSection, useCacheableSection } from './lib/cacheable-section';
|
|
3
3
|
export { useCachedSections } from './lib/cacheable-section-state';
|
|
4
4
|
export { useOnlineStatus } from './lib/online-status';
|
|
5
|
+
export { useOnlineStatusMessage } from './lib/online-status-message';
|
|
5
6
|
export { clearSensitiveCaches } from './lib/clear-sensitive-caches';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ReactElement, ReactNode } from 'react';
|
|
2
|
+
import { OnlineStatusMessageContextAPI } from '../types';
|
|
3
|
+
export declare const useOnlineStatusMessage: () => OnlineStatusMessageContextAPI;
|
|
4
|
+
export declare const OnlineStatusMessageProvider: ({ children, }: {
|
|
5
|
+
children: ReactNode;
|
|
6
|
+
}) => ReactElement;
|
package/build/types/types.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
1
2
|
export declare type RecordingState = 'default' | 'pending' | 'error' | 'recording';
|
|
2
3
|
export interface GlobalStateStoreMutation {
|
|
3
4
|
(state: any): any;
|
|
@@ -37,4 +38,8 @@ export interface OfflineInterface {
|
|
|
37
38
|
getCachedSections: () => Promise<IndexedDBCachedSection[]>;
|
|
38
39
|
removeSection: (id: string) => Promise<boolean>;
|
|
39
40
|
}
|
|
41
|
+
export declare type OnlineStatusMessageContextAPI = {
|
|
42
|
+
onlineStatusMessage?: ReactNode;
|
|
43
|
+
setOnlineStatusMessage: (additionalInfo: ReactNode) => void;
|
|
44
|
+
};
|
|
40
45
|
export {};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dhis2/app-service-offline",
|
|
3
3
|
"description": "A runtime service for online/offline detection and offline caching",
|
|
4
|
-
"version": "3.
|
|
4
|
+
"version": "3.6.1",
|
|
5
5
|
"main": "./build/cjs/index.js",
|
|
6
6
|
"module": "./build/es/index.js",
|
|
7
7
|
"types": "build/types/index.d.ts",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"coverage": "yarn test --coverage"
|
|
34
34
|
},
|
|
35
35
|
"peerDependencies": {
|
|
36
|
-
"@dhis2/app-service-alerts": "3.
|
|
36
|
+
"@dhis2/app-service-alerts": "3.6.1",
|
|
37
37
|
"prop-types": "^15.7.2",
|
|
38
38
|
"react": "^16.8.6",
|
|
39
39
|
"react-dom": "^16.8.6"
|