Skip to content
This repository was archived by the owner on Nov 20, 2024. It is now read-only.

Commit fe970ca

Browse files
committed
Stable web build
1 parent b092e20 commit fe970ca

File tree

7 files changed

+62
-27
lines changed

7 files changed

+62
-27
lines changed

bun.lockb

742 Bytes
Binary file not shown.

engine/capture.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { perf } from "@/service/firebase";
2+
import { captureRef } from "react-native-view-shot";
3+
import share from "react-native-share";
4+
5+
export async function captureNShare(ref: React.RefObject<any>) {
6+
const trace = await perf.startTrace("capture_screenshot");
7+
8+
const base64 = await captureRef(ref.current, {
9+
format: "jpg",
10+
quality: 1.0,
11+
result: "base64",
12+
});
13+
await trace.stop();
14+
15+
await share.open({
16+
url: `data:image/jpeg;base64,${base64}`,
17+
filename: `rn-loop-game-${new Date().getTime()}.jpg`,
18+
});
19+
}

engine/capture.web.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import domtoimage from "dom-to-image";
2+
3+
export async function captureNShare(ref: React.RefObject<any>) {
4+
const node = ref.current;
5+
if (!node) {
6+
return;
7+
}
8+
const dataUrl = await domtoimage.toPng(node);
9+
const shareData = {
10+
title: "Loop Game",
11+
text: "Check out this level",
12+
url: dataUrl,
13+
dialogTitle: "Share this level",
14+
};
15+
await navigator.share(shareData);
16+
}

engine/index.ts

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
import { Animated, Easing, ViewStyle } from "react-native";
1+
import { Animated, Easing, Platform, ViewStyle } from "react-native";
22
import { useState, useEffect, useMemo } from "react";
33
import { captureRef } from "react-native-view-shot";
4-
import performance from "@react-native-firebase/perf";
4+
5+
import domtoimage from "dom-to-image";
56
import share from "react-native-share";
67

78
import { rotateBox, calculateSuccess, data2Grid } from "./utils";
@@ -10,6 +11,7 @@ import { GridBox, Level, Theme } from "./types";
1011
import { levels } from "./levels";
1112
import { useSettings } from "@/contexts/Settings";
1213
import Toast from "react-native-toast-message";
14+
import { captureNShare } from "./capture";
1315

1416
interface Player {
1517
play: () => void;
@@ -76,26 +78,14 @@ export default function useEngine(forceLevel: number): EngineReturn {
7678

7779
async function capture(ref: React.RefObject<any>): Promise<void> {
7880
try {
79-
// const trace = await performance().startTrace("capture_screenshot");
80-
81-
const base64 = await captureRef(ref.current, {
82-
format: "jpg",
83-
quality: 1.0,
84-
result: "base64",
85-
});
86-
87-
88-
await share.open({
89-
url: `data:image/jpeg;base64,${base64}`,
90-
filename: `rn-loop-game-${new Date().getTime()}.jpg`,
91-
});
81+
captureNShare(ref);
9282
// settings
9383
} catch (e) {
9484
console.error(e);
9585
Toast.show({
9686
type: "error",
9787
text1: "Error",
98-
text2: (e as any)?.message ?? "Failed to share screenshot",
88+
text2: (e as any)?.message ?? "Failed to share screenshot",
9989
});
10090
// player.play();
10191
}

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
"@react-navigation/native": "7.0.0",
2929
"classnames": "^2.5.1",
3030
"color": "^4.2.3",
31+
"dom-to-image": "^2.6.0",
3132
"expo": "52.0.3",
3233
"expo-av": "^15.0.1",
3334
"expo-build-properties": "~0.13.1",
@@ -60,6 +61,7 @@
6061
"devDependencies": {
6162
"@babel/core": "7.26.0",
6263
"@types/color": "^4.2.0",
64+
"@types/dom-to-image": "^2.6.7",
6365
"@types/jest": "^29.5.12",
6466
"@types/react": "18.3.12",
6567
"@types/react-test-renderer": "^18.0.7",

service/firebase.ts

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,6 @@ import { getPerformance } from "@react-native-firebase/perf";
44
import { getCrashlytics } from "@react-native-firebase/crashlytics";
55
import { getMessaging } from "@react-native-firebase/messaging";
66

7-
// const firebaseConfig = {
8-
// apiKey: "AIzaSyD9rrkA8cKlH_T3xrtE2skJrnwIgtxQI9U",
9-
// authDomain: "react-native-loop.firebaseapp.com",
10-
// databaseURL: "https://react-native-loop.firebaseio.com",
11-
// projectId: "react-native-loop",
12-
// storageBucket: "react-native-loop.firebasestorage.app",
13-
// messagingSenderId: "344714598000",
14-
// appId: "1:344714598000:web:87571534b75fa95cbc86b5",
15-
// measurementId: "G-89T9V4Y6DE",
16-
// };
17-
187
export const app = getApp();
198
export const analytics = getAnalytics(app);
209
export const perf = getPerformance();

service/firebase.web.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { initializeApp } from "@react-native-firebase/app";
2+
import { getAnalytics } from "@react-native-firebase/analytics";
3+
4+
const firebaseConfig = {
5+
apiKey: "AIzaSyD9rrkA8cKlH_T3xrtE2skJrnwIgtxQI9U",
6+
authDomain: "react-native-loop.firebaseapp.com",
7+
databaseURL: "https://react-native-loop.firebaseio.com",
8+
projectId: "react-native-loop",
9+
storageBucket: "react-native-loop.firebasestorage.app",
10+
messagingSenderId: "344714598000",
11+
appId: "1:344714598000:web:87571534b75fa95cbc86b5",
12+
measurementId: "G-89T9V4Y6DE",
13+
};
14+
15+
export const app = initializeApp(firebaseConfig);
16+
export const analytics = getAnalytics(app);
17+
export const perf = {};
18+
export const crashlytics = {};
19+
export const messaging = {};

0 commit comments

Comments
 (0)