Skip to content

Commit f73f027

Browse files
committed
Merge remote-tracking branch 'upstream/master' into FEQ-2456/livechat-integration
2 parents 6627a24 + b554a4a commit f73f027

40 files changed

+881
-120
lines changed

.github/workflows/build-and-deploy-prod.yml

+49-12
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ jobs:
1414
timeout-minutes: 30
1515
runs-on: ubuntu-latest
1616
environment: Production
17+
env:
18+
VERSION: ${{ github.ref_name }}
1719
steps:
1820
- name: Checkout to main branch
1921
uses: actions/checkout@v3
@@ -42,28 +44,63 @@ jobs:
4244
VITE_PROJECT_NAME: ${{ vars.VITE_PROJECT_NAME }}
4345
VITE_CROWDIN_BRANCH_NAME: ${{ vars.VITE_CROWDIN_BRANCH_NAME }}
4446
VITE_TRANSLATIONS_CDN_URL: ${{ vars.VITE_TRANSLATIONS_CDN_URL }}
45-
47+
VITE_TRACKJS_TOKEN: ${{ vars.VITE_TRACKJS_TOKEN }}
48+
VITE_APP_VERSION: ${{ github.ref_name }}
49+
VITE_GROWTHBOOK_DECRYPTION_KEY: ${{ secrets.VITE_GROWTHBOOK_DECRYPTION_KEY }}
50+
VITE_GROWTHBOOK_CLIENT_KEY: ${{ vars.VITE_GROWTHBOOK_CLIENT_KEY }}
51+
VITE_RUDDERSTACK_KEY: ${{ vars.VITE_RUDDERSTACK_KEY }}
52+
VITE_REMOTE_CONFIG_URL: ${{ vars.VITE_REMOTE_CONFIG_URL }}
4653

4754
- name: Run tests for Eslint
4855
run: npm run test:lint
4956

5057
- name: Publish to Cloudflare Pages
5158
uses: "deriv-com/shared-actions/.github/actions/publish_to_pages_branch@master"
59+
id: publish_to_cloudflare
5260
with:
5361
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
5462
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
5563
project_name: ${{ secrets.CLOUDFLARE_PROJECT_NAME }}
5664
branch_name: master
5765
output_dir: dist
5866
cname_url: p2p.deriv.com
59-
send_slack_success:
60-
name: Send Release Slack notification success
61-
runs-on: ubuntu-latest
62-
if: success()
63-
needs: [build_to_cloudflare_pages]
64-
steps:
65-
- name: Send Slack Notification
66-
uses: "deriv-com/shared-actions/.github/actions/send_slack_notification@master"
67-
with:
68-
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
69-
MESSAGE: "Production Release succeeded for p2p.deriv.com with version ${{ github.head_ref }}"
67+
68+
- name: Upload to vercel
69+
uses: 'deriv-com/shared-actions/.github/actions/vercel_DR_publish@master'
70+
id: dr_action
71+
with:
72+
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
73+
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
74+
VERCEL_TOKEN: ${{ secrets.VERCEL_API_TOKEN }}
75+
ENVIRONMENT: Production
76+
VERCEL_SCOPE: deriv
77+
ALIAS_DOMAIN_URL: 'p2p-dr.binary.sx'
78+
- name: Send Slack Notification on Vercel Publish failure
79+
uses: "deriv-com/shared-actions/.github/actions/send_slack_notification@master"
80+
if: steps.dr_action.conclusion == 'failure'
81+
with:
82+
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
83+
MESSAGE: "Vercel Publish failed for p2p.deriv.com with version $VERSION"
84+
85+
send_slack_notification:
86+
name: Send Release Slack notification
87+
environment: Production
88+
runs-on: ubuntu-latest
89+
env:
90+
VERSION: ${{ github.ref_name }}
91+
if: always()
92+
needs: [build_to_cloudflare_pages]
93+
steps:
94+
- name: Create Slack Message
95+
id: create_slack_message
96+
run: |
97+
if [[ "${{ needs.build_to_cloudflare_pages.result }}" == 'success' ]]; then
98+
echo "message=Production Release succeeded for p2p.deriv.com with version $VERSION" >> $GITHUB_OUTPUT
99+
else
100+
echo "message=Production Release failed for p2p.deriv.com with version $VERSION" >> $GITHUB_OUTPUT
101+
fi
102+
- name: Send Slack Notification
103+
uses: "deriv-com/shared-actions/.github/actions/send_slack_notification@master"
104+
with:
105+
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
106+
MESSAGE: ${{ steps.create_slack_message.outputs.message }}

.github/workflows/build-and-deploy-staging.yml

+16
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,12 @@ jobs:
4242
VITE_PROJECT_NAME: ${{ vars.VITE_PROJECT_NAME }}
4343
VITE_CROWDIN_BRANCH_NAME: ${{ vars.VITE_CROWDIN_BRANCH_NAME }}
4444
VITE_TRANSLATIONS_CDN_URL: ${{ vars.VITE_TRANSLATIONS_CDN_URL }}
45+
VITE_TRACKJS_TOKEN: ${{ vars.VITE_TRACKJS_TOKEN }}
46+
VITE_APP_VERSION: ${{ github.ref_name }}
47+
VITE_GROWTHBOOK_DECRYPTION_KEY: ${{ secrets.VITE_GROWTHBOOK_DECRYPTION_KEY }}
48+
VITE_GROWTHBOOK_CLIENT_KEY: ${{ vars.VITE_GROWTHBOOK_CLIENT_KEY }}
49+
VITE_RUDDERSTACK_KEY: ${{ vars.VITE_RUDDERSTACK_KEY }}
50+
VITE_REMOTE_CONFIG_URL: ${{ vars.VITE_REMOTE_CONFIG_URL }}
4551

4652

4753
- name: Run tests for Eslintbuild_to_cloudflare_pages
@@ -56,3 +62,13 @@ jobs:
5662
branch_name: staging
5763
output_dir: dist
5864
cname_url: staging-p2p.deriv.com
65+
66+
- name: Upload to vercel
67+
uses: 'deriv-com/shared-actions/.github/actions/vercel_DR_publish@master'
68+
with:
69+
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
70+
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
71+
VERCEL_TOKEN: ${{ secrets.VERCEL_API_TOKEN }}
72+
ENVIRONMENT: Preview
73+
VERCEL_SCOPE: deriv
74+
ALIAS_DOMAIN_URL: 'staging-p2p-dr.binary.sx'

.github/workflows/build-and-deploy-test.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ jobs:
2626
with:
2727
username: ${{ github.event.pull_request.user.login }}
2828
token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
29-
29+
3030
- name: Checkout to branch
3131
uses: actions/checkout@v3
3232
with:

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
*~
2+
.vercel
23
.idea/
34
.grunt/
45
.sass-cache/

global.d.ts

+3
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ declare global {
99
init: () => void;
1010
on: (key: string, callback: VoidFunction) => void;
1111
};
12+
dataLayer: {
13+
push: (event: { [key: string]: boolean | number | string; event: string }) => void;
14+
};
1215
}
1316
}
1417

index.html

+35-2
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,44 @@
22
<html lang="en">
33
<head>
44
<meta charset="UTF-8" />
5-
<link rel="icon" type="image/svg+xml" href="/deriv-logo.svg" />
5+
<link rel="icon" type="image/svg+xml" href="/public/deriv-p2p.svg" />
6+
<meta
7+
name="description"
8+
content="Connect with Deriv P2P buyers and sellers to make deposits and withdrawals into your trading account, in your local currency."
9+
/>
10+
<meta name="keywords" content="p2p, buy, sell" />
611
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
7-
<title>Deriv P2P</title>
12+
<title>Buy and sell on Deriv P2P to fund your trading account | Deriv</title>
13+
<!-- Google Tag Manager -->
14+
<script>
15+
(function (w, d, s, l, i) {
16+
w[l] = w[l] || [];
17+
w[l].push({
18+
'gtm.start': new Date().getTime(),
19+
event: 'gtm.js',
20+
});
21+
var f = d.getElementsByTagName(s)[0],
22+
j = d.createElement(s),
23+
dl = l != 'dataLayer' ? '&l=' + l : '';
24+
j.async = true;
25+
j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl;
26+
f.parentNode.insertBefore(j, f);
27+
})(window, document, 'script', 'dataLayer', 'GTM-NF7884S');
28+
</script>
29+
<!-- End Google Tag Manager -->
830
</head>
31+
932
<body>
33+
<!-- Google Tag Manager (noscript) -->
34+
<noscript
35+
><iframe
36+
src="https://www.googletagmanager.com/ns.html?id=GTM-NF7884S"
37+
height="0"
38+
width="0"
39+
style="display: none; visibility: hidden"
40+
></iframe
41+
></noscript>
42+
<!-- End Google Tag Manager (noscript) -->
1043
<div id="root"></div>
1144
<script type="module" src="/src/main.tsx"></script>
1245
<!-- LiveChat script -->

jest.setup.ts

+2
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
import '@testing-library/jest-dom/jest-globals';
22
import '@testing-library/jest-dom';
3+
4+
process.env.VITE_TRACKJS_TOKEN = 'test-token';

package-lock.json

+57
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+3
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
"dependencies": {
1717
"@babel/preset-env": "^7.24.5",
1818
"@chakra-ui/react": "^2.8.2",
19+
"@deriv-com/analytics": "^1.10.1",
1920
"@deriv-com/api-hooks": "^1.3.7",
2021
"@deriv-com/translations": "^1.2.4",
2122
"@deriv-com/ui": "^1.29.0",
@@ -44,6 +45,7 @@
4445
"react-share": "^5.1.0",
4546
"react-simple-star-rating": "^5.1.7",
4647
"react-transition-group": "^4.4.5",
48+
"trackjs": "^3.10.4",
4749
"use-query-params": "^2.2.1",
4850
"usehooks-ts": "^2.16.0",
4951
"vite": "^5.1.4",
@@ -103,6 +105,7 @@
103105
"tailwindcss": "^3.3.5",
104106
"ts-jest": "^29.1.2",
105107
"typescript": "^5.2.2",
108+
"vite-plugin-html-config": "^1.0.11",
106109
"vite-plugin-sass": "^0.1.0"
107110
}
108111
}

public/deriv-p2p.svg

+8
Loading

src/App.tsx

+20-13
Original file line numberDiff line numberDiff line change
@@ -2,35 +2,42 @@ import { Suspense } from 'react';
22
import { BrowserRouter } from 'react-router-dom';
33
import { QueryParamProvider } from 'use-query-params';
44
import { ReactRouter5Adapter } from 'use-query-params/adapters/react-router-5';
5-
import { AppFooter, AppHeader, DerivIframe } from '@/components';
6-
import { useRedirectToOauth } from '@/hooks';
5+
import { AppFooter, AppHeader, DerivIframe, ErrorBoundary } from '@/components';
6+
import { useDerivAnalytics, useRedirectToOauth, useTrackjs } from '@/hooks';
77
import AppContent from '@/routes/AppContent';
88
import { initializeI18n, TranslationProvider } from '@deriv-com/translations';
99
import { Loader, useDevice } from '@deriv-com/ui';
1010

11-
const { VITE_CROWDIN_BRANCH_NAME, VITE_PROJECT_NAME, VITE_TRANSLATIONS_CDN_URL } = import.meta.env;
11+
const { VITE_CROWDIN_BRANCH_NAME, VITE_PROJECT_NAME, VITE_TRANSLATIONS_CDN_URL } = process.env;
1212
const i18nInstance = initializeI18n({
1313
cdnUrl: `${VITE_TRANSLATIONS_CDN_URL}/${VITE_PROJECT_NAME}/${VITE_CROWDIN_BRANCH_NAME}`,
1414
});
1515

1616
const App = () => {
17+
const { init: initTrackJS } = useTrackjs();
1718
const { isDesktop } = useDevice();
1819
const { redirectToOauth } = useRedirectToOauth();
20+
const { initialise: initDerivAnalytics } = useDerivAnalytics();
1921

22+
initTrackJS();
23+
initDerivAnalytics();
2024
redirectToOauth();
2125

2226
return (
2327
<BrowserRouter>
24-
<QueryParamProvider adapter={ReactRouter5Adapter}>
25-
<TranslationProvider defaultLang='EN' i18nInstance={i18nInstance}>
26-
<Suspense fallback={<Loader isFullScreen />}>
27-
<DerivIframe />
28-
<AppHeader />
29-
<AppContent />
30-
{isDesktop && <AppFooter />}
31-
</Suspense>
32-
</TranslationProvider>
33-
</QueryParamProvider>
28+
{/* TODO: Replace the fallback element with the ErrorComponent */}
29+
<ErrorBoundary fallback={<div>fallback component</div>}>
30+
<QueryParamProvider adapter={ReactRouter5Adapter}>
31+
<TranslationProvider defaultLang='EN' i18nInstance={i18nInstance}>
32+
<Suspense fallback={<Loader isFullScreen />}>
33+
<DerivIframe />
34+
<AppHeader />
35+
<AppContent />
36+
{isDesktop && <AppFooter />}
37+
</Suspense>
38+
</TranslationProvider>
39+
</QueryParamProvider>
40+
</ErrorBoundary>
3441
</BrowserRouter>
3542
);
3643
};

0 commit comments

Comments
 (0)