Hi {{email}},
++ We received a request to reset your password. Please click the button + below to reset it: +
+ Reset Password +If you didn’t request this, please ignore this email.
+Thank you,
The {{project_name}} Team
diff --git a/src/backend/app/config.py b/src/backend/app/config.py index d1b5dc90..6144ceb9 100644 --- a/src/backend/app/config.py +++ b/src/backend/app/config.py @@ -90,7 +90,7 @@ def assemble_db_connection(cls, v: Optional[str], info: ValidationInfo) -> Any: ALGORITHM: str = "HS256" ACCESS_TOKEN_EXPIRE_MINUTES: int = 60 * 60 * 24 * 1 # 1 day REFRESH_TOKEN_EXPIRE_MINUTES: int = 60 * 60 * 24 * 8 # 8 day - + RESET_PASSWORD_TOKEN_EXPIRE_MINUTES: int = 5 GOOGLE_CLIENT_ID: str GOOGLE_CLIENT_SECRET: str GOOGLE_LOGIN_REDIRECT_URI: str = "http://localhost:8000" diff --git a/src/backend/app/email_templates/password/password_reset.html b/src/backend/app/email_templates/password/password_reset.html new file mode 100644 index 00000000..8adba82f --- /dev/null +++ b/src/backend/app/email_templates/password/password_reset.html @@ -0,0 +1,87 @@ + + +
+ + + + + +Hi {{email}},
++ We received a request to reset your password. Please click the button + below to reset it: +
+ Reset Password +If you didn’t request this, please ignore this email.
+Thank you,
The {{project_name}} Team
- {popupData?.coordinates?.lat}, {popupData?.coordinates?.lng}{' '} + {popupData?.coordinates?.lat?.toFixed(8)}, {popupData?.coordinates?.lng?.toFixed(8)}{' '}
Angle: {popupData?.angle} degree
+Speed: {popupData?.speed} m/s
+ {popupData?.elevation && +Elevation (Sea Level): {popupData?.elevation} meter
+ } +Take Photo: {popupData?.take_photo ? "True" : "False"}
Gimble angle: {popupData?.gimbal_angle} degree
diff --git a/src/frontend/src/components/IndividualProject/MapSection/index.tsx b/src/frontend/src/components/IndividualProject/MapSection/index.tsx index fa9b4893..f6e4bcdb 100644 --- a/src/frontend/src/components/IndividualProject/MapSection/index.tsx +++ b/src/frontend/src/components/IndividualProject/MapSection/index.tsx @@ -114,7 +114,7 @@ const MapSection = () => { }, ); const bbox = getBbox(tasksCollectiveGeojson as FeatureCollection); - map?.fitBounds(bbox as LngLatBoundsLike, { padding: 25 }); + map?.fitBounds(bbox as LngLatBoundsLike, { padding: 25, duration: 500 }); }, [map, tasksData]); const getPopupUI = useCallback( @@ -248,7 +248,7 @@ const MapSection = () => { paint: { 'fill-color': '#ffffff', 'fill-outline-color': '#484848', - 'fill-opacity': 0.8, + 'fill-opacity': 0.5, }, } } diff --git a/src/frontend/src/components/Projects/MapSection/index.tsx b/src/frontend/src/components/Projects/MapSection/index.tsx index 8ac709dd..81c2b14d 100644 --- a/src/frontend/src/components/Projects/MapSection/index.tsx +++ b/src/frontend/src/components/Projects/MapSection/index.tsx @@ -59,7 +59,7 @@ const ProjectsMapSection = () => { useEffect(() => { if (!projectsList || !projectsList?.features?.length) return; const bbox = getBbox(projectsList as FeatureCollection); - map?.fitBounds(bbox as LngLatBoundsLike, { padding: 100 }); + map?.fitBounds(bbox as LngLatBoundsLike, { padding: 100, duration: 500 }); }, [projectsList, map]); const getPopupUI = useCallback(() => { diff --git a/src/frontend/src/components/Projects/ProjectCard/MapSection/index.tsx b/src/frontend/src/components/Projects/ProjectCard/MapSection/index.tsx index 6fafcc23..3f94d6c4 100644 --- a/src/frontend/src/components/Projects/ProjectCard/MapSection/index.tsx +++ b/src/frontend/src/components/Projects/ProjectCard/MapSection/index.tsx @@ -29,7 +29,7 @@ const MapSection = ({ useEffect(() => { if (!geojson) return; const bbox = getBbox(geojson as FeatureCollection); - map?.fitBounds(bbox as LngLatBoundsLike, { padding: 30 }); + map?.fitBounds(bbox as LngLatBoundsLike, { padding: 30, duration: 500 }); }, [geojson, map]); return ( diff --git a/src/frontend/src/services/tasks.ts b/src/frontend/src/services/tasks.ts index af789959..daa54213 100644 --- a/src/frontend/src/services/tasks.ts +++ b/src/frontend/src/services/tasks.ts @@ -1,7 +1,7 @@ import { api, authenticated } from '.'; export const getTaskWaypoint = (projectId: string, taskId: string) => - authenticated(api).get( + authenticated(api).post( `/waypoint/task/${taskId}/?project_id=${projectId}&download=false`, ); diff --git a/src/frontend/src/views/IndividualProject/index.tsx b/src/frontend/src/views/IndividualProject/index.tsx index 88ecc5d4..e27ceed6 100644 --- a/src/frontend/src/views/IndividualProject/index.tsx +++ b/src/frontend/src/views/IndividualProject/index.tsx @@ -107,7 +107,7 @@ const IndividualProject = () => { )}