import { Service } from '@/types/service'; import React, { FormEvent, useState } from 'react'; import { useForm } from '@inertiajs/react'; import { useQuery } from '@tanstack/react-query'; import axios from 'axios'; import { Editor, useMonaco } from '@monaco-editor/react'; import { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger } from '@/components/ui/sheet'; import { DropdownMenuItem } from '@/components/ui/dropdown-menu'; import { Form } from '@/components/ui/form'; import { Skeleton } from '@/components/ui/skeleton'; import { Button } from '@/components/ui/button'; import { LoaderCircleIcon } from 'lucide-react'; export default function PHPIni({ service, type }: { service: Service; type: 'fpm' | 'cli' }) { const [open, setOpen] = useState(false); const form = useForm<{ ini: string; type: 'fpm' | 'cli'; version: string; }>({ ini: '', type: type, version: service.version, }); const submit = (e: FormEvent) => { e.preventDefault(); form.patch(route('php.ini.update', { server: service.server_id, service: service.id }), { onSuccess: () => { setOpen(false); }, }); }; const query = useQuery({ queryKey: ['php.ini', service.server_id, service.id, type], queryFn: async () => { const response = await axios.get( route('php.ini', { server: service.server_id, service: service.id, version: service.version, type: type, }), ); if (response.data?.ini) { form.setData('ini', response.data.ini); } return response.data; }, retry: false, enabled: open, }); const monaco = useMonaco(); monaco?.languages.register({ id: 'ini' }); monaco?.languages.setMonarchTokensProvider('ini', { tokenizer: { root: [ [/^\[.*]$/, 'keyword'], [/^[^=]+(?==)/, 'attribute.name'], [/=.+$/, 'attribute.value'], ], }, }); return ( e.preventDefault()}>Edit {type} ini Edit {type} ini You can edit the {type} ini file for this service. Make sure to save your changes.
{query.isSuccess ? ( form.setData('ini', value ?? '')} options={{ fontSize: 15, }} /> ) : ( )}
); }