parent
019a42b0ed
commit
80e65fe5f6
@ -1,4 +1,4 @@
|
|||||||
import React, { useContext, useEffect, useMemo, useState } from 'react';
|
import React, { useContext, useMemo, useState } from 'react';
|
||||||
import {
|
import {
|
||||||
action,
|
action,
|
||||||
ArrayField,
|
ArrayField,
|
||||||
@ -7,13 +7,11 @@ import {
|
|||||||
observer,
|
observer,
|
||||||
RecursionField,
|
RecursionField,
|
||||||
useFieldSchema,
|
useFieldSchema,
|
||||||
useForm,
|
|
||||||
} from '@tachybase/schema';
|
} from '@tachybase/schema';
|
||||||
|
|
||||||
import { useAsyncEffect } from 'ahooks';
|
import { Button } from 'antd';
|
||||||
import { Button, Tabs } from 'antd';
|
|
||||||
import { createStyles } from 'antd-style';
|
import { createStyles } from 'antd-style';
|
||||||
import { set, unionBy, uniqBy } from 'lodash';
|
import { unionBy, uniqBy } from 'lodash';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
@ -23,12 +21,11 @@ import {
|
|||||||
SchemaComponentOptions,
|
SchemaComponentOptions,
|
||||||
useActionContext,
|
useActionContext,
|
||||||
} from '../..';
|
} from '../..';
|
||||||
import { useAPIClient, useRequest } from '../../../api-client';
|
|
||||||
import { useCreateActionProps } from '../../../block-provider/hooks';
|
import { useCreateActionProps } from '../../../block-provider/hooks';
|
||||||
import { FormActiveFieldsProvider } from '../../../block-provider/hooks/useFormActiveFields';
|
import { FormActiveFieldsProvider } from '../../../block-provider/hooks/useFormActiveFields';
|
||||||
import { TableSelectorParamsProvider } from '../../../block-provider/TableSelectorProvider';
|
import { TableSelectorParamsProvider } from '../../../block-provider/TableSelectorProvider';
|
||||||
import { CollectionProvider_deprecated } from '../../../collection-manager';
|
import { CollectionProvider_deprecated } from '../../../collection-manager';
|
||||||
import { CollectionRecordProvider, useCollectionManager, useCollectionRecord } from '../../../data-source';
|
import { CollectionRecordProvider, useCollectionRecord } from '../../../data-source';
|
||||||
import { markRecordAsNew } from '../../../data-source/collection-record/isNewRecord';
|
import { markRecordAsNew } from '../../../data-source/collection-record/isNewRecord';
|
||||||
import { FlagProvider } from '../../../flag-provider';
|
import { FlagProvider } from '../../../flag-provider';
|
||||||
import { useCompile } from '../../hooks';
|
import { useCompile } from '../../hooks';
|
||||||
@ -36,7 +33,7 @@ import { ActionContextProvider } from '../action';
|
|||||||
import { Table } from '../table-v2/Table';
|
import { Table } from '../table-v2/Table';
|
||||||
import { useAssociationFieldContext, useFieldNames } from './hooks';
|
import { useAssociationFieldContext, useFieldNames } from './hooks';
|
||||||
import { useTableSelectorProps } from './InternalPicker';
|
import { useTableSelectorProps } from './InternalPicker';
|
||||||
import { InternalTabs } from './SubTabs/InternamTabs';
|
import { InternalTabs } from './SubTabs/InternalTabs';
|
||||||
import { getLabelFormatValue, useLabelUiSchema } from './util';
|
import { getLabelFormatValue, useLabelUiSchema } from './util';
|
||||||
|
|
||||||
const useStyles = createStyles(({ css }) => {
|
const useStyles = createStyles(({ css }) => {
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
import React, { useEffect, useState } from 'react';
|
import React, { useState } from 'react';
|
||||||
import { ArrayField, observer, onFieldChange, Schema, useFieldSchema, useFormEffects } from '@tachybase/schema';
|
import { ArrayField, observer, onFieldChange, Schema, useFieldSchema, useFormEffects } from '@tachybase/schema';
|
||||||
|
import { fuzzysearch } from '@tachybase/utils/client';
|
||||||
|
|
||||||
import { CheckOutlined, CheckSquareOutlined, SearchOutlined } from '@ant-design/icons';
|
import { CheckOutlined, SearchOutlined } from '@ant-design/icons';
|
||||||
import { useAsyncEffect, useDeepCompareEffect } from 'ahooks';
|
import { useAsyncEffect, useDeepCompareEffect } from 'ahooks';
|
||||||
import { Badge, Button, Input, Space, Tabs } from 'antd';
|
import { Button, Input, Space, Tabs } from 'antd';
|
||||||
import flat from 'flat';
|
import flat from 'flat';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
|
|
||||||
@ -23,27 +24,24 @@ export const InternalTabs = observer((props) => {
|
|||||||
const quickAddParentField = fieldSchema['parent']['x-component-props']['quickAddParentCollection'];
|
const quickAddParentField = fieldSchema['parent']['x-component-props']['quickAddParentCollection'];
|
||||||
const [options, setOptions] = useState([]);
|
const [options, setOptions] = useState([]);
|
||||||
const [defOptions, setDefOptions] = useState([]);
|
const [defOptions, setDefOptions] = useState([]);
|
||||||
const { field, options: collectionField } = useAssociationFieldContext<ArrayField>();
|
const { field } = useAssociationFieldContext<ArrayField>();
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const [changeForm, setChangeForm] = useState<any>();
|
const [changeForm, setChangeForm] = useState<any>();
|
||||||
|
|
||||||
const tableSchema = fieldSchema.reduceProperties((buf, schema) => {
|
const quickAddSchema = fieldSchema.reduceProperties((buf, schema) => {
|
||||||
const found = schema.reduceProperties(
|
const found = schema.reduceProperties((buf, schema) => {
|
||||||
(buf, schema) => {
|
if (schema.name === quickAddField) {
|
||||||
if (schema.name === quickAddField) {
|
return schema;
|
||||||
return schema;
|
}
|
||||||
}
|
return buf;
|
||||||
return buf;
|
});
|
||||||
},
|
if (found) {
|
||||||
new Schema({ name: 'not-found' }),
|
|
||||||
);
|
|
||||||
if (found.name === quickAddField) {
|
|
||||||
return found;
|
return found;
|
||||||
}
|
}
|
||||||
return buf;
|
return buf;
|
||||||
}, new Schema({}));
|
}, new Schema({}));
|
||||||
const tabparams = tableSchema['x-component-props']?.['service']?.['params'];
|
const tabparams = quickAddSchema['x-component-props']?.['service']?.['params'];
|
||||||
const [fieldServiceFilter, setFieldServiceFilter] = useFieldServiceFilter(tabparams?.filter);
|
const [fieldServiceFilter] = useFieldServiceFilter(tabparams?.filter);
|
||||||
const formFilter = flat(tabparams?.filter || {});
|
const formFilter = flat(tabparams?.filter || {});
|
||||||
const formFieldFilter = Object.values(formFilter)
|
const formFieldFilter = Object.values(formFilter)
|
||||||
?.map((item) => {
|
?.map((item) => {
|
||||||
@ -69,9 +67,9 @@ export const InternalTabs = observer((props) => {
|
|||||||
itemParams['parentOptions'] = parentItem?.data?.data;
|
itemParams['parentOptions'] = parentItem?.data?.data;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tableSchema && fieldInterface === 'm2o') {
|
if (quickAddSchema && fieldInterface === 'm2o') {
|
||||||
itemParams['service'] = tableSchema['x-component-props'].service;
|
itemParams['service'] = quickAddSchema['x-component-props'].service;
|
||||||
itemParams['collectionName'] = cm.getCollection(tableSchema['x-collection-field']).name;
|
itemParams['collectionName'] = cm.getCollection(quickAddSchema['x-collection-field']).name;
|
||||||
const childrenItem = await api.request({
|
const childrenItem = await api.request({
|
||||||
url: itemParams['collectionName'] + ':list',
|
url: itemParams['collectionName'] + ':list',
|
||||||
params,
|
params,
|
||||||
@ -119,8 +117,8 @@ export const InternalTabs = observer((props) => {
|
|||||||
}
|
}
|
||||||
setOptions(optionsItem);
|
setOptions(optionsItem);
|
||||||
setDefOptions(optionsItem);
|
setDefOptions(optionsItem);
|
||||||
} else if (tableSchema) {
|
} else if (quickAddSchema) {
|
||||||
const fieldItem = cm.getCollectionField(tableSchema['x-collection-field']);
|
const fieldItem = cm.getCollectionField(quickAddSchema['x-collection-field']);
|
||||||
if (!fieldItem?.uiSchema || !fieldItem?.uiSchema.enum) return;
|
if (!fieldItem?.uiSchema || !fieldItem?.uiSchema.enum) return;
|
||||||
fieldItem.uiSchema.enum.forEach((item) => {
|
fieldItem.uiSchema.enum.forEach((item) => {
|
||||||
optionsItem.push(item);
|
optionsItem.push(item);
|
||||||
@ -156,8 +154,8 @@ export const InternalTabs = observer((props) => {
|
|||||||
if (quickAddParentField && quickAddParentField.value !== 'none') {
|
if (quickAddParentField && quickAddParentField.value !== 'none') {
|
||||||
const filterOption = defOptions
|
const filterOption = defOptions
|
||||||
.map((item) => {
|
.map((item) => {
|
||||||
const filterItem = item?.childrenItems?.filter((childrenItem) => childrenItem?.label?.includes(value));
|
const filterItem = item?.childrenItems?.filter((childrenItem) => fuzzysearch(value, childrenItem?.label));
|
||||||
if (item?.label?.includes(value) || filterItem.length) {
|
if (fuzzysearch(value, item?.label) || filterItem.length) {
|
||||||
return {
|
return {
|
||||||
...item,
|
...item,
|
||||||
childrenItems: filterItem.length ? filterItem : item.childrenItems,
|
childrenItems: filterItem.length ? filterItem : item.childrenItems,
|
||||||
@ -167,7 +165,7 @@ export const InternalTabs = observer((props) => {
|
|||||||
.filter(Boolean);
|
.filter(Boolean);
|
||||||
setOptions(filterOption);
|
setOptions(filterOption);
|
||||||
} else {
|
} else {
|
||||||
const filterOption = defOptions.filter((item) => item?.label?.includes(value));
|
const filterOption = defOptions.filter((item) => fuzzysearch(value, item?.label));
|
||||||
setOptions(filterOption);
|
setOptions(filterOption);
|
||||||
}
|
}
|
||||||
};
|
};
|
Loading…
Reference in New Issue
Block a user