@blaze-cms/react-page-builder 0.146.0-node18-core-styles-tooltips.3 → 0.146.0-node18-core-styles-tooltips.5

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.
Files changed (30) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/lib/components/Button.js +57 -11
  3. package/lib/components/Button.js.map +1 -1
  4. package/lib/components/List/ListFactory.js.map +1 -1
  5. package/lib/components/MenuItem/MenuItemRender.js +17 -5
  6. package/lib/components/MenuItem/MenuItemRender.js.map +1 -1
  7. package/lib/hooks/helpers/StoreImages.js +61 -41
  8. package/lib/hooks/helpers/StoreImages.js.map +1 -1
  9. package/lib/variants/LiveBlogList/LiveBlogList.js +45 -48
  10. package/lib/variants/LiveBlogList/LiveBlogList.js.map +1 -1
  11. package/lib-es/components/Button.js +12 -7
  12. package/lib-es/components/Button.js.map +1 -1
  13. package/lib-es/components/List/ListFactory.js +1 -1
  14. package/lib-es/components/List/ListFactory.js.map +1 -1
  15. package/lib-es/components/MenuItem/MenuItemRender.js +16 -3
  16. package/lib-es/components/MenuItem/MenuItemRender.js.map +1 -1
  17. package/lib-es/hooks/helpers/StoreImages.js +44 -30
  18. package/lib-es/hooks/helpers/StoreImages.js.map +1 -1
  19. package/lib-es/variants/LiveBlogList/LiveBlogList.js +41 -51
  20. package/lib-es/variants/LiveBlogList/LiveBlogList.js.map +1 -1
  21. package/package.json +3 -3
  22. package/src/components/Button.js +13 -9
  23. package/src/components/List/ListFactory.js +1 -1
  24. package/src/components/MenuItem/MenuItemRender.js +17 -3
  25. package/src/hooks/helpers/StoreImages.js +33 -31
  26. package/src/variants/LiveBlogList/LiveBlogList.js +50 -46
  27. package/tests/unit/src/components/MenuItem/MenuItemRender.test.js +25 -2
  28. package/tests/unit/src/components/MenuItem/__snapshots__/MenuItem.test.js.snap +1 -0
  29. package/tests/unit/src/variants/LiveBlogList/LiveBlogList.test.js +121 -0
  30. package/tests/unit/src/variants/LiveBlogList/constants.js +10 -0
@@ -0,0 +1,121 @@
1
+ /**
2
+ * @jest-environment jsdom
3
+ */
4
+ import React from 'react';
5
+ import { render, screen, fireEvent, waitFor } from '@testing-library/react';
6
+ import '@testing-library/jest-dom/extend-expect';
7
+ import dayjs from 'dayjs';
8
+ import LiveBlogList from '../../../../../src/variants/LiveBlogList/LiveBlogList';
9
+ import { LONG_TEXT, SHORT_TEXT } from './constants';
10
+
11
+ describe('LiveBlogList', () => {
12
+ afterEach(() => {
13
+ jest.restoreAllMocks();
14
+ });
15
+
16
+ it('short content: uses date and hides toggle button', async () => {
17
+ jest.spyOn(HTMLElement.prototype, 'scrollHeight', 'get').mockReturnValue(200);
18
+ const dateProps = { date: '2025-04-15T11:26:03.863Z' };
19
+
20
+ const { container } = render(
21
+ <LiveBlogList {...dateProps}>
22
+ <h2>Short item</h2>
23
+ <p>{SHORT_TEXT}</p>
24
+ </LiveBlogList>
25
+ );
26
+
27
+ const contentElement = container.querySelector('.live-blog-content');
28
+ expect(contentElement).toBeInTheDocument();
29
+ expect(container.querySelector('.live-blog-toggle')).not.toBeInTheDocument();
30
+ const displayedDate = container.querySelector('.live-blog-date');
31
+
32
+ expect(displayedDate).toBeInTheDocument();
33
+ expect(displayedDate.textContent).not.toBe('');
34
+ });
35
+
36
+ it('long content: shows toggle button and lets you expand and collapse', async () => {
37
+ jest.spyOn(HTMLElement.prototype, 'scrollHeight', 'get').mockReturnValue(500);
38
+ const dateProps = { date: '2025-04-15T15:51:59.303Z' };
39
+
40
+ const { container } = render(
41
+ <LiveBlogList {...dateProps}>
42
+ <h3>The day so far</h3>
43
+ <div>{LONG_TEXT}</div>
44
+ </LiveBlogList>
45
+ );
46
+
47
+ const toggleButton = await screen.findByRole('button', { name: /show more/i });
48
+ expect(toggleButton).toBeInTheDocument();
49
+ const contentElement = container.querySelector('.live-blog-content');
50
+ expect(contentElement).toHaveClass('collapsed');
51
+
52
+ fireEvent.click(toggleButton);
53
+ await waitFor(() => {
54
+ expect(contentElement).not.toHaveClass('collapsed');
55
+ expect(toggleButton.textContent).toMatch(/show less/i);
56
+ });
57
+
58
+ fireEvent.click(toggleButton);
59
+ await waitFor(() => {
60
+ expect(contentElement).toHaveClass('collapsed');
61
+ expect(toggleButton.textContent).toMatch(/show more/i);
62
+ });
63
+
64
+ const displayedDate = container.querySelector('.live-blog-date');
65
+ expect(displayedDate).toBeInTheDocument();
66
+ expect(displayedDate.textContent).not.toBe('');
67
+ });
68
+
69
+ it('if date less than 1 day ago, shows relative time', () => {
70
+ const recentDate = '2025-04-15T15:52:00.000Z';
71
+ jest.useFakeTimers('modern');
72
+ jest.setSystemTime(new Date('2025-04-16T10:00:00.000Z'));
73
+
74
+ const { container } = render(
75
+ <LiveBlogList date={recentDate}>
76
+ <p>Less than 1 day old content</p>
77
+ </LiveBlogList>
78
+ );
79
+
80
+ const dateElement = container.querySelector('.live-blog-date');
81
+ expect(dateElement).toBeInTheDocument();
82
+ expect(dateElement.textContent).toMatch(/ago/i);
83
+ jest.useRealTimers();
84
+ });
85
+
86
+ it('if older than a day but within a year, shows date in DD MMM format', () => {
87
+ const fewDaysOld = '2025-04-09T00:00:00.000Z';
88
+ jest.useFakeTimers('modern');
89
+ jest.setSystemTime(new Date('2025-04-16T10:00:00.000Z'));
90
+
91
+ const { container } = render(
92
+ <LiveBlogList date={fewDaysOld}>
93
+ <p>Older than 1 day but less than a year</p>
94
+ </LiveBlogList>
95
+ );
96
+
97
+ const dateElement = container.querySelector('.live-blog-date--date');
98
+ expect(dateElement).toBeInTheDocument();
99
+ const expectedDate = dayjs(fewDaysOld).format('DD MMM');
100
+ expect(dateElement.textContent).toBe(expectedDate);
101
+ jest.useRealTimers();
102
+ });
103
+
104
+ it('if older than a year, shows date in DD MMM YYYY format', () => {
105
+ const oldDate = '2023-03-15T00:00:00.000Z';
106
+ jest.useFakeTimers('modern');
107
+ jest.setSystemTime(new Date('2025-04-16T10:00:00.000Z'));
108
+
109
+ const { container } = render(
110
+ <LiveBlogList date={oldDate}>
111
+ <p>More than 1 year old content</p>
112
+ </LiveBlogList>
113
+ );
114
+
115
+ const dateElement = container.querySelector('.live-blog-date');
116
+ expect(dateElement).toBeInTheDocument();
117
+ const expectedDate = dayjs(oldDate).format('DD MMM YYYY');
118
+ expect(dateElement.textContent).toBe(expectedDate);
119
+ jest.useRealTimers();
120
+ });
121
+ });
@@ -0,0 +1,10 @@
1
+ const LONG_TEXT = `
2
+ In case you’re just joining us, here’s a recap of the latest news and global market moves since the European market open. (You can see the earlier round-up here)
3
+ Europe’s main indexes started on a surprisingly positive note at the start of trading, as markets seemed to recover some ground from the tariff sell-off, even as it became clear that Trump had applied 145% tariffs on Chinese goods
4
+ Mining giants, supported in part by growing appetite for safe haven assets like gold, were leading the FTSE 100 – including Fresnillo, Glencore, and Anglo American
5
+ There was also some optimism emanating from the UK GDP figures, which showed the economy expanding by more than expected in February at 0.5%
6
+ `;
7
+
8
+ const SHORT_TEXT = `Winners of the 2022 World Superyacht Awards have been revealed. From the newly crowned Motor Yacht of the Year to the prestigious Voyagers Award, find out which yachts...`;
9
+
10
+ export { LONG_TEXT, SHORT_TEXT };