Skip to content

Commit

Permalink
fix: 修复 extraName 在单元格中无效的问题 Close: baidu#8525 (baidu#9479)
Browse files Browse the repository at this point in the history
  • Loading branch information
2betop committed Jan 25, 2024
1 parent 7c79a84 commit 51e02cd
Show file tree
Hide file tree
Showing 7 changed files with 43 additions and 22 deletions.
3 changes: 2 additions & 1 deletion packages/amis/src/renderers/Card.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -549,7 +549,8 @@ export class CardRenderer extends React.Component<CardProps> {
),
rowIndex: itemIndex,
colIndex: key,
value: field.name ? resolveVariable(field.name, data) : undefined,
// 同 cell 里面逻辑一样,不要下发 value
// value: field.name ? resolveVariable(field.name, data) : undefined,
popOverContainer: this.getPopOverContainer,
onAction: this.handleAction,
onQuickChange: this.handleQuickChange
Expand Down
7 changes: 4 additions & 3 deletions packages/amis/src/renderers/Cards.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import React from 'react';
import {findDOMNode} from 'react-dom';
import {Renderer, RendererProps, buildStyle} from 'amis-core';
import {Renderer, RendererProps, buildStyle, getPropValue} from 'amis-core';
import {SchemaNode, Schema, ActionObject} from 'amis-core';
import {Button, Spinner, SpinnerExtraProps} from 'amis-ui';
import {ListStore, IListStore} from 'amis-core';
Expand Down Expand Up @@ -266,13 +266,14 @@ export default class Cards extends React.Component<GridProps, object> {

static syncItems(store: IListStore, props: GridProps, prevProps?: GridProps) {
const source = props.source;
const value = props.value || props.items;
const value = getPropValue(props, (props: GridProps) => props.items);
let items: Array<object> = [];
let updateItems = false;

if (
Array.isArray(value) &&
(!prevProps || (prevProps.value || prevProps.items) !== value)
(!prevProps ||
getPropValue(prevProps, (props: GridProps) => props.items) !== value)
) {
items = value;
updateItems = true;
Expand Down
10 changes: 6 additions & 4 deletions packages/amis/src/renderers/List.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import React from 'react';
import {findDOMNode} from 'react-dom';
import Sortable from 'sortablejs';
import omit from 'lodash/omit';
import {filterClassNameObject} from 'amis-core';
import {filterClassNameObject, getPropValue} from 'amis-core';
import {Button, Spinner, Checkbox, Icon, SpinnerExtraProps} from 'amis-ui';
import {
ListStore,
Expand Down Expand Up @@ -351,13 +351,14 @@ export default class List extends React.Component<ListProps, object> {

static syncItems(store: IListStore, props: ListProps, prevProps?: ListProps) {
const source = props.source;
const value = props.value || props.items;
const value = getPropValue(props, (props: ListProps) => props.items);
let items: Array<object> = [];
let updateItems = false;

if (
Array.isArray(value) &&
(!prevProps || (prevProps.value || prevProps.items) !== value)
(!prevProps ||
getPropValue(prevProps, (props: ListProps) => props.items) !== value)
) {
items = value;
updateItems = true;
Expand Down Expand Up @@ -1305,7 +1306,8 @@ export class ListItem extends React.Component<ListItemProps> {
'ListItem-fieldValue',
filterClassNameObject(field.className, data)
),
value: field.name ? resolveVariable(field.name, data) : undefined,
// 同 Cell 一样, 这里不要下发 value
// value: field.name ? resolveVariable(field.name, data) : undefined,
onAction: this.handleAction,
onQuickChange: this.handleQuickChange
}
Expand Down
10 changes: 8 additions & 2 deletions packages/amis/src/renderers/QuickEdit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,13 @@

import React from 'react';
import {findDOMNode} from 'react-dom';
import {RendererProps, getRendererByName, noop, setVariable} from 'amis-core';
import {
RendererProps,
getPropValue,
getRendererByName,
noop,
setVariable
} from 'amis-core';
import hoistNonReactStatic from 'hoist-non-react-statics';
import {ActionObject} from 'amis-core';
import keycode from 'keycode';
Expand Down Expand Up @@ -587,7 +593,7 @@ export const HocQuickEdit =
) {
return render('inline-form-item', schema.body[0], {
mode: 'normal',
value: value ?? '',
value: getPropValue(this.props) ?? '',
onChange: this.handleFormItemChange,
ref: this.formItemRef,
defaultStatic: false
Expand Down
16 changes: 10 additions & 6 deletions packages/amis/src/renderers/Table/Cell.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -211,12 +211,16 @@ export default function Cell({
loading: column.type === 'operation' ? false : props.loading,
btnDisabled: store.dragging,
data: data,
value: column.name
? resolveVariable(
column.name,
finalCanAccessSuperData ? item.locals : item.data
)
: column.value,

// 不要下发 value,组件基本上都会自己取
// 如果下发了表单项会认为是 controlled value
// 就不会去跑 extraName 之类的逻辑了
// value: column.name
// ? resolveVariable(
// column.name,
// finalCanAccessSuperData ? item.locals : item.data
// )
// : column.value,
popOverContainer: popOverContainer,
rowSpan: item.rowSpans[column.name as string],
quickEditFormRef: quickEditFormRef,
Expand Down
11 changes: 8 additions & 3 deletions packages/amis/src/renderers/Table/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ import {
resolveVariableAndFilter,
resizeSensor,
offset,
getStyleNumber
getStyleNumber,
getPropValue
} from 'amis-core';
import {
Button,
Expand Down Expand Up @@ -684,14 +685,18 @@ export default class Table extends React.Component<TableProps, object> {
prevProps?: TableProps
) {
const source = props.source;
const value = props.value || props.items;
const value = getPropValue(props, (props: TableProps) => props.items);
let rows: Array<object> = [];
let updateRows = false;

// 要严格比较前后的value值,否则某些情况下会导致循环update无限渲染
if (
Array.isArray(value) &&
(!prevProps || !isEqual(prevProps.value || prevProps.items, value))
(!prevProps ||
!isEqual(
getPropValue(prevProps, (props: TableProps) => props.items),
value
))
) {
updateRows = true;
rows = value;
Expand Down
8 changes: 5 additions & 3 deletions packages/amis/src/renderers/Table2/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ import {
filterTarget,
changedEffect,
evalExpressionWithConditionBuilder,
normalizeApi
normalizeApi,
getPropValue
} from 'amis-core';
import {Icon, Table, BadgeObject, SpinnerExtraProps} from 'amis-ui';
import type {
Expand Down Expand Up @@ -604,13 +605,14 @@ export default class Table2 extends React.Component<Table2Props, object> {
prevProps?: Table2Props
) {
const source = props.source;
const value = props.value || props.items;
const value = getPropValue(props, (props: Table2Props) => props.items);
let rows: Array<object> = [];
let updateRows = false;

if (
Array.isArray(value) &&
(!prevProps || (prevProps.value || prevProps.items) !== value)
(!prevProps ||
getPropValue(prevProps, (props: Table2Props) => props.items) !== value)
) {
updateRows = true;
rows = value;
Expand Down

0 comments on commit 51e02cd

Please sign in to comment.