diff --git a/packages/react/src/components/ChatBody/ChatBody.js b/packages/react/src/components/ChatBody/ChatBody.js
index a13a472f2..2899ecfdb 100644
--- a/packages/react/src/components/ChatBody/ChatBody.js
+++ b/packages/react/src/components/ChatBody/ChatBody.js
@@ -136,18 +136,21 @@ const ChatBody = ({
setViewData(null);
};
- const onModalSubmit = useCallback(async (data, value) => {
- console.log(data);
- // const { actionId, value, blockId, appId, viewId } = data;
- // await RCInstance?.triggerBlockAction({
- // rid: RCInstance.rid,
- // actionId,
- // value,
- // blockId,
- // appId,
- // viewId,
- // });
- });
+ const onModalSubmit = useCallback(
+ async (data) => {
+ console.log(data);
+ const { actionId, value, blockId, appId, viewId } = data;
+ await RCInstance?.triggerBlockAction({
+ rid: RCInstance.rid,
+ actionId,
+ value,
+ blockId,
+ appId,
+ viewId,
+ });
+ },
+ [RCInstance]
+ );
useEffect(() => {
RCInstance.auth.onAuthChange((user) => {
diff --git a/packages/react/src/components/Menu/Menu.js b/packages/react/src/components/Menu/Menu.js
index e544228ba..9a1811634 100644
--- a/packages/react/src/components/Menu/Menu.js
+++ b/packages/react/src/components/Menu/Menu.js
@@ -31,6 +31,7 @@ const Menu = ({
className = '',
style = {},
anchor = 'right bottom',
+ isToolTip = true,
}) => {
const theme = useTheme();
const shadowCss = css`
@@ -84,10 +85,14 @@ const Menu = ({
className={appendClassNames('ec-menu-wrapper', wrapperClasses)}
style={wrapperStyles}
>
-
- {' '}
+ {isToolTip ? (
+
+ {' '}
+ setOpen(!isOpen)} />
+
+ ) : (
setOpen(!isOpen)} />
-
+ )}
{isOpen ? (
{
diff --git a/packages/react/src/components/uiKit/blocks/UiKitModal.js b/packages/react/src/components/uiKit/blocks/UiKitModal.js
index 7a3929bf7..33a90b004 100644
--- a/packages/react/src/components/uiKit/blocks/UiKitModal.js
+++ b/packages/react/src/components/uiKit/blocks/UiKitModal.js
@@ -1,164 +1,166 @@
-/* eslint-disable react/jsx-no-undef */
-/* eslint-disable import/extensions */
-/* eslint-disable import/no-unresolved */
-/* eslint-disable no-shadow */
-/* eslint-disable react/jsx-no-constructed-context-values */
-import React from 'react';
-import {
- useDebouncedCallback,
- useMutableCallback,
-} from '@rocket.chat/fuselage-hooks';
-import { kitContext } from '../contexts/kitContext';
-
-import * as ActionManager from '../../../../app/ui-message/client/ActionManager';
-import { detectEmoji } from '../../../lib/utils/detectEmoji';
-import ModalBlock from './ModalBlock';
-import { useActionManagerState } from './hooks/useActionManagerState';
-import { useValues } from './hooks/useValues';
-
-const UiKitModal = (props) => {
- const state = useActionManagerState(props);
-
- const { appId, viewId, mid: _mid, errors, view } = state;
-
- const [values, updateValues] = useValues(view.blocks);
-
- const groupStateByBlockId = (values) =>
- Object.entries(values).reduce((obj, [key, { blockId, value }]) => {
- obj[blockId] = obj[blockId] || {};
- obj[blockId][key] = value;
-
- return obj;
- }, {});
-
- const prevent = (e) => {
- if (e) {
- (e.nativeEvent || e).stopImmediatePropagation();
- e.stopPropagation();
- e.preventDefault();
- }
- };
-
- const debouncedBlockAction = useDebouncedCallback(
- (actionId, appId, value, blockId, mid) => {
- ActionManager.triggerBlockAction({
- container: {
- type: 'view',
- id: viewId,
- },
- actionId,
- appId,
- value,
- blockId,
- mid,
- });
- },
- 700
- );
-
- // TODO: this structure is atrociously wrong; we should revisit this
- const context = {
- // @ts-expect-error Property 'mid' does not exist on type 'ActionParams'.
- action: ({
- actionId,
- appId,
- value,
- blockId,
- mid = _mid,
- dispatchActionConfig,
- }) => {
- if (
- Array.isArray(dispatchActionConfig) &&
- dispatchActionConfig.includes('on_character_entered')
- ) {
- debouncedBlockAction(actionId, appId, value, blockId, mid);
- } else {
- ActionManager.triggerBlockAction({
- container: {
- type: 'view',
- id: viewId,
- },
- actionId,
- appId,
- value,
- blockId,
- mid,
- });
- }
- },
-
- state: ({ actionId, value, /* ,appId, */ blockId = 'default' }) => {
- updateValues({
- actionId,
- payload: {
- blockId,
- value,
- },
- });
- },
- ...state,
- values,
- };
-
- const handleSubmit = useMutableCallback((e) => {
- prevent(e);
- ActionManager.triggerSubmitView({
- viewId,
- appId,
- payload: {
- view: {
- ...view,
- id: viewId,
- state: groupStateByBlockId(values),
- },
- },
- });
- });
-
- const handleCancel = useMutableCallback((e) => {
- prevent(e);
- ActionManager.triggerCancel({
- viewId,
- appId,
- view: {
- ...view,
- id: viewId,
- state: groupStateByBlockId(values),
- },
- });
- });
-
- const handleClose = useMutableCallback(() => {
- ActionManager.triggerCancel({
- viewId,
- appId,
- view: {
- ...view,
- id: viewId,
- state: groupStateByBlockId(values),
- },
- isCleared: true,
- });
- });
-
- return (
-
-
-
-
-
- );
-};
-
-export default UiKitModal;
+// File is never used, already implemented a fuselage surface renderer in which everything is defined
+
+// /* eslint-disable react/jsx-no-undef */
+// /* eslint-disable import/extensions */
+// /* eslint-disable import/no-unresolved */
+// /* eslint-disable no-shadow */
+// /* eslint-disable react/jsx-no-constructed-context-values */
+// import React from 'react';
+// import {
+// useDebouncedCallback,
+// useMutableCallback,
+// } from '@rocket.chat/fuselage-hooks';
+// import { kitContext } from '../contexts/kitContext';
+
+// import * as ActionManager from '../../../../app/ui-message/client/ActionManager';
+// import { detectEmoji } from '../../../lib/utils/detectEmoji';
+// import ModalBlock from './ModalBlock';
+// import { useActionManagerState } from './hooks/useActionManagerState';
+// import { useValues } from './hooks/useValues';
+
+// const UiKitModal = (props) => {
+// const state = useActionManagerState(props);
+
+// const { appId, viewId, mid: _mid, errors, view } = state;
+
+// const [values, updateValues] = useValues(view.blocks);
+
+// const groupStateByBlockId = (values) =>
+// Object.entries(values).reduce((obj, [key, { blockId, value }]) => {
+// obj[blockId] = obj[blockId] || {};
+// obj[blockId][key] = value;
+
+// return obj;
+// }, {});
+
+// const prevent = (e) => {
+// if (e) {
+// (e.nativeEvent || e).stopImmediatePropagation();
+// e.stopPropagation();
+// e.preventDefault();
+// }
+// };
+
+// const debouncedBlockAction = useDebouncedCallback(
+// (actionId, appId, value, blockId, mid) => {
+// ActionManager.triggerBlockAction({
+// container: {
+// type: 'view',
+// id: viewId,
+// },
+// actionId,
+// appId,
+// value,
+// blockId,
+// mid,
+// });
+// },
+// 700
+// );
+
+// // TODO: this structure is atrociously wrong; we should revisit this
+// const context = {
+// // @ts-expect-error Property 'mid' does not exist on type 'ActionParams'.
+// action: ({
+// actionId,
+// appId,
+// value,
+// blockId,
+// mid = _mid,
+// dispatchActionConfig,
+// }) => {
+// if (
+// Array.isArray(dispatchActionConfig) &&
+// dispatchActionConfig.includes('on_character_entered')
+// ) {
+// debouncedBlockAction(actionId, appId, value, blockId, mid);
+// } else {
+// ActionManager.triggerBlockAction({
+// container: {
+// type: 'view',
+// id: viewId,
+// },
+// actionId,
+// appId,
+// value,
+// blockId,
+// mid,
+// });
+// }
+// },
+
+// state: ({ actionId, value, /* ,appId, */ blockId = 'default' }) => {
+// updateValues({
+// actionId,
+// payload: {
+// blockId,
+// value,
+// },
+// });
+// },
+// ...state,
+// values,
+// };
+
+// const handleSubmit = useMutableCallback((e) => {
+// prevent(e);
+// ActionManager.triggerSubmitView({
+// viewId,
+// appId,
+// payload: {
+// view: {
+// ...view,
+// id: viewId,
+// state: groupStateByBlockId(values),
+// },
+// },
+// });
+// });
+
+// const handleCancel = useMutableCallback((e) => {
+// prevent(e);
+// ActionManager.triggerCancel({
+// viewId,
+// appId,
+// view: {
+// ...view,
+// id: viewId,
+// state: groupStateByBlockId(values),
+// },
+// });
+// });
+
+// const handleClose = useMutableCallback(() => {
+// ActionManager.triggerCancel({
+// viewId,
+// appId,
+// view: {
+// ...view,
+// id: viewId,
+// state: groupStateByBlockId(values),
+// },
+// isCleared: true,
+// });
+// });
+
+// return (
+//
+//
+//
+//
+//
+// );
+// };
+
+// export default UiKitModal;
diff --git a/packages/react/src/components/uiKit/elements/OverflowElement.js b/packages/react/src/components/uiKit/elements/OverflowElement.js
index 66c085813..5baf45dff 100644
--- a/packages/react/src/components/uiKit/elements/OverflowElement.js
+++ b/packages/react/src/components/uiKit/elements/OverflowElement.js
@@ -1,3 +1,48 @@
+import React, { useMemo, memo } from 'react';
+import { Menu } from '../../Menu';
+import { Box } from '../../Box';
+import { useUiKitState } from '../hooks/useUiKitState';
+import { fromTextObjectToString } from '../utils/fromTextObjectToString';
+
+const OverflowElement = ({ block, context, surfaceRenderer }) => {
+ const [{ loading }, action] = useUiKitState(block, context);
+
+ console.log('--------- Overflow Element params ------- ');
+ console.log(block);
+
+ const options = useMemo(
+ () =>
+ block.options.map(({ value, text, url }, i) => ({
+ id: value,
+ label: fromTextObjectToString(surfaceRenderer, text, i) ?? '',
+ icon: undefined,
+ action: undefined,
+ })),
+ [block.options, surfaceRenderer]
+ );
+
+ console.log(options);
+
+ return (
+
+
+
+ );
+};
+
+export default memo(OverflowElement);
+
// import {
// IconButton,
// PositionAnimated,
diff --git a/packages/react/src/components/uiKit/elements/PlainTextInputElement.js b/packages/react/src/components/uiKit/elements/PlainTextInputElement.js
index fc640853a..c2fbfc378 100644
--- a/packages/react/src/components/uiKit/elements/PlainTextInputElement.js
+++ b/packages/react/src/components/uiKit/elements/PlainTextInputElement.js
@@ -28,7 +28,6 @@ const PlainTextInputElement = ({ block, context, surfaceRenderer }) => {
return (
- // );
+ return (
+
+ );
}
plain_text_input(block, context, index) {