diff --git a/apps/customer-portal/webapp/src/api/__tests__/useGetCasesFilters.test.tsx b/apps/customer-portal/webapp/src/api/__tests__/useGetProjectFilters.test.tsx
similarity index 90%
rename from apps/customer-portal/webapp/src/api/__tests__/useGetCasesFilters.test.tsx
rename to apps/customer-portal/webapp/src/api/__tests__/useGetProjectFilters.test.tsx
index fa104ad799..ad53e0429c 100644
--- a/apps/customer-portal/webapp/src/api/__tests__/useGetCasesFilters.test.tsx
+++ b/apps/customer-portal/webapp/src/api/__tests__/useGetProjectFilters.test.tsx
@@ -17,7 +17,7 @@
import { renderHook, waitFor } from "@testing-library/react";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
-import useGetCasesFilters from "@api/useGetCasesFilters";
+import useGetProjectFilters from "@api/useGetProjectFilters";
const mockFiltersResponse = {
statuses: [{ id: "1", label: "Open" }],
@@ -55,7 +55,7 @@ const wrapper = ({ children }: { children: React.ReactNode }) => (
{children}
);
-describe("useGetCasesFilters", () => {
+describe("useGetProjectFilters", () => {
beforeEach(() => {
queryClient.clear();
vi.clearAllMocks();
@@ -69,7 +69,7 @@ describe("useGetCasesFilters", () => {
});
it("should return filters from API", async () => {
- const { result } = renderHook(() => useGetCasesFilters("123"), { wrapper });
+ const { result } = renderHook(() => useGetProjectFilters("123"), { wrapper });
await waitFor(() => expect(result.current.isSuccess).toBe(true));
@@ -82,7 +82,7 @@ describe("useGetCasesFilters", () => {
statusText: "Internal Server Error",
});
- const { result } = renderHook(() => useGetCasesFilters("123"), { wrapper });
+ const { result } = renderHook(() => useGetProjectFilters("123"), { wrapper });
await waitFor(() => expect(result.current.isError).toBe(true));
expect(result.current.error?.message).toContain("Internal Server Error");
diff --git a/apps/customer-portal/webapp/src/api/useGetCasesFilters.ts b/apps/customer-portal/webapp/src/api/useGetProjectFilters.ts
similarity index 83%
rename from apps/customer-portal/webapp/src/api/useGetCasesFilters.ts
rename to apps/customer-portal/webapp/src/api/useGetProjectFilters.ts
index a5ec922699..0b8bc542cb 100644
--- a/apps/customer-portal/webapp/src/api/useGetCasesFilters.ts
+++ b/apps/customer-portal/webapp/src/api/useGetProjectFilters.ts
@@ -22,12 +22,12 @@ import { useAuthApiClient } from "@context/AuthApiContext";
import type { CaseMetadataResponse } from "@models/responses";
/**
- * Custom hook to fetch case filters for a specific project.
+ * Custom hook to fetch all filters (cases, conversations, change requests, etc.) for a specific project.
*
* @param {string} projectId - The ID of the project to fetch filters for.
- * @returns {UseQueryResult} The query result object.
+ * @returns {UseQueryResult} The query result object containing all filter metadata.
*/
-export default function useGetCasesFilters(
+export default function useGetProjectFilters(
projectId: string,
): UseQueryResult {
const logger = useLogger();
@@ -37,7 +37,7 @@ export default function useGetCasesFilters(
return useQuery({
queryKey: [ApiQueryKeys.PROJECT_CASES, "filters", projectId],
queryFn: async (): Promise => {
- logger.debug(`Fetching case filters for project: ${projectId}`);
+ logger.debug(`Fetching project filters for project: ${projectId}`);
try {
const baseUrl = window.config?.CUSTOMER_PORTAL_BACKEND_BASE_URL;
@@ -52,15 +52,15 @@ export default function useGetCasesFilters(
if (!response.ok) {
throw new Error(
- `Error fetching case filters: ${response.statusText}`,
+ `Error fetching project filters: ${response.statusText}`,
);
}
const data: CaseMetadataResponse = await response.json();
- logger.debug("[useGetCasesFilters] Data received:", data);
+ logger.debug("[useGetProjectFilters] Data received:", data);
return data;
} catch (error) {
- logger.error("[useGetCasesFilters] Error:", error);
+ logger.error("[useGetProjectFilters] Error:", error);
throw error;
}
},
diff --git a/apps/customer-portal/webapp/src/components/dashboard/cases-table/CasesTable.tsx b/apps/customer-portal/webapp/src/components/dashboard/cases-table/CasesTable.tsx
index 6ada840c10..13f666862b 100644
--- a/apps/customer-portal/webapp/src/components/dashboard/cases-table/CasesTable.tsx
+++ b/apps/customer-portal/webapp/src/components/dashboard/cases-table/CasesTable.tsx
@@ -20,7 +20,7 @@ import { useNavigate } from "react-router";
import { useAsgardeo } from "@asgardeo/react";
import { getNoveraChatEnabled } from "@utils/settingsStorage";
import { useGetProjectCasesPage } from "@api/useGetProjectCasesPage";
-import useGetCasesFilters from "@api/useGetCasesFilters";
+import useGetProjectFilters from "@api/useGetProjectFilters";
import FilterPopover, {
type FilterField,
} from "@components/common/filter-panel/FilterPopover";
@@ -46,7 +46,7 @@ const CasesTable = ({ projectId }: CasesTableProps): JSX.Element => {
data: filtersMetadata,
isFetching: isFetchingFilters,
isError: isErrorFilters,
- } = useGetCasesFilters(projectId);
+ } = useGetProjectFilters(projectId);
const dynamicFilterFields: FilterField[] = [
{
diff --git a/apps/customer-portal/webapp/src/components/dashboard/cases-table/__tests__/CasesTable.test.tsx b/apps/customer-portal/webapp/src/components/dashboard/cases-table/__tests__/CasesTable.test.tsx
index 03e2ef51a1..c52c09ba9f 100644
--- a/apps/customer-portal/webapp/src/components/dashboard/cases-table/__tests__/CasesTable.test.tsx
+++ b/apps/customer-portal/webapp/src/components/dashboard/cases-table/__tests__/CasesTable.test.tsx
@@ -18,7 +18,7 @@ import { render, screen, waitFor, fireEvent } from "@testing-library/react";
import { describe, expect, it, vi, beforeEach } from "vitest";
import CasesTable from "@components/dashboard/cases-table/CasesTable";
import { useGetProjectCasesPage } from "@api/useGetProjectCasesPage";
-import useGetCasesFilters from "@api/useGetCasesFilters";
+import useGetProjectFilters from "@api/useGetProjectFilters";
import { ThemeProvider, createTheme } from "@wso2/oxygen-ui";
const mockNavigate = vi.fn();
@@ -29,7 +29,7 @@ vi.mock("react-router", () => ({
}));
vi.mock("@api/useGetProjectCasesPage");
-vi.mock("@api/useGetCasesFilters");
+vi.mock("@api/useGetProjectFilters");
vi.mock("@asgardeo/react", () => ({
useAsgardeo: () => ({
@@ -128,7 +128,7 @@ describe("CasesTable", () => {
const theme = createTheme();
const mockProjectId = "proj-123";
const mockUseGetProjectCasesPage = vi.mocked(useGetProjectCasesPage);
- const mockUseGetCasesFilters = vi.mocked(useGetCasesFilters);
+ const mockUseGetCasesFilters = vi.mocked(useGetProjectFilters);
beforeEach(() => {
vi.clearAllMocks();
@@ -141,7 +141,7 @@ describe("CasesTable", () => {
data: undefined,
isFetching: false,
isError: false,
- } as unknown as ReturnType);
+ } as unknown as ReturnType);
});
it("should render correctly", () => {
@@ -326,7 +326,7 @@ describe("CasesTable", () => {
mockUseGetCasesFilters.mockReturnValue({
isFetching: true,
isError: true,
- } as unknown as ReturnType);
+ } as unknown as ReturnType);
render(
diff --git a/apps/customer-portal/webapp/src/components/project-details/deployments/AddDeploymentModal.tsx b/apps/customer-portal/webapp/src/components/project-details/deployments/AddDeploymentModal.tsx
index ff7ef1fd51..aa3da27c44 100644
--- a/apps/customer-portal/webapp/src/components/project-details/deployments/AddDeploymentModal.tsx
+++ b/apps/customer-portal/webapp/src/components/project-details/deployments/AddDeploymentModal.tsx
@@ -41,7 +41,7 @@ import {
} from "react";
import type { SelectChangeEvent } from "@wso2/oxygen-ui";
import { usePostCreateDeployment } from "@api/usePostCreateDeployment";
-import useGetCasesFilters from "@api/useGetCasesFilters";
+import useGetProjectFilters from "@api/useGetProjectFilters";
import ErrorIndicator from "@components/common/error-indicator/ErrorIndicator";
import ErrorBanner from "@components/common/error-banner/ErrorBanner";
@@ -78,7 +78,7 @@ export default function AddDeploymentModal({
data: filtersData,
isLoading: isFiltersLoading,
isError: isFiltersError,
- } = useGetCasesFilters(projectId);
+ } = useGetProjectFilters(projectId);
const deploymentTypes = filtersData?.deploymentTypes ?? [];
diff --git a/apps/customer-portal/webapp/src/components/project-details/deployments/EditDeploymentModal.tsx b/apps/customer-portal/webapp/src/components/project-details/deployments/EditDeploymentModal.tsx
index a2e83cd1b2..1c9b9c2685 100644
--- a/apps/customer-portal/webapp/src/components/project-details/deployments/EditDeploymentModal.tsx
+++ b/apps/customer-portal/webapp/src/components/project-details/deployments/EditDeploymentModal.tsx
@@ -37,7 +37,7 @@ import {
type ChangeEvent,
type JSX,
} from "react";
-import useGetCasesFilters from "@api/useGetCasesFilters";
+import useGetProjectFilters from "@api/useGetProjectFilters";
import { usePatchDeployment } from "@api/usePatchDeployment";
export interface EditDeploymentModalProps {
@@ -57,7 +57,7 @@ const INITIAL_FORM = {
/**
* Modal for editing a deployment (name, type, description). Always sends active: true.
- * Deployment type options come from useGetCasesFilters.
+ * Deployment type options come from useGetProjectFilters.
*
* @param {EditDeploymentModalProps} props - open, deployment, projectId, onClose, optional onSuccess/onError.
* @returns {JSX.Element} The edit deployment modal.
@@ -71,7 +71,7 @@ export default function EditDeploymentModal({
onError,
}: EditDeploymentModalProps): JSX.Element {
const { data: filtersData, isLoading: isFiltersLoading } =
- useGetCasesFilters(projectId);
+ useGetProjectFilters(projectId);
const patchDeployment = usePatchDeployment();
const deploymentTypes = filtersData?.deploymentTypes ?? [];
diff --git a/apps/customer-portal/webapp/src/components/project-details/deployments/__tests__/AddDeploymentModal.test.tsx b/apps/customer-portal/webapp/src/components/project-details/deployments/__tests__/AddDeploymentModal.test.tsx
index a8128d3a65..89140de0ca 100644
--- a/apps/customer-portal/webapp/src/components/project-details/deployments/__tests__/AddDeploymentModal.test.tsx
+++ b/apps/customer-portal/webapp/src/components/project-details/deployments/__tests__/AddDeploymentModal.test.tsx
@@ -18,10 +18,10 @@ import { render, screen, fireEvent } from "@testing-library/react";
import { beforeEach, describe, expect, it, vi } from "vitest";
import AddDeploymentModal from "@components/project-details/deployments/AddDeploymentModal";
import { usePostCreateDeployment } from "@api/usePostCreateDeployment";
-import useGetCasesFilters from "@api/useGetCasesFilters";
+import useGetProjectFilters from "@api/useGetProjectFilters";
vi.mock("@api/usePostCreateDeployment");
-vi.mock("@api/useGetCasesFilters");
+vi.mock("@api/useGetProjectFilters");
let mockMutate: any;
let defaultModalProps: any;
@@ -62,11 +62,11 @@ describe("AddDeploymentModal", () => {
isPending: false,
} as unknown as ReturnType);
- vi.mocked(useGetCasesFilters).mockReturnValue({
+ vi.mocked(useGetProjectFilters).mockReturnValue({
data: mockFiltersData,
isLoading: false,
isError: false,
- } as unknown as ReturnType);
+ } as unknown as ReturnType);
});
it("should render the modal with title and description", () => {
@@ -92,11 +92,11 @@ describe("AddDeploymentModal", () => {
});
it("should show skeleton while deployment types are loading", () => {
- vi.mocked(useGetCasesFilters).mockReturnValue({
+ vi.mocked(useGetProjectFilters).mockReturnValue({
data: undefined,
isLoading: true,
isError: false,
- } as unknown as ReturnType);
+ } as unknown as ReturnType);
render();
@@ -105,11 +105,11 @@ describe("AddDeploymentModal", () => {
});
it("should show ErrorIndicator inside modal when deployment types fail to load", () => {
- vi.mocked(useGetCasesFilters).mockReturnValue({
+ vi.mocked(useGetProjectFilters).mockReturnValue({
data: undefined,
isLoading: false,
isError: true,
- } as unknown as ReturnType);
+ } as unknown as ReturnType);
render();
@@ -117,11 +117,11 @@ describe("AddDeploymentModal", () => {
});
it("should show ErrorBanner outside modal when deployment types fail to load", () => {
- vi.mocked(useGetCasesFilters).mockReturnValue({
+ vi.mocked(useGetProjectFilters).mockReturnValue({
data: undefined,
isLoading: false,
isError: true,
- } as unknown as ReturnType);
+ } as unknown as ReturnType);
render();
@@ -134,11 +134,11 @@ describe("AddDeploymentModal", () => {
});
it("should dismiss ErrorBanner when dismiss button is clicked", () => {
- vi.mocked(useGetCasesFilters).mockReturnValue({
+ vi.mocked(useGetProjectFilters).mockReturnValue({
data: undefined,
isLoading: false,
isError: true,
- } as unknown as ReturnType);
+ } as unknown as ReturnType);
render();
@@ -157,11 +157,11 @@ describe("AddDeploymentModal", () => {
});
it("should disable Add Deployment button when filters failed to load", () => {
- vi.mocked(useGetCasesFilters).mockReturnValue({
+ vi.mocked(useGetProjectFilters).mockReturnValue({
data: undefined,
isLoading: false,
isError: true,
- } as unknown as ReturnType);
+ } as unknown as ReturnType);
render();
diff --git a/apps/customer-portal/webapp/src/components/project-details/deployments/__tests__/EditDeploymentModal.test.tsx b/apps/customer-portal/webapp/src/components/project-details/deployments/__tests__/EditDeploymentModal.test.tsx
index fba2d1b8cc..2f40824e57 100644
--- a/apps/customer-portal/webapp/src/components/project-details/deployments/__tests__/EditDeploymentModal.test.tsx
+++ b/apps/customer-portal/webapp/src/components/project-details/deployments/__tests__/EditDeploymentModal.test.tsx
@@ -17,11 +17,11 @@
import { act, fireEvent, render, screen } from "@testing-library/react";
import { beforeEach, describe, expect, it, vi } from "vitest";
import EditDeploymentModal from "@components/project-details/deployments/EditDeploymentModal";
-import useGetCasesFilters from "@api/useGetCasesFilters";
+import useGetProjectFilters from "@api/useGetProjectFilters";
import { usePatchDeployment } from "@api/usePatchDeployment";
import type { ProjectDeploymentItem } from "@models/responses";
-vi.mock("@api/useGetCasesFilters");
+vi.mock("@api/useGetProjectFilters");
vi.mock("@api/usePatchDeployment");
const mockDeployment: ProjectDeploymentItem = {
@@ -56,11 +56,11 @@ const defaultProps = {
describe("EditDeploymentModal", () => {
beforeEach(() => {
vi.clearAllMocks();
- vi.mocked(useGetCasesFilters).mockReturnValue({
+ vi.mocked(useGetProjectFilters).mockReturnValue({
data: mockFiltersData,
isLoading: false,
isError: false,
- } as ReturnType);
+ } as ReturnType);
vi.mocked(usePatchDeployment).mockReturnValue({
mutateAsync: vi.fn().mockResolvedValue(undefined),
isPending: false,
diff --git a/apps/customer-portal/webapp/src/components/security/SecurityReportAnalysis.tsx b/apps/customer-portal/webapp/src/components/security/SecurityReportAnalysis.tsx
index 328b69bfb7..153aaf9628 100644
--- a/apps/customer-portal/webapp/src/components/security/SecurityReportAnalysis.tsx
+++ b/apps/customer-portal/webapp/src/components/security/SecurityReportAnalysis.tsx
@@ -55,7 +55,7 @@ import {
import { useNavigate, useParams } from "react-router";
import { CaseType } from "@constants/supportConstants";
import useGetProjectCases from "@api/useGetProjectCases";
-import useGetCasesFilters from "@api/useGetCasesFilters";
+import useGetProjectFilters from "@api/useGetProjectFilters";
import useGetUserDetails from "@api/useGetUserDetails";
import type { AllCasesFilterValues, CaseListItem } from "@models/responses";
import SecurityReportAnalysisSkeleton from "@components/security/SecurityReportAnalysisSkeleton";
@@ -90,7 +90,7 @@ const SecurityReportAnalysis = (): JSX.Element => {
const { data: currentUser } = useGetUserDetails();
// Fetch filter metadata
- const { data: filterMetadata } = useGetCasesFilters(projectId || "");
+ const { data: filterMetadata } = useGetProjectFilters(projectId || "");
// Build case search request for security report analysis cases
const caseSearchRequest = useMemo(
diff --git a/apps/customer-portal/webapp/src/components/support/case-details/details-tab/__tests__/CaseDetailsContent.test.tsx b/apps/customer-portal/webapp/src/components/support/case-details/details-tab/__tests__/CaseDetailsContent.test.tsx
index 8fb834b799..557430d0e6 100644
--- a/apps/customer-portal/webapp/src/components/support/case-details/details-tab/__tests__/CaseDetailsContent.test.tsx
+++ b/apps/customer-portal/webapp/src/components/support/case-details/details-tab/__tests__/CaseDetailsContent.test.tsx
@@ -50,7 +50,7 @@ const mockCaseDetails = {
findingsTotal: null,
};
-vi.mock("@api/useGetCasesFilters", () => ({
+vi.mock("@api/useGetProjectFilters", () => ({
default: () => ({
data: { caseStates: [{ id: "3", label: "Closed" }] },
}),
diff --git a/apps/customer-portal/webapp/src/components/support/case-details/header/CaseDetailsActionRow.tsx b/apps/customer-portal/webapp/src/components/support/case-details/header/CaseDetailsActionRow.tsx
index e17e121116..3320815605 100644
--- a/apps/customer-portal/webapp/src/components/support/case-details/header/CaseDetailsActionRow.tsx
+++ b/apps/customer-portal/webapp/src/components/support/case-details/header/CaseDetailsActionRow.tsx
@@ -34,7 +34,7 @@ import {
CASE_STATUS_ACTIONS,
type CaseStatusPaletteIntent,
} from "@constants/supportConstants";
-import useGetCasesFilters from "@api/useGetCasesFilters";
+import useGetProjectFilters from "@api/useGetProjectFilters";
import { usePatchCase } from "@api/usePatchCase";
import { useErrorBanner } from "@context/error-banner/ErrorBannerContext";
import { useSuccessBanner } from "@context/success-banner/SuccessBannerContext";
@@ -79,7 +79,7 @@ export interface CaseDetailsActionRowProps {
/** When case is closed, used to hide "Open Related Case" after 2 months. */
closedOn?: string | null;
onOpenRelatedCase?: () => void;
- /** Project ID for useGetCasesFilters and usePatchCase. */
+ /** Project ID for useGetProjectFilters and usePatchCase. */
projectId?: string;
/** Case ID for PATCH case state. */
caseId?: string;
@@ -95,7 +95,7 @@ export interface CaseDetailsActionRowProps {
/**
* Resolves stateKey for an action by looking up caseState in caseStates.
* @param actionLabel - Action label (e.g. "Closed", "Accept Solution").
- * @param caseStates - caseStates from useGetCasesFilters.
+ * @param caseStates - caseStates from useGetProjectFilters.
* @returns stateKey as number, or undefined if not found.
*/
function getStateKeyForAction(
@@ -126,7 +126,7 @@ export default function CaseDetailsActionRow({
const theme = useTheme();
const hasEngineer = !!getAssignedEngineerLabel(assignedEngineer);
- const { data: filterMetadata } = useGetCasesFilters(projectId);
+ const { data: filterMetadata } = useGetProjectFilters(projectId);
const caseStates = filterMetadata?.caseStates;
const { showSuccess } = useSuccessBanner();
diff --git a/apps/customer-portal/webapp/src/components/support/case-details/header/__tests__/CaseDetailsActionRow.test.tsx b/apps/customer-portal/webapp/src/components/support/case-details/header/__tests__/CaseDetailsActionRow.test.tsx
index 5828f6c0f4..6f2e90dad8 100644
--- a/apps/customer-portal/webapp/src/components/support/case-details/header/__tests__/CaseDetailsActionRow.test.tsx
+++ b/apps/customer-portal/webapp/src/components/support/case-details/header/__tests__/CaseDetailsActionRow.test.tsx
@@ -19,7 +19,7 @@ import { describe, expect, it, vi } from "vitest";
import CaseDetailsActionRow from "@case-details/CaseDetailsActionRow";
import { ThemeProvider, createTheme } from "@wso2/oxygen-ui";
-vi.mock("@api/useGetCasesFilters", () => ({
+vi.mock("@api/useGetProjectFilters", () => ({
default: () => ({
data: {
caseStates: [
diff --git a/apps/customer-portal/webapp/src/constants/supportConstants.ts b/apps/customer-portal/webapp/src/constants/supportConstants.ts
index 6faa67706f..7a8f416bff 100644
--- a/apps/customer-portal/webapp/src/constants/supportConstants.ts
+++ b/apps/customer-portal/webapp/src/constants/supportConstants.ts
@@ -451,7 +451,7 @@ export const ALL_CONVERSATIONS_FILTER_DEFINITIONS: AllConversationsFilterDefinit
/**
* Configuration for the all cases filters.
- * Uses caseStates, caseTypes, severities, issueTypes, deploymentTypes from useGetCasesFilters.
+ * Uses caseStates, caseTypes, severities, issueTypes, deploymentTypes from useGetProjectFilters.
*/
export const ALL_CASES_FILTER_DEFINITIONS: AllCasesFilterDefinition[] = [
{
diff --git a/apps/customer-portal/webapp/src/models/responses.ts b/apps/customer-portal/webapp/src/models/responses.ts
index c6193edbc3..ec056a336a 100644
--- a/apps/customer-portal/webapp/src/models/responses.ts
+++ b/apps/customer-portal/webapp/src/models/responses.ts
@@ -514,6 +514,7 @@ export interface CaseMetadataResponse {
changeRequestImpacts?: MetadataItem[];
caseTypes?: MetadataItem[];
conversationStates?: MetadataItem[];
+ timeCardStates?: MetadataItem[];
severityBasedAllocationTime?: Record;
}
diff --git a/apps/customer-portal/webapp/src/pages/AllCasesPage.tsx b/apps/customer-portal/webapp/src/pages/AllCasesPage.tsx
index 0ab9141858..a897ad1b3c 100644
--- a/apps/customer-portal/webapp/src/pages/AllCasesPage.tsx
+++ b/apps/customer-portal/webapp/src/pages/AllCasesPage.tsx
@@ -36,7 +36,7 @@ import {
} from "@wso2/oxygen-ui";
import { ArrowLeft } from "@wso2/oxygen-ui-icons-react";
import { useGetProjectCasesStats } from "@api/useGetProjectCasesStats";
-import useGetCasesFilters from "@api/useGetCasesFilters";
+import useGetProjectFilters from "@api/useGetProjectFilters";
import useGetProjectCases from "@api/useGetProjectCases";
import { getIncidentAndQueryIds } from "@utils/support";
import { CaseType } from "@constants/supportConstants";
@@ -64,7 +64,7 @@ export default function AllCasesPage(): JSX.Element {
const pageSize = 10;
// Fetch filter metadata first to get Incident and Query IDs for stats API
- const { data: filterMetadata } = useGetCasesFilters(projectId || "");
+ const { data: filterMetadata } = useGetProjectFilters(projectId || "");
const { incidentId, queryId } = useMemo(
() => getIncidentAndQueryIds(filterMetadata?.caseTypes),
diff --git a/apps/customer-portal/webapp/src/pages/AllConversationsPage.tsx b/apps/customer-portal/webapp/src/pages/AllConversationsPage.tsx
index 874439cc3f..14996d0b97 100644
--- a/apps/customer-portal/webapp/src/pages/AllConversationsPage.tsx
+++ b/apps/customer-portal/webapp/src/pages/AllConversationsPage.tsx
@@ -35,7 +35,7 @@ import {
} from "@wso2/oxygen-ui";
import { ArrowLeft } from "@wso2/oxygen-ui-icons-react";
import { useLoader } from "@context/linear-loader/LoaderContext";
-import useGetCasesFilters from "@api/useGetCasesFilters";
+import useGetProjectFilters from "@api/useGetProjectFilters";
import { useSearchConversations } from "@api/useSearchConversations";
import { useGetConversationStats } from "@api/useGetConversationStats";
import type {
@@ -65,7 +65,7 @@ export default function AllConversationsPage(): JSX.Element {
const [page, setPage] = useState(1);
const pageSize = 10;
- const { data: filterMetadata } = useGetCasesFilters(projectId || "");
+ const { data: filterMetadata } = useGetProjectFilters(projectId || "");
const searchRequest = useMemo(
() => ({
diff --git a/apps/customer-portal/webapp/src/pages/AnnouncementsPage.tsx b/apps/customer-portal/webapp/src/pages/AnnouncementsPage.tsx
index fa92115c11..05939b406a 100644
--- a/apps/customer-portal/webapp/src/pages/AnnouncementsPage.tsx
+++ b/apps/customer-portal/webapp/src/pages/AnnouncementsPage.tsx
@@ -28,7 +28,7 @@ import {
Pagination,
} from "@wso2/oxygen-ui";
import { ArrowLeft } from "@wso2/oxygen-ui-icons-react";
-import useGetCasesFilters from "@api/useGetCasesFilters";
+import useGetProjectFilters from "@api/useGetProjectFilters";
import { useGetProjectCasesPage } from "@api/useGetProjectCasesPage";
import { CaseType } from "@constants/supportConstants";
import type { AnnouncementFilterValues } from "@constants/supportConstants";
@@ -52,7 +52,7 @@ export default function AnnouncementsPage(): JSX.Element {
const [page, setPage] = useState(1);
const pageSize = 10;
- const { data: filterMetadata } = useGetCasesFilters(projectId || "");
+ const { data: filterMetadata } = useGetProjectFilters(projectId || "");
const caseSearchRequest = useMemo(
() => ({
diff --git a/apps/customer-portal/webapp/src/pages/ChangeRequestsPage.tsx b/apps/customer-portal/webapp/src/pages/ChangeRequestsPage.tsx
index 47aef3e940..e30c119612 100644
--- a/apps/customer-portal/webapp/src/pages/ChangeRequestsPage.tsx
+++ b/apps/customer-portal/webapp/src/pages/ChangeRequestsPage.tsx
@@ -41,7 +41,7 @@ import type {
ChangeRequestItem,
} from "@models/responses";
import type { ChangeRequestSearchRequest } from "@models/requests";
-import useGetCasesFilters from "@api/useGetCasesFilters";
+import useGetProjectFilters from "@api/useGetProjectFilters";
import useGetChangeRequests, {
useGetChangeRequestsInfinite,
} from "@api/useGetChangeRequests";
@@ -70,7 +70,7 @@ export default function ChangeRequestsPage(): JSX.Element {
const pageSize = 10;
// Fetch filter metadata (deployments etc.)
- const { data: filterMetadata } = useGetCasesFilters(projectId || "");
+ const { data: filterMetadata } = useGetProjectFilters(projectId || "");
// Build API request (following cases listing pattern)
const changeRequestSearchRequest = useMemo<
diff --git a/apps/customer-portal/webapp/src/pages/CreateCasePage.tsx b/apps/customer-portal/webapp/src/pages/CreateCasePage.tsx
index 71c1f0b195..3ec8956235 100644
--- a/apps/customer-portal/webapp/src/pages/CreateCasePage.tsx
+++ b/apps/customer-portal/webapp/src/pages/CreateCasePage.tsx
@@ -27,7 +27,7 @@ import {
} from "react";
import { useLocation, useNavigate, useParams } from "react-router";
import { useQueryClient } from "@tanstack/react-query";
-import useGetCasesFilters from "@api/useGetCasesFilters";
+import useGetProjectFilters from "@api/useGetProjectFilters";
import useGetProjectDetails from "@api/useGetProjectDetails";
import { useGetProjectDeployments } from "@api/useGetProjectDeployments";
import { useGetDeploymentsProducts } from "@api/useGetDeploymentsProducts";
@@ -123,7 +123,7 @@ export default function CreateCasePage(): JSX.Element {
const { showLoader, hideLoader } = useLoader();
const { data: projectDetails, isLoading: isProjectLoading } =
useGetProjectDetails(projectId || "");
- const { data: filters, isLoading: isFiltersLoading } = useGetCasesFilters(
+ const { data: filters, isLoading: isFiltersLoading } = useGetProjectFilters(
projectId || "",
);
const [title, setTitle] = useState(() => relatedCase?.title ?? "");
diff --git a/apps/customer-portal/webapp/src/pages/DashboardPage.tsx b/apps/customer-portal/webapp/src/pages/DashboardPage.tsx
index e4cd4e06f4..35e83595a5 100644
--- a/apps/customer-portal/webapp/src/pages/DashboardPage.tsx
+++ b/apps/customer-portal/webapp/src/pages/DashboardPage.tsx
@@ -21,7 +21,7 @@ import { useAsgardeo } from "@asgardeo/react";
import { useLogger } from "@hooks/useLogger";
import { useLoader } from "@context/linear-loader/LoaderContext";
import { useErrorBanner } from "@context/error-banner/ErrorBannerContext";
-import useGetCasesFilters from "@api/useGetCasesFilters";
+import useGetProjectFilters from "@api/useGetProjectFilters";
import { useGetProjectCasesStats } from "@api/useGetProjectCasesStats";
import {
DASHBOARD_STATS,
@@ -49,7 +49,7 @@ export default function DashboardPage(): JSX.Element {
data: filters,
isLoading: isFiltersLoading,
isError: isErrorFilters,
- } = useGetCasesFilters(projectId || "");
+ } = useGetProjectFilters(projectId || "");
const { incidentId, queryId } = useMemo(
() => getIncidentAndQueryIds(filters?.caseTypes),
diff --git a/apps/customer-portal/webapp/src/pages/SupportPage.tsx b/apps/customer-portal/webapp/src/pages/SupportPage.tsx
index 4b2f7abf9b..663a077c38 100644
--- a/apps/customer-portal/webapp/src/pages/SupportPage.tsx
+++ b/apps/customer-portal/webapp/src/pages/SupportPage.tsx
@@ -26,7 +26,7 @@ import ServiceRequestCard from "@components/support/request-cards/ServiceRequest
import ChangeRequestCard from "@components/support/request-cards/ChangeRequestCard";
import ChatHistoryList from "@components/support/support-overview-cards/ChatHistoryList";
import { useGetProjectSupportStats } from "@api/useGetProjectSupportStats";
-import useGetCasesFilters from "@api/useGetCasesFilters";
+import useGetProjectFilters from "@api/useGetProjectFilters";
import useGetProjectCases from "@api/useGetProjectCases";
import { useSearchConversations } from "@api/useSearchConversations";
import { useLogger } from "@hooks/useLogger";
@@ -48,7 +48,7 @@ export default function SupportPage(): JSX.Element {
const navigate = useNavigate();
const { projectId } = useParams<{ projectId: string }>();
- const { data: filterMetadata } = useGetCasesFilters(projectId || "");
+ const { data: filterMetadata } = useGetProjectFilters(projectId || "");
const { incidentId, queryId } = getIncidentAndQueryIds(
filterMetadata?.caseTypes,
diff --git a/apps/customer-portal/webapp/src/pages/__tests__/AllCasesPage.test.tsx b/apps/customer-portal/webapp/src/pages/__tests__/AllCasesPage.test.tsx
index 433d68e181..5fa7908031 100644
--- a/apps/customer-portal/webapp/src/pages/__tests__/AllCasesPage.test.tsx
+++ b/apps/customer-portal/webapp/src/pages/__tests__/AllCasesPage.test.tsx
@@ -65,7 +65,7 @@ const mockCases = [
vi.mock("@api/useGetProjectCasesStats", () => ({
useGetProjectCasesStats: vi.fn(),
}));
-vi.mock("@api/useGetCasesFilters", () => ({
+vi.mock("@api/useGetProjectFilters", () => ({
default: vi.fn(),
}));
vi.mock("@api/useGetProjectCases", () => ({
@@ -73,7 +73,7 @@ vi.mock("@api/useGetProjectCases", () => ({
}));
import { useGetProjectCasesStats } from "@api/useGetProjectCasesStats";
-import useGetCasesFilters from "@api/useGetCasesFilters";
+import useGetProjectFilters from "@api/useGetProjectFilters";
import useGetProjectCases from "@api/useGetProjectCases";
// Mock Child Components to test props passing and interactions
@@ -141,7 +141,7 @@ describe("AllCasesPage", () => {
isFetching: false,
isError: false,
});
- (useGetCasesFilters as any).mockReturnValue({
+ (useGetProjectFilters as any).mockReturnValue({
data: mockCaseMetadata,
isFetching: false,
});
diff --git a/apps/customer-portal/webapp/src/pages/__tests__/CreateCasePage.test.tsx b/apps/customer-portal/webapp/src/pages/__tests__/CreateCasePage.test.tsx
index 79d6309f88..f5d608e13e 100644
--- a/apps/customer-portal/webapp/src/pages/__tests__/CreateCasePage.test.tsx
+++ b/apps/customer-portal/webapp/src/pages/__tests__/CreateCasePage.test.tsx
@@ -156,8 +156,8 @@ describe("CreateCasePage", () => {
})),
}));
- // Mock useGetCasesFilters hook
- vi.mock("../../api/useGetCasesFilters", () => ({
+ // Mock useGetProjectFilters hook
+ vi.mock("../../api/useGetProjectFilters", () => ({
default: vi.fn(() => ({
data: {
statuses: [{ id: "1", label: "Open" }],
diff --git a/apps/customer-portal/webapp/src/pages/__tests__/DashboardPage.test.tsx b/apps/customer-portal/webapp/src/pages/__tests__/DashboardPage.test.tsx
index 238ef41e0b..42c3d31f76 100644
--- a/apps/customer-portal/webapp/src/pages/__tests__/DashboardPage.test.tsx
+++ b/apps/customer-portal/webapp/src/pages/__tests__/DashboardPage.test.tsx
@@ -99,7 +99,7 @@ const mockCasesStats = {
isError: false,
};
-vi.mock("@api/useGetCasesFilters", () => ({
+vi.mock("@api/useGetProjectFilters", () => ({
default: vi.fn(() => mockFilters),
}));
diff --git a/apps/customer-portal/webapp/src/pages/__tests__/SupportPage.test.tsx b/apps/customer-portal/webapp/src/pages/__tests__/SupportPage.test.tsx
index 33e8102d48..8880e16c4c 100644
--- a/apps/customer-portal/webapp/src/pages/__tests__/SupportPage.test.tsx
+++ b/apps/customer-portal/webapp/src/pages/__tests__/SupportPage.test.tsx
@@ -160,8 +160,8 @@ vi.mock("@api/useGetProjectSupportStats", () => ({
useGetProjectSupportStats: (id: string) => mockUseGetProjectSupportStats(id),
}));
-// Mock useGetCasesFilters (provides caseTypes so caseTypeIds are derived for cases query)
-vi.mock("@api/useGetCasesFilters", () => ({
+// Mock useGetProjectFilters (provides caseTypes so caseTypeIds are derived for cases query)
+vi.mock("@api/useGetProjectFilters", () => ({
__esModule: true,
default: () => ({
data: {
diff --git a/apps/customer-portal/webapp/src/utils/support.ts b/apps/customer-portal/webapp/src/utils/support.ts
index fd049fe5a6..93eb0138de 100644
--- a/apps/customer-portal/webapp/src/utils/support.ts
+++ b/apps/customer-portal/webapp/src/utils/support.ts
@@ -44,7 +44,7 @@ import { createElement, type ComponentType, type ReactNode } from "react";
* Extracts Incident and Query case type IDs from caseTypes metadata.
* Used for default caseTypeIds filter in Support overview and All Cases.
*
- * @param caseTypes - Case types from useGetCasesFilters response.
+ * @param caseTypes - Case types from useGetProjectFilters response.
* @returns {string[]} IDs for Incident and Query types.
*/
export function getIncidentAndQueryCaseTypeIds(
@@ -61,7 +61,7 @@ export function getIncidentAndQueryCaseTypeIds(
* Extracts Incident and Query case type IDs separately for stats API.
* API expects caseTypes=queryId&caseTypes=incidentId.
*
- * @param caseTypes - Case types from useGetCasesFilters response.
+ * @param caseTypes - Case types from useGetProjectFilters response.
* @returns {{ incidentId?: string; queryId?: string }} Incident and Query IDs.
*/
export function getIncidentAndQueryIds(caseTypes?: MetadataItem[]): {
@@ -1130,7 +1130,7 @@ export function getAvailableCaseActions(
* Returns the Announcement case type ID from the case types metadata.
* Used to fetch announcements (cases with type Announcement) from the cases API.
*
- * @param caseTypes - Array of case types from useGetCasesFilters.
+ * @param caseTypes - Array of case types from useGetProjectFilters.
* @returns {string | undefined} The Announcement type ID or undefined.
*/
export function getAnnouncementCaseTypeId(