@opengeoweb/snackbar 9.15.0 → 9.17.0
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/index.esm.js +94 -36
- package/package.json +3 -2
- package/src/lib/components/Providers/Providers.d.ts +12 -0
- package/src/lib/components/Snackbar/SnackbarWrapperConnect.spec.d.ts +0 -7
- package/src/lib/index.d.ts +2 -0
- package/src/lib/store/index.d.ts +1 -1
- package/src/lib/store/listener.d.ts +3 -0
- package/src/lib/store/reducer.d.ts +3 -3
- package/src/lib/store/types.d.ts +1 -1
- package/src/lib/utils/i18n.d.ts +5 -0
- package/src/lib/store/sagas.d.ts +0 -5
- /package/src/lib/store/{sagas.spec.d.ts → listener.spec.d.ts} +0 -0
package/index.esm.js
CHANGED
|
@@ -3,8 +3,28 @@ import { useDispatch, useSelector } from 'react-redux';
|
|
|
3
3
|
import { CustomIconButton, withEggs } from '@opengeoweb/shared';
|
|
4
4
|
import { Snackbar } from '@mui/material';
|
|
5
5
|
import { Close } from '@opengeoweb/theme';
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
6
|
+
import 'i18next';
|
|
7
|
+
import { useTranslation } from 'react-i18next';
|
|
8
|
+
import { createEntityAdapter, createSlice, createSelector, createListenerMiddleware } from '@reduxjs/toolkit';
|
|
9
|
+
|
|
10
|
+
var en = {
|
|
11
|
+
"snackbar-close": "Close"
|
|
12
|
+
};
|
|
13
|
+
var fi = {
|
|
14
|
+
"snackbar-close": "ei käännetty"
|
|
15
|
+
};
|
|
16
|
+
var no = {
|
|
17
|
+
"snackbar-close": "Lukk"
|
|
18
|
+
};
|
|
19
|
+
var nl = {
|
|
20
|
+
"snackbar-close": "Sluiten"
|
|
21
|
+
};
|
|
22
|
+
var snackbarTranslations = {
|
|
23
|
+
en: en,
|
|
24
|
+
fi: fi,
|
|
25
|
+
no: no,
|
|
26
|
+
nl: nl
|
|
27
|
+
};
|
|
8
28
|
|
|
9
29
|
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
|
|
10
30
|
|
|
@@ -1104,11 +1124,40 @@ function __rest(s, e) {
|
|
|
1104
1124
|
return t;
|
|
1105
1125
|
}
|
|
1106
1126
|
|
|
1127
|
+
function __awaiter(thisArg, _arguments, P, generator) {
|
|
1128
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
1129
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
1130
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
1131
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
1132
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
1133
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
1134
|
+
});
|
|
1135
|
+
}
|
|
1136
|
+
|
|
1107
1137
|
typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
|
|
1108
1138
|
var e = new Error(message);
|
|
1109
1139
|
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
1110
1140
|
};
|
|
1111
1141
|
|
|
1142
|
+
/* *
|
|
1143
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
1144
|
+
* you may not use this file except in compliance with the License.
|
|
1145
|
+
* You may obtain a copy of the License at
|
|
1146
|
+
*
|
|
1147
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
1148
|
+
*
|
|
1149
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
1150
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
1151
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
1152
|
+
* See the License for the specific language governing permissions and
|
|
1153
|
+
* limitations under the License.
|
|
1154
|
+
*
|
|
1155
|
+
* Copyright 2024 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
|
|
1156
|
+
* Copyright 2024 - Finnish Meteorological Institute (FMI)
|
|
1157
|
+
* */
|
|
1158
|
+
const SNACKBAR_NAMESPACE = 'snackbar';
|
|
1159
|
+
const useSnackbarTranslation = () => useTranslation(SNACKBAR_NAMESPACE);
|
|
1160
|
+
|
|
1112
1161
|
const SnackbarWrapper = _a => {
|
|
1113
1162
|
var {
|
|
1114
1163
|
children,
|
|
@@ -1117,6 +1166,9 @@ const SnackbarWrapper = _a => {
|
|
|
1117
1166
|
id
|
|
1118
1167
|
} = _a,
|
|
1119
1168
|
props = __rest(_a, ["children", "isOpen", "onCloseSnackbar", "id"]);
|
|
1169
|
+
const {
|
|
1170
|
+
t
|
|
1171
|
+
} = useSnackbarTranslation();
|
|
1120
1172
|
return jsxs(Fragment, {
|
|
1121
1173
|
children: [children, jsx(Snackbar, Object.assign({
|
|
1122
1174
|
"data-testid": "snackbarComponent",
|
|
@@ -1127,7 +1179,7 @@ const SnackbarWrapper = _a => {
|
|
|
1127
1179
|
mouseEvent: false
|
|
1128
1180
|
},
|
|
1129
1181
|
action: jsx(CustomIconButton, Object.assign({
|
|
1130
|
-
"aria-label":
|
|
1182
|
+
"aria-label": t('snackbar-close'),
|
|
1131
1183
|
"data-testid": "snackbarCloseButton",
|
|
1132
1184
|
onClick: onCloseSnackbar,
|
|
1133
1185
|
size: "large",
|
|
@@ -1176,9 +1228,9 @@ const slice = createSlice({
|
|
|
1176
1228
|
draft,
|
|
1177
1229
|
// eslint-disable-next-line no-unused-vars
|
|
1178
1230
|
action) => {},
|
|
1179
|
-
//
|
|
1231
|
+
// triggerOpenSnackbarByListener is triggered by the listener to open the snackbar after the current snackbars have all been closed
|
|
1180
1232
|
// DO NOT CALL THIS ACTION DIRECTLY!
|
|
1181
|
-
|
|
1233
|
+
triggerOpenSnackbarByListener: (draft, action) => {
|
|
1182
1234
|
const {
|
|
1183
1235
|
snackbarContent
|
|
1184
1236
|
} = action.payload;
|
|
@@ -1234,10 +1286,10 @@ const getFirstSnackbarMessage = createSelector(getCurrentSnackbarMessages, curre
|
|
|
1234
1286
|
});
|
|
1235
1287
|
|
|
1236
1288
|
var selectors = /*#__PURE__*/Object.freeze({
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1289
|
+
__proto__: null,
|
|
1290
|
+
getSnackbarStore: getSnackbarStore,
|
|
1291
|
+
getCurrentSnackbarMessages: getCurrentSnackbarMessages,
|
|
1292
|
+
getFirstSnackbarMessage: getFirstSnackbarMessage
|
|
1241
1293
|
});
|
|
1242
1294
|
|
|
1243
1295
|
/* *
|
|
@@ -1258,7 +1310,7 @@ var selectors = /*#__PURE__*/Object.freeze({
|
|
|
1258
1310
|
* */
|
|
1259
1311
|
|
|
1260
1312
|
var types = /*#__PURE__*/Object.freeze({
|
|
1261
|
-
|
|
1313
|
+
__proto__: null
|
|
1262
1314
|
});
|
|
1263
1315
|
|
|
1264
1316
|
var wellKnownSymbol$1 = wellKnownSymbol$3;
|
|
@@ -1367,31 +1419,37 @@ if (NOT_GENERIC || INCORRECT_NAME) {
|
|
|
1367
1419
|
}
|
|
1368
1420
|
|
|
1369
1421
|
const hideTime = 4000;
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1422
|
+
const snackbarListener = createListenerMiddleware();
|
|
1423
|
+
snackbarListener.startListening({
|
|
1424
|
+
actionCreator: snackbarActions.openSnackbar,
|
|
1425
|
+
effect: ({
|
|
1426
|
+
payload
|
|
1427
|
+
}, listenerApi) => __awaiter(void 0, void 0, void 0, function* () {
|
|
1428
|
+
listenerApi.cancelActiveListeners();
|
|
1429
|
+
const {
|
|
1430
|
+
message: snackbarMessage
|
|
1431
|
+
} = payload;
|
|
1432
|
+
const currentSnackbarMessages = getCurrentSnackbarMessages(listenerApi.getState());
|
|
1433
|
+
// If there are currently opened snackbars we need to close these first
|
|
1434
|
+
if (currentSnackbarMessages.length) {
|
|
1435
|
+
listenerApi.dispatch(snackbarActions.closeSnackbar());
|
|
1383
1436
|
}
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
}
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1437
|
+
// Generate a unique id
|
|
1438
|
+
const id = `snackbar${Date.now().toString()}`;
|
|
1439
|
+
listenerApi.dispatch(snackbarActions.triggerOpenSnackbarByListener({
|
|
1440
|
+
snackbarContent: {
|
|
1441
|
+
message: snackbarMessage,
|
|
1442
|
+
id
|
|
1443
|
+
}
|
|
1444
|
+
}));
|
|
1445
|
+
// If no new snackbar is triggered cancelling this listener, hide the snackbar after X seconds
|
|
1446
|
+
yield listenerApi.delay(hideTime);
|
|
1447
|
+
const currentSnackbarMessagesOpen = getCurrentSnackbarMessages(listenerApi.getState());
|
|
1448
|
+
if (currentSnackbarMessagesOpen.length) {
|
|
1449
|
+
listenerApi.dispatch(snackbarActions.closeSnackbar());
|
|
1450
|
+
}
|
|
1451
|
+
})
|
|
1452
|
+
});
|
|
1395
1453
|
|
|
1396
1454
|
/* *
|
|
1397
1455
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1414,7 +1472,7 @@ const snackbarModuleConfig = {
|
|
|
1414
1472
|
reducersMap: {
|
|
1415
1473
|
snackbar: reducer
|
|
1416
1474
|
},
|
|
1417
|
-
|
|
1475
|
+
middlewares: [snackbarListener.middleware]
|
|
1418
1476
|
};
|
|
1419
1477
|
|
|
1420
1478
|
const SnackbarWrapperConnect = withEggs([snackbarModuleConfig])(props => {
|
|
@@ -1431,4 +1489,4 @@ const SnackbarWrapperConnect = withEggs([snackbarModuleConfig])(props => {
|
|
|
1431
1489
|
}, props));
|
|
1432
1490
|
});
|
|
1433
1491
|
|
|
1434
|
-
export { SnackbarWrapperConnect, snackbarActions, snackbarModuleConfig, reducer as snackbarReducer,
|
|
1492
|
+
export { SnackbarWrapperConnect, hideTime, snackbarActions, snackbarListener, snackbarModuleConfig, reducer as snackbarReducer, selectors as snackbarSelectors, snackbarTranslations, types as snackbarTypes };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opengeoweb/snackbar",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.17.0",
|
|
4
4
|
"description": "GeoWeb snackbar library for the opengeoweb project",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
"react-redux": "^8.1.3",
|
|
15
15
|
"@reduxjs/toolkit": "^1.9.7",
|
|
16
16
|
"@redux-eggs/core": "^2.2.0",
|
|
17
|
-
"
|
|
17
|
+
"i18next": "^23.10.1",
|
|
18
|
+
"react-i18next": "^13.5.0"
|
|
18
19
|
},
|
|
19
20
|
"peerDependencies": {
|
|
20
21
|
"react": "18"
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { Store } from '@reduxjs/toolkit';
|
|
3
|
+
interface SnackbarTranslationsWrapperProps {
|
|
4
|
+
children?: React.ReactNode;
|
|
5
|
+
}
|
|
6
|
+
export declare const DemoWrapper: React.FC<SnackbarTranslationsWrapperProps>;
|
|
7
|
+
interface ProviderProps {
|
|
8
|
+
children?: React.ReactNode;
|
|
9
|
+
store: Store;
|
|
10
|
+
}
|
|
11
|
+
export declare const DemoWrapperConnect: React.FC<ProviderProps>;
|
|
12
|
+
export {};
|
package/src/lib/index.d.ts
CHANGED
package/src/lib/store/index.d.ts
CHANGED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { SnackbarModuleStore } from './types';
|
|
2
|
+
export declare const hideTime = 4000;
|
|
3
|
+
export declare const snackbarListener: import("@reduxjs/toolkit").ListenerMiddlewareInstance<SnackbarModuleStore, import("@reduxjs/toolkit").ThunkDispatch<SnackbarModuleStore, unknown, import("redux").AnyAction>, unknown>;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { PayloadAction, Draft } from '@reduxjs/toolkit';
|
|
2
|
-
import { OpenSnackbarPayload, SnackbarItem, SnackbarState,
|
|
2
|
+
import { OpenSnackbarPayload, SnackbarItem, SnackbarState, TriggerOpenSnackbarByListenerPayload } from './types';
|
|
3
3
|
export declare const snackbarAdapter: import("@reduxjs/toolkit").EntityAdapter<SnackbarItem>;
|
|
4
4
|
export declare const initialState: SnackbarState;
|
|
5
5
|
export declare const reducer: import("redux").Reducer<SnackbarState, import("redux").AnyAction>;
|
|
6
6
|
export declare const snackbarActions: import("@reduxjs/toolkit").CaseReducerActions<{
|
|
7
7
|
openSnackbar: (draft: Draft<SnackbarState>, action: PayloadAction<OpenSnackbarPayload>) => void;
|
|
8
|
-
|
|
8
|
+
triggerOpenSnackbarByListener: (draft: Draft<SnackbarState>, action: PayloadAction<TriggerOpenSnackbarByListenerPayload>) => void;
|
|
9
9
|
closeSnackbar: (draft: Draft<SnackbarState>) => void;
|
|
10
10
|
}, "snackbar">;
|
|
11
|
-
export type SnackbarActions = ReturnType<typeof snackbarActions.openSnackbar> | ReturnType<typeof snackbarActions.
|
|
11
|
+
export type SnackbarActions = ReturnType<typeof snackbarActions.openSnackbar> | ReturnType<typeof snackbarActions.triggerOpenSnackbarByListener> | ReturnType<typeof snackbarActions.closeSnackbar>;
|
package/src/lib/store/types.d.ts
CHANGED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import i18n from 'i18next';
|
|
2
|
+
import { UseTranslationResponse } from 'react-i18next';
|
|
3
|
+
export declare const SNACKBAR_NAMESPACE = "snackbar";
|
|
4
|
+
export declare const initSnackbarI18n: () => void;
|
|
5
|
+
export declare const useSnackbarTranslation: () => UseTranslationResponse<typeof SNACKBAR_NAMESPACE, typeof i18n>;
|
package/src/lib/store/sagas.d.ts
DELETED
|
File without changes
|