
* Add vital integration * Tidy up client_user_id creation * Rename vital app to vitalother to follow name rules * Added env var * App vital reschedule * Fix on app structure and api calls * Implemented user identification from webhook * WIP fix api call and read me * Save vital settings via api * Now saving userVitalSettings and trigger reschedule on selected param * Added translations * Fix type for vitalSettings * Using api to get env vars required for url, fix display of vital settings * Fix hours placeholder, translation not working * Renames vital app * Update seed-app-store.ts * Update package.json * Update yarn.lock * Refactored env variables * Update README.md * Migrates to api_keys * Extracts AppConfiguration * vitalClient fixes * Update index.ts * Update metadata.ts * Update index.ts * Update metadata.ts * Added namespace vital for translations Co-authored-by: Maitham <maithamdib@gmail.com> Co-authored-by: zomars <zomars@me.com> Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
39 lines
994 B
TypeScript
39 lines
994 B
TypeScript
import { useState } from "react";
|
|
|
|
import { InstallAppButtonProps } from "../../types";
|
|
|
|
export default function InstallAppButton(props: InstallAppButtonProps) {
|
|
const getLinkToken = async () => {
|
|
const res = await fetch("/api/integrations/vital/token", {
|
|
method: "POST",
|
|
body: JSON.stringify({}),
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
},
|
|
});
|
|
if (!res.ok) {
|
|
throw new Error("Failed to get link token");
|
|
}
|
|
return await res.json();
|
|
};
|
|
const [loading, setLoading] = useState(false);
|
|
return (
|
|
<>
|
|
{props.render({
|
|
onClick() {
|
|
setLoading(true);
|
|
getLinkToken()
|
|
.then((data) => {
|
|
setLoading(false);
|
|
window.open(`${data.url}&token=${data.token}`, "_self");
|
|
})
|
|
.catch((error) => {
|
|
setLoading(false);
|
|
console.error(error);
|
|
});
|
|
},
|
|
loading: loading,
|
|
})}
|
|
</>
|
|
);
|
|
}
|