Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitfe1deda

Browse files
committed
Merge branch 'dev' into doubleClick_event_component
2 parents5c18bfc +6923e1b commitfe1deda

File tree

5 files changed

+86
-78
lines changed

5 files changed

+86
-78
lines changed

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

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ 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";
@@ -13,15 +12,16 @@ import { styleControl } from "comps/controls/styleControl";
1312
import{TableColumnLinkStyle}from"comps/controls/styleControlConstants";
1413
import{clickEvent,eventHandlerControl,doubleClickEvent}from"comps/controls/eventHandlerControl";
1514
import{ComponentClickHandler}from"@lowcoder-ee/comps/utils/componentClickHandler";
15+
import{migrateOldData}from"@lowcoder-ee/comps/generators/simpleGenerators";
16+
import{fixOldActionData}from"comps/comps/tableComp/column/simpleColumnTypeComps";
1617

1718
exportconstColumnValueTooltip=trans("table.columnValueTooltip");
1819

1920
constLinkEventOptions=[clickEvent,doubleClickEvent]asconst;
2021

2122
constchildrenMap={
2223
text:StringControl,
23-
onClick:ActionSelectorControlInContext,
24-
onEvent:eventHandlerControl(LinkEventOptions),
24+
onClick:eventHandlerControl(LinkEventOptions),
2525
disabled:BoolCodeControl,
2626
style:styleControl(TableColumnLinkStyle),
2727
};
@@ -39,7 +39,7 @@ const StyledLink = styled.a<{ $disabled: boolean }>`
3939
`;
4040

4141
// Memoized link component
42-
exportconstColumnLink=React.memo(({ disabled, label, onClick, onEvent}:{disabled:boolean;label:string;onClick?:()=>void;onEvent?:(eventName:string)=>void})=>{
42+
exportconstColumnLink=React.memo(({ disabled, label, onClick}:{disabled:boolean;label:string;onClick?:(eventName:string)=>void})=>{
4343
consthandleClick=useCallback(()=>{
4444
if(!disabled&&onEvent){
4545
ComponentClickHandler({onEvent})();
@@ -49,6 +49,9 @@ export const ColumnLink = React.memo(({ disabled, label, onClick, onEvent }: { d
4949
// onClick?.();
5050
// // onEvent?.("click");
5151
// }, [disabled, onClick, onEvent]);
52+
// if (disabled) return;
53+
// onClick?.("click");
54+
// }, [disabled, onClick]);
5255

5356
return(
5457
<StyledLink
@@ -110,7 +113,7 @@ LinkEdit.displayName = 'LinkEdit';
110113

111114
constgetBaseValue:ColumnTypeViewFn<typeofchildrenMap,string,string>=(props)=>props.text;
112115

113-
exportconstLinkComp=(function(){
116+
constLinkCompTmp=(function(){
114117
returnnewColumnTypeCompBuilder(
115118
childrenMap,
116119
(props,dispatch)=>{
@@ -134,11 +137,7 @@ export const LinkComp = (function () {
134137
tooltip:ColumnValueTooltip,
135138
})}
136139
{disabledPropertyView(children)}
137-
{/* {children.onEvent.propertyView()} */}
138-
{children.onClick.propertyView({
139-
label:trans("table.action"),
140-
placement:"table",
141-
})}
140+
{children.onClick.propertyView()}
142141
</>
143142
))
144143
.setStylePropertyViewFn((children)=>(
@@ -148,3 +147,5 @@ export const LinkComp = (function () {
148147
))
149148
.build();
150149
})();
150+
151+
exportconstLinkComp=migrateOldData(LinkCompTmp,fixOldActionData);
Lines changed: 35 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
importReact,{useState,useRef,useEffect,useCallback,useMemo}from"react";
22
import{defaultasMenu}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";
@@ -12,6 +11,8 @@ import { ColumnLink } from "comps/comps/tableComp/column/columnTypeComps/columnL
1211
import{LightActiveTextColor,PrimaryColor}from"constants/style";
1312
import{clickEvent,eventHandlerControl,doubleClickEvent}from"comps/controls/eventHandlerControl";
1413
import{ComponentClickHandler}from"@lowcoder-ee/comps/utils/componentClickHandler";
14+
import{migrateOldData}from"@lowcoder-ee/comps/generators/simpleGenerators";
15+
import{fixOldActionData}from"comps/comps/tableComp/column/simpleColumnTypeComps";
1516

1617
constMenuLinkWrapper=styled.div`
1718
> a {
@@ -39,16 +40,35 @@ const MenuWrapper = styled.div`
3940
}
4041
`;
4142

42-
constLinksEventOptions=[clickEvent,doubleClickEvent]asconst;
43+
constLinkEventOptions=[clickEvent,doubleClickEvent]asconst;
4344

44-
// Update OptionItem to include event handlers
45-
constOptionItem=newMultiCompBuilder(
45+
// Memoized menu item component
46+
constMenuItem=React.memo(({ option, index}:{option:any;index:number})=>{
47+
consthandleClick=useCallback(()=>{
48+
if(!option.disabled&&option.onClick){
49+
option.onClick("click");
50+
}
51+
},[option.disabled,option.onClick]);
52+
53+
return(
54+
<MenuLinkWrapper>
55+
<ColumnLink
56+
disabled={option.disabled}
57+
label={option.label}
58+
onClick={handleClick}
59+
/>
60+
</MenuLinkWrapper>
61+
);
62+
});
63+
64+
MenuItem.displayName='MenuItem';
65+
66+
constOptionItemTmp=newMultiCompBuilder(
4667
{
4768
label:StringControl,
48-
onClick:ActionSelectorControlInContext,
69+
onClick:eventHandlerControl(LinkEventOptions),
4970
hidden:BoolCodeControl,
5071
disabled:BoolCodeControl,
51-
onEvent:eventHandlerControl(LinksEventOptions),
5272
},
5373
(props)=>{
5474
returnprops;
@@ -58,56 +78,18 @@ const OptionItem = new MultiCompBuilder(
5878
return(
5979
<>
6080
{children.label.propertyView({label:trans("label")})}
61-
{children.onClick.propertyView({
62-
label:trans("table.action"),
63-
placement:"table",
64-
})}
6581
{hiddenPropertyView(children)}
6682
{disabledPropertyView(children)}
67-
{/* {children.onEvent.propertyView()} */}
83+
{children.onClick.propertyView()}
6884
</>
6985
);
7086
})
7187
.build();
7288

73-
// Memoized menu item component
74-
constMenuItem=React.memo(({ option, index, onMainEvent}:{option:any;index:number;onMainEvent?:(eventName:string)=>void})=>{
75-
consthandleClick=useCallback(()=>{
76-
if(!option.disabled){
77-
// Handle both option's event and main event through ComponentClickHandler
78-
constcombinedHandler=(event:"click"|"doubleClick")=>{
79-
option.onEvent?.(event);
80-
onMainEvent?.(event);
81-
};
82-
ComponentClickHandler({onEvent:combinedHandler})();
83-
// if (option.onClick) {
84-
// option.onClick();
85-
// }
86-
// // if (option.onEvent) {
87-
// // option.onEvent("click");
88-
// //}
89-
// // Trigger the main component's event handler
90-
// if (onMainEvent) {
91-
// onMainEvent("click");
92-
// }
93-
}
94-
},[option.disabled,option.onEvent,onMainEvent]);
95-
96-
return(
97-
<MenuLinkWrapper>
98-
<ColumnLink
99-
disabled={option.disabled}
100-
label={option.label}
101-
onEvent={handleClick}
102-
/>
103-
</MenuLinkWrapper>
104-
);
105-
});
106-
107-
MenuItem.displayName='MenuItem';
89+
constOptionItem=migrateOldData(OptionItemTmp,fixOldActionData);
10890

10991
// Memoized menu component
110-
constLinksMenu=React.memo(({ options, onEvent}:{options:any[];onEvent?:(eventName:string)=>void})=>{
92+
constLinksMenu=React.memo(({ options}:{options:any[]})=>{
11193
constmountedRef=useRef(true);
11294

11395
// Cleanup on unmount
@@ -122,9 +104,9 @@ const LinksMenu = React.memo(({ options, onEvent }: { options: any[]; onEvent?:
122104
.filter((o)=>!o.hidden)
123105
.map((option,index)=>({
124106
key:index,
125-
label:<MenuItemoption={option}index={index}onMainEvent={onEvent}/>
107+
label:<MenuItemoption={option}index={index}/>
126108
})),
127-
[options,onEvent]
109+
[options]
128110
);
129111

130112
return(
@@ -136,17 +118,16 @@ const LinksMenu = React.memo(({ options, onEvent }: { options: any[]; onEvent?:
136118

137119
LinksMenu.displayName='LinksMenu';
138120

139-
exportconstColumnLinksComp=(function(){
121+
constColumnLinksCompTmp=(function(){
140122
constchildrenMap={
141123
options:manualOptionsControl(OptionItem,{
142124
initOptions:[{label:trans("table.option1")}],
143125
}),
144-
onEvent:eventHandlerControl(LinksEventOptions),
145126
};
146127
returnnewColumnTypeCompBuilder(
147128
childrenMap,
148129
(props)=>{
149-
return<LinksMenuoptions={props.options}onEvent={props.onEvent}/>;
130+
return<LinksMenuoptions={props.options}/>;
150131
},
151132
()=>""
152133
)
@@ -156,8 +137,9 @@ export const ColumnLinksComp = (function () {
156137
newOptionLabel:trans("table.option"),
157138
title:trans("table.optionList"),
158139
})}
159-
{children.onEvent.propertyView()}
160140
</>
161141
))
162142
.build();
163143
})();
144+
145+
exportconstColumnLinksComp=migrateOldData(ColumnLinksCompTmp,fixOldActionData);

‎client/packages/lowcoder/src/comps/comps/tableComp/column/simpleColumnTypeComps.tsx

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,21 @@ import { RecordConstructorToComp } from "lowcoder-core";
1515
import{ToViewReturn}from"@lowcoder-ee/comps/generators/multi";
1616
import{clickEvent,eventHandlerControl,doubleClickEvent}from"comps/controls/eventHandlerControl";
1717
import{ComponentClickHandler}from"@lowcoder-ee/comps/utils/componentClickHandler";
18+
import{migrateOldData}from"@lowcoder-ee/comps/generators/simpleGenerators";
1819

20+
exportconstfixOldActionData=(oldData:any)=>{
21+
if(!oldData)returnoldData;
22+
if(Boolean(oldData.onClick)){
23+
return{
24+
...oldData,
25+
onClick:[{
26+
name:"click",
27+
handler:oldData.onClick,
28+
}],
29+
};
30+
}
31+
returnoldData;
32+
}
1933
exportconstColumnValueTooltip=trans("table.columnValueTooltip");
2034

2135
exportconstButtonTypeOptions=[
@@ -38,8 +52,7 @@ const ButtonEventOptions = [clickEvent, doubleClickEvent] as const;
3852
constchildrenMap={
3953
text:StringControl,
4054
buttonType:dropdownControl(ButtonTypeOptions,"primary"),
41-
onEvent:eventHandlerControl(ButtonEventOptions),
42-
onClick:ActionSelectorControlInContext,
55+
onClick:eventHandlerControl(ButtonEventOptions),
4356
loading:BoolCodeControl,
4457
disabled:BoolCodeControl,
4558
prefixIcon:IconControl,
@@ -59,6 +72,8 @@ const ButtonStyled = React.memo(({ props }: { props: ToViewReturn<RecordConstruc
5972
// props.onClick?.();
6073
// // props.onEvent?.("click");
6174
// }, [props.onClick, props.onEvent]);
75+
// props.onClick?.("click");
76+
// }, [props.onClick]);
6277

6378
constbuttonStyle=useMemo(()=>({
6479
margin:0,
@@ -84,7 +99,7 @@ const ButtonStyled = React.memo(({ props }: { props: ToViewReturn<RecordConstruc
8499
);
85100
});
86101

87-
exportconstButtonComp=(function(){
102+
constButtonCompTmp=(function(){
88103
returnnewColumnTypeCompBuilder(
89104
childrenMap,
90105
(props)=><ButtonStyledprops={props}/>,
@@ -108,12 +123,10 @@ export const ButtonComp = (function () {
108123
})}
109124
{loadingPropertyView(children)}
110125
{disabledPropertyView(children)}
111-
{/* {children.onEvent.propertyView()} */}
112-
{children.onClick.propertyView({
113-
label:trans("table.action"),
114-
placement:"table",
115-
})}
126+
{children.onClick.propertyView()}
116127
</>
117128
))
118129
.build();
119130
})();
131+
132+
exportconstButtonComp=migrateOldData(ButtonCompTmp,fixOldActionData);

‎client/packages/lowcoder/src/comps/hooks/localStorageComp.ts

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { isEmpty } from "lodash";
33
import{simpleMultiComp,stateComp,withViewFn}from"../generators";
44
import{NameConfig,withExposingConfigs}from"../generators/withExposing";
55
import{JSONObject}from"../../util/jsonTypes";
6-
import{useEffect}from"react";
6+
import{useEffect,useMemo,useCallback}from"react";
77
importisEqualfrom"fast-deep-equal";
88
import{trans}from"i18n";
99
importlogfrom"loglevel";
@@ -13,7 +13,22 @@ const APP_STORE_NAMESPACE = "lowcoder_app_local_storage";
1313
constLocalStorageCompBase=withViewFn(
1414
simpleMultiComp({values:stateComp<JSONObject>({})}),
1515
(comp)=>{
16-
// add custom event listener to update values reactively
16+
constoriginStore=localStorage.getItem(APP_STORE_NAMESPACE)||"{}";
17+
18+
letparseStore={};
19+
try{
20+
parseStore=JSON.parse(originStore);
21+
}catch(e){
22+
log.error("application local storage invalid");
23+
}
24+
25+
useEffect(()=>{
26+
constvalue=comp.children.values.value;
27+
if(!isEqual(value,parseStore)){
28+
comp.children.values.dispatchChangeValueAction(parseStore);
29+
}
30+
},[parseStore]);
31+
1732
useEffect(()=>{
1833
consthandler=()=>{
1934
try{
@@ -28,9 +43,6 @@ const LocalStorageCompBase = withViewFn(
2843
// Add listener on mount
2944
window.addEventListener("lowcoder-localstorage-updated",handler);
3045

31-
// Run once on mount to initialize
32-
handler();
33-
3446
return()=>{
3547
window.removeEventListener("lowcoder-localstorage-updated",handler);
3648
};

‎client/packages/lowcoder/src/pages/editor/editorView.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -498,8 +498,6 @@ function EditorView(props: EditorViewProps) {
498498

499499
return()=>{
500500
window.removeEventListener(eventType,updateSize);
501-
savePanelStatus(panelStatus);
502-
saveEditorModeStatus(editorModeStatus);
503501
};
504502
},[panelStatus,editorModeStatus]);
505503

@@ -553,6 +551,8 @@ function EditorView(props: EditorViewProps) {
553551
setShowShortcutList(false);
554552
setMenuKey(SiderKey.State);
555553
setHeight(undefined);
554+
savePanelStatus(panelStatus);
555+
saveEditorModeStatus(editorModeStatus);
556556
};
557557
},[]);
558558

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp