mirror of
https://gitee.com/nocobase/nocobase.git
synced 2025-07-01 18:52:20 +08:00
Merge branch '2.0' of github.com:nocobase/nocobase into 2.0
This commit is contained in:
commit
1d17e3d8fb
@ -11,6 +11,22 @@ import React from 'react';
|
|||||||
import { ReadPrettyFieldModel } from '../ReadPrettyFieldModel';
|
import { ReadPrettyFieldModel } from '../ReadPrettyFieldModel';
|
||||||
|
|
||||||
export class AssociationReadPrettyFieldModel extends ReadPrettyFieldModel {
|
export class AssociationReadPrettyFieldModel extends ReadPrettyFieldModel {
|
||||||
resource;
|
|
||||||
targetCollection;
|
targetCollection;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AssociationReadPrettyFieldModel.registerFlow({
|
||||||
|
key: 'AssociationReadPrettyFieldDefault',
|
||||||
|
auto: true,
|
||||||
|
sort: 150,
|
||||||
|
steps: {
|
||||||
|
step1: {
|
||||||
|
handler(ctx, params) {
|
||||||
|
const { collectionField } = ctx.model;
|
||||||
|
const { target } = collectionField?.options || {};
|
||||||
|
const collectionManager = collectionField.collection.collectionManager;
|
||||||
|
const targetCollection = collectionManager.getCollection(target);
|
||||||
|
ctx.model.targetCollection = targetCollection;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
@ -8,10 +8,28 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import { Button } from 'antd';
|
||||||
|
import { tval } from '@nocobase/utils/client';
|
||||||
import { AssociationReadPrettyFieldModel } from './AssociationReadPrettyFieldModel';
|
import { AssociationReadPrettyFieldModel } from './AssociationReadPrettyFieldModel';
|
||||||
import { FlowEngineProvider, reactive } from '@nocobase/flow-engine';
|
import { FlowEngineProvider, reactive } from '@nocobase/flow-engine';
|
||||||
import { getUniqueKeyFromCollection } from '../../../../../collection-manager/interfaces/utils';
|
import { getUniqueKeyFromCollection } from '../../../../../collection-manager/interfaces/utils';
|
||||||
import { tval } from '@nocobase/utils/client';
|
|
||||||
|
const LinkToggleWrapper = ({ enableLink, children, currentRecord, ...props }) => {
|
||||||
|
return enableLink ? (
|
||||||
|
<Button
|
||||||
|
style={{ padding: 0, height: 'auto' }}
|
||||||
|
type="link"
|
||||||
|
{...props}
|
||||||
|
onClick={(e) => {
|
||||||
|
props.onClick(e, currentRecord);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{children}
|
||||||
|
</Button>
|
||||||
|
) : (
|
||||||
|
children
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
export class AssociationSelectReadPrettyFieldModel extends AssociationReadPrettyFieldModel {
|
export class AssociationSelectReadPrettyFieldModel extends AssociationReadPrettyFieldModel {
|
||||||
public static readonly supportedFieldInterfaces = [
|
public static readonly supportedFieldInterfaces = [
|
||||||
@ -24,9 +42,13 @@ export class AssociationSelectReadPrettyFieldModel extends AssociationReadPretty
|
|||||||
'updatedBy',
|
'updatedBy',
|
||||||
'createdBy',
|
'createdBy',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
set onClick(fn) {
|
||||||
|
this.setProps({ ...this.props, onClick: fn });
|
||||||
|
}
|
||||||
@reactive
|
@reactive
|
||||||
public render() {
|
public render() {
|
||||||
const { fieldNames } = this.props;
|
const { fieldNames, enableLink = true } = this.props;
|
||||||
const value = this.getValue();
|
const value = this.getValue();
|
||||||
if (!this.collectionField || !value) {
|
if (!this.collectionField || !value) {
|
||||||
return;
|
return;
|
||||||
@ -58,27 +80,37 @@ export class AssociationSelectReadPrettyFieldModel extends AssociationReadPretty
|
|||||||
...targetLabelField.getComponentProps(),
|
...targetLabelField.getComponentProps(),
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
model.setSharedContext({ ...this.ctx.shared, value: value?.[fieldNames.label] });
|
model.setSharedContext({
|
||||||
|
...this.ctx.shared,
|
||||||
|
value: value?.[fieldNames.label],
|
||||||
|
currentRecord: value,
|
||||||
|
});
|
||||||
model.setParent(this.parent);
|
model.setParent(this.parent);
|
||||||
if (Array.isArray(value)) {
|
if (Array.isArray(value)) {
|
||||||
return (
|
return (
|
||||||
<div style={{ display: 'flex', flexWrap: 'wrap', gap: 2 }}>
|
<div style={{ display: 'flex', flexWrap: 'wrap', gap: 2 }}>
|
||||||
{value.map((v, idx) => {
|
{value.map((v, idx) => {
|
||||||
const mol = model.createFork({}, `${idx}`);
|
const mol = model.createFork({}, `${idx}`);
|
||||||
mol.setSharedContext({ index: idx, value: v?.[fieldNames.label], record: this.ctx.shared.record });
|
mol.setSharedContext({ ...this.ctx.shared, index: idx, value: v?.[fieldNames.label], currentRecord: v });
|
||||||
return (
|
return (
|
||||||
<React.Fragment key={idx}>
|
<React.Fragment key={idx}>
|
||||||
{idx > 0 && <span style={{ color: 'rgb(170, 170, 170)' }}>,</span>}
|
{idx > 0 && <span style={{ color: 'rgb(170, 170, 170)' }}>,</span>}
|
||||||
<FlowEngineProvider engine={this.flowEngine}>
|
<LinkToggleWrapper enableLink={enableLink} {...this.props} currentRecord={v}>
|
||||||
{v?.[fieldNames.label] ? mol.render() : this.flowEngine.translate('N/A')}
|
<FlowEngineProvider engine={this.flowEngine}>
|
||||||
</FlowEngineProvider>
|
{v?.[fieldNames.label] ? mol.render() : this.flowEngine.translate('N/A')}
|
||||||
|
</FlowEngineProvider>
|
||||||
|
</LinkToggleWrapper>
|
||||||
</React.Fragment>
|
</React.Fragment>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return <FlowEngineProvider engine={this.flowEngine}>{model.render()}</FlowEngineProvider>;
|
return (
|
||||||
|
<LinkToggleWrapper enableLink={enableLink} {...this.props} currentRecord={value}>
|
||||||
|
<FlowEngineProvider engine={this.flowEngine}>{model.render()}</FlowEngineProvider>
|
||||||
|
</LinkToggleWrapper>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -103,5 +135,46 @@ AssociationSelectReadPrettyFieldModel.registerFlow({
|
|||||||
ctx.model.setProps({ fieldNames: newFieldNames });
|
ctx.model.setProps({ fieldNames: newFieldNames });
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
enableLink: {
|
||||||
|
title: 'Enable link',
|
||||||
|
uiSchema: {
|
||||||
|
enableLink: {
|
||||||
|
'x-component': 'Switch',
|
||||||
|
'x-decorator': 'FormItem',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
defaultParams: {
|
||||||
|
enableLink: true,
|
||||||
|
},
|
||||||
|
handler(ctx, params) {
|
||||||
|
ctx.model.onClick = (e, currentRecord) => {
|
||||||
|
ctx.model.dispatchEvent('click', {
|
||||||
|
event: e,
|
||||||
|
filterByTk: currentRecord[ctx.model.targetCollection.filterTargetKey],
|
||||||
|
collectionName: ctx.model.targetCollection.name,
|
||||||
|
});
|
||||||
|
ctx.model.setStepParams('FormModel.default', 'step1', {
|
||||||
|
collectionName: ctx.model.targetCollection.name,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
ctx.model.setProps('enableLink', params.enableLink);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
AssociationSelectReadPrettyFieldModel.registerFlow({
|
||||||
|
key: 'handleClick',
|
||||||
|
title: tval('Click event'),
|
||||||
|
on: {
|
||||||
|
eventName: 'click',
|
||||||
|
},
|
||||||
|
steps: {
|
||||||
|
openView: {
|
||||||
|
use: 'openView',
|
||||||
|
defaultParams(ctx) {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user