import * as React from "react"; import * as d from "../../localData"; import { ElementOperation } from "./ElementOperation"; import type { UseDefinyAppResult } from "../hook/useDefinyApp"; import { css } from "@emotion/css"; import { dataTypeOrDataTypeParameterOperation } from "./dataTypeOrDataTypeParameter"; import { neverFunc } from "../../common/util"; export type TypeSelection = { readonly index: number; readonly typeSelection: TypeSelection | undefined; }; export type TypeValue = Pick< UseDefinyAppResult, "typePartResource" | "jump" | "language" | "typePartIdListInProjectResource" > & { readonly type: d.Type; readonly projectId: d.ProjectId; readonly scopeTypePartId: d.TypePartId; readonly onChange: (newType: d.Type) => void; }; const TypeSelectionView: ElementOperation< TypeSelection, TypeValue >["selectionView"] = React.memo( ({ value: { onChange: onChangeType, ...value }, onChangeSelection, selection, }) => { const onChange = React.useCallback( (dataTypeOrDataTypeParameter: d.DataTypeOrDataTypeParameter) => { onChangeType({ input: d.Maybe.Nothing(), output: dataTypeOrDataTypeParameter, }); }, [onChangeType] ); return (
(入力)
{`→`}
); } ); TypeSelectionView.displayName = "TypeSelectionView"; const TypeDetailView: ElementOperation["detailView"] = React.memo(({ value: { onChange: onChangeType, ...value }, selection }) => { const onChange = React.useCallback( (dataTypeOrDataTypeParameter: d.DataTypeOrDataTypeParameter) => { onChangeType({ input: d.Maybe.Nothing(), output: dataTypeOrDataTypeParameter, }); }, [onChangeType] ); return ( ); }); TypeDetailView.displayName = "TypeDetailView"; export const typeOperation: ElementOperation = { moveDown: neverFunc, moveUp: neverFunc, moveFirstChild: () => undefined, moveParent: () => undefined, selectionView: TypeSelectionView, detailView: TypeDetailView, };