MCPcopy Create free account
hub / github.com/SplootCode/splootcode / SaveProjectModal

Function SaveProjectModal

packages/components/src/save_project_modal.tsx:52–163  ·  view source on GitHub ↗
(props: SaveProjectModalProps)

Source from the content-addressed store, hash-verified

50}
51
52export function SaveProjectModal(props: SaveProjectModalProps) {
53 const { isOpen, onClose, onComplete, newOwner, projectLoader, clonedFrom } = props
54 const [projectID, setProjectID] = useState('')
55 const [projectTitle, setProjectTitle] = useState('')
56 const [validID, setValidID] = useState(true)
57 const [projectType, setProjectType] = useState(null as RunType | null)
58
59 const featureFlags = loadFeatureFlags()
60
61 useEffect(() => {
62 if (clonedFrom && projectLoader) {
63 const generate = async () => {
64 const [name, title] = await projectLoader.generateValidProjectId(newOwner, clonedFrom.name, clonedFrom.title)
65 setProjectID(name)
66 setProjectTitle(title)
67 }
68 generate()
69 } else {
70 setProjectID('')
71 setProjectTitle('')
72 }
73 }, [clonedFrom, projectLoader])
74
75 useEffect(() => {
76 if (projectID === '') {
77 return
78 }
79
80 projectLoader.isValidProjectId(newOwner, projectID).then((isValid) => {
81 setValidID(isValid)
82 })
83 }, [projectID])
84
85 const handleTitleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
86 setProjectTitle(e.target.value)
87 setProjectID(convertToURL(e.target.value))
88 }
89
90 let errorMessage = ''
91 if (!validID && projectID !== '') {
92 errorMessage = 'This project ID is already taken'
93 }
94
95 const handleSubmit = (e: FormEvent<HTMLFormElement>) => {
96 e.preventDefault()
97 if (projectTitle !== '' && validID) {
98 if (props.clonedFrom) {
99 const proj = props.clonedFrom
100 props.projectLoader.cloneProject(newOwner, projectID, projectTitle, proj).then((newProj) => {
101 onComplete(newOwner, projectID)
102 })
103 } else {
104 props.projectLoader
105 .newProject(newOwner, projectID, projectTitle, 'PYTHON_CLI', projectType || RunType.COMMAND_LINE)
106 .then(() => {
107 onComplete(newOwner, projectID)
108 })
109 }

Callers

nothing calls this directly

Calls 3

loadFeatureFlagsFunction · 0.90
generateFunction · 0.85
isValidProjectIdMethod · 0.80

Tested by

no test coverage detected