diff --git a/specifyweb/frontend/js_src/lib/components/FormSliders/RecordSelectorFromIds.tsx b/specifyweb/frontend/js_src/lib/components/FormSliders/RecordSelectorFromIds.tsx index 60cf8ce0efd..297fba22962 100644 --- a/specifyweb/frontend/js_src/lib/components/FormSliders/RecordSelectorFromIds.tsx +++ b/specifyweb/frontend/js_src/lib/components/FormSliders/RecordSelectorFromIds.tsx @@ -48,6 +48,7 @@ export function RecordSelectorFromIds({ onClone: handleClone, onDelete: handleDelete, onFetch: handleFetch, + hasSeveralResourceType, ...rest }: Omit, 'index' | 'records'> & { /* @@ -74,6 +75,7 @@ export function RecordSelectorFromIds({ readonly onFetch?: ( index: number ) => Promise | undefined>; + readonly hasSeveralResourceType?: boolean; }): JSX.Element | null { const [records, setRecords] = React.useState< RA | undefined> @@ -183,8 +185,6 @@ export function RecordSelectorFromIds({ const hasAttachments = tablesWithAttachments().includes(table); - const isNewRecordSet = isInRecordSet && title === undefined; - return ( <> ({ className={`flex-1 ${dialog === false ? '-ml-2' : '-ml-4'}`} /> )} - {hasAttachments && !isNewRecordSet ? ( + {hasAttachments && + !hasSeveralResourceType && + !resource?.isNew() ? ( ) : undefined} {specifyNetworkBadge} diff --git a/specifyweb/frontend/js_src/lib/components/FormSliders/RecordSet.tsx b/specifyweb/frontend/js_src/lib/components/FormSliders/RecordSet.tsx index c2164d47d06..31a9120031d 100644 --- a/specifyweb/frontend/js_src/lib/components/FormSliders/RecordSet.tsx +++ b/specifyweb/frontend/js_src/lib/components/FormSliders/RecordSet.tsx @@ -27,7 +27,7 @@ import { } from '../DataModel/resource'; import { serializeResource } from '../DataModel/serializers'; import { tables } from '../DataModel/tables'; -import type { RecordSet as RecordSetSchema } from '../DataModel/types'; +import type { RecordSet as RecordSetSchema, Tables } from '../DataModel/types'; import { softFail } from '../Errors/Crash'; import { recordSetView } from '../FormParse/webOnlyViews'; import { ResourceView } from '../Forms/ResourceView'; @@ -290,6 +290,12 @@ function RecordSet({ const [hasDuplicate, handleHasDuplicate, handleDismissDuplicate] = useBooleanState(); + const [hasSeveralResourceType, setHasSeveralResourceType] = + React.useState(false); + const [resourceType, setResourceType] = React.useState< + keyof Tables | undefined + >(undefined); + async function handleAdd( resources: RA>, wasNew: boolean @@ -297,6 +303,12 @@ function RecordSet({ if (!recordSet.isNew()) await addIdsToRecordSet(resources.map(({ id }) => id)); go(totalCount, resources[0].id, undefined, wasNew); + if (resourceType === undefined) { + setResourceType(resources[0].specifyTable.name); + } else if (resourceType !== resources.at(-1)?.specifyTable.name) { + setHasSeveralResourceType(true); + setResourceType(resources.at(-1)?.specifyTable.name); + } setIds((oldIds = []) => updateIds( oldIds, @@ -336,9 +348,12 @@ function RecordSet({ {...rest} defaultIndex={currentIndex} dialog={dialog} + hasSeveralResourceType={hasSeveralResourceType} headerButtons={ recordSet.isNew() ? ( - ids.length > 1 && !currentRecord.isNew() ? ( + ids.length > 1 && + !currentRecord.isNew() && + !hasSeveralResourceType ? (