@oxyhq/services 5.4.1 → 5.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/assets/icons/OxyServices.js +1 -1
- package/lib/commonjs/core/index.js +84 -2
- package/lib/commonjs/core/index.js.map +1 -1
- package/lib/commonjs/index.js +22 -22
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/node/index.js +6 -6
- package/lib/commonjs/node/index.js.map +1 -1
- package/lib/commonjs/ui/components/Avatar.js +3 -3
- package/lib/commonjs/ui/components/Avatar.js.map +1 -1
- package/lib/commonjs/ui/components/FollowButton.js +3 -3
- package/lib/commonjs/ui/components/GroupedSection.js +1 -1
- package/lib/commonjs/ui/components/OxyLogo.js +1 -1
- package/lib/commonjs/ui/components/OxyProvider.js +13 -13
- package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
- package/lib/commonjs/ui/components/OxySignInButton.js +2 -2
- package/lib/commonjs/ui/components/ProfileCard.js +2 -2
- package/lib/commonjs/ui/components/Section.js +1 -1
- package/lib/commonjs/ui/components/SectionTitle.js +1 -1
- package/lib/commonjs/ui/components/icon/index.js +1 -1
- package/lib/commonjs/ui/components/index.js +12 -12
- package/lib/commonjs/ui/context/OxyContext.js +20 -4
- package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
- package/lib/commonjs/ui/index.js +11 -11
- package/lib/commonjs/ui/index.js.map +1 -1
- package/lib/commonjs/ui/navigation/OxyRouter.js +18 -18
- package/lib/commonjs/ui/screens/AccountCenterScreen.js +18 -18
- package/lib/commonjs/ui/screens/AccountCenterScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountManagementDemo.js +3 -3
- package/lib/commonjs/ui/screens/AccountManagementDemo.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountOverviewScreen.js +45 -27
- package/lib/commonjs/ui/screens/AccountOverviewScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountSettingsScreen.js +29 -22
- package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountSwitcherScreen.js +3 -3
- package/lib/commonjs/ui/screens/AppInfoScreen.js +6 -6
- package/lib/commonjs/ui/screens/BillingManagementScreen.js +3 -3
- package/lib/commonjs/ui/screens/FileManagementScreen.js +324 -306
- package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js +3 -3
- package/lib/commonjs/ui/screens/ProfileScreen.js +2 -2
- package/lib/commonjs/ui/screens/SessionManagementScreen.js +2 -2
- package/lib/commonjs/ui/screens/SignInScreen.js +358 -310
- package/lib/commonjs/ui/screens/SignInScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/SignUpScreen.js +483 -308
- package/lib/commonjs/ui/screens/SignUpScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/karma/KarmaCenterScreen.js +3 -3
- package/lib/commonjs/ui/screens/karma/KarmaFAQScreen.js +51 -26
- package/lib/commonjs/ui/screens/karma/KarmaFAQScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/karma/KarmaLeaderboardScreen.js +2 -2
- package/lib/commonjs/ui/screens/karma/KarmaRulesScreen.js +1 -1
- package/lib/commonjs/ui/styles/index.js +2 -2
- package/lib/commonjs/ui/styles/theme.js +1 -1
- package/lib/commonjs/utils/index.js +1 -1
- package/lib/module/assets/icons/OxyServices.js +1 -1
- package/lib/module/assets/icons/OxyServices.js.map +1 -1
- package/lib/module/core/index.js +84 -2
- package/lib/module/core/index.js.map +1 -1
- package/lib/module/index.js +10 -10
- package/lib/module/index.js.map +1 -1
- package/lib/module/node/index.js +4 -4
- package/lib/module/node/index.js.map +1 -1
- package/lib/module/ui/components/Avatar.js +2 -2
- package/lib/module/ui/components/Avatar.js.map +1 -1
- package/lib/module/ui/components/FollowButton.js +3 -3
- package/lib/module/ui/components/FollowButton.js.map +1 -1
- package/lib/module/ui/components/GroupedSection.js +1 -1
- package/lib/module/ui/components/GroupedSection.js.map +1 -1
- package/lib/module/ui/components/OxyLogo.js +1 -1
- package/lib/module/ui/components/OxyLogo.js.map +1 -1
- package/lib/module/ui/components/OxyProvider.js +10 -10
- package/lib/module/ui/components/OxyProvider.js.map +1 -1
- package/lib/module/ui/components/OxySignInButton.js +2 -2
- package/lib/module/ui/components/OxySignInButton.js.map +1 -1
- package/lib/module/ui/components/ProfileCard.js +2 -2
- package/lib/module/ui/components/ProfileCard.js.map +1 -1
- package/lib/module/ui/components/Section.js +1 -1
- package/lib/module/ui/components/Section.js.map +1 -1
- package/lib/module/ui/components/SectionTitle.js +1 -1
- package/lib/module/ui/components/SectionTitle.js.map +1 -1
- package/lib/module/ui/components/icon/index.js +1 -1
- package/lib/module/ui/components/icon/index.js.map +1 -1
- package/lib/module/ui/components/index.js +12 -12
- package/lib/module/ui/components/index.js.map +1 -1
- package/lib/module/ui/context/OxyContext.js +20 -4
- package/lib/module/ui/context/OxyContext.js.map +1 -1
- package/lib/module/ui/index.js +10 -10
- package/lib/module/ui/index.js.map +1 -1
- package/lib/module/ui/navigation/OxyRouter.js +18 -18
- package/lib/module/ui/navigation/OxyRouter.js.map +1 -1
- package/lib/module/ui/screens/AccountCenterScreen.js +5 -5
- package/lib/module/ui/screens/AccountCenterScreen.js.map +1 -1
- package/lib/module/ui/screens/AccountManagementDemo.js +2 -2
- package/lib/module/ui/screens/AccountManagementDemo.js.map +1 -1
- package/lib/module/ui/screens/AccountOverviewScreen.js +46 -28
- package/lib/module/ui/screens/AccountOverviewScreen.js.map +1 -1
- package/lib/module/ui/screens/AccountSettingsScreen.js +30 -23
- package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
- package/lib/module/ui/screens/AccountSwitcherScreen.js +3 -3
- package/lib/module/ui/screens/AccountSwitcherScreen.js.map +1 -1
- package/lib/module/ui/screens/AppInfoScreen.js +6 -6
- package/lib/module/ui/screens/AppInfoScreen.js.map +1 -1
- package/lib/module/ui/screens/BillingManagementScreen.js +3 -3
- package/lib/module/ui/screens/BillingManagementScreen.js.map +1 -1
- package/lib/module/ui/screens/FileManagementScreen.js +325 -307
- package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
- package/lib/module/ui/screens/PremiumSubscriptionScreen.js +3 -3
- package/lib/module/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
- package/lib/module/ui/screens/ProfileScreen.js +2 -2
- package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
- package/lib/module/ui/screens/SessionManagementScreen.js +2 -2
- package/lib/module/ui/screens/SessionManagementScreen.js.map +1 -1
- package/lib/module/ui/screens/SignInScreen.js +358 -310
- package/lib/module/ui/screens/SignInScreen.js.map +1 -1
- package/lib/module/ui/screens/SignUpScreen.js +486 -309
- package/lib/module/ui/screens/SignUpScreen.js.map +1 -1
- package/lib/module/ui/screens/karma/KarmaCenterScreen.js +3 -3
- package/lib/module/ui/screens/karma/KarmaCenterScreen.js.map +1 -1
- package/lib/module/ui/screens/karma/KarmaFAQScreen.js +52 -27
- package/lib/module/ui/screens/karma/KarmaFAQScreen.js.map +1 -1
- package/lib/module/ui/screens/karma/KarmaLeaderboardScreen.js +2 -2
- package/lib/module/ui/screens/karma/KarmaLeaderboardScreen.js.map +1 -1
- package/lib/module/ui/screens/karma/KarmaRulesScreen.js +1 -1
- package/lib/module/ui/screens/karma/KarmaRulesScreen.js.map +1 -1
- package/lib/module/ui/styles/index.js +2 -2
- package/lib/module/ui/styles/index.js.map +1 -1
- package/lib/module/ui/styles/theme.js +1 -1
- package/lib/module/ui/styles/theme.js.map +1 -1
- package/lib/module/utils/index.js +1 -1
- package/lib/module/utils/index.js.map +1 -1
- package/lib/typescript/core/index.d.ts +24 -0
- package/lib/typescript/core/index.d.ts.map +1 -1
- package/lib/typescript/ui/components/OxyProvider.d.ts.map +1 -1
- package/lib/typescript/ui/context/OxyContext.d.ts.map +1 -1
- package/lib/typescript/ui/screens/AccountOverviewScreen.d.ts +2 -2
- package/lib/typescript/ui/screens/AccountOverviewScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/AccountSettingsScreen.d.ts +2 -2
- package/lib/typescript/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/FileManagementScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/SignInScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/SignUpScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/karma/KarmaFAQScreen.d.ts +2 -2
- package/lib/typescript/ui/screens/karma/KarmaFAQScreen.d.ts.map +1 -1
- package/package.json +21 -5
- package/src/core/index.ts +68 -0
- package/src/ui/components/OxyProvider.tsx +5 -5
- package/src/ui/context/OxyContext.tsx +61 -41
- package/src/ui/screens/AccountOverviewScreen.tsx +44 -26
- package/src/ui/screens/AccountSettingsScreen.tsx +24 -18
- package/src/ui/screens/FileManagementScreen.tsx +246 -211
- package/src/ui/screens/SignInScreen.tsx +382 -326
- package/src/ui/screens/SignUpScreen.tsx +443 -273
- package/src/ui/screens/karma/KarmaFAQScreen.tsx +50 -29
- package/lib/commonjs/package.json +0 -1
- package/lib/module/package.json +0 -1
|
@@ -6,9 +6,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
8
8
|
var _reactNative = require("react-native");
|
|
9
|
-
var _OxyContext = require("../context/OxyContext");
|
|
10
|
-
var _fonts = require("../styles/fonts");
|
|
11
|
-
var _sonner = require("../../lib/sonner");
|
|
9
|
+
var _OxyContext = require("../context/OxyContext.js");
|
|
10
|
+
var _fonts = require("../styles/fonts.js");
|
|
11
|
+
var _sonner = require("../../lib/sonner.js");
|
|
12
12
|
var _vectorIcons = require("@expo/vector-icons");
|
|
13
13
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
14
14
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
@@ -55,14 +55,25 @@ const FileManagementScreen = ({
|
|
|
55
55
|
const [photoDimensions, setPhotoDimensions] = (0, _react.useState)({});
|
|
56
56
|
const [loadingDimensions, setLoadingDimensions] = (0, _react.useState)(false);
|
|
57
57
|
const [hoveredPreview, setHoveredPreview] = (0, _react.useState)(null);
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
58
|
+
|
|
59
|
+
// Memoize theme-related calculations to prevent unnecessary recalculations
|
|
60
|
+
const themeStyles = (0, _react.useMemo)(() => {
|
|
61
|
+
const isDarkTheme = theme === 'dark';
|
|
62
|
+
return {
|
|
63
|
+
isDarkTheme,
|
|
64
|
+
textColor: isDarkTheme ? '#FFFFFF' : '#000000',
|
|
65
|
+
backgroundColor: isDarkTheme ? '#121212' : '#f2f2f2',
|
|
66
|
+
secondaryBackgroundColor: isDarkTheme ? '#222222' : '#FFFFFF',
|
|
67
|
+
borderColor: isDarkTheme ? '#444444' : '#E0E0E0',
|
|
68
|
+
primaryColor: '#007AFF',
|
|
69
|
+
dangerColor: '#FF3B30',
|
|
70
|
+
successColor: '#34C759'
|
|
71
|
+
};
|
|
72
|
+
}, [theme]);
|
|
73
|
+
|
|
74
|
+
// Extract commonly used theme variables
|
|
75
|
+
const backgroundColor = themeStyles.backgroundColor;
|
|
76
|
+
const borderColor = themeStyles.borderColor;
|
|
66
77
|
const targetUserId = userId || user?.id;
|
|
67
78
|
const loadFiles = (0, _react.useCallback)(async (isRefresh = false) => {
|
|
68
79
|
if (!targetUserId) return;
|
|
@@ -184,7 +195,7 @@ const FileManagementScreen = ({
|
|
|
184
195
|
}, [oxyServices, photoDimensions]);
|
|
185
196
|
|
|
186
197
|
// Create justified rows from photos with responsive algorithm
|
|
187
|
-
const createJustifiedRows = (0, _react.useCallback)(photos => {
|
|
198
|
+
const createJustifiedRows = (0, _react.useCallback)((photos, containerWidth) => {
|
|
188
199
|
if (photos.length === 0) return [];
|
|
189
200
|
const rows = [];
|
|
190
201
|
const photosPerRow = 3; // Fixed 3 photos per row for consistency
|
|
@@ -614,9 +625,10 @@ const FileManagementScreen = ({
|
|
|
614
625
|
const isVideo = file.contentType.startsWith('video/');
|
|
615
626
|
const isAudio = file.contentType.startsWith('audio/');
|
|
616
627
|
const hasPreview = isImage || isPDF || isVideo;
|
|
628
|
+
const borderColor = themeStyles.borderColor;
|
|
617
629
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
618
630
|
style: [styles.fileItem, {
|
|
619
|
-
backgroundColor: secondaryBackgroundColor,
|
|
631
|
+
backgroundColor: themeStyles.secondaryBackgroundColor,
|
|
620
632
|
borderColor
|
|
621
633
|
}],
|
|
622
634
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
|
|
@@ -663,10 +675,10 @@ const FileManagementScreen = ({
|
|
|
663
675
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
664
676
|
name: "document",
|
|
665
677
|
size: 32,
|
|
666
|
-
color: primaryColor
|
|
678
|
+
color: themeStyles.primaryColor
|
|
667
679
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
668
680
|
style: [styles.pdfLabel, {
|
|
669
|
-
color: primaryColor
|
|
681
|
+
color: themeStyles.primaryColor
|
|
670
682
|
}],
|
|
671
683
|
children: "PDF"
|
|
672
684
|
})]
|
|
@@ -675,10 +687,10 @@ const FileManagementScreen = ({
|
|
|
675
687
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
676
688
|
name: "play-circle",
|
|
677
689
|
size: 32,
|
|
678
|
-
color: primaryColor
|
|
690
|
+
color: themeStyles.primaryColor
|
|
679
691
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
680
692
|
style: [styles.videoLabel, {
|
|
681
|
-
color: primaryColor
|
|
693
|
+
color: themeStyles.primaryColor
|
|
682
694
|
}],
|
|
683
695
|
children: "VIDEO"
|
|
684
696
|
})]
|
|
@@ -692,7 +704,7 @@ const FileManagementScreen = ({
|
|
|
692
704
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
693
705
|
name: getFileIcon(file.contentType),
|
|
694
706
|
size: 32,
|
|
695
|
-
color: primaryColor
|
|
707
|
+
color: themeStyles.primaryColor
|
|
696
708
|
})
|
|
697
709
|
}), _reactNative.Platform.OS === 'web' && hoveredPreview === file.id && isImage && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
698
710
|
style: styles.previewOverlay,
|
|
@@ -707,25 +719,25 @@ const FileManagementScreen = ({
|
|
|
707
719
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
708
720
|
name: getFileIcon(file.contentType),
|
|
709
721
|
size: 32,
|
|
710
|
-
color: primaryColor
|
|
722
|
+
color: themeStyles.primaryColor
|
|
711
723
|
})
|
|
712
724
|
})
|
|
713
725
|
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
714
726
|
style: styles.fileInfo,
|
|
715
727
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
716
728
|
style: [styles.fileName, {
|
|
717
|
-
color: textColor
|
|
729
|
+
color: themeStyles.textColor
|
|
718
730
|
}],
|
|
719
731
|
numberOfLines: 1,
|
|
720
732
|
children: file.filename
|
|
721
733
|
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
|
|
722
734
|
style: [styles.fileDetails, {
|
|
723
|
-
color: isDarkTheme ? '#BBBBBB' : '#666666'
|
|
735
|
+
color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
|
|
724
736
|
}],
|
|
725
737
|
children: [formatFileSize(file.length), " \u2022 ", new Date(file.uploadDate).toLocaleDateString()]
|
|
726
738
|
}), file.metadata?.description && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
727
739
|
style: [styles.fileDescription, {
|
|
728
|
-
color: isDarkTheme ? '#AAAAAA' : '#888888'
|
|
740
|
+
color: themeStyles.isDarkTheme ? '#AAAAAA' : '#888888'
|
|
729
741
|
}],
|
|
730
742
|
numberOfLines: 2,
|
|
731
743
|
children: file.metadata.description
|
|
@@ -735,27 +747,27 @@ const FileManagementScreen = ({
|
|
|
735
747
|
style: styles.fileActions,
|
|
736
748
|
children: [hasPreview && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
|
|
737
749
|
style: [styles.actionButton, {
|
|
738
|
-
backgroundColor: isDarkTheme ? '#333333' : '#F0F0F0'
|
|
750
|
+
backgroundColor: themeStyles.isDarkTheme ? '#333333' : '#F0F0F0'
|
|
739
751
|
}],
|
|
740
752
|
onPress: () => handleFileOpen(file),
|
|
741
753
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
742
754
|
name: "eye",
|
|
743
755
|
size: 20,
|
|
744
|
-
color: primaryColor
|
|
756
|
+
color: themeStyles.primaryColor
|
|
745
757
|
})
|
|
746
758
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
|
|
747
759
|
style: [styles.actionButton, {
|
|
748
|
-
backgroundColor: isDarkTheme ? '#333333' : '#F0F0F0'
|
|
760
|
+
backgroundColor: themeStyles.isDarkTheme ? '#333333' : '#F0F0F0'
|
|
749
761
|
}],
|
|
750
762
|
onPress: () => handleFileDownload(file.id, file.filename),
|
|
751
763
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
752
764
|
name: "download",
|
|
753
765
|
size: 20,
|
|
754
|
-
color: primaryColor
|
|
766
|
+
color: themeStyles.primaryColor
|
|
755
767
|
})
|
|
756
768
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
|
|
757
769
|
style: [styles.actionButton, {
|
|
758
|
-
backgroundColor: isDarkTheme ? '#400000' : '#FFEBEE'
|
|
770
|
+
backgroundColor: themeStyles.isDarkTheme ? '#400000' : '#FFEBEE'
|
|
759
771
|
}],
|
|
760
772
|
onPress: () => {
|
|
761
773
|
handleFileDelete(file.id, file.filename);
|
|
@@ -763,16 +775,72 @@ const FileManagementScreen = ({
|
|
|
763
775
|
disabled: deleting === file.id,
|
|
764
776
|
children: deleting === file.id ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {
|
|
765
777
|
size: "small",
|
|
766
|
-
color: dangerColor
|
|
778
|
+
color: themeStyles.dangerColor
|
|
767
779
|
}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
768
780
|
name: "trash",
|
|
769
781
|
size: 20,
|
|
770
|
-
color: dangerColor
|
|
782
|
+
color: themeStyles.dangerColor
|
|
771
783
|
})
|
|
772
784
|
})]
|
|
773
785
|
})]
|
|
774
786
|
}, file.id);
|
|
775
787
|
};
|
|
788
|
+
const renderPhotoItem = (photo, index) => {
|
|
789
|
+
const downloadUrl = oxyServices.getFileDownloadUrl(photo.id);
|
|
790
|
+
|
|
791
|
+
// Calculate photo item width based on actual container size from bottom sheet
|
|
792
|
+
let itemsPerRow = 3; // Default for mobile
|
|
793
|
+
if (containerWidth > 768) itemsPerRow = 6; // Tablet/Desktop
|
|
794
|
+
else if (containerWidth > 480) itemsPerRow = 4; // Large mobile
|
|
795
|
+
|
|
796
|
+
// Account for the photoScrollContainer padding (16px on each side = 32px total)
|
|
797
|
+
const scrollContainerPadding = 32; // Total horizontal padding from photoScrollContainer
|
|
798
|
+
const gaps = (itemsPerRow - 1) * 4; // Gap between items
|
|
799
|
+
const availableWidth = containerWidth - scrollContainerPadding;
|
|
800
|
+
const itemWidth = (availableWidth - gaps) / itemsPerRow;
|
|
801
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
|
|
802
|
+
style: [styles.photoItem, {
|
|
803
|
+
width: itemWidth,
|
|
804
|
+
height: itemWidth
|
|
805
|
+
}],
|
|
806
|
+
onPress: () => handleFileOpen(photo),
|
|
807
|
+
activeOpacity: 0.8,
|
|
808
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
809
|
+
style: styles.photoContainer,
|
|
810
|
+
children: _reactNative.Platform.OS === 'web' ? /*#__PURE__*/(0, _jsxRuntime.jsx)("img", {
|
|
811
|
+
src: downloadUrl,
|
|
812
|
+
alt: photo.filename,
|
|
813
|
+
style: {
|
|
814
|
+
width: '100%',
|
|
815
|
+
height: '100%',
|
|
816
|
+
objectFit: 'cover',
|
|
817
|
+
borderRadius: 8,
|
|
818
|
+
transition: 'transform 0.2s ease'
|
|
819
|
+
},
|
|
820
|
+
loading: "lazy",
|
|
821
|
+
onError: e => {
|
|
822
|
+
console.error('Photo failed to load:', e);
|
|
823
|
+
// Could replace with placeholder image
|
|
824
|
+
},
|
|
825
|
+
onMouseEnter: e => {
|
|
826
|
+
e.currentTarget.style.transform = 'scale(1.02)';
|
|
827
|
+
},
|
|
828
|
+
onMouseLeave: e => {
|
|
829
|
+
e.currentTarget.style.transform = 'scale(1)';
|
|
830
|
+
}
|
|
831
|
+
}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Image, {
|
|
832
|
+
source: {
|
|
833
|
+
uri: downloadUrl
|
|
834
|
+
},
|
|
835
|
+
style: styles.photoImage,
|
|
836
|
+
resizeMode: "cover",
|
|
837
|
+
onError: e => {
|
|
838
|
+
console.error('Photo failed to load:', e);
|
|
839
|
+
}
|
|
840
|
+
})
|
|
841
|
+
})
|
|
842
|
+
}, photo.id);
|
|
843
|
+
};
|
|
776
844
|
const renderPhotoGrid = (0, _react.useCallback)(() => {
|
|
777
845
|
const photos = filteredFiles.filter(file => file.contentType.startsWith('image/'));
|
|
778
846
|
if (photos.length === 0) {
|
|
@@ -781,20 +849,20 @@ const FileManagementScreen = ({
|
|
|
781
849
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
782
850
|
name: "images-outline",
|
|
783
851
|
size: 64,
|
|
784
|
-
color: isDarkTheme ? '#666666' : '#CCCCCC'
|
|
852
|
+
color: themeStyles.isDarkTheme ? '#666666' : '#CCCCCC'
|
|
785
853
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
786
854
|
style: [styles.emptyStateTitle, {
|
|
787
|
-
color: textColor
|
|
855
|
+
color: themeStyles.textColor
|
|
788
856
|
}],
|
|
789
857
|
children: "No Photos Yet"
|
|
790
858
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
791
859
|
style: [styles.emptyStateDescription, {
|
|
792
|
-
color: isDarkTheme ? '#BBBBBB' : '#666666'
|
|
860
|
+
color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
|
|
793
861
|
}],
|
|
794
862
|
children: user?.id === targetUserId ? `Upload photos to get started. You can select multiple photos at once${_reactNative.Platform.OS === 'web' ? ' or drag & drop them here.' : '.'}` : "This user hasn't uploaded any photos yet"
|
|
795
863
|
}), user?.id === targetUserId && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
|
|
796
864
|
style: [styles.emptyStateButton, {
|
|
797
|
-
backgroundColor: primaryColor
|
|
865
|
+
backgroundColor: themeStyles.primaryColor
|
|
798
866
|
}],
|
|
799
867
|
onPress: handleFileUpload,
|
|
800
868
|
disabled: uploading,
|
|
@@ -820,17 +888,17 @@ const FileManagementScreen = ({
|
|
|
820
888
|
refreshControl: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.RefreshControl, {
|
|
821
889
|
refreshing: refreshing,
|
|
822
890
|
onRefresh: () => loadFiles(true),
|
|
823
|
-
tintColor: primaryColor
|
|
891
|
+
tintColor: themeStyles.primaryColor
|
|
824
892
|
}),
|
|
825
893
|
showsVerticalScrollIndicator: false,
|
|
826
894
|
children: [loadingDimensions && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
827
895
|
style: styles.dimensionsLoadingIndicator,
|
|
828
896
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {
|
|
829
897
|
size: "small",
|
|
830
|
-
color: primaryColor
|
|
898
|
+
color: themeStyles.primaryColor
|
|
831
899
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
832
900
|
style: [styles.dimensionsLoadingText, {
|
|
833
|
-
color: isDarkTheme ? '#BBBBBB' : '#666666'
|
|
901
|
+
color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
|
|
834
902
|
}],
|
|
835
903
|
children: "Loading photo layout..."
|
|
836
904
|
})]
|
|
@@ -841,11 +909,11 @@ const FileManagementScreen = ({
|
|
|
841
909
|
createJustifiedRows: createJustifiedRows,
|
|
842
910
|
renderJustifiedPhotoItem: renderJustifiedPhotoItem,
|
|
843
911
|
renderSimplePhotoItem: renderPhotoItem,
|
|
844
|
-
textColor: textColor,
|
|
912
|
+
textColor: themeStyles.textColor,
|
|
845
913
|
containerWidth: containerWidth
|
|
846
914
|
})]
|
|
847
915
|
});
|
|
848
|
-
}, [filteredFiles,
|
|
916
|
+
}, [filteredFiles, themeStyles, user?.id, targetUserId, uploading, handleFileUpload, refreshing, loadFiles, loadingDimensions, photoDimensions, loadPhotoDimensions, createJustifiedRows, renderJustifiedPhotoItem, renderPhotoItem, containerWidth]);
|
|
849
917
|
|
|
850
918
|
// Separate component for the photo grid to optimize rendering
|
|
851
919
|
const JustifiedPhotoGrid = /*#__PURE__*/_react.default.memo(({
|
|
@@ -885,7 +953,7 @@ const FileManagementScreen = ({
|
|
|
885
953
|
style: styles.photoDateSection,
|
|
886
954
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
887
955
|
style: [styles.photoDateHeader, {
|
|
888
|
-
color: textColor
|
|
956
|
+
color: themeStyles.textColor
|
|
889
957
|
}],
|
|
890
958
|
children: new Date(date).toLocaleDateString('en-US', {
|
|
891
959
|
weekday: 'long',
|
|
@@ -937,207 +1005,157 @@ const FileManagementScreen = ({
|
|
|
937
1005
|
})
|
|
938
1006
|
});
|
|
939
1007
|
});
|
|
940
|
-
const
|
|
941
|
-
const
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
const availableWidth = containerWidth - scrollContainerPadding;
|
|
952
|
-
const itemWidth = (availableWidth - gaps) / itemsPerRow;
|
|
953
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
|
|
954
|
-
style: [styles.photoItem, {
|
|
955
|
-
width: itemWidth,
|
|
956
|
-
height: itemWidth
|
|
957
|
-
}],
|
|
958
|
-
onPress: () => handleFileOpen(photo),
|
|
959
|
-
activeOpacity: 0.8,
|
|
960
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
961
|
-
style: styles.photoContainer,
|
|
962
|
-
children: _reactNative.Platform.OS === 'web' ? /*#__PURE__*/(0, _jsxRuntime.jsx)("img", {
|
|
963
|
-
src: downloadUrl,
|
|
964
|
-
alt: photo.filename,
|
|
965
|
-
style: {
|
|
966
|
-
width: '100%',
|
|
967
|
-
height: '100%',
|
|
968
|
-
objectFit: 'cover',
|
|
969
|
-
borderRadius: 8,
|
|
970
|
-
transition: 'transform 0.2s ease'
|
|
971
|
-
},
|
|
972
|
-
loading: "lazy",
|
|
973
|
-
onError: e => {
|
|
974
|
-
console.error('Photo failed to load:', e);
|
|
975
|
-
// Could replace with placeholder image
|
|
976
|
-
},
|
|
977
|
-
onMouseEnter: e => {
|
|
978
|
-
e.currentTarget.style.transform = 'scale(1.02)';
|
|
979
|
-
},
|
|
980
|
-
onMouseLeave: e => {
|
|
981
|
-
e.currentTarget.style.transform = 'scale(1)';
|
|
982
|
-
}
|
|
983
|
-
}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Image, {
|
|
984
|
-
source: {
|
|
985
|
-
uri: downloadUrl
|
|
986
|
-
},
|
|
987
|
-
style: styles.photoImage,
|
|
988
|
-
resizeMode: "cover",
|
|
989
|
-
onError: e => {
|
|
990
|
-
console.error('Photo failed to load:', e);
|
|
991
|
-
}
|
|
992
|
-
})
|
|
993
|
-
})
|
|
994
|
-
}, photo.id);
|
|
995
|
-
};
|
|
996
|
-
const renderFileDetailsModal = () => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Modal, {
|
|
997
|
-
visible: showFileDetails,
|
|
998
|
-
animationType: "slide",
|
|
999
|
-
presentationStyle: "pageSheet",
|
|
1000
|
-
onRequestClose: () => setShowFileDetails(false),
|
|
1001
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
1002
|
-
style: [styles.modalContainer, {
|
|
1003
|
-
backgroundColor
|
|
1004
|
-
}],
|
|
1005
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
1006
|
-
style: [styles.modalHeader, {
|
|
1007
|
-
borderBottomColor: borderColor
|
|
1008
|
+
const renderFileDetailsModal = () => {
|
|
1009
|
+
const backgroundColor = themeStyles.backgroundColor;
|
|
1010
|
+
const borderColor = themeStyles.borderColor;
|
|
1011
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Modal, {
|
|
1012
|
+
visible: showFileDetails,
|
|
1013
|
+
animationType: "slide",
|
|
1014
|
+
presentationStyle: "pageSheet",
|
|
1015
|
+
onRequestClose: () => setShowFileDetails(false),
|
|
1016
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
1017
|
+
style: [styles.modalContainer, {
|
|
1018
|
+
backgroundColor
|
|
1008
1019
|
}],
|
|
1009
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.
|
|
1010
|
-
style: styles.
|
|
1011
|
-
|
|
1012
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
1013
|
-
name: "close",
|
|
1014
|
-
size: 24,
|
|
1015
|
-
color: textColor
|
|
1016
|
-
})
|
|
1017
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1018
|
-
style: [styles.modalTitle, {
|
|
1019
|
-
color: textColor
|
|
1020
|
-
}],
|
|
1021
|
-
children: "File Details"
|
|
1022
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
1023
|
-
style: styles.modalPlaceholder
|
|
1024
|
-
})]
|
|
1025
|
-
}), selectedFile && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ScrollView, {
|
|
1026
|
-
style: styles.modalContent,
|
|
1027
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
1028
|
-
style: [styles.fileDetailCard, {
|
|
1029
|
-
backgroundColor: secondaryBackgroundColor,
|
|
1030
|
-
borderColor
|
|
1020
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
1021
|
+
style: [styles.modalHeader, {
|
|
1022
|
+
borderBottomColor: borderColor
|
|
1031
1023
|
}],
|
|
1032
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.
|
|
1033
|
-
style: styles.
|
|
1024
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
|
|
1025
|
+
style: styles.modalCloseButton,
|
|
1026
|
+
onPress: () => setShowFileDetails(false),
|
|
1034
1027
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
1035
|
-
name:
|
|
1036
|
-
size:
|
|
1037
|
-
color:
|
|
1028
|
+
name: "close",
|
|
1029
|
+
size: 24,
|
|
1030
|
+
color: themeStyles.textColor
|
|
1038
1031
|
})
|
|
1039
1032
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1040
|
-
style: [styles.
|
|
1041
|
-
color: textColor
|
|
1033
|
+
style: [styles.modalTitle, {
|
|
1034
|
+
color: themeStyles.textColor
|
|
1042
1035
|
}],
|
|
1043
|
-
children:
|
|
1044
|
-
}), /*#__PURE__*/(0, _jsxRuntime.
|
|
1045
|
-
style: styles.
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1036
|
+
children: "File Details"
|
|
1037
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
1038
|
+
style: styles.modalPlaceholder
|
|
1039
|
+
})]
|
|
1040
|
+
}), selectedFile && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ScrollView, {
|
|
1041
|
+
style: styles.modalContent,
|
|
1042
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
1043
|
+
style: [styles.fileDetailCard, {
|
|
1044
|
+
backgroundColor: themeStyles.secondaryBackgroundColor,
|
|
1045
|
+
borderColor
|
|
1046
|
+
}],
|
|
1047
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
1048
|
+
style: styles.fileDetailIcon,
|
|
1049
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
1050
|
+
name: getFileIcon(selectedFile.contentType),
|
|
1051
|
+
size: 64,
|
|
1052
|
+
color: themeStyles.primaryColor
|
|
1053
|
+
})
|
|
1054
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1055
|
+
style: [styles.fileDetailName, {
|
|
1056
|
+
color: themeStyles.textColor
|
|
1057
|
+
}],
|
|
1058
|
+
children: selectedFile.filename
|
|
1059
1059
|
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
1060
|
-
style: styles.
|
|
1061
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.
|
|
1062
|
-
style:
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1060
|
+
style: styles.fileDetailInfo,
|
|
1061
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
1062
|
+
style: styles.detailRow,
|
|
1063
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1064
|
+
style: [styles.detailLabel, {
|
|
1065
|
+
color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
|
|
1066
|
+
}],
|
|
1067
|
+
children: "Size:"
|
|
1068
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1069
|
+
style: [styles.detailValue, {
|
|
1070
|
+
color: themeStyles.textColor
|
|
1071
|
+
}],
|
|
1072
|
+
children: formatFileSize(selectedFile.length)
|
|
1073
|
+
})]
|
|
1074
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
1075
|
+
style: styles.detailRow,
|
|
1076
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1077
|
+
style: [styles.detailLabel, {
|
|
1078
|
+
color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
|
|
1079
|
+
}],
|
|
1080
|
+
children: "Type:"
|
|
1081
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1082
|
+
style: [styles.detailValue, {
|
|
1083
|
+
color: themeStyles.textColor
|
|
1084
|
+
}],
|
|
1085
|
+
children: selectedFile.contentType
|
|
1086
|
+
})]
|
|
1087
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
1088
|
+
style: styles.detailRow,
|
|
1089
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1090
|
+
style: [styles.detailLabel, {
|
|
1091
|
+
color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
|
|
1092
|
+
}],
|
|
1093
|
+
children: "Uploaded:"
|
|
1094
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1095
|
+
style: [styles.detailValue, {
|
|
1096
|
+
color: themeStyles.textColor
|
|
1097
|
+
}],
|
|
1098
|
+
children: new Date(selectedFile.uploadDate).toLocaleString()
|
|
1099
|
+
})]
|
|
1100
|
+
}), selectedFile.metadata?.description && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
1101
|
+
style: styles.detailRow,
|
|
1102
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1103
|
+
style: [styles.detailLabel, {
|
|
1104
|
+
color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
|
|
1105
|
+
}],
|
|
1106
|
+
children: "Description:"
|
|
1107
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1108
|
+
style: [styles.detailValue, {
|
|
1109
|
+
color: themeStyles.textColor
|
|
1110
|
+
}],
|
|
1111
|
+
children: selectedFile.metadata.description
|
|
1112
|
+
})]
|
|
1071
1113
|
})]
|
|
1072
1114
|
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
1073
|
-
style: styles.
|
|
1074
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.
|
|
1075
|
-
style: [styles.
|
|
1076
|
-
|
|
1115
|
+
style: styles.modalActions,
|
|
1116
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
|
|
1117
|
+
style: [styles.modalActionButton, {
|
|
1118
|
+
backgroundColor: themeStyles.primaryColor
|
|
1077
1119
|
}],
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1120
|
+
onPress: () => {
|
|
1121
|
+
handleFileDownload(selectedFile.id, selectedFile.filename);
|
|
1122
|
+
setShowFileDetails(false);
|
|
1123
|
+
},
|
|
1124
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
1125
|
+
name: "download",
|
|
1126
|
+
size: 20,
|
|
1127
|
+
color: "#FFFFFF"
|
|
1128
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1129
|
+
style: styles.modalActionText,
|
|
1130
|
+
children: "Download"
|
|
1131
|
+
})]
|
|
1132
|
+
}), user?.id === targetUserId && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
|
|
1133
|
+
style: [styles.modalActionButton, {
|
|
1134
|
+
backgroundColor: themeStyles.dangerColor
|
|
1082
1135
|
}],
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
}],
|
|
1096
|
-
children: selectedFile.metadata.description
|
|
1136
|
+
onPress: () => {
|
|
1137
|
+
setShowFileDetails(false);
|
|
1138
|
+
handleFileDelete(selectedFile.id, selectedFile.filename);
|
|
1139
|
+
},
|
|
1140
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
1141
|
+
name: "trash",
|
|
1142
|
+
size: 20,
|
|
1143
|
+
color: "#FFFFFF"
|
|
1144
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1145
|
+
style: styles.modalActionText,
|
|
1146
|
+
children: "Delete"
|
|
1147
|
+
})]
|
|
1097
1148
|
})]
|
|
1098
1149
|
})]
|
|
1099
|
-
})
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
}],
|
|
1105
|
-
onPress: () => {
|
|
1106
|
-
handleFileDownload(selectedFile.id, selectedFile.filename);
|
|
1107
|
-
setShowFileDetails(false);
|
|
1108
|
-
},
|
|
1109
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
1110
|
-
name: "download",
|
|
1111
|
-
size: 20,
|
|
1112
|
-
color: "#FFFFFF"
|
|
1113
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1114
|
-
style: styles.modalActionText,
|
|
1115
|
-
children: "Download"
|
|
1116
|
-
})]
|
|
1117
|
-
}), user?.id === targetUserId && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
|
|
1118
|
-
style: [styles.modalActionButton, {
|
|
1119
|
-
backgroundColor: dangerColor
|
|
1120
|
-
}],
|
|
1121
|
-
onPress: () => {
|
|
1122
|
-
setShowFileDetails(false);
|
|
1123
|
-
handleFileDelete(selectedFile.id, selectedFile.filename);
|
|
1124
|
-
},
|
|
1125
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
1126
|
-
name: "trash",
|
|
1127
|
-
size: 20,
|
|
1128
|
-
color: "#FFFFFF"
|
|
1129
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1130
|
-
style: styles.modalActionText,
|
|
1131
|
-
children: "Delete"
|
|
1132
|
-
})]
|
|
1133
|
-
})]
|
|
1134
|
-
})]
|
|
1135
|
-
})
|
|
1136
|
-
})]
|
|
1137
|
-
})
|
|
1138
|
-
});
|
|
1150
|
+
})
|
|
1151
|
+
})]
|
|
1152
|
+
})
|
|
1153
|
+
});
|
|
1154
|
+
};
|
|
1139
1155
|
const renderFileViewer = () => {
|
|
1140
1156
|
if (!openedFile) return null;
|
|
1157
|
+
const backgroundColor = themeStyles.backgroundColor;
|
|
1158
|
+
const borderColor = themeStyles.borderColor;
|
|
1141
1159
|
const isImage = openedFile.contentType.startsWith('image/');
|
|
1142
1160
|
const isText = openedFile.contentType.startsWith('text/') || openedFile.contentType.includes('json') || openedFile.contentType.includes('xml') || openedFile.contentType.includes('javascript') || openedFile.contentType.includes('typescript');
|
|
1143
1161
|
const isPDF = openedFile.contentType.includes('pdf');
|
|
@@ -1157,19 +1175,19 @@ const FileManagementScreen = ({
|
|
|
1157
1175
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
1158
1176
|
name: "arrow-back",
|
|
1159
1177
|
size: 24,
|
|
1160
|
-
color: textColor
|
|
1178
|
+
color: themeStyles.textColor
|
|
1161
1179
|
})
|
|
1162
1180
|
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
1163
1181
|
style: styles.fileViewerTitleContainer,
|
|
1164
1182
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1165
1183
|
style: [styles.fileViewerTitle, {
|
|
1166
|
-
color: textColor
|
|
1184
|
+
color: themeStyles.textColor
|
|
1167
1185
|
}],
|
|
1168
1186
|
numberOfLines: 1,
|
|
1169
1187
|
children: openedFile.filename
|
|
1170
1188
|
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
|
|
1171
1189
|
style: [styles.fileViewerSubtitle, {
|
|
1172
|
-
color: isDarkTheme ? '#BBBBBB' : '#666666'
|
|
1190
|
+
color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
|
|
1173
1191
|
}],
|
|
1174
1192
|
children: [formatFileSize(openedFile.length), " \u2022 ", openedFile.contentType]
|
|
1175
1193
|
})]
|
|
@@ -1177,36 +1195,36 @@ const FileManagementScreen = ({
|
|
|
1177
1195
|
style: styles.fileViewerActions,
|
|
1178
1196
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
|
|
1179
1197
|
style: [styles.actionButton, {
|
|
1180
|
-
backgroundColor: isDarkTheme ? '#333333' : '#F0F0F0'
|
|
1198
|
+
backgroundColor: themeStyles.isDarkTheme ? '#333333' : '#F0F0F0'
|
|
1181
1199
|
}],
|
|
1182
1200
|
onPress: () => handleFileDownload(openedFile.id, openedFile.filename),
|
|
1183
1201
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
1184
1202
|
name: "download",
|
|
1185
1203
|
size: 20,
|
|
1186
|
-
color: primaryColor
|
|
1204
|
+
color: themeStyles.primaryColor
|
|
1187
1205
|
})
|
|
1188
1206
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
|
|
1189
1207
|
style: [styles.actionButton, {
|
|
1190
|
-
backgroundColor: showFileDetailsInViewer ? primaryColor : isDarkTheme ? '#333333' : '#F0F0F0'
|
|
1208
|
+
backgroundColor: showFileDetailsInViewer ? themeStyles.primaryColor : themeStyles.isDarkTheme ? '#333333' : '#F0F0F0'
|
|
1191
1209
|
}],
|
|
1192
1210
|
onPress: () => setShowFileDetailsInViewer(!showFileDetailsInViewer),
|
|
1193
1211
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
1194
1212
|
name: showFileDetailsInViewer ? "chevron-up" : "information-circle",
|
|
1195
1213
|
size: 20,
|
|
1196
|
-
color: showFileDetailsInViewer ? "#FFFFFF" : primaryColor
|
|
1214
|
+
color: showFileDetailsInViewer ? "#FFFFFF" : themeStyles.primaryColor
|
|
1197
1215
|
})
|
|
1198
1216
|
})]
|
|
1199
1217
|
})]
|
|
1200
1218
|
}), showFileDetailsInViewer && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
1201
1219
|
style: [styles.fileDetailsSection, {
|
|
1202
|
-
backgroundColor: secondaryBackgroundColor,
|
|
1220
|
+
backgroundColor: themeStyles.secondaryBackgroundColor,
|
|
1203
1221
|
borderColor
|
|
1204
1222
|
}],
|
|
1205
1223
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
1206
1224
|
style: styles.fileDetailsSectionHeader,
|
|
1207
1225
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1208
1226
|
style: [styles.fileDetailsSectionTitle, {
|
|
1209
|
-
color: textColor
|
|
1227
|
+
color: themeStyles.textColor
|
|
1210
1228
|
}],
|
|
1211
1229
|
children: "File Details"
|
|
1212
1230
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
|
|
@@ -1215,7 +1233,7 @@ const FileManagementScreen = ({
|
|
|
1215
1233
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
1216
1234
|
name: "chevron-up",
|
|
1217
1235
|
size: 20,
|
|
1218
|
-
color: isDarkTheme ? '#BBBBBB' : '#666666'
|
|
1236
|
+
color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
|
|
1219
1237
|
})
|
|
1220
1238
|
})]
|
|
1221
1239
|
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
@@ -1224,12 +1242,12 @@ const FileManagementScreen = ({
|
|
|
1224
1242
|
style: styles.detailRow,
|
|
1225
1243
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1226
1244
|
style: [styles.detailLabel, {
|
|
1227
|
-
color: isDarkTheme ? '#BBBBBB' : '#666666'
|
|
1245
|
+
color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
|
|
1228
1246
|
}],
|
|
1229
1247
|
children: "File Name:"
|
|
1230
1248
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1231
1249
|
style: [styles.detailValue, {
|
|
1232
|
-
color: textColor
|
|
1250
|
+
color: themeStyles.textColor
|
|
1233
1251
|
}],
|
|
1234
1252
|
children: openedFile.filename
|
|
1235
1253
|
})]
|
|
@@ -1237,12 +1255,12 @@ const FileManagementScreen = ({
|
|
|
1237
1255
|
style: styles.detailRow,
|
|
1238
1256
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1239
1257
|
style: [styles.detailLabel, {
|
|
1240
|
-
color: isDarkTheme ? '#BBBBBB' : '#666666'
|
|
1258
|
+
color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
|
|
1241
1259
|
}],
|
|
1242
1260
|
children: "Size:"
|
|
1243
1261
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1244
1262
|
style: [styles.detailValue, {
|
|
1245
|
-
color: textColor
|
|
1263
|
+
color: themeStyles.textColor
|
|
1246
1264
|
}],
|
|
1247
1265
|
children: formatFileSize(openedFile.length)
|
|
1248
1266
|
})]
|
|
@@ -1250,12 +1268,12 @@ const FileManagementScreen = ({
|
|
|
1250
1268
|
style: styles.detailRow,
|
|
1251
1269
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1252
1270
|
style: [styles.detailLabel, {
|
|
1253
|
-
color: isDarkTheme ? '#BBBBBB' : '#666666'
|
|
1271
|
+
color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
|
|
1254
1272
|
}],
|
|
1255
1273
|
children: "Type:"
|
|
1256
1274
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1257
1275
|
style: [styles.detailValue, {
|
|
1258
|
-
color: textColor
|
|
1276
|
+
color: themeStyles.textColor
|
|
1259
1277
|
}],
|
|
1260
1278
|
children: openedFile.contentType
|
|
1261
1279
|
})]
|
|
@@ -1263,12 +1281,12 @@ const FileManagementScreen = ({
|
|
|
1263
1281
|
style: styles.detailRow,
|
|
1264
1282
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1265
1283
|
style: [styles.detailLabel, {
|
|
1266
|
-
color: isDarkTheme ? '#BBBBBB' : '#666666'
|
|
1284
|
+
color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
|
|
1267
1285
|
}],
|
|
1268
1286
|
children: "Uploaded:"
|
|
1269
1287
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1270
1288
|
style: [styles.detailValue, {
|
|
1271
|
-
color: textColor
|
|
1289
|
+
color: themeStyles.textColor
|
|
1272
1290
|
}],
|
|
1273
1291
|
children: new Date(openedFile.uploadDate).toLocaleString()
|
|
1274
1292
|
})]
|
|
@@ -1276,12 +1294,12 @@ const FileManagementScreen = ({
|
|
|
1276
1294
|
style: styles.detailRow,
|
|
1277
1295
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1278
1296
|
style: [styles.detailLabel, {
|
|
1279
|
-
color: isDarkTheme ? '#BBBBBB' : '#666666'
|
|
1297
|
+
color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
|
|
1280
1298
|
}],
|
|
1281
1299
|
children: "Description:"
|
|
1282
1300
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1283
1301
|
style: [styles.detailValue, {
|
|
1284
|
-
color: textColor
|
|
1302
|
+
color: themeStyles.textColor
|
|
1285
1303
|
}],
|
|
1286
1304
|
children: openedFile.metadata.description
|
|
1287
1305
|
})]
|
|
@@ -1289,12 +1307,12 @@ const FileManagementScreen = ({
|
|
|
1289
1307
|
style: styles.detailRow,
|
|
1290
1308
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1291
1309
|
style: [styles.detailLabel, {
|
|
1292
|
-
color: isDarkTheme ? '#BBBBBB' : '#666666'
|
|
1310
|
+
color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
|
|
1293
1311
|
}],
|
|
1294
1312
|
children: "File ID:"
|
|
1295
1313
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1296
1314
|
style: [styles.detailValue, {
|
|
1297
|
-
color: textColor,
|
|
1315
|
+
color: themeStyles.textColor,
|
|
1298
1316
|
fontSize: 12,
|
|
1299
1317
|
fontFamily: _reactNative.Platform.OS === 'web' ? 'monospace' : 'Courier'
|
|
1300
1318
|
}],
|
|
@@ -1305,7 +1323,7 @@ const FileManagementScreen = ({
|
|
|
1305
1323
|
style: styles.fileDetailsActions,
|
|
1306
1324
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
|
|
1307
1325
|
style: [styles.fileDetailsActionButton, {
|
|
1308
|
-
backgroundColor: primaryColor
|
|
1326
|
+
backgroundColor: themeStyles.primaryColor
|
|
1309
1327
|
}],
|
|
1310
1328
|
onPress: () => handleFileDownload(openedFile.id, openedFile.filename),
|
|
1311
1329
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
@@ -1318,7 +1336,7 @@ const FileManagementScreen = ({
|
|
|
1318
1336
|
})]
|
|
1319
1337
|
}), user?.id === targetUserId && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
|
|
1320
1338
|
style: [styles.fileDetailsActionButton, {
|
|
1321
|
-
backgroundColor: dangerColor
|
|
1339
|
+
backgroundColor: themeStyles.dangerColor
|
|
1322
1340
|
}],
|
|
1323
1341
|
onPress: () => {
|
|
1324
1342
|
handleCloseFile();
|
|
@@ -1341,10 +1359,10 @@ const FileManagementScreen = ({
|
|
|
1341
1359
|
style: styles.fileViewerLoading,
|
|
1342
1360
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {
|
|
1343
1361
|
size: "large",
|
|
1344
|
-
color: primaryColor
|
|
1362
|
+
color: themeStyles.primaryColor
|
|
1345
1363
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1346
1364
|
style: [styles.fileViewerLoadingText, {
|
|
1347
|
-
color: textColor
|
|
1365
|
+
color: themeStyles.textColor
|
|
1348
1366
|
}],
|
|
1349
1367
|
children: "Loading file content..."
|
|
1350
1368
|
})]
|
|
@@ -1378,7 +1396,7 @@ const FileManagementScreen = ({
|
|
|
1378
1396
|
})
|
|
1379
1397
|
}) : isText && fileContent ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
1380
1398
|
style: [styles.textContainer, {
|
|
1381
|
-
backgroundColor: secondaryBackgroundColor,
|
|
1399
|
+
backgroundColor: themeStyles.secondaryBackgroundColor,
|
|
1382
1400
|
borderColor
|
|
1383
1401
|
}],
|
|
1384
1402
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ScrollView, {
|
|
@@ -1388,7 +1406,7 @@ const FileManagementScreen = ({
|
|
|
1388
1406
|
nestedScrollEnabled: true,
|
|
1389
1407
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1390
1408
|
style: [styles.textContent, {
|
|
1391
|
-
color: textColor
|
|
1409
|
+
color: themeStyles.textColor
|
|
1392
1410
|
}],
|
|
1393
1411
|
children: fileContent
|
|
1394
1412
|
})
|
|
@@ -1420,7 +1438,7 @@ const FileManagementScreen = ({
|
|
|
1420
1438
|
}), "Your browser does not support the video tag."]
|
|
1421
1439
|
}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1422
1440
|
style: [styles.unsupportedText, {
|
|
1423
|
-
color: textColor
|
|
1441
|
+
color: themeStyles.textColor
|
|
1424
1442
|
}],
|
|
1425
1443
|
children: "Video playback not supported on mobile"
|
|
1426
1444
|
})
|
|
@@ -1438,7 +1456,7 @@ const FileManagementScreen = ({
|
|
|
1438
1456
|
}), "Your browser does not support the audio tag."]
|
|
1439
1457
|
}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1440
1458
|
style: [styles.unsupportedText, {
|
|
1441
|
-
color: textColor
|
|
1459
|
+
color: themeStyles.textColor
|
|
1442
1460
|
}],
|
|
1443
1461
|
children: "Audio playback not supported on mobile"
|
|
1444
1462
|
})
|
|
@@ -1447,20 +1465,20 @@ const FileManagementScreen = ({
|
|
|
1447
1465
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
1448
1466
|
name: getFileIcon(openedFile.contentType),
|
|
1449
1467
|
size: 64,
|
|
1450
|
-
color: isDarkTheme ? '#666666' : '#CCCCCC'
|
|
1468
|
+
color: themeStyles.isDarkTheme ? '#666666' : '#CCCCCC'
|
|
1451
1469
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1452
1470
|
style: [styles.unsupportedFileTitle, {
|
|
1453
|
-
color: textColor
|
|
1471
|
+
color: themeStyles.textColor
|
|
1454
1472
|
}],
|
|
1455
1473
|
children: "Preview Not Available"
|
|
1456
1474
|
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
|
|
1457
1475
|
style: [styles.unsupportedFileDescription, {
|
|
1458
|
-
color: isDarkTheme ? '#BBBBBB' : '#666666'
|
|
1476
|
+
color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
|
|
1459
1477
|
}],
|
|
1460
1478
|
children: ["This file type cannot be previewed in the browser.", '\n', "Download the file to view its contents."]
|
|
1461
1479
|
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
|
|
1462
1480
|
style: [styles.downloadButtonLarge, {
|
|
1463
|
-
backgroundColor: primaryColor
|
|
1481
|
+
backgroundColor: themeStyles.primaryColor
|
|
1464
1482
|
}],
|
|
1465
1483
|
onPress: () => handleFileDownload(openedFile.id, openedFile.filename),
|
|
1466
1484
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
@@ -1481,20 +1499,20 @@ const FileManagementScreen = ({
|
|
|
1481
1499
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
1482
1500
|
name: "folder-open-outline",
|
|
1483
1501
|
size: 64,
|
|
1484
|
-
color: isDarkTheme ? '#666666' : '#CCCCCC'
|
|
1502
|
+
color: themeStyles.isDarkTheme ? '#666666' : '#CCCCCC'
|
|
1485
1503
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1486
1504
|
style: [styles.emptyStateTitle, {
|
|
1487
|
-
color: textColor
|
|
1505
|
+
color: themeStyles.textColor
|
|
1488
1506
|
}],
|
|
1489
1507
|
children: "No Files Yet"
|
|
1490
1508
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1491
1509
|
style: [styles.emptyStateDescription, {
|
|
1492
|
-
color: isDarkTheme ? '#BBBBBB' : '#666666'
|
|
1510
|
+
color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
|
|
1493
1511
|
}],
|
|
1494
1512
|
children: user?.id === targetUserId ? `Upload files to get started. You can select multiple files at once${_reactNative.Platform.OS === 'web' ? ' or drag & drop them here.' : '.'}` : "This user hasn't uploaded any files yet"
|
|
1495
1513
|
}), user?.id === targetUserId && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
|
|
1496
1514
|
style: [styles.emptyStateButton, {
|
|
1497
|
-
backgroundColor: primaryColor
|
|
1515
|
+
backgroundColor: themeStyles.primaryColor
|
|
1498
1516
|
}],
|
|
1499
1517
|
onPress: handleFileUpload,
|
|
1500
1518
|
disabled: uploading,
|
|
@@ -1520,10 +1538,10 @@ const FileManagementScreen = ({
|
|
|
1520
1538
|
}],
|
|
1521
1539
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {
|
|
1522
1540
|
size: "large",
|
|
1523
|
-
color: primaryColor
|
|
1541
|
+
color: themeStyles.primaryColor
|
|
1524
1542
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1525
1543
|
style: [styles.loadingText, {
|
|
1526
|
-
color: textColor
|
|
1544
|
+
color: themeStyles.textColor
|
|
1527
1545
|
}],
|
|
1528
1546
|
children: "Loading files..."
|
|
1529
1547
|
})]
|
|
@@ -1548,37 +1566,37 @@ const FileManagementScreen = ({
|
|
|
1548
1566
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
1549
1567
|
style: [styles.header, {
|
|
1550
1568
|
borderBottomColor: borderColor,
|
|
1551
|
-
backgroundColor: isDarkTheme ? '#1A1A1A' : '#FFFFFF',
|
|
1569
|
+
backgroundColor: themeStyles.isDarkTheme ? '#1A1A1A' : '#FFFFFF',
|
|
1552
1570
|
shadowColor: '#000000',
|
|
1553
1571
|
shadowOffset: {
|
|
1554
1572
|
width: 0,
|
|
1555
1573
|
height: 2
|
|
1556
1574
|
},
|
|
1557
|
-
shadowOpacity: isDarkTheme ? 0.3 : 0.1,
|
|
1575
|
+
shadowOpacity: themeStyles.isDarkTheme ? 0.3 : 0.1,
|
|
1558
1576
|
shadowRadius: 8,
|
|
1559
1577
|
elevation: 4
|
|
1560
1578
|
}],
|
|
1561
1579
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
|
|
1562
1580
|
style: [styles.backButton, {
|
|
1563
|
-
backgroundColor: isDarkTheme ? '#2A2A2A' : '#F8F9FA',
|
|
1581
|
+
backgroundColor: themeStyles.isDarkTheme ? '#2A2A2A' : '#F8F9FA',
|
|
1564
1582
|
borderRadius: 12
|
|
1565
1583
|
}],
|
|
1566
1584
|
onPress: onClose || goBack,
|
|
1567
1585
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
1568
1586
|
name: "arrow-back",
|
|
1569
1587
|
size: 22,
|
|
1570
|
-
color: textColor
|
|
1588
|
+
color: themeStyles.textColor
|
|
1571
1589
|
})
|
|
1572
1590
|
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
1573
1591
|
style: styles.headerTitleContainer,
|
|
1574
1592
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1575
1593
|
style: [styles.headerTitle, {
|
|
1576
|
-
color: textColor
|
|
1594
|
+
color: themeStyles.textColor
|
|
1577
1595
|
}],
|
|
1578
1596
|
children: viewMode === 'photos' ? 'Photos' : 'File Management'
|
|
1579
1597
|
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
|
|
1580
1598
|
style: [styles.headerSubtitle, {
|
|
1581
|
-
color: isDarkTheme ? '#AAAAAA' : '#666666'
|
|
1599
|
+
color: themeStyles.isDarkTheme ? '#AAAAAA' : '#666666'
|
|
1582
1600
|
}],
|
|
1583
1601
|
children: [filteredFiles.length, " ", filteredFiles.length === 1 ? 'item' : 'items']
|
|
1584
1602
|
})]
|
|
@@ -1586,22 +1604,22 @@ const FileManagementScreen = ({
|
|
|
1586
1604
|
style: styles.headerActions,
|
|
1587
1605
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
1588
1606
|
style: [styles.viewModeToggle, {
|
|
1589
|
-
backgroundColor: isDarkTheme ? '#2A2A2A' : '#F8F9FA',
|
|
1607
|
+
backgroundColor: themeStyles.isDarkTheme ? '#2A2A2A' : '#F8F9FA',
|
|
1590
1608
|
borderWidth: 1,
|
|
1591
|
-
borderColor: isDarkTheme ? '#3A3A3A' : '#E8E9EA',
|
|
1609
|
+
borderColor: themeStyles.isDarkTheme ? '#3A3A3A' : '#E8E9EA',
|
|
1592
1610
|
shadowColor: '#000000',
|
|
1593
1611
|
shadowOffset: {
|
|
1594
1612
|
width: 0,
|
|
1595
1613
|
height: 1
|
|
1596
1614
|
},
|
|
1597
|
-
shadowOpacity: isDarkTheme ? 0.3 : 0.05,
|
|
1615
|
+
shadowOpacity: themeStyles.isDarkTheme ? 0.3 : 0.05,
|
|
1598
1616
|
shadowRadius: 4,
|
|
1599
1617
|
elevation: 2
|
|
1600
1618
|
}],
|
|
1601
1619
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
|
|
1602
1620
|
style: [styles.viewModeButton, viewMode === 'all' && {
|
|
1603
|
-
backgroundColor: primaryColor,
|
|
1604
|
-
shadowColor: primaryColor,
|
|
1621
|
+
backgroundColor: themeStyles.primaryColor,
|
|
1622
|
+
shadowColor: themeStyles.primaryColor,
|
|
1605
1623
|
shadowOffset: {
|
|
1606
1624
|
width: 0,
|
|
1607
1625
|
height: 2
|
|
@@ -1614,12 +1632,12 @@ const FileManagementScreen = ({
|
|
|
1614
1632
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
1615
1633
|
name: "folder",
|
|
1616
1634
|
size: 18,
|
|
1617
|
-
color: viewMode === 'all' ? '#FFFFFF' : textColor
|
|
1635
|
+
color: viewMode === 'all' ? '#FFFFFF' : themeStyles.textColor
|
|
1618
1636
|
})
|
|
1619
1637
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
|
|
1620
1638
|
style: [styles.viewModeButton, viewMode === 'photos' && {
|
|
1621
|
-
backgroundColor: primaryColor,
|
|
1622
|
-
shadowColor: primaryColor,
|
|
1639
|
+
backgroundColor: themeStyles.primaryColor,
|
|
1640
|
+
shadowColor: themeStyles.primaryColor,
|
|
1623
1641
|
shadowOffset: {
|
|
1624
1642
|
width: 0,
|
|
1625
1643
|
height: 2
|
|
@@ -1632,13 +1650,13 @@ const FileManagementScreen = ({
|
|
|
1632
1650
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
1633
1651
|
name: "images",
|
|
1634
1652
|
size: 18,
|
|
1635
|
-
color: viewMode === 'photos' ? '#FFFFFF' : textColor
|
|
1653
|
+
color: viewMode === 'photos' ? '#FFFFFF' : themeStyles.textColor
|
|
1636
1654
|
})
|
|
1637
1655
|
})]
|
|
1638
1656
|
}), user?.id === targetUserId && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
|
|
1639
1657
|
style: [styles.uploadButton, {
|
|
1640
|
-
backgroundColor: primaryColor,
|
|
1641
|
-
shadowColor: primaryColor,
|
|
1658
|
+
backgroundColor: themeStyles.primaryColor,
|
|
1659
|
+
shadowColor: themeStyles.primaryColor,
|
|
1642
1660
|
shadowOffset: {
|
|
1643
1661
|
width: 0,
|
|
1644
1662
|
height: 3
|
|
@@ -1672,27 +1690,27 @@ const FileManagementScreen = ({
|
|
|
1672
1690
|
})]
|
|
1673
1691
|
}), files.length > 0 && (viewMode === 'all' || files.some(f => f.contentType.startsWith('image/'))) && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
1674
1692
|
style: [styles.searchContainer, {
|
|
1675
|
-
backgroundColor: isDarkTheme ? '#1A1A1A' : '#FFFFFF',
|
|
1676
|
-
borderColor: isDarkTheme ? '#3A3A3A' : '#E8E9EA',
|
|
1693
|
+
backgroundColor: themeStyles.isDarkTheme ? '#1A1A1A' : '#FFFFFF',
|
|
1694
|
+
borderColor: themeStyles.isDarkTheme ? '#3A3A3A' : '#E8E9EA',
|
|
1677
1695
|
shadowColor: '#000000',
|
|
1678
1696
|
shadowOffset: {
|
|
1679
1697
|
width: 0,
|
|
1680
1698
|
height: 1
|
|
1681
1699
|
},
|
|
1682
|
-
shadowOpacity: isDarkTheme ? 0.2 : 0.05,
|
|
1700
|
+
shadowOpacity: themeStyles.isDarkTheme ? 0.2 : 0.05,
|
|
1683
1701
|
shadowRadius: 4,
|
|
1684
1702
|
elevation: 2
|
|
1685
1703
|
}],
|
|
1686
1704
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
1687
1705
|
name: "search",
|
|
1688
1706
|
size: 22,
|
|
1689
|
-
color: isDarkTheme ? '#888888' : '#666666'
|
|
1707
|
+
color: themeStyles.isDarkTheme ? '#888888' : '#666666'
|
|
1690
1708
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TextInput, {
|
|
1691
1709
|
style: [styles.searchInput, {
|
|
1692
|
-
color: textColor
|
|
1710
|
+
color: themeStyles.textColor
|
|
1693
1711
|
}],
|
|
1694
1712
|
placeholder: viewMode === 'photos' ? 'Search photos...' : 'Search files...',
|
|
1695
|
-
placeholderTextColor: isDarkTheme ? '#888888' : '#999999',
|
|
1713
|
+
placeholderTextColor: themeStyles.isDarkTheme ? '#888888' : '#999999',
|
|
1696
1714
|
value: searchQuery,
|
|
1697
1715
|
onChangeText: setSearchQuery
|
|
1698
1716
|
}), searchQuery.length > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
|
|
@@ -1701,19 +1719,19 @@ const FileManagementScreen = ({
|
|
|
1701
1719
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
1702
1720
|
name: "close-circle",
|
|
1703
1721
|
size: 22,
|
|
1704
|
-
color: isDarkTheme ? '#888888' : '#666666'
|
|
1722
|
+
color: themeStyles.isDarkTheme ? '#888888' : '#666666'
|
|
1705
1723
|
})
|
|
1706
1724
|
})]
|
|
1707
1725
|
}), files.length > 0 && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
1708
1726
|
style: [styles.statsContainer, {
|
|
1709
|
-
backgroundColor: isDarkTheme ? '#1A1A1A' : '#FFFFFF',
|
|
1710
|
-
borderColor: isDarkTheme ? '#3A3A3A' : '#E8E9EA',
|
|
1727
|
+
backgroundColor: themeStyles.isDarkTheme ? '#1A1A1A' : '#FFFFFF',
|
|
1728
|
+
borderColor: themeStyles.isDarkTheme ? '#3A3A3A' : '#E8E9EA',
|
|
1711
1729
|
shadowColor: '#000000',
|
|
1712
1730
|
shadowOffset: {
|
|
1713
1731
|
width: 0,
|
|
1714
1732
|
height: 1
|
|
1715
1733
|
},
|
|
1716
|
-
shadowOpacity: isDarkTheme ? 0.2 : 0.05,
|
|
1734
|
+
shadowOpacity: themeStyles.isDarkTheme ? 0.2 : 0.05,
|
|
1717
1735
|
shadowRadius: 4,
|
|
1718
1736
|
elevation: 2
|
|
1719
1737
|
}],
|
|
@@ -1721,12 +1739,12 @@ const FileManagementScreen = ({
|
|
|
1721
1739
|
style: styles.statItem,
|
|
1722
1740
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1723
1741
|
style: [styles.statValue, {
|
|
1724
|
-
color: textColor
|
|
1742
|
+
color: themeStyles.textColor
|
|
1725
1743
|
}],
|
|
1726
1744
|
children: filteredFiles.length
|
|
1727
1745
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1728
1746
|
style: [styles.statLabel, {
|
|
1729
|
-
color: isDarkTheme ? '#BBBBBB' : '#666666'
|
|
1747
|
+
color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
|
|
1730
1748
|
}],
|
|
1731
1749
|
children: searchQuery.length > 0 ? 'Found' : filteredFiles.length === 1 ? viewMode === 'photos' ? 'Photo' : 'File' : viewMode === 'photos' ? 'Photos' : 'Files'
|
|
1732
1750
|
})]
|
|
@@ -1734,12 +1752,12 @@ const FileManagementScreen = ({
|
|
|
1734
1752
|
style: styles.statItem,
|
|
1735
1753
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1736
1754
|
style: [styles.statValue, {
|
|
1737
|
-
color: textColor
|
|
1755
|
+
color: themeStyles.textColor
|
|
1738
1756
|
}],
|
|
1739
1757
|
children: formatFileSize(filteredFiles.reduce((total, file) => total + file.length, 0))
|
|
1740
1758
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1741
1759
|
style: [styles.statLabel, {
|
|
1742
|
-
color: isDarkTheme ? '#BBBBBB' : '#666666'
|
|
1760
|
+
color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
|
|
1743
1761
|
}],
|
|
1744
1762
|
children: searchQuery.length > 0 ? 'Size' : 'Total Size'
|
|
1745
1763
|
})]
|
|
@@ -1747,12 +1765,12 @@ const FileManagementScreen = ({
|
|
|
1747
1765
|
style: styles.statItem,
|
|
1748
1766
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1749
1767
|
style: [styles.statValue, {
|
|
1750
|
-
color: textColor
|
|
1768
|
+
color: themeStyles.textColor
|
|
1751
1769
|
}],
|
|
1752
1770
|
children: files.length
|
|
1753
1771
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1754
1772
|
style: [styles.statLabel, {
|
|
1755
|
-
color: isDarkTheme ? '#BBBBBB' : '#666666'
|
|
1773
|
+
color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
|
|
1756
1774
|
}],
|
|
1757
1775
|
children: "Total"
|
|
1758
1776
|
})]
|
|
@@ -1763,27 +1781,27 @@ const FileManagementScreen = ({
|
|
|
1763
1781
|
refreshControl: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.RefreshControl, {
|
|
1764
1782
|
refreshing: refreshing,
|
|
1765
1783
|
onRefresh: () => loadFiles(true),
|
|
1766
|
-
tintColor: primaryColor
|
|
1784
|
+
tintColor: themeStyles.primaryColor
|
|
1767
1785
|
}),
|
|
1768
1786
|
children: filteredFiles.length === 0 && searchQuery.length > 0 ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
1769
1787
|
style: styles.emptyState,
|
|
1770
1788
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
1771
1789
|
name: "search",
|
|
1772
1790
|
size: 64,
|
|
1773
|
-
color: isDarkTheme ? '#666666' : '#CCCCCC'
|
|
1791
|
+
color: themeStyles.isDarkTheme ? '#666666' : '#CCCCCC'
|
|
1774
1792
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1775
1793
|
style: [styles.emptyStateTitle, {
|
|
1776
|
-
color: textColor
|
|
1794
|
+
color: themeStyles.textColor
|
|
1777
1795
|
}],
|
|
1778
1796
|
children: "No Results Found"
|
|
1779
1797
|
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
|
|
1780
1798
|
style: [styles.emptyStateDescription, {
|
|
1781
|
-
color: isDarkTheme ? '#BBBBBB' : '#666666'
|
|
1799
|
+
color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
|
|
1782
1800
|
}],
|
|
1783
1801
|
children: ["No files match your search for \"", searchQuery, "\""]
|
|
1784
1802
|
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
|
|
1785
1803
|
style: [styles.emptyStateButton, {
|
|
1786
|
-
backgroundColor: primaryColor
|
|
1804
|
+
backgroundColor: themeStyles.primaryColor
|
|
1787
1805
|
}],
|
|
1788
1806
|
onPress: () => setSearchQuery(''),
|
|
1789
1807
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
@@ -1805,15 +1823,15 @@ const FileManagementScreen = ({
|
|
|
1805
1823
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
|
|
1806
1824
|
name: "cloud-upload",
|
|
1807
1825
|
size: 64,
|
|
1808
|
-
color: primaryColor
|
|
1826
|
+
color: themeStyles.primaryColor
|
|
1809
1827
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
1810
1828
|
style: [styles.dragDropTitle, {
|
|
1811
|
-
color: primaryColor
|
|
1829
|
+
color: themeStyles.primaryColor
|
|
1812
1830
|
}],
|
|
1813
1831
|
children: "Drop files to upload"
|
|
1814
1832
|
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
|
|
1815
1833
|
style: [styles.dragDropSubtitle, {
|
|
1816
|
-
color: isDarkTheme ? '#BBBBBB' : '#666666'
|
|
1834
|
+
color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
|
|
1817
1835
|
}],
|
|
1818
1836
|
children: ["Release to upload", uploadProgress ? ` (${uploadProgress.current}/${uploadProgress.total})` : ' multiple files']
|
|
1819
1837
|
})]
|