@reykjavik/webtools 0.3.7 → 0.3.9
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 +8 -1
- package/README.md +11 -17
- package/alertsStore/react.d.ts +7 -4
- package/alertsStore/react.js +3 -3
- package/esm/alertsStore/react.d.ts +7 -4
- package/esm/alertsStore/react.js +3 -3
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -1164,14 +1164,15 @@ import { Toast } from '../components/Toast';
|
|
|
1164
1164
|
#### `renderAlertMessage`
|
|
1165
1165
|
|
|
1166
1166
|
**Syntax:**
|
|
1167
|
-
`renderAlertMessage(message: AlertInfo['message'], linkComponent?: renderAlertMessage.LinkRenderer): ReactNode`
|
|
1167
|
+
`renderAlertMessage(message: AlertInfo['message'], linkComponent?: renderAlertMessage.LinkRenderer, onLinkClick?: (e: MouseEvent) => void): ReactNode`
|
|
1168
1168
|
|
|
1169
1169
|
Helper to render an alerter alert message, which can be a simple string or a
|
|
1170
1170
|
more complex array of strings and objects representing links and rich (bold)
|
|
1171
1171
|
text formatting.
|
|
1172
1172
|
|
|
1173
1173
|
It renders link objects as simple `<a href="" />` elements, by default, but
|
|
1174
|
-
you can optionally provide a custom `linkComponent` as a second parameter
|
|
1174
|
+
you can optionally provide a custom `linkComponent` as a second parameter,
|
|
1175
|
+
with an additional `onLinkClick` handler for the links.
|
|
1175
1176
|
|
|
1176
1177
|
Third
|
|
1177
1178
|
|
|
@@ -1181,18 +1182,11 @@ import Link from 'next/link';
|
|
|
1181
1182
|
|
|
1182
1183
|
import { AlertInfo } from '../alertsStore';
|
|
1183
1184
|
|
|
1184
|
-
export const Toast = (props: AlertInfo) =>
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
};
|
|
1190
|
-
return (
|
|
1191
|
-
<div class="toast" onClick={dismissOnLinkClick}>
|
|
1192
|
-
{renderAlertMessage(props.message, Link)}
|
|
1193
|
-
</div>
|
|
1194
|
-
);
|
|
1195
|
-
};
|
|
1185
|
+
export const Toast = (props: AlertInfo) => (
|
|
1186
|
+
<div class="toast">
|
|
1187
|
+
{renderAlertMessage(props.message, Link, props.dismiss)}
|
|
1188
|
+
</div>
|
|
1189
|
+
);
|
|
1196
1190
|
```
|
|
1197
1191
|
|
|
1198
1192
|
To build your own custom `LinkComponent`, you can use the
|
|
@@ -1209,7 +1203,7 @@ const MyWrappedLink: renderAlertMessage.LinkRenderer = (props) => {
|
|
|
1209
1203
|
|
|
1210
1204
|
// Then elsewhere in your Alert/Toast component
|
|
1211
1205
|
<div class="toast__message">
|
|
1212
|
-
{renderAlertMessage(props.message, MyWrappedLink)};
|
|
1206
|
+
{renderAlertMessage(props.message, MyWrappedLink, props.dismiss)};
|
|
1213
1207
|
</div>;
|
|
1214
1208
|
```
|
|
1215
1209
|
|
|
@@ -1220,7 +1214,7 @@ call `renderAlertMessage`, you can use the
|
|
|
1220
1214
|
#### `renderAlertMessage.withLinkRenderer`
|
|
1221
1215
|
|
|
1222
1216
|
**Syntax:**
|
|
1223
|
-
`renderAlertMessage.withLinkRenderer(LinkComponent: renderAlertMessage.LinkRenderer): (message: AlertInfo['message']):ReactNode`
|
|
1217
|
+
`renderAlertMessage.withLinkRenderer(LinkComponent: renderAlertMessage.LinkRenderer): (message: AlertInfo['message'], onLinkClick?: (e: MouseEvent) => void):ReactNode`
|
|
1224
1218
|
|
|
1225
1219
|
It returns a curried version of [`renderAlertMessage`](#renderAlertMessage)
|
|
1226
1220
|
that uses the passed `LinkComponent` for rendering links in alert messages.
|
|
@@ -1231,7 +1225,7 @@ const curriedRenderAlertMessage =
|
|
|
1231
1225
|
|
|
1232
1226
|
// Then elsewhere in your Alert/Toast component
|
|
1233
1227
|
<div class="toast__message">
|
|
1234
|
-
{renderAlertMessage(props.message,
|
|
1228
|
+
{renderAlertMessage(props.message, props.dismiss)};
|
|
1235
1229
|
</div>;
|
|
1236
1230
|
```
|
|
1237
1231
|
|
package/alertsStore/react.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import React, { ReactNode } from 'react';
|
|
1
|
+
import React, { MouseEvent, ReactNode } from 'react';
|
|
2
2
|
import { AlertMessage } from './index.js';
|
|
3
|
-
type SubsScriber<AlertInfo> = (callback: (alerts: Array<AlertInfo>,
|
|
3
|
+
type SubsScriber<AlertInfo> = (callback: (alerts: Array<AlertInfo>, meta: {
|
|
4
|
+
type: string;
|
|
5
|
+
ids: Array<string>;
|
|
6
|
+
}) => void) => () => void;
|
|
4
7
|
/**
|
|
5
8
|
* Factory function that creates a React subscription hook and a container
|
|
6
9
|
* component linked to a specific alerter store subscibe function.
|
|
@@ -21,8 +24,8 @@ export declare const makeReactSubscription: <AlertInfo>(subscribe: SubsScriber<A
|
|
|
21
24
|
* @see https://github.com/reykjavikcity/webtools/blob/v0.3/README.md#renderalertmessage
|
|
22
25
|
*/
|
|
23
26
|
export declare const renderAlertMessage: {
|
|
24
|
-
(message: AlertMessage, linkComponent?: renderAlertMessage.LinkRenderer): ReactNode;
|
|
25
|
-
withLinkRenderer(LinkCompnent: renderAlertMessage.LinkRenderer): (message: AlertMessage) => React.ReactNode;
|
|
27
|
+
(message: AlertMessage, onLinkClick?: (e: MouseEvent) => void, linkComponent?: renderAlertMessage.LinkRenderer): ReactNode;
|
|
28
|
+
withLinkRenderer(LinkCompnent: renderAlertMessage.LinkRenderer): (message: AlertMessage, onLinkClick: (e: MouseEvent) => void) => React.ReactNode;
|
|
26
29
|
};
|
|
27
30
|
export declare namespace renderAlertMessage {
|
|
28
31
|
type LinkRendererProps = Omit<Extract<AlertMessage[number], {
|
package/alertsStore/react.js
CHANGED
|
@@ -66,7 +66,7 @@ exports.makeReactSubscription = makeReactSubscription;
|
|
|
66
66
|
* @see https://github.com/reykjavikcity/webtools/blob/v0.3/README.md#renderalertmessage
|
|
67
67
|
*/
|
|
68
68
|
/*#__NO_SIDE_EFFECTS__*/
|
|
69
|
-
const renderAlertMessage = (message, linkComponent) => {
|
|
69
|
+
const renderAlertMessage = (message, onLinkClick, linkComponent) => {
|
|
70
70
|
const Link = linkComponent || 'a';
|
|
71
71
|
return typeof message === 'string'
|
|
72
72
|
? message
|
|
@@ -78,7 +78,7 @@ const renderAlertMessage = (message, linkComponent) => {
|
|
|
78
78
|
const { text, tag, ...linkProps } = part;
|
|
79
79
|
return [
|
|
80
80
|
' ',
|
|
81
|
-
react_1.default.createElement(Link, { key: i, ...linkProps }, text),
|
|
81
|
+
react_1.default.createElement(Link, { key: i, ...linkProps, onClick: onLinkClick && ((e) => onLinkClick(e)) }, text),
|
|
82
82
|
];
|
|
83
83
|
}
|
|
84
84
|
return [' ', react_1.default.createElement(part.tag, { key: i }, part.text)];
|
|
@@ -93,4 +93,4 @@ exports.renderAlertMessage = renderAlertMessage;
|
|
|
93
93
|
*/
|
|
94
94
|
/*#__NO_SIDE_EFFECTS__*/
|
|
95
95
|
exports.renderAlertMessage.withLinkRenderer =
|
|
96
|
-
(LinkCompnent) => (message) => (0, exports.renderAlertMessage)(message, LinkCompnent);
|
|
96
|
+
(LinkCompnent) => (message, onLinkClick) => (0, exports.renderAlertMessage)(message, onLinkClick, LinkCompnent);
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import React, { ReactNode } from 'react';
|
|
1
|
+
import React, { MouseEvent, ReactNode } from 'react';
|
|
2
2
|
import { AlertMessage } from './index.js';
|
|
3
|
-
type SubsScriber<AlertInfo> = (callback: (alerts: Array<AlertInfo>,
|
|
3
|
+
type SubsScriber<AlertInfo> = (callback: (alerts: Array<AlertInfo>, meta: {
|
|
4
|
+
type: string;
|
|
5
|
+
ids: Array<string>;
|
|
6
|
+
}) => void) => () => void;
|
|
4
7
|
/**
|
|
5
8
|
* Factory function that creates a React subscription hook and a container
|
|
6
9
|
* component linked to a specific alerter store subscibe function.
|
|
@@ -21,8 +24,8 @@ export declare const makeReactSubscription: <AlertInfo>(subscribe: SubsScriber<A
|
|
|
21
24
|
* @see https://github.com/reykjavikcity/webtools/blob/v0.3/README.md#renderalertmessage
|
|
22
25
|
*/
|
|
23
26
|
export declare const renderAlertMessage: {
|
|
24
|
-
(message: AlertMessage, linkComponent?: renderAlertMessage.LinkRenderer): ReactNode;
|
|
25
|
-
withLinkRenderer(LinkCompnent: renderAlertMessage.LinkRenderer): (message: AlertMessage) => React.ReactNode;
|
|
27
|
+
(message: AlertMessage, onLinkClick?: (e: MouseEvent) => void, linkComponent?: renderAlertMessage.LinkRenderer): ReactNode;
|
|
28
|
+
withLinkRenderer(LinkCompnent: renderAlertMessage.LinkRenderer): (message: AlertMessage, onLinkClick: (e: MouseEvent) => void) => React.ReactNode;
|
|
26
29
|
};
|
|
27
30
|
export declare namespace renderAlertMessage {
|
|
28
31
|
type LinkRendererProps = Omit<Extract<AlertMessage[number], {
|
package/esm/alertsStore/react.js
CHANGED
|
@@ -29,7 +29,7 @@ export const makeReactSubscription = (subscribe) => {
|
|
|
29
29
|
* @see https://github.com/reykjavikcity/webtools/blob/v0.3/README.md#renderalertmessage
|
|
30
30
|
*/
|
|
31
31
|
/*#__NO_SIDE_EFFECTS__*/
|
|
32
|
-
export const renderAlertMessage = (message, linkComponent) => {
|
|
32
|
+
export const renderAlertMessage = (message, onLinkClick, linkComponent) => {
|
|
33
33
|
const Link = linkComponent || 'a';
|
|
34
34
|
return typeof message === 'string'
|
|
35
35
|
? message
|
|
@@ -41,7 +41,7 @@ export const renderAlertMessage = (message, linkComponent) => {
|
|
|
41
41
|
const { text, tag, ...linkProps } = part;
|
|
42
42
|
return [
|
|
43
43
|
' ',
|
|
44
|
-
React.createElement(Link, { key: i, ...linkProps }, text),
|
|
44
|
+
React.createElement(Link, { key: i, ...linkProps, onClick: onLinkClick && ((e) => onLinkClick(e)) }, text),
|
|
45
45
|
];
|
|
46
46
|
}
|
|
47
47
|
return [' ', React.createElement(part.tag, { key: i }, part.text)];
|
|
@@ -55,4 +55,4 @@ export const renderAlertMessage = (message, linkComponent) => {
|
|
|
55
55
|
*/
|
|
56
56
|
/*#__NO_SIDE_EFFECTS__*/
|
|
57
57
|
renderAlertMessage.withLinkRenderer =
|
|
58
|
-
(LinkCompnent) => (message) => renderAlertMessage(message, LinkCompnent);
|
|
58
|
+
(LinkCompnent) => (message, onLinkClick) => renderAlertMessage(message, onLinkClick, LinkCompnent);
|
package/package.json
CHANGED