PluginProbe ʕ •ᴥ•ʔ
Strong Testimonials / 3.3.4
Strong Testimonials v3.3.4
3.3.6 3.3.5 3.3.4 3.3.3 3.3.2 3.3.1 trunk 1.0.1 2.30.9 2.31.10 2.32 2.32.1 2.32.2 2.32.3 2.32.4 2.33 2.34 2.35 2.36 2.37 2.38 2.38.1 2.39 2.39.1 2.39.2 2.39.3 2.40.0 2.40.1 2.40.2 2.40.3 2.40.4 2.40.5 2.40.6 2.40.7 2.41.0 2.41.1 2.50.0 2.50.1 2.50.2 2.50.3 2.50.4 2.51.0 2.51.1 2.51.2 2.51.3 2.51.4 2.51.5 2.51.6 2.51.7 2.51.8 2.51.9 3.0.0 3.0.1 3.0.2 3.0.3 3.1.0 3.1.1 3.1.10 3.1.11 3.1.12 3.1.13 3.1.14 3.1.15 3.1.16 3.1.17 3.1.18 3.1.19 3.1.2 3.1.20 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 3.2.0 3.2.1 3.2.10 3.2.11 3.2.12 3.2.13 3.2.14 3.2.15 3.2.16 3.2.17 3.2.18 3.2.19 3.2.2 3.2.20 3.2.21 3.2.22 3.2.3 3.2.4 3.2.5 3.2.6 3.2.7 3.2.8 3.2.9 3.3.0
strong-testimonials / admin / wpchill / apps / notification-system / notification / notifications-list.jsx
strong-testimonials / admin / wpchill / apps / notification-system / notification Last commit date
notification-actions.jsx 9 months ago notifications-footer.jsx 1 year ago notifications-head.jsx 1 year ago notifications-list.jsx 1 year ago
notifications-list.jsx
90 lines
1 import { useEffect } from '@wordpress/element';
2 import { Panel, PanelBody, PanelRow, __experimentalText as Text, Button } from '@wordpress/components';
3 import { Markup } from 'interweave';
4 import { __ } from '@wordpress/i18n';
5 import { useNotificationDismiss } from '../query/useNotificationDismiss';
6 import { useQueryClient } from '@tanstack/react-query';
7 import { NotificationActions } from './notification-actions';
8 import { useWpchillState } from '../state/use-wpchill-state';
9 import { setOpenPanels, setVisibleNotifications } from '../state/actions';
10
11 export function NotificationsList() {
12 const mutation = useNotificationDismiss();
13 const queryClient = useQueryClient();
14 const { state, dispatch } = useWpchillState();
15 const { visibleNotifications, openPanels } = state;
16
17 const dismissNotification = ( id, permanent = false ) => {
18 mutation.mutate( { id, permanent }, {
19 onSettled: () => {
20 queryClient.invalidateQueries( [ 'notifications' ] );
21 },
22 } );
23 setVisibleNotifications( ( prevNotifications ) =>
24 prevNotifications.filter( ( notification ) => notification.id !== id ),
25 );
26 };
27
28 useEffect( () => {
29 visibleNotifications.forEach( ( notification ) => {
30 if ( notification.timed && openPanels.includes( notification.id ) ) {
31 setTimeout( () => {
32 dismissNotification( notification.id );
33 }, notification.timed );
34 }
35 } );
36 }, [ visibleNotifications, openPanels ] );
37
38 const handleTogglePanel = ( id ) => {
39 dispatch( setOpenPanels( [ ...openPanels, id ] ) );
40 };
41
42 return (
43 <Panel>
44 { visibleNotifications?.length === 0 && (
45 <div className="notification-log-empty">
46 <Text>{ __( 'No notifications!', 'strong-testimonials' ) }</Text>
47 </div>
48 ) }
49 { visibleNotifications?.length > 0 &&
50 visibleNotifications?.map( ( notification ) => (
51 <PanelBody
52 title={
53 <>
54 <span className="notification-source-icon-wrap">
55 <img className="notification-source-icon" src={ notification?.source?.icon || '' } alt={ notification?.source?.name || '' } />
56 </span>
57 { notification?.source?.name && (
58 <span className="notification-source-name">{ notification.source.name }</span>
59 ) }
60 <span className="notification-title"><Markup content={ notification.title } /></span>
61 { ( notification?.time_ago !== undefined || notification.time_ago ) &&
62 <span className="notification_time">
63 { notification.time_ago }
64 </span> }
65 </>
66 }
67 key={ notification?.id }
68 initialOpen={ false }
69 isOpen={ openPanels.includes( notification.id ) }
70 onToggle={ () => handleTogglePanel( notification.id ) }
71 >
72 <PanelRow className="notification-row">
73 <Text variant="muted">
74 <Markup content={ notification.message } />
75 </Text>
76 { ( notification?.dismissible === undefined || notification.dismissible ) &&
77 <Button className="notification_dismiss_button" onClick={ () => dismissNotification( notification.id ) }>
78 { __( 'Dismiss', 'strong-testimonials' ) }
79 </Button> }
80 </PanelRow>
81 { ( notification?.actions !== undefined && notification.actions.length > 0 ) &&
82 <PanelRow className="notification-row">
83 <NotificationActions actions={ notification.actions } id={ notification.id } onDismiss={ dismissNotification } />
84 </PanelRow> }
85 </PanelBody>
86 ) ) }
87 </Panel>
88 );
89 }
90