2021-09-13 18:04:07 +00:00
|
|
|
import React, { useEffect, useState } from 'react';
|
2021-10-20 02:20:45 +00:00
|
|
|
import { resolveReferences, resolveWidgetFieldValue } from '@/_helpers/utils';
|
2021-04-02 04:16:26 +00:00
|
|
|
|
2021-04-30 06:31:32 +00:00
|
|
|
export const TextInput = function TextInput({
|
|
|
|
|
id,
|
|
|
|
|
height,
|
|
|
|
|
component,
|
|
|
|
|
onComponentClick,
|
|
|
|
|
currentState,
|
2021-09-16 12:01:22 +00:00
|
|
|
onComponentOptionChanged,
|
2021-10-20 02:20:45 +00:00
|
|
|
validate,
|
2021-04-30 06:31:32 +00:00
|
|
|
}) {
|
|
|
|
|
const placeholder = component.definition.properties.placeholder.value;
|
2021-09-02 14:11:59 +00:00
|
|
|
const widgetVisibility = component.definition.styles?.visibility?.value ?? true;
|
|
|
|
|
const disabledState = component.definition.styles?.disabledState?.value ?? false;
|
|
|
|
|
|
2021-09-16 12:01:22 +00:00
|
|
|
const parsedDisabledState =
|
|
|
|
|
typeof disabledState !== 'boolean' ? resolveWidgetFieldValue(disabledState, currentState) : disabledState;
|
2021-08-30 11:43:05 +00:00
|
|
|
|
|
|
|
|
let parsedWidgetVisibility = widgetVisibility;
|
2021-09-06 08:50:38 +00:00
|
|
|
const value = currentState?.components[component?.name]?.value;
|
2021-09-07 05:11:57 +00:00
|
|
|
const currentValidState = currentState?.components[component?.name]?.isValid;
|
2021-09-16 12:01:22 +00:00
|
|
|
|
2021-09-13 18:04:07 +00:00
|
|
|
const [text, setText] = useState(value);
|
|
|
|
|
|
|
|
|
|
const textProperty = component.definition.properties.value;
|
|
|
|
|
let newText = value;
|
|
|
|
|
if (textProperty && currentState) {
|
|
|
|
|
newText = resolveReferences(textProperty.value, currentState, '');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
setText(newText);
|
|
|
|
|
onComponentOptionChanged(component, 'value', newText);
|
2021-09-21 13:48:28 +00:00
|
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
2021-09-13 18:04:07 +00:00
|
|
|
}, [newText]);
|
2021-09-06 08:50:38 +00:00
|
|
|
|
2021-10-20 02:20:45 +00:00
|
|
|
const validationData = validate(value);
|
2021-09-06 08:50:38 +00:00
|
|
|
|
|
|
|
|
const { isValid, validationError } = validationData;
|
|
|
|
|
|
2021-09-16 12:01:22 +00:00
|
|
|
if (currentValidState !== isValid) {
|
2021-09-07 05:11:57 +00:00
|
|
|
onComponentOptionChanged(component, 'isValid', isValid);
|
|
|
|
|
}
|
|
|
|
|
|
2021-08-30 11:43:05 +00:00
|
|
|
try {
|
|
|
|
|
parsedWidgetVisibility = resolveReferences(parsedWidgetVisibility, currentState, []);
|
2021-09-16 12:01:22 +00:00
|
|
|
} catch (err) {
|
|
|
|
|
console.log(err);
|
|
|
|
|
}
|
2021-04-04 13:11:17 +00:00
|
|
|
|
2021-04-30 06:31:32 +00:00
|
|
|
return (
|
2021-09-06 08:50:38 +00:00
|
|
|
<div>
|
|
|
|
|
<input
|
|
|
|
|
disabled={parsedDisabledState}
|
2021-09-16 12:01:22 +00:00
|
|
|
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-09-16 12:01:22 +00:00
|
|
|
}}
|
2021-09-13 18:04:07 +00:00
|
|
|
onChange={(e) => {
|
|
|
|
|
setText(e.target.value);
|
|
|
|
|
onComponentOptionChanged(component, 'value', e.target.value);
|
|
|
|
|
}}
|
2021-09-06 08:50:38 +00:00
|
|
|
type="text"
|
|
|
|
|
className={`form-control ${!isValid ? 'is-invalid' : ''} validation-without-icon`}
|
|
|
|
|
placeholder={placeholder}
|
2021-11-16 11:44:09 +00:00
|
|
|
style={{ height, display: parsedWidgetVisibility ? '' : 'none' }}
|
2021-09-13 18:04:07 +00:00
|
|
|
value={text}
|
2021-09-06 08:50:38 +00:00
|
|
|
/>
|
2021-09-06 14:32:09 +00:00
|
|
|
<div className="invalid-feedback">{validationError}</div>
|
2021-09-06 08:50:38 +00:00
|
|
|
</div>
|
2021-04-30 06:31:32 +00:00
|
|
|
);
|
2021-04-02 04:16:26 +00:00
|
|
|
};
|