mirror of
https://gitee.com/nocobase/nocobase.git
synced 2025-05-05 13:39:24 +08:00
* refactor: fields/views/pages... * update * update * update * updates * updates * add yarn.lock * updates * updates * updates * updates * updates * updates * updates * updates * updates * developerMode * 一大波更新 * bugfix * fix: hide the sorting settings * fix: reload menu when menu is updated * 页面重构 * modify text * 补充细节 * system settings * 继续更新补充 * fix: 多级菜单支持 * 无限嵌套 * fix: icon * 省市区参数调整 * 表单描述、文案调整 * 支持草稿 * 邮箱登录 * 细节补充 * 菜单页面权限初步 * 详情页打开方式 * 菜单父级、草稿问题 * 描述文字 * 详情分组显示 * 状态改为 radio * 菜单权限 * 跳过省市区 api * 修复权限数据范围 * onDraft * 页面跳转 * 修改文案 * 注册、登录 * fix: 权限过滤问题 * 微调上传组件样式 * 0.4.0-alpha.0 * father-build * remove father-build * 细节调整
80 lines
2.2 KiB
TypeScript
80 lines
2.2 KiB
TypeScript
import React, { useEffect } from 'react'
|
|
import { connect } from '@formily/react-schema-renderer'
|
|
import moment from 'moment'
|
|
import { Select } from 'antd'
|
|
import {
|
|
mapStyledProps,
|
|
mapTextComponent,
|
|
compose,
|
|
isStr,
|
|
isArr
|
|
} from '../shared'
|
|
import { useRequest } from 'umi';
|
|
import api from '@/api-client';
|
|
import { Spin } from '@nocobase/client'
|
|
import get from 'lodash/get';
|
|
|
|
function RemoteSelectComponent(props) {
|
|
let { schema = {}, value, onChange, disabled, resourceName, associatedKey, filter, labelField, valueField, objectValue, placeholder, multiple } = props;
|
|
console.log({schema});
|
|
if (!resourceName) {
|
|
resourceName = get(schema, 'component.resourceName');
|
|
}
|
|
if (!filter) {
|
|
filter = get(schema, 'component.filter');
|
|
}
|
|
if (!labelField) {
|
|
labelField = get(schema, 'component.labelField');
|
|
}
|
|
if (!valueField) {
|
|
valueField = get(schema, 'component.valueField');
|
|
}
|
|
if (!valueField) {
|
|
valueField = 'id';
|
|
}
|
|
const { data = [], loading = true } = useRequest(() => {
|
|
return api.resource(resourceName).list({
|
|
associatedKey,
|
|
filter,
|
|
});
|
|
}, {
|
|
refreshDeps: [resourceName, associatedKey]
|
|
});
|
|
const selectProps: any = {};
|
|
if (multiple) {
|
|
selectProps.mode = 'multiple'
|
|
}
|
|
console.log({ data, props, associatedKey })
|
|
return (
|
|
<>
|
|
<Select
|
|
{...selectProps}
|
|
placeholder={placeholder}
|
|
disabled={disabled}
|
|
notFoundContent={loading ? <Spin/> : undefined}
|
|
allowClear
|
|
loading={loading}
|
|
value={value && typeof value === 'object' ? value[valueField] : value}
|
|
onChange={(value, option) => {
|
|
if (value === null || typeof value === 'undefined') {
|
|
onChange(undefined);
|
|
return;
|
|
}
|
|
// @ts-ignore
|
|
const item = option.item;
|
|
onChange(objectValue ? item : value);
|
|
}}
|
|
>
|
|
{!loading && data.map(item => (<Select.Option item={item} value={item[valueField]}>{item[labelField]}</Select.Option>))}
|
|
</Select>
|
|
</>
|
|
);
|
|
}
|
|
|
|
export const RemoteSelect = connect({
|
|
getProps: mapStyledProps,
|
|
getComponent: mapTextComponent,
|
|
})(RemoteSelectComponent)
|
|
|
|
export default RemoteSelect
|