Compare commits
3 Commits
965fce1587
...
92d17167b1
| Author | SHA1 | Date | |
|---|---|---|---|
| 92d17167b1 | |||
| 8ec62827d5 | |||
| 48f314eac4 |
@ -1,24 +1,48 @@
|
||||
import { useState } from "react";
|
||||
|
||||
|
||||
const PreviewDocument = ({ imageUrl }) => {
|
||||
const [loading, setLoading] = useState(true);
|
||||
const [rotation, setRotation] = useState(0);
|
||||
const [scale, setScale] = useState(1);
|
||||
|
||||
const zoomIn = () => setScale((prev) => Math.min(prev + 0.2, 3));
|
||||
const zoomOut = () => setScale((prev) => Math.max(prev - 0.2, 0.4));
|
||||
const resetAll = () => {
|
||||
setRotation(0);
|
||||
setScale(1);
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
<div className="d-flex justify-content-start">
|
||||
<div className="d-flex justify-content-start gap-3 mb-2">
|
||||
<i
|
||||
className="bx bx-rotate-right cursor-pointer"
|
||||
className="bx bx-rotate-right cursor-pointer fs-4"
|
||||
title="Rotate"
|
||||
onClick={() => setRotation((prev) => prev + 90)}
|
||||
></i>
|
||||
|
||||
<i
|
||||
className="bx bx-zoom-in cursor-pointer fs-4"
|
||||
title="Zoom In"
|
||||
onClick={zoomIn}
|
||||
></i>
|
||||
|
||||
<i
|
||||
className="bx bx-zoom-out cursor-pointer fs-4"
|
||||
title="Zoom Out"
|
||||
onClick={zoomOut}
|
||||
></i>
|
||||
</div>
|
||||
|
||||
<div
|
||||
className="position-relative d-flex flex-column justify-content-center align-items-center"
|
||||
className="position-relative d-flex flex-column justify-content-center align-items-center overflow-hidden"
|
||||
style={{ minHeight: "80vh" }}
|
||||
>
|
||||
|
||||
{loading && (
|
||||
<div className="text-secondary text-center mb-2">Loading...</div>
|
||||
<div className="text-secondary text-center mb-2">
|
||||
Loading...
|
||||
</div>
|
||||
)}
|
||||
|
||||
<div className="mb-3 d-flex justify-content-center align-items-center">
|
||||
@ -30,18 +54,18 @@ const PreviewDocument = ({ imageUrl }) => {
|
||||
maxHeight: "80vh",
|
||||
objectFit: "contain",
|
||||
display: loading ? "none" : "block",
|
||||
transform: `rotate(${rotation}deg)`,
|
||||
transform: `rotate(${rotation}deg) scale(${scale})`,
|
||||
transition: "transform 0.3s ease",
|
||||
cursor: "grab",
|
||||
}}
|
||||
onLoad={() => setLoading(false)}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className="position-absolute bottom-0 start-0 justify-content-center gap-2">
|
||||
<div className="position-absolute bottom-0 start-0 m-2">
|
||||
<button
|
||||
className="btn btn-outline-secondary"
|
||||
onClick={() => setRotation(0)}
|
||||
title="Reset Rotation"
|
||||
onClick={resetAll}
|
||||
>
|
||||
<i className="bx bx-reset"></i> Reset
|
||||
</button>
|
||||
@ -51,4 +75,6 @@ const PreviewDocument = ({ imageUrl }) => {
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
|
||||
export default PreviewDocument;
|
||||
|
||||
@ -66,19 +66,10 @@ const Jobs = () => {
|
||||
<div className="col-12 col-md-6 text-start">
|
||||
<button
|
||||
type="button"
|
||||
className={`btn btn-sm ${showArchive ? "btn-primary" : "btn-outline-secondary"}`}
|
||||
className={`btn btn-sm ${showArchive ? "btn-secondary" : "btn-outline-secondary"}`}
|
||||
onClick={() => setShowArchive(!showArchive)}
|
||||
style={{ fontSize: "13px" }}
|
||||
>
|
||||
{showArchive ? (
|
||||
<>
|
||||
<i className="bx bx-list-ul me-1 mt-1"></i> Show Active
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<i className="bx bx-archive me-1 mt-1"></i> Show Archived
|
||||
</>
|
||||
)}
|
||||
<i className="bx bx-archive bx-sm me-1 mt-1"></i> Archived
|
||||
</button>
|
||||
</div>
|
||||
|
||||
|
||||
@ -149,11 +149,6 @@ export const useAllocationServiceProjectTeam = (onSuccessCallback) => {
|
||||
|
||||
//#endregion
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//#region Service Jobs
|
||||
|
||||
export const useServiceProjectJobs = (
|
||||
@ -164,7 +159,14 @@ export const useServiceProjectJobs = (
|
||||
isArchive
|
||||
) => {
|
||||
return useQuery({
|
||||
queryKey: ["serviceProjectJobs", pageSize, pageNumber, isActive, project, isArchive],
|
||||
queryKey: [
|
||||
"serviceProjectJobs",
|
||||
pageSize,
|
||||
pageNumber,
|
||||
isActive,
|
||||
project,
|
||||
isArchive,
|
||||
],
|
||||
queryFn: async () => {
|
||||
const resp = await ServiceProjectRepository.GetJobList(
|
||||
pageSize,
|
||||
@ -285,7 +287,6 @@ export const useUpdateServiceProjectJob = (onSuccessCallback) => {
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
onError: (error) => {
|
||||
showToast(
|
||||
error?.response?.data?.message ||
|
||||
@ -297,15 +298,8 @@ export const useUpdateServiceProjectJob = (onSuccessCallback) => {
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
//#endregion
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//#region Branch
|
||||
export const useBranches = (
|
||||
projectId,
|
||||
@ -344,8 +338,8 @@ export const useBranchTypes = () => {
|
||||
const resp = await ServiceProjectRepository.GetBranchTypeList();
|
||||
return resp.data;
|
||||
},
|
||||
})
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
export const useBranchDetails = (id) => {
|
||||
return useQuery({
|
||||
@ -354,9 +348,9 @@ export const useBranchDetails = (id) => {
|
||||
const resp = await ServiceProjectRepository.GetBranchDetail(id);
|
||||
return resp.data;
|
||||
},
|
||||
enabled: !!id
|
||||
})
|
||||
}
|
||||
enabled: !!id,
|
||||
});
|
||||
};
|
||||
|
||||
export const useCreateBranch = (onSuccessCallBack) => {
|
||||
const queryClient = useQueryClient();
|
||||
@ -402,7 +396,6 @@ export const useUpdateBranch = (onSuccessCallBack) => {
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
export const useDeleteBranch = () => {
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
@ -412,7 +405,10 @@ export const useDeleteBranch = () => {
|
||||
|
||||
onSuccess: (_, variable) => {
|
||||
queryClient.invalidateQueries({ queryKey: ["branches"] });
|
||||
showToast(`Branch ${variable.isActive ? "restored" : "deleted"} successfully`, "success");
|
||||
showToast(
|
||||
`Branch ${variable.isActive ? "restored" : "deleted"} successfully`,
|
||||
"success"
|
||||
);
|
||||
},
|
||||
|
||||
onError: (error) => {
|
||||
|
||||
@ -150,6 +150,9 @@ export function startSignalR(loggedUser) {
|
||||
queryClient.invalidateQueries(["serviceProjects"]);
|
||||
queryClient.invalidateQueries(["serviceProject"]);
|
||||
}
|
||||
if (keyword === "Project_Branch") {
|
||||
queryClient.invalidateQueries(["branches"]);
|
||||
}
|
||||
|
||||
if (keyword === "Service_Project_Allocation") {
|
||||
queryClient.invalidateQueries(["serviceProjectTeam"]);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user