Skip to content

Commit 4079a42

Browse files
committed
feat: emojies
1 parent 528383a commit 4079a42

File tree

5 files changed

+306
-761
lines changed

5 files changed

+306
-761
lines changed

apps/frontend/src/components/launches/editor.tsx

Lines changed: 57 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
1-
import { forwardRef } from 'react';
1+
import { forwardRef, useCallback, useRef, useState } from 'react';
22
import type { MDEditorProps } from '@uiw/react-md-editor/src/Types';
33
import { RefMDEditor } from '@uiw/react-md-editor/src/Editor';
44
import { useCopilotAction, useCopilotReadable } from '@copilotkit/react-core';
55
import { CopilotTextarea } from '@copilotkit/react-textarea';
66
import clsx from 'clsx';
77
import { useUser } from '@gitroom/frontend/components/layout/user.context';
8+
import { makeId } from '@gitroom/nestjs-libraries/services/make.is';
9+
import { Transforms } from 'slate';
10+
import EmojiPicker from 'emoji-picker-react';
11+
import { Theme } from 'emoji-picker-react';
812

913
export const Editor = forwardRef<
1014
RefMDEditor,
@@ -19,6 +23,10 @@ export const Editor = forwardRef<
1923
ref: React.ForwardedRef<RefMDEditor>
2024
) => {
2125
const user = useUser();
26+
const [id] = useState(makeId(10));
27+
const newRef = useRef(null);
28+
const [emojiPickerOpen, setEmojiPickerOpen] = useState(false);
29+
2230
useCopilotReadable({
2331
description: 'Content of the post number ' + (props.order + 1),
2432
value: props.value,
@@ -38,24 +46,55 @@ export const Editor = forwardRef<
3846
},
3947
});
4048

49+
const addText = useCallback(
50+
(emoji: string) => {
51+
// @ts-ignore
52+
Transforms.insertText(newRef?.current?.editor!, emoji);
53+
},
54+
[props.value, id]
55+
);
56+
4157
return (
42-
<div className="relative bg-customColor2">
43-
<CopilotTextarea
44-
disableBranding={true}
45-
className={clsx(
46-
'!min-h-40 !max-h-80 p-2 overflow-x-hidden scrollbar scrollbar-thumb-[#612AD5] bg-customColor2 outline-none'
47-
)}
48-
value={props.value}
49-
onChange={(e) => props?.onChange?.(e.target.value)}
50-
onPaste={props.onPaste}
51-
placeholder="Write your reply..."
52-
autosuggestionsConfig={{
53-
textareaPurpose: `Assist me in writing social media posts.`,
54-
chatApiConfigs: {},
55-
disabled: !user?.tier?.ai,
56-
}}
57-
/>
58-
</div>
58+
<>
59+
<div className="flex justify-end -mt-[30px]">
60+
<div
61+
className="select-none cursor-pointer bg-customColor2 w-[40px] p-[5px] text-center rounded-tl-lg rounded-tr-lg"
62+
onClick={() => setEmojiPickerOpen(!emojiPickerOpen)}
63+
>
64+
😀
65+
</div>
66+
</div>
67+
<div className="absolute z-[200] right-0">
68+
<EmojiPicker
69+
theme={localStorage.getItem('mode') as Theme || Theme.DARK}
70+
onEmojiClick={(e) => {
71+
addText(e.emoji);
72+
setEmojiPickerOpen(false);
73+
}}
74+
open={emojiPickerOpen}
75+
/>
76+
</div>
77+
<div className="relative bg-customColor2" id={id}>
78+
<CopilotTextarea
79+
disableBranding={true}
80+
ref={newRef}
81+
className={clsx(
82+
'!min-h-40 !max-h-80 p-2 overflow-x-hidden scrollbar scrollbar-thumb-[#612AD5] bg-customColor2 outline-none'
83+
)}
84+
value={props.value}
85+
onChange={(e) => {
86+
props?.onChange?.(e.target.value);
87+
}}
88+
onPaste={props.onPaste}
89+
placeholder="Write your reply..."
90+
autosuggestionsConfig={{
91+
textareaPurpose: `Assist me in writing social media posts.`,
92+
chatApiConfigs: {},
93+
disabled: !user?.tier?.ai,
94+
}}
95+
/>
96+
</div>
97+
</>
5998
);
6099
}
61100
);

apps/frontend/src/components/launches/providers/high.order.provider.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,7 @@ export const withProvider = function <T extends object>(
413413
<div>
414414
<div className="flex gap-[4px]">
415415
<div className="flex-1 text-textColor editor">
416-
{integration?.identifier === 'linkedin' && (
416+
{(integration?.identifier === 'linkedin' || integration?.identifier === 'linkedin-page') && (
417417
<Button
418418
className="mb-[5px]"
419419
onClick={tagPersonOrCompany(

apps/frontend/src/components/layout/click.outside.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,14 @@ export const useClickOutside = (callback: () => Promise<void>) => {
44
const handleClick = (event: MouseEvent) => {
55
const selector = document.querySelector('#add-edit-modal');
66
const copilotkit = document.querySelector('.copilotKitPopup');
7+
const emoji = document.querySelector('.EmojiPickerReact');
78
if (
89
selector &&
910
!selector.contains(event.target as HTMLElement) &&
1011
copilotkit &&
11-
!copilotkit.contains(event.target as HTMLElement)
12+
!copilotkit.contains(event.target as HTMLElement) &&
13+
emoji &&
14+
!emoji.contains(event.target as HTMLElement)
1215
) {
1316
callback();
1417
}

0 commit comments

Comments
 (0)