Bin
2025-12-16 9e0b2ba2c317b1a86212f24cbae3195ad1f3dbfa
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
import { projectAtom } from "apps/labelstudio/src/providers/ProjectProvider";
import { useAtom } from "jotai";
import React, { useEffect } from "react";
import { useAPI } from "../../../providers/ApiProvider";
 
export const useDraftProject = () => {
  const api = useAPI();
  const [project, setProject] = useAtom(projectAtom);
 
  const fetchDraftProject = React.useCallback(async () => {
    const response = await api.callApi("projects");
 
    // always create the new one
    const projects = response?.results ?? [];
    const lastIndex = projects.length;
    let projectNumber = lastIndex + 1;
    let projectName = `New Project #${projectNumber}`;
 
    // dirty hack to get proper non-duplicate name
    while (projects.find(({ title }) => title === projectName)) {
      projectNumber++;
      projectName = `New Project #${projectNumber}`;
    }
 
    const draft = await api.callApi("createProject", {
      body: {
        title: projectName,
        is_draft: true,
      },
    });
 
    if (draft) setProject(draft);
  }, []);
 
  useEffect(() => {
    fetchDraftProject();
  }, []);
 
  return { project, setProject };
};