Skip to content

Commit

Permalink
🛠️ fix: Correct Unwanted Newlines after Undo in Textarea (danny-avila…
Browse files Browse the repository at this point in the history
…#2289)

* docs: edit docker_override note for deploy-compose

* 🛠️  fix: Correct Unwanted Newlines after Undo in Textarea
  • Loading branch information
danny-avila authored Apr 2, 2024
1 parent 656cb46 commit 8e8e887
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 9 deletions.
13 changes: 11 additions & 2 deletions client/src/hooks/Input/useTextarea.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { EModelEndpoint } from 'librechat-data-provider';
import type { TEndpointOption } from 'librechat-data-provider';
import type { UseFormSetValue } from 'react-hook-form';
import type { KeyboardEvent } from 'react';
import { forceResize, insertTextAtCursor, getAssistantName } from '~/utils';
import { forceResize, insertTextAtCursor, trimUndoneRange, getAssistantName } from '~/utils';
import { useAssistantsMapContext } from '~/Providers/AssistantsMapContext';
import useGetSender from '~/hooks/Conversations/useGetSender';
import useFileHandling from '~/hooks/Files/useFileHandling';
Expand Down Expand Up @@ -157,7 +157,16 @@ export default function useTextarea({
const handleKeyUp = (e: KeyEvent) => {
const target = e.target as HTMLTextAreaElement;

if (e.keyCode === 8 && target.value.trim() === '') {
const isUndo = e.key === 'z' && (e.ctrlKey || e.metaKey);
if (isUndo && target.value.trim() === '') {
textAreaRef.current?.setRangeText('', 0, textAreaRef.current?.value?.length, 'end');
forceResize(textAreaRef);
} else if (isUndo) {
trimUndoneRange(textAreaRef);
forceResize(textAreaRef);
}

if ((e.keyCode === 8 || e.key === 'Backspace') && target.value.trim() === '') {
textAreaRef.current?.setRangeText('', 0, textAreaRef.current?.value?.length, 'end');
}

Expand Down
27 changes: 23 additions & 4 deletions client/src/utils/textarea.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,28 @@ export function insertTextAtCursor(element: HTMLTextAreaElement, textToInsert: s
3) Reseting back to scrollHeight reads and applies the ideal height for the current content dynamically
*/
export const forceResize = (textAreaRef: React.RefObject<HTMLTextAreaElement>) => {
if (textAreaRef.current) {
textAreaRef.current.style.height = 'auto';
textAreaRef.current.offsetHeight;
textAreaRef.current.style.height = `${textAreaRef.current.scrollHeight}px`;
if (!textAreaRef.current) {
return;
}
textAreaRef.current.style.height = 'auto';
textAreaRef.current.offsetHeight;
textAreaRef.current.style.height = `${textAreaRef.current.scrollHeight}px`;
};

/**
* Necessary undo event helper for edge cases where undoing pasted content leaves newlines filling the previous container height.
*/
export const trimUndoneRange = (textAreaRef: React.RefObject<HTMLTextAreaElement>) => {
if (!textAreaRef.current) {
return;
}
const { value, selectionStart, selectionEnd } = textAreaRef.current;
const afterCursor = value.substring(selectionEnd).trim();
if (afterCursor.length) {
return;
}
const beforeCursor = value.substring(0, selectionStart);
const newValue = beforeCursor + afterCursor;
textAreaRef.current.value = newValue;
textAreaRef.current.setSelectionRange(selectionStart, selectionStart);
};
8 changes: 5 additions & 3 deletions docs/install/configuration/docker_override.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,11 +109,13 @@ The npm commands for "deployed" do this for you but they do not account for over
"stop:deployed": "docker compose -f ./deploy-compose.yml down",
```

For example, if you use `deploy-compose.yml` as your main Docker Compose configuration and you have an override file named `deploy-compose.override.yml` (you can name the override file whatever you want), you would run Docker Compose commands like so:
I would include the default override file in these commands, but doing so would require one to exist for every setup.

If you use `deploy-compose.yml` as your main Docker Compose configuration and you have an override file named `docker-compose.override.yml` (you can name the override file whatever you want, but you may have this specific file already), you would run Docker Compose commands like so:

```bash
docker compose -f deploy-compose.yml -f deploy-compose.override.yml pull
docker compose -f deploy-compose.yml -f deploy-compose.override.yml up
docker compose -f deploy-compose.yml -f docker-compose.override.yml pull
docker compose -f deploy-compose.yml -f docker-compose.override.yml up
```

## MongoDB Authentication
Expand Down

0 comments on commit 8e8e887

Please sign in to comment.