by codex: feat. General Improvements
CodexBar Mobile Build / build-android (push) Successful in 21m9s
CodexBar Mobile Build / release (push) Successful in 11s

This commit is contained in:
2026-06-25 14:27:58 +02:00
parent 9dd17cf565
commit 2c31be11c4
33 changed files with 1217 additions and 296 deletions
+33 -10
View File
@@ -11,10 +11,22 @@ import { MaterialIcons } from "@expo/vector-icons";
import { useCodexUsage } from "@/hooks/useCodexUsage";
import { UsageStat } from "@/components/UsageStat";
import { ErrorMessage } from "@/components/ErrorMessage";
import { LastUpdated } from "@/components/LastUpdated";
import { ScreenErrorBoundary } from "@/components/ScreenErrorBoundary";
import { COLORS } from "@/lib/constants";
import { windowLabel } from "@/lib/timeUtils";
export default function CodexTab() {
const { auth, usage, status, error, importAuthFile, refresh, clearAuth } =
function CodexTabContent() {
const {
auth,
usage,
lastFetchedAt,
status,
error,
importAuthFile,
refresh,
clearAuth,
} =
useCodexUsage();
return (
@@ -29,7 +41,7 @@ export default function CodexTab() {
<RefreshControl
refreshing={status === "loading"}
onRefresh={refresh}
tintColor="#10a37f"
tintColor={COLORS.codex}
/>
}
>
@@ -37,9 +49,9 @@ export default function CodexTab() {
<View className="flex-row items-center gap-x-3 py-5">
<View
className="w-9 h-9 rounded-xl items-center justify-center"
style={{ backgroundColor: "#10a37f22" }}
style={{ backgroundColor: `${COLORS.codex}22` }}
>
<MaterialIcons name="auto-awesome" size={18} color="#10a37f" />
<MaterialIcons name="auto-awesome" size={18} color={COLORS.codex} />
</View>
<View>
<Text className="text-xl font-bold text-neutral-900 dark:text-white tracking-tight">
@@ -84,7 +96,7 @@ export default function CodexTab() {
<TouchableOpacity
onPress={importAuthFile}
className="flex-row items-center justify-center gap-x-2 py-3.5 px-4 rounded-xl"
style={{ backgroundColor: "#10a37f" }}
style={{ backgroundColor: COLORS.codex }}
>
<MaterialIcons name="upload-file" size={16} color="white" />
<Text className="text-white font-semibold text-sm">
@@ -112,11 +124,11 @@ export default function CodexTab() {
</Text>
</View>
)}
{status === "loading" && (
<ActivityIndicator color="#10a37f" style={{ marginVertical: 24 }} />
{status === "loading" && !usage && (
<ActivityIndicator color={COLORS.codex} style={{ marginVertical: 24 }} />
)}
{status === "error" && error && <ErrorMessage message={error} />}
{status === "success" && usage && (
{usage && (
<View>
{/* Plan badge */}
<View className="flex-row items-center mb-5">
@@ -145,7 +157,7 @@ export default function CodexTab() {
</Text>
{usage.credits.unlimited ? (
<View className="flex-row items-center gap-x-2">
<MaterialIcons name="all-inclusive" size={16} color="#10a37f" />
<MaterialIcons name="all-inclusive" size={16} color={COLORS.codex} />
<Text className="text-sm font-semibold text-green-600 dark:text-green-400">
Unlimited
</Text>
@@ -158,6 +170,9 @@ export default function CodexTab() {
<Text className="text-sm text-neutral-400">No credits</Text>
)}
</View>
<View className="mt-4 border-t border-neutral-100 pt-3 dark:border-neutral-800">
<LastUpdated timestamp={lastFetchedAt} />
</View>
</View>
)}
</View>
@@ -165,3 +180,11 @@ export default function CodexTab() {
</SafeAreaView>
);
}
export default function CodexTab() {
return (
<ScreenErrorBoundary screenName="Codex">
<CodexTabContent />
</ScreenErrorBoundary>
);
}