Skip to content

Commit c079463

Browse files
committed
Switching UI approach from grid
Changing the component from grid based to input/line based.
1 parent a2e64e4 commit c079463

File tree

6 files changed

+328
-626
lines changed

6 files changed

+328
-626
lines changed

newIDE/app/src/BehaviorsEditor/Editors/AnchorBehaviorEditor.js

Lines changed: 9 additions & 177 deletions
Original file line numberDiff line numberDiff line change
@@ -4,31 +4,16 @@ import { Trans } from '@lingui/macro';
44
import * as React from 'react';
55
import { type BehaviorEditorProps } from './BehaviorEditorProps.flow';
66
import BehaviorPropertiesEditor from './BehaviorPropertiesEditor';
7-
import SmallCrossIcon from '../../UI/CustomSvgIcons/SmallCross';
8-
import LeftAlignmentIcon from '../../UI/CustomSvgIcons/LeftAlignment';
9-
import CenterAlignmentIcon from '../../UI/CustomSvgIcons/CenterAlignment';
10-
import RightAlignmentIcon from '../../UI/CustomSvgIcons/RightAlignment';
11-
import FillIcon from '../../UI/CustomSvgIcons/HorizontalSize';
12-
import ProportionalFillIcon from '../../UI/CustomSvgIcons/HorizontalSizePercent';
13-
import TopAlignmentIcon from '../../UI/CustomSvgIcons/TopAlignment';
14-
import CenterVerticalAlignmentIcon from '../../UI/CustomSvgIcons/CenterVerticalAlignment';
15-
import BottomAlignmentIcon from '../../UI/CustomSvgIcons/BottomAlignment';
16-
import VerticalFillIcon from '../../UI/CustomSvgIcons/VerticalSize';
17-
import VerticalProportionalFillIcon from '../../UI/CustomSvgIcons/VerticalSizePercent';
187
import useForceUpdate from '../../Utils/UseForceUpdate';
198
import { ColumnStackLayout } from '../../UI/Layout';
209
import Text from '../../UI/Text';
2110
import {
2211
getPropertyValue,
2312
updateProperty,
2413
} from '../../ObjectEditor/CompactObjectPropertiesEditor/CompactBehaviorPropertiesEditor';
25-
import CompactToggleButtons, {
26-
type CompactToggleButton,
27-
} from '../../UI/CompactToggleButtons';
2814
import AnchorGrid from './AnchorGrid';
29-
import { propertiesToGridSelection } from './AnchorGridMapping';
3015

31-
type BasicAnchor =
16+
export type BasicAnchor =
3217
| 'None'
3318
| 'ProportionalFill'
3419
| 'FixedFill'
@@ -111,13 +96,13 @@ export const getBasicVerticalAnchor = (
11196
getAnchorProperty(getPropertyValue, 'bottomEdgeAnchor')
11297
);
11398

114-
type AnchorMapping = Array<{|
99+
export type AnchorMapping = Array<{|
115100
basicAnchor: BasicAnchor,
116101
minEdge: string,
117102
maxEdge: string,
118103
|}>;
119104

120-
const horizontalAnchorMapping: AnchorMapping = [
105+
export const horizontalAnchorMapping: AnchorMapping = [
121106
{ basicAnchor: 'None', minEdge: 'None', maxEdge: 'None' },
122107
{ basicAnchor: 'MinEdge', minEdge: 'WindowLeft', maxEdge: 'WindowLeft' },
123108
{ basicAnchor: 'Center', minEdge: 'WindowCenter', maxEdge: 'WindowCenter' },
@@ -130,7 +115,7 @@ const horizontalAnchorMapping: AnchorMapping = [
130115
},
131116
];
132117

133-
const verticalAnchorMapping: AnchorMapping = [
118+
export const verticalAnchorMapping: AnchorMapping = [
134119
{ basicAnchor: 'None', minEdge: 'None', maxEdge: 'None' },
135120
{ basicAnchor: 'MinEdge', minEdge: 'WindowTop', maxEdge: 'WindowTop' },
136121
{ basicAnchor: 'Center', minEdge: 'WindowCenter', maxEdge: 'WindowCenter' },
@@ -143,157 +128,6 @@ const verticalAnchorMapping: AnchorMapping = [
143128
},
144129
];
145130

146-
const AnchorButtonGroup = ({
147-
id,
148-
basicAnchor,
149-
minEdgePropertyName,
150-
maxEdgePropertyName,
151-
anchorMapping,
152-
renderIcon,
153-
renderTooltip,
154-
onUpdateProperty,
155-
expand,
156-
}: {|
157-
id: string,
158-
basicAnchor: BasicAnchor,
159-
minEdgePropertyName: string,
160-
maxEdgePropertyName: string,
161-
anchorMapping: Array<{|
162-
basicAnchor: BasicAnchor,
163-
minEdge: string,
164-
maxEdge: string,
165-
|}>,
166-
renderIcon: (basicAnchor: string, className?: string) => React.Node,
167-
renderTooltip: (basicAnchor: string) => React.Node,
168-
onUpdateProperty: (propertyName: string, value: string) => void,
169-
expand?: boolean,
170-
|}): React.Node => {
171-
const buttons: Array<CompactToggleButton> = anchorMapping.map(item => ({
172-
id: item.basicAnchor,
173-
renderIcon: (className?: string) => renderIcon(item.basicAnchor, className),
174-
tooltip: renderTooltip(item.basicAnchor),
175-
isActive: basicAnchor === item.basicAnchor,
176-
onClick: () => {
177-
onUpdateProperty(minEdgePropertyName, item.minEdge);
178-
onUpdateProperty(maxEdgePropertyName, item.maxEdge);
179-
},
180-
}));
181-
182-
return <CompactToggleButtons id={id} buttons={buttons} expand={false} />;
183-
};
184-
185-
export const HorizontalAnchorButtonGroup = ({
186-
basicAnchor,
187-
onUpdateProperty,
188-
expand,
189-
}: {|
190-
basicAnchor: BasicAnchor,
191-
onUpdateProperty: (propertyName: string, value: string) => void,
192-
expand?: boolean,
193-
|}): React.Node => {
194-
return (
195-
<AnchorButtonGroup
196-
id="horizontal-anchor"
197-
basicAnchor={basicAnchor}
198-
minEdgePropertyName="leftEdgeAnchor"
199-
maxEdgePropertyName="rightEdgeAnchor"
200-
anchorMapping={horizontalAnchorMapping}
201-
renderIcon={(basicAnchor, className) => {
202-
switch (basicAnchor) {
203-
case 'MinEdge':
204-
return <LeftAlignmentIcon class={className} />;
205-
case 'Center':
206-
return <CenterAlignmentIcon class={className} />;
207-
case 'MaxEdge':
208-
return <RightAlignmentIcon class={className} />;
209-
case 'FixedFill':
210-
return <FillIcon class={className} />;
211-
case 'ProportionalFill':
212-
return <ProportionalFillIcon class={className} />;
213-
case 'None':
214-
default:
215-
return <SmallCrossIcon class={className} />;
216-
}
217-
}}
218-
renderTooltip={basicAnchor => {
219-
switch (basicAnchor) {
220-
case 'MinEdge':
221-
return <Trans>Left</Trans>;
222-
case 'Center':
223-
return <Trans>Center</Trans>;
224-
case 'MaxEdge':
225-
return <Trans>Right</Trans>;
226-
case 'FixedFill':
227-
return <Trans>Fill</Trans>;
228-
case 'ProportionalFill':
229-
return <Trans>Fill proportionally</Trans>;
230-
case 'None':
231-
default:
232-
return <Trans>None</Trans>;
233-
}
234-
}}
235-
onUpdateProperty={onUpdateProperty}
236-
expand={expand}
237-
/>
238-
);
239-
};
240-
241-
export const VerticalAnchorButtonGroup = ({
242-
basicAnchor,
243-
onUpdateProperty,
244-
expand,
245-
}: {|
246-
basicAnchor: BasicAnchor,
247-
onUpdateProperty: (propertyName: string, value: string) => void,
248-
expand?: boolean,
249-
|}): React.Node => {
250-
return (
251-
<AnchorButtonGroup
252-
id="vertical-anchor"
253-
basicAnchor={basicAnchor}
254-
minEdgePropertyName="topEdgeAnchor"
255-
maxEdgePropertyName="bottomEdgeAnchor"
256-
anchorMapping={verticalAnchorMapping}
257-
renderIcon={(basicAnchor, className) => {
258-
switch (basicAnchor) {
259-
case 'MinEdge':
260-
return <TopAlignmentIcon class={className} />;
261-
case 'Center':
262-
return <CenterVerticalAlignmentIcon class={className} />;
263-
case 'MaxEdge':
264-
return <BottomAlignmentIcon class={className} />;
265-
case 'FixedFill':
266-
return <VerticalFillIcon class={className} />;
267-
case 'ProportionalFill':
268-
return <VerticalProportionalFillIcon class={className} />;
269-
case 'None':
270-
default:
271-
return <SmallCrossIcon class={className} />;
272-
}
273-
}}
274-
renderTooltip={basicAnchor => {
275-
switch (basicAnchor) {
276-
case 'MinEdge':
277-
return <Trans>Top</Trans>;
278-
case 'Center':
279-
return <Trans>Center</Trans>;
280-
case 'MaxEdge':
281-
return <Trans>Bottom</Trans>;
282-
case 'FixedFill':
283-
return <Trans>Fill</Trans>;
284-
case 'ProportionalFill':
285-
return <Trans>Fill proportionally</Trans>;
286-
case 'None':
287-
default:
288-
return <Trans>None</Trans>;
289-
}
290-
}}
291-
onUpdateProperty={onUpdateProperty}
292-
expand={expand}
293-
/>
294-
);
295-
};
296-
297131
type Props = BehaviorEditorProps;
298132

299133
const AnchorBehaviorEditor = ({
@@ -325,12 +159,9 @@ const AnchorBehaviorEditor = ({
325159
[forceUpdate, onBehaviorUpdated]
326160
);
327161

328-
const gridSelection = propertiesToGridSelection(
329-
_getPropertyValue('leftEdgeAnchor'),
330-
_getPropertyValue('rightEdgeAnchor'),
331-
_getPropertyValue('topEdgeAnchor'),
332-
_getPropertyValue('bottomEdgeAnchor')
333-
);
162+
const isAdvanced =
163+
getBasicHorizontalAnchor(_getPropertyValue) === 'Advanced' ||
164+
getBasicVerticalAnchor(_getPropertyValue) === 'Advanced';
334165

335166
return (
336167
<ColumnStackLayout expand>
@@ -340,6 +171,7 @@ const AnchorBehaviorEditor = ({
340171
<AnchorGrid
341172
getPropertyValue={_getPropertyValue}
342173
onUpdateProperty={_updateProperty}
174+
initialInstance={null}
343175
/>
344176
<BehaviorPropertiesEditor
345177
project={project}
@@ -349,7 +181,7 @@ const AnchorBehaviorEditor = ({
349181
resourceManagementProps={resourceManagementProps}
350182
projectScopedContainersAccessor={projectScopedContainersAccessor}
351183
isAdvancedSectionInitiallyUncollapsed={
352-
gridSelection.isAdvanced ||
184+
isAdvanced ||
353185
_getPropertyValue('relativeToOriginalWindowSize') === 'false'
354186
}
355187
/>

0 commit comments

Comments
 (0)