Files
hipmi-mobile/components/Button/CoyButton.tsx
Bagasbanuna02 2be4afdcb1 Investment
Add:
-  components/Button/CoyButton.tsx
-  constants/local-storage-key.ts

Fix:
- Integrasi pada proses transaksi pmebelian investasi

### No Issue
2025-10-02 17:29:25 +08:00

73 lines
1.9 KiB
TypeScript

import React, { useState } from "react";
import { TouchableOpacity, Text, StyleSheet } from "react-native";
import * as Clipboard from "expo-clipboard";
import { MainColor } from "@/constants/color-palet";
interface CopyButtonProps {
textToCopy: string;
copyLabel?: string; // Teks tombol saat normal, default: "Copy"
copiedLabel?: string; // Teks tombol saat berhasil, default: "Copied!"
onCopySuccess?: () => void; // Callback opsional saat berhasil menyalin
duration?: number; // Durasi (ms) menampilkan "Copied!", default: 2000
style?: any; // Gaya tambahan untuk tombol
textStyle?: any; // Gaya tambahan untuk teks
}
const CopyButton: React.FC<CopyButtonProps> = ({
textToCopy,
copyLabel = "Copy",
copiedLabel = "Copied!",
onCopySuccess,
duration = 2000,
style,
textStyle,
}) => {
const [isCopied, setIsCopied] = useState(false);
const handleCopy = async () => {
try {
await Clipboard.setStringAsync(textToCopy);
setIsCopied(true);
onCopySuccess?.();
// Reset kembali ke label "Copy" setelah durasi tertentu
setTimeout(() => {
setIsCopied(false);
}, duration);
} catch (error) {
console.error("Failed to copy text:", error);
// Opsional: tampilkan error toast jika diperlukan
}
};
return (
<TouchableOpacity
style={[styles.button, style]}
onPress={handleCopy}
activeOpacity={0.7}
>
<Text style={[styles.text, textStyle]}>
{isCopied ? copiedLabel : copyLabel}
</Text>
</TouchableOpacity>
);
};
const styles = StyleSheet.create({
button: {
backgroundColor: MainColor.yellow,
paddingHorizontal: 16,
paddingVertical: 8,
borderRadius: 50,
alignItems: "center",
justifyContent: "center",
},
text: {
color: MainColor.darkblue,
fontWeight: "600",
fontSize: 14,
},
});
export default CopyButton;