react-datocms 4.1.3 → 4.2.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.
Files changed (115) hide show
  1. package/README.md +34 -6
  2. package/dist/cjs/Image/index.js +68 -74
  3. package/dist/cjs/Image/index.js.map +1 -1
  4. package/dist/cjs/Image/useInView.js +3 -14
  5. package/dist/cjs/Image/useInView.js.map +1 -1
  6. package/dist/cjs/Seo/index.js +1 -1
  7. package/dist/cjs/Seo/nextUtils.js +28 -49
  8. package/dist/cjs/Seo/nextUtils.js.map +1 -1
  9. package/dist/cjs/Seo/remixUtils.js +6 -18
  10. package/dist/cjs/Seo/remixUtils.js.map +1 -1
  11. package/dist/cjs/Seo/renderMetaTags.js +6 -18
  12. package/dist/cjs/Seo/renderMetaTags.js.map +1 -1
  13. package/dist/cjs/Seo/renderMetaTagsToString.js +7 -7
  14. package/dist/cjs/Seo/renderMetaTagsToString.js.map +1 -1
  15. package/dist/cjs/Seo/types.js +31 -51
  16. package/dist/cjs/Seo/types.js.map +1 -1
  17. package/dist/cjs/StructuredText/index.js +40 -52
  18. package/dist/cjs/StructuredText/index.js.map +1 -1
  19. package/dist/cjs/VideoPlayer/index.js +67 -0
  20. package/dist/cjs/VideoPlayer/index.js.map +1 -0
  21. package/dist/cjs/index.js +4 -2
  22. package/dist/cjs/index.js.map +1 -1
  23. package/dist/cjs/useQuerySubscription/index.js +25 -70
  24. package/dist/cjs/useQuerySubscription/index.js.map +1 -1
  25. package/dist/cjs/useSiteSearch/index.js +71 -123
  26. package/dist/cjs/useSiteSearch/index.js.map +1 -1
  27. package/dist/cjs/useVideoPlayer/index.js +31 -0
  28. package/dist/cjs/useVideoPlayer/index.js.map +1 -0
  29. package/dist/esm/Image/index.js +62 -68
  30. package/dist/esm/Image/index.js.map +1 -1
  31. package/dist/esm/Seo/nextUtils.js +26 -47
  32. package/dist/esm/Seo/nextUtils.js.map +1 -1
  33. package/dist/esm/Seo/remixUtils.js +5 -17
  34. package/dist/esm/Seo/remixUtils.js.map +1 -1
  35. package/dist/esm/Seo/renderMetaTags.js +4 -16
  36. package/dist/esm/Seo/renderMetaTags.js.map +1 -1
  37. package/dist/esm/Seo/renderMetaTagsToString.js +6 -6
  38. package/dist/esm/Seo/renderMetaTagsToString.js.map +1 -1
  39. package/dist/esm/Seo/types.js +30 -50
  40. package/dist/esm/Seo/types.js.map +1 -1
  41. package/dist/esm/StructuredText/index.js +33 -45
  42. package/dist/esm/StructuredText/index.js.map +1 -1
  43. package/dist/esm/VideoPlayer/index.js +38 -0
  44. package/dist/esm/VideoPlayer/index.js.map +1 -0
  45. package/dist/esm/index.js +3 -1
  46. package/dist/esm/index.js.map +1 -1
  47. package/dist/esm/useQuerySubscription/index.js +22 -67
  48. package/dist/esm/useQuerySubscription/index.js.map +1 -1
  49. package/dist/esm/useSiteSearch/index.js +65 -117
  50. package/dist/esm/useSiteSearch/index.js.map +1 -1
  51. package/dist/esm/useVideoPlayer/index.js +27 -0
  52. package/dist/esm/useVideoPlayer/index.js.map +1 -0
  53. package/dist/types/Seo/nextUtils.d.ts +1 -1
  54. package/dist/types/Seo/remixUtils.d.ts +1 -1
  55. package/dist/types/Seo/renderMetaTags.d.ts +1 -1
  56. package/dist/types/Seo/renderMetaTagsToString.d.ts +1 -1
  57. package/dist/types/StructuredText/index.d.ts +2 -2
  58. package/dist/types/VideoPlayer/index.d.ts +26 -0
  59. package/dist/types/index.d.ts +3 -1
  60. package/dist/types/useVideoPlayer/index.d.ts +17 -0
  61. package/package.json +41 -51
  62. package/src/Image/__tests__/__snapshots__/index.test.tsx.snap +91 -91
  63. package/src/Image/__tests__/index.test.tsx +2 -2
  64. package/src/Image/index.tsx +11 -9
  65. package/src/Seo/__tests__/__snapshots__/index.test.tsx.snap +53 -53
  66. package/src/Seo/__tests__/index.test.tsx +1 -1
  67. package/src/Seo/nextUtils.ts +1 -1
  68. package/src/Seo/remixUtils.ts +1 -1
  69. package/src/Seo/renderMetaTags.tsx +1 -1
  70. package/src/Seo/renderMetaTagsToString.tsx +1 -1
  71. package/src/StructuredText/__tests__/__snapshots__/index.test.tsx.snap +58 -58
  72. package/src/StructuredText/__tests__/index.test.tsx +5 -5
  73. package/src/StructuredText/index.tsx +10 -10
  74. package/src/VideoPlayer/index.tsx +107 -0
  75. package/src/{setupTests.ts → __tests__/setup.ts} +4 -1
  76. package/src/index.ts +4 -1
  77. package/src/useQuerySubscription/index.ts +6 -6
  78. package/src/useVideoPlayer/__tests__/index.test.tsx +98 -0
  79. package/src/useVideoPlayer/index.ts +68 -0
  80. package/dist/cjs/Image/__tests__/index.test.js +0 -99
  81. package/dist/cjs/Image/__tests__/index.test.js.map +0 -1
  82. package/dist/cjs/Seo/__tests__/index.test.js +0 -330
  83. package/dist/cjs/Seo/__tests__/index.test.js.map +0 -1
  84. package/dist/cjs/StructuredText/__tests__/index.test.js +0 -243
  85. package/dist/cjs/StructuredText/__tests__/index.test.js.map +0 -1
  86. package/dist/cjs/setupTests.js +0 -11
  87. package/dist/cjs/setupTests.js.map +0 -1
  88. package/dist/esm/Image/__tests__/index.test.d.ts +0 -1
  89. package/dist/esm/Image/__tests__/index.test.js +0 -74
  90. package/dist/esm/Image/__tests__/index.test.js.map +0 -1
  91. package/dist/esm/Image/index.d.ts +0 -93
  92. package/dist/esm/Image/useInView.d.ts +0 -1
  93. package/dist/esm/Seo/__tests__/index.test.d.ts +0 -1
  94. package/dist/esm/Seo/__tests__/index.test.js +0 -305
  95. package/dist/esm/Seo/__tests__/index.test.js.map +0 -1
  96. package/dist/esm/Seo/index.d.ts +0 -5
  97. package/dist/esm/Seo/nextUtils.d.ts +0 -48
  98. package/dist/esm/Seo/remixUtils.d.ts +0 -6
  99. package/dist/esm/Seo/renderMetaTags.d.ts +0 -3
  100. package/dist/esm/Seo/renderMetaTagsToString.d.ts +0 -2
  101. package/dist/esm/Seo/types.d.ts +0 -55
  102. package/dist/esm/StructuredText/__tests__/index.test.d.ts +0 -1
  103. package/dist/esm/StructuredText/__tests__/index.test.js +0 -218
  104. package/dist/esm/StructuredText/__tests__/index.test.js.map +0 -1
  105. package/dist/esm/StructuredText/index.d.ts +0 -52
  106. package/dist/esm/index.d.ts +0 -5
  107. package/dist/esm/setupTests.d.ts +0 -1
  108. package/dist/esm/setupTests.js +0 -6
  109. package/dist/esm/setupTests.js.map +0 -1
  110. package/dist/esm/useQuerySubscription/index.d.ts +0 -20
  111. package/dist/esm/useSiteSearch/index.d.ts +0 -83
  112. package/dist/types/Image/__tests__/index.test.d.ts +0 -1
  113. package/dist/types/Seo/__tests__/index.test.d.ts +0 -1
  114. package/dist/types/StructuredText/__tests__/index.test.d.ts +0 -1
  115. package/dist/types/setupTests.d.ts +0 -1
@@ -0,0 +1,107 @@
1
+ 'use client';
2
+
3
+ // This file defines a React component that easily displays a video player using
4
+ // data stored on DatoCMS and retrieved via DatoCMS GraphQL API. The component
5
+ // is a thin wrapper around the [React component made available by MUX][1].
6
+ //
7
+ // The React player written by MUX is an adapter for a web component.
8
+ //
9
+ // [1]: https://www.mux.com/player
10
+
11
+ import React, { forwardRef } from 'react';
12
+
13
+ // We use and extend Typescript types defined in the MUX player.
14
+
15
+ import type MuxPlayerElement from '@mux/mux-player';
16
+ import { type MuxPlayerProps } from '@mux/mux-player-react/.';
17
+
18
+ // React MUX player is made available in two flavours: eager and lazy loaded. We
19
+ // choose to use the lazy version to avoid loading the web component uselessly.
20
+ // MUX player lazy version loads internally the eager version using
21
+ // `React.lazy()`.
22
+
23
+ import MuxPlayer from '@mux/mux-player-react/lazy';
24
+
25
+ // The core of this component is the `useVideoPlayer` hook: it takes
26
+ // data from DatoCMS GraphQL API and returns props as expected by the
27
+ // `<MuxPlayer />` component.
28
+
29
+ import { useVideoPlayer } from '../useVideoPlayer/index.js';
30
+
31
+ type Maybe<T> = T | null;
32
+ type Possibly<T> = Maybe<T> | undefined;
33
+
34
+ // `Video` represents a fragment of data regarding a video as returned from
35
+ // DatoCMS GraphQL API.
36
+
37
+ export type Video = {
38
+ /** Title attribute (`title`) for the video */
39
+ title?: Possibly<string>;
40
+ /** The height of the video */
41
+ height?: Possibly<number>;
42
+ /** The width of the video */
43
+ width?: Possibly<number>;
44
+ /** The MUX playbaack ID */
45
+ muxPlaybackId?: Possibly<string>;
46
+ /** The MUX playbaack ID */
47
+ playbackId?: Possibly<string>;
48
+ /** A data: URI containing a blurhash for the video */
49
+ blurUpThumb?: Possibly<string>;
50
+ /** Other data can be passed, but they have no effect on rendering the player */
51
+ // biome-ignore lint/suspicious/noExplicitAny: we intentionally want to allow to add any other value to this video object
52
+ [k: string]: any;
53
+ };
54
+
55
+ // The component supports [all the props][1] allowed by the `<MuxPlayer />`
56
+ // component, plus the `data` prop, explicitly meant to pass data in the shape
57
+ // returned from the DatoCMS API.
58
+ //
59
+ // [1]: https://github.com/muxinc/elements/blob/main/packages/mux-player-react/REFERENCE.md
60
+
61
+ export type VideoPlayerProps = MuxPlayerProps & {
62
+ /** The actual response you get from a DatoCMS `video` GraphQL query */
63
+ data?: Video;
64
+ };
65
+
66
+ export const VideoPlayer: (
67
+ props: VideoPlayerProps,
68
+ ) => ReturnType<typeof MuxPlayer> = forwardRef<
69
+ MuxPlayerElement,
70
+ VideoPlayerProps
71
+ >((props, ref) => {
72
+ const {
73
+ data = {},
74
+ disableCookies = true,
75
+ preload = "metadata",
76
+ style: styleFromProps,
77
+ ...rest
78
+ } = props;
79
+
80
+ const {
81
+ title,
82
+ playbackId,
83
+ style: styleFromHook,
84
+ placeholder,
85
+ } = useVideoPlayer({
86
+ data,
87
+ });
88
+
89
+ const style = {
90
+ ...styleFromHook,
91
+ ...styleFromProps,
92
+ };
93
+
94
+ return (
95
+ <MuxPlayer
96
+ ref={ref}
97
+ streamType="on-demand"
98
+ preload={preload}
99
+ title={title}
100
+ disableCookies={disableCookies}
101
+ playbackId={playbackId}
102
+ style={style}
103
+ placeholder={placeholder}
104
+ {...rest}
105
+ />
106
+ );
107
+ });
@@ -1,5 +1,8 @@
1
- import { configure } from 'enzyme';
2
1
  import Adapter from '@wojtekmaj/enzyme-adapter-react-17';
2
+ import { configure } from 'enzyme';
3
+ import ResizeObserver from 'resize-observer-polyfill';
4
+
5
+ global.ResizeObserver = ResizeObserver;
3
6
 
4
7
  configure({
5
8
  adapter: new Adapter(),
package/src/index.ts CHANGED
@@ -1,5 +1,8 @@
1
1
  export * from './Image/index.js';
2
2
  export * from './Seo/index.js';
3
- export * from './useQuerySubscription/index.js';
3
+ export * from './VideoPlayer/index.js';
4
4
  export * from './StructuredText/index.js';
5
+
6
+ export * from './useQuerySubscription/index.js';
5
7
  export * from './useSiteSearch/index.js';
8
+ export * from './useVideoPlayer/index.js';
@@ -1,16 +1,14 @@
1
1
  'use client';
2
2
 
3
- import { useState } from 'react';
4
3
  import {
5
- subscribeToQuery,
6
- UnsubscribeFn,
7
4
  ChannelErrorData,
8
5
  ConnectionStatus,
9
6
  Options,
7
+ UnsubscribeFn,
8
+ subscribeToQuery,
10
9
  } from 'datocms-listen';
11
- import {
12
- useDeepCompareEffectNoCheck as useDeepCompareEffect,
13
- } from 'use-deep-compare-effect';
10
+ import { useState } from 'react';
11
+ import { useDeepCompareEffectNoCheck as useDeepCompareEffect } from 'use-deep-compare-effect';
14
12
 
15
13
  export type SubscribeToQueryOptions<QueryResult, QueryVariables> = Omit<
16
14
  Options<QueryResult, QueryVariables>,
@@ -36,7 +34,9 @@ export type QueryListenerOptions<QueryResult, QueryVariables> =
36
34
  | DisabledQueryListenerOptions<QueryResult, QueryVariables>;
37
35
 
38
36
  export function useQuerySubscription<
37
+ // biome-ignore lint/suspicious/noExplicitAny: <explanation>
39
38
  QueryResult = any,
39
+ // biome-ignore lint/suspicious/noExplicitAny: <explanation>
40
40
  QueryVariables = Record<string, any>,
41
41
  >(options: QueryListenerOptions<QueryResult, QueryVariables>) {
42
42
  const { enabled, initialData, ...other } = options;
@@ -0,0 +1,98 @@
1
+ import { useVideoPlayer } from '..';
2
+
3
+ describe('useVideoPlayer', () => {
4
+ describe('when data object', () => {
5
+ describe('is complete', () => {
6
+ const data = {
7
+ muxPlaybackId: 'ip028MAXF026dU900bKiyNDttjonw7A1dFY',
8
+ title: 'Title',
9
+ width: 1080,
10
+ height: 1920,
11
+ blurUpThumb:
12
+ 'data:image/bmp;base64,Qk0eAAAAAAAAABoAAAAMAAAAAQABAAEAGAAAAP8A',
13
+ };
14
+
15
+ it('unwraps data into props ready for MUX player', () => {
16
+ expect(useVideoPlayer({ data })).toStrictEqual({
17
+ playbackId: 'ip028MAXF026dU900bKiyNDttjonw7A1dFY',
18
+ title: 'Title',
19
+ style: {
20
+ aspectRatio: '1080 / 1920',
21
+ },
22
+ placeholder:
23
+ 'data:image/bmp;base64,Qk0eAAAAAAAAABoAAAAMAAAAAQABAAEAGAAAAP8A',
24
+ });
25
+ });
26
+ });
27
+
28
+ describe('contains `muxPlaybackId`', () => {
29
+ const data = {
30
+ muxPlaybackId: 'ip028MAXF026dU900bKiyNDttjonw7A1dFY',
31
+ };
32
+
33
+ it('uses it for `playbackId`', () => {
34
+ expect(useVideoPlayer({ data })).toStrictEqual({
35
+ playbackId: 'ip028MAXF026dU900bKiyNDttjonw7A1dFY',
36
+ });
37
+ });
38
+ });
39
+
40
+ describe('contains `playbackId`', () => {
41
+ const data = {
42
+ playbackId: 'ip028MAXF026dU900bKiyNDttjonw7A1dFY',
43
+ };
44
+
45
+ it('uses it for `playbackId`', () => {
46
+ expect(useVideoPlayer({ data })).toStrictEqual({
47
+ playbackId: 'ip028MAXF026dU900bKiyNDttjonw7A1dFY',
48
+ });
49
+ });
50
+ });
51
+
52
+ describe('lacks of `width` and `height` values', () => {
53
+ const data = {
54
+ muxPlaybackId: 'ip028MAXF026dU900bKiyNDttjonw7A1dFY',
55
+ title: 'Title',
56
+ };
57
+
58
+ it('avoids adding aspect ratio', () => {
59
+ expect(useVideoPlayer({ data })).toStrictEqual({
60
+ playbackId: 'ip028MAXF026dU900bKiyNDttjonw7A1dFY',
61
+ title: 'Title',
62
+ });
63
+ });
64
+ });
65
+
66
+ describe('lacks of `title` value', () => {
67
+ const data = {
68
+ muxPlaybackId: 'ip028MAXF026dU900bKiyNDttjonw7A1dFY',
69
+ width: 1080,
70
+ height: 1920,
71
+ };
72
+
73
+ it('avoids adding a title', () => {
74
+ expect(useVideoPlayer({ data })).toStrictEqual({
75
+ playbackId: 'ip028MAXF026dU900bKiyNDttjonw7A1dFY',
76
+ style: {
77
+ aspectRatio: '1080 / 1920',
78
+ },
79
+ });
80
+ });
81
+ });
82
+
83
+ describe('has other keys', () => {
84
+ const data = {
85
+ muxPlaybackId: 'ip028MAXF026dU900bKiyNDttjonw7A1dFY',
86
+ title: 'Title',
87
+ something: 'Else',
88
+ };
89
+
90
+ it('ignores them', () => {
91
+ expect(useVideoPlayer({ data })).toStrictEqual({
92
+ playbackId: 'ip028MAXF026dU900bKiyNDttjonw7A1dFY',
93
+ title: 'Title',
94
+ });
95
+ });
96
+ });
97
+ });
98
+ });
@@ -0,0 +1,68 @@
1
+ import { MuxPlayerProps } from '@mux/mux-player-react/.';
2
+
3
+ import { Video } from '../VideoPlayer';
4
+
5
+ type Maybe<T> = T | null;
6
+ type Possibly<T> = Maybe<T> | undefined;
7
+
8
+ const computedTitle = (title: Maybe<string> | undefined) => {
9
+ return title ? { title } : undefined;
10
+ };
11
+
12
+ const computedPlaybackId = (
13
+ muxPlaybackId: Possibly<string>,
14
+ playbackId: Possibly<string>,
15
+ ) => {
16
+ if (!(muxPlaybackId || playbackId)) return undefined;
17
+
18
+ return { playbackId: `${muxPlaybackId || playbackId}` };
19
+ };
20
+
21
+ const computedStyle = (
22
+ width: Possibly<number>,
23
+ height: Possibly<number>,
24
+ ) => {
25
+ if (!(width && height)) return undefined;
26
+
27
+ return {
28
+ style: {
29
+ aspectRatio: `${width} / ${height}`,
30
+ },
31
+ };
32
+ };
33
+
34
+ const computedPlaceholder = (blurUpThumb: Possibly<string>) => {
35
+ return blurUpThumb ? { placeholder: blurUpThumb } : undefined;
36
+ };
37
+
38
+ type Style = MuxPlayerProps['style'];
39
+ type Title = MuxPlayerProps['title'];
40
+ type PlaybackId = MuxPlayerProps['playbackId'];
41
+ type Placeholder = MuxPlayerProps['placeholder'];
42
+
43
+ type PropsForMuxPlayer = {
44
+ style?: Style;
45
+ title?: Title;
46
+ playbackId?: PlaybackId;
47
+ placeholder?: Placeholder;
48
+ };
49
+
50
+ type UseVideoPlayerArgs = {
51
+ data: Video;
52
+ };
53
+
54
+ export const useVideoPlayer = ({
55
+ data,
56
+ }: UseVideoPlayerArgs): PropsForMuxPlayer => {
57
+ const { title, width, height, playbackId, muxPlaybackId, blurUpThumb } =
58
+ data || {};
59
+
60
+ if (data === undefined) return {};
61
+
62
+ return {
63
+ ...(computedTitle(title) || {}),
64
+ ...(computedPlaybackId(muxPlaybackId, playbackId) || {}),
65
+ ...(computedStyle(width, height) || {}),
66
+ ...(computedPlaceholder(blurUpThumb) || {}),
67
+ };
68
+ };
@@ -1,99 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- exports.__esModule = true;
26
- var React = __importStar(require("react"));
27
- var enzyme_1 = require("enzyme");
28
- require("intersection-observer");
29
- var index_js_1 = require("../index.js");
30
- var test_utils_1 = require("react-intersection-observer/test-utils");
31
- var data = {
32
- alt: 'DatoCMS swag',
33
- aspectRatio: 1.7777777777777777,
34
- base64: 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAoHBwgHBgoICAgLFQoLDhgQDg0NDh0eHREYIx8lJCIrHB0dLSs7GikyKSEuKjUlKDk1MjIyHyo4PTc+PDcxPjUBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7OzsvOzs7Ozs7Ozs7Lzs7Ozs7Ozs7OzsvOzs7NTsvLy87NTU1Ly8vLzsvL//AABEIAA0AGAMBIgACEQEDEQH/xAAYAAACAwAAAAAAAAAAAAAAAAAGBwABBP/EACEQAAEEAAYDAAAAAAAAAAAAAAEAAgMEBQYHESEiFWFx/8QAFQEBAQAAAAAAAAAAAAAAAAAAAwL/xAAZEQADAAMAAAAAAAAAAAAAAAAAAQIRITH/2gAMAwEAAhEDEQA/AFxLgDWTsAd1J5TGy7hEYqNAaNgECX7sjLMQAHJTEy1Zcarfia4lJMauAxqBhLY6ZlaOzDurWvUOd3jZPfCiEh4xs//Z',
35
- height: 421,
36
- sizes: '(max-width: 750px) 100vw, 750px',
37
- src: 'https://www.datocms-assets.com/205/image.png?ar=16%3A9&fit=crop&w=750',
38
- srcSet: 'https://www.datocms-assets.com/205/image.png?ar=16%3A9&dpr=0.25&fit=crop&w=750 187w,↵https://www.datocms-assets.com/205/image.png?ar=16%3A9&dpr=0.5&fit=crop&w=750 375w,↵https://www.datocms-assets.com/205/image.png?ar=16%3A9&dpr=0.75&fit=crop&w=750 562w,↵https://www.datocms-assets.com/205/image.png?ar=16%3A9&dpr=1&fit=crop&w=750 750w,↵https://www.datocms-assets.com/205/image.png?ar=16%3A9&dpr=1.5&fit=crop&w=750 1125w,↵https://www.datocms-assets.com/205/image.png?ar=16%3A9&dpr=2&fit=crop&w=750 1500w,↵https://www.datocms-assets.com/205/image.png?ar=16%3A9&dpr=3&fit=crop&w=750 2250w,↵https://www.datocms-assets.com/205/image.png?ar=16%3A9&dpr=4&fit=crop&w=750 3000w',
39
- title: 'These are awesome, we know that.',
40
- width: 750
41
- };
42
- var minimalData = {
43
- base64: 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAoHBwgHBgoICAgLFQoLDhgQDg0NDh0eHREYIx8lJCIrHB0dLSs7GikyKSEuKjUlKDk1MjIyHyo4PTc+PDcxPjUBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7OzsvOzs7Ozs7Ozs7Lzs7Ozs7Ozs7OzsvOzs7NTsvLy87NTU1Ly8vLzsvL//AABEIAA0AGAMBIgACEQEDEQH/xAAYAAACAwAAAAAAAAAAAAAAAAAGBwABBP/EACEQAAEEAAYDAAAAAAAAAAAAAAEAAgMEBQYHESEiFWFx/8QAFQEBAQAAAAAAAAAAAAAAAAAAAwL/xAAZEQADAAMAAAAAAAAAAAAAAAAAAQIRITH/2gAMAwEAAhEDEQA/AFxLgDWTsAd1J5TGy7hEYqNAaNgECX7sjLMQAHJTEy1Zcarfia4lJMauAxqBhLY6ZlaOzDurWvUOd3jZPfCiEh4xs//Z',
44
- height: 421,
45
- src: 'https://www.datocms-assets.com/205/image.png?ar=16%3A9&fit=crop&w=750',
46
- width: 750
47
- };
48
- var minimalDataWithRelativeUrl = {
49
- base64: 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAoHBwgHBgoICAgLFQoLDhgQDg0NDh0eHREYIx8lJCIrHB0dLSs7GikyKSEuKjUlKDk1MjIyHyo4PTc+PDcxPjUBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7OzsvOzs7Ozs7Ozs7Lzs7Ozs7Ozs7OzsvOzs7NTsvLy87NTU1Ly8vLzsvL//AABEIAA0AGAMBIgACEQEDEQH/xAAYAAACAwAAAAAAAAAAAAAAAAAGBwABBP/EACEQAAEEAAYDAAAAAAAAAAAAAAEAAgMEBQYHESEiFWFx/8QAFQEBAQAAAAAAAAAAAAAAAAAAAwL/xAAZEQADAAMAAAAAAAAAAAAAAAAAAQIRITH/2gAMAwEAAhEDEQA/AFxLgDWTsAd1J5TGy7hEYqNAaNgECX7sjLMQAHJTEy1Zcarfia4lJMauAxqBhLY6ZlaOzDurWvUOd3jZPfCiEh4xs//Z',
50
- height: 421,
51
- src: '/205/image.png?ar=16%3A9&fit=crop&w=750',
52
- width: 750
53
- };
54
- describe('Image', function () {
55
- // intersectionThreshold is an hack to make tests work
56
- // we need the library to generate a different IntersectionObserver for each test
57
- // otherwise the IntersectionObserver mocking won't work
58
- ['intrinsic', 'fixed', 'responsive', 'fill'].forEach(function (layout) {
59
- describe("layout=".concat(layout), function () {
60
- describe('not visible', function () {
61
- it('renders the blur-up thumb', function () {
62
- var wrapper = (0, enzyme_1.mount)(React.createElement(index_js_1.Image, { data: data, layout: layout, intersectionThreshold: 0.1 }));
63
- expect(wrapper).toMatchSnapshot();
64
- });
65
- });
66
- describe('visible', function () {
67
- it('renders the image', function () {
68
- var wrapper = (0, enzyme_1.mount)(React.createElement(index_js_1.Image, { data: data, layout: layout, intersectionThreshold: 0.2 }));
69
- (0, test_utils_1.mockAllIsIntersecting)(true);
70
- wrapper.update();
71
- expect(wrapper).toMatchSnapshot();
72
- });
73
- it('renders the image (minimal data)', function () {
74
- var wrapper = (0, enzyme_1.mount)(React.createElement(index_js_1.Image, { data: minimalData, layout: layout, intersectionThreshold: 0.2 }));
75
- (0, test_utils_1.mockAllIsIntersecting)(true);
76
- wrapper.update();
77
- expect(wrapper).toMatchSnapshot();
78
- });
79
- it('renders the image (relative URL)', function () {
80
- var wrapper = (0, enzyme_1.mount)(React.createElement(index_js_1.Image, { data: minimalDataWithRelativeUrl, layout: layout, intersectionThreshold: 0.2 }));
81
- (0, test_utils_1.mockAllIsIntersecting)(true);
82
- wrapper.update();
83
- expect(wrapper).toMatchSnapshot();
84
- });
85
- describe('image loaded', function () {
86
- it('shows the image', function () {
87
- var wrapper = (0, enzyme_1.mount)(React.createElement(index_js_1.Image, { data: data, layout: layout, intersectionThreshold: 0.3 }));
88
- (0, test_utils_1.mockAllIsIntersecting)(true);
89
- wrapper.update();
90
- wrapper.find('img').last().simulate('load');
91
- wrapper.update();
92
- expect(wrapper).toMatchSnapshot();
93
- });
94
- });
95
- });
96
- });
97
- });
98
- });
99
- //# sourceMappingURL=index.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../../src/Image/__tests__/index.test.tsx"],"names":[],"mappings":"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"}