فهرست منبع

badge_premium

Viktoriia 1 ماه پیش
والد
کامیت
0d65a3d8e7
22فایلهای تغییر یافته به همراه184 افزوده شده و 76 حذف شده
  1. 2 0
      assets/icons/premium.svg
  2. 1 0
      src/modules/api/ranking/ranking-api.tsx
  3. 1 0
      src/modules/api/regions/regions-api.tsx
  4. 1 0
      src/modules/api/series/series-api.tsx
  5. 1 0
      src/modules/api/user/user-api.tsx
  6. 29 13
      src/screens/InAppScreens/MapScreen/UsersListScreen/Profile/index.tsx
  7. 1 0
      src/screens/InAppScreens/MapScreen/UsersListScreen/index.tsx
  8. 28 12
      src/screens/InAppScreens/MessagesScreen/Components/Profile.tsx
  9. 1 0
      src/screens/InAppScreens/MessagesScreen/GroupSettingsScreen/index.tsx
  10. 1 0
      src/screens/InAppScreens/MessagesScreen/MembersListScreen/index.tsx
  11. 29 12
      src/screens/InAppScreens/ProfileScreen/MyFriendsScreen/FriendsProfile/index.tsx
  12. 1 0
      src/screens/InAppScreens/ProfileScreen/MyFriendsScreen/index.tsx
  13. 35 19
      src/screens/InAppScreens/ProfileScreen/index.tsx
  14. 32 16
      src/screens/InAppScreens/TravellersScreen/Components/Profile.tsx
  15. 14 4
      src/screens/InAppScreens/TravellersScreen/Components/SeriesRankingItem.tsx
  16. 1 0
      src/screens/InAppScreens/TravellersScreen/InHistoryScreen/index.tsx
  17. 1 0
      src/screens/InAppScreens/TravellersScreen/InMemoriamScreen/index.tsx
  18. 1 0
      src/screens/InAppScreens/TravellersScreen/LPIRankingScreen/index.tsx
  19. 1 0
      src/screens/InAppScreens/TravellersScreen/MasterRankingScreen/index.tsx
  20. 1 0
      src/screens/InAppScreens/TravellersScreen/index.tsx
  21. 1 0
      src/screens/InAppScreens/TravellersScreen/utils/types.ts
  22. 1 0
      src/screens/InAppScreens/TravelsScreen/ParticipantsListScreen/index.tsx

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 2 - 0
assets/icons/premium.svg


+ 1 - 0
src/modules/api/ranking/ranking-api.tsx

@@ -31,6 +31,7 @@ export interface PostGetRanking extends ResponseType {
     badge_un_100: 0 | 1;
     badge_un_150: 0 | 1;
     badge_un_193: 0 | 1;
+    badge_premium: 0 | 1;
     badge_supreme: number;
     badge_tbt: number;
     badge_offline: number;

+ 1 - 0
src/modules/api/regions/regions-api.tsx

@@ -87,6 +87,7 @@ export interface User {
   badge_un_100: 0 | 1;
   badge_un_150: 0 | 1;
   badge_un_193: 0 | 1;
+  badge_premium: 0 | 1;
   badge_supreme: 0 | 1;
   badge_tbt: 0 | 1;
   badge_offline: 0 | 1;

+ 1 - 0
src/modules/api/series/series-api.tsx

@@ -102,6 +102,7 @@ export interface RankingData {
     badge_un_100: 0 | 1;
     badge_un_150: 0 | 1;
     badge_un_193: 0 | 1;
+    badge_premium: 0 | 1;
     flag1: string;
     flag2: string | null;
     rip: boolean;

+ 1 - 0
src/modules/api/user/user-api.tsx

@@ -252,6 +252,7 @@ export interface PostGetProfileDataReturn extends ResponseType {
       badge_un_100: 0 | 1;
       badge_un_150: 0 | 1;
       badge_un_193: 0 | 1;
+      badge_premium: 0 | 1;
       badges: number;
       bio: string;
       email: string;

+ 29 - 13
src/screens/InAppScreens/MapScreen/UsersListScreen/Profile/index.tsx

@@ -15,11 +15,12 @@ import UN100Icon from 'assets/icons/un-100.svg';
 import UN150Icon from 'assets/icons/un-150.svg';
 import NMIcon from 'assets/icons/nm_icon.svg';
 import DotsIcon from 'assets/icons/messages/dots-vertical.svg';
+import PremiumIcon from 'assets/icons/premium.svg';
 
 import { useConnection } from 'src/contexts/ConnectionContext';
 import { NAVIGATION_PAGES } from 'src/types';
 import { API_HOST } from 'src/constants';
-import { adaptiveStyle } from 'src/theme';
+import { adaptiveStyle, Colors } from 'src/theme';
 import {
   ProfileStyles,
   ScoreStyles
@@ -46,6 +47,7 @@ type Props = {
   badge_un_75: number;
   badge_un_100: number;
   badge_un_150: number;
+  badge_premium: number;
   auth: number;
   userId: number;
   withMenu?: boolean;
@@ -71,6 +73,7 @@ export const Profile: FC<Props> = ({
   badge_un_75,
   badge_un_100,
   badge_un_150,
+  badge_premium,
   auth,
   userId,
   withMenu,
@@ -102,18 +105,31 @@ export const Profile: FC<Props> = ({
         style={{ flex: 1, paddingHorizontal: 8, paddingVertical: 3 }}
       >
         <View style={adaptiveStyle(ProfileStyles.profileRoot, {})}>
-          {avatar ? (
-            <Image
-              style={adaptiveStyle(ProfileStyles.profileAvatar, {})}
-              source={{ uri: API_HOST + avatar }}
-            />
-          ) : homebase_flag ? (
-            <AvatarWithInitials
-              text={`${first_name[0] ?? ''}${last_name[0] ?? ''}`}
-              flag={API_HOST + homebase_flag}
-              size={48}
-            />
-          ) : null}
+          <View style={{ position: 'relative' }}>
+            {avatar ? (
+              <Image
+                style={adaptiveStyle(ProfileStyles.profileAvatar, {})}
+                source={{ uri: API_HOST + avatar }}
+              />
+            ) : homebase_flag ? (
+              <AvatarWithInitials
+                text={`${first_name[0] ?? ''}${last_name[0] ?? ''}`}
+                flag={API_HOST + homebase_flag}
+                size={48}
+              />
+            ) : null}
+            <View
+              style={{
+                position: 'absolute',
+                bottom: 0,
+                right: 0,
+                justifyContent: 'center',
+                alignItems: 'center'
+              }}
+            >
+              {badge_premium ? <PremiumIcon width={16} height={16} /> : null}
+            </View>
+          </View>
           <View style={adaptiveStyle(ProfileStyles.profileDataRoot, {})}>
             <Text
               style={adaptiveStyle(

+ 1 - 0
src/screens/InAppScreens/MapScreen/UsersListScreen/index.tsx

@@ -364,6 +364,7 @@ const UsersListScreen: FC<Props> = ({ navigation, route }) => {
             badge_un_75={item.badge_un_75}
             badge_un_100={item.badge_un_100}
             badge_un_150={item.badge_un_150}
+            badge_premium={item.badge_premium}
             auth={item.auth}
           />
         )}

+ 28 - 12
src/screens/InAppScreens/MessagesScreen/Components/Profile.tsx

@@ -15,6 +15,7 @@ import UN100Icon from 'assets/icons/un-100.svg';
 import UN150Icon from 'assets/icons/un-150.svg';
 import NMIcon from 'assets/icons/nm_icon.svg';
 import DotsIcon from 'assets/icons/messages/dots-vertical.svg';
+import PremiumIcon from 'assets/icons/premium.svg';
 
 import { useConnection } from 'src/contexts/ConnectionContext';
 import { NAVIGATION_PAGES } from 'src/types';
@@ -53,6 +54,7 @@ type Props = {
   badge_un_75: number;
   badge_un_100: number;
   badge_un_150: number;
+  badge_premium: number;
   auth: number;
   userId: number;
 };
@@ -82,6 +84,7 @@ export const Profile: FC<Props> = ({
   badge_un_75,
   badge_un_100,
   badge_un_150,
+  badge_premium,
   auth,
   userId
 }) => {
@@ -113,18 +116,31 @@ export const Profile: FC<Props> = ({
         style={{ flex: 1, paddingHorizontal: 8, paddingVertical: 3 }}
       >
         <View style={adaptiveStyle(ProfileStyles.profileRoot, {})}>
-          {avatar ? (
-            <Image
-              style={adaptiveStyle(ProfileStyles.profileAvatar, {})}
-              source={{ uri: API_HOST + avatar }}
-            />
-          ) : homebase_flag ? (
-            <AvatarWithInitials
-              text={`${first_name[0] ?? ''}${last_name[0] ?? ''}`}
-              flag={API_HOST + homebase_flag}
-              size={48}
-            />
-          ) : null}
+          <View style={{ position: 'relative' }}>
+            {avatar ? (
+              <Image
+                style={adaptiveStyle(ProfileStyles.profileAvatar, {})}
+                source={{ uri: API_HOST + avatar }}
+              />
+            ) : homebase_flag ? (
+              <AvatarWithInitials
+                text={`${first_name[0] ?? ''}${last_name[0] ?? ''}`}
+                flag={API_HOST + homebase_flag}
+                size={48}
+              />
+            ) : null}
+            <View
+              style={{
+                position: 'absolute',
+                bottom: 0,
+                right: 0,
+                justifyContent: 'center',
+                alignItems: 'center'
+              }}
+            >
+              {badge_premium ? <PremiumIcon width={16} height={16} /> : null}
+            </View>
+          </View>
           <View style={adaptiveStyle(ProfileStyles.profileDataRoot, {})}>
             <View
               style={{

+ 1 - 0
src/screens/InAppScreens/MessagesScreen/GroupSettingsScreen/index.tsx

@@ -348,6 +348,7 @@ const GroupSettingScreen: FC<Props> = ({ navigation, route }) => {
                       badge_un_75={item.ranking_data?.badge_un_75}
                       badge_un_100={item.ranking_data?.badge_un_100}
                       badge_un_150={item.ranking_data?.badge_un_150}
+                      badge_premium={item.ranking_data?.badge_premium}
                       auth={item.ranking_data?.auth}
                     />
                   )}

+ 1 - 0
src/screens/InAppScreens/MessagesScreen/MembersListScreen/index.tsx

@@ -151,6 +151,7 @@ const MembersListScreen: FC<Props> = ({ navigation, route }) => {
               badge_un_75={item.ranking_data?.badge_un_75}
               badge_un_100={item.ranking_data?.badge_un_100}
               badge_un_150={item.ranking_data?.badge_un_150}
+              badge_premium={item.ranking_data?.badge_premium}
               auth={item.ranking_data?.auth}
             />
           )}

+ 29 - 12
src/screens/InAppScreens/ProfileScreen/MyFriendsScreen/FriendsProfile/index.tsx

@@ -21,6 +21,8 @@ import UN75Icon from 'assets/icons/un-75.svg';
 import UN100Icon from 'assets/icons/un-100.svg';
 import UN150Icon from 'assets/icons/un-150.svg';
 import NMIcon from 'assets/icons/nm_icon.svg';
+import PremiumIcon from 'assets/icons/premium.svg';
+
 import { styles } from '../../Components/styles';
 
 type Props = {
@@ -43,6 +45,7 @@ type Props = {
   badge_un_75: number;
   badge_un_100: number;
   badge_un_150: number;
+  badge_premium: number;
   auth: number;
   userId: number;
   type: 'friends' | 'sent' | 'received';
@@ -68,6 +71,7 @@ export const FriendsProfile: FC<Props> = ({
   badge_un_75,
   badge_un_100,
   badge_un_150,
+  badge_premium,
   auth,
   userId,
   type,
@@ -210,18 +214,31 @@ export const FriendsProfile: FC<Props> = ({
         style={{ flex: 1, paddingHorizontal: 8, paddingVertical: 3 }}
       >
         <View style={adaptiveStyle(ProfileStyles.profileRoot, {})}>
-          {avatar ? (
-            <Image
-              style={adaptiveStyle(ProfileStyles.profileAvatar, {})}
-              source={{ uri: API_HOST + avatar }}
-            />
-          ) : homebase_flag ? (
-            <AvatarWithInitials
-              text={`${first_name[0] ?? ''}${last_name[0] ?? ''}`}
-              flag={API_HOST + homebase_flag}
-              size={48}
-            />
-          ) : null}
+          <View style={{ position: 'relative' }}>
+            {avatar ? (
+              <Image
+                style={adaptiveStyle(ProfileStyles.profileAvatar, {})}
+                source={{ uri: API_HOST + avatar }}
+              />
+            ) : homebase_flag ? (
+              <AvatarWithInitials
+                text={`${first_name[0] ?? ''}${last_name[0] ?? ''}`}
+                flag={API_HOST + homebase_flag}
+                size={48}
+              />
+            ) : null}
+            <View
+              style={{
+                position: 'absolute',
+                bottom: 0,
+                right: 0,
+                justifyContent: 'center',
+                alignItems: 'center'
+              }}
+            >
+              {badge_premium ? <PremiumIcon width={16} height={16} /> : null}
+            </View>
+          </View>
           <View style={adaptiveStyle(ProfileStyles.profileDataRoot, {})}>
             <Text
               style={adaptiveStyle(

+ 1 - 0
src/screens/InAppScreens/ProfileScreen/MyFriendsScreen/index.tsx

@@ -274,6 +274,7 @@ const MyFriendsScreen: FC<Props> = ({ navigation }) => {
                   badge_un_75={item.badge_un_75}
                   badge_un_100={item.badge_un_100}
                   badge_un_150={item.badge_un_150}
+                  badge_premium={item.badge_premium}
                   auth={item.auth}
                   type={route.key}
                   updateFriendStatus={handleUpdateFriendStatus}

+ 35 - 19
src/screens/InAppScreens/ProfileScreen/index.tsx

@@ -42,6 +42,7 @@ import UnverifiedIcon from '../../../../assets/icons/unverified.svg';
 import CommentsIcon from '../../../../assets/icons/messages/comments.svg';
 import MapSvg from 'assets/icons/travels-screens/map-location.svg';
 import InfoIcon from 'assets/icons/info-solid.svg';
+import PremiumIcon from 'assets/icons/premium.svg';
 
 import { ProfileStyles, ScoreStyles, TBTStyles } from '../TravellersScreen/Components/styles';
 import UnauthenticatedProfileScreen from './UnauthenticatedProfileScreen';
@@ -266,26 +267,40 @@ const ProfileScreen: FC<Props> = ({ navigation, route }) => {
 
         <View style={styles.pageWrapper}>
           <View style={{ gap: 8 }}>
-            {data.user_data.avatar ? (
-              <TouchableOpacity
-                onPress={() => setFullSizeImageVisible(true)}
-                disabled={!data.user_data.avatar}
-              >
-                <Image
-                  style={styles.avatar}
-                  source={{
-                    uri: API_HOST + '/img/avatars/' + data.user_data.avatar + '?v=' + avatarVersion
-                  }}
+            <View style={{ position: 'relative' }}>
+              {data.user_data.avatar ? (
+                <TouchableOpacity
+                  onPress={() => setFullSizeImageVisible(true)}
+                  disabled={!data.user_data.avatar}
+                >
+                  <Image
+                    style={styles.avatar}
+                    source={{
+                      uri:
+                        API_HOST + '/img/avatars/' + data.user_data.avatar + '?v=' + avatarVersion
+                    }}
+                  />
+                </TouchableOpacity>
+              ) : (
+                <AvatarWithInitials
+                  text={`${data.user_data.first_name[0] ?? ''}${data.user_data.last_name[0] ?? ''}`}
+                  flag={API_HOST + '/img/flags_new/' + data.user_data.flag1}
+                  size={64}
+                  borderColor={Colors.WHITE}
                 />
-              </TouchableOpacity>
-            ) : (
-              <AvatarWithInitials
-                text={`${data.user_data.first_name[0] ?? ''}${data.user_data.last_name[0] ?? ''}`}
-                flag={API_HOST + '/img/flags_new/' + data.user_data.flag1}
-                size={64}
-                borderColor={Colors.WHITE}
-              />
-            )}
+              )}
+              <View
+                style={{
+                  position: 'absolute',
+                  bottom: 0,
+                  right: 0,
+                  justifyContent: 'center',
+                  alignItems: 'center'
+                }}
+              >
+                {data.user_data.badge_premium ? <PremiumIcon /> : null}
+              </View>
+            </View>
             {data.scores.rank_tbt && data.scores.rank_tbt >= 1 ? <TBRanking /> : null}
             {isFriend === 1 && token && data.own_profile === 0 ? (
               <TouchableOpacity style={styles.friend} onPress={() => openModal('isModalVisible')}>
@@ -397,6 +412,7 @@ const ProfileScreen: FC<Props> = ({ navigation, route }) => {
                           badge_un_75: data.user_data.badge_un_75,
                           badge_un_100: data.user_data.badge_un_100,
                           badge_un_150: data.user_data.badge_un_150,
+                          badge_premium: data.user_data.badge_premium,
                           scores: data.scores
                         }
                       })

+ 32 - 16
src/screens/InAppScreens/TravellersScreen/Components/Profile.tsx

@@ -25,6 +25,7 @@ import UN100Icon from '../../../../../assets/icons/un-100.svg';
 import UN150Icon from '../../../../../assets/icons/un-150.svg';
 import TBTIcon from '../../../../../assets/icons/tbt.svg';
 import MonumentIcon from '../../../../../assets/icons/monument.svg';
+import PremiumIcon from 'assets/icons/premium.svg';
 
 import { NAVIGATION_PAGES } from '../../../../types';
 import { useConnection } from 'src/contexts/ConnectionContext';
@@ -49,6 +50,7 @@ type Props = {
   badge_un_75: number;
   badge_un_100: number;
   badge_un_150: number;
+  badge_premium: number;
   auth: number;
   userId: number;
 };
@@ -73,6 +75,7 @@ export const Profile: FC<Props> = ({
   badge_un_75,
   badge_un_100,
   badge_un_150,
+  badge_premium,
   auth,
   userId
 }) => {
@@ -247,22 +250,35 @@ export const Profile: FC<Props> = ({
         <TouchableOpacity onPress={() => handlePress()}>
           <View style={adaptiveStyle(ProfileStyles.profileRoot, {})}>
             <View style={ProfileStyles.avatarContainer}>
-              {avatar && avatarBaseUri ? (
-                <Grayscale amount={index === -1 ? 1 : 0}>
-                  <Image
-                    style={adaptiveStyle(ProfileStyles.profileAvatar, {})}
-                    source={{ uri: avatarBaseUri + avatar }}
-                  />
-                </Grayscale>
-              ) : homebase_flag ? (
-                <Grayscale amount={index === -1 ? 1 : 0}>
-                  <AvatarWithInitials
-                    text={`${first_name[0] ?? ''}${last_name[0] ?? ''}`}
-                    flag={flagBaseUri + homebase_flag}
-                    size={48}
-                  />
-                </Grayscale>
-              ) : null}
+              <View style={{ position: 'relative' }}>
+                {avatar && avatarBaseUri ? (
+                  <Grayscale amount={index === -1 ? 1 : 0}>
+                    <Image
+                      style={adaptiveStyle(ProfileStyles.profileAvatar, {})}
+                      source={{ uri: avatarBaseUri + avatar }}
+                    />
+                  </Grayscale>
+                ) : homebase_flag ? (
+                  <Grayscale amount={index === -1 ? 1 : 0}>
+                    <AvatarWithInitials
+                      text={`${first_name[0] ?? ''}${last_name[0] ?? ''}`}
+                      flag={flagBaseUri + homebase_flag}
+                      size={48}
+                    />
+                  </Grayscale>
+                ) : null}
+                <View
+                  style={{
+                    position: 'absolute',
+                    bottom: 0,
+                    right: 0,
+                    justifyContent: 'center',
+                    alignItems: 'center'
+                  }}
+                >
+                  {badge_premium ? <PremiumIcon width={16} height={16} /> : null}
+                </View>
+              </View>
             </View>
             <View style={adaptiveStyle(ProfileStyles.profileDataRoot, {})}>
               <Text

+ 14 - 4
src/screens/InAppScreens/TravellersScreen/Components/SeriesRankingItem.tsx

@@ -21,6 +21,7 @@ import UN75Icon from 'assets/icons/un-75.svg';
 import UN100Icon from 'assets/icons/un-100.svg';
 import UN150Icon from 'assets/icons/un-150.svg';
 import ArrowIcon from 'assets/icons/arrow-bold.svg';
+import PremiumIcon from 'assets/icons/premium.svg';
 
 const SeriesRankingItem = React.memo(
   ({
@@ -35,9 +36,7 @@ const SeriesRankingItem = React.memo(
     const netInfo = useConnection();
     const isSmallScreen = Dimensions.get('window').width < 383;
 
-    const avatarBaseUri = netInfo?.isInternetReachable
-      ? API_HOST + item.avatar
-      : null;
+    const avatarBaseUri = netInfo?.isInternetReachable ? API_HOST + item.avatar : null;
 
     const flagBaseUri = (flag: string) =>
       netInfo?.isInternetReachable
@@ -63,7 +62,7 @@ const SeriesRankingItem = React.memo(
             >
               <Text style={ScoreStyles.rankText}>{index + 1}</Text>
             </View>
-            <View style={{ marginLeft: 4 }}>
+            <View style={{ marginLeft: 4, position: 'relative' }}>
               {item.avatar && avatarBaseUri ? (
                 <Image style={ProfileStyles.profileAvatar} source={{ uri: avatarBaseUri }} />
               ) : (
@@ -73,6 +72,17 @@ const SeriesRankingItem = React.memo(
                   size={48}
                 />
               )}
+              <View
+                style={{
+                  position: 'absolute',
+                  bottom: 0,
+                  right: 0,
+                  justifyContent: 'center',
+                  alignItems: 'center'
+                }}
+              >
+                {item.badge_premium ? <PremiumIcon width={16} height={16} /> : null}
+              </View>
             </View>
           </View>
           <View style={{ gap: 5, flex: 1 }}>

+ 1 - 0
src/screens/InAppScreens/TravellersScreen/InHistoryScreen/index.tsx

@@ -73,6 +73,7 @@ const InHistoryScreen = () => {
             badge_un_75={item.badge_un_75}
             badge_un_100={item.badge_un_100}
             badge_un_150={item.badge_un_150}
+            badge_premium={item.badge_premium}
             auth={item.auth}
           />
         )}

+ 1 - 0
src/screens/InAppScreens/TravellersScreen/InMemoriamScreen/index.tsx

@@ -105,6 +105,7 @@ const InMemoriamScreen = () => {
             badge_un_75={item.badge_un_75}
             badge_un_100={item.badge_un_100}
             badge_un_150={item.badge_un_150}
+            badge_premium={item.badge_premium}
             auth={item.auth}
           />
         )}

+ 1 - 0
src/screens/InAppScreens/TravellersScreen/LPIRankingScreen/index.tsx

@@ -105,6 +105,7 @@ const LPIRankingScreen = () => {
             badge_un_75={item.badge_un_75}
             badge_un_100={item.badge_un_100}
             badge_un_150={item.badge_un_150}
+            badge_premium={item.badge_premium}
             auth={item.auth}
           />
         )}

+ 1 - 0
src/screens/InAppScreens/TravellersScreen/MasterRankingScreen/index.tsx

@@ -164,6 +164,7 @@ const MasterRankingScreen = () => {
               badge_un_75={item.badge_un_75}
               badge_un_100={item.badge_un_100}
               badge_un_150={item.badge_un_150}
+              badge_premium={item.badge_premium}
               auth={item.auth}
             />
           )}

+ 1 - 0
src/screens/InAppScreens/TravellersScreen/index.tsx

@@ -146,6 +146,7 @@ export interface Ranking {
   badge_un_100: number;
   badge_un_150: number;
   badge_un_193: number;
+  badge_premium: number;
   badge_supreme: number;
   badge_tbt: number;
   badge_offline: number;

+ 1 - 0
src/screens/InAppScreens/TravellersScreen/utils/types.ts

@@ -54,6 +54,7 @@ export interface SeriesRanking {
   badge_un_100: 0 | 1;
   badge_un_150: 0 | 1;
   badge_un_193: 0 | 1;
+  badge_premium: 0 | 1;
   flag1: string;
   flag2: string | null;
   rip: boolean;

+ 1 - 0
src/screens/InAppScreens/TravelsScreen/ParticipantsListScreen/index.tsx

@@ -139,6 +139,7 @@ const ParticipantsListScreen: FC<Props> = ({ navigation, route }) => {
               badge_un_75={item.badge_un_75}
               badge_un_100={item.badge_un_100}
               badge_un_150={item.badge_un_150}
+              badge_premium={item.badge_premium}
               auth={item.auth}
             />
           )}

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است