Skip to content

Commit

Permalink
Merge pull request #44 from yinstardev/Staging-28Feb2024
Browse files Browse the repository at this point in the history
Staging 28 feb2024
  • Loading branch information
yinstardev authored Feb 28, 2024
2 parents 2b69a8c + cd213a4 commit 8ca91df
Show file tree
Hide file tree
Showing 7 changed files with 318 additions and 6 deletions.
5 changes: 5 additions & 0 deletions src/components/layouts/main/sider/sidebarNavigation.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,11 @@ export const sidebarNavigation: SidebarNavigationItem[] = [
// TODO use path variable
url: '/champagne',
},
{
title: 'Tickets Waiting for CI',
key: 'jira-ci',
url: '/jira-wait-ci',
},
// {
// title: 'SFDC Cases',
// key: 'sfdc-view',
Expand Down
3 changes: 3 additions & 0 deletions src/components/router/AppRouter.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import { ChampagneFullAppPage } from '@app/pages/DashboardPages/ChampagneFullApp
import TokenHandler from './TokenHandler';
import DetailedViewPage from '@app/pages/DashboardPages/DetailedViewSFDC';
import DetailsViewPage from '@app/pages/DashboardPages/DetailsViewPage';
import JiraWaitingCI from '@app/pages/DashboardPages/JiraWaitingCI';

const NewsFeedPage = React.lazy(() => import('@app/pages/NewsFeedPage'));
const DataTablesPage = React.lazy(() => import('@app/pages/DataTablesPage'));
Expand Down Expand Up @@ -71,6 +72,7 @@ export const SUPPORT_CENTRAL_LIVEBOARD_PATH = '/support-central';
export const CHAMPAGNE_FULL_APP_PATH = '/champagne';
export const DETAILED_VIEW_SFDC = '/detailed-view-sfdc';
export const DETAILS_VIEW_SFDC = '/details-view-sfdc';
export const JIRA_WAITING_TICKETS = '/jira-wait-ci';

// TSE
const TseHomeDashboard = withLoading(TSEHomeDashboardPage);
Expand Down Expand Up @@ -155,6 +157,7 @@ export const AppRouter: React.FC = () => {
<Route index element={<TseHomeDashboard />} />
<Route path={SUPPORT_CENTRAL_LIVEBOARD_PATH} element={<SupportCentralLiveboard />} />
<Route path={CHAMPAGNE_FULL_APP_PATH} element={<ChampagneFullApp />} />
<Route path={JIRA_WAITING_TICKETS} element={<JiraWaitingCI />} />
<Route
path={DETAILS_VIEW_SFDC}
element={
Expand Down
5 changes: 2 additions & 3 deletions src/pages/DashboardPages/DetailsViewDiscardedListView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -234,15 +234,14 @@ const DetailsViewPage = () => {
<Select
id="prioritySelect"
value={selectedPriority}
style={{ width: 200 }} // You can adjust the width as needed
onChange={(value) => setSelectedPriority(value)} // Directly use value
style={{ width: 200 }}
onChange={(value) => setSelectedPriority(value)}
>
<Option value="All">All Priorities</Option>
<Option value="P0">P0</Option>
<Option value="P1">P1</Option>
<Option value="P2">P2</Option>
<Option value="P3">P3</Option>
{/* Add more priorities as needed */}
</Select>
</div>
<div style={{ backgroundColor: 'inherit', padding: '0.5em' }}>
Expand Down
225 changes: 225 additions & 0 deletions src/pages/DashboardPages/JiraWaitingCI.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,225 @@
import React, { useCallback, useEffect, useState } from 'react';
import { useTranslation } from 'react-i18next';
import { PageTitle } from '@app/components/common/PageTitle/PageTitle';
import { useResponsive } from '@app/hooks/useResponsive';
import { BaseRow } from '@app/components/common/BaseRow/BaseRow';
import { BaseCol } from '@app/components/common/BaseCol/BaseCol';
import {
LiveboardEmbed,
useEmbedRef,
RuntimeFilterOp,
HostEvent,
Action,
} from '@thoughtspot/visual-embed-sdk/lib/src/react';
import { useAppSelector } from '@app/hooks/reduxHooks';
import { themeObject } from '@app/styles/themes/themeVariables';
import { TseWrapper } from '@app/components/tse-dashboard/TseWrapper';
import { fetchUserAndToken } from '@app/api/getUserAndToken';
import { SuperSelect } from './support-central/SuperSelect';
import { searchData } from './support-central/searchData';
import { json, useNavigate } from 'react-router-dom';
import JiraIssueDetailsModal from './support-central/JiraIssueModal';
import advancedSearchData from '@app/api/AdvancedSearchApi';

type RuntimeFilter = {
columnName: string;
operator: RuntimeFilterOp;
values: string[];
};

const JiraWaitingCI: React.FC = () => {
const { isTablet, isDesktop } = useResponsive();
const { t } = useTranslation();
const theme = useAppSelector((state) => state.theme.theme);
const embedRef = useEmbedRef();
const navigate = useNavigate();

const liveboardId = '4f737ba5-aebf-4fd0-9525-c4ebdd29a51b';
const [runtimeFilters, setRuntimeFilters] = useState<RuntimeFilter[]>([]);
const [editAccountOwnerName, setEditAccountOwnerName] = useState<string[]>([]);
const [accountOwnerNameList, setAccountOwnerNameList] = useState<string[]>([]);
const [isModalOpen, setIsModalOpen] = useState(false);
const [jiraIssueId, setJiraIssueId] = useState<string | null>(null);
const [options, setOptions] = useState<string[]>([]);

const updateOptions = (data: string[]) => {
const allValues = [...new Set([...data, ...options])];
setOptions(allValues);
};

useEffect(() => {
const fetchAndSetData = async () => {
try {
const { email } = await fetchUserAndToken();
const emailNamePart = email.split('@')[0];
const formattedName = emailNamePart.split('.').join(' ');

const case_owner_name = 'Case Owner Name';
const [data] = await searchData({ query: '', columnName: case_owner_name });

if (embedRef.current) {
if (data.includes(formattedName)) {
embedRef.current.trigger(HostEvent.UpdateRuntimeFilters, [
{
columnName: case_owner_name,
operator: RuntimeFilterOp.EQ,
values: [formattedName],
},
]);
setEditAccountOwnerName([formattedName]);
} else {
embedRef.current.trigger(HostEvent.UpdateRuntimeFilters, [
// {
// columnName: case_owner_name,
// operator: RuntimeFilterOp.EQ,
// values: ['Akash Singhal']
// }
]);
setEditAccountOwnerName([]);
}
}
} catch (error) {
console.error('Error setting data:', error);
}
};

fetchAndSetData();
}, [embedRef]);

const closeModal = useCallback(() => {
setIsModalOpen(false);
setJiraIssueId(null);
}, []);

const handleSuperSelectChange = (newValues: string[]) => {
setEditAccountOwnerName(newValues);
console.log(newValues);

if (embedRef.current) {
embedRef.current.trigger(HostEvent.UpdateRuntimeFilters, [
{
columnName: 'Case Owner Name',
operator: RuntimeFilterOp.EQ,
values: newValues,
},
]);
}
};

const handleCustomAction = useCallback(
(payload: any) => {
if (payload.data.id == 'sfdc-detailed-view') {
window.location.href = `${process.env.REACT_APP_BE_URL}/salesforce/oauth2/auth`;
navigate('/detailed-view-sfdc');
}
},
[navigate],
);
const handleVizDoubleClick = (data: any) => {
console.log(data.data);

const first = data.data.clickedPoint.deselectedAttributes;
const second = data.data.clickedPoint.selectedAttributes;
const mergedAttributes = [...first, ...second];
const caseSfdcUrlItem = mergedAttributes.find((item) => item.column.name === 'JIRA SCAL URL');
const caseSfdcUrlValue = caseSfdcUrlItem ? caseSfdcUrlItem.value : null;
console.log(caseSfdcUrlValue, 'This is the url for jira ticket');

const pattern = /browse\/(SCAL-\d+)/;
const match = caseSfdcUrlValue.match(pattern);
let issueId = '';
if (match) {
issueId = match[1];
}
setJiraIssueId(issueId);
setIsModalOpen(true);
};

function setCookie(name: any, value: any, days: any) {
let expires = '';
if (days) {
const date = new Date();
date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);
expires = '; expires=' + date.toUTCString();
}
document.cookie = name + '=' + (value || '') + expires + '; path=/';
}
function getCookie(name: any) {
const nameEQ = name + '=';
const ca = document.cookie.split(';');
for (let i = 0; i < ca.length; i++) {
let c = ca[i];
while (c.charAt(0) === ' ') c = c.substring(1, c.length);
if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);
}
return null;
}

const desktopLayout = (
<BaseRow>
<BaseCol xl={24} lg={24}>
{/* <div style={{ maxWidth: '25em', marginLeft: '1em' }}>
<SuperSelect
columnName="Case Owner Name"
defaultValues={editAccountOwnerName}
updateValues={handleSuperSelectChange}
/>
</div> */}
<TseWrapper>
<LiveboardEmbed
ref={embedRef}
activeTabId="04ba6c35-aea7-42b8-9a83-6dfebb595759"
visibleTabs={['04ba6c35-aea7-42b8-9a83-6dfebb595759']}
hiddenActions={[
Action.AddToFavorites,
Action.Edit,
Action.SyncToOtherApps,
Action.SyncToSheets,
Action.ManagePipelines,
]}
hideLiveboardHeader={true}
onVizPointDoubleClick={(data: any) => {
handleVizDoubleClick(data);
}}
// defaultHeight={800}
frameParams={{ height: '900px' }}
fullHeight={true}
className="tse-jira-tickets-wait-ci-style"
liveboardId={liveboardId}
runtimeFilters={runtimeFilters}
onCustomAction={handleCustomAction}
preRenderId="tse-jira-tickets-wait-ci"
customizations={{
style: {
customCSS: {
variables: {
'--ts-var-application-color': themeObject[theme].background,
'--ts-var-root-background': themeObject[theme].background,
'--ts-var-nav-background': themeObject[theme].siderBackground,
},
rules_UNSTABLE: {
'body > app-controller > blink-app-page > div > div > div > bk-powered-footer': {
display: 'none',
},
},
},
},
}}
/>
</TseWrapper>
{isModalOpen && jiraIssueId && (
<JiraIssueDetailsModal jiraIssueId={jiraIssueId} isOpen={isModalOpen} onClose={closeModal} />
)}
</BaseCol>
</BaseRow>
);

return (
<div key={theme}>
<PageTitle>{t('common.home')}</PageTitle>
{desktopLayout}
</div>
);
};

export default JiraWaitingCI;
48 changes: 48 additions & 0 deletions src/pages/DashboardPages/SupportCentralLiveboardPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ export const SupportCentralLiveboardPage: React.FC = () => {
const [jiraIssueDetails, setJiraIssueDetails] = useState<IssueDetail | null>(null);
const [isLoading, setIsLoading] = useState(false);
const [error, setError] = useState<string | null>(null);
const [preRenderID, setPreRenderID] = useState<string | undefined>(undefined);

const handleCustomAction = useCallback((payload: any) => {
if (payload.data.id === 'show-jira-details') {
Expand All @@ -119,6 +120,7 @@ export const SupportCentralLiveboardPage: React.FC = () => {
}, []);

useEffect(() => {
setPreRenderID('support-central-lb');
const fetchFiltersAndTabs = async () => {
const { filters, tabs } = await getFilterAndTabs();
setAccountNames(filters.accountNames);
Expand Down Expand Up @@ -165,6 +167,49 @@ export const SupportCentralLiveboardPage: React.FC = () => {
updateTabsAndFiltersInDatabase(updatedTabs, accountNames, caseNumbers);
};

const handleVizDoubleClick = useCallback(async (data: any) => {
console.log(data.data);
const first = data.data.clickedPoint.deselectedAttributes;
const second = data.data.clickedPoint.selectedAttributes;
const mergedAttributes = [...first, ...second];
console.log(mergedAttributes, 'This is merged List');
const caseSfdcUrlItem = mergedAttributes.find((item) => item.column.name === 'Jira Scal Url Link');
const caseSfdcUrlItem2 = mergedAttributes.find((item) => item.column.name === 'Jira Scal Key');
let caseSfdcUrlValue = null;
let caseSfdcUrlValue2 = null;
if (caseSfdcUrlItem) {
caseSfdcUrlValue = caseSfdcUrlItem.value;
}
if (caseSfdcUrlItem2) {
caseSfdcUrlValue2 = caseSfdcUrlItem2.value;
}
console.log(caseSfdcUrlValue, 'This is the url for jira ticket');
let issueId = '';
if (caseSfdcUrlValue) {
const pattern1 = /SCAL-\d+/g;
const matches1 = caseSfdcUrlValue.match(pattern1);
if (matches1) {
issueId = matches1[0];
console.log(issueId);

setJiraIssueId(issueId);
setIsModalOpen(true);
}
// console.log(matches[0], "These are the possible matches");
}
if (caseSfdcUrlValue2) {
issueId = caseSfdcUrlValue2;
console.log(issueId);
setJiraIssueId(issueId);
setIsModalOpen(true);
}
}, []);

const handleRendered = () => {
setPreRenderID('support-central-lb');
// embedRef.current.preRender(true);
};

const tabIdsForVisibleTabs = selectedTabs.length > 0 ? selectedTabs.map((tab) => tab.id) : undefined;

const CardHeader = () => {
Expand Down Expand Up @@ -267,6 +312,7 @@ export const SupportCentralLiveboardPage: React.FC = () => {
Action.SyncToSheets,
Action.ManagePipelines,
]}
onVizPointDoubleClick={handleVizDoubleClick}
onCustomAction={handleCustomAction}
disabledActions={[
Action.DownloadAsPdf,
Expand All @@ -280,6 +326,8 @@ export const SupportCentralLiveboardPage: React.FC = () => {
{ columnName: 'Case Number', operator: RuntimeFilterOp.EQ, values: caseNumbers },
]}
visibleTabs={tabIdsForVisibleTabs}
// onLiveboardRendered={handleRendered}
preRenderId={preRenderID}
customizations={{
style: {
customCSS: {
Expand Down
Loading

0 comments on commit 8ca91df

Please sign in to comment.