Added 'cloud storage' functionality

This commit is contained in:
Christopher Sanden
2026-03-04 02:15:53 +01:00
parent 19b9438ef8
commit 45ab15ff40
29 changed files with 1822 additions and 109 deletions

View File

@@ -13,20 +13,34 @@ import { useHeaderHeight } from "@react-navigation/elements";
export default function NewNoteScreen()
{
const { addNote } = useNotes();
const[title, setTitle] = useState("");
const [content, setContent] = useState("");
const insets = useSafeAreaInsets();
const headerHeight = useHeaderHeight();
const [contentHeight, setContentHeight] = useState(160);
const scrollRef = useRef<ScrollView>(null);
const { addNote, errorMessage } = useNotes()
const [title, setTitle] = useState("")
const [content, setContent] = useState("")
const [isSaving, setIsSaving] = useState(false)
const [localErrorMessage, setLocalErrorMessage] = useState<string | null>(null)
const insets = useSafeAreaInsets()
const headerHeight = useHeaderHeight()
const [contentHeight, setContentHeight] = useState(160)
const scrollRef = useRef<ScrollView>(null)
const onSave = () =>
const onSave = async () =>
{
if(!title.trim() && !content.trim()) return;
addNote(title, content);
router.back();
};
if(!title.trim() || !content.trim()) {
setLocalErrorMessage("Title and content are required.")
return
}
setIsSaving(true)
setLocalErrorMessage(null)
const wasSaved = await addNote(title, content)
setIsSaving(false)
if (wasSaved) {
router.back()
}
}
return (
<KeyboardAvoidingView style={{ flex: 1}} behavior={Platform.OS === "ios" ? "padding" : undefined}
@@ -43,15 +57,25 @@ export default function NewNoteScreen()
<TextInput value={content} onChangeText={setContent} placeholder="Write your note..."
style={[styles.input, { height: Math.max(160, contentHeight) }]} multiline
textAlignVertical="top"
onContentSizeChange={(e) => {setContentHeight(e.nativeEvent.contentSize.height);
onContentSizeChange={(e) => {setContentHeight(e.nativeEvent.contentSize.height);
scrollRef.current?.scrollToEnd({ animated: true });
}}/>
{localErrorMessage ? (
<Text style={styles.errorText}>{localErrorMessage}</Text>
) : null}
{!localErrorMessage && errorMessage ? (
<Text style={styles.errorText}>{errorMessage}</Text>
) : null}
</ScrollView>
<View>
<Pressable onPress={onSave}
<Pressable disabled={isSaving} onPress={onSave}
style={[styles.saveFloating, { bottom: insets.bottom + 16 }]}>
<Text style={styles.saveFloatingText}>Save</Text>
<Text style={styles.saveFloatingText}>
{isSaving ? "Saving..." : "Save"}
</Text>
</Pressable>
</View>
</View>
@@ -101,6 +125,9 @@ const styles = StyleSheet.create(
color: "white",
fontSize: 16,
fontWeight: "700"
}
},
errorText: {
color: "#c62828"
},
}
);
);