Skip to content

Commit dd23530

Browse files
authored
fix(components): fix element key editor tooltip and revert not updating validity COMPASS-8586 (#6548)
1 parent 53dc716 commit dd23530

File tree

2 files changed

+25
-4
lines changed

2 files changed

+25
-4
lines changed

packages/compass-components/src/components/document-list/element-editors.tsx

+11-1
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ export const KeyEditor: React.FunctionComponent<{
8282
enabled={!valid}
8383
trigger={({
8484
className,
85+
children,
8586
// Having a tooltip connected to the input elements is not the most
8687
// accessible thing ever and so a lot of event listeners of the
8788
// tooltip conflict with the textarea default behavior (due to
@@ -93,6 +94,8 @@ export const KeyEditor: React.FunctionComponent<{
9394
onPointerUp,
9495
onPointerDown,
9596
onMouseDown,
97+
/* eslint-enable @typescript-eslint/no-unused-vars */
98+
...triggerProps
9699
}: React.HTMLProps<HTMLInputElement>) => {
97100
return (
98101
<div className={className}>
@@ -118,7 +121,9 @@ export const KeyEditor: React.FunctionComponent<{
118121
)}
119122
style={{ width }}
120123
spellCheck="false"
124+
{...triggerProps}
121125
></input>
126+
{children}
122127
</div>
123128
);
124129
}}
@@ -185,6 +190,7 @@ export const ValueEditor: React.FunctionComponent<{
185190
onBlur,
186191
}) => {
187192
const val = String(value);
193+
const darkMode = useDarkMode();
188194

189195
const inputStyle = useMemo(() => {
190196
if (type === 'String') {
@@ -280,7 +286,11 @@ export const ValueEditor: React.FunctionComponent<{
280286
className={cx(
281287
editorReset,
282288
editorOutline,
283-
!valid && editorInvalid
289+
!valid && editorInvalid,
290+
!valid &&
291+
(darkMode
292+
? editorInvalidDarkMode
293+
: editorInvalidLightMode)
284294
)}
285295
style={inputStyle}
286296
spellCheck="false"

packages/compass-components/src/components/document-list/element.tsx

+14-3
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,17 @@ function useHadronElement(el: HadronElementType) {
9292
[el, forceUpdate]
9393
);
9494

95+
const onElementReverted = useCallback(
96+
(changedElement: HadronElementType) => {
97+
if (el.uuid === changedElement.uuid) {
98+
// When an element is reverted we check again if the key is a duplicate.
99+
setIsDuplicateKey(el.isDuplicateKey(el.key));
100+
forceUpdate();
101+
}
102+
},
103+
[el, forceUpdate]
104+
);
105+
95106
useEffect(() => {
96107
if (prevEl && prevEl !== el) {
97108
forceUpdate();
@@ -101,7 +112,7 @@ function useHadronElement(el: HadronElementType) {
101112
useEffect(() => {
102113
el.on(ElementEvents.Converted, onElementChanged);
103114
el.on(ElementEvents.Edited, onElementChanged);
104-
el.on(ElementEvents.Reverted, onElementChanged);
115+
el.on(ElementEvents.Reverted, onElementReverted);
105116
el.on(ElementEvents.Invalid, onElementChanged);
106117
el.on(ElementEvents.Valid, onElementChanged);
107118
el.on(ElementEvents.Added, onElementAddedOrRemoved);
@@ -113,15 +124,15 @@ function useHadronElement(el: HadronElementType) {
113124
return () => {
114125
el.off(ElementEvents.Converted, onElementChanged);
115126
el.off(ElementEvents.Edited, onElementChanged);
116-
el.off(ElementEvents.Reverted, onElementChanged);
127+
el.off(ElementEvents.Reverted, onElementReverted);
117128
el.off(ElementEvents.Valid, onElementChanged);
118129
el.off(ElementEvents.Added, onElementAddedOrRemoved);
119130
el.off(ElementEvents.Removed, onElementAddedOrRemoved);
120131
el.off(ElementEvents.Expanded, onElementChanged);
121132
el.off(ElementEvents.Collapsed, onElementChanged);
122133
el.off(ElementEvents.VisibleElementsChanged, onElementChanged);
123134
};
124-
}, [el, onElementChanged, onElementAddedOrRemoved]);
135+
}, [el, onElementChanged, onElementAddedOrRemoved, onElementReverted]);
125136

126137
const isValid = el.isCurrentTypeValid();
127138

0 commit comments

Comments
 (0)