import styled from '@emotion/styled'; import { useState } from 'react'; import { useNavigate, useParams } from 'react-router-dom'; import { H2Title, IconTrash } from 'twenty-ui'; import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems'; import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { useDeleteOneRecord } from '@/object-record/hooks/useDeleteOneRecord'; import { useFindOneRecord } from '@/object-record/hooks/useFindOneRecord'; import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; import { SaveAndCancelButtons } from '@/settings/components/SaveAndCancelButtons/SaveAndCancelButtons'; import { SettingsPageContainer } from '@/settings/components/SettingsPageContainer'; import { Webhook } from '@/settings/developers/types/webhook/Webhook'; import { getSettingsPagePath } from '@/settings/utils/getSettingsPagePath'; import { SettingsPath } from '@/types/SettingsPath'; import { Button } from '@/ui/input/button/components/Button'; import { Select } from '@/ui/input/components/Select'; import { TextArea } from '@/ui/input/components/TextArea'; import { TextInput } from '@/ui/input/components/TextInput'; import { ConfirmationModal } from '@/ui/layout/modal/components/ConfirmationModal'; import { SubMenuTopBarContainer } from '@/ui/layout/page/SubMenuTopBarContainer'; import { Section } from '@/ui/layout/section/components/Section'; const StyledFilterRow = styled.div` display: flex; flex-direction: row; gap: ${({ theme }) => theme.spacing(2)}; `; export const SettingsDevelopersWebhooksDetail = () => { const { objectMetadataItems } = useObjectMetadataItems(); const navigate = useNavigate(); const { webhookId = '' } = useParams(); const [isDeleteWebhookModalOpen, setIsDeleteWebhookModalOpen] = useState(false); const [description, setDescription] = useState(''); const [operationObjectSingularName, setOperationObjectSingularName] = useState(''); const [operationAction, setOperationAction] = useState(''); const [isDirty, setIsDirty] = useState(false); const { record: webhookData } = useFindOneRecord({ objectNameSingular: CoreObjectNameSingular.Webhook, objectRecordId: webhookId, onCompleted: (data) => { setDescription(data?.description ?? ''); setOperationObjectSingularName(data?.operation.split('.')[0] ?? ''); setOperationAction(data?.operation.split('.')[1] ?? ''); setIsDirty(false); }, }); const { deleteOneRecord: deleteOneWebhook } = useDeleteOneRecord({ objectNameSingular: CoreObjectNameSingular.Webhook, }); const developerPath = getSettingsPagePath(SettingsPath.Developers); const deleteWebhook = () => { deleteOneWebhook(webhookId); navigate(developerPath); }; const fieldTypeOptions = [ { value: '*', label: 'All Objects' }, ...objectMetadataItems.map((item) => ({ value: item.nameSingular, label: item.labelSingular, })), ]; const { updateOneRecord } = useUpdateOneRecord({ objectNameSingular: CoreObjectNameSingular.Webhook, }); const handleSave = async () => { setIsDirty(false); await updateOneRecord({ idToUpdate: webhookId, updateOneRecordInput: { operation: `${operationObjectSingularName}.${operationAction}`, description: description, }, }); navigate(developerPath); }; if (!webhookData?.targetUrl) { return <>; } return ( { navigate(developerPath); }} onSave={handleSave} /> } >