diff --git a/app/localization/translated/be.json b/app/localization/translated/be.json index 8a2c4f31df..7cc48d1fda 100644 --- a/app/localization/translated/be.json +++ b/app/localization/translated/be.json @@ -1471,6 +1471,8 @@ "NoItemsDemo.noDataTitle": "У вас няма дадзеных", "NoPatternAnalysis.description": "Сістэма можа аўтаматычна аналізаваць вынікі тэсту, параўноўваючы трасіроўку стэка вынікаў тэсту з патэрнамі, захаванымі ў сістэме.", "NoPatternAnalysis.title": "Няма патэрнаў", + "NoPatternsAppear.description": "Шаблоны з'явяцца тут пасля стварэння вашай камандай", + "NoPatternsYet.title": "Шаблонаў пакуль няма", "NoProjectAssignments.noProjectAssignments": "Ніякіх праектных прызначэнняў", "NoResultsForFilter.checkQuery": "Праверце ваш запыт і паспрабуйце зноў", "NonPassedTestCasesTrendChart.nonPassedCases": "сцэнарыяў, якія не прайшлі", @@ -1721,7 +1723,6 @@ "ProjectsPage.assignError": "Адбылася памылка пры прысваенні праекту", "ProjectsPage.assignSuccess": "Вы прызначаныя на праект", "ProjectsPage.deleteError": "Пры выдаленні праекта ўзнікла памылка", - "ProjectsPage.deleteProjectSuccess": "Праект ''{name}'' быў паспяхова выдалены", "ProjectsPage.noResultsDescription": "Вашым крытэрам пошуку або фільтра не знойдзена ніводнага выніку. Калі ласка, паспрабуйце іншыя ключавыя словы або змяніце налады фільтра.", "ProjectsPage.projectDuplicateHint": "Праект з дадзеным найменнем ўжо існуе ў сістэме", "ProjectsPage.projectExists": "Праект з такой назвай ужо існуе ў гэтай арганізацыі", @@ -2054,7 +2055,6 @@ "UserBlock.adminBadge": "Адміністратар", "UserBlock.logout": "Выйсці", "UserBlock.profile": "Профіль", - "UserBlock.youBadge": "Вы", "UserInfo.submitError": "Ошибка! Не удается созранить изменения", "UserInfo.submitSuccess": "Змены паспяхова захаваны", "ViewTabs.disabledAnalyzer": "Сэрвіс ANALYZER не запушчаны", @@ -2189,4 +2189,4 @@ "notFoundPage.oops": "Упс. Здаецца, Вы згубіліся.", "notFoundPage.pageNotExist": "Старонка, якую Вы шукаеце, не існуе.", "notFoundPage.toHome": "Забярыце мяне адсюль" -} +} \ No newline at end of file diff --git a/app/localization/translated/es.json b/app/localization/translated/es.json index ddf10ae863..5a46a5bd5a 100644 --- a/app/localization/translated/es.json +++ b/app/localization/translated/es.json @@ -1471,6 +1471,8 @@ "NoItemsDemo.noDataTitle": "No tienes datos", "NoPatternAnalysis.description": "El sistema puede analizar automáticamente los resultados de las pruebas comparando la traza de la pila de resultados de las pruebas con los patrones almacenados en el sistema.", "NoPatternAnalysis.title": "No hay patrones", + "NoPatternsAppear.description": "Patterns will appear here once created by your team", + "NoPatternsYet.title": "No patterns yet", "NoProjectAssignments.noProjectAssignments": "No project assignments", "NoResultsForFilter.checkQuery": "Verifique su consulta e inténtelo nuevamente", "NonPassedTestCasesTrendChart.nonPassedCases": "escenarios no aprobados", @@ -1721,7 +1723,6 @@ "ProjectsPage.assignError": "Ocurrió un error al asignar al proyecto", "ProjectsPage.assignSuccess": "Ha sido asignado al proyecto", "ProjectsPage.deleteError": "Ocurrió un error al eliminar el proyecto", - "ProjectsPage.deleteProjectSuccess": "The project ''{name}'' has been successfully deleted", "ProjectsPage.noResultsDescription": "Your search or filter criteria didn't match any results. Please try different keywords or adjust your filter settings.", "ProjectsPage.projectDuplicateHint": "Ya existe un proyecto con este nombre en el esta organización", "ProjectsPage.projectExists": "Project with the same name already exists in this organization", @@ -2054,7 +2055,6 @@ "UserBlock.adminBadge": "Administrador", "UserBlock.logout": "Cerrar sesión", "UserBlock.profile": "Perfil", - "UserBlock.youBadge": "You", "UserInfo.submitError": "¡Error! No se pueden guardar los cambios", "UserInfo.submitSuccess": "Cambios guardados con éxito", "ViewTabs.disabledAnalyzer": "El servicio de ANALIZADOR no está iniciado", @@ -2189,4 +2189,4 @@ "notFoundPage.oops": "Ups. Página no encontrada.", "notFoundPage.pageNotExist": "La página que busca no existe.", "notFoundPage.toHome": "Llévame de aquí" -} +} \ No newline at end of file diff --git a/app/localization/translated/ru.json b/app/localization/translated/ru.json index 8bc6ee1a5f..e12a443aed 100644 --- a/app/localization/translated/ru.json +++ b/app/localization/translated/ru.json @@ -1471,6 +1471,8 @@ "NoItemsDemo.noDataTitle": "У вас нет данных", "NoPatternAnalysis.description": "Система может автоматически анализировать результаты теста, сравнивая трассировку стека результатов теста с паттернами, сохраненными в системе.", "NoPatternAnalysis.title": "Нет Паттернов", + "NoPatternsAppear.description": "Шаблоны появятся здесь после того, как будут созданы вашей командой", + "NoPatternsYet.title": "Пока шаблонов нет", "NoProjectAssignments.noProjectAssignments": "Никаких проектных назначений", "NoResultsForFilter.checkQuery": "Проверьте ваш запрос и попробуйте снова", "NonPassedTestCasesTrendChart.nonPassedCases": "непрошедших сценариев", @@ -1721,7 +1723,6 @@ "ProjectsPage.assignError": "В процессе назначения на проект произошла ошибка", "ProjectsPage.assignSuccess": "Вы назначены на проект", "ProjectsPage.deleteError": "При удалении проекта возникла ошибка", - "ProjectsPage.deleteProjectSuccess": "Проект ''{name}'' был успешно удален", "ProjectsPage.noResultsDescription": "Ваши критерии поиска или фильтра не дали никаких результатов. Попробуйте другие ключевые слова или измените настройки фильтра.", "ProjectsPage.projectDuplicateHint": "Проект с данным наименованием уже существует в этой организации", "ProjectsPage.projectExists": "Проект с таким названием уже существует в этой организации", @@ -2054,7 +2055,6 @@ "UserBlock.adminBadge": "Администратор", "UserBlock.logout": "Выйти", "UserBlock.profile": "Профиль", - "UserBlock.youBadge": "Вы", "UserInfo.submitError": "Ошибка! Не удается созранить изменения", "UserInfo.submitSuccess": "Изменения успешно сохранены", "ViewTabs.disabledAnalyzer": "Сервис ANALYZER не запущен", @@ -2189,4 +2189,4 @@ "notFoundPage.oops": "Упс. Страница не найдена.", "notFoundPage.pageNotExist": "Страница, которую Вы ищете, не существует.", "notFoundPage.toHome": "Заберите меня отсюда" -} +} \ No newline at end of file diff --git a/app/localization/translated/uk.json b/app/localization/translated/uk.json index c11d472b66..cb077be484 100644 --- a/app/localization/translated/uk.json +++ b/app/localization/translated/uk.json @@ -1471,6 +1471,8 @@ "NoItemsDemo.noDataTitle": "У вас немає даних", "NoPatternAnalysis.description": "Система може автоматично аналізувати результати тесту, порівнюючи трасування стека результатів тесту з патернами, збереженими у системі.", "NoPatternAnalysis.title": "Немає Патернів", + "NoPatternsAppear.description": "Шаблони з’являться тут, коли їх створить ваша команда", + "NoPatternsYet.title": "Ще немає шаблонів", "NoProjectAssignments.noProjectAssignments": "Ніяких проектних призначень", "NoResultsForFilter.checkQuery": "Перевірте ваш запит і спробуйте знову", "NonPassedTestCasesTrendChart.nonPassedCases": "сценаріїв непрошедших", @@ -1721,7 +1723,6 @@ "ProjectsPage.assignError": "У процесі призначення на проект сталася помилка", "ProjectsPage.assignSuccess": "Ви призначені на проект", "ProjectsPage.deleteError": "При видаленні проекту виникла помилка", - "ProjectsPage.deleteProjectSuccess": "Проект ''{name}'' успішно видалено", "ProjectsPage.noResultsDescription": "Ваші критерії пошуку чи фільтра не відповідають жодному результату. Будь ласка, спробуйте інші ключові слова або змініть налаштування фільтра.", "ProjectsPage.projectDuplicateHint": "Проект з таким найменуванням вже існує в цій організації", "ProjectsPage.projectExists": "Проект з такою назвою вже існує в цій організації", @@ -2054,7 +2055,6 @@ "UserBlock.adminBadge": "Адміністратор", "UserBlock.logout": "Вийти", "UserBlock.profile": "Профіль", - "UserBlock.youBadge": "Ви", "UserInfo.submitError": "Помилка! Не вдається зберегти зміни", "UserInfo.submitSuccess": "Зміни успішно збережено", "ViewTabs.disabledAnalyzer": "Сервіс ANALYZER не запущено", @@ -2189,4 +2189,4 @@ "notFoundPage.oops": "Упс. Сторінка не знайдена.", "notFoundPage.pageNotExist": "Сторінка, яку Ви шукаєте, не існує.", "notFoundPage.toHome": "Заберіть мене звідси" -} +} \ No newline at end of file diff --git a/app/localization/translated/zh.json b/app/localization/translated/zh.json index fb8fb6d7b5..77c40988f0 100644 --- a/app/localization/translated/zh.json +++ b/app/localization/translated/zh.json @@ -1471,6 +1471,8 @@ "NoItemsDemo.noDataTitle": "您没有数据", "NoPatternAnalysis.description": "系统可以通过将测试结果堆栈跟踪与系统中保存的模板进行比较来自动分析测试结果", "NoPatternAnalysis.title": "无模板规则", + "NoPatternsAppear.description": "Patterns will appear here once created by your team", + "NoPatternsYet.title": "No patterns yet", "NoProjectAssignments.noProjectAssignments": "No project assignments", "NoResultsForFilter.checkQuery": "请检查您的查询条件,然后重试", "NonPassedTestCasesTrendChart.nonPassedCases": "的未通过用例", @@ -1721,7 +1723,6 @@ "ProjectsPage.assignError": "分配给项目时出现错误", "ProjectsPage.assignSuccess": "您已被分配至该项目吗", "ProjectsPage.deleteError": "删除项目的过程中出现错误", - "ProjectsPage.deleteProjectSuccess": "The project ''{name}'' has been successfully deleted", "ProjectsPage.noResultsDescription": "Your search or filter criteria didn't match any results. Please try different keywords or adjust your filter settings.", "ProjectsPage.projectDuplicateHint": "Project with the same name already exists in this organization", "ProjectsPage.projectExists": "Project with the same name already exists in this organization", @@ -2054,7 +2055,6 @@ "UserBlock.adminBadge": "管理", "UserBlock.logout": "登出", "UserBlock.profile": "简介", - "UserBlock.youBadge": "You", "UserInfo.submitError": "错误!无法保存更改", "UserInfo.submitSuccess": "已保存更改", "ViewTabs.disabledAnalyzer": "服务分析器未运行", @@ -2189,4 +2189,4 @@ "notFoundPage.oops": "哎呀,看起来您迷路了。", "notFoundPage.pageNotExist": "您要查找的页面不存在。", "notFoundPage.toHome": "带我离开这里" -} +} \ No newline at end of file diff --git a/app/src/pages/inside/projectSettingsPageContainer/content/analyzerContainer/autoAnalysis/autoAnalysis.jsx b/app/src/pages/inside/projectSettingsPageContainer/content/analyzerContainer/autoAnalysis/autoAnalysis.jsx index dd7859d23f..92b58dc777 100644 --- a/app/src/pages/inside/projectSettingsPageContainer/content/analyzerContainer/autoAnalysis/autoAnalysis.jsx +++ b/app/src/pages/inside/projectSettingsPageContainer/content/analyzerContainer/autoAnalysis/autoAnalysis.jsx @@ -195,9 +195,11 @@ const AutoAnalysis = ({ > {formatMessage(messages.allMessagesShouldMatch)} - + {hasPermission && ( + + )} {isPending && } diff --git a/app/src/pages/inside/projectSettingsPageContainer/content/analyzerContainer/similarItems/similarItems.jsx b/app/src/pages/inside/projectSettingsPageContainer/content/analyzerContainer/similarItems/similarItems.jsx index 1d36877e69..db66ed07e4 100644 --- a/app/src/pages/inside/projectSettingsPageContainer/content/analyzerContainer/similarItems/similarItems.jsx +++ b/app/src/pages/inside/projectSettingsPageContainer/content/analyzerContainer/similarItems/similarItems.jsx @@ -88,9 +88,11 @@ const SimilarItems = ({ - + {hasPermission && ( + + )} {isPending && } diff --git a/app/src/pages/inside/projectSettingsPageContainer/content/analyzerContainer/uniqueErrors/uniqueErrors.jsx b/app/src/pages/inside/projectSettingsPageContainer/content/analyzerContainer/uniqueErrors/uniqueErrors.jsx index 915ec6e9cc..93fa8346ec 100644 --- a/app/src/pages/inside/projectSettingsPageContainer/content/analyzerContainer/uniqueErrors/uniqueErrors.jsx +++ b/app/src/pages/inside/projectSettingsPageContainer/content/analyzerContainer/uniqueErrors/uniqueErrors.jsx @@ -114,9 +114,11 @@ const UniqueErrors = ({ > - + {hasPermission && ( + + )} {isPending && } diff --git a/app/src/pages/inside/projectSettingsPageContainer/content/defectTypes/defectTypes.jsx b/app/src/pages/inside/projectSettingsPageContainer/content/defectTypes/defectTypes.jsx index 30bb696b27..27872a0e3d 100644 --- a/app/src/pages/inside/projectSettingsPageContainer/content/defectTypes/defectTypes.jsx +++ b/app/src/pages/inside/projectSettingsPageContainer/content/defectTypes/defectTypes.jsx @@ -122,19 +122,23 @@ export const DefectTypes = ({ setHeaderTitleNode }) => { useEffect(() => { setHeaderTitleNode( - - - , + <> + {isEditable && ( + + + + )} + , ); return () => setHeaderTitleNode(null); diff --git a/app/src/pages/inside/projectSettingsPageContainer/content/notifications/emptyRuleState/emptyRuleState.jsx b/app/src/pages/inside/projectSettingsPageContainer/content/notifications/emptyRuleState/emptyRuleState.jsx index 9e0c725476..ab34e63070 100644 --- a/app/src/pages/inside/projectSettingsPageContainer/content/notifications/emptyRuleState/emptyRuleState.jsx +++ b/app/src/pages/inside/projectSettingsPageContainer/content/notifications/emptyRuleState/emptyRuleState.jsx @@ -21,25 +21,32 @@ import Parser from 'html-react-parser'; import plusIcon from 'common/img/plus-button-inline.svg'; import { Button } from '@reportportal/ui-kit'; import PropTypes from 'prop-types'; -import styles from './emptyRuleState.scss'; +import { canUpdateSettings } from 'common/utils/permissions'; +import { userRolesSelector } from 'controllers/pages'; +import { useSelector } from 'react-redux'; import { messages } from '../messages'; +import styles from './emptyRuleState.scss'; const cx = classNames.bind(styles); export const EmptyRuleState = ({ ruleName, onCreateClick }) => { const { formatMessage } = useIntl(); + const userRoles = useSelector(userRolesSelector); + const isUpdateSettingAvailable = canUpdateSettings(userRoles); return (
{formatMessage(messages.noItemsMessage, { ruleName })} - + {isUpdateSettingAvailable && ( + + )}
); }; diff --git a/app/src/pages/inside/projectSettingsPageContainer/content/notifications/ruleGroup/ruleGroup.jsx b/app/src/pages/inside/projectSettingsPageContainer/content/notifications/ruleGroup/ruleGroup.jsx index 56ec4d220d..53a53b66d7 100644 --- a/app/src/pages/inside/projectSettingsPageContainer/content/notifications/ruleGroup/ruleGroup.jsx +++ b/app/src/pages/inside/projectSettingsPageContainer/content/notifications/ruleGroup/ruleGroup.jsx @@ -369,9 +369,7 @@ export const RuleGroup = ({ pluginName, ruleDescription, rules, isPluginEnabled, )} ) : ( - isUpdateSettingAvailable && ( - - ) + )} diff --git a/app/src/pages/inside/projectSettingsPageContainer/content/patternAnalysis/messages.js b/app/src/pages/inside/projectSettingsPageContainer/content/patternAnalysis/messages.js index b4c96d57a0..344da725ff 100644 --- a/app/src/pages/inside/projectSettingsPageContainer/content/patternAnalysis/messages.js +++ b/app/src/pages/inside/projectSettingsPageContainer/content/patternAnalysis/messages.js @@ -21,6 +21,14 @@ export const messages = defineMessages({ id: 'NoPatternAnalysis.title', defaultMessage: 'No Pattern Rules', }, + noPatternsYetTitle: { + id: 'NoPatternsYet.title', + defaultMessage: 'No patterns yet', + }, + noPatternsAppearDescription: { + id: 'NoPatternsAppear.description', + defaultMessage: 'Patterns will appear here once created by your team', + }, noPatternAnalysisDescription: { id: 'NoPatternAnalysis.description', defaultMessage: diff --git a/app/src/pages/inside/projectSettingsPageContainer/content/patternAnalysis/patternAnalysis.jsx b/app/src/pages/inside/projectSettingsPageContainer/content/patternAnalysis/patternAnalysis.jsx index 218c6ecf5f..74aad60a60 100644 --- a/app/src/pages/inside/projectSettingsPageContainer/content/patternAnalysis/patternAnalysis.jsx +++ b/app/src/pages/inside/projectSettingsPageContainer/content/patternAnalysis/patternAnalysis.jsx @@ -91,12 +91,17 @@ export const PatternAnalysis = ({ setHeaderTitleNode }) => { ) : ( diff --git a/app/src/pages/inside/projectSettingsPageContainer/content/patternAnalysis/patternAnalysisContent/patternAnalysisContent.jsx b/app/src/pages/inside/projectSettingsPageContainer/content/patternAnalysis/patternAnalysisContent/patternAnalysisContent.jsx index b97e4bde07..07e1840406 100644 --- a/app/src/pages/inside/projectSettingsPageContainer/content/patternAnalysis/patternAnalysisContent/patternAnalysisContent.jsx +++ b/app/src/pages/inside/projectSettingsPageContainer/content/patternAnalysis/patternAnalysisContent/patternAnalysisContent.jsx @@ -35,6 +35,8 @@ import BinIcon from 'common/img/newIcons/bin-inline.svg'; import CopyIcon from 'common/img/newIcons/copy-inline.svg'; import { docsReferences, createExternalLink } from 'common/utils'; import { PROJECT_SETTINGS_PATTERN_ANALYSIS_EVENTS } from 'analyticsEvents/projectSettingsPageEvents'; +import { canUpdateSettings } from 'common/utils/permissions'; +import { userRolesSelector } from 'controllers/pages'; import { PatternRuleContent, FieldElement, RuleList, FormattedDescription } from '../../elements'; import { Layout } from '../../layout'; import { messages } from '../messages'; @@ -53,14 +55,20 @@ export const PatternAnalysisContent = ({ const { formatMessage } = useIntl(); const dispatch = useDispatch(); const PAState = useSelector(PAStateSelector); + const userRoles = useSelector(userRolesSelector); + const canCreatePattern = canUpdateSettings(userRoles); useEffect(() => { setHeaderTitleNode( - - - , + <> + {canCreatePattern && ( + + + + )} + , ); return () => setHeaderTitleNode(null); diff --git a/app/src/pages/inside/projectSettingsPageContainer/generalTab/generalTab.jsx b/app/src/pages/inside/projectSettingsPageContainer/generalTab/generalTab.jsx index 3250ce67a4..425933bb53 100644 --- a/app/src/pages/inside/projectSettingsPageContainer/generalTab/generalTab.jsx +++ b/app/src/pages/inside/projectSettingsPageContainer/generalTab/generalTab.jsx @@ -330,7 +330,8 @@ export class GeneralTab extends Component { render() { const { intl, userRoles, isLoading, projectName } = this.props; const { processingData } = this.state; - const isDisabled = !canUpdateSettings(userRoles) || processingData; + const canPerformUpdate = canUpdateSettings(userRoles); + const isDisabled = !canPerformUpdate || processingData; return isLoading ? ( ) : ( @@ -427,19 +428,21 @@ export class GeneralTab extends Component { mobileDisabled /> -
- - {processingData && ( -
- - - {this.props.intl.formatMessage(COMMON_LOCALE_KEYS.processData)} - -
- )} -
+ {canPerformUpdate && ( +
+ + {processingData && ( +
+ + + {this.props.intl.formatMessage(COMMON_LOCALE_KEYS.processData)} + +
+ )} +
+ )} );