diff --git a/sources/packages/backend/apps/api/src/route-controllers/models/pagination.dto.ts b/sources/packages/backend/apps/api/src/route-controllers/models/pagination.dto.ts index ab3b3c0ab2..d9b0c96eb9 100644 --- a/sources/packages/backend/apps/api/src/route-controllers/models/pagination.dto.ts +++ b/sources/packages/backend/apps/api/src/route-controllers/models/pagination.dto.ts @@ -1,6 +1,7 @@ import { IsEnum, IsIn, IsOptional, Max, MaxLength, Min } from "class-validator"; import { PAGINATION_SEARCH_MAX_LENGTH } from "../../constants"; import { FieldSortOrder } from "@sims/utilities"; +import { ProgramStatus } from "@sims/sims-db"; /** * Common parameters used when an API result @@ -77,6 +78,15 @@ export class ProgramsPaginationOptionsAPIInDTO extends PaginationOptionsAPIInDTO @IsOptional() @IsIn(["submittedDate", "programName", "credentialType"]) sortField?: string; + @IsOptional() + @MaxLength(PAGINATION_SEARCH_MAX_LENGTH) + programNameSearch?: string; + @IsOptional() + @MaxLength(PAGINATION_SEARCH_MAX_LENGTH) + locationNameSearch?: string; + @IsOptional() + @IsIn([ProgramStatus.Approved, ProgramStatus.Declined, ProgramStatus.Pending]) + status?: string; } export class OfferingsPaginationOptionsAPIInDTO extends PaginationOptionsAPIInDTO { diff --git a/sources/packages/backend/apps/api/src/services/education-program/education-program.service.ts b/sources/packages/backend/apps/api/src/services/education-program/education-program.service.ts index e646bb84cd..b1f081ca5e 100644 --- a/sources/packages/backend/apps/api/src/services/education-program/education-program.service.ts +++ b/sources/packages/backend/apps/api/src/services/education-program/education-program.service.ts @@ -33,9 +33,9 @@ import { } from "./education-program.service.models"; import { sortProgramsColumnMap, - PaginationOptions, PaginatedResults, SortPriority, + ProgramPaginationOptions, } from "../../utilities"; import { CustomNamedError, @@ -271,14 +271,14 @@ export class EducationProgramService extends RecordDataModelService> { const paginatedProgramQuery = this.repo @@ -331,6 +331,33 @@ export class EducationProgramService extends RecordDataModelService; sortField?: string; sortOrder?: DataTableSortOrder | DataTableSortByOrder; page: number; diff --git a/sources/packages/web/src/views/aest/institution/Programs.vue b/sources/packages/web/src/views/aest/institution/Programs.vue index 80afef947a..5622da8d92 100644 --- a/sources/packages/web/src/views/aest/institution/Programs.vue +++ b/sources/packages/web/src/views/aest/institution/Programs.vue @@ -7,15 +7,26 @@ :recordsCount="institutionProgramsSummary.count" > @@ -98,6 +109,7 @@ export default defineComponent({ {} as PaginatedResults, ); const searchProgramName = ref(""); + const searchLocationName = ref(""); const currentPage = ref(); const currentPageLimit = ref(); const loading = ref(true); @@ -106,18 +118,19 @@ export default defineComponent({ institutionId: number, rowsPerPage: number, page: number, - programName: string, sortColumn?: ProgramSummaryFields, sortOrder?: DataTableSortByOrder, ) => { try { loading.value = true; - searchProgramName.value = programName; institutionProgramsSummary.value = await EducationProgramService.shared.getProgramsSummaryByInstitutionId( institutionId, { - searchCriteria: programName, + searchCriteria: { + programNameSearch: searchProgramName.value, + locationNameSearch: searchLocationName.value, + }, pageLimit: rowsPerPage, page, sortField: sortColumn, @@ -133,7 +146,6 @@ export default defineComponent({ props.institutionId, DEFAULT_PAGE_LIMIT, DEFAULT_DATATABLE_PAGE_NUMBER, - searchProgramName.value, ); }); const goToViewProgramDetail = (programId: number, locationId: number) => { @@ -154,17 +166,15 @@ export default defineComponent({ props.institutionId, event.itemsPerPage, event.page, - searchProgramName.value, sortByOptions?.key as ProgramSummaryFields, sortByOptions?.order, ); }; - const goToSearchProgramName = async () => { + const goToSearch = async () => { await getProgramsSummaryList( props.institutionId, currentPageLimit.value ?? DEFAULT_PAGE_LIMIT, currentPage.value ?? DEFAULT_DATATABLE_PAGE_NUMBER, - searchProgramName.value, ); }; return { @@ -172,8 +182,9 @@ export default defineComponent({ goToViewProgramDetail, DEFAULT_PAGE_LIMIT, pageSortEvent, - goToSearchProgramName, + goToSearch, searchProgramName, + searchLocationName, loading, ProgramSummaryFields, ProgramHeaders,