From 77ea81bf6cc7e10d3f6f2303fae9a8f2ac8ba68c Mon Sep 17 00:00:00 2001 From: Akansha Sakhre Date: Wed, 26 Nov 2025 10:19:18 +0530 Subject: [PATCH 01/48] refactor: improve actions visibility in List component --- src/containers/Flow/FlowList/FlowList.tsx | 30 +++---- src/containers/List/List.tsx | 104 +++++++++++++++------- 2 files changed, 85 insertions(+), 49 deletions(-) diff --git a/src/containers/Flow/FlowList/FlowList.tsx b/src/containers/Flow/FlowList/FlowList.tsx index adaca9d2a3..63e5dbbca6 100644 --- a/src/containers/Flow/FlowList/FlowList.tsx +++ b/src/containers/Flow/FlowList/FlowList.tsx @@ -282,11 +282,16 @@ export const FlowList = () => { link: '/flow/configure', }, { - label: t('Edit'), - icon: , - parameter: 'id', - insideMore: true, - dialog: handleEdit, + label: t('Share'), + icon: shareIcon, + parameter: 'keywords', + dialog: (keywords: any) => { + if (keywords.length > 0) { + setShareDialogKeywords(keywords.map((i: string, index: number) => ({ label: i, id: index }))); + } else { + setNotification('No keywords found to share the responder link', 'warning'); + } + }, }, { label: t('Copy'), @@ -295,6 +300,7 @@ export const FlowList = () => { insideMore: true, dialog: handleCopy, }, + { label: t('Export'), icon: , @@ -303,16 +309,10 @@ export const FlowList = () => { insideMore: true, }, { - label: t('Share'), - icon: shareIcon, - parameter: 'keywords', - dialog: (keywords: any) => { - if (keywords.length > 0) { - setShareDialogKeywords(keywords.map((i: string, index: number) => ({ label: i, id: index }))); - } else { - setNotification('No keywords found to share the responder link', 'warning'); - } - }, + label: t('Edit'), + icon: , + parameter: 'id', + dialog: handleEdit, }, ]; diff --git a/src/containers/List/List.tsx b/src/containers/List/List.tsx index 2960066f11..2c3d86f9a6 100644 --- a/src/containers/List/List.tsx +++ b/src/containers/List/List.tsx @@ -524,8 +524,7 @@ export const List = ({ ); } - - const deleteButton = (Id: any, text: string) => + const deleteButtonMenuItem = (Id: any, text: string) => allowedAction.delete ? (
showDialogHandler(Id, text)}>
@@ -535,10 +534,42 @@ export const List = ({
) : null; - const actionsInsideMore = additionalAction(item).filter((action: any) => action?.insideMore); - const actionsOutsideMore = additionalAction(item).filter((action: any) => !action?.insideMore); + const deleteButtonIcon = (Id: any, text: string) => + allowedAction.delete ? ( + + showDialogHandler(Id, text)} + > + + + + ) : null; + + const allAdditionalActions = additionalAction(item).filter((action: any) => !action?.hidden); + + let totalActions = allAdditionalActions.length; - if (actionsInsideMore.length > 0 || allowedAction.delete) { + if (allowedAction.edit && editSupport) totalActions++; + if (allowedAction.delete) totalActions++; + + const shouldShowMoreButton = totalActions > 4; + + let actionsOutsideMore = allAdditionalActions; + let actionsInsideMore: any[] = []; + + if (shouldShowMoreButton) { + + let slotsAvailable = 4; + if (allowedAction.edit && editSupport) slotsAvailable--; + slotsAvailable--; + + actionsOutsideMore = allAdditionalActions.slice(0, slotsAvailable); + actionsInsideMore = allAdditionalActions.slice(slotsAvailable); + } + + if (shouldShowMoreButton) { moreButton = ( - {moreButton} - {showMoreOptions == id && ( - setShowMoreOptions('')}> - -
- {actionListMap(item, actionsInsideMore, true)} - - {deleteButton(id, labelValue)} -
-
-
- )} -
+ <> + {!shouldShowMoreButton && deleteButtonIcon(id, labelValue)} + +
+ {moreButton} + {showMoreOptions == id && ( + setShowMoreOptions('')}> + +
+ {actionListMap(item, actionsInsideMore, true)} + + {deleteButtonMenuItem(id, labelValue)} +
+
+
+ )} +
+ ) : null} ); @@ -637,6 +672,7 @@ export const List = ({ isActive: listItemObj.isActive, }; if (showActions) { + items.operations = getIcons(listItemObj, allowedAction); } return items; From dcfe1b004a116a216e2913cfa6a5b045d79b4fdf Mon Sep 17 00:00:00 2001 From: Akansha Sakhre Date: Wed, 26 Nov 2025 10:24:25 +0530 Subject: [PATCH 02/48] remove unused 'insideMore' property from action items in multiple lists --- src/containers/Collection/CollectionList/CollectionList.tsx | 1 - src/containers/Flow/FlowList/FlowList.tsx | 4 ---- src/containers/HSM/HSMList/HSMList.tsx | 2 -- .../InteractiveMessageList/InteractiveMessageList.tsx | 1 - src/containers/SpeedSend/SpeedSendList/SpeedSendList.tsx | 1 - src/containers/Trigger/TriggerList/TriggerList.tsx | 1 - src/containers/WaGroups/WaPolls/WaPollsList/WaPollsList.tsx | 3 --- 7 files changed, 13 deletions(-) diff --git a/src/containers/Collection/CollectionList/CollectionList.tsx b/src/containers/Collection/CollectionList/CollectionList.tsx index be782953aa..4ddb2b61ed 100644 --- a/src/containers/Collection/CollectionList/CollectionList.tsx +++ b/src/containers/Collection/CollectionList/CollectionList.tsx @@ -141,7 +141,6 @@ export const CollectionList = () => { icon: , parameter: 'id', dialog: exportCollection, - insideMore: true, }; const additionalAction = () => (groups ? [addEntity] : [addEntity, exportCollectionButton]); diff --git a/src/containers/Flow/FlowList/FlowList.tsx b/src/containers/Flow/FlowList/FlowList.tsx index 63e5dbbca6..b78e90a1c5 100644 --- a/src/containers/Flow/FlowList/FlowList.tsx +++ b/src/containers/Flow/FlowList/FlowList.tsx @@ -258,7 +258,6 @@ export const FlowList = () => { label: 'View it', icon: viewIcon, parameter: 'id', - insideMore: false, dialog: (id: any) => { navigate(`/flow/${id}/edit`, { state: 'template' }); }, @@ -267,7 +266,6 @@ export const FlowList = () => { label: 'Use it', icon: , parameter: 'id', - insideMore: false, dialog: (id: any) => { navigate(`/flow/${id}/edit`, { state: 'copyTemplate' }); }, @@ -297,7 +295,6 @@ export const FlowList = () => { label: t('Copy'), icon: , parameter: 'id', - insideMore: true, dialog: handleCopy, }, @@ -306,7 +303,6 @@ export const FlowList = () => { icon: , parameter: 'id', dialog: exportFlow, - insideMore: true, }, { label: t('Edit'), diff --git a/src/containers/HSM/HSMList/HSMList.tsx b/src/containers/HSM/HSMList/HSMList.tsx index 0fdf571f09..9c4545b478 100644 --- a/src/containers/HSM/HSMList/HSMList.tsx +++ b/src/containers/HSM/HSMList/HSMList.tsx @@ -398,7 +398,6 @@ export const HSMList = () => { icon: , parameter: 'id', dialog: setCopyDialog, - insideMore: true, }, { label: t('Report'), @@ -406,7 +405,6 @@ export const HSMList = () => { parameter: 'id', dialog: showRaiseToGupShupDialog, hidden: filterValue !== 'REJECTED', - insideMore: true, }, ]; diff --git a/src/containers/InteractiveMessage/InteractiveMessageList/InteractiveMessageList.tsx b/src/containers/InteractiveMessage/InteractiveMessageList/InteractiveMessageList.tsx index 4db098cf23..2f12fd202e 100644 --- a/src/containers/InteractiveMessage/InteractiveMessageList/InteractiveMessageList.tsx +++ b/src/containers/InteractiveMessage/InteractiveMessageList/InteractiveMessageList.tsx @@ -121,7 +121,6 @@ export const InteractiveMessageList = () => { icon: , parameter: 'id', dialog: handleCopyInteractive, - insideMore: true, }, ]; diff --git a/src/containers/SpeedSend/SpeedSendList/SpeedSendList.tsx b/src/containers/SpeedSend/SpeedSendList/SpeedSendList.tsx index 5da9bbe2ac..e33c5b6543 100644 --- a/src/containers/SpeedSend/SpeedSendList/SpeedSendList.tsx +++ b/src/containers/SpeedSend/SpeedSendList/SpeedSendList.tsx @@ -99,7 +99,6 @@ export const SpeedSendList = () => { icon: , parameter: 'id', dialog: setCopyDialog, - insideMore: true, }, ]; diff --git a/src/containers/Trigger/TriggerList/TriggerList.tsx b/src/containers/Trigger/TriggerList/TriggerList.tsx index e5c86041da..617ac8c37f 100644 --- a/src/containers/Trigger/TriggerList/TriggerList.tsx +++ b/src/containers/Trigger/TriggerList/TriggerList.tsx @@ -80,7 +80,6 @@ export const TriggerList = () => { icon: , parameter: 'id', dialog: setDialog, - insideMore: true, }, ]; diff --git a/src/containers/WaGroups/WaPolls/WaPollsList/WaPollsList.tsx b/src/containers/WaGroups/WaPolls/WaPollsList/WaPollsList.tsx index b140963a3f..c1ddb1d4d6 100644 --- a/src/containers/WaGroups/WaPolls/WaPollsList/WaPollsList.tsx +++ b/src/containers/WaGroups/WaPolls/WaPollsList/WaPollsList.tsx @@ -98,13 +98,11 @@ export const WaPollsList = () => { icon: , parameter: 'id', dialog: (id: any) => setViewWaPollId(id), - insideMore: false, }, { label: t('Copy Poll'), icon: , parameter: 'id', - insideMore: false, dialog: handleCopy, }, { @@ -112,7 +110,6 @@ export const WaPollsList = () => { icon: , parameter: 'id', dialog: (id: any) => setDeleteWaPollId(id), - insideMore: false, }, ]; From 846963fcd04c6c1d7e4da09aee1d35d689fc2990 Mon Sep 17 00:00:00 2001 From: Akansha Sakhre Date: Wed, 26 Nov 2025 10:46:48 +0530 Subject: [PATCH 03/48] refactor: update test cases to use data-testid for action buttons --- .../CollectionList/CollectionList.test.tsx | 16 +++++++--------- .../CollectionList/CollectionList.tsx | 2 +- src/containers/Flow/FlowList/FlowList.test.tsx | 10 ++-------- src/containers/Flow/FlowList/FlowList.tsx | 3 +-- .../InteractiveMessageList.test.tsx | 3 +-- .../InteractiveMessageList.tsx | 2 +- src/containers/List/List.test.tsx | 18 +++++------------- src/containers/List/List.tsx | 7 ++----- .../OrganizationList/OrganizationList.test.tsx | 3 +-- .../SheetIntegrationList.test.tsx | 3 +-- .../Trigger/TriggerList/TriggerList.test.tsx | 12 +++--------- .../Trigger/TriggerList/TriggerList.tsx | 2 +- 12 files changed, 26 insertions(+), 55 deletions(-) diff --git a/src/containers/Collection/CollectionList/CollectionList.test.tsx b/src/containers/Collection/CollectionList/CollectionList.test.tsx index 5ae56cde86..9dbc31a6ef 100644 --- a/src/containers/Collection/CollectionList/CollectionList.test.tsx +++ b/src/containers/Collection/CollectionList/CollectionList.test.tsx @@ -179,7 +179,7 @@ describe('', () => { }); test('should export collection', async () => { - const { getByTestId } = render( + const { getByTestId, getAllByTestId } = render( @@ -189,11 +189,10 @@ describe('', () => { expect(getByTestId('loading')).toBeInTheDocument(); await waitFor(() => { - expect(getByTestId('additionalButton')).toBeInTheDocument(); + expect(getAllByTestId('additionalButton')[0]).toBeInTheDocument(); }); - fireEvent.click(getByTestId('MoreIcon')); - fireEvent.click(screen.getByText('Export')); + fireEvent.click(getByTestId('export-icon')); const spy = vi.spyOn(utils, 'exportCsvFile'); await waitFor(() => { @@ -202,7 +201,7 @@ describe('', () => { }); test('should show error if export collection failed', async () => { - const { getByTestId } = render( + const { getByTestId, getAllByTestId } = render( @@ -212,11 +211,10 @@ describe('', () => { expect(getByTestId('loading')).toBeInTheDocument(); await waitFor(() => { - expect(getByTestId('additionalButton')).toBeInTheDocument(); + expect(getAllByTestId('additionalButton')[0]).toBeInTheDocument(); }); - fireEvent.click(getByTestId('MoreIcon')); - fireEvent.click(screen.getByText('Export')); + fireEvent.click(screen.getByTestId('export-icon')); await waitFor(() => { expect(setNotification).toHaveBeenCalled(); @@ -249,7 +247,7 @@ describe('', () => { expect(screen.queryByTestId('EditIcon')).not.toBeInTheDocument(); }); - fireEvent.click(screen.getAllByTestId('MoreIcon')[0]); + await waitFor(() => { expect(screen.queryByText('Delete')).not.toBeInTheDocument(); }); diff --git a/src/containers/Collection/CollectionList/CollectionList.tsx b/src/containers/Collection/CollectionList/CollectionList.tsx index 4ddb2b61ed..5011854d16 100644 --- a/src/containers/Collection/CollectionList/CollectionList.tsx +++ b/src/containers/Collection/CollectionList/CollectionList.tsx @@ -138,7 +138,7 @@ export const CollectionList = () => { const exportCollectionButton = { label: t('Export'), - icon: , + icon: , parameter: 'id', dialog: exportCollection, }; diff --git a/src/containers/Flow/FlowList/FlowList.test.tsx b/src/containers/Flow/FlowList/FlowList.test.tsx index db1b72ce8a..bd4d76fc32 100644 --- a/src/containers/Flow/FlowList/FlowList.test.tsx +++ b/src/containers/Flow/FlowList/FlowList.test.tsx @@ -124,16 +124,10 @@ describe('', () => { const { getAllByTestId } = render(flowList); await waitFor(() => { - expect(getAllByTestId('MoreIcon')[0]).toBeInTheDocument(); + expect(getAllByTestId('copy-flow')[0]).toBeInTheDocument(); }); - fireEvent.click(getAllByTestId('MoreIcon')[0]); - - await waitFor(() => { - expect(screen.getByText('Copy')).toBeInTheDocument(); - }); - - fireEvent.click(screen.getByText('Copy')); + fireEvent.click(getAllByTestId('copy-flow')[0]); await waitFor(() => { expect(mockedUsedNavigate).toHaveBeenCalled(); diff --git a/src/containers/Flow/FlowList/FlowList.tsx b/src/containers/Flow/FlowList/FlowList.tsx index b78e90a1c5..52dae2a936 100644 --- a/src/containers/Flow/FlowList/FlowList.tsx +++ b/src/containers/Flow/FlowList/FlowList.tsx @@ -293,11 +293,10 @@ export const FlowList = () => { }, { label: t('Copy'), - icon: , + icon: , parameter: 'id', dialog: handleCopy, }, - { label: t('Export'), icon: , diff --git a/src/containers/InteractiveMessage/InteractiveMessageList/InteractiveMessageList.test.tsx b/src/containers/InteractiveMessage/InteractiveMessageList/InteractiveMessageList.test.tsx index 3eadc4c888..00e328fee6 100644 --- a/src/containers/InteractiveMessage/InteractiveMessageList/InteractiveMessageList.test.tsx +++ b/src/containers/InteractiveMessage/InteractiveMessageList/InteractiveMessageList.test.tsx @@ -97,8 +97,7 @@ test('It navigates to edit on clicking copy ', async () => { expect(screen.getByText('Interactive messages')).toBeInTheDocument(); }); - fireEvent.click(screen.getAllByTestId('MoreIcon')[0]); - fireEvent.click(screen.getByText('Copy')); + fireEvent.click(screen.getAllByTestId('copy-interactive-message')[0]); await waitFor(() => { expect(mockedUsedNavigate).toHaveBeenCalled(); diff --git a/src/containers/InteractiveMessage/InteractiveMessageList/InteractiveMessageList.tsx b/src/containers/InteractiveMessage/InteractiveMessageList/InteractiveMessageList.tsx index 2f12fd202e..6c0870a412 100644 --- a/src/containers/InteractiveMessage/InteractiveMessageList/InteractiveMessageList.tsx +++ b/src/containers/InteractiveMessage/InteractiveMessageList/InteractiveMessageList.tsx @@ -118,7 +118,7 @@ export const InteractiveMessageList = () => { }, { label: t('Copy'), - icon: , + icon: , parameter: 'id', dialog: handleCopyInteractive, }, diff --git a/src/containers/List/List.test.tsx b/src/containers/List/List.test.tsx index a0794ef1ab..d7af09eaae 100644 --- a/src/containers/List/List.test.tsx +++ b/src/containers/List/List.test.tsx @@ -67,12 +67,7 @@ describe('', () => { test('A row in the table should have an edit and delete button', async () => { render(list); - // Wait for the MoreIcon to appear and become clickable - await waitFor(() => { - expect(screen.getAllByTestId('MoreIcon')[0]).toBeInTheDocument(); - }); - const moreButton = screen.getAllByTestId('MoreIcon'); - fireEvent.click(moreButton[0]); + await waitFor(() => { expect(screen.getAllByTestId('EditIcon')[0]).toBeInTheDocument(); expect(screen.getAllByTestId('DeleteIcon')[0]).toBeInTheDocument(); @@ -105,14 +100,13 @@ describe(' actions', () => { }); test('click on delete button opens dialog box', async () => { - const { queryByTestId } = render(list); - // Wait for the MoreIcon to appear and become clickable - const moreButton = await screen.findAllByTestId('MoreIcon', {}, { timeout: 5000 }); - fireEvent.click(moreButton[0]); + const { getAllByTestId } = render(list); + await waitFor(() => { - const button = queryByTestId('DeleteIcon') as HTMLButtonElement; + const button = getAllByTestId('DeleteIcon')[0] as HTMLButtonElement; fireEvent.click(button); }); + await waitFor(() => { expect(screen.queryByRole('dialog')).toBeInTheDocument(); }); @@ -120,8 +114,6 @@ describe(' actions', () => { test('click on agree button shows alert', async () => { const { getAllByTestId } = render(list); - const moreButton = await screen.findAllByTestId('MoreIcon', {}, { timeout: 5000 }); - fireEvent.click(moreButton[0]); await waitFor(() => { const button = getAllByTestId('DeleteIcon')[0]; diff --git a/src/containers/List/List.tsx b/src/containers/List/List.tsx index 2c3d86f9a6..b9b06e63ab 100644 --- a/src/containers/List/List.tsx +++ b/src/containers/List/List.tsx @@ -558,12 +558,10 @@ export const List = ({ let actionsOutsideMore = allAdditionalActions; let actionsInsideMore: any[] = []; - if (shouldShowMoreButton) { - let slotsAvailable = 4; - if (allowedAction.edit && editSupport) slotsAvailable--; - slotsAvailable--; + if (allowedAction.edit && editSupport) slotsAvailable--; + slotsAvailable--; actionsOutsideMore = allAdditionalActions.slice(0, slotsAvailable); actionsInsideMore = allAdditionalActions.slice(slotsAvailable); @@ -672,7 +670,6 @@ export const List = ({ isActive: listItemObj.isActive, }; if (showActions) { - items.operations = getIcons(listItemObj, allowedAction); } return items; diff --git a/src/containers/OrganizationList/OrganizationList.test.tsx b/src/containers/OrganizationList/OrganizationList.test.tsx index d5f6d27434..48ff003888 100644 --- a/src/containers/OrganizationList/OrganizationList.test.tsx +++ b/src/containers/OrganizationList/OrganizationList.test.tsx @@ -56,8 +56,7 @@ test('Update status', async () => { expect(orgCustomerButton).toBeInTheDocument(); fireEvent.click(extensionButton); fireEvent.click(orgCustomerButton); - const moreButton = screen.getAllByTestId('MoreIcon'); - fireEvent.click(moreButton[0]); + await waitFor(() => { expect(screen.getByTestId('DeleteIcon')).toBeInTheDocument(); }); diff --git a/src/containers/SheetIntegration/SheetIntegrationList/SheetIntegrationList.test.tsx b/src/containers/SheetIntegration/SheetIntegrationList/SheetIntegrationList.test.tsx index 15058c36f4..e9dd1d9a12 100644 --- a/src/containers/SheetIntegration/SheetIntegrationList/SheetIntegrationList.test.tsx +++ b/src/containers/SheetIntegration/SheetIntegrationList/SheetIntegrationList.test.tsx @@ -124,8 +124,7 @@ describe('SheetIntegrationList', () => { expect(getByText('Google sheets')).toBeInTheDocument(); }); - fireEvent.click(screen.getAllByTestId('MoreIcon')[0]); - fireEvent.click(screen.getByText('Delete')); + fireEvent.click(getAllByTestId('DeleteIcon')[0]); await waitFor(() => { expect(screen.getByTestId('dialogBox')).toBeInTheDocument(); diff --git a/src/containers/Trigger/TriggerList/TriggerList.test.tsx b/src/containers/Trigger/TriggerList/TriggerList.test.tsx index 8877fd1e0b..a95d0e247e 100644 --- a/src/containers/Trigger/TriggerList/TriggerList.test.tsx +++ b/src/containers/Trigger/TriggerList/TriggerList.test.tsx @@ -31,19 +31,13 @@ test('click on Make a copy', async () => { const { getAllByTestId } = render(wrapper); await waitFor(() => { - expect(getAllByTestId('MoreIcon')[0]).toBeInTheDocument(); - }); - - fireEvent.click(getAllByTestId('MoreIcon')[0]); - - await waitFor(() => { - expect(screen.getByTestId('additionalButton')).toBeInTheDocument(); - fireEvent.click(screen.getByTestId('additionalButton')); + expect(getAllByTestId('copy-trigger')[0]).toBeInTheDocument(); + fireEvent.click(getAllByTestId('copy-trigger')[0]); }); }); test('hover over tooltip', async () => { - const { container, getAllByTestId, getByText } = render(wrapper); + const { getAllByTestId, getByText } = render(wrapper); await waitFor(() => { const tooltip = getAllByTestId('tooltip')[0]; fireEvent.mouseOver(tooltip); diff --git a/src/containers/Trigger/TriggerList/TriggerList.tsx b/src/containers/Trigger/TriggerList/TriggerList.tsx index 617ac8c37f..179aafb5ec 100644 --- a/src/containers/Trigger/TriggerList/TriggerList.tsx +++ b/src/containers/Trigger/TriggerList/TriggerList.tsx @@ -77,7 +77,7 @@ export const TriggerList = () => { const additionalAction = () => [ { label: t('Copy'), - icon: , + icon: , parameter: 'id', dialog: setDialog, }, From 03b6d3c8924e9f9b0bdd4a5e1511e4f5cbcab78e Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Wed, 26 Nov 2025 10:51:07 +0530 Subject: [PATCH 04/48] fix: trigger listing page --- .../Trigger/TriggerList/TriggerList.test.tsx | 17 ++-- .../Trigger/TriggerList/TriggerList.tsx | 96 +++++++++++++++---- 2 files changed, 86 insertions(+), 27 deletions(-) diff --git a/src/containers/Trigger/TriggerList/TriggerList.test.tsx b/src/containers/Trigger/TriggerList/TriggerList.test.tsx index 8877fd1e0b..642cda5e0c 100644 --- a/src/containers/Trigger/TriggerList/TriggerList.test.tsx +++ b/src/containers/Trigger/TriggerList/TriggerList.test.tsx @@ -28,18 +28,15 @@ test('should load the trigger list', async () => { }); test('click on Make a copy', async () => { - const { getAllByTestId } = render(wrapper); + const { getByText, findAllByTestId } = render(wrapper); - await waitFor(() => { - expect(getAllByTestId('MoreIcon')[0]).toBeInTheDocument(); - }); - - fireEvent.click(getAllByTestId('MoreIcon')[0]); + const copyIcons = await findAllByTestId('copy-icon'); + expect(copyIcons.length).toBeGreaterThan(0); + expect(getByText('Triggers')).toBeInTheDocument(); - await waitFor(() => { - expect(screen.getByTestId('additionalButton')).toBeInTheDocument(); - fireEvent.click(screen.getByTestId('additionalButton')); - }); + const actionButtons = await findAllByTestId('additionalButton'); + expect(actionButtons.length).toBeGreaterThan(0); + fireEvent.click(actionButtons[0]); }); test('hover over tooltip', async () => { diff --git a/src/containers/Trigger/TriggerList/TriggerList.tsx b/src/containers/Trigger/TriggerList/TriggerList.tsx index e5c86041da..1163ccaf8a 100644 --- a/src/containers/Trigger/TriggerList/TriggerList.tsx +++ b/src/containers/Trigger/TriggerList/TriggerList.tsx @@ -1,6 +1,7 @@ import dayjs from 'dayjs'; import relativeTime from 'dayjs/plugin/relativeTime'; import { useNavigate } from 'react-router'; +import { useState } from 'react'; import { useTranslation } from 'react-i18next'; import TriggerIcon from 'assets/images/icons/Trigger/Union.svg?react'; import ClockIcon from 'assets/images/icons/Trigger/Clock.svg?react'; @@ -11,8 +12,12 @@ import { DELETE_TRIGGER } from 'graphql/mutations/Trigger'; import { EXTENDED_DATE_TIME_FORMAT_WITH_AMPM, LONG_DATE_FORMAT, dayList } from 'common/constants'; import { List } from 'containers/List/List'; import { Tooltip } from 'components/UI/Tooltip/Tooltip'; +import DeleteIcon from 'assets/images/icons/Delete/Red.svg?react'; +import { DialogBox } from 'components/UI/DialogBox/DialogBox'; import styles from './TriggerList.module.css'; import { triggerInfo } from 'common/HelpData'; +import { useMutation } from '@apollo/client'; +import ViewIcon from 'assets/images/icons/ViewLight.svg?react'; dayjs.extend(relativeTime); const getTooltip = (frequency: any, days: any) => { @@ -67,20 +72,42 @@ const queries = { }; export const TriggerList = () => { + const [dialogType, setDialogType] = useState(null); + const [currentItem, setCurrentItem] = useState(null); + const navigate = useNavigate(); const { t } = useTranslation(); const setDialog = (id: any) => { navigate(`/trigger/${id}/edit`, { state: 'copy' }); }; + const [deleteTrigger] = useMutation(DELETE_TRIGGER); + const setDelete = (item: any) => { + setCurrentItem(item); + setDialogType('delete'); + }; + const handleEdit = (id: any) => { + navigate(`/trigger/${id}/edit`); + }; const additionalAction = () => [ { label: t('Copy'), - icon: , + icon: , parameter: 'id', dialog: setDialog, - insideMore: true, + }, + { + label: t('Delete'), + icon: , + parameter: 'id', + dialog: setDelete, + }, + { + label: t('View'), + icon: , + parameter: 'id', + dialog: handleEdit, }, ]; @@ -97,24 +124,59 @@ export const TriggerList = () => { columnStyles, }; + const handleOk = async () => { + if (dialogType === 'delete' && currentItem) { + await deleteTrigger({ + variables: { id: currentItem.id }, + }); + } + + // Close dialog + setDialogType(null); + setCurrentItem(null); + }; + let dialog = null; + + if (dialogType === 'delete') { + dialog = ( + { + setCurrentItem(null); + setDialogType(null); + }} + alignButtons="center" + > +

This trigger will be permanently deleted and cannot be used again.

+
+ ); + } + const dialogMessage = t("You won't be able to use this trigger."); return ( - + <> + {dialog} + ({ + delete: false, + })} + /> + ); }; From 2f2904fffe8eb4e527ffd45983421962cc221df2 Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Wed, 26 Nov 2025 10:52:08 +0530 Subject: [PATCH 05/48] fix: trigger page --- src/containers/Trigger/TriggerList/TriggerList.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/containers/Trigger/TriggerList/TriggerList.tsx b/src/containers/Trigger/TriggerList/TriggerList.tsx index 1163ccaf8a..c8dc17fb4e 100644 --- a/src/containers/Trigger/TriggerList/TriggerList.tsx +++ b/src/containers/Trigger/TriggerList/TriggerList.tsx @@ -131,7 +131,6 @@ export const TriggerList = () => { }); } - // Close dialog setDialogType(null); setCurrentItem(null); }; From 80a21692ec9bdb9d11c18475efa599af9c309c1b Mon Sep 17 00:00:00 2001 From: Akansha Sakhre Date: Wed, 26 Nov 2025 11:15:42 +0530 Subject: [PATCH 06/48] refactor: update data-testid attributes for copy and edit icons in FlowList component --- src/containers/Flow/FlowList/FlowList.test.tsx | 4 ++-- src/containers/Flow/FlowList/FlowList.tsx | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/containers/Flow/FlowList/FlowList.test.tsx b/src/containers/Flow/FlowList/FlowList.test.tsx index bd4d76fc32..095c650dd6 100644 --- a/src/containers/Flow/FlowList/FlowList.test.tsx +++ b/src/containers/Flow/FlowList/FlowList.test.tsx @@ -124,10 +124,10 @@ describe('', () => { const { getAllByTestId } = render(flowList); await waitFor(() => { - expect(getAllByTestId('copy-flow')[0]).toBeInTheDocument(); + expect(getAllByTestId('copy-icon')[0]).toBeInTheDocument(); }); - fireEvent.click(getAllByTestId('copy-flow')[0]); + fireEvent.click(getAllByTestId('copy-icon')[0]); await waitFor(() => { expect(mockedUsedNavigate).toHaveBeenCalled(); diff --git a/src/containers/Flow/FlowList/FlowList.tsx b/src/containers/Flow/FlowList/FlowList.tsx index 52dae2a936..28e26029ee 100644 --- a/src/containers/Flow/FlowList/FlowList.tsx +++ b/src/containers/Flow/FlowList/FlowList.tsx @@ -293,7 +293,7 @@ export const FlowList = () => { }, { label: t('Copy'), - icon: , + icon: , parameter: 'id', dialog: handleCopy, }, @@ -305,7 +305,7 @@ export const FlowList = () => { }, { label: t('Edit'), - icon: , + icon: , parameter: 'id', dialog: handleEdit, }, From b20586dd2efb56e79f86718199e64081e66d9370 Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Wed, 26 Nov 2025 11:20:14 +0530 Subject: [PATCH 07/48] fix: deep scan --- src/containers/Trigger/TriggerList/TriggerList.test.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/containers/Trigger/TriggerList/TriggerList.test.tsx b/src/containers/Trigger/TriggerList/TriggerList.test.tsx index 642cda5e0c..ee0b887d5d 100644 --- a/src/containers/Trigger/TriggerList/TriggerList.test.tsx +++ b/src/containers/Trigger/TriggerList/TriggerList.test.tsx @@ -1,4 +1,4 @@ -import { render, waitFor, fireEvent, screen } from '@testing-library/react'; +import { render, waitFor, fireEvent } from '@testing-library/react'; import { MockedProvider } from '@apollo/client/testing'; import { MemoryRouter } from 'react-router'; From d126ac15828a3f26ef8592ee3228686013806938 Mon Sep 17 00:00:00 2001 From: Akansha Sakhre Date: Wed, 26 Nov 2025 11:30:23 +0530 Subject: [PATCH 08/48] chore: checkout bug_bash_1126 branch in cypress testing setup --- .github/workflows/cypress-testing.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/cypress-testing.yml b/.github/workflows/cypress-testing.yml index 77e8f46665..ace964b738 100644 --- a/.github/workflows/cypress-testing.yml +++ b/.github/workflows/cypress-testing.yml @@ -96,6 +96,7 @@ jobs: git clone https://github.com/glific/cypress-testing.git echo done. go to dir. cd cypress-testing + git checkout bug_bash_1126 cd .. cp -r cypress-testing/cypress cypress yarn add cypress@13.6.2 From c17104891c1caa8b101c8678a48e36c201fa0027 Mon Sep 17 00:00:00 2001 From: Akansha Sakhre Date: Wed, 26 Nov 2025 11:34:05 +0530 Subject: [PATCH 09/48] refactor: remove unused 'screen' import from TriggerList test file --- src/containers/Trigger/TriggerList/TriggerList.test.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/containers/Trigger/TriggerList/TriggerList.test.tsx b/src/containers/Trigger/TriggerList/TriggerList.test.tsx index a95d0e247e..c60bb85c72 100644 --- a/src/containers/Trigger/TriggerList/TriggerList.test.tsx +++ b/src/containers/Trigger/TriggerList/TriggerList.test.tsx @@ -1,4 +1,4 @@ -import { render, waitFor, fireEvent, screen } from '@testing-library/react'; +import { render, waitFor, fireEvent } from '@testing-library/react'; import { MockedProvider } from '@apollo/client/testing'; import { MemoryRouter } from 'react-router'; From bd6f252066701568902caa2ea4112ef4c90b1573 Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Wed, 26 Nov 2025 15:16:07 +0530 Subject: [PATCH 10/48] refactor: trigger listing page --- .../Trigger/TriggerList/TriggerList.test.tsx | 2 +- .../Trigger/TriggerList/TriggerList.tsx | 85 ++++++------------- 2 files changed, 27 insertions(+), 60 deletions(-) diff --git a/src/containers/Trigger/TriggerList/TriggerList.test.tsx b/src/containers/Trigger/TriggerList/TriggerList.test.tsx index afc45a643b..c60bb85c72 100644 --- a/src/containers/Trigger/TriggerList/TriggerList.test.tsx +++ b/src/containers/Trigger/TriggerList/TriggerList.test.tsx @@ -28,7 +28,7 @@ test('should load the trigger list', async () => { }); test('click on Make a copy', async () => { - const { getByText, findAllByTestId } = render(wrapper); + const { getAllByTestId } = render(wrapper); await waitFor(() => { expect(getAllByTestId('copy-trigger')[0]).toBeInTheDocument(); diff --git a/src/containers/Trigger/TriggerList/TriggerList.tsx b/src/containers/Trigger/TriggerList/TriggerList.tsx index 4b733e2324..b88696c700 100644 --- a/src/containers/Trigger/TriggerList/TriggerList.tsx +++ b/src/containers/Trigger/TriggerList/TriggerList.tsx @@ -12,8 +12,6 @@ import { DELETE_TRIGGER } from 'graphql/mutations/Trigger'; import { EXTENDED_DATE_TIME_FORMAT_WITH_AMPM, LONG_DATE_FORMAT, dayList } from 'common/constants'; import { List } from 'containers/List/List'; import { Tooltip } from 'components/UI/Tooltip/Tooltip'; -import DeleteIcon from 'assets/images/icons/Delete/Red.svg?react'; -import { DialogBox } from 'components/UI/DialogBox/DialogBox'; import styles from './TriggerList.module.css'; import { triggerInfo } from 'common/HelpData'; import { useMutation } from '@apollo/client'; @@ -72,20 +70,13 @@ const queries = { }; export const TriggerList = () => { - const [dialogType, setDialogType] = useState(null); - const [currentItem, setCurrentItem] = useState(null); - const navigate = useNavigate(); const { t } = useTranslation(); const setDialog = (id: any) => { navigate(`/trigger/${id}/edit`, { state: 'copy' }); }; - const [deleteTrigger] = useMutation(DELETE_TRIGGER); - const setDelete = (item: any) => { - setCurrentItem(item); - setDialogType('delete'); - }; + const handleEdit = (id: any) => { navigate(`/trigger/${id}/edit`); }; @@ -97,6 +88,12 @@ export const TriggerList = () => { parameter: 'id', dialog: setDialog, }, + { + label: t('View'), + icon: , + parameter: 'id', + dialog: handleEdit, + }, ]; const columnNames: any = [ @@ -112,58 +109,28 @@ export const TriggerList = () => { columnStyles, }; - const handleOk = async () => { - if (dialogType === 'delete' && currentItem) { - await deleteTrigger({ - variables: { id: currentItem.id }, - }); - } - - setDialogType(null); - setCurrentItem(null); - }; - let dialog = null; - - if (dialogType === 'delete') { - dialog = ( - { - setCurrentItem(null); - setDialogType(null); - }} - alignButtons="center" - > -

This trigger will be permanently deleted and cannot be used again.

-
- ); - } - const dialogMessage = t("You won't be able to use this trigger."); return ( - <> - {dialog} - ({ - delete: false, - })} - /> - + ({ + edit: false, + delete: true, + })} + /> ); }; From af68a66c60015a556f43777be1133b1e2ea5f8d3 Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Wed, 26 Nov 2025 15:21:11 +0530 Subject: [PATCH 11/48] fix: deep scan --- src/containers/Trigger/TriggerList/TriggerList.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/containers/Trigger/TriggerList/TriggerList.tsx b/src/containers/Trigger/TriggerList/TriggerList.tsx index b88696c700..aaff2d1a40 100644 --- a/src/containers/Trigger/TriggerList/TriggerList.tsx +++ b/src/containers/Trigger/TriggerList/TriggerList.tsx @@ -1,7 +1,6 @@ import dayjs from 'dayjs'; import relativeTime from 'dayjs/plugin/relativeTime'; import { useNavigate } from 'react-router'; -import { useState } from 'react'; import { useTranslation } from 'react-i18next'; import TriggerIcon from 'assets/images/icons/Trigger/Union.svg?react'; import ClockIcon from 'assets/images/icons/Trigger/Clock.svg?react'; @@ -14,7 +13,6 @@ import { List } from 'containers/List/List'; import { Tooltip } from 'components/UI/Tooltip/Tooltip'; import styles from './TriggerList.module.css'; import { triggerInfo } from 'common/HelpData'; -import { useMutation } from '@apollo/client'; import ViewIcon from 'assets/images/icons/ViewLight.svg?react'; dayjs.extend(relativeTime); From cba1a75ea9ffe50c52ca1c9920061b7b55655fe4 Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Wed, 26 Nov 2025 15:46:17 +0530 Subject: [PATCH 12/48] fix: add test case --- .../Trigger/TriggerList/TriggerList.test.tsx | 22 +++++++++++++++++++ .../Trigger/TriggerList/TriggerList.tsx | 2 +- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/containers/Trigger/TriggerList/TriggerList.test.tsx b/src/containers/Trigger/TriggerList/TriggerList.test.tsx index c60bb85c72..e1a758ff74 100644 --- a/src/containers/Trigger/TriggerList/TriggerList.test.tsx +++ b/src/containers/Trigger/TriggerList/TriggerList.test.tsx @@ -17,6 +17,15 @@ const wrapper = ( ); setUserSession(JSON.stringify({ roles: ['Admin'] })); +const mockedUsedNavigate = vi.fn(); +vi.mock('react-router', async () => { + return { + ...(await vi.importActual('react-router')), + useLocation: () => ({ state: 'copy', pathname: '/flow/1/edit' }), + useParams: () => ({ id: 1 }), + useNavigate: () => mockedUsedNavigate, + }; +}); test('should load the trigger list', async () => { const { getByText, getByTestId } = render(wrapper); @@ -47,3 +56,16 @@ test('hover over tooltip', async () => { expect(getByText('Repeat: weekly(Mon,Tue)')); }); }); + +test('should navigate to edit page on clicking the edit button', async () => { + const { getAllByTestId, getByText } = render(wrapper); + + await waitFor(() => { + expect(getByText('Triggers')).toBeInTheDocument(); + }); + + fireEvent.click(getAllByTestId('view-trigger')[0]); + await waitFor(() => { + expect(mockedUsedNavigate).toHaveBeenCalledWith('/trigger/1/edit'); + }); +}); diff --git a/src/containers/Trigger/TriggerList/TriggerList.tsx b/src/containers/Trigger/TriggerList/TriggerList.tsx index aaff2d1a40..0a94f89c12 100644 --- a/src/containers/Trigger/TriggerList/TriggerList.tsx +++ b/src/containers/Trigger/TriggerList/TriggerList.tsx @@ -88,7 +88,7 @@ export const TriggerList = () => { }, { label: t('View'), - icon: , + icon: , parameter: 'id', dialog: handleEdit, }, From 464f37d77b570a7e19756f45df71686a203aa358 Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Wed, 26 Nov 2025 15:47:14 +0530 Subject: [PATCH 13/48] fix: naming --- src/containers/Trigger/TriggerList/TriggerList.test.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/containers/Trigger/TriggerList/TriggerList.test.tsx b/src/containers/Trigger/TriggerList/TriggerList.test.tsx index e1a758ff74..eafa5662a3 100644 --- a/src/containers/Trigger/TriggerList/TriggerList.test.tsx +++ b/src/containers/Trigger/TriggerList/TriggerList.test.tsx @@ -57,7 +57,7 @@ test('hover over tooltip', async () => { }); }); -test('should navigate to edit page on clicking the edit button', async () => { +test('should navigate to edit page on clicking the view button', async () => { const { getAllByTestId, getByText } = render(wrapper); await waitFor(() => { From 5cf0ac4b42552e6c667fefba1ccae39d0919a931 Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Wed, 26 Nov 2025 15:52:59 +0530 Subject: [PATCH 14/48] fix: route --- src/containers/Trigger/TriggerList/TriggerList.test.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/containers/Trigger/TriggerList/TriggerList.test.tsx b/src/containers/Trigger/TriggerList/TriggerList.test.tsx index eafa5662a3..eca38308e8 100644 --- a/src/containers/Trigger/TriggerList/TriggerList.test.tsx +++ b/src/containers/Trigger/TriggerList/TriggerList.test.tsx @@ -21,7 +21,7 @@ const mockedUsedNavigate = vi.fn(); vi.mock('react-router', async () => { return { ...(await vi.importActual('react-router')), - useLocation: () => ({ state: 'copy', pathname: '/flow/1/edit' }), + useLocation: () => ({ state: 'copy', pathname: '/trigger/1/edit' }), useParams: () => ({ id: 1 }), useNavigate: () => mockedUsedNavigate, }; From c5565f2300b868a4eb0e3fc9af1a131079bc6e0b Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Thu, 27 Nov 2025 09:42:50 +0530 Subject: [PATCH 15/48] fix: label --- src/containers/Trigger/TriggerList/TriggerList.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/containers/Trigger/TriggerList/TriggerList.tsx b/src/containers/Trigger/TriggerList/TriggerList.tsx index 0a94f89c12..4244632e6c 100644 --- a/src/containers/Trigger/TriggerList/TriggerList.tsx +++ b/src/containers/Trigger/TriggerList/TriggerList.tsx @@ -87,7 +87,7 @@ export const TriggerList = () => { dialog: setDialog, }, { - label: t('View'), + label: t('Edit'), icon: , parameter: 'id', dialog: handleEdit, From 4331402c8fe24725071950317c971ac2980d426e Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Thu, 27 Nov 2025 11:13:05 +0530 Subject: [PATCH 16/48] fix: naming --- src/containers/Trigger/TriggerList/TriggerList.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/containers/Trigger/TriggerList/TriggerList.tsx b/src/containers/Trigger/TriggerList/TriggerList.tsx index 4244632e6c..794b2476d7 100644 --- a/src/containers/Trigger/TriggerList/TriggerList.tsx +++ b/src/containers/Trigger/TriggerList/TriggerList.tsx @@ -75,7 +75,7 @@ export const TriggerList = () => { navigate(`/trigger/${id}/edit`, { state: 'copy' }); }; - const handleEdit = (id: any) => { + const handleView = (id: any) => { navigate(`/trigger/${id}/edit`); }; @@ -87,10 +87,10 @@ export const TriggerList = () => { dialog: setDialog, }, { - label: t('Edit'), + label: t('View'), icon: , parameter: 'id', - dialog: handleEdit, + dialog: handleView, }, ]; From 3ab3d90017ff8beba24d9d6bfcfb6bede298bc7a Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Thu, 27 Nov 2025 13:05:47 +0530 Subject: [PATCH 17/48] fix: header naming --- src/containers/Form/FormLayout.tsx | 3 ++- src/containers/HSM/HSM.test.tsx | 4 ++-- src/containers/Trigger/Trigger.test.tsx | 12 ++++++------ 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/containers/Form/FormLayout.tsx b/src/containers/Form/FormLayout.tsx index f87f087a7b..182d35c3bb 100644 --- a/src/containers/Form/FormLayout.tsx +++ b/src/containers/Form/FormLayout.tsx @@ -650,7 +650,8 @@ export const FormLayout = ({ } else if (type === 'copy') { formTitle = `Copy ${listItemName}`; // case when copying an item } else if (itemId) { - formTitle = `Edit ${listItemName}`; // case when editing a item + const isview = listItemName === 'HSM Template' || listItemName === 'trigger'; + formTitle = isview ? `${listItemName}` : `Edit ${listItemName}`; // case when editing a item } else { formTitle = `Add a new ${listItemName}`; // case when adding a new item } diff --git a/src/containers/HSM/HSM.test.tsx b/src/containers/HSM/HSM.test.tsx index 72c7acccca..f69bf68dd8 100644 --- a/src/containers/HSM/HSM.test.tsx +++ b/src/containers/HSM/HSM.test.tsx @@ -48,7 +48,7 @@ describe('Edit mode', () => {
); await waitFor(() => { - expect(getByText('Edit HSM Template')).toBeInTheDocument(); + expect(getByText('HSM Template')).toBeInTheDocument(); }); await waitFor(() => { @@ -69,7 +69,7 @@ describe('Edit mode', () => { ); await waitFor(() => { - expect(getByText('Edit HSM Template')).toBeInTheDocument(); + expect(getByText('HSM Template')).toBeInTheDocument(); }); await waitFor(() => { diff --git a/src/containers/Trigger/Trigger.test.tsx b/src/containers/Trigger/Trigger.test.tsx index db9b2a7be2..b1f9fddb39 100644 --- a/src/containers/Trigger/Trigger.test.tsx +++ b/src/containers/Trigger/Trigger.test.tsx @@ -320,7 +320,7 @@ describe('edit mode', () => { expect(screen.getByText('Loading...')).toBeInTheDocument(); await waitFor(() => { - expect(screen.getByText('Edit trigger')).toBeInTheDocument(); + expect(screen.getByText('trigger')).toBeInTheDocument(); }); await waitFor(() => { @@ -354,7 +354,7 @@ describe('edit mode', () => { expect(screen.getByText('Loading...')).toBeInTheDocument(); await waitFor(() => { - expect(screen.getByText('Edit trigger')).toBeInTheDocument(); + expect(screen.getByText('trigger')).toBeInTheDocument(); }); await waitFor(() => { @@ -382,7 +382,7 @@ describe('edit mode', () => { expect(screen.getByText('Loading...')).toBeInTheDocument(); await waitFor(() => { - expect(screen.getByText('Edit trigger')).toBeInTheDocument(); + expect(screen.getByText('trigger')).toBeInTheDocument(); }); await waitFor(() => { @@ -412,7 +412,7 @@ describe('edit mode', () => { expect(screen.getByText('Loading...')).toBeInTheDocument(); await waitFor(() => { - expect(screen.getByText('Edit trigger')).toBeInTheDocument(); + expect(screen.getByText('trigger')).toBeInTheDocument(); }); await waitFor(() => { @@ -442,7 +442,7 @@ describe('edit mode', () => { expect(screen.getByText('Loading...')).toBeInTheDocument(); await waitFor(() => { - expect(screen.getByText('Edit trigger')).toBeInTheDocument(); + expect(screen.getByText('trigger')).toBeInTheDocument(); }); fireEvent.click(screen.getByTestId('remove-icon')); @@ -578,7 +578,7 @@ describe('Whatsapp group collections', () => { expect(screen.getByText('Loading...')).toBeInTheDocument(); await waitFor(() => { - expect(screen.getByText('Edit trigger')).toBeInTheDocument(); + expect(screen.getByText('trigger')).toBeInTheDocument(); }); await waitFor(() => { From 8847273c2a8300232fd5424d4b0e82edaa653416 Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Thu, 27 Nov 2025 14:07:13 +0530 Subject: [PATCH 18/48] fix: description --- src/components/UI/Heading/Heading.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/components/UI/Heading/Heading.tsx b/src/components/UI/Heading/Heading.tsx index b3ae295625..7fa4df8101 100644 --- a/src/components/UI/Heading/Heading.tsx +++ b/src/components/UI/Heading/Heading.tsx @@ -23,6 +23,8 @@ export interface HeadingProps { export const Heading = ({ formTitle, helpData, showHeaderHelp = true, backLink, headerHelp, button }: HeadingProps) => { const navigate = useNavigate(); const addIcon = ; + const isview = formTitle === 'HSM Template' || formTitle === 'trigger'; + const Title = isview ? 'view' : 'enter'; return (
@@ -37,7 +39,9 @@ export const Heading = ({ formTitle, helpData, showHeaderHelp = true, backLink,
{helpData ? : ''} -
{showHeaderHelp ? headerHelp || `Please enter below details.` : ''}
+
+ {showHeaderHelp ? headerHelp || `Please ${Title} below details.` : ''} +
{button && button.show && ( From 4f856c4bb31aa7f3eec44440dac181e941ce59b6 Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Thu, 27 Nov 2025 15:46:57 +0530 Subject: [PATCH 19/48] refactor: add back button --- src/containers/Form/FormLayout.tsx | 2 +- src/i18n/en/en.json | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/containers/Form/FormLayout.tsx b/src/containers/Form/FormLayout.tsx index 182d35c3bb..4d818c722f 100644 --- a/src/containers/Form/FormLayout.tsx +++ b/src/containers/Form/FormLayout.tsx @@ -610,7 +610,7 @@ export const FormLayout = ({ ) : null} {!skipCancel && ( )} diff --git a/src/i18n/en/en.json b/src/i18n/en/en.json index 5e1839cab4..3373a7189d 100644 --- a/src/i18n/en/en.json +++ b/src/i18n/en/en.json @@ -29,6 +29,7 @@ "Your full name": "Your full name", "Your personal WhatsApp number": "Your personal WhatsApp number", "Register with ": "Register with ", + "Back": "Back", "Login to Glific": "Login to Glific", "Phone number": "Phone number", "New Password": "New Password", From e46773850d0934d0117f46006916802979d95337 Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Thu, 27 Nov 2025 15:51:57 +0530 Subject: [PATCH 20/48] fix: test case --- src/containers/Consulting/Consulting.test.tsx | 6 +++--- src/containers/Extensions/Extensions.test.tsx | 2 +- src/containers/Form/FormLayout.test.tsx | 2 +- .../SettingList/Organization/Organisation.test.tsx | 2 +- .../OrganizationFlows/OrganisationFLows.test.tsx | 4 ++-- src/containers/SettingList/Providers/Providers.test.tsx | 4 ++-- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/containers/Consulting/Consulting.test.tsx b/src/containers/Consulting/Consulting.test.tsx index f42661fe2a..ce01029ee5 100644 --- a/src/containers/Consulting/Consulting.test.tsx +++ b/src/containers/Consulting/Consulting.test.tsx @@ -101,14 +101,14 @@ test('it renders consulting hours in edit mode', async () => { }); }); -test('Click in cancel button', async () => { +test('Click in Back button', async () => { const { getByText } = render(consultingEditForm); expect(getByText('Loading...')).toBeInTheDocument(); await waitFor(() => { - expect(getByText('Cancel')).toBeInTheDocument(); + expect(getByText('Back')).toBeInTheDocument(); }); - fireEvent.click(getByText('Cancel')); + fireEvent.click(getByText('Back')); await waitFor(() => { expect(setOpenDialogMock).toHaveBeenCalledWith(false); }); diff --git a/src/containers/Extensions/Extensions.test.tsx b/src/containers/Extensions/Extensions.test.tsx index ed0719f5a6..b0d72c0cb2 100644 --- a/src/containers/Extensions/Extensions.test.tsx +++ b/src/containers/Extensions/Extensions.test.tsx @@ -59,7 +59,7 @@ test('it should render form correctly', async () => { const submitButton = screen.getByText('Save'); expect(submitButton).toBeInTheDocument(); - const cancelButton = screen.getByText('Cancel'); + const cancelButton = screen.getByText('Back'); expect(cancelButton).toBeInTheDocument(); fireEvent.click(submitButton); diff --git a/src/containers/Form/FormLayout.test.tsx b/src/containers/Form/FormLayout.test.tsx index 42708ac548..9642311767 100644 --- a/src/containers/Form/FormLayout.test.tsx +++ b/src/containers/Form/FormLayout.test.tsx @@ -72,7 +72,7 @@ test('cancel button should redirect to flowlist page', async () => { ); await waitFor(() => { const { queryByText } = within(container.querySelector('form') as HTMLElement); - const button = queryByText('Cancel') as HTMLButtonElement; + const button = queryByText('Back') as HTMLButtonElement; fireEvent.click(button); expect(getByTestId('loading')).toBeInTheDocument(); }); diff --git a/src/containers/SettingList/Organization/Organisation.test.tsx b/src/containers/SettingList/Organization/Organisation.test.tsx index 362d21f330..be2b2d65ad 100644 --- a/src/containers/SettingList/Organization/Organisation.test.tsx +++ b/src/containers/SettingList/Organization/Organisation.test.tsx @@ -51,7 +51,7 @@ test('it renders component and clicks cancel', async () => { expect(getByText('Loading...')).toBeInTheDocument(); }); await waitFor(() => { - const Button = screen.getByText('Cancel'); + const Button = screen.getByText('Back'); expect(Button).toBeInTheDocument(); // click on Cancel user.click(Button); diff --git a/src/containers/SettingList/OrganizationFlows/OrganisationFLows.test.tsx b/src/containers/SettingList/OrganizationFlows/OrganisationFLows.test.tsx index c8db0b44c8..6331d0df56 100644 --- a/src/containers/SettingList/OrganizationFlows/OrganisationFLows.test.tsx +++ b/src/containers/SettingList/OrganizationFlows/OrganisationFLows.test.tsx @@ -24,12 +24,12 @@ test('it renders component properly', async () => { expect(getByText('Loading...')).toBeInTheDocument(); }); -test('it renders component and clicks cancel', async () => { +test('it renders component and clicks Back', async () => { const { getByText } = render(wrapper); // loading is show initially expect(getByText('Loading...')).toBeInTheDocument(); await waitFor(() => { - const Button = screen.getByText('Cancel'); + const Button = screen.getByText('Back'); expect(Button).toBeInTheDocument(); // click on Cancel user.click(Button); diff --git a/src/containers/SettingList/Providers/Providers.test.tsx b/src/containers/SettingList/Providers/Providers.test.tsx index 7d5ba34822..dc440da111 100644 --- a/src/containers/SettingList/Providers/Providers.test.tsx +++ b/src/containers/SettingList/Providers/Providers.test.tsx @@ -59,13 +59,13 @@ describe('', () => { }); describe('', () => { - it('Click on Cancel button', async () => { + it('Click on Back button', async () => { const { getByText } = render(wrapperWithType); // loading is show initially expect(getByText('Loading...')).toBeInTheDocument(); await waitFor(() => { // click on Cancel - const cancelButton = screen.getByText('Cancel'); + const cancelButton = screen.getByText('Back'); user.click(cancelButton); }); }); From b91d4fc2db42cd451dcb4bce3b3534c67f76b7f5 Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Thu, 27 Nov 2025 17:33:28 +0530 Subject: [PATCH 21/48] FIx: add props to trigger --- src/containers/Trigger/Trigger.tsx | 2 ++ src/containers/Trigger/TriggerType/TriggerType.tsx | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/containers/Trigger/Trigger.tsx b/src/containers/Trigger/Trigger.tsx index da43c82b14..99444e609d 100644 --- a/src/containers/Trigger/Trigger.tsx +++ b/src/containers/Trigger/Trigger.tsx @@ -303,6 +303,7 @@ export const Trigger = () => { Active? ), + disabled: isEditing, darkCheckbox: true, }, { @@ -383,6 +384,7 @@ export const Trigger = () => { handleOnChange: (value: any) => setGroupType(value), groupType: groupType, isWhatsAppGroupEnabled: isWhatsAppGroupEnabled, + disabled: isEditing, }, { component: AutoComplete, diff --git a/src/containers/Trigger/TriggerType/TriggerType.tsx b/src/containers/Trigger/TriggerType/TriggerType.tsx index 74bffd2243..a460d5ba0a 100644 --- a/src/containers/Trigger/TriggerType/TriggerType.tsx +++ b/src/containers/Trigger/TriggerType/TriggerType.tsx @@ -6,12 +6,14 @@ export interface TriggerTypeProps { groupType: string; isWhatsAppGroupEnabled: boolean; handleOnChange?: any; + disabled?: boolean; form: { dirty: any; touched: any; errors: any; setFieldValue: any; values: any }; } export const TriggerType = ({ groupType, isWhatsAppGroupEnabled, handleOnChange, + disabled = false, form: { setFieldValue }, }: TriggerTypeProps) => { const isChecked = (value: string) => groupType === value; @@ -40,7 +42,7 @@ export const TriggerType = ({ data-testid="radio-btn" value={CONTACTS_COLLECTION} checked={isChecked(CONTACTS_COLLECTION)} - control={} + control={} label={'WABA Collections'} className={styles.Label} /> @@ -50,7 +52,7 @@ export const TriggerType = ({ data-testid="radio-btn" value={WA_GROUPS_COLLECTION} checked={isChecked(WA_GROUPS_COLLECTION)} - control={} + control={} label={'WhatsApp Group Collections'} className={styles.Label} /> From beeb87300c5a9d92a8d176895caaf4c3ecab1062 Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Thu, 27 Nov 2025 17:38:51 +0530 Subject: [PATCH 22/48] fix: back button --- src/containers/Consulting/Consulting.test.tsx | 6 +++--- src/containers/Extensions/Extensions.test.tsx | 2 +- src/containers/Form/FormLayout.test.tsx | 2 +- src/containers/Form/FormLayout.tsx | 2 +- .../SettingList/Organization/Organisation.test.tsx | 2 +- .../OrganizationFlows/OrganisationFLows.test.tsx | 4 ++-- src/containers/SettingList/Providers/Providers.test.tsx | 4 ++-- src/i18n/en/en.json | 2 +- 8 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/containers/Consulting/Consulting.test.tsx b/src/containers/Consulting/Consulting.test.tsx index ce01029ee5..9ba72d9e5b 100644 --- a/src/containers/Consulting/Consulting.test.tsx +++ b/src/containers/Consulting/Consulting.test.tsx @@ -101,14 +101,14 @@ test('it renders consulting hours in edit mode', async () => { }); }); -test('Click in Back button', async () => { +test('Click in Go Back button', async () => { const { getByText } = render(consultingEditForm); expect(getByText('Loading...')).toBeInTheDocument(); await waitFor(() => { - expect(getByText('Back')).toBeInTheDocument(); + expect(getByText('Go Back')).toBeInTheDocument(); }); - fireEvent.click(getByText('Back')); + fireEvent.click(getByText('Go Back')); await waitFor(() => { expect(setOpenDialogMock).toHaveBeenCalledWith(false); }); diff --git a/src/containers/Extensions/Extensions.test.tsx b/src/containers/Extensions/Extensions.test.tsx index b0d72c0cb2..0e8d18fb60 100644 --- a/src/containers/Extensions/Extensions.test.tsx +++ b/src/containers/Extensions/Extensions.test.tsx @@ -59,7 +59,7 @@ test('it should render form correctly', async () => { const submitButton = screen.getByText('Save'); expect(submitButton).toBeInTheDocument(); - const cancelButton = screen.getByText('Back'); + const cancelButton = screen.getByText('Go Back'); expect(cancelButton).toBeInTheDocument(); fireEvent.click(submitButton); diff --git a/src/containers/Form/FormLayout.test.tsx b/src/containers/Form/FormLayout.test.tsx index 9642311767..0ff0efd748 100644 --- a/src/containers/Form/FormLayout.test.tsx +++ b/src/containers/Form/FormLayout.test.tsx @@ -72,7 +72,7 @@ test('cancel button should redirect to flowlist page', async () => { ); await waitFor(() => { const { queryByText } = within(container.querySelector('form') as HTMLElement); - const button = queryByText('Back') as HTMLButtonElement; + const button = queryByText('Go Back') as HTMLButtonElement; fireEvent.click(button); expect(getByTestId('loading')).toBeInTheDocument(); }); diff --git a/src/containers/Form/FormLayout.tsx b/src/containers/Form/FormLayout.tsx index 4d818c722f..2328ce7d9c 100644 --- a/src/containers/Form/FormLayout.tsx +++ b/src/containers/Form/FormLayout.tsx @@ -610,7 +610,7 @@ export const FormLayout = ({ ) : null} {!skipCancel && ( )} diff --git a/src/containers/SettingList/Organization/Organisation.test.tsx b/src/containers/SettingList/Organization/Organisation.test.tsx index be2b2d65ad..6458028f34 100644 --- a/src/containers/SettingList/Organization/Organisation.test.tsx +++ b/src/containers/SettingList/Organization/Organisation.test.tsx @@ -51,7 +51,7 @@ test('it renders component and clicks cancel', async () => { expect(getByText('Loading...')).toBeInTheDocument(); }); await waitFor(() => { - const Button = screen.getByText('Back'); + const Button = screen.getByText('Go Back'); expect(Button).toBeInTheDocument(); // click on Cancel user.click(Button); diff --git a/src/containers/SettingList/OrganizationFlows/OrganisationFLows.test.tsx b/src/containers/SettingList/OrganizationFlows/OrganisationFLows.test.tsx index 6331d0df56..2804e5b0ae 100644 --- a/src/containers/SettingList/OrganizationFlows/OrganisationFLows.test.tsx +++ b/src/containers/SettingList/OrganizationFlows/OrganisationFLows.test.tsx @@ -24,12 +24,12 @@ test('it renders component properly', async () => { expect(getByText('Loading...')).toBeInTheDocument(); }); -test('it renders component and clicks Back', async () => { +test('it renders component and clicks Go Back', async () => { const { getByText } = render(wrapper); // loading is show initially expect(getByText('Loading...')).toBeInTheDocument(); await waitFor(() => { - const Button = screen.getByText('Back'); + const Button = screen.getByText('Go Back'); expect(Button).toBeInTheDocument(); // click on Cancel user.click(Button); diff --git a/src/containers/SettingList/Providers/Providers.test.tsx b/src/containers/SettingList/Providers/Providers.test.tsx index dc440da111..ebd8940ff3 100644 --- a/src/containers/SettingList/Providers/Providers.test.tsx +++ b/src/containers/SettingList/Providers/Providers.test.tsx @@ -59,13 +59,13 @@ describe('', () => { }); describe('', () => { - it('Click on Back button', async () => { + it('Click on Go Back button', async () => { const { getByText } = render(wrapperWithType); // loading is show initially expect(getByText('Loading...')).toBeInTheDocument(); await waitFor(() => { // click on Cancel - const cancelButton = screen.getByText('Back'); + const cancelButton = screen.getByText('Go Back'); user.click(cancelButton); }); }); diff --git a/src/i18n/en/en.json b/src/i18n/en/en.json index 3373a7189d..f7df266ccc 100644 --- a/src/i18n/en/en.json +++ b/src/i18n/en/en.json @@ -29,7 +29,7 @@ "Your full name": "Your full name", "Your personal WhatsApp number": "Your personal WhatsApp number", "Register with ": "Register with ", - "Back": "Back", + "Go Back": "Go Back", "Login to Glific": "Login to Glific", "Phone number": "Phone number", "New Password": "New Password", From 87b1b1f6cda15dd43ca0aaffe470e2b83abb981a Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Thu, 27 Nov 2025 17:49:57 +0530 Subject: [PATCH 23/48] fix: Remove save when it is in editing mode --- src/containers/Form/FormLayout.tsx | 36 ++++++++++++++----------- src/containers/Trigger/Trigger.test.tsx | 6 ----- src/containers/Trigger/Trigger.tsx | 1 + 3 files changed, 21 insertions(+), 22 deletions(-) diff --git a/src/containers/Form/FormLayout.tsx b/src/containers/Form/FormLayout.tsx index 2328ce7d9c..8938f9bb29 100644 --- a/src/containers/Form/FormLayout.tsx +++ b/src/containers/Form/FormLayout.tsx @@ -60,6 +60,7 @@ export interface FormLayoutProps { refetchQueries?: Array; redirect?: boolean; title?: string; + hideSaveButton?: boolean; cancelAction?: Function; getLanguageId?: Function; backLinkButton?: string; @@ -99,6 +100,7 @@ export const FormLayout = ({ formFields, redirectionLink, listItem, + hideSaveButton = false, getItemQuery, createItemQuery, updateItemQuery, @@ -574,22 +576,24 @@ export const FormLayout = ({ ); })}
- + {!hideSaveButton && ( + + )} {additionalAction ? (
diff --git a/src/containers/Form/FormLayout.tsx b/src/containers/Form/FormLayout.tsx index 4926bd2246..cae3d54a6f 100644 --- a/src/containers/Form/FormLayout.tsx +++ b/src/containers/Form/FormLayout.tsx @@ -664,7 +664,7 @@ export const FormLayout = ({ } else if (type === 'copy') { formTitle = `Copy ${listItemName}`; // case when copying an item } else if (itemId) { - const isview = listItemName === 'HSM Template' || listItemName === 'trigger'; + const isview = listItemName === 'HSM Template' || listItemName === 'Trigger'; formTitle = isview ? `${listItemName}` : `Edit ${listItemName}`; // case when editing a item } else { formTitle = `Create a new ${listItemName}`; // case when adding a new item diff --git a/src/containers/Trigger/Trigger.test.tsx b/src/containers/Trigger/Trigger.test.tsx index 2119720983..21306a5bcb 100644 --- a/src/containers/Trigger/Trigger.test.tsx +++ b/src/containers/Trigger/Trigger.test.tsx @@ -40,7 +40,7 @@ const startTime = dayjs().add(1, 'hour'); const fillForm = async (container: any, frequency: string) => { await waitFor(() => { - expect(screen.getByText('Create a new trigger')).toBeInTheDocument(); + expect(screen.getByText('Create a new Trigger')).toBeInTheDocument(); }); await waitFor(() => { @@ -139,7 +139,7 @@ describe('add mode', () => { expect(screen.getByText('Loading...')).toBeInTheDocument(); await waitFor(() => { - expect(screen.getByText('Create a new trigger')).toBeInTheDocument(); + expect(screen.getByText('Create a new Trigger')).toBeInTheDocument(); }); const autoCompletes = screen.getAllByRole('combobox'); @@ -207,7 +207,7 @@ describe('add mode', () => { expect(screen.getByText('Loading...')).toBeInTheDocument(); await waitFor(() => { - expect(screen.getByText('Create a new trigger')).toBeInTheDocument(); + expect(screen.getByText('Create a new Trigger')).toBeInTheDocument(); }); const autoCompletes = screen.getAllByRole('combobox'); @@ -244,7 +244,7 @@ describe('add mode', () => { expect(screen.getByText('Loading...')).toBeInTheDocument(); await waitFor(() => { - expect(screen.getByText('Create a new trigger')).toBeInTheDocument(); + expect(screen.getByText('Create a new Trigger')).toBeInTheDocument(); }); const autoCompletes = screen.getAllByRole('combobox'); @@ -268,7 +268,7 @@ describe('add mode', () => { expect(screen.getByText('Loading...')).toBeInTheDocument(); await waitFor(() => { - expect(screen.getByText('Create a new trigger')).toBeInTheDocument(); + expect(screen.getByText('Create a new Trigger')).toBeInTheDocument(); }); const startDateInput = container.queryByTestId('Start date'); @@ -320,7 +320,7 @@ describe('edit mode', () => { expect(screen.getByText('Loading...')).toBeInTheDocument(); await waitFor(() => { - expect(screen.getByText('trigger')).toBeInTheDocument(); + expect(screen.getByText('Trigger')).toBeInTheDocument(); }); await waitFor(() => { @@ -348,7 +348,7 @@ describe('edit mode', () => { expect(screen.getByText('Loading...')).toBeInTheDocument(); await waitFor(() => { - expect(screen.getByText('trigger')).toBeInTheDocument(); + expect(screen.getByText('Trigger')).toBeInTheDocument(); }); await waitFor(() => { @@ -376,7 +376,7 @@ describe('edit mode', () => { expect(screen.getByText('Loading...')).toBeInTheDocument(); await waitFor(() => { - expect(screen.getByText('trigger')).toBeInTheDocument(); + expect(screen.getByText('Trigger')).toBeInTheDocument(); }); await waitFor(() => { @@ -406,7 +406,7 @@ describe('edit mode', () => { expect(screen.getByText('Loading...')).toBeInTheDocument(); await waitFor(() => { - expect(screen.getByText('trigger')).toBeInTheDocument(); + expect(screen.getByText('Trigger')).toBeInTheDocument(); }); await waitFor(() => { @@ -436,13 +436,13 @@ describe('edit mode', () => { expect(screen.getByText('Loading...')).toBeInTheDocument(); await waitFor(() => { - expect(screen.getByText('trigger')).toBeInTheDocument(); + expect(screen.getByText('Trigger')).toBeInTheDocument(); }); fireEvent.click(screen.getByTestId('remove-icon')); await waitFor(() => { - expect(screen.getByText('Are you sure you want to delete the trigger?')).toBeInTheDocument(); + expect(screen.getByText('Are you sure you want to delete the Trigger?')).toBeInTheDocument(); }); fireEvent.click(screen.getByTestId('ok-button')); @@ -484,7 +484,7 @@ describe('copy mode', async () => { expect(screen.getByText('Loading...')).toBeInTheDocument(); await waitFor(() => { - expect(screen.getByText('Copy trigger')).toBeInTheDocument(); + expect(screen.getByText('Copy Trigger')).toBeInTheDocument(); }); await waitFor(() => { @@ -515,7 +515,7 @@ describe('copy mode', async () => { fireEvent.click(screen.getByTestId('submitActionButton')); await waitFor(() => { - expect(screen.getByText('Copy trigger')).toBeInTheDocument(); + expect(screen.getByText('Copy Trigger')).toBeInTheDocument(); }); }); }); @@ -542,7 +542,7 @@ describe('Whatsapp group collections', () => { expect(screen.getByText('Loading...')).toBeInTheDocument(); await waitFor(() => { - expect(screen.getByText('Create a new trigger')).toBeInTheDocument(); + expect(screen.getByText('Create a new Trigger')).toBeInTheDocument(); }); await fillForm(container, 'Daily'); @@ -572,7 +572,7 @@ describe('Whatsapp group collections', () => { expect(screen.getByText('Loading...')).toBeInTheDocument(); await waitFor(() => { - expect(screen.getByText('trigger')).toBeInTheDocument(); + expect(screen.getByText('Trigger')).toBeInTheDocument(); }); await waitFor(() => { diff --git a/src/containers/Trigger/Trigger.tsx b/src/containers/Trigger/Trigger.tsx index f90742d377..4d214f4d15 100644 --- a/src/containers/Trigger/Trigger.tsx +++ b/src/containers/Trigger/Trigger.tsx @@ -444,7 +444,7 @@ export const Trigger = () => { setPayload={(payload: any) => setPayload(payload, roles, groupType)} validationSchema={FormSchema} languageSupport={false} - listItemName="trigger" + listItemName="Trigger" dialogMessage={dialogMessage} formFields={formFields} redirectionLink="trigger" From e1b95df66cfe6600fb0ead5a2e23d9cfc69e459a Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Thu, 27 Nov 2025 21:05:53 +0530 Subject: [PATCH 26/48] fix: add global header for format layout --- src/components/UI/Heading/Heading.tsx | 15 +++++++++++---- src/containers/Form/FormLayout.tsx | 4 +++- src/containers/Trigger/Trigger.tsx | 1 + 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/components/UI/Heading/Heading.tsx b/src/components/UI/Heading/Heading.tsx index a7cbef54e1..b1c5e118d1 100644 --- a/src/components/UI/Heading/Heading.tsx +++ b/src/components/UI/Heading/Heading.tsx @@ -11,6 +11,7 @@ export interface HeadingProps { showHeaderHelp?: boolean; backLink?: string; headerHelp?: string; + addHeader?: string; button?: { show: boolean; label: string; @@ -20,11 +21,17 @@ export interface HeadingProps { }; } -export const Heading = ({ formTitle, helpData, showHeaderHelp = true, backLink, headerHelp, button }: HeadingProps) => { +export const Heading = ({ + formTitle, + helpData, + showHeaderHelp = true, + backLink, + headerHelp, + button, + addHeader, +}: HeadingProps) => { const navigate = useNavigate(); const addIcon = ; - const isview = formTitle === 'HSM Template' || formTitle === 'trigger'; - const title = isview ? 'view' : 'enter'; return (
@@ -40,7 +47,7 @@ export const Heading = ({ formTitle, helpData, showHeaderHelp = true, backLink, {helpData ? : ''}
- {showHeaderHelp ? headerHelp || `Please ${title} below details.` : ''} + {showHeaderHelp ? headerHelp || `Please ${addHeader} below details.` : ''}
diff --git a/src/containers/Form/FormLayout.tsx b/src/containers/Form/FormLayout.tsx index cae3d54a6f..9653e08cd7 100644 --- a/src/containers/Form/FormLayout.tsx +++ b/src/containers/Form/FormLayout.tsx @@ -77,6 +77,7 @@ export interface FormLayoutProps { languageAttributes?: any; helpData?: HelpDataProps; noHeading?: boolean; + subHead?: string; partialPage?: boolean; confirmationState?: { show: boolean; @@ -99,6 +100,7 @@ export const FormLayout = ({ dialogMessage, formFields, redirectionLink, + subHead = 'edit', listItem, hideSaveButton = false, getItemQuery, @@ -670,7 +672,7 @@ export const FormLayout = ({ formTitle = `Create a new ${listItemName}`; // case when adding a new item } - let heading = ; + let heading = ; let confirmationDialog; if (showConfirmationDialog) { diff --git a/src/containers/Trigger/Trigger.tsx b/src/containers/Trigger/Trigger.tsx index 4d214f4d15..94db8004de 100644 --- a/src/containers/Trigger/Trigger.tsx +++ b/src/containers/Trigger/Trigger.tsx @@ -440,6 +440,7 @@ export const Trigger = () => { {...queries} states={states} roleAccessSupport + subHead={isEditing ? 'view' : 'edit'} setStates={setStates} setPayload={(payload: any) => setPayload(payload, roles, groupType)} validationSchema={FormSchema} From d87a547e6508da0a4b2a8fb439997b00d1f291eb Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Thu, 27 Nov 2025 21:10:52 +0530 Subject: [PATCH 27/48] refactor: add global header for hsm and add test case --- src/containers/Consulting/Consulting.test.tsx | 2 +- src/containers/HSM/HSM.tsx | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/containers/Consulting/Consulting.test.tsx b/src/containers/Consulting/Consulting.test.tsx index 9ba72d9e5b..98cae912be 100644 --- a/src/containers/Consulting/Consulting.test.tsx +++ b/src/containers/Consulting/Consulting.test.tsx @@ -101,7 +101,7 @@ test('it renders consulting hours in edit mode', async () => { }); }); -test('Click in Go Back button', async () => { +test('Click on Go Back button', async () => { const { getByText } = render(consultingEditForm); expect(getByText('Loading...')).toBeInTheDocument(); diff --git a/src/containers/HSM/HSM.tsx b/src/containers/HSM/HSM.tsx index a8c97724c1..2f34beccf0 100644 --- a/src/containers/HSM/HSM.tsx +++ b/src/containers/HSM/HSM.tsx @@ -110,12 +110,16 @@ export const HSM = () => { let backButton = location.state?.tag?.label ? `template?tag=${location.state?.tag?.label}` : 'template'; const { data: categoryList, loading: categoryLoading } = useQuery(GET_HSM_CATEGORIES); - const { data: shortCodes, loading: shortcodesLoading, refetch: refetchShortcodes} = useQuery(GET_SHORTCODES, { + const { + data: shortCodes, + loading: shortcodesLoading, + refetch: refetchShortcodes, + } = useQuery(GET_SHORTCODES, { variables: { filter: { isHsm: true, }, - } + }, }); const { data: tag, loading: tagLoading } = useQuery(GET_TAGS, { @@ -892,6 +896,7 @@ export const HSM = () => { {...queries} states={states} setStates={setStates} + subHead={isEditing ? 'view' : 'edit'} setPayload={setPayload} validationSchema={isEditing ? Yup.object() : FormSchema} listItemName="HSM Template" From 41db357c7e05d72618878a8fd9272788725d1577 Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Thu, 27 Nov 2025 21:26:43 +0530 Subject: [PATCH 28/48] fix: test case --- src/containers/HSM/HSM.test.tsx | 2 +- src/containers/TemplateOptions/TemplateOptions.test.tsx | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/containers/HSM/HSM.test.tsx b/src/containers/HSM/HSM.test.tsx index 09421663c7..2dadc300e6 100644 --- a/src/containers/HSM/HSM.test.tsx +++ b/src/containers/HSM/HSM.test.tsx @@ -198,7 +198,7 @@ describe('Add mode', () => { render(template); await waitFor(() => { - expect(screen.getByText('Add a new HSM Template')).toBeInTheDocument(); + expect(screen.getByText('Create a new HSM Template')).toBeInTheDocument(); }); const inputs = screen.getAllByRole('textbox'); diff --git a/src/containers/TemplateOptions/TemplateOptions.test.tsx b/src/containers/TemplateOptions/TemplateOptions.test.tsx index 45af9c3c1c..1491975b7c 100644 --- a/src/containers/TemplateOptions/TemplateOptions.test.tsx +++ b/src/containers/TemplateOptions/TemplateOptions.test.tsx @@ -17,7 +17,7 @@ const wrapper = (initialEntry: string = '/template/add') => ( test('it renders component and selects call to action type', async () => { const { findByText, getByText, findByLabelText } = render(wrapper()); - const hsmTitle = await findByText('Add a new HSM Template'); + const hsmTitle = await findByText('Create a new HSM Template'); expect(hsmTitle).toBeInTheDocument(); const addButtonsCheckbox = getByText('Add buttons'); fireEvent.click(addButtonsCheckbox); @@ -31,7 +31,7 @@ test('it renders component and selects call to action type', async () => { test('it renders call to action button template successfully', async () => { const { findByText, getAllByRole, getByText, findByLabelText } = render(wrapper()); - const hsmTitle = await findByText('Add a new HSM Template'); + const hsmTitle = await findByText('Create a new HSM Template'); expect(hsmTitle).toBeInTheDocument(); const addButtonsCheckbox = getByText('Add buttons'); fireEvent.click(addButtonsCheckbox); @@ -58,7 +58,7 @@ test('it renders call to action button template successfully', async () => { test('it renders quick reply button template successfully', async () => { const { findByText, findByLabelText, getByText, getByTestId } = render(wrapper()); - const hsmTitle = await findByText('Add a new HSM Template'); + const hsmTitle = await findByText('Create a new HSM Template'); expect(hsmTitle).toBeInTheDocument(); const addButtonsCheckbox = getByText('Add buttons'); fireEvent.click(addButtonsCheckbox); From c461e1f7501f82d25b10f6441c139f9f6ad96691 Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Thu, 27 Nov 2025 22:37:00 +0530 Subject: [PATCH 29/48] fix: add new props --- src/containers/Form/FormLayout.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/containers/Form/FormLayout.tsx b/src/containers/Form/FormLayout.tsx index 9653e08cd7..35da3a34c9 100644 --- a/src/containers/Form/FormLayout.tsx +++ b/src/containers/Form/FormLayout.tsx @@ -47,6 +47,7 @@ export interface FormLayoutProps { languageSupport?: boolean; setPayload?: Function; advanceSearch?: any; + backButtonLabel?: string; additionalState?: any; button?: string; buttonState?: { @@ -100,6 +101,7 @@ export const FormLayout = ({ dialogMessage, formFields, redirectionLink, + backButtonLabel = 'Cancel', subHead = 'edit', listItem, hideSaveButton = false, @@ -626,7 +628,7 @@ export const FormLayout = ({ ) : null} {!skipCancel && ( )} From dbc97669e4cb2fd5bc2577372d41b71c5bc36e0d Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Thu, 27 Nov 2025 22:48:32 +0530 Subject: [PATCH 30/48] fix: add new props for cancel button --- src/containers/Consulting/Consulting.test.tsx | 4 ++-- src/containers/Extensions/Extensions.test.tsx | 2 +- src/containers/Form/FormLayout.test.tsx | 2 +- src/containers/HSM/HSM.tsx | 1 + src/containers/SettingList/Organization/Organisation.test.tsx | 2 +- .../SettingList/OrganizationFlows/OrganisationFLows.test.tsx | 4 ++-- src/containers/SettingList/Providers/Providers.test.tsx | 2 +- src/containers/Trigger/Trigger.tsx | 1 + 8 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/containers/Consulting/Consulting.test.tsx b/src/containers/Consulting/Consulting.test.tsx index 98cae912be..de02625cd2 100644 --- a/src/containers/Consulting/Consulting.test.tsx +++ b/src/containers/Consulting/Consulting.test.tsx @@ -106,9 +106,9 @@ test('Click on Go Back button', async () => { expect(getByText('Loading...')).toBeInTheDocument(); await waitFor(() => { - expect(getByText('Go Back')).toBeInTheDocument(); + expect(getByText('Cancel')).toBeInTheDocument(); }); - fireEvent.click(getByText('Go Back')); + fireEvent.click(getByText('Cancel')); await waitFor(() => { expect(setOpenDialogMock).toHaveBeenCalledWith(false); }); diff --git a/src/containers/Extensions/Extensions.test.tsx b/src/containers/Extensions/Extensions.test.tsx index 0e8d18fb60..ed0719f5a6 100644 --- a/src/containers/Extensions/Extensions.test.tsx +++ b/src/containers/Extensions/Extensions.test.tsx @@ -59,7 +59,7 @@ test('it should render form correctly', async () => { const submitButton = screen.getByText('Save'); expect(submitButton).toBeInTheDocument(); - const cancelButton = screen.getByText('Go Back'); + const cancelButton = screen.getByText('Cancel'); expect(cancelButton).toBeInTheDocument(); fireEvent.click(submitButton); diff --git a/src/containers/Form/FormLayout.test.tsx b/src/containers/Form/FormLayout.test.tsx index 0ff0efd748..42708ac548 100644 --- a/src/containers/Form/FormLayout.test.tsx +++ b/src/containers/Form/FormLayout.test.tsx @@ -72,7 +72,7 @@ test('cancel button should redirect to flowlist page', async () => { ); await waitFor(() => { const { queryByText } = within(container.querySelector('form') as HTMLElement); - const button = queryByText('Go Back') as HTMLButtonElement; + const button = queryByText('Cancel') as HTMLButtonElement; fireEvent.click(button); expect(getByTestId('loading')).toBeInTheDocument(); }); diff --git a/src/containers/HSM/HSM.tsx b/src/containers/HSM/HSM.tsx index 2f34beccf0..0609d79eba 100644 --- a/src/containers/HSM/HSM.tsx +++ b/src/containers/HSM/HSM.tsx @@ -901,6 +901,7 @@ export const HSM = () => { validationSchema={isEditing ? Yup.object() : FormSchema} listItemName="HSM Template" dialogMessage={dialogMessage} + backButtonLabel={isEditing ? 'Go Back' : 'Cancel'} formFields={fields} redirectionLink={backButton} listItem="sessionTemplate" diff --git a/src/containers/SettingList/Organization/Organisation.test.tsx b/src/containers/SettingList/Organization/Organisation.test.tsx index 6458028f34..362d21f330 100644 --- a/src/containers/SettingList/Organization/Organisation.test.tsx +++ b/src/containers/SettingList/Organization/Organisation.test.tsx @@ -51,7 +51,7 @@ test('it renders component and clicks cancel', async () => { expect(getByText('Loading...')).toBeInTheDocument(); }); await waitFor(() => { - const Button = screen.getByText('Go Back'); + const Button = screen.getByText('Cancel'); expect(Button).toBeInTheDocument(); // click on Cancel user.click(Button); diff --git a/src/containers/SettingList/OrganizationFlows/OrganisationFLows.test.tsx b/src/containers/SettingList/OrganizationFlows/OrganisationFLows.test.tsx index 2804e5b0ae..2c8c9371ec 100644 --- a/src/containers/SettingList/OrganizationFlows/OrganisationFLows.test.tsx +++ b/src/containers/SettingList/OrganizationFlows/OrganisationFLows.test.tsx @@ -24,12 +24,12 @@ test('it renders component properly', async () => { expect(getByText('Loading...')).toBeInTheDocument(); }); -test('it renders component and clicks Go Back', async () => { +test('it renders component and clicks Cancel Button', async () => { const { getByText } = render(wrapper); // loading is show initially expect(getByText('Loading...')).toBeInTheDocument(); await waitFor(() => { - const Button = screen.getByText('Go Back'); + const Button = screen.getByText('Cancel'); expect(Button).toBeInTheDocument(); // click on Cancel user.click(Button); diff --git a/src/containers/SettingList/Providers/Providers.test.tsx b/src/containers/SettingList/Providers/Providers.test.tsx index ebd8940ff3..062fb0b6f7 100644 --- a/src/containers/SettingList/Providers/Providers.test.tsx +++ b/src/containers/SettingList/Providers/Providers.test.tsx @@ -65,7 +65,7 @@ describe('', () => { expect(getByText('Loading...')).toBeInTheDocument(); await waitFor(() => { // click on Cancel - const cancelButton = screen.getByText('Go Back'); + const cancelButton = screen.getByText('Cancel'); user.click(cancelButton); }); }); diff --git a/src/containers/Trigger/Trigger.tsx b/src/containers/Trigger/Trigger.tsx index 94db8004de..75ba432974 100644 --- a/src/containers/Trigger/Trigger.tsx +++ b/src/containers/Trigger/Trigger.tsx @@ -451,6 +451,7 @@ export const Trigger = () => { redirectionLink="trigger" listItem="trigger" type={type} + backButtonLabel={isEditing ? 'Go Back' : 'Cancel'} hideSaveButton={isEditing} copyNotification={t('Copy of the trigger has been created!')} icon={triggerIcon} From 24b80506cb4f8d3b237893218b54cd2f81d6a730 Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Thu, 27 Nov 2025 23:00:18 +0530 Subject: [PATCH 31/48] fix: add new props for header --- src/containers/Form/FormLayout.tsx | 5 +++-- src/containers/HSM/HSM.tsx | 1 + src/containers/Trigger/Trigger.tsx | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/containers/Form/FormLayout.tsx b/src/containers/Form/FormLayout.tsx index 35da3a34c9..c671ee8b0f 100644 --- a/src/containers/Form/FormLayout.tsx +++ b/src/containers/Form/FormLayout.tsx @@ -79,6 +79,7 @@ export interface FormLayoutProps { helpData?: HelpDataProps; noHeading?: boolean; subHead?: string; + isView?: Boolean; partialPage?: boolean; confirmationState?: { show: boolean; @@ -98,6 +99,7 @@ export const FormLayout = ({ setStates, validationSchema, listItemName, + isView, dialogMessage, formFields, redirectionLink, @@ -668,8 +670,7 @@ export const FormLayout = ({ } else if (type === 'copy') { formTitle = `Copy ${listItemName}`; // case when copying an item } else if (itemId) { - const isview = listItemName === 'HSM Template' || listItemName === 'Trigger'; - formTitle = isview ? `${listItemName}` : `Edit ${listItemName}`; // case when editing a item + formTitle = isView ? `${listItemName}` : `Edit ${listItemName}`; // case when editing a item } else { formTitle = `Create a new ${listItemName}`; // case when adding a new item } diff --git a/src/containers/HSM/HSM.tsx b/src/containers/HSM/HSM.tsx index 0609d79eba..1073e2b2a6 100644 --- a/src/containers/HSM/HSM.tsx +++ b/src/containers/HSM/HSM.tsx @@ -895,6 +895,7 @@ export const HSM = () => { { redirectionLink="trigger" listItem="trigger" type={type} + isView={true} backButtonLabel={isEditing ? 'Go Back' : 'Cancel'} hideSaveButton={isEditing} copyNotification={t('Copy of the trigger has been created!')} From eb8d6dcf6383b58d235bbf7fd384b6bc05ac16d6 Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Thu, 27 Nov 2025 23:47:13 +0530 Subject: [PATCH 32/48] fix: view props --- src/containers/Form/FormLayout.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/containers/Form/FormLayout.tsx b/src/containers/Form/FormLayout.tsx index c671ee8b0f..83f51174c3 100644 --- a/src/containers/Form/FormLayout.tsx +++ b/src/containers/Form/FormLayout.tsx @@ -99,7 +99,7 @@ export const FormLayout = ({ setStates, validationSchema, listItemName, - isView, + isView = false, dialogMessage, formFields, redirectionLink, From f7b36919a0fb0a047c7a47fd82bf466ba80bd741 Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Fri, 28 Nov 2025 10:43:09 +0530 Subject: [PATCH 33/48] fix: header --- src/components/UI/Heading/Heading.tsx | 8 +------- src/containers/ContactManagement/ContactManagement.tsx | 2 +- src/containers/Form/FormLayout.tsx | 7 ++++++- src/containers/MyAccount/MyAccount.tsx | 2 +- src/containers/Profile/Contact/ContactProfile.tsx | 2 +- src/containers/WaGroups/GroupDetails.tsx/GroupDetails.tsx | 2 +- 6 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/components/UI/Heading/Heading.tsx b/src/components/UI/Heading/Heading.tsx index b1c5e118d1..b0c82a87bb 100644 --- a/src/components/UI/Heading/Heading.tsx +++ b/src/components/UI/Heading/Heading.tsx @@ -8,10 +8,8 @@ import AddIcon from 'assets/images/add.svg?react'; export interface HeadingProps { formTitle: string; helpData?: any; - showHeaderHelp?: boolean; backLink?: string; headerHelp?: string; - addHeader?: string; button?: { show: boolean; label: string; @@ -24,11 +22,9 @@ export interface HeadingProps { export const Heading = ({ formTitle, helpData, - showHeaderHelp = true, backLink, headerHelp, button, - addHeader, }: HeadingProps) => { const navigate = useNavigate(); const addIcon = ; @@ -46,9 +42,7 @@ export const Heading = ({ {helpData ? : ''} -
- {showHeaderHelp ? headerHelp || `Please ${addHeader} below details.` : ''} -
+ {headerHelp &&
{headerHelp}
} {button && button.show && ( diff --git a/src/containers/ContactManagement/ContactManagement.tsx b/src/containers/ContactManagement/ContactManagement.tsx index 26dbd47613..a99e20e6d4 100644 --- a/src/containers/ContactManagement/ContactManagement.tsx +++ b/src/containers/ContactManagement/ContactManagement.tsx @@ -45,7 +45,7 @@ export const ContactManagement = () => { return ( <> - +
diff --git a/src/containers/Form/FormLayout.tsx b/src/containers/Form/FormLayout.tsx index 83f51174c3..e3d001cd57 100644 --- a/src/containers/Form/FormLayout.tsx +++ b/src/containers/Form/FormLayout.tsx @@ -663,6 +663,7 @@ export const FormLayout = ({ } let formTitle = ''; + let headerHelp: string | undefined; // set title if there is a title if (title) { @@ -675,7 +676,11 @@ export const FormLayout = ({ formTitle = `Create a new ${listItemName}`; // case when adding a new item } - let heading = ; + if (subHead) { + headerHelp = `Please ${subHead} below details.`; + } + + let heading = ; let confirmationDialog; if (showConfirmationDialog) { diff --git a/src/containers/MyAccount/MyAccount.tsx b/src/containers/MyAccount/MyAccount.tsx index e2e19844f9..40b752dd62 100644 --- a/src/containers/MyAccount/MyAccount.tsx +++ b/src/containers/MyAccount/MyAccount.tsx @@ -303,7 +303,7 @@ export const MyAccount = () => { return (
- +
{userForm} diff --git a/src/containers/Profile/Contact/ContactProfile.tsx b/src/containers/Profile/Contact/ContactProfile.tsx index d0b8ec30ae..86807ce402 100644 --- a/src/containers/Profile/Contact/ContactProfile.tsx +++ b/src/containers/Profile/Contact/ContactProfile.tsx @@ -179,7 +179,7 @@ export const ContactProfile = () => { return ( <> - + {drawer} {profileBodyContent} diff --git a/src/containers/WaGroups/GroupDetails.tsx/GroupDetails.tsx b/src/containers/WaGroups/GroupDetails.tsx/GroupDetails.tsx index 4b0f3c275b..6860e67723 100644 --- a/src/containers/WaGroups/GroupDetails.tsx/GroupDetails.tsx +++ b/src/containers/WaGroups/GroupDetails.tsx/GroupDetails.tsx @@ -223,7 +223,7 @@ export const GroupDetails = () => { return ( <> - +
{drawer} From 69838a6ce72fe11bc82b58fa328a10fc002feefb Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Fri, 28 Nov 2025 10:58:09 +0530 Subject: [PATCH 34/48] fix: button logic --- src/containers/Form/FormLayout.tsx | 6 ++---- src/containers/HSM/HSM.tsx | 3 +-- src/containers/Trigger/Trigger.tsx | 2 +- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/containers/Form/FormLayout.tsx b/src/containers/Form/FormLayout.tsx index e3d001cd57..180d037857 100644 --- a/src/containers/Form/FormLayout.tsx +++ b/src/containers/Form/FormLayout.tsx @@ -49,7 +49,7 @@ export interface FormLayoutProps { advanceSearch?: any; backButtonLabel?: string; additionalState?: any; - button?: string; + button?: string | boolean; buttonState?: { text?: string; status?: boolean; @@ -61,7 +61,6 @@ export interface FormLayoutProps { refetchQueries?: Array; redirect?: boolean; title?: string; - hideSaveButton?: boolean; cancelAction?: Function; getLanguageId?: Function; backLinkButton?: string; @@ -106,7 +105,6 @@ export const FormLayout = ({ backButtonLabel = 'Cancel', subHead = 'edit', listItem, - hideSaveButton = false, getItemQuery, createItemQuery, updateItemQuery, @@ -592,7 +590,7 @@ export const FormLayout = ({ ); })}
- {!hideSaveButton && ( + {button && ( ) : null} - {!skipCancel && ( + {skipCancel && ( )} diff --git a/src/containers/HSM/HSM.tsx b/src/containers/HSM/HSM.tsx index 10f6a4afe7..1a769e57b8 100644 --- a/src/containers/HSM/HSM.tsx +++ b/src/containers/HSM/HSM.tsx @@ -909,6 +909,7 @@ export const HSM = () => { icon={templateIcon} getLanguageId={getLanguageId} languageSupport={false} + skipCancel={isEditing ? t('Go Back') : false} isAttachment getQueryFetchPolicy="cache-and-network" button={!isEditing ? t('Submit for Approval') : false} From 2f74745e889cda24120f9f386aa17affa0c226aa Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Fri, 28 Nov 2025 14:52:43 +0530 Subject: [PATCH 36/48] fix: props globally --- src/containers/Flow/Flow.tsx | 2 +- src/containers/Form/FormLayout.tsx | 25 +++++++++++-------- src/containers/HSM/HSM.tsx | 7 +++--- .../InteractiveMessage/InteractiveMessage.tsx | 2 +- src/containers/Search/Search.tsx | 3 ++- .../SettingList/Providers/Providers.tsx | 1 + src/containers/SpeedSend/SpeedSend.tsx | 2 +- src/containers/Trigger/Trigger.tsx | 4 +-- .../WhatsAppForms/WhatsAppForms.tsx | 1 + 9 files changed, 26 insertions(+), 21 deletions(-) diff --git a/src/containers/Flow/Flow.tsx b/src/containers/Flow/Flow.tsx index f6c1bde16e..984b9a8f7f 100644 --- a/src/containers/Flow/Flow.tsx +++ b/src/containers/Flow/Flow.tsx @@ -351,7 +351,7 @@ export const Flow = () => { customHandler={customHandler} helpData={flowInfo} backLinkButton={`/${backLink}`} - buttonState={{ text: 'Save', status: isTemplate }} + buttonState={{ text: 'Save', status: isTemplate, show: true }} restrictButtonStatus={{ status: isTemplate }} /> ); diff --git a/src/containers/Form/FormLayout.tsx b/src/containers/Form/FormLayout.tsx index 38f651d8a4..4f3325f2db 100644 --- a/src/containers/Form/FormLayout.tsx +++ b/src/containers/Form/FormLayout.tsx @@ -47,13 +47,13 @@ export interface FormLayoutProps { languageSupport?: boolean; setPayload?: Function; advanceSearch?: any; - backButtonLabel?: string; additionalState?: any; - button?: string | boolean; + button?: string; buttonState?: { text?: string; status?: boolean; styles?: string; + show?: boolean; }; type?: string; afterSave?: Function; @@ -89,7 +89,10 @@ export interface FormLayoutProps { text?: string; status?: boolean; }; - skipCancel?: boolean | string; + errorButtonStatus?: { + show?: boolean; + text?: string; + }; } export const FormLayout = ({ @@ -102,8 +105,11 @@ export const FormLayout = ({ dialogMessage, formFields, redirectionLink, - backButtonLabel = 'Cancel', subHead = 'edit', + errorButtonStatus = { + show: true, + text: 'Cancel', + }, listItem, getItemQuery, createItemQuery, @@ -124,7 +130,7 @@ export const FormLayout = ({ advanceSearch, cancelAction, button = 'Save', - buttonState = { text: '', status: false, styles: '' }, + buttonState = { text: '', status: false, styles: '', show: true }, type, afterSave, afterDelete, @@ -146,7 +152,6 @@ export const FormLayout = ({ partialPage = false, confirmationState, restrictButtonStatus, - skipCancel = 'Cancel', }: FormLayoutProps) => { const [showDialog, setShowDialog] = useState(false); const [formSubmitted, setFormSubmitted] = useState(false); @@ -567,8 +572,6 @@ export const FormLayout = ({ onSaveClick(true); }; - console.log('value', skipCancel); - const form = ( @@ -592,7 +595,7 @@ export const FormLayout = ({ ); })}
- {button && ( + {buttonState.show && ( )} diff --git a/src/containers/HSM/HSM.tsx b/src/containers/HSM/HSM.tsx index 1a769e57b8..3b0c9a7bab 100644 --- a/src/containers/HSM/HSM.tsx +++ b/src/containers/HSM/HSM.tsx @@ -902,18 +902,17 @@ export const HSM = () => { validationSchema={isEditing ? Yup.object() : FormSchema} listItemName="HSM Template" dialogMessage={dialogMessage} - backButtonLabel={isEditing ? 'Go Back' : 'Cancel'} formFields={fields} redirectionLink={backButton} listItem="sessionTemplate" icon={templateIcon} getLanguageId={getLanguageId} languageSupport={false} - skipCancel={isEditing ? t('Go Back') : false} + errorButtonStatus={{ text: isEditing ? t('Go Back') : t('Cancel'), show: true }} isAttachment getQueryFetchPolicy="cache-and-network" - button={!isEditing ? t('Submit for Approval') : false} - buttonState={{ text: t('Validating URL'), status: validatingURL }} + button={!isEditing ? t('Submit for Approval') : t('Save')} + buttonState={{ text: t('Validating URL'), status: validatingURL, show: !isEditing }} saveOnPageChange={false} type={mode} copyNotification={copyMessage} diff --git a/src/containers/InteractiveMessage/InteractiveMessage.tsx b/src/containers/InteractiveMessage/InteractiveMessage.tsx index 29284f8209..19afbdd7da 100644 --- a/src/containers/InteractiveMessage/InteractiveMessage.tsx +++ b/src/containers/InteractiveMessage/InteractiveMessage.tsx @@ -1041,7 +1041,7 @@ export const InteractiveMessage = () => { getQueryFetchPolicy="cache-and-network" afterSave={afterSave} saveOnPageChange={false} - buttonState={{ text: t('Validating URL'), status: validatingURL }} + buttonState={{ text: t('Validating URL'), status: validatingURL, show: true }} helpData={interactiveMessageInfo} backLinkButton={`/${backButton}`} /> diff --git a/src/containers/Search/Search.tsx b/src/containers/Search/Search.tsx index 1e12eabf70..bb1851a11a 100644 --- a/src/containers/Search/Search.tsx +++ b/src/containers/Search/Search.tsx @@ -541,11 +541,12 @@ export const Search = ({ afterSave={saveHandler} helpData={searchInfo} backLinkButton="/search" - skipCancel={chatFilters} + errorButtonStatus={{ text: t('Cancel'), show: !chatFilters }} buttonState={ chatFilters ? { styles: styles.Buttons, + show: true, } : undefined } diff --git a/src/containers/SettingList/Providers/Providers.tsx b/src/containers/SettingList/Providers/Providers.tsx index 7b27b863e5..95930a9e9a 100644 --- a/src/containers/SettingList/Providers/Providers.tsx +++ b/src/containers/SettingList/Providers/Providers.tsx @@ -276,6 +276,7 @@ export const Providers = () => { buttonState={{ text: isDisabled ? 'Credentials Locked' : 'Save', status: isDisabled && type === 'gupshup', + show: true, }} /> ); diff --git a/src/containers/SpeedSend/SpeedSend.tsx b/src/containers/SpeedSend/SpeedSend.tsx index 9c1910c225..e12b11b0da 100644 --- a/src/containers/SpeedSend/SpeedSend.tsx +++ b/src/containers/SpeedSend/SpeedSend.tsx @@ -496,7 +496,7 @@ export const SpeedSend = () => { getMediaId={getMediaId} getQueryFetchPolicy="cache-and-network" button={t('Save')} - buttonState={{ text: t('Validating URL'), status: validatingURL }} + buttonState={{ text: t('Validating URL'), status: validatingURL, show: true }} saveOnPageChange={false} type={mode} copyNotification={t('Copy of the template has been created!')} diff --git a/src/containers/Trigger/Trigger.tsx b/src/containers/Trigger/Trigger.tsx index df87975d2f..ffe11c3747 100644 --- a/src/containers/Trigger/Trigger.tsx +++ b/src/containers/Trigger/Trigger.tsx @@ -452,8 +452,8 @@ export const Trigger = () => { listItem="trigger" type={type} isView={true} - backButtonLabel={isEditing ? 'Go Back' : 'Cancel'} - button={isEditing ? false : 'Save'} + errorButtonStatus={{ text: isEditing ? t('Go Back') : t('Cancel'), show: true }} + buttonState={{ show: !isEditing }} copyNotification={t('Copy of the trigger has been created!')} icon={triggerIcon} customStyles={styles.Triggers} diff --git a/src/containers/WhatsAppForms/WhatsAppForms.tsx b/src/containers/WhatsAppForms/WhatsAppForms.tsx index 4800d14b19..9834ca2545 100644 --- a/src/containers/WhatsAppForms/WhatsAppForms.tsx +++ b/src/containers/WhatsAppForms/WhatsAppForms.tsx @@ -269,6 +269,7 @@ export const WhatsAppForms = () => { buttonState={{ text: 'Save Form', status: disabled, + show: true, }} customHandler={(error: string) => { setErrorMessage(formatError(error), 'An error occurred'); From 47008f4c7c41ee2c9faf10e6e68dc54f3a5ef6b8 Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Fri, 28 Nov 2025 15:22:15 +0530 Subject: [PATCH 37/48] refactor: format layout --- src/containers/Form/FormLayout.tsx | 8 ++++---- src/containers/HSM/HSM.tsx | 2 +- src/containers/Trigger/Trigger.tsx | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/containers/Form/FormLayout.tsx b/src/containers/Form/FormLayout.tsx index 4f3325f2db..327312040e 100644 --- a/src/containers/Form/FormLayout.tsx +++ b/src/containers/Form/FormLayout.tsx @@ -77,7 +77,7 @@ export interface FormLayoutProps { languageAttributes?: any; helpData?: HelpDataProps; noHeading?: boolean; - subHead?: string; + headerDescriptionPart?: string; isView?: Boolean; partialPage?: boolean; confirmationState?: { @@ -105,7 +105,7 @@ export const FormLayout = ({ dialogMessage, formFields, redirectionLink, - subHead = 'edit', + headerDescriptionPart = 'edit', errorButtonStatus = { show: true, text: 'Cancel', @@ -679,8 +679,8 @@ export const FormLayout = ({ formTitle = `Create a new ${listItemName}`; // case when adding a new item } - if (subHead) { - headerHelp = `Please ${subHead} below details.`; + if (isView) { + headerHelp = `Please ${headerDescriptionPart} below details.`; } let heading = ; diff --git a/src/containers/HSM/HSM.tsx b/src/containers/HSM/HSM.tsx index 3b0c9a7bab..15386a7dcd 100644 --- a/src/containers/HSM/HSM.tsx +++ b/src/containers/HSM/HSM.tsx @@ -897,7 +897,7 @@ export const HSM = () => { states={states} isView={true} setStates={setStates} - subHead={isEditing ? 'view' : 'edit'} + headerDescriptionPart={'view'} setPayload={setPayload} validationSchema={isEditing ? Yup.object() : FormSchema} listItemName="HSM Template" diff --git a/src/containers/Trigger/Trigger.tsx b/src/containers/Trigger/Trigger.tsx index ffe11c3747..6d63fbdcbe 100644 --- a/src/containers/Trigger/Trigger.tsx +++ b/src/containers/Trigger/Trigger.tsx @@ -440,7 +440,7 @@ export const Trigger = () => { {...queries} states={states} roleAccessSupport - subHead={isEditing ? 'view' : 'edit'} + headerDescriptionPart={isEditing ? 'view' : 'edit'} setStates={setStates} setPayload={(payload: any) => setPayload(payload, roles, groupType)} validationSchema={FormSchema} From 7580a6a861e1fc83eced689072527a2ef2739ad7 Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Fri, 28 Nov 2025 16:13:57 +0530 Subject: [PATCH 38/48] refactor: rename props --- src/containers/Form/FormLayout.tsx | 8 ++++---- src/containers/HSM/HSM.tsx | 2 +- src/containers/Search/Search.tsx | 2 +- src/containers/Trigger/Trigger.tsx | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/containers/Form/FormLayout.tsx b/src/containers/Form/FormLayout.tsx index 327312040e..9e320a8853 100644 --- a/src/containers/Form/FormLayout.tsx +++ b/src/containers/Form/FormLayout.tsx @@ -89,7 +89,7 @@ export interface FormLayoutProps { text?: string; status?: boolean; }; - errorButtonStatus?: { + errorButtonState?: { show?: boolean; text?: string; }; @@ -106,7 +106,7 @@ export const FormLayout = ({ formFields, redirectionLink, headerDescriptionPart = 'edit', - errorButtonStatus = { + errorButtonState = { show: true, text: 'Cancel', }, @@ -631,9 +631,9 @@ export const FormLayout = ({ {additionalAction.label} ) : null} - {errorButtonStatus.show && ( + {errorButtonState.show && ( )} diff --git a/src/containers/HSM/HSM.tsx b/src/containers/HSM/HSM.tsx index 15386a7dcd..0c0a1f61d4 100644 --- a/src/containers/HSM/HSM.tsx +++ b/src/containers/HSM/HSM.tsx @@ -908,7 +908,7 @@ export const HSM = () => { icon={templateIcon} getLanguageId={getLanguageId} languageSupport={false} - errorButtonStatus={{ text: isEditing ? t('Go Back') : t('Cancel'), show: true }} + errorButtonState={{ text: isEditing ? t('Go Back') : t('Cancel'), show: true }} isAttachment getQueryFetchPolicy="cache-and-network" button={!isEditing ? t('Submit for Approval') : t('Save')} diff --git a/src/containers/Search/Search.tsx b/src/containers/Search/Search.tsx index bb1851a11a..dc6d3ce3cd 100644 --- a/src/containers/Search/Search.tsx +++ b/src/containers/Search/Search.tsx @@ -541,7 +541,7 @@ export const Search = ({ afterSave={saveHandler} helpData={searchInfo} backLinkButton="/search" - errorButtonStatus={{ text: t('Cancel'), show: !chatFilters }} + errorButtonState={{ text: t('Cancel'), show: !chatFilters }} buttonState={ chatFilters ? { diff --git a/src/containers/Trigger/Trigger.tsx b/src/containers/Trigger/Trigger.tsx index 6d63fbdcbe..a9b125e38c 100644 --- a/src/containers/Trigger/Trigger.tsx +++ b/src/containers/Trigger/Trigger.tsx @@ -452,7 +452,7 @@ export const Trigger = () => { listItem="trigger" type={type} isView={true} - errorButtonStatus={{ text: isEditing ? t('Go Back') : t('Cancel'), show: true }} + errorButtonState={{ text: isEditing ? t('Go Back') : t('Cancel'), show: true }} buttonState={{ show: !isEditing }} copyNotification={t('Copy of the trigger has been created!')} icon={triggerIcon} From b6395ec445fb2e61cd3ebcbb7481750990c9cfc1 Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Fri, 28 Nov 2025 16:17:33 +0530 Subject: [PATCH 39/48] fix: deep scan --- src/containers/Form/FormLayout.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/containers/Form/FormLayout.tsx b/src/containers/Form/FormLayout.tsx index 9e320a8853..31801236a0 100644 --- a/src/containers/Form/FormLayout.tsx +++ b/src/containers/Form/FormLayout.tsx @@ -631,7 +631,7 @@ export const FormLayout = ({ {additionalAction.label} ) : null} - {errorButtonState.show && ( + {errorButtonState?.show && ( @@ -679,7 +679,7 @@ export const FormLayout = ({ formTitle = `Create a new ${listItemName}`; // case when adding a new item } - if (isView) { + if (headerDescriptionPart) { headerHelp = `Please ${headerDescriptionPart} below details.`; } From 8435b341ae08366e25ce40f58d75b64b2b323e4a Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Mon, 1 Dec 2025 12:06:21 +0530 Subject: [PATCH 40/48] fix: props --- src/containers/Form/FormLayout.tsx | 12 ++++-------- src/containers/HSM/HSM.tsx | 3 +-- src/containers/Trigger/Trigger.tsx | 3 +-- 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/src/containers/Form/FormLayout.tsx b/src/containers/Form/FormLayout.tsx index 31801236a0..bea1f5d3e9 100644 --- a/src/containers/Form/FormLayout.tsx +++ b/src/containers/Form/FormLayout.tsx @@ -77,8 +77,7 @@ export interface FormLayoutProps { languageAttributes?: any; helpData?: HelpDataProps; noHeading?: boolean; - headerDescriptionPart?: string; - isView?: Boolean; + isView?: String; partialPage?: boolean; confirmationState?: { show: boolean; @@ -101,11 +100,10 @@ export const FormLayout = ({ setStates, validationSchema, listItemName, - isView = false, + isView = 'Edit', dialogMessage, formFields, redirectionLink, - headerDescriptionPart = 'edit', errorButtonState = { show: true, text: 'Cancel', @@ -674,14 +672,12 @@ export const FormLayout = ({ } else if (type === 'copy') { formTitle = `Copy ${listItemName}`; // case when copying an item } else if (itemId) { - formTitle = isView ? `${listItemName}` : `Edit ${listItemName}`; // case when editing a item + formTitle = isView === 'View' ? `${listItemName}` : `Edit ${listItemName}`; // case when editing a item } else { formTitle = `Create a new ${listItemName}`; // case when adding a new item } - if (headerDescriptionPart) { - headerHelp = `Please ${headerDescriptionPart} below details.`; - } + headerHelp = `Please ${isView} below details.`; let heading = ; diff --git a/src/containers/HSM/HSM.tsx b/src/containers/HSM/HSM.tsx index 0c0a1f61d4..946cf7982b 100644 --- a/src/containers/HSM/HSM.tsx +++ b/src/containers/HSM/HSM.tsx @@ -895,9 +895,8 @@ export const HSM = () => { { {...queries} states={states} roleAccessSupport - headerDescriptionPart={isEditing ? 'view' : 'edit'} setStates={setStates} setPayload={(payload: any) => setPayload(payload, roles, groupType)} validationSchema={FormSchema} @@ -451,7 +450,7 @@ export const Trigger = () => { redirectionLink="trigger" listItem="trigger" type={type} - isView={true} + isView={'View'} errorButtonState={{ text: isEditing ? t('Go Back') : t('Cancel'), show: true }} buttonState={{ show: !isEditing }} copyNotification={t('Copy of the trigger has been created!')} From aeac5dafcd3458d31efeec05e7c642d27e0fe01d Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Mon, 1 Dec 2025 13:40:13 +0530 Subject: [PATCH 41/48] fix: format layout --- src/containers/Form/FormLayout.tsx | 12 ++++++------ src/containers/HSM/HSM.tsx | 2 +- src/containers/Trigger/Trigger.tsx | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/containers/Form/FormLayout.tsx b/src/containers/Form/FormLayout.tsx index bea1f5d3e9..859adb75b2 100644 --- a/src/containers/Form/FormLayout.tsx +++ b/src/containers/Form/FormLayout.tsx @@ -77,7 +77,7 @@ export interface FormLayoutProps { languageAttributes?: any; helpData?: HelpDataProps; noHeading?: boolean; - isView?: String; + isView?: boolean; partialPage?: boolean; confirmationState?: { show: boolean; @@ -100,7 +100,7 @@ export const FormLayout = ({ setStates, validationSchema, listItemName, - isView = 'Edit', + isView = false, dialogMessage, formFields, redirectionLink, @@ -672,13 +672,13 @@ export const FormLayout = ({ } else if (type === 'copy') { formTitle = `Copy ${listItemName}`; // case when copying an item } else if (itemId) { - formTitle = isView === 'View' ? `${listItemName}` : `Edit ${listItemName}`; // case when editing a item + formTitle = isView ? `${listItemName}` : `Edit ${listItemName}`; // case when editing a item } else { formTitle = `Create a new ${listItemName}`; // case when adding a new item } - - headerHelp = `Please ${isView} below details.`; - + if (isView) { + headerHelp = `Please ${'view'} below details.`; + } let heading = ; let confirmationDialog; diff --git a/src/containers/HSM/HSM.tsx b/src/containers/HSM/HSM.tsx index 946cf7982b..743999634b 100644 --- a/src/containers/HSM/HSM.tsx +++ b/src/containers/HSM/HSM.tsx @@ -895,7 +895,7 @@ export const HSM = () => { { redirectionLink="trigger" listItem="trigger" type={type} - isView={'View'} + isView={true} errorButtonState={{ text: isEditing ? t('Go Back') : t('Cancel'), show: true }} buttonState={{ show: !isEditing }} copyNotification={t('Copy of the trigger has been created!')} From 21471d419fe3089fc427a4791e461a58baf9e007 Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Mon, 1 Dec 2025 13:45:28 +0530 Subject: [PATCH 42/48] fix: isView condition --- src/containers/Form/FormLayout.tsx | 6 ++++-- src/containers/HSM/HSM.tsx | 2 +- src/containers/Trigger/Trigger.tsx | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/containers/Form/FormLayout.tsx b/src/containers/Form/FormLayout.tsx index 859adb75b2..d1ecc86628 100644 --- a/src/containers/Form/FormLayout.tsx +++ b/src/containers/Form/FormLayout.tsx @@ -665,7 +665,7 @@ export const FormLayout = ({ let formTitle = ''; let headerHelp: string | undefined; - + console.log('value', isView); // set title if there is a title if (title) { formTitle = title; @@ -677,7 +677,9 @@ export const FormLayout = ({ formTitle = `Create a new ${listItemName}`; // case when adding a new item } if (isView) { - headerHelp = `Please ${'view'} below details.`; + headerHelp = `Please view below details.`; + } else { + headerHelp = `Please edit below details.`; } let heading = ; diff --git a/src/containers/HSM/HSM.tsx b/src/containers/HSM/HSM.tsx index 743999634b..efc53785cf 100644 --- a/src/containers/HSM/HSM.tsx +++ b/src/containers/HSM/HSM.tsx @@ -895,7 +895,7 @@ export const HSM = () => { { redirectionLink="trigger" listItem="trigger" type={type} - isView={true} + isView={isEditing ? true : false} errorButtonState={{ text: isEditing ? t('Go Back') : t('Cancel'), show: true }} buttonState={{ show: !isEditing }} copyNotification={t('Copy of the trigger has been created!')} From e24809cd3b34a20f90e6f177297ad327a54a339e Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Mon, 1 Dec 2025 13:46:53 +0530 Subject: [PATCH 43/48] refactor: remove console --- src/containers/Form/FormLayout.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/containers/Form/FormLayout.tsx b/src/containers/Form/FormLayout.tsx index d1ecc86628..f48d5de8e1 100644 --- a/src/containers/Form/FormLayout.tsx +++ b/src/containers/Form/FormLayout.tsx @@ -665,7 +665,6 @@ export const FormLayout = ({ let formTitle = ''; let headerHelp: string | undefined; - console.log('value', isView); // set title if there is a title if (title) { formTitle = title; From be7fc8b6750b1f19a7d43041d1b8bfe1f1d4f1f7 Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Mon, 1 Dec 2025 16:57:53 +0530 Subject: [PATCH 44/48] fix: header help function --- src/containers/Form/FormLayout.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/containers/Form/FormLayout.tsx b/src/containers/Form/FormLayout.tsx index f48d5de8e1..c1b86b56a9 100644 --- a/src/containers/Form/FormLayout.tsx +++ b/src/containers/Form/FormLayout.tsx @@ -664,7 +664,8 @@ export const FormLayout = ({ } let formTitle = ''; - let headerHelp: string | undefined; + let headerHelp: string | undefined = `Please enter below details.`; + // set title if there is a title if (title) { formTitle = title; @@ -677,8 +678,6 @@ export const FormLayout = ({ } if (isView) { headerHelp = `Please view below details.`; - } else { - headerHelp = `Please edit below details.`; } let heading = ; From 97cc4d740c3e48e55d05cf1a58560b0adab3fdfd Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Mon, 1 Dec 2025 21:47:18 +0530 Subject: [PATCH 45/48] fix: test case --- src/containers/HSM/HSM.test.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/containers/HSM/HSM.test.tsx b/src/containers/HSM/HSM.test.tsx index 7a0f4f2e92..afc29a6433 100644 --- a/src/containers/HSM/HSM.test.tsx +++ b/src/containers/HSM/HSM.test.tsx @@ -272,7 +272,7 @@ describe('Add mode', () => { render(template); await waitFor(() => { - expect(screen.getByText('Add a new HSM Template')).toBeInTheDocument(); + expect(screen.getByText('Create a new HSM Template')).toBeInTheDocument(); }); fireEvent.click(screen.getByText('Add buttons')); From ed59c8572f563a3f4f89930cf6854d42fb924038 Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Mon, 1 Dec 2025 22:25:03 +0530 Subject: [PATCH 46/48] reafactor: isView props condition in formLayout --- src/containers/HSM/HSM.tsx | 2 +- src/containers/Trigger/Trigger.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/containers/HSM/HSM.tsx b/src/containers/HSM/HSM.tsx index cff442b455..6b2f852049 100644 --- a/src/containers/HSM/HSM.tsx +++ b/src/containers/HSM/HSM.tsx @@ -889,7 +889,7 @@ export const HSM = () => { { redirectionLink="trigger" listItem="trigger" type={type} - isView={isEditing ? true : false} + isView={isEditing} errorButtonState={{ text: isEditing ? t('Go Back') : t('Cancel'), show: true }} buttonState={{ show: !isEditing }} copyNotification={t('Copy of the trigger has been created!')} From 2cc70f7e42064d502e84d82f57fc5a32e7755fdd Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Tue, 2 Dec 2025 19:06:30 +0530 Subject: [PATCH 47/48] fix: remove undefined type from headerHelp function --- src/containers/Form/FormLayout.tsx | 2 +- src/containers/HSM/HSM.tsx | 10 ---------- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/src/containers/Form/FormLayout.tsx b/src/containers/Form/FormLayout.tsx index c1b86b56a9..cfb5ad4092 100644 --- a/src/containers/Form/FormLayout.tsx +++ b/src/containers/Form/FormLayout.tsx @@ -664,7 +664,7 @@ export const FormLayout = ({ } let formTitle = ''; - let headerHelp: string | undefined = `Please enter below details.`; + let headerHelp: string = `Please enter below details.`; // set title if there is a title if (title) { diff --git a/src/containers/HSM/HSM.tsx b/src/containers/HSM/HSM.tsx index 6b2f852049..57eb062713 100644 --- a/src/containers/HSM/HSM.tsx +++ b/src/containers/HSM/HSM.tsx @@ -506,16 +506,6 @@ export const HSM = () => { }; const fields = [ - { - component: Checkbox, - name: 'isActive', - title: ( - - Active? - - ), - darkCheckbox: true, - }, { component: AutoComplete, name: 'language', From ef8f9fef54d7667f4d7c83ca6b720d4e418a8d76 Mon Sep 17 00:00:00 2001 From: priyanshu6238 Date: Tue, 2 Dec 2025 19:36:41 +0530 Subject: [PATCH 48/48] fix: hsm page --- src/containers/HSM/HSMList/HSMList.test.tsx | 15 +++++++++++ src/containers/HSM/HSMList/HSMList.tsx | 13 ++++++++++ src/mocks/Template.tsx | 28 +++++++++++++++++++++ 3 files changed, 56 insertions(+) diff --git a/src/containers/HSM/HSMList/HSMList.test.tsx b/src/containers/HSM/HSMList/HSMList.test.tsx index 41eb040c2c..5ae466a779 100644 --- a/src/containers/HSM/HSMList/HSMList.test.tsx +++ b/src/containers/HSM/HSMList/HSMList.test.tsx @@ -132,6 +132,21 @@ test('should navigate to create template page', async () => { expect(mockedUsedNavigate).toHaveBeenCalledWith('/template/add'); }); +test('should navigate to edit template page', async () => { + const { getByText } = render(template(syncTemplateQuery)); + + await waitFor(() => { + expect(getByText('HSM Templates')).toBeInTheDocument(); + }); + + const viewIcons = await screen.findAllByTestId('view-icon', {}, { timeout: 5000 }); + fireEvent.click(viewIcons[0]); + + await waitFor(() => { + expect(mockedUsedNavigate).toHaveBeenCalledWith('/template/1/edit'); + }); +}); + test('should navigate to create template page with selected tag', async () => { const { getByText, getByTestId, getAllByRole } = render(template(syncTemplateQuery)); diff --git a/src/containers/HSM/HSMList/HSMList.tsx b/src/containers/HSM/HSMList/HSMList.tsx index 9c4545b478..f67c0cea71 100644 --- a/src/containers/HSM/HSMList/HSMList.tsx +++ b/src/containers/HSM/HSMList/HSMList.tsx @@ -21,6 +21,7 @@ import { templateInfo, templateStatusInfo } from 'common/HelpData'; import { setNotification } from 'common/notification'; import { WhatsAppToJsx } from 'common/RichEditor'; import { capitalizeFirstLetter, copyToClipboardMethod, exportCsvFile, getFileExtension } from 'common/utils'; +import ViewIcon from 'assets/images/icons/ViewLight.svg?react'; import { AutoComplete } from 'components/UI/Form/AutoComplete/AutoComplete'; import { Button } from 'components/UI/Form/Button/Button'; @@ -386,7 +387,16 @@ export const HSMList = () => { button.show = false; } + const handleView = (id: any) => { + navigate(`/template/${id}/edit`); + }; let additionalAction: any = () => [ + { + label: t('View'), + icon: , + parameter: 'id', + dialog: handleView, + }, { label: t('Copy UUID'), icon: , @@ -443,6 +453,9 @@ export const HSMList = () => { {...queries} filterList={filterTemplateStatus} filters={selectedTag?.id ? { ...appliedFilters, tagIds: [parseInt(selectedTag.id)] } : appliedFilters} + restrictedAction={(item: any) => ({ + edit: false, + })} /> ); diff --git a/src/mocks/Template.tsx b/src/mocks/Template.tsx index 30a1cd79e7..92faf4c172 100644 --- a/src/mocks/Template.tsx +++ b/src/mocks/Template.tsx @@ -568,6 +568,34 @@ export const updateSessiontemplate = { }; export const templatesData = [ + { + id: '1', + bspId: null, + label: 'Test Template', + body: 'Test body', + shortcode: 'test', + category: 'ACCOUNT_UPDATE', + isReserved: false, + status: 'APPROVED', + reason: 'test reason', + isHsm: true, + isActive: true, + updatedAt: '2020-12-01T18:00:32Z', + numberParameters: 0, + translations: + '{"2":{"status":"approved","languageId":{"label":"Hindi","id":"2"},"label":"now","isHsm":false,"body":"hey","MessageMedia":null}}', + type: 'TEXT', + quality: null, + language: { + id: '1', + label: 'Hindi', + }, + MessageMedia: { + id: 1, + caption: 'Test', + sourceUrl: 'https://cdn.pixabay.com/photo/2015/04/23/22/00/tree-736885__340.jpg', + }, + }, { id: '87', bspId: null,