Skip to content

Commit 6923e1b

Browse files
Merge pull request #1769 from iamfaran/fix/event-handlers
[Fix]: backward compatibility for button, link and links column types
2 parents 4022c65 + 62285ce commit 6923e1b

File tree

2 files changed

+45
-60
lines changed

2 files changed

+45
-60
lines changed

client/packages/lowcoder/src/comps/comps/tableComp/column/columnTypeComps/columnLinkComp.tsx

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,23 @@ import {
44
ColumnTypeCompBuilder,
55
ColumnTypeViewFn,
66
} from "comps/comps/tableComp/column/columnTypeCompBuilder";
7-
import { ActionSelectorControlInContext } from "comps/controls/actionSelector/actionSelectorControl";
87
import { BoolCodeControl, StringControl } from "comps/controls/codeControl";
98
import { trans } from "i18n";
109
import { disabledPropertyView } from "comps/utils/propertyUtils";
1110
import styled, { css } from "styled-components";
1211
import { styleControl } from "comps/controls/styleControl";
1312
import { TableColumnLinkStyle } from "comps/controls/styleControlConstants";
1413
import { clickEvent, eventHandlerControl } from "comps/controls/eventHandlerControl";
14+
import { migrateOldData } from "@lowcoder-ee/comps/generators/simpleGenerators";
15+
import { fixOldActionData } from "comps/comps/tableComp/column/simpleColumnTypeComps";
1516

1617
export const ColumnValueTooltip = trans("table.columnValueTooltip");
1718

1819
const LinkEventOptions = [clickEvent] as const;
1920

2021
const childrenMap = {
2122
text: StringControl,
22-
onClick: ActionSelectorControlInContext,
23-
onEvent: eventHandlerControl(LinkEventOptions),
23+
onClick: eventHandlerControl(LinkEventOptions),
2424
disabled: BoolCodeControl,
2525
style: styleControl(TableColumnLinkStyle),
2626
};
@@ -38,12 +38,11 @@ const StyledLink = styled.a<{ $disabled: boolean }>`
3838
`;
3939

4040
// Memoized link component
41-
export const ColumnLink = React.memo(({ disabled, label, onClick, onEvent }: { disabled: boolean; label: string; onClick?: () => void; onEvent?: (eventName: string) => void }) => {
41+
export const ColumnLink = React.memo(({ disabled, label, onClick }: { disabled: boolean; label: string; onClick?: (eventName: string) => void }) => {
4242
const handleClick = useCallback(() => {
4343
if (disabled) return;
44-
onClick?.();
45-
// onEvent?.("click");
46-
}, [disabled, onClick, onEvent]);
44+
onClick?.("click");
45+
}, [disabled, onClick]);
4746

4847
return (
4948
<StyledLink
@@ -105,7 +104,7 @@ LinkEdit.displayName = 'LinkEdit';
105104

106105
const getBaseValue: ColumnTypeViewFn<typeof childrenMap, string, string> = (props) => props.text;
107106

108-
export const LinkComp = (function () {
107+
const LinkCompTmp = (function () {
109108
return new ColumnTypeCompBuilder(
110109
childrenMap,
111110
(props, dispatch) => {
@@ -129,11 +128,7 @@ export const LinkComp = (function () {
129128
tooltip: ColumnValueTooltip,
130129
})}
131130
{disabledPropertyView(children)}
132-
{/* {children.onEvent.propertyView()} */}
133-
{children.onClick.propertyView({
134-
label: trans("table.action"),
135-
placement: "table",
136-
})}
131+
{children.onClick.propertyView()}
137132
</>
138133
))
139134
.setStylePropertyViewFn((children) => (
@@ -143,3 +138,5 @@ export const LinkComp = (function () {
143138
))
144139
.build();
145140
})();
141+
142+
export const LinkComp = migrateOldData(LinkCompTmp, fixOldActionData);
Lines changed: 35 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import React, { useState, useRef, useEffect, useCallback, useMemo } from "react";
22
import { default as Menu } from "antd/es/menu";
33
import { ColumnTypeCompBuilder } from "comps/comps/tableComp/column/columnTypeCompBuilder";
4-
import { ActionSelectorControlInContext } from "comps/controls/actionSelector/actionSelectorControl";
54
import { BoolCodeControl, StringControl } from "comps/controls/codeControl";
65
import { manualOptionsControl } from "comps/controls/optionsControl";
76
import { MultiCompBuilder } from "comps/generators";
@@ -11,6 +10,8 @@ import styled from "styled-components";
1110
import { ColumnLink } from "comps/comps/tableComp/column/columnTypeComps/columnLinkComp";
1211
import { LightActiveTextColor, PrimaryColor } from "constants/style";
1312
import { clickEvent, eventHandlerControl } from "comps/controls/eventHandlerControl";
13+
import { migrateOldData } from "@lowcoder-ee/comps/generators/simpleGenerators";
14+
import { fixOldActionData } from "comps/comps/tableComp/column/simpleColumnTypeComps";
1415

1516
const MenuLinkWrapper = styled.div`
1617
> a {
@@ -38,16 +39,35 @@ const MenuWrapper = styled.div`
3839
}
3940
`;
4041

41-
const LinksEventOptions = [clickEvent] as const;
42+
const LinkEventOptions = [clickEvent] as const;
4243

43-
// Update OptionItem to include event handlers
44-
const OptionItem = new MultiCompBuilder(
44+
// Memoized menu item component
45+
const MenuItem = React.memo(({ option, index }: { option: any; index: number }) => {
46+
const handleClick = useCallback(() => {
47+
if (!option.disabled && option.onClick) {
48+
option.onClick("click");
49+
}
50+
}, [option.disabled, option.onClick]);
51+
52+
return (
53+
<MenuLinkWrapper>
54+
<ColumnLink
55+
disabled={option.disabled}
56+
label={option.label}
57+
onClick={handleClick}
58+
/>
59+
</MenuLinkWrapper>
60+
);
61+
});
62+
63+
MenuItem.displayName = 'MenuItem';
64+
65+
const OptionItemTmp = new MultiCompBuilder(
4566
{
4667
label: StringControl,
47-
onClick: ActionSelectorControlInContext,
68+
onClick: eventHandlerControl(LinkEventOptions),
4869
hidden: BoolCodeControl,
4970
disabled: BoolCodeControl,
50-
onEvent: eventHandlerControl(LinksEventOptions),
5171
},
5272
(props) => {
5373
return props;
@@ -57,50 +77,18 @@ const OptionItem = new MultiCompBuilder(
5777
return (
5878
<>
5979
{children.label.propertyView({ label: trans("label") })}
60-
{children.onClick.propertyView({
61-
label: trans("table.action"),
62-
placement: "table",
63-
})}
6480
{hiddenPropertyView(children)}
6581
{disabledPropertyView(children)}
66-
{/* {children.onEvent.propertyView()} */}
82+
{children.onClick.propertyView()}
6783
</>
6884
);
6985
})
7086
.build();
7187

72-
// Memoized menu item component
73-
const MenuItem = React.memo(({ option, index, onMainEvent }: { option: any; index: number; onMainEvent?: (eventName: string) => void }) => {
74-
const handleClick = useCallback(() => {
75-
if (!option.disabled) {
76-
if (option.onClick) {
77-
option.onClick();
78-
}
79-
// if (option.onEvent) {
80-
// option.onEvent("click");
81-
// }
82-
// Trigger the main component's event handler
83-
if (onMainEvent) {
84-
onMainEvent("click");
85-
}
86-
}
87-
}, [option.disabled, option.onClick, option.onEvent, onMainEvent]);
88-
89-
return (
90-
<MenuLinkWrapper>
91-
<ColumnLink
92-
disabled={option.disabled}
93-
label={option.label}
94-
onEvent={handleClick}
95-
/>
96-
</MenuLinkWrapper>
97-
);
98-
});
99-
100-
MenuItem.displayName = 'MenuItem';
88+
const OptionItem = migrateOldData(OptionItemTmp, fixOldActionData);
10189

10290
// Memoized menu component
103-
const LinksMenu = React.memo(({ options, onEvent }: { options: any[]; onEvent?: (eventName: string) => void }) => {
91+
const LinksMenu = React.memo(({ options }: { options: any[] }) => {
10492
const mountedRef = useRef(true);
10593

10694
// Cleanup on unmount
@@ -115,9 +103,9 @@ const LinksMenu = React.memo(({ options, onEvent }: { options: any[]; onEvent?:
115103
.filter((o) => !o.hidden)
116104
.map((option, index) => ({
117105
key: index,
118-
label: <MenuItem option={option} index={index} onMainEvent={onEvent} />
106+
label: <MenuItem option={option} index={index} />
119107
})),
120-
[options, onEvent]
108+
[options]
121109
);
122110

123111
return (
@@ -129,17 +117,16 @@ const LinksMenu = React.memo(({ options, onEvent }: { options: any[]; onEvent?:
129117

130118
LinksMenu.displayName = 'LinksMenu';
131119

132-
export const ColumnLinksComp = (function () {
120+
const ColumnLinksCompTmp = (function () {
133121
const childrenMap = {
134122
options: manualOptionsControl(OptionItem, {
135123
initOptions: [{ label: trans("table.option1") }],
136124
}),
137-
onEvent: eventHandlerControl(LinksEventOptions),
138125
};
139126
return new ColumnTypeCompBuilder(
140127
childrenMap,
141128
(props) => {
142-
return <LinksMenu options={props.options} onEvent={props.onEvent} />;
129+
return <LinksMenu options={props.options} />;
143130
},
144131
() => ""
145132
)
@@ -149,8 +136,9 @@ export const ColumnLinksComp = (function () {
149136
newOptionLabel: trans("table.option"),
150137
title: trans("table.optionList"),
151138
})}
152-
{children.onEvent.propertyView()}
153139
</>
154140
))
155141
.build();
156142
})();
143+
144+
export const ColumnLinksComp = migrateOldData(ColumnLinksCompTmp, fixOldActionData);

0 commit comments

Comments
 (0)