Files
cameleer-server/ui/src/api/queries/admin/environments.ts
hsiegeln de4ca10fa5
Some checks failed
CI / cleanup-branch (push) Has been skipped
CI / build (push) Successful in 1m20s
CI / docker (push) Successful in 1m8s
CI / deploy-feature (push) Has been skipped
CI / deploy (push) Failing after 2m16s
feat: move Apps from admin to main tab bar with container config
- Apps tab visible to OPERATOR+ (hidden for VIEWER), scoped by
  sidebar app selection and environment filter
- List view: DataTable with name, environment, updated, created columns
- Detail view: deployments across all envs, version upload with
  per-env deploy target, container config form (resources, ports,
  custom env vars) with explicit Save
- Memory reserve field disabled for non-production environments
  with info hint
- Admin sidebar sorted alphabetically, Applications entry removed
- Old admin AppsPage deleted

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 16:23:30 +02:00

65 lines
1.7 KiB
TypeScript

import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
import { adminFetch } from './admin-api';
export interface Environment {
id: string;
slug: string;
displayName: string;
production: boolean;
enabled: boolean;
defaultContainerConfig: Record<string, unknown>;
createdAt: string;
}
export interface CreateEnvironmentRequest {
slug: string;
displayName: string;
production: boolean;
}
export interface UpdateEnvironmentRequest {
displayName: string;
production: boolean;
enabled: boolean;
}
export function useEnvironments() {
return useQuery({
queryKey: ['admin', 'environments'],
queryFn: () => adminFetch<Environment[]>('/environments'),
});
}
export function useCreateEnvironment() {
const qc = useQueryClient();
return useMutation({
mutationFn: (req: CreateEnvironmentRequest) =>
adminFetch<Environment>('/environments', {
method: 'POST',
body: JSON.stringify(req),
}),
onSuccess: () => qc.invalidateQueries({ queryKey: ['admin', 'environments'] }),
});
}
export function useUpdateEnvironment() {
const qc = useQueryClient();
return useMutation({
mutationFn: ({ id, ...req }: UpdateEnvironmentRequest & { id: string }) =>
adminFetch<Environment>(`/environments/${id}`, {
method: 'PUT',
body: JSON.stringify(req),
}),
onSuccess: () => qc.invalidateQueries({ queryKey: ['admin', 'environments'] }),
});
}
export function useDeleteEnvironment() {
const qc = useQueryClient();
return useMutation({
mutationFn: (id: string) =>
adminFetch<void>(`/environments/${id}`, { method: 'DELETE' }),
onSuccess: () => qc.invalidateQueries({ queryKey: ['admin', 'environments'] }),
});
}