UNPKG

adminjs

Version:
161 lines (160 loc) 4.26 kB
import React from 'react'; import { RecordJSON, ResourceJSON, PropertyJSON, PropertyPlace } from '../../interfaces/index.js'; import { BasePropertyJSON } from '../../interfaces/property-json/property-json.interface.js'; export type SelectRecord = { value: string | number; label: string; }; /** * Props which are passed to all your custom property components * * * Example * ``` * // AdminJSOptions * const AdminJS = require('adminjs') * const ResourceModel = require('./resource-model') * const AdminJSOptions = { * resources: [{ * resource: ResourceModel * options: { * properties: { * name: { * components: { * show: 'MyReactComponent', * }, * }, * }, * }, * }], * } * * // my-react-component.tsx * const MyReactComponent = (props: BasePropertyProps) => { * const { record, property } = props * const value = record.params[property.path] === 'foo' ? 'bar' : 'zoe' * return ( * <PropertyInShow property={property}> * {value} * </PropertyInShow> * ) * } * * ``` * * @memberof BasePropertyComponent * @alias BasePropertyProps */ export type BasePropertyProps = { /** * Property JSON representation */ property: PropertyJSON; /** * Resource JSON representation */ resource: ResourceJSON; /** * Record JSON representation. Null for filter */ record?: RecordJSON; /** * callback function which should indicate change of the field value. You can use it * when overriding edit properties. */ onChange?: OnPropertyChange; /** * Filter object taken from the query params. It is used on the _filter_ components. */ filter?: any; /** * Where given property should be rendered. Either of 'show' | 'list' | 'edit' | 'filter'. */ where: PropertyPlace; }; export type BasePropertyComponentProps = Omit<BasePropertyProps, 'property'> & { property: BasePropertyJSON; }; export type BasePropertyPropsExtended = BasePropertyProps & { ItemComponent: typeof React.Component; testId: string; }; /** * Props which are passed to all your custom property components in filter * * @memberof BasePropertyComponent * @alias BasePropertyFilterProps * @extends BasePropertyProps */ export type FilterPropertyProps = BasePropertyProps & { /** * Filter object taken from the query params. It is used on the _filter_ components */ filter: any; /** * callback function which should indicate change of the filter value. */ onChange: OnPropertyChange; record: undefined; }; /** * Props which are passed to all your custom property components in show * * @memberof BasePropertyComponent * @alias EditPropertyProps * @extends BasePropertyProps */ export type EditPropertyProps = BasePropertyProps & { /** * callback function which should indicate change of the field value. */ onChange: OnPropertyChange; /** * Record JSON representation. Null for filter */ record: RecordJSON; }; export type EditPropertyPropsInArray = EditPropertyProps & { ItemComponent: typeof React.Component; testId: string; }; /** * Props which are passed to all your custom property components in show * * @memberof BasePropertyComponent * @alias BasePropertyEditProps * @extends BasePropertyProps */ export type ShowPropertyProps = { /** * Property JSON representation */ property: PropertyJSON; /** * Resource JSON representation */ resource: ResourceJSON; /** * Record JSON representation. Null for filter */ record: RecordJSON; }; /** * @load ./docs/on-property-change.doc.md * @memberof BasePropertyComponent * @alias OnPropertyChange */ export type OnPropertyChange = ( /** * property.path or updated RecordJSON object */ propertyOrRecord: RecordJSON | string, /** * when propertyOrRecord is a property.path, here should be an updated value. */ value?: any, /** * In case of "reference" fields (with select), when they change they pass selected record object. * This is mostly for an internal use - you probably wont have to use that. */ selectedRecord?: RecordJSON) => void;