import { ProjectRef, RequireAtLeastOne } from "@vertesia/common";
import { SelectBox, useFetch } from "@vertesia/ui/core";
import { LastSelectedAccountId_KEY, LastSelectedProjectId_KEY, useUserSession } from "@vertesia/ui/session";
import { useState } from "react";
interface AppProjectSelectorProps {
app: RequireAtLeastOne<{ id?: string, name?: string }, 'id' | 'name'>;
onChange?: (value: ProjectRef) => void | boolean;
placeholder?: string;
}
export function AppProjectSelector({ app, onChange, placeholder }: AppProjectSelectorProps) {
const { client, project } = useUserSession();
const { data: projects, error } = useFetch(() => {
return client.apps.getAppInstallationProjects(app);
}, [app.id, app.name])
const _onChange = (project: ProjectRef) => {
if (onChange) {
if (!onChange(project)) {
// if onChange returns true then the defualt on change is called
return;
}
}
// default on change
localStorage.setItem(LastSelectedAccountId_KEY, project.account);
localStorage.setItem(LastSelectedProjectId_KEY + '-' + project.account, project.id);
window.location.reload();
}
if (error) {
return Error: failed to fetch projects: {error.message}
}
return
}
interface SelectProjectProps {
initialValue?: string
projects: ProjectRef[]
onChange: (value: ProjectRef) => void
placeholder?: string;
}
function SelectProject({ initialValue, projects, onChange, placeholder = "Select Project" }: Readonly) {
const [value, setValue] = useState();
const _onChange = (value: ProjectRef) => {
setValue(value)
onChange(value)
}
let actualValue = !value && initialValue ? projects.find(p => p.id === initialValue) : value;
return (
option.name}
placeholder={placeholder}
onChange={_onChange} />
)
}