diff --git a/assets/images/backgroundSearch.png b/assets/images/backgroundSearch.png
new file mode 100644
index 0000000..7e361f5
Binary files /dev/null and b/assets/images/backgroundSearch.png differ
diff --git a/assets/images/icon-export-link.png b/assets/images/icon-export-link.png
new file mode 100644
index 0000000..e40a3c8
Binary files /dev/null and b/assets/images/icon-export-link.png differ
diff --git a/assets/images/icon-map-2.png b/assets/images/icon-map-2.png
new file mode 100644
index 0000000..bc0708e
Binary files /dev/null and b/assets/images/icon-map-2.png differ
diff --git a/assets/images/icon_cert.png b/assets/images/icon_cert.png
new file mode 100644
index 0000000..a5c860e
Binary files /dev/null and b/assets/images/icon_cert.png differ
diff --git a/assets/images/icon_location.png b/assets/images/icon_location.png
index 13b7b60..7261c9f 100644
Binary files a/assets/images/icon_location.png and b/assets/images/icon_location.png differ
diff --git a/assets/images/icon_showroom_blue.png b/assets/images/icon_showroom_blue.png
new file mode 100644
index 0000000..3b76133
Binary files /dev/null and b/assets/images/icon_showroom_blue.png differ
diff --git a/assets/images/image-contact.png b/assets/images/image-contact.png
new file mode 100644
index 0000000..3221e34
Binary files /dev/null and b/assets/images/image-contact.png differ
diff --git a/assets/images/showroom_gearvn.png b/assets/images/showroom_gearvn.png
new file mode 100644
index 0000000..70e6d55
Binary files /dev/null and b/assets/images/showroom_gearvn.png differ
diff --git a/assets/images/showroom_gearvn_2.png b/assets/images/showroom_gearvn_2.png
new file mode 100644
index 0000000..a6a2b8c
Binary files /dev/null and b/assets/images/showroom_gearvn_2.png differ
diff --git a/assets/images/showroom_gearvn_3.png b/assets/images/showroom_gearvn_3.png
new file mode 100644
index 0000000..935f5c1
Binary files /dev/null and b/assets/images/showroom_gearvn_3.png differ
diff --git a/assets/images/showroom_hoanglong.png b/assets/images/showroom_hoanglong.png
new file mode 100644
index 0000000..5af143f
Binary files /dev/null and b/assets/images/showroom_hoanglong.png differ
diff --git a/assets/images/showroom_maytinhanoi.png b/assets/images/showroom_maytinhanoi.png
new file mode 100644
index 0000000..1a8aa19
Binary files /dev/null and b/assets/images/showroom_maytinhanoi.png differ
diff --git a/assets/images/verifiedIcon.png b/assets/images/verifiedIcon.png
new file mode 100644
index 0000000..ab732a0
Binary files /dev/null and b/assets/images/verifiedIcon.png differ
diff --git a/src/components/product/itemProductSave.tsx b/src/components/product/itemProductSave.tsx
index aae27af..5ec0e90 100644
--- a/src/components/product/itemProductSave.tsx
+++ b/src/components/product/itemProductSave.tsx
@@ -10,8 +10,7 @@ import {
} from "react-native";
import { globalStyles } from "../../styles/globalStyles";
-var winWidth = Dimensions.get("window").width; //full width
-var winHeight = Dimensions.get("window").height;
+const { width } = Dimensions.get("window");
const ItemProductSave = ({ product }: { product: any }) => {
function formatCurrency(a: number | string): string {
@@ -75,7 +74,7 @@ const ItemProductSave = ({ product }: { product: any }) => {
const styles = StyleSheet.create({
productItem: {
- width: winWidth / 2 - 15,
+ width: width / 2 - 20,
},
productImage: {
width: "100%",
diff --git a/src/components/repair/ServiceProviderCard.tsx b/src/components/repair/ServiceProviderCard.tsx
new file mode 100644
index 0000000..9a2e098
--- /dev/null
+++ b/src/components/repair/ServiceProviderCard.tsx
@@ -0,0 +1,389 @@
+import React from "react";
+import { View, Text, Image, StyleSheet } from "react-native";
+import MaterialCommunityIcons from "@expo/vector-icons/MaterialCommunityIcons";
+import Feather from "@expo/vector-icons/Feather";
+import Ionicons from "@expo/vector-icons/Ionicons";
+
+interface ServiceProviderCardProps {
+ name: string;
+ backgroundImage: any;
+ favoriteIcon: any;
+ verifiedIcon?: any;
+ specialties: string[];
+ address: string;
+ phone: string;
+ website: string;
+ certifications: Array<{
+ icon: any;
+ name: string;
+ color?: string;
+ }>;
+ rating: string;
+ rate: number;
+ reviewCount: string;
+ showroomCount?: string;
+ isVerified?: boolean;
+}
+
+const renderStars = (count: number) => {
+ return (
+
+ {Array.from({ length: 5 }).map((_, index) => (
+
+ ))}
+
+ );
+};
+
+export const ServiceProviderCard: React.FC = ({
+ name,
+ backgroundImage,
+ favoriteIcon,
+ verifiedIcon,
+ specialties,
+ address,
+ phone,
+ website,
+ certifications,
+ rating,
+ rate,
+ reviewCount,
+ showroomCount,
+ isVerified = false,
+}) => {
+ return (
+
+
+
+
+
+
+
+
+ {name}
+ {verifiedIcon && (
+
+ )}
+
+
+
+
+
+
+
+ Chuyên sửa chữa
+
+ {specialties.map((specialty, index) => (
+
+ {specialty}
+
+ ))}
+
+
+
+
+ {address}
+
+
+
+
+ Google Maps
+
+ {showroomCount && (
+ {showroomCount}
+ )}
+
+
+
+
+ {phone}
+
+
+
+
+
+ Website:
+ {website}
+
+
+
+ {certifications.map((cert, index) => (
+
+
+ {cert.name}
+
+ ))}
+
+
+
+ Hoạt động từ 2020
+
+
+
+ {renderStars(rate)}
+ {rating}
+ ({reviewCount})
+ Đánh giá
+
+
+
+
+ Liên hệ
+
+
+
+ );
+};
+
+const styles = StyleSheet.create({
+ container: {
+ borderWidth: 1,
+ borderColor: "rgba(240, 240, 240, 1)",
+ paddingVertical: 8,
+ flex: 1,
+ },
+ content: {
+ paddingHorizontal: 6,
+ },
+ imageContainer: {
+ position: "relative",
+ aspectRatio: 1.757,
+ paddingTop: 2,
+ paddingHorizontal: 36,
+ paddingBottom: 77,
+ },
+ backgroundImage: {
+ position: "absolute",
+ top: 0,
+ left: 0,
+ right: 0,
+ bottom: 0,
+ width: "100%",
+ height: "100%",
+ resizeMode: "cover",
+ },
+ favoriteIcon: {
+ width: 13.71,
+ height: 12.58,
+ resizeMode: "contain",
+ position: "absolute",
+ right: 10,
+ top: 10,
+ backgroundColor: "#EFEFEF",
+ borderRadius: "50%",
+ padding: 5,
+ },
+ nameContainer: {
+ flexDirection: "row",
+ alignItems: "center",
+ gap: 6,
+ marginTop: 4,
+ },
+ name: {
+ fontSize: 15,
+ fontWeight: "700",
+ color: "#303030",
+ },
+ verifiedIcon: {
+ width: 11,
+ height: 11,
+ resizeMode: "contain",
+ },
+ specialtiesContainer: {
+ flexDirection: "row",
+ flexWrap: "wrap",
+ alignItems: "center",
+ gap: 5,
+ marginTop: 5,
+ },
+ specialtyRow: {
+ flexDirection: "row",
+ alignItems: "center",
+ gap: 4,
+ },
+ specialtyIcon: {
+ width: 13,
+ height: 13,
+ resizeMode: "contain",
+ },
+ bgspecialtyIcon: {
+ padding: 3,
+ backgroundColor: "#e0ecff",
+ borderRadius: "50%",
+ },
+ specialtyText: {
+ fontSize: 12,
+ fontWeight: "400",
+ color: "#303030",
+ },
+ specialtyTag: {
+ borderRadius: 233,
+ backgroundColor: "rgba(0, 0, 0, 0.1)",
+ paddingVertical: 5,
+ paddingHorizontal: 12,
+ alignItems: "center",
+ justifyContent: "center",
+ },
+ specialtyTagText: {
+ fontSize: 12,
+ fontWeight: "400",
+ color: "rgba(0, 0, 0, 1)",
+ textAlign: "center",
+ },
+ tagsContainer: {
+ flexDirection: "row",
+ gap: 5,
+ marginTop: 5,
+ },
+ tag: {
+ borderRadius: 222,
+ backgroundColor: "#F5E3FF",
+ paddingVertical: 5,
+ paddingHorizontal: 12,
+ alignItems: "center",
+ justifyContent: "center",
+ },
+ tagText: {
+ fontSize: 12,
+ fontWeight: "500",
+ color: "rgba(0, 0, 0, 1)",
+ textAlign: "center",
+ },
+ infoRow: {
+ flexDirection: "row",
+ alignItems: "flex-start",
+ gap: 4,
+ marginTop: 6,
+ },
+ infoIcon: {
+ width: 16,
+ height: 16,
+ resizeMode: "contain",
+ },
+ infoText: {
+ fontSize: 12,
+ fontWeight: "400",
+ color: "#303030",
+ lineHeight: 15,
+ flex: 1,
+ },
+ mapIcon: {
+ width: 11,
+ height: 16,
+ resizeMode: "contain",
+ },
+ mapText: {
+ fontSize: 10,
+ fontWeight: "400",
+ color: "#FF7A00",
+ },
+ showroomIcon: {
+ width: 17,
+ height: 17,
+ resizeMode: "contain",
+ },
+ showroomText: {
+ fontSize: 10,
+ fontWeight: "700",
+ color: "rgba(24, 119, 242, 1)",
+ textDecorationLine: "underline",
+ },
+ websiteText: {
+ fontSize: 12,
+ fontWeight: "400",
+ color: "#303030",
+ flex: 1,
+ },
+ websiteLabel: {
+ color: "rgba(48,48,48,1)",
+ },
+ certificationBadge: {
+ flexDirection: "row",
+ alignItems: "center",
+ gap: 4,
+ borderRadius: 333,
+ backgroundColor: "#f4f4f4",
+ color: "#fff",
+ paddingVertical: 6,
+ paddingHorizontal: 13,
+ marginTop: 6,
+ },
+ certIcon: {
+ width: 16,
+ height: 16,
+ resizeMode: "contain",
+ },
+ certText: {
+ fontSize: 12,
+ fontWeight: "400",
+ color: "rgba(255, 122, 0, 1)",
+ },
+ ratingContainer: {
+ flexDirection: "row",
+ alignItems: "center",
+ gap: 4,
+ alignSelf: "center",
+ marginTop: 6,
+ },
+ rating: {
+ fontSize: 12,
+ fontWeight: "400",
+ color: "rgba(0, 0, 0, 1)",
+ flex: 1,
+ },
+ reviewCount: {
+ fontSize: 12,
+ fontWeight: "500",
+ color: "#303030",
+ textAlign: "right",
+ },
+ reviewLabel: {
+ fontSize: 12,
+ fontWeight: "500",
+ color: "#303030",
+ textAlign: "right",
+ textDecorationLine: "underline",
+ },
+ contactButton: {
+ flexDirection: "row",
+ alignItems: "center",
+ gap: 4,
+ marginTop: 9,
+ marginLeft: 10,
+ },
+ contactText: {
+ fontSize: 12,
+ fontWeight: "700",
+ color: "rgba(70, 47, 145, 1)",
+ textAlign: "left",
+ textDecorationLine: "underline",
+ },
+ contactIcon: {
+ width: 16,
+ height: 16,
+ resizeMode: "contain",
+ },
+});
diff --git a/src/navigation/AppNavigator.tsx b/src/navigation/AppNavigator.tsx
index ed2845a..8d84062 100644
--- a/src/navigation/AppNavigator.tsx
+++ b/src/navigation/AppNavigator.tsx
@@ -11,6 +11,7 @@ import CompareBuildpc from "../screens/buildpc/CompareBuildpc";
import BuildpcDeail from "../screens/buildpc/BuildpcDetail";
import HomeShop from "../screens/shop/HomeShop";
import DetailShop from "../screens/shop/DetailShop";
+import HomeRepairAddress from "../screens/repair_address/HomeRepairAddress";
const Stack = createStackNavigator();
@@ -27,9 +28,9 @@ const AppNavigator: React.FC = () => {
-
-
+
+
);
};
diff --git a/src/screens/HomeScreen.tsx b/src/screens/HomeScreen.tsx
index d5177d1..ad75cd0 100644
--- a/src/screens/HomeScreen.tsx
+++ b/src/screens/HomeScreen.tsx
@@ -133,7 +133,7 @@ const BoxMenuHome = () => {
navigation.navigate("homeshop" as never)}
+ onPress={() => navigation.navigate("repairaddress" as never)}
>
= ({
+ title,
+ isSelected = false,
+}) => {
+ return (
+
+
+ {title}
+
+
+ );
+};
+
+export default function CategoryFilters() {
+ const categories = [
+ { title: "Máy tính xách tay", selected: true },
+ { title: "Màn hình", selected: false },
+ { title: "Macbook", selected: false },
+ { title: "PC", selected: false },
+ { title: "Cài phần mềm", selected: false },
+ { title: "Máy in", selected: false },
+ { title: "Điện thoại di động", selected: false },
+ { title: "Máy photocopy", selected: false },
+ { title: "Máy chiếu", selected: false },
+ { title: "Ổ cứng", selected: false },
+ { title: "Nâng cấp", selected: false },
+ ];
+
+ return (
+
+ Tìm theo nhu cầu
+
+ {categories.map((item) => (
+
+ ))}
+
+
+ );
+}
+
+const styles = StyleSheet.create({
+ container: {
+ borderRadius: 4,
+ borderWidth: 1,
+ borderColor: "rgba(240, 240, 240, 1)",
+ paddingTop: 13,
+ paddingHorizontal: 14,
+ paddingBottom: 24,
+ marginTop: 12,
+ },
+ title: {
+ fontSize: 20,
+ fontWeight: "700",
+ color: "rgba(0, 0, 0, 1)",
+ textAlign: "center",
+ },
+ firstRow: {
+ flexDirection: "row",
+ gap: 8,
+ marginTop: 12,
+ marginHorizontal: 20,
+ },
+ secondRow: {
+ flexDirection: "row",
+ flexWrap: "wrap",
+ gap: 5,
+ marginTop: 12,
+ },
+ leftColumn: {
+ flex: 1,
+ },
+ rightColumn: {
+ flex: 1,
+ },
+ row: {
+ flexDirection: "row",
+ gap: 8,
+ marginBottom: 12,
+ },
+ categoryButton: {
+ borderRadius: 23,
+ borderWidth: 1,
+ borderColor: "rgba(227, 227, 227, 1)",
+ paddingVertical: 5,
+ paddingHorizontal: 9,
+ alignItems: "center",
+ justifyContent: "center",
+ minHeight: 24,
+ },
+ selectedCategory: {
+ backgroundColor: "#F6F3FF",
+ borderColor: "#462F91",
+ },
+ categoryText: {
+ fontSize: 13,
+ fontWeight: "400",
+ color: "rgba(89, 89, 89, 1)",
+ textAlign: "center",
+ lineHeight: 23,
+ },
+ selectedCategoryText: {
+ color: "#462F91",
+ },
+});
diff --git a/src/screens/repair_address/ContactForm.tsx b/src/screens/repair_address/ContactForm.tsx
new file mode 100644
index 0000000..6cf88ec
--- /dev/null
+++ b/src/screens/repair_address/ContactForm.tsx
@@ -0,0 +1,110 @@
+import React from "react";
+import { View, Text, Image, StyleSheet, TextInput } from "react-native";
+
+const ContactForm: React.FC = () => {
+ return (
+
+
+
+ Liên hệ với chúng tôi
+
+ Bạn cung cấp dịch vụ sửa chữa và muốn niêm yết
+
+
+
+
+
+
+
+
+ Đăng ký
+
+
+
+ );
+};
+
+export default ContactForm;
+
+const styles = StyleSheet.create({
+ container: {
+ marginTop: 56,
+ },
+ headerSection: {
+ position: "relative",
+ aspectRatio: 1.903,
+ alignItems: "center",
+ justifyContent: "center",
+ paddingVertical: 73,
+ paddingHorizontal: 77,
+ },
+ backgroundImage: {
+ position: "absolute",
+ top: 0,
+ left: 0,
+ right: 0,
+ bottom: 0,
+ width: "100%",
+ height: "100%",
+ resizeMode: "cover",
+ },
+ title: {
+ fontSize: 20,
+ fontWeight: "700",
+ color: "rgba(255, 255, 255, 1)",
+ textAlign: "center",
+ zIndex: 1,
+ },
+ subtitle: {
+ fontSize: 16,
+ fontWeight: "400",
+ color: "rgba(255, 255, 255, 1)",
+ textAlign: "center",
+ marginTop: 7,
+ zIndex: 1,
+ },
+ formSection: {
+ padding: 12,
+ },
+ inputField: {
+ borderWidth: 1,
+ borderColor: "rgba(214, 214, 214, 1)",
+ paddingVertical: 10,
+ paddingHorizontal: 16,
+ marginBottom: 8,
+ justifyContent: "center",
+ },
+ textAreaField: {
+ borderWidth: 1,
+ borderColor: "rgba(214, 214, 214, 1)",
+ paddingTop: 10,
+ paddingHorizontal: 16,
+ paddingBottom: 40,
+ marginBottom: 8,
+ },
+ inputLabel: {
+ fontSize: 13,
+ fontWeight: "400",
+ color: "rgba(178, 178, 178, 1)",
+ },
+ submitButton: {
+ backgroundColor: "#462F91",
+ alignItems: "center",
+ justifyContent: "center",
+ minHeight: 40,
+ paddingHorizontal: 24,
+ paddingBottom: 1,
+ },
+ submitText: {
+ fontSize: 14,
+ fontWeight: "700",
+ color: "rgba(255, 255, 255, 1)",
+ textAlign: "center",
+ },
+});
diff --git a/src/screens/repair_address/HomeRepairAddress.tsx b/src/screens/repair_address/HomeRepairAddress.tsx
new file mode 100644
index 0000000..a2f34d9
--- /dev/null
+++ b/src/screens/repair_address/HomeRepairAddress.tsx
@@ -0,0 +1,205 @@
+import React, { useState } from "react";
+import {
+ View,
+ Text,
+ TextInput,
+ TouchableOpacity,
+ ScrollView,
+ Image,
+ StyleSheet,
+ Dimensions,
+ ImageBackground,
+} from "react-native";
+import { useNavigation, NavigationProp } from "@react-navigation/native";
+import AppLayout from "@layouts/AppLayout";
+import { Ionicons } from "@expo/vector-icons";
+import Feather from "@expo/vector-icons/Feather";
+import { url } from "inspector";
+import CategoryFilters from "@screens/repair_address/CategoryFilters";
+import LocationFilters from "@screens/repair_address/LocationFilters";
+import ServiceProviderList from "@screens/repair_address/ServiceProviderList";
+import ContactForm from "@screens/repair_address/ContactForm";
+
+const { width } = Dimensions.get("window");
+
+export default function HomeRepairAddress() {
+ const navigation = useNavigation>();
+ return (
+
+
+
+ {/* Breadcrumb */}
+
+
+
+
+
+ ›
+
+
+ Địa chỉ sửa chữa
+
+
+
+
+
+ Tìm địa chỉ sửa chữa máy tính, điện thoại
+
+
+
+
+
+
+
+
+
+
+
+ BestPC tổng hợp các địa chỉ sửa chữa máy tính, linh phụ kiện,
+ thiết bị điện tử,... khắp nơi tại Việt Nam. Nhằm giúp bạn tìm được
+ địa chỉ uy tín để sửa chữa
+
+
+ {/* search */}
+
+
+ {/* tim theo nhu cau */}
+
+ {/* tìm theo tỉnh thành */}
+
+
+ {/* địa chỉ nổi bật */}
+
+
+ {/* form liên hệ */}
+
+
+
+ );
+}
+
+const styles = StyleSheet.create({
+ container: {
+ paddingHorizontal: 10,
+ backgroundColor: "#fff",
+ },
+ breadcrumb: {
+ flexDirection: "row",
+ alignItems: "center",
+ paddingVertical: 12,
+ flexWrap: "wrap",
+ },
+ breadcrumbItem: {
+ flexDirection: "row",
+ alignItems: "center",
+ marginRight: 8,
+ },
+ text: {
+ color: "#000",
+ },
+ icon: {
+ marginRight: 5,
+ },
+ angle: {
+ marginLeft: 12,
+ color: "#888",
+ },
+ searchBox: {
+ flexDirection: "row",
+ alignItems: "center",
+ justifyContent: "space-between",
+ backgroundColor: "white",
+ borderRadius: 4,
+ paddingHorizontal: 10,
+ gap: 20,
+ width: width - 90,
+ },
+ flexSearch: {
+ flexDirection: "row",
+ alignItems: "center",
+ width: "100%",
+ },
+ btnFilter: {
+ width: 40,
+ height: 35,
+ backgroundColor: "#fff",
+ borderRadius: 8,
+ marginLeft: 10,
+ textAlign: "center",
+ flexDirection: "row",
+ justifyContent: "center",
+ alignItems: "center",
+ lineHeight: 35,
+ },
+ placeholder: {
+ fontSize: 12,
+ fontWeight: "500",
+ color: "rgba(169, 169, 169, 1)",
+ fontFamily: "Roboto",
+ lineHeight: 21,
+ },
+ rightSection: {
+ flexDirection: "row",
+ alignItems: "center",
+ gap: 9,
+ },
+ divider: {
+ width: 1,
+ height: 20,
+ backgroundColor: "rgba(179, 179, 179, 1)",
+ },
+ searchIcon: {
+ width: 16,
+ height: 16,
+ resizeMode: "contain",
+ },
+ bgSearch: {
+ width: "100%",
+ padding: 10,
+ paddingTop: 20,
+ paddingBottom: 20,
+ },
+ titleSearch: {
+ fontSize: 18,
+ textAlign: "center",
+ color: "#fff",
+ fontWeight: 700,
+ paddingBottom: 7,
+ },
+ noteSearch: {
+ textAlign: "center",
+ color: "#fff",
+ paddingTop: 7,
+ },
+ iconSearch: {
+ width: 24,
+ paddingLeft: 10,
+ },
+ input: {
+ width: width - 14,
+ outlineWidth: 0,
+ height: 35,
+ },
+});
diff --git a/src/screens/repair_address/LocationFilters.tsx b/src/screens/repair_address/LocationFilters.tsx
new file mode 100644
index 0000000..05c2522
--- /dev/null
+++ b/src/screens/repair_address/LocationFilters.tsx
@@ -0,0 +1,126 @@
+import React from "react";
+import { View, Text, Image, StyleSheet, Dimensions } from "react-native";
+const { width } = Dimensions.get("window");
+
+interface LocationButtonProps {
+ title: string;
+}
+
+const LocationButton: React.FC = ({ title }) => {
+ return (
+
+
+ {title}
+
+ );
+};
+
+export default function LocationFilters() {
+ const locations = [
+ {
+ title: "Hà Nội",
+ },
+ {
+ title: "TP.HCM",
+ },
+ {
+ title: "Hải Phòng",
+ },
+ {
+ title: "Huế",
+ },
+ {
+ title: "Đà Nẵng",
+ },
+ {
+ title: "Cần Thơ",
+ },
+ {
+ title: "Quảng Ninh",
+ },
+ {
+ title: "Cao Bằng",
+ },
+ {
+ title: "Lào Cai",
+ },
+ {
+ title: "Sơn La",
+ },
+ {
+ title: "Lạng Sơn",
+ },
+ {
+ title: "Hưng Yên",
+ },
+ {
+ title: "Ninh Bình",
+ },
+ {
+ title: "Hà Tĩnh",
+ },
+ {
+ title: "Thanh Hoá",
+ },
+ ];
+
+ return (
+
+ Tìm theo tỉnh thành
+
+ {locations.map((location, index) => (
+
+ ))}
+
+
+ );
+}
+
+const styles = StyleSheet.create({
+ container: {
+ borderRadius: 4,
+ borderWidth: 1,
+ borderColor: "rgba(240, 240, 240, 1)",
+ paddingTop: 12,
+ paddingHorizontal: 10,
+ paddingBottom: 21,
+ marginTop: 12,
+ },
+ title: {
+ fontSize: 20,
+ fontWeight: "700",
+ color: "rgba(0, 0, 0, 1)",
+ textAlign: "center",
+ },
+ locationRow: {
+ flexDirection: "row",
+ flexWrap: "wrap",
+ gap: 8,
+ marginTop: 8,
+ },
+ locationButton: {
+ flexDirection: "row",
+ alignItems: "center",
+ gap: 5,
+ borderRadius: 4,
+ borderWidth: 1,
+ borderColor: "rgba(227, 227, 227, 1)",
+ padding: 5,
+ minHeight: 32,
+ width: width / 3 - 20,
+ },
+ locationIcon: {
+ width: 20,
+ height: 20,
+ resizeMode: "contain",
+ },
+ locationText: {
+ fontSize: 13,
+ fontWeight: "400",
+ color: "rgba(89, 89, 89, 1)",
+ textAlign: "center",
+ },
+});
diff --git a/src/screens/repair_address/ServiceProviderList.tsx b/src/screens/repair_address/ServiceProviderList.tsx
new file mode 100644
index 0000000..cb2434c
--- /dev/null
+++ b/src/screens/repair_address/ServiceProviderList.tsx
@@ -0,0 +1,94 @@
+import React from "react";
+import { View, Text, Image, ScrollView, StyleSheet } from "react-native";
+import { ServiceProviderCard } from "@components/repair/ServiceProviderCard";
+
+const ServiceProviderList: React.FC = () => {
+ const providers = [
+ {
+ name: "Gearvn.com",
+ backgroundImage: require("../../../assets/images/showroom_gearvn.png"),
+ favoriteIcon: require("../../../assets/images/icon_heart.png"),
+ verifiedIcon: require("../../../assets/images/verifiedIcon.png"),
+ specialties: ["Laptop", "Phụ kiện", "+3 Khác"],
+ address:
+ "Địa chỉ: Tầng 7, toà nhà số 198 Nguyễn Thị Minh Khai, phường 6, quận 3, TP. Hồ Chí Minh",
+ phone: "Tel: 1800 6867 - 1800 6865",
+ website: "https:/ CP.com.vn/",
+ certifications: [
+ {
+ icon: require("../../../assets/images/icon_cert.png"),
+ name: "CompTIA A+",
+ color: "#fff8ee",
+ },
+ {
+ icon: require("../../../assets/images/icon_cert.png"),
+ name: "CompTIA Network+",
+ color: "#fff8ee",
+ },
+ ],
+ rate: 4,
+ rating: "4.6",
+ reviewCount: "26",
+ showroomCount: "Có 7 showroom",
+ isVerified: true,
+ },
+ {
+ name: "Hoanglongcomputer",
+ backgroundImage: require("../../../assets/images/showroom_hoanglong.png"),
+ favoriteIcon: require("../../../assets/images/icon_heart.png"),
+ specialties: ["Laptop", "Phụ kiện", "+3 Khác"],
+ address:
+ "Địa chỉ: Tầng 7, toà nhà số 198 Nguyễn Thị Minh Khai, phường 6, quận 3, TP. Hồ Chí Minh",
+ phone: "Tel: 1800 6867 - 1800 6865",
+ website: "https:/ CP.com.vn/",
+ certifications: [
+ {
+ icon: require("../../../assets/images/icon_cert.png"),
+ name: "CompTIA A+",
+ color: "#fff8ee",
+ },
+ {
+ icon: require("../../../assets/images/icon_cert.png"),
+ name: "CompTIA Network+",
+ color: "#fff8ee",
+ },
+ ],
+ rate: 5,
+ rating: "4.6",
+ reviewCount: "26",
+ showroomCount: "Có 7 showroom",
+ },
+ ];
+
+ return (
+
+ Địa chỉ nổi bật
+
+ {providers.map((provider, index) => (
+
+ ))}
+
+
+ );
+};
+
+export default ServiceProviderList;
+
+const styles = StyleSheet.create({
+ providersContainer: {
+ marginTop: 16,
+ },
+ sectionTitle: {
+ fontSize: 20,
+ fontWeight: "700",
+ color: "rgba(0, 0, 0, 1)",
+ textAlign: "center",
+ marginBottom: 8,
+ },
+ providerRow: {
+ flexDirection: "row",
+ flexWrap: "wrap",
+ gap: 10,
+ marginBottom: 10,
+ },
+});
diff --git a/src/screens/shop/DetailShop.tsx b/src/screens/shop/DetailShop.tsx
index d5326b3..42ad038 100644
--- a/src/screens/shop/DetailShop.tsx
+++ b/src/screens/shop/DetailShop.tsx
@@ -8,6 +8,7 @@ import {
Image,
StyleSheet,
Dimensions,
+ Linking,
} from "react-native";
import { useNavigation, NavigationProp } from "@react-navigation/native";
import AppLayout from "@layouts/AppLayout";
@@ -22,6 +23,10 @@ const { width } = Dimensions.get("window");
export default function DetailShop() {
const navigation = useNavigation>();
+ const openLink = (url: string) => {
+ Linking.openURL(url).catch((err) => console.error("Lỗi mở link:", err));
+ };
+
return (