feat: improve code
This commit is contained in:
parent
afab15327e
commit
271111902f
@ -72,7 +72,9 @@ export const collectionFieldSchema: ISchema = {
|
||||
action: 'list',
|
||||
params: {
|
||||
pageSize: 50,
|
||||
filter: {},
|
||||
filter: {
|
||||
'interface.$not': null,
|
||||
},
|
||||
sort: ['sort'],
|
||||
appends: ['uiSchema'],
|
||||
},
|
||||
|
@ -14,18 +14,20 @@ interface ResourceActionProviderProps {
|
||||
|
||||
const ResourceContext = createContext<any>(null);
|
||||
|
||||
const CollectionResourceActionProvider = (props) => {
|
||||
const InternalCollectionResourceActionProvider = (props) => {
|
||||
let { collection, request, uid } = props;
|
||||
const { get } = useCollectionManager();
|
||||
const api = useAPIClient();
|
||||
const service = useRequest(request, { uid });
|
||||
const service = useRequest(
|
||||
{
|
||||
...request,
|
||||
params: {
|
||||
...request?.params,
|
||||
appends: collection.fields.filter(field => field.target).map((field) => field.name),
|
||||
},
|
||||
},
|
||||
{ uid },
|
||||
);
|
||||
const resource = api.resource(request.resource);
|
||||
if (typeof collection === 'string') {
|
||||
collection = get(collection);
|
||||
}
|
||||
if (!collection) {
|
||||
return null;
|
||||
}
|
||||
return (
|
||||
<ResourceContext.Provider value={{ type: 'collection', resource, collection }}>
|
||||
<ResourceActionContext.Provider value={service}>
|
||||
@ -35,6 +37,18 @@ const CollectionResourceActionProvider = (props) => {
|
||||
);
|
||||
};
|
||||
|
||||
const CollectionResourceActionProvider = (props) => {
|
||||
let { collection, request, uid } = props;
|
||||
const { getCollection } = useCollectionManager();
|
||||
if (typeof collection === 'string') {
|
||||
collection = getCollection(collection);
|
||||
}
|
||||
if (!collection) {
|
||||
return null;
|
||||
}
|
||||
return <InternalCollectionResourceActionProvider {...props} collection={collection} />;
|
||||
};
|
||||
|
||||
const AssociationResourceActionProvider = (props) => {
|
||||
let { collection, association, request, uid } = props;
|
||||
const { get } = useCollectionManager();
|
||||
|
@ -13,7 +13,7 @@ import {
|
||||
useForm
|
||||
} from '@formily/react';
|
||||
import { toArr } from '@formily/shared';
|
||||
import { Button, Drawer, Select, Space, Tag } from 'antd';
|
||||
import { Button, Drawer, Select, Space } from 'antd';
|
||||
import React, { createContext, useContext, useMemo, useState } from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { useAttach } from '../../hooks/useAttach';
|
||||
@ -113,19 +113,21 @@ const ReadPrettyRecordPicker: React.FC = (props) => {
|
||||
const field = useField<Field>();
|
||||
return (
|
||||
<div>
|
||||
{toArr(field.value).map((record, index) => {
|
||||
return (
|
||||
<RowContext.Provider key={index} value={{ record, field, props }}>
|
||||
<RecursionField
|
||||
schema={fieldSchema}
|
||||
onlyRenderProperties
|
||||
filterProperties={(s) => {
|
||||
return s['x-component'] === 'RecordPicker.SelectedItem';
|
||||
}}
|
||||
/>
|
||||
</RowContext.Provider>
|
||||
);
|
||||
})}
|
||||
<Space size={0} split={<span style={{ marginRight: 4, color: '#aaa' }}>, </span>}>
|
||||
{toArr(field.value).map((record, index) => {
|
||||
return (
|
||||
<RowContext.Provider key={index} value={{ record, field, props }}>
|
||||
<RecursionField
|
||||
schema={fieldSchema}
|
||||
onlyRenderProperties
|
||||
filterProperties={(s) => {
|
||||
return s['x-component'] === 'RecordPicker.SelectedItem';
|
||||
}}
|
||||
/>
|
||||
</RowContext.Provider>
|
||||
);
|
||||
})}
|
||||
</Space>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
@ -185,11 +187,12 @@ RecordPicker.SelectedItem = () => {
|
||||
const ctx = useContext(RowContext);
|
||||
const fieldSchema = useFieldSchema();
|
||||
const [visible, setVisible] = useState(false);
|
||||
const fieldNames = ctx.field.componentProps.fieldNames;
|
||||
return (
|
||||
<ActionContext.Provider value={{ visible, setVisible }}>
|
||||
<Tag style={{ cursor: 'pointer' }} onClick={() => setVisible(true)}>
|
||||
{ctx.record?.name}
|
||||
</Tag>
|
||||
<a style={{ cursor: 'pointer' }} onClick={() => setVisible(true)}>
|
||||
{ctx.record[fieldNames?.label || 'id']}
|
||||
</a>
|
||||
<RecursionField onlyRenderProperties schema={fieldSchema}></RecursionField>
|
||||
</ActionContext.Provider>
|
||||
);
|
||||
|
@ -1,4 +1,3 @@
|
||||
import flat from 'flat';
|
||||
import React from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { SchemaInitializer } from '../SchemaInitializer';
|
||||
@ -34,28 +33,6 @@ export const GridFormItemInitializers = (props: any) => {
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
type: 'item',
|
||||
title: t('Add Filter'),
|
||||
component: 'GeneralInitializer',
|
||||
schema: {
|
||||
name: 'filter',
|
||||
type: 'object',
|
||||
default: flat.unflatten({
|
||||
$or: [
|
||||
{ 'aa.$eq': 'b' },
|
||||
{ 'bb.field.$eq': ['aabb', 'aaa'] },
|
||||
{
|
||||
'bb.field': {
|
||||
$eq: ['aabb', 'aaa'],
|
||||
},
|
||||
},
|
||||
],
|
||||
}),
|
||||
'x-component': 'Filter',
|
||||
'x-component-props': {},
|
||||
},
|
||||
},
|
||||
]}
|
||||
>
|
||||
{t('Configure fields')}
|
||||
|
@ -59,7 +59,7 @@ const findTableColumn = (schema: Schema, key: string, action: string, deepth: nu
|
||||
export const useTableColumnInitializerFields = () => {
|
||||
const { name, fields } = useCollection();
|
||||
return fields
|
||||
.filter((field) => field?.interface !== 'subTable')
|
||||
.filter((field) => field?.interface && field?.interface !== 'subTable')
|
||||
.map((field) => {
|
||||
if (field.interface === 'linkTo') {
|
||||
return {
|
||||
@ -93,14 +93,47 @@ export const useTableColumnInitializerFields = () => {
|
||||
|
||||
export const useFormItemInitializerFields = () => {
|
||||
const { name, fields } = useCollection();
|
||||
return fields?.map((field) => {
|
||||
if (field.interface === 'linkTo') {
|
||||
return fields
|
||||
?.filter((field) => field?.interface)
|
||||
?.map((field) => {
|
||||
if (field.interface === 'linkTo') {
|
||||
return {
|
||||
type: 'item',
|
||||
title: field?.uiSchema?.title || field.name,
|
||||
component: 'LinkToFieldInitializer',
|
||||
remove: removeGridFormItem,
|
||||
field,
|
||||
schema: {
|
||||
name: field.name,
|
||||
'x-designer': 'FormItem.Designer',
|
||||
'x-component': 'CollectionField',
|
||||
'x-decorator': 'FormItem',
|
||||
'x-collection-field': `${name}.${field.name}`,
|
||||
},
|
||||
} as SchemaInitializerItemOptions;
|
||||
}
|
||||
if (field.interface === 'subTable') {
|
||||
return {
|
||||
type: 'item',
|
||||
title: field?.uiSchema?.title || field.name,
|
||||
component: 'SubTableFieldInitializer',
|
||||
remove: removeGridFormItem,
|
||||
field,
|
||||
schema: {
|
||||
type: 'void',
|
||||
name: field.name,
|
||||
'x-designer': 'FormItem.Designer',
|
||||
'x-component': 'div',
|
||||
'x-decorator': 'FormItem',
|
||||
'x-collection-field': `${name}.${field.name}`,
|
||||
},
|
||||
} as SchemaInitializerItemOptions;
|
||||
}
|
||||
return {
|
||||
type: 'item',
|
||||
title: field?.uiSchema?.title || field.name,
|
||||
component: 'LinkToFieldInitializer',
|
||||
component: 'CollectionFieldInitializer',
|
||||
remove: removeGridFormItem,
|
||||
field,
|
||||
schema: {
|
||||
name: field.name,
|
||||
'x-designer': 'FormItem.Designer',
|
||||
@ -109,38 +142,7 @@ export const useFormItemInitializerFields = () => {
|
||||
'x-collection-field': `${name}.${field.name}`,
|
||||
},
|
||||
} as SchemaInitializerItemOptions;
|
||||
}
|
||||
if (field.interface === 'subTable') {
|
||||
return {
|
||||
type: 'item',
|
||||
title: field?.uiSchema?.title || field.name,
|
||||
component: 'SubTableFieldInitializer',
|
||||
remove: removeGridFormItem,
|
||||
field,
|
||||
schema: {
|
||||
type: 'void',
|
||||
name: field.name,
|
||||
'x-designer': 'FormItem.Designer',
|
||||
'x-component': 'div',
|
||||
'x-decorator': 'FormItem',
|
||||
'x-collection-field': `${name}.${field.name}`,
|
||||
},
|
||||
} as SchemaInitializerItemOptions;
|
||||
}
|
||||
return {
|
||||
type: 'item',
|
||||
title: field?.uiSchema?.title || field.name,
|
||||
component: 'CollectionFieldInitializer',
|
||||
remove: removeGridFormItem,
|
||||
schema: {
|
||||
name: field.name,
|
||||
'x-designer': 'FormItem.Designer',
|
||||
'x-component': 'CollectionField',
|
||||
'x-decorator': 'FormItem',
|
||||
'x-collection-field': `${name}.${field.name}`,
|
||||
},
|
||||
} as SchemaInitializerItemOptions;
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
const findSchema = (schema: Schema, key: string, action: string) => {
|
||||
|
@ -11,6 +11,7 @@ export default {
|
||||
name: 'name',
|
||||
prefix: 'r_',
|
||||
primaryKey: true,
|
||||
interface: 'input',
|
||||
uiSchema: {
|
||||
type: 'string',
|
||||
title: '{{t("Role UID")}}',
|
||||
@ -21,6 +22,7 @@ export default {
|
||||
type: 'string',
|
||||
name: 'title',
|
||||
unique: true,
|
||||
interface: 'input',
|
||||
uiSchema: {
|
||||
type: 'string',
|
||||
title: '{{t("Role name")}}',
|
||||
|
@ -51,16 +51,8 @@ export async function signout(ctx: Context, next: Next) {
|
||||
export async function signup(ctx: Context, next: Next) {
|
||||
const User = ctx.db.getRepository('users');
|
||||
const { values } = ctx.action.params;
|
||||
try {
|
||||
const user = await User.create({ values });
|
||||
ctx.body = user;
|
||||
} catch (error) {
|
||||
if (error.errors) {
|
||||
ctx.throw(401, error.errors.map((data) => data.message).join(', '));
|
||||
} else {
|
||||
ctx.throw(401, '注册失败');
|
||||
}
|
||||
}
|
||||
const user = await User.create({ values });
|
||||
ctx.body = user;
|
||||
await next();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user