@@ -3,6 +3,7 @@ import ProjectDetailsModal from "./ProjectDetailsModal";
3
3
import client from "../client" ;
4
4
5
5
import imageUrlBuilder from "@sanity/image-url" ;
6
+ import { Dropdown } from "react-bootstrap" ;
6
7
7
8
const builder = imageUrlBuilder ( client ) ;
8
9
@@ -15,7 +16,8 @@ class Projects extends Component {
15
16
super ( props ) ;
16
17
this . state = {
17
18
detailsModalShow : false ,
18
- selectedProject : null , // Store the selected project data
19
+ selectedProject : null ,
20
+ showAllProjects : false , // State to control whether to show all projects or not
19
21
} ;
20
22
}
21
23
@@ -29,8 +31,16 @@ class Projects extends Component {
29
31
this . setState ( { detailsModalShow : false , selectedProject : null } ) ;
30
32
} ;
31
33
34
+ // Function to toggle showing all projects
35
+ toggleShowAllProjects = ( ) => {
36
+ this . setState ( ( prevState ) => ( {
37
+ showAllProjects : ! prevState . showAllProjects ,
38
+ } ) ) ;
39
+ } ;
40
+
32
41
render ( ) {
33
- const { selectedProject } = this . state ;
42
+ const { selectedProject, showAllProjects } = this . state ;
43
+ const { projects } = this . props ;
34
44
35
45
// Check if selectedProject is not null, then render project details modal
36
46
const projectDetailsModal = selectedProject && (
@@ -41,36 +51,8 @@ class Projects extends Component {
41
51
/>
42
52
) ;
43
53
44
- let projects = [ ] ;
45
-
46
- if ( this . props . projects ) {
47
- projects = this . props . projects . map ( ( project ) => (
48
- < div
49
- className = "col-sm-12 col-md-6 col-lg-4"
50
- key = { project . _id } // Use a unique key, like the project's _id
51
- style = { { cursor : "pointer" } }
52
- >
53
- < span className = "portfolio-item d-block" >
54
- < div
55
- className = "foto"
56
- onClick = { ( ) => this . detailsModalShow ( project ) }
57
- >
58
- < div >
59
- < img
60
- src = { urlFor ( project . thumbnail ) . url ( ) }
61
- alt = "projectImages"
62
- height = "230"
63
- style = { { marginBottom : 5 } }
64
- />
65
- < span className = "project-date" > { project . date } </ span >
66
- < br />
67
- < p className = "project-title-settings mt-3" > { project . title } </ p >
68
- </ div >
69
- </ div >
70
- </ span >
71
- </ div >
72
- ) ) ;
73
- }
54
+ // Determine which projects to render based on showAllProjects state
55
+ const visibleProjects = showAllProjects ? projects : projects . slice ( 0 , 6 ) ;
74
56
75
57
return (
76
58
< section id = "portfolio" >
@@ -79,9 +61,55 @@ class Projects extends Component {
79
61
< span > Projects</ span >
80
62
</ h1 >
81
63
< div className = "col-md-12 mx-auto" >
82
- < div className = "row mx-auto" > { projects } </ div >
64
+ < div className = "row mx-auto" >
65
+ { visibleProjects . map ( ( project ) => (
66
+ < div
67
+ className = "col-sm-12 col-md-6 col-lg-4"
68
+ key = { project . _id }
69
+ style = { { cursor : "pointer" } }
70
+ >
71
+ < span className = "portfolio-item d-block" >
72
+ < div
73
+ className = "foto"
74
+ onClick = { ( ) => this . detailsModalShow ( project ) }
75
+ >
76
+ < div >
77
+ < img
78
+ src = { urlFor ( project . thumbnail ) . url ( ) }
79
+ alt = "projectImages"
80
+ height = "230"
81
+ style = { { marginBottom : 5 } }
82
+ />
83
+ < span className = "project-date" > { project . date } </ span >
84
+ < br />
85
+ < p className = "project-title-settings mt-3" >
86
+ { project . title }
87
+ </ p >
88
+ </ div >
89
+ </ div >
90
+ </ span >
91
+ </ div >
92
+ ) ) }
93
+ </ div >
83
94
</ div >
84
95
{ projectDetailsModal }
96
+
97
+ < div
98
+ className = "col-md-12 mx-auto"
99
+ style = { { textAlign : "center" , marginTop : 20 } }
100
+ >
101
+ < Dropdown >
102
+ < Dropdown . Toggle
103
+ variant = "success"
104
+ id = "dropdown-basic"
105
+ style = { { backgroundColor : "black" , borderColor : "black" } }
106
+ size = "lg"
107
+ onClick = { this . toggleShowAllProjects }
108
+ >
109
+ { showAllProjects ? "Show Less" : "See More" }
110
+ </ Dropdown . Toggle >
111
+ </ Dropdown >
112
+ </ div >
85
113
</ div >
86
114
</ section >
87
115
) ;
0 commit comments