diff --git a/src/shareExtension/components/NewFolderModal.tsx b/src/shareExtension/components/NewFolderModal.tsx new file mode 100644 index 00000000..add87e90 --- /dev/null +++ b/src/shareExtension/components/NewFolderModal.tsx @@ -0,0 +1,123 @@ +import { useCallback, useState } from 'react'; +import { ActivityIndicator, Modal, Pressable, Text, TextInput, TouchableHighlight, View } from 'react-native'; +import { useTailwind } from 'tailwind-rn'; +import strings from '../../../assets/lang/strings'; +import { colors, fontStyles } from '../theme'; + +interface NewFolderModalProps { + visible: boolean; + onCancel: () => void; + onCreate: (name: string) => Promise; +} + +export const NewFolderModal = ({ visible, onCancel, onCreate }: NewFolderModalProps) => { + const tailwind = useTailwind(); + const [name, setName] = useState(strings.screens.create_folder.defaultName); + const [focused, setFocused] = useState(false); + const [loading, setLoading] = useState(false); + const [error, setError] = useState(null); + + const handleCreate = async () => { + const trimmed = name.trim(); + if (!trimmed) { + setError(strings.screens.ShareExtension.folderNameEmpty); + return; + } + setError(null); + setLoading(true); + try { + await onCreate(trimmed); + setName(strings.screens.create_folder.defaultName); + onCancel(); + } catch { + setError(strings.screens.ShareExtension.folderCreateError); + } finally { + setLoading(false); + } + }; + + const handleCancel = () => { + setName(strings.screens.create_folder.defaultName); + setError(null); + onCancel(); + }; + + const handleChangeName = useCallback((text: string) => { + setName(text); + setError(null); + }, []); + + const handleFocus = useCallback(() => setFocused(true), []); + const handleBlur = useCallback(() => setFocused(false), []); + + return ( + + + + {strings.buttons.newFolder} + + + {strings.screens.ShareExtension.folderNameLabel} + + + + {error ? {error} : null} + + + + + {strings.buttons.cancel} + + + + {loading ? ( + + ) : ( + {strings.buttons.create} + )} + + + + + + ); +};