11"use client" ;
2- import { fetchAllSeasons , fetchOnCampusOffers } from "@/helpers/api" ;
2+ import { fetchAllSeasons , fetchOnCampusOffers , deleteOnCampusOffers } from "@/helpers/api" ;
33import generateColumns from "@/components/NewTableComponent/ColumnMapping" ;
44import { onCampusOfferDTO } from "@/dto/onCampusOfferDTO" ;
55import Table from "@/components/NewTableComponent/Table" ;
@@ -19,6 +19,26 @@ const OnCampusOffersPage = () => {
1919 const [ allOffers , setAllOffers ] = useState ( ) ;
2020 const [ visibleColumns , setVisibleColumns ] = useState < any [ ] > ( [ ] ) ;
2121
22+ const loadOffers = async ( ) => {
23+ if ( ! selectedSeason ) return ;
24+
25+ setLoading ( true ) ;
26+ try {
27+ const data = await fetchOnCampusOffers ( selectedSeason ) ;
28+ setAllOffers ( data ) ;
29+
30+ if ( seasons . find ( season => season . id === selectedSeason ) ?. type === "INTERN" ) {
31+ setVisibleColumns ( columns . filter ( ( column : any ) => ! internHiddenColumns . includes ( column ?. accessorKey ) ) ) ;
32+ } else {
33+ setVisibleColumns ( columns . filter ( ( column : any ) => ! placementHiddenColumns . includes ( column ?. accessorKey ) ) ) ;
34+ }
35+ } catch ( error ) {
36+ toast . error ( "Failed to fetch on campus offers" ) ;
37+ } finally {
38+ setLoading ( false ) ;
39+ }
40+ } ;
41+
2242 useEffect ( ( ) => {
2343 const getData = async ( ) => {
2444 try {
@@ -42,25 +62,30 @@ const OnCampusOffersPage = () => {
4262 } , [ ] ) ;
4363
4464 useEffect ( ( ) => {
45- if ( selectedSeason ) {
46- try {
47- setLoading ( true ) ;
48- fetchOnCampusOffers ( selectedSeason ) . then ( ( data ) => {
49- setAllOffers ( data ) ;
50- } ) ;
51- if ( seasons . find ( season => season . id === selectedSeason ) ?. type === "INTERN" ) {
52- setVisibleColumns ( columns . filter ( ( column : any ) => ! internHiddenColumns . includes ( column ?. accessorKey ) ) ) ;
53- } else {
54- setVisibleColumns ( columns . filter ( ( column : any ) => ! placementHiddenColumns . includes ( column ?. accessorKey ) ) ) ;
55- }
56- } catch ( error ) {
57- toast . error ( "Failed to fetch on campus offers" ) ;
58- } finally {
59- setLoading ( false ) ;
60- }
61- }
65+ loadOffers ( ) ;
6266 } , [ selectedSeason ] ) ;
6367
68+ const handleDelete = async ( selectedOffers : any [ ] ) => {
69+ if ( selectedOffers . length === 0 ) {
70+ toast . error ( "Please select at least one offer to delete" ) ;
71+ return ;
72+ }
73+
74+ const confirmMessage = `Are you sure you want to delete ${ selectedOffers . length } on-campus offer(s)? This action cannot be undone.` ;
75+ if ( ! window . confirm ( confirmMessage ) ) {
76+ return ;
77+ }
78+
79+ try {
80+ const ids = selectedOffers . map ( ( offer ) => offer . id ) ;
81+ await deleteOnCampusOffers ( ids ) ;
82+ toast . success ( `Successfully deleted ${ selectedOffers . length } offer(s)` ) ;
83+ await loadOffers ( ) ; // Refresh the list
84+ } catch ( error ) {
85+ toast . error ( "Failed to delete offers" ) ;
86+ }
87+ } ;
88+
6489 return (
6590 < div className = "container mx-auto my-4 md:my-8 px-2 md:px-4" >
6691 < h1 className = "text-2xl md:text-3xl mb-4 md:mb-8 font-bold mx-auto text-center" >
@@ -93,6 +118,8 @@ const OnCampusOffersPage = () => {
93118 data = { allOffers }
94119 columns = { visibleColumns }
95120 type = { "on-campus-offers" }
121+ buttonText = "Delete Selected"
122+ buttonAction = { handleDelete }
96123 />
97124 </ div >
98125 ) }
0 commit comments