From 0e8344faaa4c718f742714f35146323c9b4bcaa0 Mon Sep 17 00:00:00 2001 From: alex Date: Sun, 4 Jun 2023 21:19:26 +0200 Subject: [PATCH] group task typing message --- src/Pages/GroupTasks/GroupTasksViewModal.js | 66 ++++++++++----------- src/utils.js | 62 +++++++++++++++++-- 2 files changed, 89 insertions(+), 39 deletions(-) diff --git a/src/Pages/GroupTasks/GroupTasksViewModal.js b/src/Pages/GroupTasks/GroupTasksViewModal.js index d70f4a3..3b5b896 100644 --- a/src/Pages/GroupTasks/GroupTasksViewModal.js +++ b/src/Pages/GroupTasks/GroupTasksViewModal.js @@ -588,9 +588,25 @@ function InputRequiredHandler({ ); }; - let lastChanges = useRef([]); + let lastChange = useRef(); let typingTimer = useRef(); + const sendTypingMessage = ( + currentGroupTaskId, + groupTaskParameterName, + inputValue + ) => { + webSocketContext.SendSocketMessage(SentMessagesCommands.TaskLocking, { + element: `${currentGroupTaskId}-${step}-${groupTaskParameterName}`, + lockedByUserId: getUserId(), + groupTaskId: currentGroupTaskId, + parameterName: groupTaskParameterName, + value: inputValue, + step: step, + rememberId: GroupTasksStepsLockedAndUserUpdateInputValueRememberId, + }); + }; + const onInputChange = ( inputValue, currentGroupTaskId, @@ -603,43 +619,23 @@ function InputRequiredHandler({ if (taskLockedByUserId !== "") return; - lastChanges.current = lastChanges.current.filter( - (lc) => - Date.now() - new Date(lc.changeTime) < Constants.GROUP_TASK_LOCKED_TIME - ); + if (Date.now() >= lastChange.current || lastChange.current === undefined) { + lastChange.current = Date.now() + 1000; - const lastChange = lastChanges.current.find((lC) => lC.step === step); - - if (lastChange === undefined) { - lastChanges.current.push({ - step: step, - changeTime: Date.now(), - }); - - webSocketContext.SendSocketMessage(SentMessagesCommands.TaskLocking, { - lockedByUserId: getUserId(), - groupTaskId: currentGroupTaskId, - step: step, - rememberId: GroupTasksStepsLockedAndUserUpdateInputValueRememberId, - }); + sendTypingMessage(currentGroupTaskId, groupTaskParameterName, inputValue); + } else { + clearTimeout(typingTimer.current); } - // sync input value with other web clients - clearTimeout(typingTimer.current); - - typingTimer.current = setTimeout(() => { - webSocketContext.SendSocketMessage( - SentMessagesCommands.UpdateGroupTaskStepUserInputValue, - { - element: `${currentGroupTaskId}-${step}-${groupTaskParameterName}`, - groupTaskId: currentGroupTaskId, - parameterName: groupTaskParameterName, - value: inputValue, - step: step, - rememberId: GroupTasksStepsLockedAndUserUpdateInputValueRememberId, - } - ); - }, 500); + typingTimer.current = setTimeout( + () => + sendTypingMessage( + currentGroupTaskId, + groupTaskParameterName, + inputValue + ), + 1000 + ); }; return ( diff --git a/src/utils.js b/src/utils.js index dbbb280..d23f929 100644 --- a/src/utils.js +++ b/src/utils.js @@ -118,7 +118,6 @@ const ReceivedMessagesCommands = { UpdateScannerLastUsed: 15, TaskLocked: 16, TaskUnlocked: 17, - UpdateGroupTaskStepUserInputValue: 18, }; // commands sent to the backend server @@ -128,7 +127,6 @@ export const SentMessagesCommands = { TaskContinueTaskStep: 3, ReloadGroupTasks: 4, TaskLocking: 5, - UpdateGroupTaskStepUserInputValue: 6, }; export function WebSocketProvider({ @@ -324,6 +322,8 @@ export function WebSocketProvider({ ) break; + console.log("body task locked", body); + setGroupTasksSteps((arr) => { const newArr = [...arr]; @@ -337,6 +337,60 @@ export function WebSocketProvider({ return newArr; }); + + // update input value + // html based DOM manipulation + const foundInput = document.getElementById(body.element); + + console.log("here", foundInput); + + if (foundInput) { + // this timeout is needed because the previous useState for the lockedByUserId takes some milliseconds to complete + setTimeout(() => setNativeValue(foundInput, body.value), 50); + } + + // update group task step as html based DOM manipulation only works if user has no other modal open + setGroupTasksSteps((arr) => { + const newArr = [...arr]; + + const stepIndex = arr.findIndex( + (arr1) => + arr1.GroupTasksId === body.groupTaskId && + arr1.Step === body.step + ); + + if (stepIndex === -1) return newArr; + + let inputs = []; + + if (newArr[stepIndex].Inputs !== "") { + inputs = JSON.parse(newArr[stepIndex].Inputs); + } + + let parameterFound = false; + + for (let i = 0; i < inputs.length; i++) { + if (inputs[i].parameterName === body.parameterName) { + inputs[i].value = body.value; + parameterFound = true; + break; + } + } + + if (!parameterFound) { + let obj = {}; + + obj["parameterName"] = body.parameterName; + obj["value"] = body.value; + + inputs.push(obj); + } + + newArr[stepIndex].Inputs = JSON.stringify(inputs); + + return newArr; + }); + break; case ReceivedMessagesCommands.TaskUnlocked: if ( @@ -359,7 +413,7 @@ export function WebSocketProvider({ return newArr; }); break; - case ReceivedMessagesCommands.UpdateGroupTaskStepUserInputValue: + /*case ReceivedMessagesCommands.UpdateGroupTaskStepUserInputValue: if ( body.rememberId === GroupTasksStepsLockedAndUserUpdateInputValueRememberId @@ -414,7 +468,7 @@ export function WebSocketProvider({ return newArr; }); - break; + break;*/ default: console.error("unknown command", cmd);