FrostByte/client-solid/src/Components/Buttons/Engegament.tsx

52 lines
1.5 KiB
TypeScript
Raw Normal View History

2024-03-23 00:10:42 +01:00
import { JSXElement, createSignal, onMount, useContext } from "solid-js";
import { LoginContext } from "../../Context/GlobalState";
2024-03-23 00:10:42 +01:00
import { EngagementIcon } from "../../Util/Icons";
import { engage, getEngagementCount } from "../../Util/api";
2024-03-23 00:10:42 +01:00
export default function EngagementButton(props: {
postId: string;
}): JSXElement {
const [engagementCount, setEngagementCount] = createSignal(0);
const login_ctx = useContext(LoginContext)!;
onMount((): void => {
2024-03-23 00:10:42 +01:00
void setUp();
});
2024-03-23 00:10:42 +01:00
const setUp = async (): Promise<void> => {
const r = await getEngagementCount(props.postId);
setEngagementCount(r);
};
// Function to handle engagement
2024-03-23 00:10:42 +01:00
const handleEngagement = async (): Promise<void> => {
try {
2024-03-23 00:10:42 +01:00
const response = await engage(props.postId, login_ctx.token());
if (response.ok) {
// Update engagement count if the request is successful
setEngagementCount(await response.json());
} else {
console.error("Failed to engage:", response.statusText);
}
} catch (error) {
console.error("Error engaging:", error);
}
};
return (
<div class="flex p-1">
<button
class="rounded-base btn btn-xs hover:border-primary"
aria-label="Show sign of engagement"
onClick={handleEngagement} // Call handleEngagement function on button click
>
<EngagementIcon />
</button>
<span class="text-1xl countdown px-1.5 pt-1.5 text-center">
2024-03-23 00:10:42 +01:00
<p style={{ "--value": engagementCount() }} />
</span>
</div>
);
}