mirror of
https://gitee.com/nocobase/nocobase.git
synced 2025-05-08 06:59:26 +08:00
Merge branch 'main' into next
This commit is contained in:
commit
207d571756
@ -297,4 +297,12 @@ export class Collection {
|
|||||||
isTitleField(field: CollectionFieldOptions) {
|
isTitleField(field: CollectionFieldOptions) {
|
||||||
return this.app.dataSourceManager.collectionFieldInterfaceManager.getFieldInterface(field.interface)?.titleUsable;
|
return this.app.dataSourceManager.collectionFieldInterfaceManager.getFieldInterface(field.interface)?.titleUsable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* is inherited from other collection
|
||||||
|
* @returns boolean
|
||||||
|
*/
|
||||||
|
isInherited() {
|
||||||
|
return this.inherits.length > 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@ export const BlockSchemaToolbar = (props) => {
|
|||||||
const cm = useCollectionManager();
|
const cm = useCollectionManager();
|
||||||
let { name: currentCollectionName, title: currentCollectionTitle } = useCollection() || {};
|
let { name: currentCollectionName, title: currentCollectionTitle } = useCollection() || {};
|
||||||
const template = useSchemaTemplate();
|
const template = useSchemaTemplate();
|
||||||
const { association } = useDataBlockProps() || {};
|
const { association, collection } = useDataBlockProps() || {};
|
||||||
const compile = useCompile();
|
const compile = useCompile();
|
||||||
|
|
||||||
if (association) {
|
if (association) {
|
||||||
@ -31,7 +31,10 @@ export const BlockSchemaToolbar = (props) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const associationField = cm.getCollectionField(association);
|
const associationField = cm.getCollectionField(association);
|
||||||
const associationCollection = cm.getCollection(associationField?.target);
|
// If both the collection and association parameters exist at the same time,
|
||||||
|
// it means that the collection of the current block is a child collection of inheritance,
|
||||||
|
// and the title of the child collection needs to be displayed at this time
|
||||||
|
const associationCollection = cm.getCollection(collection || associationField?.target);
|
||||||
const templateName = ['FormItem', 'ReadPrettyFormItem'].includes(template?.componentName)
|
const templateName = ['FormItem', 'ReadPrettyFormItem'].includes(template?.componentName)
|
||||||
? `${template?.name} ${t('(Fields only)')}`
|
? `${template?.name} ${t('(Fields only)')}`
|
||||||
: template?.name;
|
: template?.name;
|
||||||
|
@ -11,10 +11,10 @@ import { FormOutlined } from '@ant-design/icons';
|
|||||||
import React, { useCallback } from 'react';
|
import React, { useCallback } from 'react';
|
||||||
import { SchemaInitializerItem, useSchemaInitializer, useSchemaInitializerItem } from '../../../../application';
|
import { SchemaInitializerItem, useSchemaInitializer, useSchemaInitializerItem } from '../../../../application';
|
||||||
import { useCollection_deprecated } from '../../../../collection-manager';
|
import { useCollection_deprecated } from '../../../../collection-manager';
|
||||||
|
import { useAssociationName, useCollectionManager } from '../../../../data-source';
|
||||||
import { useRecordCollectionDataSourceItems } from '../../../../schema-initializer/utils';
|
import { useRecordCollectionDataSourceItems } from '../../../../schema-initializer/utils';
|
||||||
import { useSchemaTemplateManager } from '../../../../schema-templates';
|
import { useSchemaTemplateManager } from '../../../../schema-templates';
|
||||||
import { createDetailsUISchema } from './createDetailsUISchema';
|
import { createDetailsUISchema } from './createDetailsUISchema';
|
||||||
import { useAssociationName } from '../../../../data-source';
|
|
||||||
|
|
||||||
export const RecordReadPrettyFormBlockInitializer = () => {
|
export const RecordReadPrettyFormBlockInitializer = () => {
|
||||||
const itemConfig = useSchemaInitializerItem();
|
const itemConfig = useSchemaInitializerItem();
|
||||||
@ -37,21 +37,26 @@ export function useCreateSingleDetailsSchema() {
|
|||||||
const { insert } = useSchemaInitializer();
|
const { insert } = useSchemaInitializer();
|
||||||
const { getTemplateSchemaByMode } = useSchemaTemplateManager();
|
const { getTemplateSchemaByMode } = useSchemaTemplateManager();
|
||||||
const association = useAssociationName();
|
const association = useAssociationName();
|
||||||
|
const cm = useCollectionManager();
|
||||||
|
|
||||||
const templateWrap = useCallback(
|
const templateWrap = useCallback(
|
||||||
(templateSchema, options) => {
|
(templateSchema, options) => {
|
||||||
const { item } = options;
|
const { item } = options;
|
||||||
if (item.template.componentName === 'ReadPrettyFormItem') {
|
if (item.template.componentName === 'ReadPrettyFormItem') {
|
||||||
|
const collectionName = item.collectionName || item.name;
|
||||||
|
const collection = cm.getCollection(collectionName);
|
||||||
const blockSchema = createDetailsUISchema(
|
const blockSchema = createDetailsUISchema(
|
||||||
association
|
association
|
||||||
? {
|
? {
|
||||||
association,
|
association,
|
||||||
|
// see: https://applink.feishu.cn/client/message/link/open?token=AmP9n9dkwcABZrr3nBdAwAI%3D
|
||||||
|
collectionName: collection.isInherited() ? collectionName : undefined,
|
||||||
dataSource: item.dataSource,
|
dataSource: item.dataSource,
|
||||||
templateSchema: templateSchema,
|
templateSchema: templateSchema,
|
||||||
isCurrent: true,
|
isCurrent: true,
|
||||||
}
|
}
|
||||||
: {
|
: {
|
||||||
collectionName: item.collectionName || item.name,
|
collectionName,
|
||||||
dataSource: item.dataSource,
|
dataSource: item.dataSource,
|
||||||
templateSchema: templateSchema,
|
templateSchema: templateSchema,
|
||||||
},
|
},
|
||||||
@ -64,7 +69,7 @@ export function useCreateSingleDetailsSchema() {
|
|||||||
return templateSchema;
|
return templateSchema;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[association],
|
[association, cm],
|
||||||
);
|
);
|
||||||
|
|
||||||
const createSingleDetailsSchema = useCallback(
|
const createSingleDetailsSchema = useCallback(
|
||||||
@ -73,23 +78,27 @@ export function useCreateSingleDetailsSchema() {
|
|||||||
const template = await getTemplateSchemaByMode(item);
|
const template = await getTemplateSchemaByMode(item);
|
||||||
insert(templateWrap(template, { item }));
|
insert(templateWrap(template, { item }));
|
||||||
} else {
|
} else {
|
||||||
|
const collectionName = item.collectionName || item.name;
|
||||||
|
const collection = cm.getCollection(collectionName);
|
||||||
insert(
|
insert(
|
||||||
createDetailsUISchema(
|
createDetailsUISchema(
|
||||||
association
|
association
|
||||||
? {
|
? {
|
||||||
association,
|
association,
|
||||||
|
// see: https://applink.feishu.cn/client/message/link/open?token=AmP9n9dkwcABZrr3nBdAwAI%3D
|
||||||
|
collectionName: collection.isInherited() ? collectionName : undefined,
|
||||||
dataSource: item.dataSource,
|
dataSource: item.dataSource,
|
||||||
isCurrent: true,
|
isCurrent: true,
|
||||||
}
|
}
|
||||||
: {
|
: {
|
||||||
collectionName: item.collectionName || item.name,
|
collectionName,
|
||||||
dataSource: item.dataSource,
|
dataSource: item.dataSource,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[association, getTemplateSchemaByMode, insert, templateWrap],
|
[association, cm, getTemplateSchemaByMode, insert, templateWrap],
|
||||||
);
|
);
|
||||||
|
|
||||||
return { createSingleDetailsSchema, templateWrap };
|
return { createSingleDetailsSchema, templateWrap };
|
||||||
|
@ -10,8 +10,8 @@
|
|||||||
import { FormOutlined } from '@ant-design/icons';
|
import { FormOutlined } from '@ant-design/icons';
|
||||||
import React, { useCallback } from 'react';
|
import React, { useCallback } from 'react';
|
||||||
import { SchemaInitializerItem, useSchemaInitializer, useSchemaInitializerItem } from '../../../../application';
|
import { SchemaInitializerItem, useSchemaInitializer, useSchemaInitializerItem } from '../../../../application';
|
||||||
import { useAssociationName } from '../../../../data-source';
|
|
||||||
import { useCollection_deprecated } from '../../../../collection-manager';
|
import { useCollection_deprecated } from '../../../../collection-manager';
|
||||||
|
import { useAssociationName, useCollectionManager } from '../../../../data-source';
|
||||||
import { useRecordCollectionDataSourceItems } from '../../../../schema-initializer/utils';
|
import { useRecordCollectionDataSourceItems } from '../../../../schema-initializer/utils';
|
||||||
import { useSchemaTemplateManager } from '../../../../schema-templates';
|
import { useSchemaTemplateManager } from '../../../../schema-templates';
|
||||||
import { createEditFormBlockUISchema } from './createEditFormBlockUISchema';
|
import { createEditFormBlockUISchema } from './createEditFormBlockUISchema';
|
||||||
@ -49,40 +49,47 @@ export const RecordFormBlockInitializer = () => {
|
|||||||
export function useCreateEditFormBlock() {
|
export function useCreateEditFormBlock() {
|
||||||
const { insert } = useSchemaInitializer();
|
const { insert } = useSchemaInitializer();
|
||||||
const association = useAssociationName();
|
const association = useAssociationName();
|
||||||
|
const cm = useCollectionManager();
|
||||||
|
|
||||||
const createEditFormBlock = useCallback(
|
const createEditFormBlock = useCallback(
|
||||||
({ item }) => {
|
({ item }) => {
|
||||||
|
const collectionName = item.collectionName || item.name;
|
||||||
|
const collection = cm.getCollection(collectionName);
|
||||||
insert(
|
insert(
|
||||||
createEditFormBlockUISchema(
|
createEditFormBlockUISchema(
|
||||||
association
|
association
|
||||||
? {
|
? {
|
||||||
association,
|
association,
|
||||||
|
collectionName: collection.isInherited() ? collectionName : undefined,
|
||||||
dataSource: item.dataSource,
|
dataSource: item.dataSource,
|
||||||
isCurrent: true,
|
isCurrent: true,
|
||||||
}
|
}
|
||||||
: {
|
: {
|
||||||
collectionName: item.collectionName || item.name,
|
collectionName,
|
||||||
dataSource: item.dataSource,
|
dataSource: item.dataSource,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
[association, insert],
|
[association, cm, insert],
|
||||||
);
|
);
|
||||||
|
|
||||||
const templateWrap = useCallback(
|
const templateWrap = useCallback(
|
||||||
(templateSchema, { item }) => {
|
(templateSchema, { item }) => {
|
||||||
if (item.template.componentName === 'FormItem') {
|
if (item.template.componentName === 'FormItem') {
|
||||||
|
const collectionName = item.collectionName || item.name;
|
||||||
|
const collection = cm.getCollection(collectionName);
|
||||||
const blockSchema = createEditFormBlockUISchema(
|
const blockSchema = createEditFormBlockUISchema(
|
||||||
association
|
association
|
||||||
? {
|
? {
|
||||||
association,
|
association,
|
||||||
|
collectionName: collection.isInherited() ? collectionName : undefined,
|
||||||
dataSource: item.dataSource,
|
dataSource: item.dataSource,
|
||||||
templateSchema: templateSchema,
|
templateSchema: templateSchema,
|
||||||
isCurrent: true,
|
isCurrent: true,
|
||||||
}
|
}
|
||||||
: {
|
: {
|
||||||
collectionName: item.collectionName || item.name,
|
collectionName,
|
||||||
dataSource: item.dataSource,
|
dataSource: item.dataSource,
|
||||||
templateSchema: templateSchema,
|
templateSchema: templateSchema,
|
||||||
},
|
},
|
||||||
@ -95,7 +102,7 @@ export function useCreateEditFormBlock() {
|
|||||||
return templateSchema;
|
return templateSchema;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[association],
|
[association, cm],
|
||||||
);
|
);
|
||||||
|
|
||||||
return { createEditFormBlock, templateWrap };
|
return { createEditFormBlock, templateWrap };
|
||||||
|
@ -13,7 +13,6 @@ import {
|
|||||||
useActionAvailable,
|
useActionAvailable,
|
||||||
useCollection,
|
useCollection,
|
||||||
useCollectionManager_deprecated,
|
useCollectionManager_deprecated,
|
||||||
useCollection_deprecated,
|
|
||||||
useCreateAssociationDetailsBlock,
|
useCreateAssociationDetailsBlock,
|
||||||
useCreateAssociationDetailsWithoutPagination,
|
useCreateAssociationDetailsWithoutPagination,
|
||||||
useCreateAssociationFormBlock,
|
useCreateAssociationFormBlock,
|
||||||
@ -46,7 +45,7 @@ export const canMakeAssociationBlock = (field) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
function useRecordBlocks() {
|
function useRecordBlocks() {
|
||||||
const collection = useCollection_deprecated();
|
const collection = useCollection();
|
||||||
const { getChildrenCollections } = useCollectionManager_deprecated();
|
const { getChildrenCollections } = useCollectionManager_deprecated();
|
||||||
const collectionsWithView = getChildrenCollections(collection.name, true, collection.dataSource).filter(
|
const collectionsWithView = getChildrenCollections(collection.name, true, collection.dataSource).filter(
|
||||||
(v) => v?.filterTargetKey,
|
(v) => v?.filterTargetKey,
|
||||||
@ -60,7 +59,7 @@ function useRecordBlocks() {
|
|||||||
collectionName: collection.name,
|
collectionName: collection.name,
|
||||||
dataSource: collection.dataSource,
|
dataSource: collection.dataSource,
|
||||||
useComponentProps() {
|
useComponentProps() {
|
||||||
const currentCollection = useCollection_deprecated();
|
const currentCollection = useCollection();
|
||||||
const { createSingleDetailsSchema, templateWrap } = useCreateSingleDetailsSchema();
|
const { createSingleDetailsSchema, templateWrap } = useCreateSingleDetailsSchema();
|
||||||
const { createAssociationDetailsBlock } = useCreateAssociationDetailsBlock();
|
const { createAssociationDetailsBlock } = useCreateAssociationDetailsBlock();
|
||||||
const {
|
const {
|
||||||
@ -126,7 +125,7 @@ function useRecordBlocks() {
|
|||||||
collectionName: collection.name,
|
collectionName: collection.name,
|
||||||
dataSource: collection.dataSource,
|
dataSource: collection.dataSource,
|
||||||
useComponentProps() {
|
useComponentProps() {
|
||||||
const currentCollection = useCollection_deprecated();
|
const currentCollection = useCollection();
|
||||||
const { createEditFormBlock, templateWrap: templateWrapEdit } = useCreateEditFormBlock();
|
const { createEditFormBlock, templateWrap: templateWrapEdit } = useCreateEditFormBlock();
|
||||||
const collectionsNeedToDisplay = [currentCollection, ...collectionsWithView];
|
const collectionsNeedToDisplay = [currentCollection, ...collectionsWithView];
|
||||||
|
|
||||||
|
@ -12,9 +12,9 @@ import React, { useCallback } from 'react';
|
|||||||
|
|
||||||
import { SchemaInitializerItem, useSchemaInitializer, useSchemaInitializerItem } from '../../application';
|
import { SchemaInitializerItem, useSchemaInitializer, useSchemaInitializerItem } from '../../application';
|
||||||
import { useCollectionManager_deprecated } from '../../collection-manager';
|
import { useCollectionManager_deprecated } from '../../collection-manager';
|
||||||
|
import { createDetailsWithPaginationUISchema } from '../../modules/blocks/data-blocks/details-multi/createDetailsWithPaginationUISchema';
|
||||||
import { useSchemaTemplateManager } from '../../schema-templates';
|
import { useSchemaTemplateManager } from '../../schema-templates';
|
||||||
import { useRecordCollectionDataSourceItems } from '../utils';
|
import { useRecordCollectionDataSourceItems } from '../utils';
|
||||||
import { createDetailsWithPaginationUISchema } from '../../modules/blocks/data-blocks/details-multi/createDetailsWithPaginationUISchema';
|
|
||||||
|
|
||||||
export const RecordAssociationDetailsBlockInitializer = () => {
|
export const RecordAssociationDetailsBlockInitializer = () => {
|
||||||
const itemConfig = useSchemaInitializerItem();
|
const itemConfig = useSchemaInitializerItem();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user