import React, { Fragment, useState } from 'react'; import NotificationAdapterMutator from './components/notificationAdapter/NotificationAdapterMutator'; import NotificationAdapterTable from '../../../components/table/NotificationAdapterTable'; import { Icon, Form, Button, Label } from 'semantic-ui-react'; import ProviderTable from '../../../components/table/ProviderTable'; import ProviderMutator from './components/provider/ProviderMutator'; import ToastContext from '../../../components/toasts/ToastContext'; import Headline from '../../../components/headline/Headline'; import { useDispatch, useSelector } from 'react-redux'; import { xhrPost } from '../../../services/xhr'; import { useHistory } from 'react-router-dom'; import { useParams } from 'react-router'; import './JobMutation.less'; import Switch from 'react-switch'; import { SegmentPart } from '../../../components/segment/SegmentPart'; export default function JobMutator() { const jobs = useSelector((state) => state.jobs.jobs); const params = useParams(); const jobToBeEdit = params.jobId == null ? null : jobs.find((job) => job.id === params.jobId); const defaultBlacklist = jobToBeEdit?.blacklist || []; const defaultName = jobToBeEdit?.name || null; const defaultProviderData = jobToBeEdit?.provider || []; const defaultNotificationAdapter = jobToBeEdit?.notificationAdapter || []; const defaultEnabled = jobToBeEdit?.enabled ?? true; const [providerCreationVisible, setProviderCreationVisibility] = useState(false); const [notificationCreationVisible, setNotificationCreationVisibility] = useState(false); const [editNotificationAdapter, setEditNotificationAdapter] = useState(null); const [providerData, setProviderData] = useState(defaultProviderData); const [name, setName] = useState(defaultName); const [blacklist, setBlacklist] = useState(defaultBlacklist); const [notificationAdapterData, setNotificationAdapterData] = useState(defaultNotificationAdapter); const [enabled, setEnabled] = useState(defaultEnabled); const history = useHistory(); const dispatch = useDispatch(); const ctx = React.useContext(ToastContext); const isSavingEnabled = () => { return notificationAdapterData.length > 0 && providerData.length > 0 && name != null && name.length > 0; }; const mutateJob = async () => { try { await xhrPost('/api/jobs', { provider: providerData, notificationAdapter: notificationAdapterData, name, blacklist, enabled, jobId: jobToBeEdit?.id || null, }); await dispatch.jobs.getJobs(); ctx.showToast({ title: 'Success', message: 'Job successfully saved...', delay: 5000, backgroundColor: '#87eb8f', color: '#000', }); history.push('/jobs'); } catch (Exception) { console.error(Exception.json.message); ctx.showToast({ title: 'Error', message: Exception.json != null ? Exception.json.message : Exception, delay: 8000, backgroundColor: '#db2828', color: '#fff', }); } }; return ( setProviderCreationVisibility(visible)} onData={(data) => { setProviderData([...providerData, data]); }} /> {notificationCreationVisible && ( { setEditNotificationAdapter(null); setNotificationCreationVisibility(visible); }} selected={notificationAdapterData} editNotificationAdapter={ editNotificationAdapter == null ? null : notificationAdapterData.find((adapter) => adapter.id === editNotificationAdapter) } onData={(data) => { const oldData = [...notificationAdapterData].filter((o) => o.id !== data.id); setNotificationAdapterData([...oldData, data]); }} /> )}
setName(e.target.value)} /> setProviderCreationVisibility(true)}> Add new Provider { setProviderData(providerData.filter((provider) => provider.id !== providerId)); }} /> setNotificationCreationVisibility(true)} > Add new Notification Adapter { setEditNotificationAdapter(null); setNotificationAdapterData(notificationAdapterData.filter((adapter) => adapter.id !== adapterId)); }} onEdit={(adapterId) => { setEditNotificationAdapter(adapterId); setNotificationCreationVisibility(true); }} /> { if (e.target.value.indexOf(',') !== -1) { setBlacklist([...blacklist, e.target.value.replace(',', '')]); e.target.value = ''; } }} /> {blacklist.map((blacklistWord) => ( setEnabled(checked)} checked={enabled} />
); }