From caf2f14e5434c8a2468c4b096d818bbff98177e8 Mon Sep 17 00:00:00 2001 From: Arik Chakma Date: Fri, 7 Jun 2024 04:48:22 +0600 Subject: [PATCH] feat: implement mobile impressions (#5818) * add resource link for React Native Text component (#5773) * add resource link for React Native Text component --------- Co-authored-by: Ruslan Semagin Co-authored-by: dsh Co-authored-by: Ruslan Semagin <53819609+pixel365@users.noreply.github.com> Co-authored-by: Suman Kisku * feat: add useful links for Rust (#5781) * feat: add links about testing in Rust (#5791) * Patch 1 (#5792) Update 120-real-time-data.md (#5782) Add links to pages containing brief explanations on the topics listed here. Update well-architected framework. --------- Co-authored-by: devgru-3-2 <95485002+devgru-3-2@users.noreply.github.com> Co-authored-by: Danrley Senegalha Pires * Fix: Standardize using "docker container ls" command when referencing listing containers (#5787) * Add reference link to React Native ImageBackground component (#5795) * add reference link to React Native ImageBackground component --------- Co-authored-by: Ruslan Semagin Co-authored-by: dsh Co-authored-by: Ruslan Semagin <53819609+pixel365@users.noreply.github.com> Co-authored-by: Suman Kisku * add links to the 'Modules and Crates' node in the Rust roadmap (#5797) * fix broken go topic (#5800) * feat: change the description and links in the 'log/slog' node (#5798) * change the description and links in the 'log/slog' node --------- Co-authored-by: dsh * add links for 'awk' (#5801) * add links for 'grep' (#5808) * Update ci-cd.md (#5807) * Update Property Binding to most recent link (#5774) Update 101-property-binding.md * Added video resources for React Components (#5810) Signed-off-by: Archit Sharma <74408634+iArchitSharma@users.noreply.github.com> * Update 104-reference-vars.md (#5775) * fix: return response status code (#5815) * feat: implement topic link's label (#5817) * feat: implement mobile impressions * fix: add to the body --------- Signed-off-by: Archit Sharma <74408634+iArchitSharma@users.noreply.github.com> Co-authored-by: Juan Gerardo Eulufi Salazar Co-authored-by: Ruslan Semagin Co-authored-by: dsh Co-authored-by: Ruslan Semagin <53819609+pixel365@users.noreply.github.com> Co-authored-by: Suman Kisku Co-authored-by: Yash Deore <152061059+yashdeored@users.noreply.github.com> Co-authored-by: devgru-3-2 <95485002+devgru-3-2@users.noreply.github.com> Co-authored-by: Danrley Senegalha Pires Co-authored-by: Anthony Pun Co-authored-by: Sion Kang Co-authored-by: Liliana Santos Co-authored-by: Archit Sharma <74408634+iArchitSharma@users.noreply.github.com> --- src/components/PageSponsor.tsx | 12 ++++++++++-- src/lib/is-mobile.ts | 27 +++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 src/lib/is-mobile.ts diff --git a/src/components/PageSponsor.tsx b/src/components/PageSponsor.tsx index 4377fab29..1f44fa3a2 100644 --- a/src/components/PageSponsor.tsx +++ b/src/components/PageSponsor.tsx @@ -4,6 +4,7 @@ import { sponsorHidden } from '../stores/page'; import { useStore } from '@nanostores/react'; import { X } from 'lucide-react'; import { setViewSponsorCookie } from '../lib/jwt'; +import { isMobile } from '../lib/is-mobile'; export type PageSponsorType = { company: string; @@ -50,6 +51,7 @@ export function PageSponsor(props: PageSponsorProps) { `${import.meta.env.PUBLIC_API_URL}/v1-get-sponsor`, { href: window.location.pathname, + mobile: isMobile() ? 'true' : 'false', }, ); @@ -75,9 +77,15 @@ export function PageSponsor(props: PageSponsorProps) { }; const clickSponsor = async (sponsorId: string) => { - const { response, error } = await httpPatch<{ status: 'ok' }>( + const clickUrl = new URL( `${import.meta.env.PUBLIC_API_URL}/v1-view-sponsor/${sponsorId}`, - {}, + ); + + const { response, error } = await httpPatch<{ status: 'ok' }>( + clickUrl.toString(), + { + mobile: isMobile() ? true : false, + }, ); if (error || !response) { diff --git a/src/lib/is-mobile.ts b/src/lib/is-mobile.ts new file mode 100644 index 000000000..914b4b401 --- /dev/null +++ b/src/lib/is-mobile.ts @@ -0,0 +1,27 @@ +export function isAndroid(): boolean { + return ( + typeof navigator !== 'undefined' && /android/i.test(navigator.userAgent) + ); +} + +export function isSmallIOS(): boolean { + return ( + typeof navigator !== 'undefined' && /iPhone|iPod/.test(navigator.userAgent) + ); +} + +export function isLargeIOS(): boolean { + return ( + typeof navigator !== 'undefined' && + (/iPad/.test(navigator.userAgent) || + (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)) + ); +} + +export function isIOS(): boolean { + return isSmallIOS() || isLargeIOS(); +} + +export function isMobile(): boolean { + return isAndroid() || isIOS(); +}