projects api refactor

This commit is contained in:
2025-09-10 13:09:07 +05:30
parent f0fdad9dff
commit ffafe61e43
39 changed files with 581 additions and 839 deletions

View File

@@ -6,7 +6,7 @@ import { getUserData } from "../../functions/getUserData";
import { useLoadingProgress, useProjectName, useSocketStore } from "../../store/builder/store";
import OuterClick from "../../utils/outerClick";
import { KebabIcon } from "../icons/ExportCommonIcons";
import { getAllProjects } from "../../services/dashboard/getAllProjects";
import { getAllProjectsApi } from "../../services/dashboard/getAllProjectsApi";
// import { viewProject } from "../../services/dashboard/viewProject";
// import { updateProject } from "../../services/dashboard/updateProject";
@@ -97,7 +97,7 @@ const DashboardCard: React.FC<DashBoardCardProps> = ({
if (!projectId) return;
try {
const projects = await getAllProjects(userId, organization);
const projects = await getAllProjectsApi();
const projectUuid = projects?.Projects?.find((val: any) => val.projectUuid === projectId || val._id === projectId);
if (!projectUuid) return;

View File

@@ -4,13 +4,13 @@ import DashboardCard from "./DashboardCard";
import MarketPlaceBanner from "./MarketPlaceBanner";
import { getUserData } from "../../functions/getUserData";
import { useSocketStore } from "../../store/builder/store";
import { getAllProjects } from "../../services/dashboard/getAllProjects";
import { sharedWithMeProjects } from "../../services/dashboard/sharedWithMeProject";
import { recentlyViewed } from "../../services/dashboard/recentlyViewed";
import { getTrash } from "../../services/dashboard/getTrash";
import { searchProject } from "../../services/dashboard/searchProjects";
import { trashSearchProject } from "../../services/dashboard/trashSearchProject";
import { restoreTrash } from "../../services/dashboard/restoreTrash";
import { getAllProjectsApi } from "../../services/dashboard/getAllProjectsApi";
import { sharedWithMeProjectsApi } from "../../services/dashboard/sharedWithMeProjectApi";
import { recentlyViewedApi } from "../../services/dashboard/recentlyViewedApi";
import { getTrashApi } from "../../services/dashboard/getTrashApi";
import { searchProjectApi } from "../../services/dashboard/searchProjectsApi";
import { trashSearchProjectApi } from "../../services/dashboard/trashSearchProjectApi";
import { restoreTrashApi } from "../../services/dashboard/restoreTrashApi";
import { generateUniqueId } from "../../functions/generateUniqueId";
import ProjectSocketRes from "./socket/projectSocketRes";
@@ -40,9 +40,7 @@ const DashboardMain: React.FC<DashboardMainProps> = ({ activeFolder }) => {
const [isSearchActive, setIsSearchActive] = useState<boolean>(false);
const [duplicateData, setDuplicateData] = useState<Object>({});
const [openKebabProjectId, setOpenKebabProjectId] = useState<string | null>(null);
const [projectsCache, setProjectsCache] = useState<{
[key: string]: ProjectCollection;
}>({});
const [projectsCache, setProjectsCache] = useState<{ [key: string]: ProjectCollection }>({});
const { userId, organization } = getUserData();
const { projectSocket } = useSocketStore();
@@ -61,17 +59,17 @@ const DashboardMain: React.FC<DashboardMainProps> = ({ activeFolder }) => {
switch (activeFolder) {
case "home":
projects = await recentlyViewed(organization, userId);
projects = await recentlyViewedApi();
break;
case "projects":
if (activeSubFolder === "myProjects") {
projects = await getAllProjects(userId, organization);
projects = await getAllProjectsApi();
} else {
projects = await sharedWithMeProjects();
projects = await sharedWithMeProjectsApi();
}
break;
case "trash":
projects = await getTrash(organization);
projects = await getTrashApi();
break;
}
@@ -94,9 +92,9 @@ const DashboardMain: React.FC<DashboardMainProps> = ({ activeFolder }) => {
let results;
if (activeFolder === "trash") {
results = await trashSearchProject(organization, userId, inputValue);
results = await trashSearchProjectApi(inputValue);
} else {
results = await searchProject(organization, userId, inputValue);
results = await searchProjectApi(inputValue);
}
setIsSearchActive(true);
@@ -127,7 +125,7 @@ const DashboardMain: React.FC<DashboardMainProps> = ({ activeFolder }) => {
};
const handleRestore = async (projectId: string): Promise<void> => {
await restoreTrash(organization, projectId);
await restoreTrashApi(projectId);
updateStateAfterRemove(projectId);
};

View File

@@ -1,67 +1,64 @@
import React, { useEffect, useState } from "react";
import { useEffect, useState } from "react";
import DashboardNavBar from "./DashboardNavBar";
import DashboardCard from "./DashboardCard";
import { projectTutorial } from "../../services/dashboard/projectTutorial";
import { projectTutorialApi } from "../../services/dashboard/projectTutorialApi";
interface Project {
_id: string;
projectName: string;
thumbnail: string;
createdBy: string;
projectUuid?: string;
_id: string;
projectName: string;
thumbnail: string;
createdBy: string;
projectUuid?: string;
}
interface DiscardedProjects {
[key: string]: Project[];
[key: string]: Project[];
}
const DashboardTutorial = () => {
const [tutorialProject, setTutorialProject] = useState<DiscardedProjects>({});
const handleIcon = async () => {
try {
let tutorial = await projectTutorial();
setTutorialProject(tutorial);
} catch {}
};
const [tutorialProject, setTutorialProject] = useState<DiscardedProjects>({});
const [openKebabProjectId, setOpenKebabProjectId] = useState<string | null>(
null
);
const handleIcon = async () => {
try {
let tutorial = await projectTutorialApi();
setTutorialProject(tutorial);
} catch {}
};
useEffect(() => {
handleIcon();
}, []);
const renderTrashProjects = () => {
const projectList = tutorialProject[Object.keys(tutorialProject)[0]];
const [openKebabProjectId, setOpenKebabProjectId] = useState<string | null>(null);
if (!projectList?.length) {
return <div className="empty-state">No deleted projects found</div>;
}
useEffect(() => {
handleIcon();
}, []);
return projectList.map((tutorials: any) => (
<DashboardCard
key={tutorials._id}
projectName={tutorials.projectName}
thumbnail={tutorials.thumbnail}
projectId={tutorials._id}
openKebabProjectId={openKebabProjectId}
setOpenKebabProjectId={setOpenKebabProjectId}
/>
));
};
return (
<div className="dashboard-home-container">
<DashboardNavBar page="tutorial" />
const renderTrashProjects = () => {
const projectList = tutorialProject[Object.keys(tutorialProject)[0]];
<div
className="dashboard-container"
style={{ height: "calc(100% - 87px)" }}
>
<div className="header" style={{ display: "flex", gap: "7px" }}></div>
<div className="cards-container">{renderTrashProjects()}</div>
</div>
</div>
);
if (!projectList?.length) {
return <div className="empty-state">No deleted projects found</div>;
}
return projectList.map((tutorials: any) => (
<DashboardCard
key={tutorials._id}
projectName={tutorials.projectName}
thumbnail={tutorials.thumbnail}
projectId={tutorials._id}
openKebabProjectId={openKebabProjectId}
setOpenKebabProjectId={setOpenKebabProjectId}
/>
));
};
return (
<div className="dashboard-home-container">
<DashboardNavBar page="tutorial" />
<div className="dashboard-container" style={{ height: "calc(100% - 87px)" }}>
<div className="header" style={{ display: "flex", gap: "7px" }}></div>
<div className="cards-container">{renderTrashProjects()}</div>
</div>
</div>
);
};
export default DashboardTutorial;

View File

@@ -1,8 +1,8 @@
import React, { useEffect } from "react";
import { useLoadingProgress, useSocketStore } from "../../../store/builder/store";
import { getUserData } from "../../../functions/getUserData";
import { getAllProjects } from "../../../services/dashboard/getAllProjects";
import { recentlyViewed } from "../../../services/dashboard/recentlyViewed";
import { getAllProjectsApi } from "../../../services/dashboard/getAllProjectsApi";
import { recentlyViewedApi } from "../../../services/dashboard/recentlyViewedApi";
import { useNavigate } from "react-router-dom";
interface Project {
@@ -26,11 +26,7 @@ interface ProjectSocketResProps {
setIsSearchActive?: React.Dispatch<React.SetStateAction<boolean>>;
}
const ProjectSocketRes = ({
setRecentProjects,
setWorkspaceProjects,
setIsSearchActive,
}: ProjectSocketResProps) => {
const ProjectSocketRes = ({ setRecentProjects, setWorkspaceProjects, setIsSearchActive }: ProjectSocketResProps) => {
const navigate = useNavigate();
const { projectSocket } = useSocketStore();
const { userId, organization } = getUserData();
@@ -61,13 +57,13 @@ const ProjectSocketRes = ({
const handleDuplicate = async (data: any) => {
if (data?.message === "Project Duplicated successfully") {
if (setWorkspaceProjects) {
const allProjects = await getAllProjects(userId, organization);
const allProjects = await getAllProjectsApi();
setWorkspaceProjects(allProjects);
} else if (setRecentProjects) {
const recentProjects = await recentlyViewed(organization, userId);
const recentProjects = await recentlyViewedApi();
setRecentProjects(recentProjects);
}
setIsSearchActive && setIsSearchActive(false);
if (setIsSearchActive) setIsSearchActive(false);
} else {
console.warn("Duplication failed or unexpected response.");
}

View File

@@ -29,8 +29,7 @@ import Footer from "../../footer/Footer";
import ThreadChat from "../../ui/collaboration/threads/ThreadChat";
import Scene from "../../../modules/scene/scene";
import { getUserData } from "../../../functions/getUserData";
import { recentlyViewed } from "../../../services/dashboard/recentlyViewed";
import { recentlyViewedApi } from "../../../services/dashboard/recentlyViewedApi";
import { setAssetsApi } from "../../../services/factoryBuilder/asset/floorAsset/setAssetsApi";
import { getVersionHistoryApi } from "../../../services/factoryBuilder/versionControl/getVersionHistoryApi";
@@ -52,7 +51,6 @@ function MainScene() {
const { versionHistory, setVersions, selectedVersion, setSelectedVersion } = versionStore();
const { setName, selectedAssets, setSelectedAssets } = assetStore();
const { projectId } = useParams();
const { organization, userId } = getUserData();
const { isRenameMode, setIsRenameMode } = useRenameModeStore();
const { selectedComment, commentPositionState } = useSelectedComment();
const { resetStates } = useRestStates();
@@ -96,8 +94,8 @@ function MainScene() {
}, [projectId]);
useEffect(() => {
if (versionHistory.length > 0 && organization && userId) {
recentlyViewed(organization, userId).then((projects) => {
if (versionHistory.length > 0) {
recentlyViewedApi().then((projects) => {
const recent_opened_verisionID = (Object.values(projects?.RecentlyViewed || {})[0] as any)?.Present_version._id;
if (recent_opened_verisionID && projects.RecentlyViewed[0]._id === projectId) {
const version = versionHistory.find((ver) => ver.versionId === recent_opened_verisionID);

View File

@@ -1,54 +1,19 @@
import React, { useEffect } from "react";
import React from "react";
import RenderOverlay from "./Overlay";
import { LogoIconLarge } from "../icons/Logo";
import { useParams } from "react-router-dom";
import { useProjectName } from "../../store/builder/store";
import { getAllProjects } from "../../services/dashboard/getAllProjects";
import { useSimulationState } from "../../store/simulation/useSimulationStore";
import { getUserData } from "../../functions/getUserData";
import { sharedWithMeProjects } from "../../services/dashboard/sharedWithMeProject";
interface LoadingPageProps {
progress: number; // Expect progress as a percentage (0-100)
}
const LoadingPage: React.FC<LoadingPageProps> = ({ progress }) => {
const { projectName, setProjectName } = useProjectName();
const { projectId } = useParams();
const { projectName } = useProjectName();
const { comparisonScene } = useSimulationState();
const { userId, organization } = getUserData();
const validatedProgress = Math.min(100, Math.max(0, progress));
useEffect(() => {
if (!userId) {
console.error("User data not found in localStorage");
return;
}
const fetchProjects = async () => {
try {
const projects = await getAllProjects(userId, organization);
const shared = await sharedWithMeProjects();
const allProjects = [...(projects?.Projects || []), ...(shared || [])];
const matchedProject = allProjects.find((val: any) => val.projectUuid === projectId || val._id === projectId);
if (matchedProject) {
setProjectName(matchedProject.projectName);
} else {
console.warn("Project not found with given ID:", projectId);
}
} catch (error) {
console.error("Error fetching projects:", error);
}
};
fetchProjects();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
return (
<RenderOverlay>
<div className={`loading-wrapper ${comparisonScene != null ? "comparisionLoading" : ""}`}>

View File

@@ -5,106 +5,90 @@ import MenuBar from "./menu/menu";
import { ProjectIcon } from "../icons/HeaderIcons";
import { useProjectName } from "../../store/builder/store";
import { useParams } from "react-router-dom";
import { getAllProjects } from "../../services/dashboard/getAllProjects";
import { updateProject } from "../../services/dashboard/updateProject";
import { getAllProjectsApi } from "../../services/dashboard/getAllProjectsApi";
import { updateProjectApi } from "../../services/dashboard/updateProjectApi";
import { getUserData } from "../../functions/getUserData";
const FileMenu: React.FC = () => {
const [openMenu, setOpenMenu] = useState(false);
const containerRef = useRef<HTMLButtonElement>(null);
let clickTimeout: NodeJS.Timeout | null = null;
const { projectName, setProjectName } = useProjectName();
// const { dashBoardSocket } = useSocketStore();
const { projectId } = useParams();
const { userId, organization, email } = getUserData();
const [openMenu, setOpenMenu] = useState(false);
const containerRef = useRef<HTMLButtonElement>(null);
let clickTimeout: NodeJS.Timeout | null = null;
const { projectName, setProjectName } = useProjectName();
// const { dashBoardSocket } = useSocketStore();
const { projectId } = useParams();
const { userId, organization, email } = getUserData();
const handleClick = () => {
if (clickTimeout) return;
setOpenMenu((prev) => !prev);
clickTimeout = setTimeout(() => {
clickTimeout = null;
}, 800);
};
useEffect(() => {
const handleClickOutside = (event: MouseEvent) => {
if (
containerRef.current &&
!containerRef.current.contains(event.target as Node)
) {
setOpenMenu(false);
}
const handleClick = () => {
if (clickTimeout) return;
setOpenMenu((prev) => !prev);
clickTimeout = setTimeout(() => {
clickTimeout = null;
}, 800);
};
document.addEventListener("mousedown", handleClickOutside);
return () => document.removeEventListener("mousedown", handleClickOutside);
}, []);
useEffect(() => {
const handleClickOutside = (event: MouseEvent) => {
if (containerRef.current && !containerRef.current.contains(event.target as Node)) {
setOpenMenu(false);
}
};
const handleProjectRename = async (projectName: string) => {
setProjectName(projectName);
if (!projectId) return;
document.addEventListener("mousedown", handleClickOutside);
return () => document.removeEventListener("mousedown", handleClickOutside);
}, []);
// localStorage.setItem("projectName", newName);
const handleProjectRename = async (projectName: string) => {
setProjectName(projectName);
if (!projectId) return;
try {
if (!email || !userId) return;
// localStorage.setItem("projectName", newName);
const projects = await getAllProjects(userId, organization);
if (!projects || !projects.Projects) return;
// console.log('projects: ', projects);
let projectUuid = projects.Projects.find(
(val: any) => val.projectUuid === projectId || val._id === projectId
);
try {
if (!email || !userId) return;
const updateProjects = {
projectId: projectUuid?._id,
organization,
userId,
projectName,
thumbnail: undefined,
};
const projects = await getAllProjectsApi();
if (!projects || !projects.Projects) return;
// console.log('projects: ', projects);
let projectUuid = projects.Projects.find((val: any) => val.projectUuid === projectId || val._id === projectId);
// if (dashBoardSocket) {
// const handleResponse = (data: any) => {
// console.log('Project update response:', data);
// dashBoardSocket.off("v1-project:response:update", handleResponse); // Clean up
// };
// dashBoardSocket.on("v1-project:response:update", handleResponse);
// dashBoardSocket.emit("v1:project:update", updateProjects);
// }
const updateProjects = {
projectId: projectUuid?._id,
organization,
userId,
projectName,
thumbnail: undefined,
};
//API for projects rename
// if (dashBoardSocket) {
// const handleResponse = (data: any) => {
// console.log('Project update response:', data);
// dashBoardSocket.off("v1-project:response:update", handleResponse); // Clean up
// };
// dashBoardSocket.on("v1-project:response:update", handleResponse);
// dashBoardSocket.emit("v1:project:update", updateProjects);
// }
const updatedProjectName = await updateProject(
projectId,
userId,
organization,
undefined,
projectName
);
} catch (error) {
console.error("Error updating project name:", error);
}
};
return (
<button
id="project-dropdown-button"
className="project-dropdowm-container"
ref={containerRef}
onClick={handleClick}
>
<div className="project-name">
<div className="icon">
<ProjectIcon />
</div>
<RenameInput value={projectName} onRename={handleProjectRename} />
</div>
<div className="more-options-button">
<ArrowIcon />
{openMenu && <MenuBar setOpenMenu={setOpenMenu} />}
</div>
</button>
);
//API for projects rename
const updatedProjectName = await updateProjectApi(projectId, undefined, projectName);
} catch (error) {
console.error("Error updating project name:", error);
}
};
return (
<button id="project-dropdown-button" className="project-dropdowm-container" ref={containerRef} onClick={handleClick}>
<div className="project-name">
<div className="icon">
<ProjectIcon />
</div>
<RenameInput value={projectName} onRename={handleProjectRename} />
</div>
<div className="more-options-button">
<ArrowIcon />
{openMenu && <MenuBar setOpenMenu={setOpenMenu} />}
</div>
</button>
);
};
export default FileMenu;

View File

@@ -10,7 +10,6 @@ import Simulation from "../simulation/simulation";
import Collaboration from "../collaboration/collaboration";
import useModuleStore from "../../store/ui/useModuleStore";
import { useParams } from "react-router-dom";
import { getAllProjects } from "../../services/dashboard/getAllProjects";
import { getUserData } from "../../functions/getUserData";
import { useLoadingProgress, useSocketStore } from "../../store/builder/store";
import { Color, SRGBColorSpace } from "three";
@@ -37,30 +36,21 @@ export default function Scene({ layout }: { readonly layout: "Main Layout" | "Co
useEffect(() => {
if (!projectId || loadingProgress !== 0) return;
getAllProjects(userId, organization)
.then((projects) => {
if (!projects.Projects) return;
let project = projects.Projects.find((val: any) => val.projectUuid === projectId || val._id === projectId);
const canvas = document.getElementById("sceneCanvas")?.getElementsByTagName("canvas")[0];
if (!canvas) return;
compressImage(canvas.toDataURL("image/png")).then((screenshotDataUrl) => {
const updateProjects = {
projectId: project?._id,
organization,
userId,
projectName: project?.projectName,
thumbnail: screenshotDataUrl,
};
if (projectSocket) {
projectSocket.emit("v1:project:update", updateProjects);
}
});
})
.catch((err) => {
console.error(err);
});
const canvas = document.getElementById("sceneCanvas")?.getElementsByTagName("canvas")[0];
if (!canvas) return;
compressImage(canvas.toDataURL("image/png")).then((screenshotDataUrl) => {
const updateProjects = {
projectId,
organization,
userId,
thumbnail: screenshotDataUrl,
};
if (projectSocket) {
projectSocket.emit("v1:project:update", updateProjects);
}
});
// eslint-disable-next-line
}, [activeModule, assets, loadingProgress]);
}, [activeModule, assets, loadingProgress, projectId]);
return (
<KeyboardControls map={map}>

View File

@@ -7,11 +7,11 @@ import FollowPerson from "../components/templates/FollowPerson";
import { useLogger } from "../components/ui/log/LoggerContext";
import RenderOverlay from "../components/templates/Overlay";
import LogList from "../components/ui/log/LogList";
import { getAllProjects } from "../services/dashboard/getAllProjects";
import { viewProject } from "../services/dashboard/viewProject";
import { getAllProjectsApi } from "../services/dashboard/getAllProjectsApi";
import { viewProjectApi } from "../services/dashboard/viewProjectApi";
import { getUserData } from "../functions/getUserData";
import { SceneProvider } from "../modules/scene/sceneContext";
import { sharedWithMeProjects } from "../services/dashboard/sharedWithMeProject";
import { sharedWithMeProjectsApi } from "../services/dashboard/sharedWithMeProjectApi";
import { handleCanvasCursors } from "../utils/mouseUtils/handleCanvasCursors";
import MainScene from "../components/layout/scenes/MainScene";
import ComparisonScene from "../components/layout/scenes/ComparisonScene";
@@ -33,18 +33,17 @@ const Project: React.FC = () => {
navigate("/page-not-found");
return;
}
const fetchProjects = async () => {
try {
const projects = await getAllProjects(userId, organization);
const shared = await sharedWithMeProjects();
const projects = await getAllProjectsApi();
const shared = await sharedWithMeProjectsApi();
const allProjects = [...(projects?.Projects || []), ...(shared || [])];
const allProjects = [...(projects?.Projects || []), ...(shared?.Shared || [])];
const matchedProject = allProjects.find((val: any) => val.projectUuid === projectId || val._id === projectId);
if (matchedProject) {
setProjectName(matchedProject.projectName);
await viewProject(organization, matchedProject._id, userId);
await viewProjectApi(matchedProject._id);
} else {
console.warn("Project not found with given ID:", projectId);
navigate(`/not_found#project_not_found#${projectId}`);
@@ -57,7 +56,7 @@ const Project: React.FC = () => {
fetchProjects();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
}, [projectId]);
useEffect(() => {
setActiveModule("builder");

View File

@@ -6,7 +6,7 @@ import { useLoadingProgress } from "../store/builder/store";
import { signInApi } from "../services/factoryBuilder/signInSignUp/signInApi";
import { signUpApi } from "../services/factoryBuilder/signInSignUp/signUpApi";
import FingerprintJS from "@fingerprintjs/fingerprintjs";
import { recentlyViewed } from "../services/dashboard/recentlyViewed";
import { recentlyViewedApi } from "../services/dashboard/recentlyViewedApi";
import { getUserData } from "../functions/getUserData";
const UserAuth: React.FC = () => {
@@ -16,7 +16,7 @@ const UserAuth: React.FC = () => {
const [error, setError] = useState("");
const [isSignIn, setIsSignIn] = useState(true);
const { userName } = getUserData();
const [name, setName] = useState<string>(userName || '');
const [name, setName] = useState<string>(userName || "");
const { setLoadingProgress } = useLoadingProgress();
const [fingerprint, setFingerprint] = useState("");
@@ -46,7 +46,7 @@ const UserAuth: React.FC = () => {
localStorage.setItem("refreshToken", res.message.refreshToken);
try {
const projects = await recentlyViewed(organization, res.message.userId);
const projects = await recentlyViewedApi();
if (res.message.isShare) {
if (Object.values(projects.RecentlyViewed).length > 0) {
const recent_opend_projectID = (Object.values(projects?.RecentlyViewed || {})[0] as any)?._id;
@@ -72,22 +72,9 @@ const UserAuth: React.FC = () => {
setError("Already logged in on another browser. Please logout first.");
navigate("/");
setError("");
// setError("");
// setOrganization(organization);
// setUserName(res.ForceLogoutData.userName);
// console.log(' res.userId: ', res.ForceLogoutData.userId);
// localStorage.setItem("userId", res.ForceLogoutData.userId);
// localStorage.setItem("email", res.ForceLogoutData.Email);
// localStorage.setItem("userName", res.ForceLogoutData.userName);
// localStorage.setItem("token", res.ForceLogoutData.token);
// localStorage.setItem("refreshToken", res.ForceLogoutData.refreshToken);
// if (res.ForceLogoutData.isShare) {
// setLoadingProgress(1);
// navigate("/Dashboard");
// }
}
} catch (error) {
echo.error("Login failed");
} catch {
console.error("Login failed");
}
};
@@ -105,8 +92,8 @@ const UserAuth: React.FC = () => {
if (res.message === "User already exists") {
setError("User already exists");
}
} catch (error) {
echo.error("Register user failed");
} catch {
console.error("Register user failed");
}
} else {
setError("Please fill all the fields!");
@@ -123,22 +110,14 @@ const UserAuth: React.FC = () => {
{isSignIn ? (
<>
Dont have an account?{" "}
<span
className="link"
onClick={() => setIsSignIn(false)}
style={{ cursor: "pointer" }}
>
<span className="link" onClick={() => setIsSignIn(false)} style={{ cursor: "pointer" }}>
Register here!
</span>
</>
) : (
<>
Already have an account?{" "}
<span
className="link"
onClick={() => setIsSignIn(true)}
style={{ cursor: "pointer" }}
>
<span className="link" onClick={() => setIsSignIn(true)} style={{ cursor: "pointer" }}>
Login here!
</span>
</>
@@ -151,28 +130,9 @@ const UserAuth: React.FC = () => {
{error && <div className="error-message">🛈 {error}</div>}
<form
onSubmit={isSignIn ? handleLogin : handleRegister}
className="auth-form"
>
{!isSignIn && (
<input
type="text"
value={name}
placeholder="Username"
onChange={(e) => setName(e.target.value)}
required
/>
)}
<input
type="email"
name="email"
value={email}
placeholder="Email"
autoComplete="email"
onChange={(e) => setEmail(e.target.value)}
required
/>
<form onSubmit={isSignIn ? handleLogin : handleRegister} className="auth-form">
{!isSignIn && <input type="text" value={name} placeholder="Username" onChange={(e) => setName(e.target.value)} required />}
<input type="email" name="email" value={email} placeholder="Email" autoComplete="email" onChange={(e) => setEmail(e.target.value)} required />
<div className="password-container">
<input
name="password"
@@ -183,12 +143,7 @@ const UserAuth: React.FC = () => {
onChange={(e) => setPassword(e.target.value)}
required
/>
<button
id="toogle-password"
type="button"
className="toggle-password"
onClick={() => setShowPassword(!showPassword)}
>
<button id="toogle-password" type="button" className="toggle-password" onClick={() => setShowPassword(!showPassword)}>
<EyeIcon isClosed={showPassword} />
</button>
</div>
@@ -213,23 +168,14 @@ const UserAuth: React.FC = () => {
</form>
<p className="policy">
By signing up for, or logging into, an account, you agree to our{" "}
<span
className="link"
onClick={() => navigate("/privacy")}
style={{ cursor: "pointer" }}
>
<span className="link" onClick={() => navigate("/privacy")} style={{ cursor: "pointer" }}>
privacy policy
</span>{" "}
&{" "}
<span
className="link"
onClick={() => navigate("/terms")}
style={{ cursor: "pointer" }}
>
<span className="link" onClick={() => navigate("/terms")} style={{ cursor: "pointer" }}>
terms of service
</span>{" "}
whether you read them or not. You can also find these terms on our
website.
whether you read them or not. You can also find these terms on our website.
</p>
</div>
);

View File

@@ -1 +0,0 @@

View File

@@ -1,35 +0,0 @@
let url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}`;
export const createProject = async (projectUuid: string, userId: string, thumbnail: string, organization: string) => {
try {
const response = await fetch(`${url_Backend_dwinzo}/api/V1/NewProject`, {
method: "POST",
headers: {
Authorization: "Bearer <access_token>",
"Content-Type": "application/json",
token: localStorage.getItem("token") || "",
refresh_token: localStorage.getItem("refreshToken") || "",
},
body: JSON.stringify({ projectUuid, userId, thumbnail, organization, }),
});
const newAccessToken = response.headers.get("x-access-token");
if (newAccessToken) {
//console.log("New token received:", newAccessToken);
localStorage.setItem("token", newAccessToken);
}
if (!response.ok) {
console.error("Failed to add project");
}
const result = await response.json();
return result;
} catch (error) {
if (error instanceof Error) {
console.log(error.message);
} else {
console.log("An unknown error occurred");
}
}
};

View File

@@ -0,0 +1,29 @@
let url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}`;
export const createProjectApi = async (projectUuid: string, userId: string, thumbnail: string, organization: string) => {
try {
const response = await fetch(`${url_Backend_dwinzo}/api/V1/NewProject`, {
method: "POST",
headers: {
Authorization: "Bearer <access_token>",
"Content-Type": "application/json",
token: localStorage.getItem("token") || "",
refresh_token: localStorage.getItem("refreshToken") || "",
},
body: JSON.stringify({ projectUuid, userId, thumbnail, organization }),
});
const newAccessToken = response.headers.get("x-access-token");
if (newAccessToken) {
localStorage.setItem("token", newAccessToken);
}
if (!response.ok) {
console.error("Failed to create project");
}
const result = await response.json();
return result;
} catch {
console.error("Failed to create project");
}
};

View File

@@ -1,44 +0,0 @@
let url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}`;
// let url_Backend_dwinzo = `http://192.168.0.102:5000`;
export const deleteProject = async (
projectId: string,
userId: string,
organization: string
) => {
try {
console.log("projectId", userId, organization, projectId);
const response = await fetch(
`${url_Backend_dwinzo}/api/V1/Projects/Archive/${projectId}`,
{
method: "PATCH",
headers: {
Authorization: "Bearer <access_token>",
"Content-Type": "application/json",
token: localStorage.getItem("token") || "",
refresh_token: localStorage.getItem("refreshToken") || "",
},
body: JSON.stringify({ userId, organization }),
}
);
const newAccessToken = response.headers.get("x-access-token");
if (newAccessToken) {
//console.log("New token received:", newAccessToken);
localStorage.setItem("token", newAccessToken);
}
console.log("response: ", response);
if (!response.ok) {
console.error("Failed to clearPanel in the zone");
}
const result = await response.json();
return result;
} catch (error) {
echo.error("Failed to clean pannel");
if (error instanceof Error) {
console.log(error.message);
} else {
console.log("An unknown error occurred");
}
}
};

View File

@@ -0,0 +1,28 @@
let url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}`;
export const deleteProjectApi = async (projectId: string, userId: string, organization: string) => {
try {
const response = await fetch(`${url_Backend_dwinzo}/api/V1/Projects/Archive/${projectId}`, {
method: "PATCH",
headers: {
Authorization: "Bearer <access_token>",
"Content-Type": "application/json",
token: localStorage.getItem("token") || "",
refresh_token: localStorage.getItem("refreshToken") || "",
},
body: JSON.stringify({ userId, organization }),
});
const newAccessToken = response.headers.get("x-access-token");
if (newAccessToken) {
localStorage.setItem("token", newAccessToken);
}
if (!response.ok) {
console.error("Failed to delete projects");
}
const result = await response.json();
return result;
} catch {
console.error("Failed to delete projects");
}
};

View File

@@ -1,35 +0,0 @@
const url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}`;
// const url_Backend_dwinzo = `http://192.168.0.102:5000`;
export const deleteTrash = async (organization: string, projectId: string) => {
try {
const response = await fetch(
`${url_Backend_dwinzo}/api/V1/Trash/Delete?projectId=${projectId}`,
{
method: "PATCH",
headers: {
Authorization: "Bearer <access_token>",
"Content-Type": "application/json",
token: localStorage.getItem("token") || "",
refresh_token: localStorage.getItem("refreshToken") || "",
},
}
);
const newAccessToken = response.headers.get("x-access-token");
if (newAccessToken) {
//console.log("New token received:", newAccessToken);
localStorage.setItem("token", newAccessToken);
}
console.log("restore: ", response);
if (!response.ok) {
console.error("Failed to fetch trash data");
}
const data = await response.json();
return data;
} catch (error: any) {
console.error("Failed to fetch trash data:", error);
console.error(error.message || "Unknown error");
}
};

View File

@@ -0,0 +1,28 @@
const url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}`;
export const deleteTrashApi = async (projectId: string) => {
try {
const response = await fetch(`${url_Backend_dwinzo}/api/V1/Trash/Delete?projectId=${projectId}`, {
method: "PATCH",
headers: {
Authorization: "Bearer <access_token>",
"Content-Type": "application/json",
token: localStorage.getItem("token") || "",
refresh_token: localStorage.getItem("refreshToken") || "",
},
});
const newAccessToken = response.headers.get("x-access-token");
if (newAccessToken) {
localStorage.setItem("token", newAccessToken);
}
if (!response.ok) {
console.error("Failed to fetch trash data");
}
const data = await response.json();
return data;
} catch {
console.error("Failed to fetch trash data");
}
};

View File

@@ -1,48 +0,0 @@
let url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}`;
export const duplicateProject = async (
refProjectID: string,
projectUuid: string,
thumbnail: string,
projectName: string
) => {
try {
const response = await fetch(
`${url_Backend_dwinzo}/api/V1/project/Duplicate`,
{
method: "POST",
headers: {
Authorization: "Bearer <access_token>",
"Content-Type": "application/json",
token: localStorage.getItem("token") || "",
refresh_token: localStorage.getItem("refreshToken") || "",
},
body: JSON.stringify({
refProjectID,
projectUuid,
thumbnail,
projectName,
}),
}
);
const newAccessToken = response.headers.get("x-access-token");
if (newAccessToken) {
//
localStorage.setItem("token", newAccessToken);
}
if (!response.ok) {
}
const result = await response.json();
//
return result;
} catch (error) {
if (error instanceof Error) {
} else {
}
}
};

View File

@@ -0,0 +1,34 @@
let url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}`;
export const duplicateProjectApi = async (refProjectID: string, projectUuid: string, thumbnail: string, projectName: string) => {
try {
const response = await fetch(`${url_Backend_dwinzo}/api/V1/project/Duplicate`, {
method: "POST",
headers: {
Authorization: "Bearer <access_token>",
"Content-Type": "application/json",
token: localStorage.getItem("token") || "",
refresh_token: localStorage.getItem("refreshToken") || "",
},
body: JSON.stringify({
refProjectID,
projectUuid,
thumbnail,
projectName,
}),
});
const newAccessToken = response.headers.get("x-access-token");
if (newAccessToken) {
localStorage.setItem("token", newAccessToken);
}
if (!response.ok) {
console.error("Failed to duplicate project");
}
const result = await response.json();
return result;
} catch {
console.error("Failed to duplicate project");
}
};

View File

@@ -1,32 +0,0 @@
let url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}`;
export const getAllProjects = async (userId: string, organization: string) => {
try {
const response = await fetch(
`${url_Backend_dwinzo}/api/V1/Projects`,
{
method: "GET",
headers: {
Authorization: "Bearer <access_token>",
"Content-Type": "application/json",
token: localStorage.getItem("token") || "",
refresh_token: localStorage.getItem("refreshToken") || "",
},
}
);
const newAccessToken = response.headers.get("x-access-token");
if (newAccessToken) {
//console.log("New token received:", newAccessToken);
localStorage.setItem("token", newAccessToken);
}
if (!response.ok) {
throw new Error("Failed to fetch assets");
}
return await response.json();
} catch (error: any) {
echo.error("Failed to get asset image");
console.log(error.message);
}
};

View File

@@ -0,0 +1,27 @@
let url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}`;
export const getAllProjectsApi = async () => {
try {
const response = await fetch(`${url_Backend_dwinzo}/api/V1/Projects`, {
method: "GET",
headers: {
Authorization: "Bearer <access_token>",
"Content-Type": "application/json",
token: localStorage.getItem("token") || "",
refresh_token: localStorage.getItem("refreshToken") || "",
},
});
const newAccessToken = response.headers.get("x-access-token");
if (newAccessToken) {
localStorage.setItem("token", newAccessToken);
}
if (!response.ok) {
throw new Error("Failed to get all projects");
}
return await response.json();
} catch {
console.log("Failed to get all projects");
}
};

View File

@@ -1,34 +0,0 @@
const url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}`;
// const url_Backend_dwinzo = `http://192.168.0.102:5000`;
export const getTrash = async (organization: string) => {
try {
const response = await fetch(
`${url_Backend_dwinzo}/api/V1/TrashItems`,
{
method: "GET",
headers: {
Authorization: "Bearer <access_token>",
"Content-Type": "application/json",
token: localStorage.getItem("token") || "",
refresh_token: localStorage.getItem("refreshToken") || "",
},
}
);
const newAccessToken = response.headers.get("x-access-token");
if (newAccessToken) {
//console.log("New token received:", newAccessToken);
localStorage.setItem("token", newAccessToken);
}
if (!response.ok) {
console.error("Failed to fetch trash data");
}
const data = await response.json();
return data;
} catch (error: any) {
console.error("Failed to fetch trash data:", error);
console.error(error.message || "Unknown error");
}
};

View File

@@ -0,0 +1,27 @@
const url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}`;
export const getTrashApi = async () => {
try {
const response = await fetch(`${url_Backend_dwinzo}/api/V1/TrashItems`, {
method: "GET",
headers: {
Authorization: "Bearer <access_token>",
"Content-Type": "application/json",
token: localStorage.getItem("token") || "",
refresh_token: localStorage.getItem("refreshToken") || "",
},
});
const newAccessToken = response.headers.get("x-access-token");
if (newAccessToken) {
localStorage.setItem("token", newAccessToken);
}
if (!response.ok) {
console.error("Failed to fetch trash data");
}
const data = await response.json();
return data;
} catch {
console.error("Failed to fetch trash data");
}
};

View File

@@ -1,35 +0,0 @@
let url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}`;
export const projectTutorial = async () => {
try {
const response = await fetch(`${url_Backend_dwinzo}/api/V1/tutorials`, {
method: "GET",
headers: {
Authorization: "Bearer <access_token>",
"Content-Type": "application/json",
token: localStorage.getItem("token") || "",
refresh_token: localStorage.getItem("refreshToken") || "",
},
});
const newAccessToken = response.headers.get("x-access-token");
if (newAccessToken) {
//console.log("New token received:", newAccessToken);
localStorage.setItem("token", newAccessToken);
}
// console.log("response: ", response);
if (!response.ok) {
console.error("Failed to add project");
}
const result = await response.json();
return result;
} catch (error) {
if (error instanceof Error) {
console.log(error.message);
} else {
console.log("An unknown error occurred");
}
}
};

View File

@@ -0,0 +1,28 @@
let url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}`;
export const projectTutorialApi = async () => {
try {
const response = await fetch(`${url_Backend_dwinzo}/api/V1/tutorials`, {
method: "GET",
headers: {
Authorization: "Bearer <access_token>",
"Content-Type": "application/json",
token: localStorage.getItem("token") || "",
refresh_token: localStorage.getItem("refreshToken") || "",
},
});
const newAccessToken = response.headers.get("x-access-token");
if (newAccessToken) {
localStorage.setItem("token", newAccessToken);
}
if (!response.ok) {
console.error("Failed to get tutorial Projects");
}
const result = await response.json();
return result;
} catch {
console.log("Failed to get tutorial Projects");
}
};

View File

@@ -1,30 +0,0 @@
let url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}`;
export const recentlyViewed = async (organization: string, userId: string) => {
try {
const response = await fetch(
`${url_Backend_dwinzo}/api/V1/RecentlyViewed`,
{
method: "GET",
headers: {
Authorization: "Bearer <access_token>",
"Content-Type": "application/json",
token: localStorage.getItem("token") || "",
refresh_token: localStorage.getItem("refreshToken") || "",
},
}
);
const newAccessToken = response.headers.get("x-access-token");
if (newAccessToken) {
localStorage.setItem("token", newAccessToken);
}
if (!response.ok) {
console.error("Failed to fetch project");
}
return await response.json();
} catch (error: any) {
console.error("Failed to get project");
console.log(error.message);
}
};

View File

@@ -0,0 +1,26 @@
let url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}`;
export const recentlyViewedApi = async () => {
try {
const response = await fetch(`${url_Backend_dwinzo}/api/V1/RecentlyViewed`, {
method: "GET",
headers: {
Authorization: "Bearer <access_token>",
"Content-Type": "application/json",
token: localStorage.getItem("token") || "",
refresh_token: localStorage.getItem("refreshToken") || "",
},
});
const newAccessToken = response.headers.get("x-access-token");
if (newAccessToken) {
localStorage.setItem("token", newAccessToken);
}
if (!response.ok) {
console.error("Failed to fetch recent project");
}
return await response.json();
} catch {
console.error("Failed to fetch recent project");
}
};

View File

@@ -1,35 +0,0 @@
const url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}`;
// const url_Backend_dwinzo = `http://192.168.0.102:5000`;
export const restoreTrash = async (organization: string, projectId: string) => {
try {
const response = await fetch(
`${url_Backend_dwinzo}/api/V1/Trash/restore?projectId=${projectId}`,
{
method: "PATCH",
headers: {
Authorization: "Bearer <access_token>",
"Content-Type": "application/json",
token: localStorage.getItem("token") || "",
refresh_token: localStorage.getItem("refreshToken") || "",
},
}
);
const newAccessToken = response.headers.get("x-access-token");
if (newAccessToken) {
//console.log("New token received:", newAccessToken);
localStorage.setItem("token", newAccessToken);
}
if (!response.ok) {
console.error("Failed to fetch trash data");
}
const data = await response.json();
console.log("restore: ", response);
return data;
} catch (error: any) {
console.error("Failed to fetch trash data:", error);
console.error(error.message || "Unknown error");
}
};

View File

@@ -0,0 +1,28 @@
const url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}`;
export const restoreTrashApi = async (projectId: string) => {
try {
const response = await fetch(`${url_Backend_dwinzo}/api/V1/Trash/restore?projectId=${projectId}`, {
method: "PATCH",
headers: {
Authorization: "Bearer <access_token>",
"Content-Type": "application/json",
token: localStorage.getItem("token") || "",
refresh_token: localStorage.getItem("refreshToken") || "",
},
});
const newAccessToken = response.headers.get("x-access-token");
if (newAccessToken) {
localStorage.setItem("token", newAccessToken);
}
if (!response.ok) {
console.error("Failed to fetch trash projects");
}
const data = await response.json();
return data;
} catch {
console.error("Failed to fetch trash projects");
}
};

View File

@@ -1,43 +0,0 @@
let url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}`;
export const searchProject = async (
organization: string,
userId: string,
searchName: string
) => {
try {
const response = await fetch(
`${url_Backend_dwinzo}/api/V1/search/searchProjects?searchName=${searchName}`,
{
method: "GET",
headers: {
Authorization: "Bearer <access_token>",
"Content-Type": "application/json",
token: localStorage.getItem("token") || "",
refresh_token: localStorage.getItem("refreshToken") || "",
},
}
);
const newAccessToken = response.headers.get("x-access-token");
if (newAccessToken) {
//console.log("New token received:", newAccessToken);
localStorage.setItem("token", newAccessToken);
}
console.log("response: ", response);
if (!response.ok) {
console.error("Failed to Search project");
}
const result = await response.json();
console.log("searchProjects: ", result);
return result;
} catch (error) {
if (error instanceof Error) {
console.log(error.message);
} else {
console.log("An unknown error occurred");
}
}
};

View File

@@ -0,0 +1,29 @@
let url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}`;
export const searchProjectApi = async (searchName: string) => {
try {
const response = await fetch(`${url_Backend_dwinzo}/api/V1/search/searchProjects?searchName=${searchName}`, {
method: "GET",
headers: {
Authorization: "Bearer <access_token>",
"Content-Type": "application/json",
token: localStorage.getItem("token") || "",
refresh_token: localStorage.getItem("refreshToken") || "",
},
});
const newAccessToken = response.headers.get("x-access-token");
if (newAccessToken) {
localStorage.setItem("token", newAccessToken);
}
if (!response.ok) {
console.error("Failed to Search project");
}
const result = await response.json();
return result;
} catch {
console.log("Failed to Search project");
}
};

View File

@@ -1,30 +0,0 @@
let url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}`;
export const sharedWithMeProjects = async (
) => {
try {
const response = await fetch(`${url_Backend_dwinzo}/api/V1/sharedWithMe`, {
method: "GET",
headers: {
Authorization: "Bearer <access_token>",
"Content-Type": "application/json",
token: localStorage.getItem("token") || "",
refresh_token: localStorage.getItem("refreshToken") || "",
},
});
const newAccessToken = response.headers.get("x-access-token");
if (newAccessToken) {
//console.log("New token received:", newAccessToken);
localStorage.setItem("token", newAccessToken);
}
if (!response.ok) {
throw new Error("Failed to fetch assets");
}
return await response.json();
} catch (error: any) {
echo.error("Failed to get asset image");
console.log(error.message);
}
};

View File

@@ -0,0 +1,27 @@
let url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}`;
export const sharedWithMeProjectsApi = async () => {
try {
const response = await fetch(`${url_Backend_dwinzo}/api/V1/sharedWithMe`, {
method: "GET",
headers: {
Authorization: "Bearer <access_token>",
"Content-Type": "application/json",
token: localStorage.getItem("token") || "",
refresh_token: localStorage.getItem("refreshToken") || "",
},
});
const newAccessToken = response.headers.get("x-access-token");
if (newAccessToken) {
localStorage.setItem("token", newAccessToken);
}
if (!response.ok) {
throw new Error("Failed to get shared projects");
}
return await response.json();
} catch {
console.error("Failed to get shared projects");
}
};

View File

@@ -1,40 +0,0 @@
let url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}`;
export const trashSearchProject = async (
organization: string,
userId: string,
searchName: string
) => {
try {
const response = await fetch(
`${url_Backend_dwinzo}/api/V1/search/searchTrashProjects?searchName=${searchName}`,
{
method: "GET",
headers: {
Authorization: "Bearer <access_token>",
"Content-Type": "application/json",
token: localStorage.getItem("token") || "",
refresh_token: localStorage.getItem("refreshToken") || "",
},
}
);
const newAccessToken = response.headers.get("x-access-token");
if (newAccessToken) {
//console.log("New token received:", newAccessToken);
localStorage.setItem("token", newAccessToken);
}
if (!response.ok) {
console.error("Failed to add project");
}
const result = await response.json();
console.log("searchTrashProjects: ", result);
return result;
} catch (error) {
if (error instanceof Error) {
console.log(error.message);
} else {
console.log("An unknown error occurred");
}
}
};

View File

@@ -0,0 +1,27 @@
let url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}`;
export const trashSearchProjectApi = async (searchName: string) => {
try {
const response = await fetch(`${url_Backend_dwinzo}/api/V1/search/searchTrashProjects?searchName=${searchName}`, {
method: "GET",
headers: {
Authorization: "Bearer <access_token>",
"Content-Type": "application/json",
token: localStorage.getItem("token") || "",
refresh_token: localStorage.getItem("refreshToken") || "",
},
});
const newAccessToken = response.headers.get("x-access-token");
if (newAccessToken) {
localStorage.setItem("token", newAccessToken);
}
if (!response.ok) {
console.error("Failed to search trashed projects");
}
const result = await response.json();
return result;
} catch {
console.error("Failed to search trashed projects");
}
};

View File

@@ -1,52 +0,0 @@
let url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}`;
export const updateProject = async (
projectId: string,
userId: string,
organization: string,
thumbnail?: string,
projectName?: string
) => {
const body: any = {
projectId,
userId,
organization,
};
if (projectName) body.projectName = projectName;
if (thumbnail) body.thumbnail = thumbnail;
try {
const response = await fetch(
`${url_Backend_dwinzo}/api/V1/Projects/${projectId}`,
{
method: "PATCH",
headers: {
Authorization: "Bearer <access_token>",
"Content-Type": "application/json",
token: localStorage.getItem("token") || "",
refresh_token: localStorage.getItem("refreshToken") || "",
},
body: JSON.stringify(body),
}
);
const newAccessToken = response.headers.get("x-access-token");
if (newAccessToken) {
//console.log("New token received:", newAccessToken);
localStorage.setItem("token", newAccessToken);
}
if (!response.ok) {
console.error("Failed to clearPanel in the zone");
}
const result = await response.json();
return result;
} catch (error) {
if (error instanceof Error) {
console.log(error.message);
} else {
console.log("An unknown error occurred");
}
}
};

View File

@@ -0,0 +1,34 @@
let url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}`;
export const updateProjectApi = async (projectId: string, thumbnail?: string, projectName?: string) => {
const body: any = { projectId };
if (projectName) body.projectName = projectName;
if (thumbnail) body.thumbnail = thumbnail;
try {
const response = await fetch(`${url_Backend_dwinzo}/api/V1/Projects/${projectId}`, {
method: "PATCH",
headers: {
Authorization: "Bearer <access_token>",
"Content-Type": "application/json",
token: localStorage.getItem("token") || "",
refresh_token: localStorage.getItem("refreshToken") || "",
},
body: JSON.stringify(body),
});
const newAccessToken = response.headers.get("x-access-token");
if (newAccessToken) {
localStorage.setItem("token", newAccessToken);
}
if (!response.ok) {
console.error("Failed to update project");
}
const result = await response.json();
return result;
} catch {
console.log("Failed to update project");
}
};

View File

@@ -1,36 +0,0 @@
let url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}`;
export const viewProject = async (
organization: string,
projectId: string,
userId: string
) => {
try {
const response = await fetch(
`${url_Backend_dwinzo}/api/V1/Project/${projectId}`,
{
method: "GET",
headers: {
Authorization: "Bearer <access_token>",
"Content-Type": "application/json",
token: localStorage.getItem("token") || "",
refresh_token: localStorage.getItem("refreshToken") || "",
},
}
);
const newAccessToken = response.headers.get("x-access-token");
if (newAccessToken) {
//console.log("New token received:", newAccessToken);
localStorage.setItem("token", newAccessToken);
}
if (!response.ok) {
console.error("Failed to fetch");
}
return await response.json();
} catch (error: any) {
console.error("Failed to get asset image:", error);
console.log(error.message);
}
};

View File

@@ -0,0 +1,27 @@
let url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}`;
export const viewProjectApi = async (projectId: string) => {
try {
const response = await fetch(`${url_Backend_dwinzo}/api/V1/Project/${projectId}`, {
method: "GET",
headers: {
Authorization: "Bearer <access_token>",
"Content-Type": "application/json",
token: localStorage.getItem("token") || "",
refresh_token: localStorage.getItem("refreshToken") || "",
},
});
const newAccessToken = response.headers.get("x-access-token");
if (newAccessToken) {
localStorage.setItem("token", newAccessToken);
}
if (!response.ok) {
console.error("Failed to view project");
}
return await response.json();
} catch {
console.error("Failed to view project");
}
};