Skip to content

Commit 5504024

Browse files
Merge pull request #182 from cloudinary/fix/react-ssr-analytics-token
fix: use the same analytics token in react ssr and csr
2 parents 551f41e + 9e086bd commit 5504024

3 files changed

Lines changed: 40 additions & 4 deletions

File tree

packages/html/src/utils/serverSideSrc.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
*/
77
import {CloudinaryImage} from "@cloudinary/url-gen/assets/CloudinaryImage";
88
import cloneDeep from 'lodash.clonedeep'
9-
import {Plugins} from "../types.js";
9+
import {AnalyticsOptions, Plugins} from "../types.js";
1010

11-
export function serverSideSrc(plugins?: Plugins, serverCloudinaryImage?: CloudinaryImage): string {
11+
export function serverSideSrc(plugins?: Plugins, serverCloudinaryImage?: CloudinaryImage, analyticsOptions?: AnalyticsOptions): string {
1212
const clonedServerCloudinaryImage = cloneDeep(serverCloudinaryImage);
1313
if(plugins){
1414
for(let i = 0; i < plugins.length; i++){
@@ -18,5 +18,5 @@ export function serverSideSrc(plugins?: Plugins, serverCloudinaryImage?: Cloudi
1818
}
1919
}
2020
}
21-
return clonedServerCloudinaryImage.toURL();
21+
return clonedServerCloudinaryImage.toURL(analyticsOptions ? {trackedAnalytics: analyticsOptions} : null);
2222
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/**
2+
* @jest-environment node
3+
*/
4+
import { AdvancedImage } from '../src'
5+
import { CloudinaryImage } from '@cloudinary/url-gen/assets/CloudinaryImage'
6+
import React from 'react'
7+
import { SDKAnalyticsConstants } from '../src/internal/SDKAnalyticsConstants'
8+
// @ts-ignore
9+
import { version } from '../package.json'
10+
import { renderToString } from 'react-dom/server'
11+
12+
const cloudinaryImage = new CloudinaryImage('sample', { cloudName: 'demo' })
13+
14+
describe('ssr analytics', () => {
15+
beforeEach(() => {
16+
SDKAnalyticsConstants.sdkSemver = '1.0.0'
17+
SDKAnalyticsConstants.techVersion = '10.2.5'
18+
})
19+
20+
afterEach(() => {
21+
SDKAnalyticsConstants.sdkSemver = version
22+
SDKAnalyticsConstants.techVersion = React.version
23+
})
24+
it('creates an img with analytics', function (done) {
25+
const ElementImageHtml = renderToString(
26+
<AdvancedImage cldImg={cloudinaryImage} />
27+
)
28+
setTimeout(() => {
29+
expect(ElementImageHtml).toContain(
30+
'https://res.cloudinary.com/demo/image/upload/sample?_a=AJAABDS0'
31+
)
32+
done()
33+
}, 0) // one tick
34+
})
35+
})

packages/react/src/AdvancedImage.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,8 @@ class AdvancedImage extends React.Component <ImgProps> {
115115
} else { // on server side render
116116
const src = serverSideSrc(
117117
this.props.plugins,
118-
this.props.cldImg
118+
this.props.cldImg,
119+
SDKAnalyticsConstants
119120
);
120121
return <img {...otherProps} src={src} />
121122
}

0 commit comments

Comments
 (0)