Skip to content

Commit 8e64adb

Browse files
committed
Merge remote-tracking branch 'origin/release-updates' into websocket-change
2 parents 6f3f2fd + 7e19b01 commit 8e64adb

File tree

9 files changed

+119
-74
lines changed

9 files changed

+119
-74
lines changed

src/components/projects/projectId/heuristics/heuristicId/shared/HeuristicsLayout.tsx

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ export default function HeuristicsLayout(props: any) {
136136
</div>
137137
<div className="w-full overflow-hidden">
138138
<div className={`grid gap-4 ${isHeaderNormal ? 'grid-cols-2' : 'grid-cols-1'}`}>
139-
{isHeaderNormal && <div className="flex items-center mt-2">
139+
{isHeaderNormal && <div className="flex items-start mt-2">
140140
<Tooltip color="invert" placement="bottom" content={TOOLTIPS_DICT.HEURISTICS.EDIT_NAME}>
141141
<button onClick={() => openProperty(true, HeuristicsProperty.NAME)}
142142
className="flex-shrink-0 bg-white text-gray-700 text-xs font-semibold mr-3 px-4 py-2 rounded-md border border-gray-300 block float-left hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500">
@@ -148,22 +148,20 @@ export default function HeuristicsLayout(props: any) {
148148
? (<input type="text" value={currentHeuristic.name} ref={nameRef} onInput={(e: any) => changeHeuristic(e.target.value, HeuristicsProperty.NAME)}
149149
onBlur={() => openProperty(false, HeuristicsProperty.NAME)} onKeyDown={(e) => { if (e.key == 'Enter') openProperty(false, HeuristicsProperty.NAME) }}
150150
className="h-8 w-full border-gray-300 rounded-md placeholder-italic border text-gray-700 pl-4 placeholder:text-gray-400 focus:outline-none focus:ring-2 focus:ring-gray-300 focus:ring-offset-2 focus:ring-offset-gray-100" />)
151-
: (<div className="mr-4 text-sm leading-5 font-medium text-gray-500 inline-block">{currentHeuristic.name}</div>)}
151+
: (<div className="mr-4 text-sm leading-5 font-medium text-gray-500 inline-block " style={{ marginTop: '6px' }}>{currentHeuristic.name}</div>)}
152152
</div>
153153
</div>}
154-
<div className="flex items-center mt-2">
155-
<Tooltip color="invert" placement="bottom" content={TOOLTIPS_DICT.HEURISTICS.EDIT_DESCRIPTION}>
156-
<button onClick={() => openProperty(true, HeuristicsProperty.DESCRIPTION)}
157-
className="flex-shrink-0 bg-white text-gray-700 text-xs font-semibold mr-3 px-4 py-2 rounded-md border border-gray-300 block float-left hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500">
158-
Edit description
159-
</button>
160-
</Tooltip>
154+
<div className="flex items-start mt-2">
155+
<button onClick={() => openProperty(true, HeuristicsProperty.DESCRIPTION)}
156+
className="flex-shrink-0 bg-white text-gray-700 text-xs font-semibold mr-3 px-4 py-2 rounded-md border border-gray-300 block float-left hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500">
157+
Edit description
158+
</button>
161159
<div className="flex-grow" onDoubleClick={() => openProperty(true, HeuristicsProperty.DESCRIPTION)}>
162160
{isDescriptionOpen
163161
? (<input type="text" value={currentHeuristic.description} ref={descriptionRef} onInput={(e: any) => changeHeuristic(e.target.value, HeuristicsProperty.DESCRIPTION)}
164162
onBlur={() => openProperty(false, HeuristicsProperty.DESCRIPTION)} onKeyDown={(e) => { if (e.key == 'Enter') openProperty(false, HeuristicsProperty.DESCRIPTION) }}
165163
className="h-8 w-full border-gray-300 rounded-md placeholder-italic border text-gray-700 pl-4 placeholder:text-gray-400 focus:outline-none focus:ring-2 focus:ring-gray-300 focus:ring-offset-2 focus:ring-offset-gray-100" />)
166-
: (<div className="mr-4 text-sm leading-5 font-medium text-gray-500 inline-block">{currentHeuristic.description}</div>)}
164+
: (<div className="mr-4 text-sm leading-5 font-medium text-gray-500 inline-block " style={{ marginTop: '6px' }}>{currentHeuristic.description}</div>)}
167165
</div>
168166
</div>
169167
</div>

src/components/projects/projectId/labeling/sessionId/sub-components/ExtractionDisplay.tsx

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import { selectHoverGroupDict, selectSettings, selectTmpHighlightIds, setHoverGroupDict, tmpAddHighlightIds } from "@/src/reduxStore/states/pages/labeling";
1+
import { selectActiveTokenSelection, selectHoverGroupDict, selectSettings, selectTmpHighlightIds, setHoverGroupDict, tmpAddHighlightIds } from "@/src/reduxStore/states/pages/labeling";
22
import { LineBreaksType } from "@/src/types/components/projects/projectId/data-browser/data-browser";
33
import { ExtractionDisplayProps, LabelSourceHover } from "@/src/types/components/projects/projectId/labeling/labeling";
44
import { LabelingPageParts } from "@/src/types/components/projects/projectId/labeling/labeling-main-component";
55
import { Tooltip } from "@nextui-org/react";
66
import { useDispatch, useSelector } from "react-redux";
77
import style from '@/src/styles/components/projects/projectId/labeling.module.css';
8-
import { useState, forwardRef } from "react";
8+
import { useState, forwardRef, useEffect, useMemo } from "react";
99

1010
export function shouldHighlightOn(tmpHighlightIds: string[], comparedId: string[]) {
1111
return tmpHighlightIds.some((id) => comparedId.includes(id));
@@ -106,11 +106,19 @@ const ExtractionDisplay = forwardRef<HTMLInputElement, ExtractionDisplayProps>(f
106106
});
107107

108108
function TokenValue(props: any) {
109+
const activeTokenSelection = useSelector(selectActiveTokenSelection);
110+
111+
const isSelected = useMemo(() => {
112+
if (!activeTokenSelection || !props.attributeId) return false;
113+
if (activeTokenSelection.attributeId != props.attributeId) return false;
114+
return props.token.idx >= activeTokenSelection.tokenStart && props.token.idx <= activeTokenSelection.tokenEnd;
115+
}, [activeTokenSelection, props.attributeId]);
116+
109117
return (<>
110118
{props.token && props.token.value != '\n' && <label onClick={(e) => props.setSelected(e)}
111119
className={`rounded-lg hover:bg-gray-200 text-sm text-gray-500 leading-5 relative font-normal ${!props.token.nextCloser ? 'pr-1' : ''}`}
112120
data-tokenidx={props.token.idx} data-attributeid={props.attributeId}
113-
style={{ backgroundColor: props.token.selected ? '#3399FF' : null, borderRadius: props.token.selected ? '0' : null, color: props.token.selected ? 'white' : null, zIndex: '100' }}>
121+
style={{ backgroundColor: isSelected ? '#3399FF' : null, borderRadius: isSelected ? '0' : null, color: isSelected ? 'white' : null, zIndex: '100' }}>
114122
{props.token.value}
115123
</label>}
116124
</>)

src/components/projects/projectId/labeling/sessionId/sub-components/LabelSelectionBox.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { UserRole } from "@/src/types/shared/sidebar";
66
import { TOOLTIPS_DICT } from "@/src/util/tooltip-constants";
77
import { Tooltip } from "@nextui-org/react";
88
import { IconCirclePlus } from "@tabler/icons-react";
9-
import { Fragment, useEffect, useState, useCallback } from "react";
9+
import { Fragment, useEffect, useState, useCallback, useRef } from "react";
1010
import { useSelector } from "react-redux";
1111

1212
const eventListenersMap = new Map();
@@ -21,12 +21,20 @@ export default function LabelSelectionBox(props: LabelSelectionBoxProps) {
2121
const [currentLabelHotkeys, setCurrentLabelHotkeys] = useState<any>({});
2222
const [currentActiveTasks, setCurrentActiveTasks] = useState([]);
2323

24+
const clearSelectedRef = useRef(props.clearSelected);
25+
2426
useEffect(() => {
2527
if (props.activeTasks && props.activeTasks.length > 0) {
2628
setCurrentActiveTasks(props.activeTasks);
29+
} else {
30+
clearSelectedRef.current();
2731
}
2832
}, [props.activeTasks]);
2933

34+
useEffect(() => {
35+
clearSelectedRef.current = props.clearSelected;
36+
}, [props.clearSelected]);
37+
3038
useEffect(() => {
3139
let missingValues = 0;
3240
for (let key in props.labelHotkeys) {

0 commit comments

Comments
 (0)