Add creating synonym to species

This commit is contained in:
ShootingStar91
2024-08-23 09:56:23 +03:00
parent cad7701bff
commit 2001131358
2 changed files with 29 additions and 24 deletions
+3 -1
View File
@@ -53,13 +53,13 @@ export const logAllUpdates = async (
) => { ) => {
const updateEntries: UpdateEntry[] = [] const updateEntries: UpdateEntry[] = []
const { writeList } = writeContext const { writeList } = writeContext
const getIdColumn = (targetTable: AllowedTables) => { const getIdColumn = (targetTable: AllowedTables) => {
if (targetTable === 'com_species') return 'species_id' if (targetTable === 'com_species') return 'species_id'
if (targetTable === 'now_mus') return 'museum' if (targetTable === 'now_mus') return 'museum'
if (targetTable === 'now_ls') return tableName === 'now_loc' ? 'species_id' : 'lid' if (targetTable === 'now_ls') return tableName === 'now_loc' ? 'species_id' : 'lid'
if (targetTable === 'now_loc') return 'lid' if (targetTable === 'now_loc') return 'lid'
if (targetTable === 'now_ss') return 'sed_struct' if (targetTable === 'now_ss') return 'sed_struct'
if (targetTable === 'com_taxa_synonym') return 'synonym_id'
throw new Error(`No id column found for ${targetTable}`) throw new Error(`No id column found for ${targetTable}`)
} }
@@ -315,6 +315,7 @@ export type AllowedTables =
| 'com_mlist' | 'com_mlist'
| 'com_species' | 'com_species'
| 'now_ss' | 'now_ss'
| 'com_taxa_synonym'
| 'now_time_unit' | 'now_time_unit'
| 'now_tu_bound' | 'now_tu_bound'
| 'ref_ref' | 'ref_ref'
@@ -336,6 +337,7 @@ export const ids: Record<AllowedTables, string[]> = {
now_time_unit: ['tu_name'], now_time_unit: ['tu_name'],
now_tu_bound: ['bid'], now_tu_bound: ['bid'],
ref_ref: ['rid'], ref_ref: ['rid'],
com_taxa_synonym: ['synonym_id'],
} }
export const supportedTables = Object.keys(ids) export const supportedTables = Object.keys(ids)
@@ -1,18 +1,12 @@
import { Editable, SpeciesDetailsType, SpeciesSynonym } from '@/backendTypes' import { Editable, EditDataType, Species, SpeciesDetailsType, SpeciesSynonym } from '@/backendTypes'
import { useDetailContext } from '@/components/DetailView/Context/DetailContext' import { useDetailContext } from '@/components/DetailView/Context/DetailContext'
import { Grouped } from '@/components/DetailView/common/tabLayoutHelpers' import { Grouped } from '@/components/DetailView/common/tabLayoutHelpers'
import { Box, TextField } from '@mui/material'
import { MRT_ColumnDef } from 'material-react-table' import { MRT_ColumnDef } from 'material-react-table'
import { useForm } from 'react-hook-form'
import { EditableTable } from '@/components/DetailView/common/EditableTable' import { EditableTable } from '@/components/DetailView/common/EditableTable'
import { EditingModal } from '@/components/DetailView/common/EditingModal' import { EditingForm, EditingFormField } from '@/components/DetailView/common/EditingForm'
export const SynonymTab = () => { export const SynonymTab = () => {
const { mode } = useDetailContext<SpeciesDetailsType>() const { mode, setEditData, editData } = useDetailContext<SpeciesDetailsType>()
const {
register,
formState: { errors },
} = useForm()
const columns: MRT_ColumnDef<SpeciesSynonym>[] = [ const columns: MRT_ColumnDef<SpeciesSynonym>[] = [
{ {
@@ -29,26 +23,35 @@ export const SynonymTab = () => {
}, },
] ]
// eslint-disable-next-line @typescript-eslint/require-await const formFields: EditingFormField[] = [
const onSave = async () => { { name: 'syn_genus_name', label: 'Genus', required: true },
// TODO: Saving logic here (add Synonym to editData) { name: 'syn_species_name', label: 'Species', required: true },
return Object.keys(errors).length === 0 { name: 'syn_comment', label: 'Comment' },
} ]
const editingModal = ( const editingForm = (
<EditingModal buttonText="Add new Synonym" onSave={onSave}> <EditingForm<Species, SpeciesDetailsType>
<Box sx={{ display: 'flex', flexDirection: 'column', gap: '1em' }}> buttonText="Add new Species"
<TextField {...register('syn_genus_name', { required: true })} label="Genus" required /> formFields={formFields}
<TextField {...register('syn_species_name', { required: true })} label="Species" required /> editAction={(newSynonym: EditDataType<SpeciesSynonym>) => {
<TextField {...register('syn_comment')} label="Comment" /> setEditData({
</Box> ...editData,
</EditingModal> com_taxa_synonym: [
...editData.com_taxa_synonym,
{
...newSynonym,
rowState: 'new',
},
],
})
}}
/>
) )
return ( return (
<> <>
<Grouped title="Synonyms"> <Grouped title="Synonyms">
{!mode.read && editingModal} {!mode.read && editingForm}
<EditableTable<Editable<SpeciesSynonym>, SpeciesDetailsType> columns={columns} field="com_taxa_synonym" /> <EditableTable<Editable<SpeciesSynonym>, SpeciesDetailsType> columns={columns} field="com_taxa_synonym" />
</Grouped> </Grouped>
</> </>