All files / src/app/settings general.tsx

53.84% Statements 7/13
100% Branches 0/0
33.33% Functions 2/6
53.84% Lines 7/13

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67                                  1x   1x 1x     1x 1x   1x                 1x                                                              
import React, { useEffect, useState } from "react";
import { Alert } from "react-native";
import {
  useGeneralSettings,
  getCampusLabel,
} from "../../hooks/useGeneralSettings";
import { SettingsScreenScaffold } from "../../components/settings/SettingsScreenScaffold";
import {
  SettingsCard,
  SettingsKeyValueRow,
  SettingsLinkRow,
  SettingsPrimaryButton,
  SettingsSectionLabel,
} from "../../components/settings";
 
export default function SettingsGeneral() {
  const { defaultCampus, setDefaultCampus, hydrateFromStorage } =
    useGeneralSettings();
 
  useEffect(() => {
    void hydrateFromStorage();
  }, [hydrateFromStorage]);
 
  const [cacheSize, setCacheSize] = useState("42.3 MB");
  const [offlineMapsSize, setOfflineMapsSize] = useState("128.7 MB");
 
  const onClearCache = () => {
    setCacheSize("0 MB");
    setOfflineMapsSize("0 MB");
    Alert.alert(
      "Cache cleared",
      "Stored map data and cache have been cleared.",
    );
  };
 
  return (
    <SettingsScreenScaffold title="General">
      <SettingsLinkRow
        title="Default Campus"
        subtitle={getCampusLabel(defaultCampus)}
        onPress={() => {
          Alert.alert("Default Campus", "Choose your default campus", [
            {
              text: "Sir George Williams Campus",
              onPress: () => setDefaultCampus("SGW"),
            },
            {
              text: "Loyola Campus",
              onPress: () => setDefaultCampus("LOYOLA"),
            },
            { text: "Cancel", style: "cancel" },
          ]);
        }}
      />
 
      <SettingsCard>
        <SettingsSectionLabel style={{ marginTop: 8 }}>
          Storage
        </SettingsSectionLabel>
        <SettingsKeyValueRow label="Cache Size" value={cacheSize} />
        <SettingsKeyValueRow label="Offline Maps" value={offlineMapsSize} />
        <SettingsPrimaryButton label="Clear Cache" onPress={onClearCache} />
      </SettingsCard>
    </SettingsScreenScaffold>
  );
}