ToolJet/frontend/src/Editor/Components/Text.jsx

72 lines
2.2 KiB
React
Raw Normal View History

2021-04-20 04:37:17 +00:00
import React, { useState, useEffect } from 'react';
import { resolveReferences, resolveWidgetFieldValue } from '@/_helpers/utils';
2021-04-16 08:56:07 +00:00
import DOMPurify from 'dompurify';
export const Text = function Text({ id, height, component, onComponentClick, currentState }) {
2021-04-30 06:31:32 +00:00
const text = component.definition.properties.text.value;
const color = component.definition.styles.textColor.value;
const widgetVisibility = component.definition.styles?.visibility?.value ?? true;
const disabledState = component.definition.styles?.disabledState?.value ?? false;
const parsedDisabledState =
typeof disabledState !== 'boolean' ? resolveWidgetFieldValue(disabledState, currentState) : disabledState;
2021-04-30 06:31:32 +00:00
const [loadingState, setLoadingState] = useState(false);
2021-04-30 06:31:32 +00:00
useEffect(() => {
const loadingStateProperty = component.definition.properties.loadingState;
if (loadingStateProperty && currentState) {
const newState = resolveReferences(loadingStateProperty.value, currentState, false);
2021-04-30 06:31:32 +00:00
setLoadingState(newState);
}
// eslint-disable-next-line react-hooks/exhaustive-deps
2021-04-30 06:31:32 +00:00
}, [currentState]);
let data = text;
if (currentState) {
const matchedParams = text.match(/\{\{(.*?)\}\}/g);
if (matchedParams) {
for (const param of matchedParams) {
const resolvedParam = resolveReferences(param, currentState, '');
2021-04-30 06:31:32 +00:00
console.log('resolved param', param, resolvedParam);
data = data.replace(param, resolvedParam);
}
}
2021-04-30 06:31:32 +00:00
}
2021-08-30 11:43:05 +00:00
let parsedWidgetVisibility = widgetVisibility;
2021-08-30 11:43:05 +00:00
try {
parsedWidgetVisibility = resolveReferences(parsedWidgetVisibility, currentState, []);
} catch (err) {
console.log(err);
}
2021-08-30 11:43:05 +00:00
2021-04-30 06:31:32 +00:00
const computedStyles = {
color,
2021-06-22 14:32:22 +00:00
height,
2021-08-30 11:43:05 +00:00
display: parsedWidgetVisibility ? 'flex' : 'none',
alignItems: 'center',
2021-04-30 06:31:32 +00:00
};
return (
<div
data-disabled={parsedDisabledState}
className="text-widget"
style={computedStyles}
onClick={(event) => {
event.stopPropagation();
Feature: Collaboration ( realtime comments for canvas ) 🔥 (#810) * feat: initial commit for collaboration feature * add dnd to comments * add positions endpoint * feat: encapsulate all http common logic in http-client * segregate sections and transfer responsibility of state * feat: use-spring to add fade effect :zap: * fix: open in right * fix: left-right position css * add footer for message * integrate getcomment endpoint * use fromnow for date ago * add dnd * - Add data trasfer object for comment - Add class-validator package to check the response type from client - Add comment repository class for persistance layer - Add comment service with std. http methods - Update controller with all http methods - Update comment module - Fix http-client bug when error is thrown * fix http client bug when error is thrown * feat: add entity thread * feat: add migrations for thread and comment * update entitites * add tid to migration * filter comments by tid(thread_id) * fix: comment migration, add missing column comment * feat: integrate in ui * feat: split comments based on app_id * fix: dnd to correct position * package json engines * engines update * update npm * npm 6 to 7 * fix: add user initials to thread * fix: add firtname lastname to the comments * - Return user object when save thread called - Hide password field from user response - Fix created_at date typo - Instead of fetch all threads on new thread added, add the response to array of existing threads * feat: update ui components * change icon on comments view * ui fixes * fix: close icon close the popover * temp: comment select: false * use currentUser from localStorage * fix: on click outside if comment is open, dont hit addThread * fix: auth token issue in http-client * on drag hide the comment if open * add jwt auth * spec: add test for comment & thread * cleanup: remove console.log * feat: add comment actions * feat: add edit, delete, resolve options * feat: add mentions component * feat: add nestjs websockets * temp * websocket: establish client-server communication * ws: add message listner to comments module in ui * feat: add broadcast method to broadcast new events to all clients :bomb: * ws: cleanup :call_me_hand: * fix: remove max height from comment actions * feat: add user mentions, emoji support * fix: add static list of users - temp * update and delete iterations * - Rename comment, thread to comments, threads - Add conditional actions - Show edit, delete only if he is comment owner - Show resolve only if he is thread owner * reset engines * move svgr webpack to deps * fix: ui issues * remove log stmt * refactor: move resolved icon to comment-header * feat: allow comments to be added on top of widgets * feat: add keyboard shortcut * scroll to bottom on comment add * ui fixes * feat: add react toast for notification display * feat: add comment badge * fix: ws connection * fix: ws * remove rvrse * feat: add comment sidebar * feat: add comment right sidebar * fix: add missing foreign key elements * - upgrade typeorm to 0.2.38 - comment sidebar ui - added filter ui * feat: on click of right sidebar notificaiton open the comment box * reset engines * fix: add organization id to the comment and thread module * fix: add current version id * add currentversion id * disable comments if no id present * temp:checking for heroku deploy * fetch app on edit and deploy version * rename current_version_id to app_versions_id * ui fixes * show mentioned user in blue color * add ui changes * add authorization for create thread * change color to blue on click of comment, add auth for other endpoints of thread * update threads, notifications using socket * add auth for comments * remove events spec file * fix duplicate key error * fix notificaitons updation on edit, delete, resolve buttons clicked * update notifications for edit * feature toggle changes for frontend * add check for comments server * add emoji mart package for emoji * add reply count in comment sidebar * subtract 1 from count in comment sidebar * change empty text when no comments available
2021-11-01 07:28:03 +00:00
onComponentClick(id, component, event);
}}
>
2021-04-30 06:31:32 +00:00
{!loadingState && <div dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(data) }} />}
{loadingState === true && (
<div>
2021-07-03 18:07:51 +00:00
<div className="skeleton-line w-10"></div>
2021-04-16 08:56:07 +00:00
</div>
2021-04-30 06:31:32 +00:00
)}
</div>
);
};