/** @jsx jsx */ import update from 'immutability-helper'; import { jsx } from '@emotion/react'; import { ControlGroup } from '@blueprintjs/core'; import type { ItemClassConfiguration, ItemEditView, ItemListView } from '@riboseinc/paneron-registry-kit/types'; import { DEFAULTS as COMMON_DEFAULTS, COMMON_PROPERTIES, ListItemView as CommonListItemView, EditView as CommonEditView, type CommonGRItemData, ItemList, RelatedItem, } from './common'; export interface CoordinateSystemData extends CommonGRItemData { coordinateSystemAxes: Readonly } export const DEFAULTS: CoordinateSystemData = { ...COMMON_DEFAULTS, coordinateSystemAxes: [], } as const; const CoordinateSystemEditView: ItemEditView = function ({ itemData, onChange, ...props }) { return ( { onChange?.({ ...itemData, ...newData }); } : undefined }> onChange!(update(itemData, { coordinateSystemAxes: spec })) : undefined} placeholderItem="" itemRenderer={(axis, _idx, handleChange, deleteButton) => {deleteButton} } /> ); } export const cartesianCoordinateSystem: ItemClassConfiguration = { ...COMMON_PROPERTIES, meta: { title: "Cartesian Coordinate System", description: "Cartesian Coordinate System", id: 'coordinate-sys--cartesian', alternativeNames: [] as const, }, defaults: { ...DEFAULTS, }, views: { listItemView: CommonListItemView as ItemListView, editView: CoordinateSystemEditView, }, validatePayload: async () => true, sanitizePayload: async (t) => t, }; export const ellipsoidalCoordinateSystem: ItemClassConfiguration = { ...COMMON_PROPERTIES, meta: { title: "Ellipsoidal Coordinate System", description: "Ellipsoidal Coordinate System", id: 'coordinate-sys--ellipsoidal', alternativeNames: [] as const, }, defaults: { ...DEFAULTS, }, views: { listItemView: CommonListItemView as ItemListView, editView: CoordinateSystemEditView, }, validatePayload: async () => true, sanitizePayload: async (t) => t, } as const; export const verticalCoordinateSystem: ItemClassConfiguration = { ...COMMON_PROPERTIES, meta: { title: "Vertical Coordinate System", description: "Vertical Coordinate System", id: 'coordinate-sys--vertical', alternativeNames: [] as const, }, defaults: { ...DEFAULTS, }, views: { listItemView: CommonListItemView as ItemListView, editView: CoordinateSystemEditView, }, validatePayload: async () => true, sanitizePayload: async (t) => t, } as const; export const sphericalCoordinateSystem: ItemClassConfiguration = { ...COMMON_PROPERTIES, meta: { title: "Spherical Coordinate System", description: "Spherical Coordinate System", id: 'coordinate-sys--spherical', alternativeNames: [] as const, }, defaults: { ...DEFAULTS, }, views: { listItemView: CommonListItemView as ItemListView, editView: CoordinateSystemEditView, }, validatePayload: async () => true, sanitizePayload: async (t) => t, } as const;