import { ISchema, useField, useFieldSchema } from '@formily/react'; import { FilterBlockType, FixedBlockDesignerItem, GeneralSchemaDesigner, SchemaSettings, mergeFilter, useCollection, useCollectionFilterOptions, useCollectionManager, useDesignable, useSchemaTemplate, } from '@nocobase/client'; import set from 'lodash/set'; import React from 'react'; import { useTranslation } from 'react-i18next'; import { useMapTranslation } from '../locale'; import { useMapBlockContext } from './MapBlockProvider'; export const MapBlockDesigner = () => { const { name, title } = useCollection(); const field = useField(); const fieldSchema = useFieldSchema(); const dataSource = useCollectionFilterOptions(name); const { service } = useMapBlockContext(); const { t: mapT } = useMapTranslation(); const { t } = useTranslation(); const { dn } = useDesignable(); const { getCollectionFieldsOptions } = useCollectionManager(); const collection = useCollection(); const defaultFilter = fieldSchema?.['x-decorator-props']?.params?.filter || {}; const defaultResource = fieldSchema?.['x-decorator-props']?.resource; const fieldNames = fieldSchema?.['x-decorator-props']?.['fieldNames'] || {}; const defaultZoom = fieldSchema?.['x-component-props']?.['zoom'] || 13; const template = useSchemaTemplate(); const mapFieldOptions = getCollectionFieldsOptions(collection?.name, ['point', 'lineString', 'polygon']); const markerFieldOptions = getCollectionFieldsOptions(collection?.name, 'string'); return ( { const fieldNames = field.decoratorProps.fieldNames || {}; fieldNames['field'] = v; field.decoratorProps.fieldNames = fieldNames; fieldSchema['x-decorator-props']['fieldNames'] = fieldNames; service.refresh(); dn.emit('patch', { schema: { ['x-uid']: fieldSchema['x-uid'], 'x-decorator-props': field.decoratorProps, }, }); dn.refresh(); }} /> { const fieldNames = field.decoratorProps.fieldNames || {}; fieldNames['marker'] = v; field.decoratorProps.fieldNames = fieldNames; fieldSchema['x-decorator-props']['fieldNames'] = fieldNames; service.refresh(); dn.emit('patch', { schema: { ['x-uid']: fieldSchema['x-uid'], 'x-decorator-props': field.decoratorProps, }, }); dn.refresh(); }} /> { set(fieldSchema, 'x-component-props.zoom', zoom); Object.assign(field.componentProps, fieldSchema['x-component-props']); dn.emit('patch', { schema: { 'x-uid': fieldSchema['x-uid'], 'x-component-props': field.componentProps, }, }); dn.refresh(); }} > { const params = field.decoratorProps.params || {}; params.filter = filter; field.decoratorProps.params = params; fieldSchema['x-decorator-props']['params'] = params; const filters = service.params?.[1]?.filters || {}; service.run( { ...service.params?.[0], filter: mergeFilter([...Object.values(filters), filter]), page: 1 }, { filters }, ); dn.emit('patch', { schema: { ['x-uid']: fieldSchema['x-uid'], 'x-decorator-props': fieldSchema['x-decorator-props'], }, }); }} /> ); };