Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
f646711
feat: enhance task list creation by incorporating module information …
iacopolea Feb 19, 2026
fba0df9
feat: change out of scope module position. UN-2337
iacopolea Feb 19, 2026
306e590
validation
iacopolea Feb 19, 2026
38d026e
feat: add CreateTaskListsWithAIModal component and integrate AI task …
iacopolea Feb 23, 2026
9e7a94e
feat: update task count to a fixed value and remove task count input …
iacopolea Feb 23, 2026
a65c2b6
feat: confirmation modal
iacopolea Feb 23, 2026
2c73a55
feat: add stop functionality to task creation process and update butt…
iacopolea Feb 23, 2026
72fe95a
feat: integrate AI task list modal state management in context and up…
iacopolea Feb 24, 2026
b371981
feat: add AI task creation disclaimer and button to TasksModal, updat…
iacopolea Feb 24, 2026
e2c3517
feat: enhance AI task creation modal with alerts, loading states, and…
iacopolea Feb 25, 2026
d43dec9
feat: add AiGeneratorSection component and update TasksModal to integ…
iacopolea Feb 27, 2026
e08a181
feat: update AI task creation modal with new labels and improved user…
iacopolea Feb 27, 2026
90f2e95
feat: add loading spinner component and update AI task creation modal…
iacopolea Feb 27, 2026
c44c7a9
feat: update task selection component to improve user experience with…
iacopolea Feb 27, 2026
6825bb6
refactor: clean up imports and improve formatting in modal components
iacopolea Feb 27, 2026
1baa766
feat: add placeholder to tasks quantity input for improved user guidance
iacopolea Feb 27, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 26 additions & 1 deletion src/locales/en/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -803,7 +803,6 @@
"__PLAN_PAGE_EXPERT_REVIEW_TOOLTIP_CONTENT": "An expert will contact you within 3-5 business days with a custom quote",
"__PLAN_PAGE_EXPERT_REVIEW_WARNING": "Requires expert review",
"__PLAN_PAGE_GROUP_TITLE_ACTIVITY_SCOPE": "Activity Scope",
"__PLAN_PAGE_GROUP_TITLE_ADDITIONAL_DETAILS": "Additional Details",
"__PLAN_PAGE_GROUP_TITLE_ADVANCED_CRITERIA": "Other",
"__PLAN_PAGE_GROUP_TITLE_BEFORE_STARTING": " ",
"__PLAN_PAGE_GROUP_TITLE_BEHAVIOURAL_DATA": "Behavioural Data",
Expand Down Expand Up @@ -1014,6 +1013,32 @@
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_ACCESSIBILITY_TAB": "Accessibility",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_ACCESSIBILITY_TASK_ACCESSIBILITY_BUTTON": "Accessibility Task",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_ACCESSIBILITY_TASKS_LABEL": "Accessibility",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_AI_DISCLAIMER": "<bold>Want to speed things up?</bold> Generate structured functional tasks automatically based on your project details.",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_ALERT_TEXT": "List the key pages or flows you want tested. Example:<ul><li>Homepage</li><li>Product search</li><li>Product page (add to cart, add to wishlist)</li></ul>",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_ALERT_TITLE": "How to describe your areas:",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_BUTTON": "Create functional tasks AI",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_CANCEL": "Cancel",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_CONFIRM_CLOSE_BODY": "Heads up! Anything you’ve typed or started generating will be lost if you close this modal.",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_CONFIRM_CLOSE_CLOSE_ANYWAY": "Confirm",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_CONFIRM_CLOSE_HEADER": "Are you sure you want to close?",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_CONFIRM_CLOSE_KEEP_PROCESSING": "Cancel",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_CREATE_BUTTON": "Generate tasks",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_CREATING": "Creating...",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_ERROR_FETCHING": "Something went wrong. Please try again.",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_ERROR_SUBMITTING": "Something went wrong. Please try again.",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_FINALIZING": "I'm analyzing your setup and building realistic scenarios. Good things take a few seconds 🙂",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_GATHERING": "Gathering your data…",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_MODAL_HEADER": "Create functional tasks AI",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_PROMPT_INFO": "<title>Tell us which areas you want tested.</title>The <bold>AI will use your project goals and setup</bold> to generate relevant, structured tasks.",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_PROMPT_LABEL": "Describe the area to test",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_PROMPT_PLACEHOLDER": "e.g. Homepage, product search, checkout…",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_STOP": "Stop Generation",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_SUCCESS_TOAST": "Tasks successfully generated! Review them below and save your plan to move forward.",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_TASK_ANALYZING_CONTEXT": "Analyzing context",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_TASK_COLLECTING_INPUTS": "Collecting your inputs",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_TASK_GENERATING_TASKS": "Generating tasks",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_TASK_IDENTIFYING_AREAS": "Identifying key areas",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_TASKS_QUANTITY_LABEL": "Tasks to generate",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_DEFAULT_TAB": "All",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_EXPERIENTIAL_TAB": "Experience",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_EXPERIENTIAL_TASK_THINKING_ALOUD_BUTTON": "Thinking aloud task",
Expand Down
27 changes: 26 additions & 1 deletion src/locales/it/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -833,7 +833,6 @@
"__PLAN_PAGE_EXPERT_REVIEW_TOOLTIP_CONTENT": "",
"__PLAN_PAGE_EXPERT_REVIEW_WARNING": "",
"__PLAN_PAGE_GROUP_TITLE_ACTIVITY_SCOPE": "",
"__PLAN_PAGE_GROUP_TITLE_ADDITIONAL_DETAILS": "",
"__PLAN_PAGE_GROUP_TITLE_ADVANCED_CRITERIA": "",
"__PLAN_PAGE_GROUP_TITLE_BEFORE_STARTING": "",
"__PLAN_PAGE_GROUP_TITLE_BEHAVIOURAL_DATA": "",
Expand Down Expand Up @@ -1047,6 +1046,32 @@
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_ACCESSIBILITY_TAB": "",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_ACCESSIBILITY_TASK_ACCESSIBILITY_BUTTON": "",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_ACCESSIBILITY_TASKS_LABEL": "",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_AI_DISCLAIMER": "",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_ALERT_TEXT": "",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_ALERT_TITLE": "",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_BUTTON": "",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_CANCEL": "",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_CONFIRM_CLOSE_BODY": "",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_CONFIRM_CLOSE_CLOSE_ANYWAY": "",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_CONFIRM_CLOSE_HEADER": "",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_CONFIRM_CLOSE_KEEP_PROCESSING": "",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_CREATE_BUTTON": "",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_CREATING": "Creating...",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_ERROR_FETCHING": "",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_ERROR_SUBMITTING": "",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_FINALIZING": "",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_GATHERING": "",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_MODAL_HEADER": "",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_PROMPT_INFO": "",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_PROMPT_LABEL": "",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_PROMPT_PLACEHOLDER": "",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_STOP": "Stop Generation",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_SUCCESS_TOAST": "",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_TASK_ANALYZING_CONTEXT": "",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_TASK_COLLECTING_INPUTS": "",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_TASK_GENERATING_TASKS": "",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_TASK_IDENTIFYING_AREAS": "",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_CREATE_WITH_AI_TASKS_QUANTITY_LABEL": "",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_DEFAULT_TAB": "",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_EXPERIENTIAL_TAB": "",
"__PLAN_PAGE_MODULE_TASKS_ADD_TASK_MODAL_EXPERIENTIAL_TASK_THINKING_ALOUD_BUTTON": "",
Expand Down
8 changes: 1 addition & 7 deletions src/pages/Plan/common/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ export const MODULE_GROUPS: Record<PlanTabName, ModuleGroup[]> = {
{
id: 'essentials',
title: '__PLAN_PAGE_GROUP_TITLE_ESSENTIALS',
modules: ['goal'],
modules: ['goal', 'out_of_scope'],
},
{
id: 'technicalRequirements',
Expand Down Expand Up @@ -75,11 +75,6 @@ export const MODULE_GROUPS: Record<PlanTabName, ModuleGroup[]> = {
title: '__PLAN_PAGE_GROUP_TITLE_ACTIVITY_SCOPE',
modules: ['tasks'],
},
{
id: 'additionalDetails',
title: '__PLAN_PAGE_GROUP_TITLE_ADDITIONAL_DETAILS',
modules: ['out_of_scope'],
},
],
summary: [],
};
Expand All @@ -99,7 +94,6 @@ const i18nPlanTitles = () => {
t('__PLAN_PAGE_GROUP_TITLE_BEHAVIOURAL_DATA');
t('__PLAN_PAGE_GROUP_TITLE_ADVANCED_CRITERIA');
t('__PLAN_PAGE_GROUP_TITLE_ACTIVITY_SCOPE');
t('__PLAN_PAGE_GROUP_TITLE_ADDITIONAL_DETAILS');
// Tab titles
t('__PLAN_PAGE_TAB_SETUP_TAB_TITLE');
t('__PLAN_PAGE_TAB_TARGET_TAB_TITLE');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ import { createContext, useContext, useMemo, useState } from 'react';
interface ModuleTasksContextType {
modalRef: HTMLButtonElement | null;
setModalRef: (ref: HTMLButtonElement | null) => void;
isOpenCreateTasksWithAIModal: boolean;
setIsOpenCreateTasksWithAIModal: (value: boolean) => void;
}

const ModuleTasksContext = createContext<ModuleTasksContextType | null>(null);
Expand All @@ -14,13 +16,17 @@ export const ModuleTasksContextProvider = ({
}) => {
const [modalRef, setModalRef] =
useState<ModuleTasksContextType['modalRef']>(null);
const [isOpenCreateTasksWithAIModal, setIsOpenCreateTasksWithAIModal] =
useState(false);

const moduleTasksContextValue = useMemo(
() => ({
modalRef,
setModalRef,
isOpenCreateTasksWithAIModal,
setIsOpenCreateTasksWithAIModal,
}),
[modalRef, setModalRef]
[modalRef, setModalRef, isOpenCreateTasksWithAIModal]
);

return (
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,22 @@ import {
Message,
Span,
} from '@appquality/unguess-design-system';
import { useMemo, useState } from 'react';
import { useState } from 'react';
import { useTranslation } from 'react-i18next';
import { appTheme } from 'src/app/theme';
import { FEATURE_FLAG_CHANGE_MODULES_VARIANTS } from 'src/constants';
import { useGetServicesApiKHealthQuery } from 'src/features/api';
import { useModule } from 'src/features/modules/useModule';
import { useModuleConfiguration } from 'src/features/modules/useModuleConfiguration';
import { useFeatureFlag } from 'src/hooks/useFeatureFlag';
import useWindowSize from 'src/hooks/useWindowSize';
import { useCanShowAiChat } from 'src/pages/Dashboard/hooks/useCanShowAiChat';
import { DeleteModuleConfirmationModal } from 'src/pages/Plan/modules/modal/DeleteModuleConfirmationModal';
import styled from 'styled-components';
import { useIconWithValidation } from '../../useIcon';
import { useModuleTasksContext } from '../context';
import { useModuleTasks } from '../hooks';
import { AddTaskButton } from './AddTaskButton';
import { CreateTaskListsWithAI } from './CreateTaskListsWithAI';
import { TasksModal } from './modal';
import { CreateTaskListsWithAI } from './modal/CreateTaskListsWithAI';
import { TasksContainerAnimation } from './TasksContainerAnimation';

const StyledCard = styled(ContainerCard)`
Expand Down Expand Up @@ -54,22 +53,13 @@ const TasksList = () => {
const { getPlanStatus } = useModuleConfiguration();
const { t } = useTranslation();
const { hasFeatureFlag } = useFeatureFlag();
const { data: apiK_HealthResponse } = useGetServicesApiKHealthQuery();
const { isOpenCreateTasksWithAIModal } = useModuleTasksContext();
const [isOpenDeleteModal, setIsOpenDeleteModal] = useState(false);
const Icon = useIconWithValidation();
const { width } = useWindowSize();
const breakpointSm = parseInt(appTheme.breakpoints.sm, 10);
const isMobile = width < breakpointSm;

const canShowChat = useCanShowAiChat();
const canShowAiFeatures = useMemo(
() =>
canShowChat &&
apiK_HealthResponse?.success &&
apiK_HealthResponse?.status === 'healthy',
[apiK_HealthResponse, canShowChat]
);

const handleDelete = () => {
setIsOpenDeleteModal(true);
};
Expand Down Expand Up @@ -113,7 +103,6 @@ const TasksList = () => {
{t('__PLAN_PAGE_MODULE_TASKS_SUBTITLE')}
<Span style={{ color: appTheme.palette.red[600] }}>*</Span>
</MD>
{!!canShowAiFeatures && <CreateTaskListsWithAI />}
{error &&
(errorEmpty ? (
<Message
Expand Down Expand Up @@ -143,6 +132,7 @@ const TasksList = () => {
onConfirm={remove}
/>
)}
{isOpenCreateTasksWithAIModal && <CreateTaskListsWithAI />}
</>
);
};
Expand Down
Loading
Loading