@telus-uds/components-base 1.74.0 → 1.75.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/CHANGELOG.md +11 -2
- package/lib/Notification/Notification.js +213 -35
- package/lib/utils/ssr-media-query/create-stylesheet/index.js +1 -2
- package/lib-module/Notification/Notification.js +216 -38
- package/lib-module/utils/ssr-media-query/create-stylesheet/index.js +1 -2
- package/package.json +2 -2
- package/src/Notification/Notification.jsx +213 -34
- package/src/utils/ssr-media-query/create-stylesheet/index.js +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,12 +1,21 @@
|
|
|
1
1
|
# Change Log - @telus-uds/components-base
|
|
2
2
|
|
|
3
|
-
This log was last generated on
|
|
3
|
+
This log was last generated on Mon, 29 Jan 2024 18:26:01 GMT and should not be manually modified.
|
|
4
4
|
|
|
5
5
|
<!-- Start content -->
|
|
6
6
|
|
|
7
|
+
## 1.75.0
|
|
8
|
+
|
|
9
|
+
Mon, 29 Jan 2024 18:26:01 GMT
|
|
10
|
+
|
|
11
|
+
### Minor changes
|
|
12
|
+
|
|
13
|
+
- Styles changed in notification component to be SSR (35577399+JoshHC@users.noreply.github.com)
|
|
14
|
+
- Bump @telus-uds/system-theme-tokens to v2.50.1
|
|
15
|
+
|
|
7
16
|
## 1.74.0
|
|
8
17
|
|
|
9
|
-
Thu, 18 Jan 2024 22:
|
|
18
|
+
Thu, 18 Jan 2024 22:55:53 GMT
|
|
10
19
|
|
|
11
20
|
### Minor changes
|
|
12
21
|
|
|
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
-
var _StyleSheet = _interopRequireDefault(require("react-native-web/dist/cjs/exports/StyleSheet"));
|
|
9
8
|
var _View = _interopRequireDefault(require("react-native-web/dist/cjs/exports/View"));
|
|
10
9
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
11
10
|
var _ThemeProvider = require("../ThemeProvider");
|
|
@@ -75,6 +74,156 @@ const selectDismissButtonContainerStyles = _ref4 => {
|
|
|
75
74
|
const selectContentContainerStyle = maxWidth => ({
|
|
76
75
|
width: maxWidth || '100%'
|
|
77
76
|
});
|
|
77
|
+
const getMediaQueryStyles = (themeTokens, themeOptions, viewport, mediaIdsRef, dismissible) => {
|
|
78
|
+
const transformedSelectContainerStyles = Object.entries(themeTokens).reduce((acc, _ref5) => {
|
|
79
|
+
let [vp, viewportTokens] = _ref5;
|
|
80
|
+
acc[vp] = selectContainerStyles({
|
|
81
|
+
...viewportTokens
|
|
82
|
+
});
|
|
83
|
+
return acc;
|
|
84
|
+
}, {});
|
|
85
|
+
const selectContainerMediaQueryStyles = (0, _utils.createMediaQueryStyles)(transformedSelectContainerStyles);
|
|
86
|
+
const {
|
|
87
|
+
ids: containerIds,
|
|
88
|
+
styles: containerStyles
|
|
89
|
+
} = _utils.StyleSheet.create({
|
|
90
|
+
container: {
|
|
91
|
+
flexDirection: 'row',
|
|
92
|
+
...selectContainerMediaQueryStyles
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
const {
|
|
96
|
+
ids: contentContainerIds,
|
|
97
|
+
styles: contentContainerStyles
|
|
98
|
+
} = _utils.StyleSheet.create({
|
|
99
|
+
contentContainer: {
|
|
100
|
+
flexDirection: 'row',
|
|
101
|
+
flexShrink: 1,
|
|
102
|
+
justifyContent: 'space-between',
|
|
103
|
+
...(0, _utils.createMediaQueryStyles)({
|
|
104
|
+
xs: {
|
|
105
|
+
width: (themeOptions === null || themeOptions === void 0 ? void 0 : themeOptions.contentMaxWidth.xs) || '100%'
|
|
106
|
+
},
|
|
107
|
+
md: {
|
|
108
|
+
width: (themeOptions === null || themeOptions === void 0 ? void 0 : themeOptions.contentMaxWidth.md) || '100%'
|
|
109
|
+
},
|
|
110
|
+
lg: {
|
|
111
|
+
width: (themeOptions === null || themeOptions === void 0 ? void 0 : themeOptions.contentMaxWidth.lg) || '100%'
|
|
112
|
+
},
|
|
113
|
+
sm: {
|
|
114
|
+
width: (themeOptions === null || themeOptions === void 0 ? void 0 : themeOptions.contentMaxWidth.sm) || '100%'
|
|
115
|
+
},
|
|
116
|
+
xl: {
|
|
117
|
+
width: (themeOptions === null || themeOptions === void 0 ? void 0 : themeOptions.contentMaxWidth.xl) || '100%'
|
|
118
|
+
}
|
|
119
|
+
})
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
const {
|
|
123
|
+
ids: staticContentContainerIds,
|
|
124
|
+
styles: staticContentContainerStyles
|
|
125
|
+
} = _utils.StyleSheet.create({
|
|
126
|
+
staticContentContainer: {
|
|
127
|
+
flexDirection: 'row',
|
|
128
|
+
flexShrink: 1
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
const {
|
|
132
|
+
ids: iconContainerIds,
|
|
133
|
+
styles: iconContainerStyles
|
|
134
|
+
} = _utils.StyleSheet.create({
|
|
135
|
+
iconContainer: selectIconContainerStyles(themeTokens[viewport])
|
|
136
|
+
});
|
|
137
|
+
const {
|
|
138
|
+
ids: dismissButtonContainerIds,
|
|
139
|
+
styles: dismissButtonContainerStyles
|
|
140
|
+
} = _utils.StyleSheet.create({
|
|
141
|
+
dismissButtonContainer: selectDismissButtonContainerStyles(themeTokens[viewport])
|
|
142
|
+
});
|
|
143
|
+
const {
|
|
144
|
+
ids: textIds,
|
|
145
|
+
styles: textStyles
|
|
146
|
+
} = _utils.StyleSheet.create({
|
|
147
|
+
text: selectTextStyles(themeTokens[viewport], themeOptions, dismissible)
|
|
148
|
+
});
|
|
149
|
+
const {
|
|
150
|
+
styles: selectIconPropsStyles
|
|
151
|
+
} = _utils.StyleSheet.create({
|
|
152
|
+
selectIconProps: selectIconProps(themeTokens[viewport])
|
|
153
|
+
});
|
|
154
|
+
const {
|
|
155
|
+
styles: selectDismissIconPropsStyles
|
|
156
|
+
} = _utils.StyleSheet.create({
|
|
157
|
+
selectDismissIconProps: selectDismissIconProps(themeTokens[viewport])
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
// eslint-disable-next-line no-param-reassign
|
|
161
|
+
mediaIdsRef.current = {
|
|
162
|
+
containerIds,
|
|
163
|
+
contentContainerIds,
|
|
164
|
+
staticContentContainerIds,
|
|
165
|
+
iconContainerIds,
|
|
166
|
+
dismissButtonContainerIds,
|
|
167
|
+
textIds
|
|
168
|
+
};
|
|
169
|
+
return {
|
|
170
|
+
containerStyles,
|
|
171
|
+
contentContainerStyles,
|
|
172
|
+
staticContentContainerStyles,
|
|
173
|
+
iconContainerStyles,
|
|
174
|
+
dismissButtonContainerStyles,
|
|
175
|
+
textStyles,
|
|
176
|
+
selectIconPropsStyles,
|
|
177
|
+
selectDismissIconPropsStyles
|
|
178
|
+
};
|
|
179
|
+
};
|
|
180
|
+
const getDefaultStyles = (themeTokens, themeOptions, maxWidth, dismissible) => ({
|
|
181
|
+
containerStyles: {
|
|
182
|
+
container: {
|
|
183
|
+
flexDirection: 'row',
|
|
184
|
+
...selectContainerStyles(themeTokens)
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
contentContainerStyles: {
|
|
188
|
+
contentContainer: {
|
|
189
|
+
flexDirection: 'row',
|
|
190
|
+
flexShrink: 1,
|
|
191
|
+
justifyContent: 'space-between',
|
|
192
|
+
...selectContentContainerStyle(maxWidth)
|
|
193
|
+
}
|
|
194
|
+
},
|
|
195
|
+
staticContentContainerStyles: {
|
|
196
|
+
staticContentContainer: {
|
|
197
|
+
flexDirection: 'row',
|
|
198
|
+
flexShrink: 1
|
|
199
|
+
}
|
|
200
|
+
},
|
|
201
|
+
iconContainerStyles: {
|
|
202
|
+
iconContainer: {
|
|
203
|
+
...selectIconContainerStyles(themeTokens)
|
|
204
|
+
}
|
|
205
|
+
},
|
|
206
|
+
dismissButtonContainerStyles: {
|
|
207
|
+
dismissButtonContainer: {
|
|
208
|
+
...selectDismissButtonContainerStyles(themeTokens)
|
|
209
|
+
}
|
|
210
|
+
},
|
|
211
|
+
textStyles: {
|
|
212
|
+
text: {
|
|
213
|
+
...selectTextStyles(themeTokens, themeOptions, dismissible)
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
selectIconPropsStyles: {
|
|
217
|
+
selectIconProps: {
|
|
218
|
+
...selectIconProps(themeTokens)
|
|
219
|
+
}
|
|
220
|
+
},
|
|
221
|
+
selectDismissIconPropsStyles: {
|
|
222
|
+
selectDismissIconProps: {
|
|
223
|
+
...selectDismissIconProps(themeTokens)
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
});
|
|
78
227
|
|
|
79
228
|
/**
|
|
80
229
|
* A banner that highlights important messages:
|
|
@@ -127,7 +276,7 @@ const selectContentContainerStyle = maxWidth => ({
|
|
|
127
276
|
* Use full-width `Notifications` to show system-based messages coming from the application, not in response to user action.
|
|
128
277
|
* Show system notifications at the top of the page, below the navigation, and expands the full-width of the viewport
|
|
129
278
|
*/
|
|
130
|
-
const Notification = /*#__PURE__*/(0, _react.forwardRef)((
|
|
279
|
+
const Notification = /*#__PURE__*/(0, _react.forwardRef)((_ref6, ref) => {
|
|
131
280
|
let {
|
|
132
281
|
children,
|
|
133
282
|
system,
|
|
@@ -136,13 +285,9 @@ const Notification = /*#__PURE__*/(0, _react.forwardRef)((_ref5, ref) => {
|
|
|
136
285
|
tokens,
|
|
137
286
|
variant,
|
|
138
287
|
...rest
|
|
139
|
-
} =
|
|
288
|
+
} = _ref6;
|
|
140
289
|
const [isDismissed, setIsDismissed] = (0, _react.useState)(false);
|
|
141
290
|
const viewport = (0, _ViewportProvider.useViewport)();
|
|
142
|
-
const themeTokens = (0, _ThemeProvider.useThemeTokens)('Notification', tokens, variant, {
|
|
143
|
-
system,
|
|
144
|
-
viewport
|
|
145
|
-
});
|
|
146
291
|
const getCopy = (0, _useCopy.default)({
|
|
147
292
|
dictionary: _dictionary.default,
|
|
148
293
|
copy
|
|
@@ -150,42 +295,89 @@ const Notification = /*#__PURE__*/(0, _react.forwardRef)((_ref5, ref) => {
|
|
|
150
295
|
const {
|
|
151
296
|
themeOptions
|
|
152
297
|
} = (0, _ThemeProvider.useTheme)();
|
|
153
|
-
const
|
|
298
|
+
const {
|
|
299
|
+
enableMediaQueryStyleSheet
|
|
300
|
+
} = themeOptions;
|
|
301
|
+
const useTokens = enableMediaQueryStyleSheet ? _ThemeProvider.useResponsiveThemeTokens : _ThemeProvider.useThemeTokens;
|
|
302
|
+
const themeTokens = useTokens('Notification', tokens, variant, {
|
|
303
|
+
system,
|
|
304
|
+
viewport
|
|
305
|
+
});
|
|
306
|
+
const maxWidth = (0, _utils.useResponsiveProp)(themeOptions === null || themeOptions === void 0 ? void 0 : themeOptions.contentMaxWidth);
|
|
307
|
+
const notificationComponentRef = (0, _react.useRef)({
|
|
308
|
+
containerStyles: {},
|
|
309
|
+
contentContainerStyles: {},
|
|
310
|
+
staticContentContainerStyles: {},
|
|
311
|
+
iconContainerStyles: {},
|
|
312
|
+
dismissButtonContainerStyles: {},
|
|
313
|
+
textStyles: {},
|
|
314
|
+
selectIconPropsStyles: {},
|
|
315
|
+
selectDismissIconPropsStyles: {}
|
|
316
|
+
});
|
|
317
|
+
const mediaIdsRef = (0, _react.useRef)({
|
|
318
|
+
containerIds: {},
|
|
319
|
+
contentContainerIds: {},
|
|
320
|
+
staticContentContainerIds: {},
|
|
321
|
+
iconContainerIds: {},
|
|
322
|
+
dismissButtonContainerIds: {},
|
|
323
|
+
textIds: {},
|
|
324
|
+
selectIconPropsIds: {},
|
|
325
|
+
selectDismissIconPropsIds: {}
|
|
326
|
+
});
|
|
327
|
+
if (enableMediaQueryStyleSheet) {
|
|
328
|
+
notificationComponentRef.current = getMediaQueryStyles(themeTokens, themeOptions, viewport, mediaIdsRef, dismissible);
|
|
329
|
+
} else {
|
|
330
|
+
notificationComponentRef.current = getDefaultStyles(themeTokens, themeOptions, maxWidth, dismissible);
|
|
331
|
+
}
|
|
154
332
|
if (isDismissed) {
|
|
155
333
|
return null;
|
|
156
334
|
}
|
|
157
|
-
const textStyles = selectTextStyles(themeTokens, themeOptions, dismissible);
|
|
158
335
|
const content = (0, _utils.wrapStringsInText)(typeof children === 'function' ? children({
|
|
159
|
-
textStyles,
|
|
336
|
+
textStyles: notificationComponentRef.current.textStyles.text,
|
|
160
337
|
variant
|
|
161
338
|
}) : children, {
|
|
162
|
-
style: textStyles
|
|
339
|
+
style: notificationComponentRef.current.textStyles.text
|
|
163
340
|
});
|
|
164
341
|
const {
|
|
165
342
|
icon: IconComponent,
|
|
166
343
|
dismissIcon: DismissIconComponent,
|
|
167
344
|
dismissIconColor
|
|
168
|
-
} = themeTokens;
|
|
345
|
+
} = enableMediaQueryStyleSheet === false ? themeTokens : themeTokens[viewport];
|
|
169
346
|
const onDismissPress = () => setIsDismissed(true);
|
|
170
347
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
|
|
171
348
|
ref: ref,
|
|
172
|
-
style:
|
|
349
|
+
style: notificationComponentRef.current.containerStyles.container,
|
|
350
|
+
dataSet: mediaIdsRef && {
|
|
351
|
+
media: mediaIdsRef.current.containerIds.container
|
|
352
|
+
},
|
|
173
353
|
...selectProps(rest),
|
|
174
354
|
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_View.default, {
|
|
175
|
-
style:
|
|
355
|
+
style: notificationComponentRef.current.contentContainerStyles.contentContainer,
|
|
356
|
+
dataSet: mediaIdsRef && {
|
|
357
|
+
media: mediaIdsRef.current.contentContainerIds.contentContainer
|
|
358
|
+
},
|
|
176
359
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_View.default, {
|
|
177
|
-
style:
|
|
360
|
+
style: notificationComponentRef.current.staticContentContainerStyles.staticContentContainer,
|
|
361
|
+
dataSet: mediaIdsRef && {
|
|
362
|
+
media: mediaIdsRef.current.staticContentContainerIds.staticContentContainer
|
|
363
|
+
},
|
|
178
364
|
children: [IconComponent && /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
|
|
179
|
-
style:
|
|
365
|
+
style: notificationComponentRef.current.iconContainerStyles.iconContainer,
|
|
366
|
+
dataSet: mediaIdsRef && {
|
|
367
|
+
media: mediaIdsRef.current.iconContainerIds.iconContainer
|
|
368
|
+
},
|
|
180
369
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(IconComponent, {
|
|
181
|
-
...selectIconProps
|
|
370
|
+
...notificationComponentRef.current.selectIconPropsStyles.selectIconProps
|
|
182
371
|
})
|
|
183
372
|
}), content && typeof content === 'function' ? content({
|
|
184
|
-
textStyles,
|
|
373
|
+
textStyles: notificationComponentRef.current.textStyles.text,
|
|
185
374
|
variant
|
|
186
375
|
}) : content]
|
|
187
376
|
}), dismissible && DismissIconComponent && /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
|
|
188
|
-
style:
|
|
377
|
+
style: notificationComponentRef.current.dismissButtonContainerStyles.dismissButtonContainer,
|
|
378
|
+
dataSet: mediaIdsRef && {
|
|
379
|
+
media: mediaIdsRef.current.dismissButtonContainerIds.dismissButtonContainer
|
|
380
|
+
},
|
|
189
381
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_IconButton.default, {
|
|
190
382
|
action: "close",
|
|
191
383
|
onPress: onDismissPress,
|
|
@@ -197,7 +389,7 @@ const Notification = /*#__PURE__*/(0, _react.forwardRef)((_ref5, ref) => {
|
|
|
197
389
|
size: 'small'
|
|
198
390
|
},
|
|
199
391
|
children: () => /*#__PURE__*/(0, _jsxRuntime.jsx)(DismissIconComponent, {
|
|
200
|
-
...selectDismissIconProps
|
|
392
|
+
...notificationComponentRef.current.selectDismissIconPropsStyles.selectDismissIconProps
|
|
201
393
|
})
|
|
202
394
|
})
|
|
203
395
|
})]
|
|
@@ -229,18 +421,4 @@ Notification.propTypes = {
|
|
|
229
421
|
variant: _utils.variantProp.propType
|
|
230
422
|
};
|
|
231
423
|
var _default = Notification;
|
|
232
|
-
exports.default = _default;
|
|
233
|
-
const staticStyles = _StyleSheet.default.create({
|
|
234
|
-
container: {
|
|
235
|
-
flexDirection: 'row'
|
|
236
|
-
},
|
|
237
|
-
contentContainer: {
|
|
238
|
-
flexDirection: 'row',
|
|
239
|
-
flexShrink: 1
|
|
240
|
-
},
|
|
241
|
-
content: {
|
|
242
|
-
flexDirection: 'row',
|
|
243
|
-
flexShrink: 1,
|
|
244
|
-
justifyContent: 'space-between'
|
|
245
|
-
}
|
|
246
|
-
});
|
|
424
|
+
exports.default = _default;
|
|
@@ -15,12 +15,11 @@ const createStyleSheet = stylesWithQuery => {
|
|
|
15
15
|
styles: {},
|
|
16
16
|
fullStyles: {}
|
|
17
17
|
};
|
|
18
|
-
let cleanStyles;
|
|
19
18
|
let ids = {};
|
|
19
|
+
const cleanStyles = (0, _common.deepClone)(stylesWithQuery);
|
|
20
20
|
Object.keys(stylesWithQuery).forEach(key => {
|
|
21
21
|
if (!(stylesWithQuery !== null && stylesWithQuery !== void 0 && stylesWithQuery[key])) return;
|
|
22
22
|
const mediaQueriesAndPseudoClasses = Object.keys(stylesWithQuery[key]).filter(_common.isMediaOrPseudo);
|
|
23
|
-
cleanStyles = (0, _common.deepClone)(stylesWithQuery);
|
|
24
23
|
mediaQueriesAndPseudoClasses.forEach(query => {
|
|
25
24
|
var _ids;
|
|
26
25
|
const css = (0, _createDeclarationBlock.default)(stylesWithQuery[key][query]);
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import React, { forwardRef, useState } from 'react';
|
|
2
|
-
import StyleSheet from "react-native-web/dist/exports/StyleSheet";
|
|
1
|
+
import React, { forwardRef, useState, useRef } from 'react';
|
|
3
2
|
import View from "react-native-web/dist/exports/View";
|
|
4
3
|
import PropTypes from 'prop-types';
|
|
5
|
-
import { applyTextStyles, useTheme, useThemeTokens } from '../ThemeProvider';
|
|
6
|
-
import { a11yProps, getTokensPropType, selectSystemProps, selectTokens, variantProp, viewProps, wrapStringsInText, useResponsiveProp } from '../utils';
|
|
4
|
+
import { applyTextStyles, useTheme, useThemeTokens, useResponsiveThemeTokens } from '../ThemeProvider';
|
|
5
|
+
import { a11yProps, getTokensPropType, selectSystemProps, selectTokens, variantProp, viewProps, wrapStringsInText, useResponsiveProp, createMediaQueryStyles, StyleSheet } from '../utils';
|
|
7
6
|
import IconButton from '../IconButton';
|
|
8
7
|
import useCopy from '../utils/useCopy';
|
|
9
8
|
import dictionary from './dictionary';
|
|
@@ -67,6 +66,156 @@ const selectDismissButtonContainerStyles = _ref4 => {
|
|
|
67
66
|
const selectContentContainerStyle = maxWidth => ({
|
|
68
67
|
width: maxWidth || '100%'
|
|
69
68
|
});
|
|
69
|
+
const getMediaQueryStyles = (themeTokens, themeOptions, viewport, mediaIdsRef, dismissible) => {
|
|
70
|
+
const transformedSelectContainerStyles = Object.entries(themeTokens).reduce((acc, _ref5) => {
|
|
71
|
+
let [vp, viewportTokens] = _ref5;
|
|
72
|
+
acc[vp] = selectContainerStyles({
|
|
73
|
+
...viewportTokens
|
|
74
|
+
});
|
|
75
|
+
return acc;
|
|
76
|
+
}, {});
|
|
77
|
+
const selectContainerMediaQueryStyles = createMediaQueryStyles(transformedSelectContainerStyles);
|
|
78
|
+
const {
|
|
79
|
+
ids: containerIds,
|
|
80
|
+
styles: containerStyles
|
|
81
|
+
} = StyleSheet.create({
|
|
82
|
+
container: {
|
|
83
|
+
flexDirection: 'row',
|
|
84
|
+
...selectContainerMediaQueryStyles
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
const {
|
|
88
|
+
ids: contentContainerIds,
|
|
89
|
+
styles: contentContainerStyles
|
|
90
|
+
} = StyleSheet.create({
|
|
91
|
+
contentContainer: {
|
|
92
|
+
flexDirection: 'row',
|
|
93
|
+
flexShrink: 1,
|
|
94
|
+
justifyContent: 'space-between',
|
|
95
|
+
...createMediaQueryStyles({
|
|
96
|
+
xs: {
|
|
97
|
+
width: (themeOptions === null || themeOptions === void 0 ? void 0 : themeOptions.contentMaxWidth.xs) || '100%'
|
|
98
|
+
},
|
|
99
|
+
md: {
|
|
100
|
+
width: (themeOptions === null || themeOptions === void 0 ? void 0 : themeOptions.contentMaxWidth.md) || '100%'
|
|
101
|
+
},
|
|
102
|
+
lg: {
|
|
103
|
+
width: (themeOptions === null || themeOptions === void 0 ? void 0 : themeOptions.contentMaxWidth.lg) || '100%'
|
|
104
|
+
},
|
|
105
|
+
sm: {
|
|
106
|
+
width: (themeOptions === null || themeOptions === void 0 ? void 0 : themeOptions.contentMaxWidth.sm) || '100%'
|
|
107
|
+
},
|
|
108
|
+
xl: {
|
|
109
|
+
width: (themeOptions === null || themeOptions === void 0 ? void 0 : themeOptions.contentMaxWidth.xl) || '100%'
|
|
110
|
+
}
|
|
111
|
+
})
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
const {
|
|
115
|
+
ids: staticContentContainerIds,
|
|
116
|
+
styles: staticContentContainerStyles
|
|
117
|
+
} = StyleSheet.create({
|
|
118
|
+
staticContentContainer: {
|
|
119
|
+
flexDirection: 'row',
|
|
120
|
+
flexShrink: 1
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
const {
|
|
124
|
+
ids: iconContainerIds,
|
|
125
|
+
styles: iconContainerStyles
|
|
126
|
+
} = StyleSheet.create({
|
|
127
|
+
iconContainer: selectIconContainerStyles(themeTokens[viewport])
|
|
128
|
+
});
|
|
129
|
+
const {
|
|
130
|
+
ids: dismissButtonContainerIds,
|
|
131
|
+
styles: dismissButtonContainerStyles
|
|
132
|
+
} = StyleSheet.create({
|
|
133
|
+
dismissButtonContainer: selectDismissButtonContainerStyles(themeTokens[viewport])
|
|
134
|
+
});
|
|
135
|
+
const {
|
|
136
|
+
ids: textIds,
|
|
137
|
+
styles: textStyles
|
|
138
|
+
} = StyleSheet.create({
|
|
139
|
+
text: selectTextStyles(themeTokens[viewport], themeOptions, dismissible)
|
|
140
|
+
});
|
|
141
|
+
const {
|
|
142
|
+
styles: selectIconPropsStyles
|
|
143
|
+
} = StyleSheet.create({
|
|
144
|
+
selectIconProps: selectIconProps(themeTokens[viewport])
|
|
145
|
+
});
|
|
146
|
+
const {
|
|
147
|
+
styles: selectDismissIconPropsStyles
|
|
148
|
+
} = StyleSheet.create({
|
|
149
|
+
selectDismissIconProps: selectDismissIconProps(themeTokens[viewport])
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
// eslint-disable-next-line no-param-reassign
|
|
153
|
+
mediaIdsRef.current = {
|
|
154
|
+
containerIds,
|
|
155
|
+
contentContainerIds,
|
|
156
|
+
staticContentContainerIds,
|
|
157
|
+
iconContainerIds,
|
|
158
|
+
dismissButtonContainerIds,
|
|
159
|
+
textIds
|
|
160
|
+
};
|
|
161
|
+
return {
|
|
162
|
+
containerStyles,
|
|
163
|
+
contentContainerStyles,
|
|
164
|
+
staticContentContainerStyles,
|
|
165
|
+
iconContainerStyles,
|
|
166
|
+
dismissButtonContainerStyles,
|
|
167
|
+
textStyles,
|
|
168
|
+
selectIconPropsStyles,
|
|
169
|
+
selectDismissIconPropsStyles
|
|
170
|
+
};
|
|
171
|
+
};
|
|
172
|
+
const getDefaultStyles = (themeTokens, themeOptions, maxWidth, dismissible) => ({
|
|
173
|
+
containerStyles: {
|
|
174
|
+
container: {
|
|
175
|
+
flexDirection: 'row',
|
|
176
|
+
...selectContainerStyles(themeTokens)
|
|
177
|
+
}
|
|
178
|
+
},
|
|
179
|
+
contentContainerStyles: {
|
|
180
|
+
contentContainer: {
|
|
181
|
+
flexDirection: 'row',
|
|
182
|
+
flexShrink: 1,
|
|
183
|
+
justifyContent: 'space-between',
|
|
184
|
+
...selectContentContainerStyle(maxWidth)
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
staticContentContainerStyles: {
|
|
188
|
+
staticContentContainer: {
|
|
189
|
+
flexDirection: 'row',
|
|
190
|
+
flexShrink: 1
|
|
191
|
+
}
|
|
192
|
+
},
|
|
193
|
+
iconContainerStyles: {
|
|
194
|
+
iconContainer: {
|
|
195
|
+
...selectIconContainerStyles(themeTokens)
|
|
196
|
+
}
|
|
197
|
+
},
|
|
198
|
+
dismissButtonContainerStyles: {
|
|
199
|
+
dismissButtonContainer: {
|
|
200
|
+
...selectDismissButtonContainerStyles(themeTokens)
|
|
201
|
+
}
|
|
202
|
+
},
|
|
203
|
+
textStyles: {
|
|
204
|
+
text: {
|
|
205
|
+
...selectTextStyles(themeTokens, themeOptions, dismissible)
|
|
206
|
+
}
|
|
207
|
+
},
|
|
208
|
+
selectIconPropsStyles: {
|
|
209
|
+
selectIconProps: {
|
|
210
|
+
...selectIconProps(themeTokens)
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
selectDismissIconPropsStyles: {
|
|
214
|
+
selectDismissIconProps: {
|
|
215
|
+
...selectDismissIconProps(themeTokens)
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
});
|
|
70
219
|
|
|
71
220
|
/**
|
|
72
221
|
* A banner that highlights important messages:
|
|
@@ -119,7 +268,7 @@ const selectContentContainerStyle = maxWidth => ({
|
|
|
119
268
|
* Use full-width `Notifications` to show system-based messages coming from the application, not in response to user action.
|
|
120
269
|
* Show system notifications at the top of the page, below the navigation, and expands the full-width of the viewport
|
|
121
270
|
*/
|
|
122
|
-
const Notification = /*#__PURE__*/forwardRef((
|
|
271
|
+
const Notification = /*#__PURE__*/forwardRef((_ref6, ref) => {
|
|
123
272
|
let {
|
|
124
273
|
children,
|
|
125
274
|
system,
|
|
@@ -128,13 +277,9 @@ const Notification = /*#__PURE__*/forwardRef((_ref5, ref) => {
|
|
|
128
277
|
tokens,
|
|
129
278
|
variant,
|
|
130
279
|
...rest
|
|
131
|
-
} =
|
|
280
|
+
} = _ref6;
|
|
132
281
|
const [isDismissed, setIsDismissed] = useState(false);
|
|
133
282
|
const viewport = useViewport();
|
|
134
|
-
const themeTokens = useThemeTokens('Notification', tokens, variant, {
|
|
135
|
-
system,
|
|
136
|
-
viewport
|
|
137
|
-
});
|
|
138
283
|
const getCopy = useCopy({
|
|
139
284
|
dictionary,
|
|
140
285
|
copy
|
|
@@ -142,42 +287,89 @@ const Notification = /*#__PURE__*/forwardRef((_ref5, ref) => {
|
|
|
142
287
|
const {
|
|
143
288
|
themeOptions
|
|
144
289
|
} = useTheme();
|
|
145
|
-
const
|
|
290
|
+
const {
|
|
291
|
+
enableMediaQueryStyleSheet
|
|
292
|
+
} = themeOptions;
|
|
293
|
+
const useTokens = enableMediaQueryStyleSheet ? useResponsiveThemeTokens : useThemeTokens;
|
|
294
|
+
const themeTokens = useTokens('Notification', tokens, variant, {
|
|
295
|
+
system,
|
|
296
|
+
viewport
|
|
297
|
+
});
|
|
298
|
+
const maxWidth = useResponsiveProp(themeOptions === null || themeOptions === void 0 ? void 0 : themeOptions.contentMaxWidth);
|
|
299
|
+
const notificationComponentRef = useRef({
|
|
300
|
+
containerStyles: {},
|
|
301
|
+
contentContainerStyles: {},
|
|
302
|
+
staticContentContainerStyles: {},
|
|
303
|
+
iconContainerStyles: {},
|
|
304
|
+
dismissButtonContainerStyles: {},
|
|
305
|
+
textStyles: {},
|
|
306
|
+
selectIconPropsStyles: {},
|
|
307
|
+
selectDismissIconPropsStyles: {}
|
|
308
|
+
});
|
|
309
|
+
const mediaIdsRef = useRef({
|
|
310
|
+
containerIds: {},
|
|
311
|
+
contentContainerIds: {},
|
|
312
|
+
staticContentContainerIds: {},
|
|
313
|
+
iconContainerIds: {},
|
|
314
|
+
dismissButtonContainerIds: {},
|
|
315
|
+
textIds: {},
|
|
316
|
+
selectIconPropsIds: {},
|
|
317
|
+
selectDismissIconPropsIds: {}
|
|
318
|
+
});
|
|
319
|
+
if (enableMediaQueryStyleSheet) {
|
|
320
|
+
notificationComponentRef.current = getMediaQueryStyles(themeTokens, themeOptions, viewport, mediaIdsRef, dismissible);
|
|
321
|
+
} else {
|
|
322
|
+
notificationComponentRef.current = getDefaultStyles(themeTokens, themeOptions, maxWidth, dismissible);
|
|
323
|
+
}
|
|
146
324
|
if (isDismissed) {
|
|
147
325
|
return null;
|
|
148
326
|
}
|
|
149
|
-
const textStyles = selectTextStyles(themeTokens, themeOptions, dismissible);
|
|
150
327
|
const content = wrapStringsInText(typeof children === 'function' ? children({
|
|
151
|
-
textStyles,
|
|
328
|
+
textStyles: notificationComponentRef.current.textStyles.text,
|
|
152
329
|
variant
|
|
153
330
|
}) : children, {
|
|
154
|
-
style: textStyles
|
|
331
|
+
style: notificationComponentRef.current.textStyles.text
|
|
155
332
|
});
|
|
156
333
|
const {
|
|
157
334
|
icon: IconComponent,
|
|
158
335
|
dismissIcon: DismissIconComponent,
|
|
159
336
|
dismissIconColor
|
|
160
|
-
} = themeTokens;
|
|
337
|
+
} = enableMediaQueryStyleSheet === false ? themeTokens : themeTokens[viewport];
|
|
161
338
|
const onDismissPress = () => setIsDismissed(true);
|
|
162
339
|
return /*#__PURE__*/_jsx(View, {
|
|
163
340
|
ref: ref,
|
|
164
|
-
style:
|
|
341
|
+
style: notificationComponentRef.current.containerStyles.container,
|
|
342
|
+
dataSet: mediaIdsRef && {
|
|
343
|
+
media: mediaIdsRef.current.containerIds.container
|
|
344
|
+
},
|
|
165
345
|
...selectProps(rest),
|
|
166
346
|
children: /*#__PURE__*/_jsxs(View, {
|
|
167
|
-
style:
|
|
347
|
+
style: notificationComponentRef.current.contentContainerStyles.contentContainer,
|
|
348
|
+
dataSet: mediaIdsRef && {
|
|
349
|
+
media: mediaIdsRef.current.contentContainerIds.contentContainer
|
|
350
|
+
},
|
|
168
351
|
children: [/*#__PURE__*/_jsxs(View, {
|
|
169
|
-
style:
|
|
352
|
+
style: notificationComponentRef.current.staticContentContainerStyles.staticContentContainer,
|
|
353
|
+
dataSet: mediaIdsRef && {
|
|
354
|
+
media: mediaIdsRef.current.staticContentContainerIds.staticContentContainer
|
|
355
|
+
},
|
|
170
356
|
children: [IconComponent && /*#__PURE__*/_jsx(View, {
|
|
171
|
-
style:
|
|
357
|
+
style: notificationComponentRef.current.iconContainerStyles.iconContainer,
|
|
358
|
+
dataSet: mediaIdsRef && {
|
|
359
|
+
media: mediaIdsRef.current.iconContainerIds.iconContainer
|
|
360
|
+
},
|
|
172
361
|
children: /*#__PURE__*/_jsx(IconComponent, {
|
|
173
|
-
...selectIconProps
|
|
362
|
+
...notificationComponentRef.current.selectIconPropsStyles.selectIconProps
|
|
174
363
|
})
|
|
175
364
|
}), content && typeof content === 'function' ? content({
|
|
176
|
-
textStyles,
|
|
365
|
+
textStyles: notificationComponentRef.current.textStyles.text,
|
|
177
366
|
variant
|
|
178
367
|
}) : content]
|
|
179
368
|
}), dismissible && DismissIconComponent && /*#__PURE__*/_jsx(View, {
|
|
180
|
-
style:
|
|
369
|
+
style: notificationComponentRef.current.dismissButtonContainerStyles.dismissButtonContainer,
|
|
370
|
+
dataSet: mediaIdsRef && {
|
|
371
|
+
media: mediaIdsRef.current.dismissButtonContainerIds.dismissButtonContainer
|
|
372
|
+
},
|
|
181
373
|
children: /*#__PURE__*/_jsx(IconButton, {
|
|
182
374
|
action: "close",
|
|
183
375
|
onPress: onDismissPress,
|
|
@@ -189,7 +381,7 @@ const Notification = /*#__PURE__*/forwardRef((_ref5, ref) => {
|
|
|
189
381
|
size: 'small'
|
|
190
382
|
},
|
|
191
383
|
children: () => /*#__PURE__*/_jsx(DismissIconComponent, {
|
|
192
|
-
...selectDismissIconProps
|
|
384
|
+
...notificationComponentRef.current.selectDismissIconPropsStyles.selectDismissIconProps
|
|
193
385
|
})
|
|
194
386
|
})
|
|
195
387
|
})]
|
|
@@ -220,18 +412,4 @@ Notification.propTypes = {
|
|
|
220
412
|
tokens: getTokensPropType('Notification'),
|
|
221
413
|
variant: variantProp.propType
|
|
222
414
|
};
|
|
223
|
-
export default Notification;
|
|
224
|
-
const staticStyles = StyleSheet.create({
|
|
225
|
-
container: {
|
|
226
|
-
flexDirection: 'row'
|
|
227
|
-
},
|
|
228
|
-
contentContainer: {
|
|
229
|
-
flexDirection: 'row',
|
|
230
|
-
flexShrink: 1
|
|
231
|
-
},
|
|
232
|
-
content: {
|
|
233
|
-
flexDirection: 'row',
|
|
234
|
-
flexShrink: 1,
|
|
235
|
-
justifyContent: 'space-between'
|
|
236
|
-
}
|
|
237
|
-
});
|
|
415
|
+
export default Notification;
|
|
@@ -8,12 +8,11 @@ const createStyleSheet = stylesWithQuery => {
|
|
|
8
8
|
styles: {},
|
|
9
9
|
fullStyles: {}
|
|
10
10
|
};
|
|
11
|
-
let cleanStyles;
|
|
12
11
|
let ids = {};
|
|
12
|
+
const cleanStyles = deepClone(stylesWithQuery);
|
|
13
13
|
Object.keys(stylesWithQuery).forEach(key => {
|
|
14
14
|
if (!(stylesWithQuery !== null && stylesWithQuery !== void 0 && stylesWithQuery[key])) return;
|
|
15
15
|
const mediaQueriesAndPseudoClasses = Object.keys(stylesWithQuery[key]).filter(isMediaOrPseudo);
|
|
16
|
-
cleanStyles = deepClone(stylesWithQuery);
|
|
17
16
|
mediaQueriesAndPseudoClasses.forEach(query => {
|
|
18
17
|
var _ids;
|
|
19
18
|
const css = createDeclarationBlock(stylesWithQuery[key][query]);
|
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"@floating-ui/react-native": "^0.8.1",
|
|
12
12
|
"@gorhom/portal": "^1.0.14",
|
|
13
13
|
"@telus-uds/system-constants": "^1.3.0",
|
|
14
|
-
"@telus-uds/system-theme-tokens": "^2.50.
|
|
14
|
+
"@telus-uds/system-theme-tokens": "^2.50.1",
|
|
15
15
|
"airbnb-prop-types": "^2.16.0",
|
|
16
16
|
"css-mediaquery": "^0.1.2",
|
|
17
17
|
"expo-linear-gradient": "^12.5.0",
|
|
@@ -85,5 +85,5 @@
|
|
|
85
85
|
"standard-engine": {
|
|
86
86
|
"skip": true
|
|
87
87
|
},
|
|
88
|
-
"version": "1.
|
|
88
|
+
"version": "1.75.0"
|
|
89
89
|
}
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
import React, { forwardRef, useState } from 'react'
|
|
2
|
-
import {
|
|
1
|
+
import React, { forwardRef, useState, useRef } from 'react'
|
|
2
|
+
import { View } from 'react-native'
|
|
3
3
|
|
|
4
4
|
import PropTypes from 'prop-types'
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
applyTextStyles,
|
|
7
|
+
useTheme,
|
|
8
|
+
useThemeTokens,
|
|
9
|
+
useResponsiveThemeTokens
|
|
10
|
+
} from '../ThemeProvider'
|
|
6
11
|
import {
|
|
7
12
|
a11yProps,
|
|
8
13
|
getTokensPropType,
|
|
@@ -11,7 +16,9 @@ import {
|
|
|
11
16
|
variantProp,
|
|
12
17
|
viewProps,
|
|
13
18
|
wrapStringsInText,
|
|
14
|
-
useResponsiveProp
|
|
19
|
+
useResponsiveProp,
|
|
20
|
+
createMediaQueryStyles,
|
|
21
|
+
StyleSheet
|
|
15
22
|
} from '../utils'
|
|
16
23
|
import IconButton from '../IconButton'
|
|
17
24
|
import useCopy from '../utils/useCopy'
|
|
@@ -61,6 +68,110 @@ const selectContentContainerStyle = (maxWidth) => ({
|
|
|
61
68
|
width: maxWidth || '100%'
|
|
62
69
|
})
|
|
63
70
|
|
|
71
|
+
const getMediaQueryStyles = (themeTokens, themeOptions, viewport, mediaIdsRef, dismissible) => {
|
|
72
|
+
const transformedSelectContainerStyles = Object.entries(themeTokens).reduce(
|
|
73
|
+
(acc, [vp, viewportTokens]) => {
|
|
74
|
+
acc[vp] = selectContainerStyles({ ...viewportTokens })
|
|
75
|
+
return acc
|
|
76
|
+
},
|
|
77
|
+
{}
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
const selectContainerMediaQueryStyles = createMediaQueryStyles(transformedSelectContainerStyles)
|
|
81
|
+
|
|
82
|
+
const { ids: containerIds, styles: containerStyles } = StyleSheet.create({
|
|
83
|
+
container: { flexDirection: 'row', ...selectContainerMediaQueryStyles }
|
|
84
|
+
})
|
|
85
|
+
|
|
86
|
+
const { ids: contentContainerIds, styles: contentContainerStyles } = StyleSheet.create({
|
|
87
|
+
contentContainer: {
|
|
88
|
+
flexDirection: 'row',
|
|
89
|
+
flexShrink: 1,
|
|
90
|
+
justifyContent: 'space-between',
|
|
91
|
+
...createMediaQueryStyles({
|
|
92
|
+
xs: { width: themeOptions?.contentMaxWidth.xs || '100%' },
|
|
93
|
+
md: { width: themeOptions?.contentMaxWidth.md || '100%' },
|
|
94
|
+
lg: { width: themeOptions?.contentMaxWidth.lg || '100%' },
|
|
95
|
+
sm: { width: themeOptions?.contentMaxWidth.sm || '100%' },
|
|
96
|
+
xl: { width: themeOptions?.contentMaxWidth.xl || '100%' }
|
|
97
|
+
})
|
|
98
|
+
}
|
|
99
|
+
})
|
|
100
|
+
|
|
101
|
+
const { ids: staticContentContainerIds, styles: staticContentContainerStyles } =
|
|
102
|
+
StyleSheet.create({
|
|
103
|
+
staticContentContainer: { flexDirection: 'row', flexShrink: 1 }
|
|
104
|
+
})
|
|
105
|
+
|
|
106
|
+
const { ids: iconContainerIds, styles: iconContainerStyles } = StyleSheet.create({
|
|
107
|
+
iconContainer: selectIconContainerStyles(themeTokens[viewport])
|
|
108
|
+
})
|
|
109
|
+
|
|
110
|
+
const { ids: dismissButtonContainerIds, styles: dismissButtonContainerStyles } =
|
|
111
|
+
StyleSheet.create({
|
|
112
|
+
dismissButtonContainer: selectDismissButtonContainerStyles(themeTokens[viewport])
|
|
113
|
+
})
|
|
114
|
+
|
|
115
|
+
const { ids: textIds, styles: textStyles } = StyleSheet.create({
|
|
116
|
+
text: selectTextStyles(themeTokens[viewport], themeOptions, dismissible)
|
|
117
|
+
})
|
|
118
|
+
|
|
119
|
+
const { styles: selectIconPropsStyles } = StyleSheet.create({
|
|
120
|
+
selectIconProps: selectIconProps(themeTokens[viewport])
|
|
121
|
+
})
|
|
122
|
+
|
|
123
|
+
const { styles: selectDismissIconPropsStyles } = StyleSheet.create({
|
|
124
|
+
selectDismissIconProps: selectDismissIconProps(themeTokens[viewport])
|
|
125
|
+
})
|
|
126
|
+
|
|
127
|
+
// eslint-disable-next-line no-param-reassign
|
|
128
|
+
mediaIdsRef.current = {
|
|
129
|
+
containerIds,
|
|
130
|
+
contentContainerIds,
|
|
131
|
+
staticContentContainerIds,
|
|
132
|
+
iconContainerIds,
|
|
133
|
+
dismissButtonContainerIds,
|
|
134
|
+
textIds
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
return {
|
|
138
|
+
containerStyles,
|
|
139
|
+
contentContainerStyles,
|
|
140
|
+
staticContentContainerStyles,
|
|
141
|
+
iconContainerStyles,
|
|
142
|
+
dismissButtonContainerStyles,
|
|
143
|
+
textStyles,
|
|
144
|
+
selectIconPropsStyles,
|
|
145
|
+
selectDismissIconPropsStyles
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
const getDefaultStyles = (themeTokens, themeOptions, maxWidth, dismissible) => ({
|
|
150
|
+
containerStyles: {
|
|
151
|
+
container: { flexDirection: 'row', ...selectContainerStyles(themeTokens) }
|
|
152
|
+
},
|
|
153
|
+
contentContainerStyles: {
|
|
154
|
+
contentContainer: {
|
|
155
|
+
flexDirection: 'row',
|
|
156
|
+
flexShrink: 1,
|
|
157
|
+
justifyContent: 'space-between',
|
|
158
|
+
...selectContentContainerStyle(maxWidth)
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
staticContentContainerStyles: {
|
|
162
|
+
staticContentContainer: { flexDirection: 'row', flexShrink: 1 }
|
|
163
|
+
},
|
|
164
|
+
iconContainerStyles: { iconContainer: { ...selectIconContainerStyles(themeTokens) } },
|
|
165
|
+
dismissButtonContainerStyles: {
|
|
166
|
+
dismissButtonContainer: { ...selectDismissButtonContainerStyles(themeTokens) }
|
|
167
|
+
},
|
|
168
|
+
textStyles: { text: { ...selectTextStyles(themeTokens, themeOptions, dismissible) } },
|
|
169
|
+
selectIconPropsStyles: { selectIconProps: { ...selectIconProps(themeTokens) } },
|
|
170
|
+
selectDismissIconPropsStyles: {
|
|
171
|
+
selectDismissIconProps: { ...selectDismissIconProps(themeTokens) }
|
|
172
|
+
}
|
|
173
|
+
})
|
|
174
|
+
|
|
64
175
|
/**
|
|
65
176
|
* A banner that highlights important messages:
|
|
66
177
|
* - Status message to show there is an error or outage of services
|
|
@@ -116,43 +227,121 @@ const Notification = forwardRef(
|
|
|
116
227
|
({ children, system, dismissible, copy = 'en', tokens, variant, ...rest }, ref) => {
|
|
117
228
|
const [isDismissed, setIsDismissed] = useState(false)
|
|
118
229
|
const viewport = useViewport()
|
|
119
|
-
const themeTokens = useThemeTokens('Notification', tokens, variant, { system, viewport })
|
|
120
230
|
const getCopy = useCopy({ dictionary, copy })
|
|
231
|
+
|
|
121
232
|
const { themeOptions } = useTheme()
|
|
122
|
-
const
|
|
233
|
+
const { enableMediaQueryStyleSheet } = themeOptions
|
|
234
|
+
const useTokens = enableMediaQueryStyleSheet ? useResponsiveThemeTokens : useThemeTokens
|
|
235
|
+
const themeTokens = useTokens('Notification', tokens, variant, { system, viewport })
|
|
236
|
+
const maxWidth = useResponsiveProp(themeOptions?.contentMaxWidth)
|
|
237
|
+
|
|
238
|
+
const notificationComponentRef = useRef({
|
|
239
|
+
containerStyles: {},
|
|
240
|
+
contentContainerStyles: {},
|
|
241
|
+
staticContentContainerStyles: {},
|
|
242
|
+
iconContainerStyles: {},
|
|
243
|
+
dismissButtonContainerStyles: {},
|
|
244
|
+
textStyles: {},
|
|
245
|
+
selectIconPropsStyles: {},
|
|
246
|
+
selectDismissIconPropsStyles: {}
|
|
247
|
+
})
|
|
248
|
+
const mediaIdsRef = useRef({
|
|
249
|
+
containerIds: {},
|
|
250
|
+
contentContainerIds: {},
|
|
251
|
+
staticContentContainerIds: {},
|
|
252
|
+
iconContainerIds: {},
|
|
253
|
+
dismissButtonContainerIds: {},
|
|
254
|
+
textIds: {},
|
|
255
|
+
selectIconPropsIds: {},
|
|
256
|
+
selectDismissIconPropsIds: {}
|
|
257
|
+
})
|
|
258
|
+
|
|
259
|
+
if (enableMediaQueryStyleSheet) {
|
|
260
|
+
notificationComponentRef.current = getMediaQueryStyles(
|
|
261
|
+
themeTokens,
|
|
262
|
+
themeOptions,
|
|
263
|
+
viewport,
|
|
264
|
+
mediaIdsRef,
|
|
265
|
+
dismissible
|
|
266
|
+
)
|
|
267
|
+
} else {
|
|
268
|
+
notificationComponentRef.current = getDefaultStyles(
|
|
269
|
+
themeTokens,
|
|
270
|
+
themeOptions,
|
|
271
|
+
maxWidth,
|
|
272
|
+
dismissible
|
|
273
|
+
)
|
|
274
|
+
}
|
|
123
275
|
|
|
124
276
|
if (isDismissed) {
|
|
125
277
|
return null
|
|
126
278
|
}
|
|
127
279
|
|
|
128
|
-
const textStyles = selectTextStyles(themeTokens, themeOptions, dismissible)
|
|
129
|
-
|
|
130
280
|
const content = wrapStringsInText(
|
|
131
|
-
typeof children === 'function'
|
|
132
|
-
|
|
281
|
+
typeof children === 'function'
|
|
282
|
+
? children({ textStyles: notificationComponentRef.current.textStyles.text, variant })
|
|
283
|
+
: children,
|
|
284
|
+
{ style: notificationComponentRef.current.textStyles.text }
|
|
133
285
|
)
|
|
134
286
|
|
|
135
|
-
const {
|
|
287
|
+
const {
|
|
288
|
+
icon: IconComponent,
|
|
289
|
+
dismissIcon: DismissIconComponent,
|
|
290
|
+
dismissIconColor
|
|
291
|
+
} = enableMediaQueryStyleSheet === false ? themeTokens : themeTokens[viewport]
|
|
136
292
|
|
|
137
293
|
const onDismissPress = () => setIsDismissed(true)
|
|
138
294
|
|
|
139
295
|
return (
|
|
140
296
|
<View
|
|
141
297
|
ref={ref}
|
|
142
|
-
style={
|
|
298
|
+
style={notificationComponentRef.current.containerStyles.container}
|
|
299
|
+
dataSet={mediaIdsRef && { media: mediaIdsRef.current.containerIds.container }}
|
|
143
300
|
{...selectProps(rest)}
|
|
144
301
|
>
|
|
145
|
-
<View
|
|
146
|
-
|
|
302
|
+
<View
|
|
303
|
+
style={notificationComponentRef.current.contentContainerStyles.contentContainer}
|
|
304
|
+
dataSet={
|
|
305
|
+
mediaIdsRef && { media: mediaIdsRef.current.contentContainerIds.contentContainer }
|
|
306
|
+
}
|
|
307
|
+
>
|
|
308
|
+
<View
|
|
309
|
+
style={
|
|
310
|
+
notificationComponentRef.current.staticContentContainerStyles.staticContentContainer
|
|
311
|
+
}
|
|
312
|
+
dataSet={
|
|
313
|
+
mediaIdsRef && {
|
|
314
|
+
media: mediaIdsRef.current.staticContentContainerIds.staticContentContainer
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
>
|
|
147
318
|
{IconComponent && (
|
|
148
|
-
<View
|
|
149
|
-
|
|
319
|
+
<View
|
|
320
|
+
style={notificationComponentRef.current.iconContainerStyles.iconContainer}
|
|
321
|
+
dataSet={
|
|
322
|
+
mediaIdsRef && { media: mediaIdsRef.current.iconContainerIds.iconContainer }
|
|
323
|
+
}
|
|
324
|
+
>
|
|
325
|
+
<IconComponent
|
|
326
|
+
{...notificationComponentRef.current.selectIconPropsStyles.selectIconProps}
|
|
327
|
+
/>
|
|
150
328
|
</View>
|
|
151
329
|
)}
|
|
152
|
-
{content && typeof content === 'function'
|
|
330
|
+
{content && typeof content === 'function'
|
|
331
|
+
? content({ textStyles: notificationComponentRef.current.textStyles.text, variant })
|
|
332
|
+
: content}
|
|
153
333
|
</View>
|
|
154
334
|
{dismissible && DismissIconComponent && (
|
|
155
|
-
<View
|
|
335
|
+
<View
|
|
336
|
+
style={
|
|
337
|
+
notificationComponentRef.current.dismissButtonContainerStyles.dismissButtonContainer
|
|
338
|
+
}
|
|
339
|
+
dataSet={
|
|
340
|
+
mediaIdsRef && {
|
|
341
|
+
media: mediaIdsRef.current.dismissButtonContainerIds.dismissButtonContainer
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
>
|
|
156
345
|
<IconButton
|
|
157
346
|
action="close"
|
|
158
347
|
onPress={onDismissPress}
|
|
@@ -161,7 +350,12 @@ const Notification = forwardRef(
|
|
|
161
350
|
accessibilityLabel={getCopy('dismiss')}
|
|
162
351
|
variant={{ inverse: dismissIconColor === '#ffffff', size: 'small' }}
|
|
163
352
|
>
|
|
164
|
-
{() =>
|
|
353
|
+
{() => (
|
|
354
|
+
<DismissIconComponent
|
|
355
|
+
{...notificationComponentRef.current.selectDismissIconPropsStyles
|
|
356
|
+
.selectDismissIconProps}
|
|
357
|
+
/>
|
|
358
|
+
)}
|
|
165
359
|
</IconButton>
|
|
166
360
|
</View>
|
|
167
361
|
)}
|
|
@@ -198,18 +392,3 @@ Notification.propTypes = {
|
|
|
198
392
|
}
|
|
199
393
|
|
|
200
394
|
export default Notification
|
|
201
|
-
|
|
202
|
-
const staticStyles = StyleSheet.create({
|
|
203
|
-
container: {
|
|
204
|
-
flexDirection: 'row'
|
|
205
|
-
},
|
|
206
|
-
contentContainer: {
|
|
207
|
-
flexDirection: 'row',
|
|
208
|
-
flexShrink: 1
|
|
209
|
-
},
|
|
210
|
-
content: {
|
|
211
|
-
flexDirection: 'row',
|
|
212
|
-
flexShrink: 1,
|
|
213
|
-
justifyContent: 'space-between'
|
|
214
|
-
}
|
|
215
|
-
})
|
|
@@ -5,13 +5,14 @@ import { isMediaOrPseudo, deepClone, createCssRule } from '../utils/common'
|
|
|
5
5
|
|
|
6
6
|
const createStyleSheet = (stylesWithQuery) => {
|
|
7
7
|
if (!stylesWithQuery) return { ids: {}, styles: {}, fullStyles: {} }
|
|
8
|
-
|
|
8
|
+
|
|
9
9
|
let ids = {}
|
|
10
|
+
const cleanStyles = deepClone(stylesWithQuery)
|
|
11
|
+
|
|
10
12
|
Object.keys(stylesWithQuery).forEach((key) => {
|
|
11
13
|
if (!stylesWithQuery?.[key]) return
|
|
12
14
|
|
|
13
15
|
const mediaQueriesAndPseudoClasses = Object.keys(stylesWithQuery[key]).filter(isMediaOrPseudo)
|
|
14
|
-
cleanStyles = deepClone(stylesWithQuery)
|
|
15
16
|
mediaQueriesAndPseudoClasses.forEach((query) => {
|
|
16
17
|
const css = createDeclarationBlock(stylesWithQuery[key][query])
|
|
17
18
|
const stringHash = `rnmq-${hash(`${key}${query}${css}`)}`
|