mirror of
https://github.com/nowcommunity/nowdatabase.git
synced 2026-10-12 19:13:52 +03:00
Add creating synonym to species
This commit is contained in:
@@ -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>
|
||||||
</>
|
</>
|
||||||
|
|||||||
Reference in New Issue
Block a user