/** @jsx jsx */ import update from 'immutability-helper'; import { jsx } from '@emotion/react'; import { Button, TextArea, ControlGroup } from '@blueprintjs/core'; import type { Citation, ItemClassConfiguration, ItemListView } from '@riboseinc/paneron-registry-kit/types'; import { PropertyDetailView } from '@riboseinc/paneron-registry-kit/views/util'; import { type CommonGRItemData, DEFAULTS as SHARED_DEFAULTS, EditView as CommonEditView, ListItemView as CommonListItemView, COMMON_PROPERTIES, ItemList, RelatedItem, InformationSourceEdit, getInformationSourceStub, } from './common'; export interface CoordinateOpMethod extends CommonGRItemData { parameters: Readonly sourceCRSDimensionCount?: number targetCRSDimensionCount?: number /** Mutually exclusive with formulaCitation. */ formula?: string | null /** Mutually exclusive with formula. */ formulaCitation?: Citation } export const DEFAULTS: CoordinateOpMethod = { ...SHARED_DEFAULTS, parameters: [], } as const; export const coordinateOpMethod: ItemClassConfiguration = { ...COMMON_PROPERTIES, meta: { title: "Coordinate Operation Method", description: "Coordinate Operation Method", id: 'coordinate-op-method', alternativeNames: [] as const, }, defaults: { ...SHARED_DEFAULTS, ...DEFAULTS, }, views: { listItemView: CommonListItemView as ItemListView, editView: ({ itemRef, itemData, onChange }) => ( { if (!onChange) { return; } onChange({ ...itemData, ...newData }); } : undefined}> onChange!(update(itemData, { parameters: spec })) : undefined} placeholderItem={''} itemRenderer={(param, _idx, handleChange, deleteButton) => handleChange!({ $set: '' }) : undefined} onSet={handleChange ? (spec) => handleChange!(spec) : undefined} /> {deleteButton} } />