Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FIx "<>&" UI errors #9602

Merged
merged 5 commits into from
May 15, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 2 additions & 1 deletion frontend/ee/components/UsersPage/UsersTable.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import SolidIcon from '@/_ui/Icon/SolidIcons';
import { Tooltip } from 'react-tooltip';
import UsersActionMenu from './UsersActionMenu';
import { humanizeifDefaultGroupName } from '@/_helpers/utils';
import { decodeEntities } from '@/_helpers/utils';

const UsersTable = ({
isLoading,
Expand Down Expand Up @@ -94,7 +95,7 @@ const UsersTable = ({
className="mx-3 tj-text tj-text-sm"
data-cy={`${user.name.toLowerCase().replace(/\s+/g, '-')}-user-name`}
>
{user.name}
{decodeEntities(user.name)}
</span>
</td>
<td className="text-muted">
Expand Down
5 changes: 3 additions & 2 deletions frontend/src/Editor/AppVersionsManager/AppVersionsManager.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { toast } from 'react-hot-toast';
import { shallow } from 'zustand/shallow';
import { useAppVersionStore } from '@/_stores/appVersionStore';
import { useEditorStore } from '@/_stores/editorStore';
import { decodeEntities } from '@/_helpers/utils';

const appVersionLoadingStatus = Object.freeze({
loading: 'loading',
Expand Down Expand Up @@ -80,7 +81,7 @@ export const AppVersionsManager = function ({
.del(appId, versionId)
.then(() => {
toast.dismiss(deleteingToastId);
toast.success(`Version - ${versionName} Deleted`);
toast.success(`Version - ${decodeEntities(versionName)} Deleted`);
resetDeleteModal();
setGetAppVersionStatus(appVersionLoadingStatus.loading);
})
Expand Down Expand Up @@ -111,7 +112,7 @@ export const AppVersionsManager = function ({
})}
style={{ maxWidth: '100%' }}
>
{appVersion.name}
{decodeEntities(appVersion.name)}
</div>
</div>
{isEditable && appVersion.id !== releasedVersionId && (
Expand Down
8 changes: 4 additions & 4 deletions frontend/src/Editor/AppVersionsManager/CustomSelect.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { components } from 'react-select';
import { EditVersion } from './EditVersionModal';
import { CreateVersion } from './CreateVersionModal';
import { ConfirmDialog } from '@/_components';
import { defaultAppEnvironments } from '@/_helpers/utils';
import { defaultAppEnvironments, decodeEntities } from '@/_helpers/utils';

export const Menu = (props) => {
const isEditable = props.selectProps.isEditable;
Expand All @@ -19,7 +19,7 @@ export const Menu = (props) => {
>
<div className="row" style={{ padding: '8px 12px' }}>
<div className="col-10 text-truncate tj-text-xsm color-slate12">
{props?.selectProps?.value?.appVersionName}
{props?.selectProps?.value?.appVersionName && decodeEntities(props?.selectProps?.value?.appVersionName)}
</div>
{isEditable && !props?.selectProps?.value?.isReleasedVersion && (
<div className="col-1">
Expand Down Expand Up @@ -103,7 +103,7 @@ export const SingleValue = ({ selectProps }) => {
className={cx('app-version-name text-truncate', { 'color-light-green': selectProps.value.isReleasedVersion })}
data-cy={`${selectProps.value?.appVersionName}-current-version-text`}
>
{selectProps.value?.appVersionName}
{selectProps.value?.appVersionName && decodeEntities(selectProps.value?.appVersionName)}
</div>
</div>
);
Expand Down Expand Up @@ -134,7 +134,7 @@ export const CustomSelect = ({ ...props }) => {
defaultAppEnvironments.length > 1
? 'Deleting a version will permanently remove it from all environments.'
: ''
}Are you sure you want to delete this version - ${deleteVersion.versionName}?`}
}Are you sure you want to delete this version - ${decodeEntities(deleteVersion.versionName)}?`}
onConfirm={() => deleteAppVersion(deleteVersion.versionId, deleteVersion.versionName)}
onCancel={resetDeleteModal}
/>
Expand Down
6 changes: 1 addition & 5 deletions frontend/src/Editor/DataSourceManager/DataSourceManager.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { Modal, Button, Tab, Row, Col, ListGroup } from 'react-bootstrap';
import { toast } from 'react-hot-toast';
import { getSvgIcon } from '@/_helpers/appUtils';
import { TestConnection } from './TestConnection';
import { getWorkspaceId, deepEqual } from '@/_helpers/utils';
import { getWorkspaceId, deepEqual, decodeEntities } from '@/_helpers/utils';
import {
DataBaseSources,
ApiSources,
Expand All @@ -30,10 +30,6 @@ import { DATA_SOURCE_TYPE } from '@/_helpers/constants';
import './dataSourceManager.theme.scss';
import { useAppVersionStore } from '@/_stores/appVersionStore';

function decodeEntities(encodedString) {
return encodedString.replace(/&lt;/gi, '<').replace(/&gt;/gi, '>');
}

class DataSourceManagerComponent extends React.Component {
constructor(props) {
super(props);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import React from 'react';
import Select from '@/_ui/Select';
import { decodeEntities } from '@/_helpers/utils';

export const ChangeDataSource = ({ dataSources, onChange, value }) => {
return (
<Select
className="w-100"
options={dataSources.map((ds) => ({ label: ds.name, value: ds.id }))}
options={dataSources.map((ds) => ({ label: decodeEntities(ds.name), value: ds.id }))}
value={value?.id}
onChange={(value) => {
const dataSource = dataSources.find((ds) => ds.id === value);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import Plus from '@/_ui/Icon/solidIcons/Plus';
import Information from '@/_ui/Icon/solidIcons/Information';
import { useTranslation } from 'react-i18next';
import { useNavigate } from 'react-router-dom';
import { getWorkspaceId } from '@/_helpers/utils';
import { getWorkspaceId, decodeEntities } from '@/_helpers/utils';
import { ButtonSolid } from '@/_ui/AppButton/AppButton';
import { SearchBox as SearchBox2 } from '@/_components/SearchBox';
import DataSourceIcon from './DataSourceIcon';
Expand Down Expand Up @@ -178,7 +178,7 @@ function DataSourcePicker({ dataSources, sampleDataSource, staticDataSources, da
data-cy={`${String(source.name).toLowerCase().replace(/\s+/g, '-')}-add-query-card`}
>
<DataSourceIcon source={source} height={14} styles={{ minWidth: 14 }} />
<span className="text-truncate">{source.name}</span>
<span className="text-truncate">{decodeEntities(source.name)}</span>
<Tooltip id="tooltip-for-query-panel-ds-picker-btn" className="tooltip" />
</ButtonSolid>
</Col>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { groupBy, isEmpty } from 'lodash';
import { useNavigate } from 'react-router-dom';
import DataSourceIcon from './DataSourceIcon';
import { authenticationService } from '@/_services';
import { getWorkspaceId } from '@/_helpers/utils';
import { getWorkspaceId, decodeEntities } from '@/_helpers/utils';
import { ButtonSolid } from '@/_ui/AppButton/AppButton';
import { useDataSources, useGlobalDataSources, useSampleDataSource } from '@/_stores/dataSourcesStore';
import { useDataQueriesActions } from '@/_stores/dataQueriesStore';
Expand All @@ -17,10 +17,6 @@ import SolidIcon from '@/_ui/Icon/SolidIcons';
import './../queryManager.theme.scss';
import { DATA_SOURCE_TYPE } from '@/_helpers/constants';

function decodeEntities(encodedString) {
return encodedString.replace(/&lt;/gi, '<').replace(/&gt;/gi, '>');
}

function DataSourceSelect({ isDisabled, selectRef, closePopup }) {
const dataSources = useDataSources();
const globalDataSources = useGlobalDataSources();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,7 @@ import { Button } from 'react-bootstrap';
import { cloneDeep } from 'lodash';

import ParameterList from './ParameterList';

function decodeEntities(encodedString) {
return encodedString.replace(/&lt;/gi, '<').replace(/&gt;/gi, '>');
}
import { decodeEntities } from '@/_helpers/utils';

export const QueryManagerHeader = forwardRef(({ darkMode, options, editorRef, setOptions }, ref) => {
const { renameQuery } = useDataQueriesActions();
Expand Down
6 changes: 1 addition & 5 deletions frontend/src/Editor/QueryPanel/QueryCard.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,7 @@ import { useAppVersionStore } from '@/_stores/appVersionStore';
import { shallow } from 'zustand/shallow';
import Copy from '@/_ui/Icon/solidIcons/Copy';
import DataSourceIcon from '../QueryManager/Components/DataSourceIcon';
import { isQueryRunnable } from '@/_helpers/utils';

function decodeEntities(encodedString) {
return encodedString.replace(/&lt;/gi, '<').replace(/&gt;/gi, '>');
}
import { isQueryRunnable, decodeEntities } from '@/_helpers/utils';

export const QueryCard = ({ dataQuery, darkMode = false, editorRef, appId }) => {
const selectedQuery = useSelectedQuery();
Expand Down
5 changes: 1 addition & 4 deletions frontend/src/GlobalDatasources/LIstItem/index.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,7 @@ import useGlobalDatasourceUnsavedChanges from '@/_hooks/useGlobalDatasourceUnsav
import SolidIcon from '@/_ui/Icon/SolidIcons';
import { ToolTip } from '@/_components';
import { DATA_SOURCE_TYPE } from '@/_helpers/constants';

function decodeEntities(encodedString) {
return encodedString.replace(/&lt;/g, '<').replace(/&gt;/g, '>');
}
import { decodeEntities } from '@/_helpers/utils';

export const ListItem = ({
dataSource,
Expand Down
4 changes: 2 additions & 2 deletions frontend/src/HomePage/AppCard.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import SolidIcon from '@/_ui/Icon/SolidIcons';
import BulkIcon from '@/_ui/Icon/BulkIcons';

import { getPrivateRoute, getSubpath } from '@/_helpers/routes';
import { validateName } from '@/_helpers/utils';
import { validateName, decodeEntities } from '@/_helpers/utils';
const { defaultIcon } = configs;

export default function AppCard({
Expand Down Expand Up @@ -104,7 +104,7 @@ export default function AppCard({
className="app-card-name font-weight-500 tj-text-md"
data-cy={`${app.name.toLowerCase().replace(/\s+/g, '-')}-title`}
>
{app.name}
{decodeEntities(app.name)}
</h3>
</ToolTip>
</div>
Expand Down
3 changes: 2 additions & 1 deletion frontend/src/SettingsPage/SettingsPage.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { useTranslation } from 'react-i18next';
import Layout from '@/_ui/Layout';
import { ButtonSolid } from '@/_ui/AppButton/AppButton';
import { BreadCrumbContext } from '@/App/App';
import { decodeEntities } from '@/_helpers/utils';

function SettingsPage(props) {
const currentSession = authenticationService.currentSessionValue;
Expand Down Expand Up @@ -161,7 +162,7 @@ function SettingsPage(props) {
className="form-control"
name="first-name"
placeholder={'Enter full name'}
value={fullName}
value={decodeEntities(fullName)}
onChange={(event) => setFullName(event.target.value)}
autoComplete="off"
data-cy="name-input-field"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { useTranslation } from 'react-i18next';
import { authenticationService } from '@/_services';
import SolidIcon from '@/_ui/Icon/SolidIcons';
import { ToolTip } from '@/_components';
import { decodeEntities } from '@/_helpers/utils';

const Menu = (props) => {
const { t } = useTranslation();
Expand Down Expand Up @@ -56,7 +57,7 @@ const SingleValue = ({ selectProps }) => {
<ToolTip message={selectProps?.value?.name}>
<div className="d-inline-flex align-items-center">
<div data-cy="workspace-name" className="tj-text-xsm">
{selectProps.value.name}
{decodeEntities(selectProps.value.name)}
</div>
</div>
</ToolTip>
Expand Down
4 changes: 2 additions & 2 deletions frontend/src/_components/OrganizationManager/List.jsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import React, { useState, useEffect } from 'react';
import { authenticationService } from '@/_services';
import { CustomSelect } from './CustomSelect';
import { getAvatar } from '@/_helpers/utils';
import { getAvatar, decodeEntities } from '@/_helpers/utils';
import { appendWorkspaceId, getWorkspaceIdOrSlugFromURL } from '@/_helpers/routes';
import { ToolTip } from '@/_components';

Expand Down Expand Up @@ -44,7 +44,7 @@ export const OrganizationList = function () {
</div>
<ToolTip message={org.name} placement="right">
<div className="org-name" data-cy={`${String(org.name).toLowerCase().replace(/\s+/g, '-')}-name-selector`}>
{org.name}
{decodeEntities(org.name)}
</div>
</ToolTip>
</div>
Expand Down
5 changes: 5 additions & 0 deletions frontend/src/_helpers/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -1279,3 +1279,8 @@ export const setWindowTitle = async (pageDetails, location) => {
document.title = !(pageDetails?.preview === false) ? `${pageTitle} | ${whiteLabelText}` : `${pageTitle}`;
}
};

//For <>& UI display issues
export function decodeEntities(encodedString) {
return encodedString?.replace(/&lt;/gi, '<')?.replace(/&gt;/gi, '>')?.replace(/&amp;/gi, '&');
}
3 changes: 2 additions & 1 deletion frontend/src/_ui/Breadcrumbs/index.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { Link, useLocation } from 'react-router-dom';
import SolidIcon from '../Icon/SolidIcons';
import { BreadCrumbContext } from '../../App/App';
import useBreadcrumbs from 'use-react-router-breadcrumbs';
import { decodeEntities } from '@/_helpers/utils';

export const Breadcrumbs = ({ darkMode, dataCy }) => {
const { sidebarNav } = useContext(BreadCrumbContext);
Expand All @@ -20,7 +21,7 @@ export const Breadcrumbs = ({ darkMode, dataCy }) => {
{sidebarNav?.length > 0 && <SolidIcon name="cheveronright" fill={darkMode ? '#FDFDFE' : '#131620'} />}
<li className="breadcrumb-item font-weight-500" data-cy="breadcrumb-page-title">
{' '}
{sidebarNav}
{sidebarNav && decodeEntities(sidebarNav)}
</li>
{beta && <span className="badge bg-color-primary mx-3">beta</span>}
</div>
Expand Down