11import PageTitle from 'components/PageTitle'
2- import {
3- useDeleteReleasePipelineMutation ,
4- useGetReleasePipelinesQuery ,
5- } from 'common/services/useReleasePipelines'
2+ import { useGetReleasePipelinesQuery } from 'common/services/useReleasePipelines'
63import { Button } from 'components/base/forms/Button'
74import { RouterChildContext } from 'react-router'
85import ConfigProvider from 'common/providers/ConfigProvider'
9- import { ReleasePipeline } from 'common/types/responses'
10- import Card from 'components/Card'
11- import DropdownMenu from 'components/base/DropdownMenu'
6+ import ReleasePipelinesList from 'components/release-pipelines/ReleasePipelinesList'
7+ import { useState } from 'react'
128
139type ReleasePipelinesPageType = {
1410 router : RouterChildContext [ 'router' ]
@@ -20,123 +16,47 @@ type ReleasePipelinesPageType = {
2016 }
2117}
2218
23- const NoReleasePipelines = ( {
24- projectId,
25- router,
26- } : {
27- router : RouterChildContext [ 'router' ]
28- projectId : string
29- } ) => {
30- return (
31- < div className = 'mt-5 text-center' >
32- < p >
33- Create release pipelines to automate and standardize your release
34- process throughout your organization.
35- </ p >
36- < Row className = 'align-items-center justify-content-center gap-3' >
37- < Button
38- onClick = { ( ) =>
39- router . history . push (
40- `/project/${ projectId } /release-pipelines/create` ,
41- )
42- }
43- >
44- Create release pipeline
45- </ Button >
46- < Button theme = 'outline' > Learn more</ Button >
47- </ Row >
48- </ div >
49- )
50- }
51-
52- type ReleasePipelinesPageContentProps = {
53- data : ReleasePipeline [ ] | undefined
54- isLoading : boolean
55- projectId : string
56- router : RouterChildContext [ 'router' ]
57- }
58-
59- const ReleasePipelinesPageContent = ( {
60- data,
61- isLoading,
62- projectId,
63- router,
64- } : ReleasePipelinesPageContentProps ) => {
65- const [ deleteReleasePipeline ] = useDeleteReleasePipelineMutation ( )
66-
67- if ( isLoading ) {
68- return (
69- < div className = 'text-center' >
70- < Loader />
71- </ div >
72- )
73- }
74-
75- if ( ! data ?. length ) {
76- return < NoReleasePipelines router = { router } projectId = { projectId } />
77- }
78-
79- return (
80- < >
81- { data ?. map ( ( pipeline ) => (
82- < Card
83- contentClassName = 'bg-light200 bg-white'
84- className = 'rounded position-relative border-1 px-2'
85- key = { pipeline . id }
86- >
87- < Row className = 'align-items-center justify-content-between' >
88- < span className = 'fw-bold' > { pipeline . name } </ span >
89- < Row className = ' gap-3' >
90- < div className = 'text-center' >
91- < div className = 'fw-bold' > { pipeline . stages_count ?? 0 } </ div >
92- < div > Stages</ div >
93- </ div >
94- < div className = 'text-center' >
95- < div className = 'fw-bold' > { pipeline . flags_count ?? 0 } </ div >
96- < div > Flags</ div >
97- </ div >
98- < DropdownMenu
99- items = { [
100- {
101- icon : 'trash-2' ,
102- label : 'Remove Release Pipeline' ,
103- onClick : ( ) =>
104- deleteReleasePipeline ( {
105- pipelineId : pipeline . id ,
106- projectId : Number ( projectId ) ,
107- } ) ,
108- } ,
109- ] }
110- />
111- </ Row >
112- </ Row >
113- </ Card >
114- ) ) }
115- </ >
116- )
117- }
118-
11919const ReleasePipelinesPage = ( { match, router } : ReleasePipelinesPageType ) => {
20+ const [ page , setPage ] = useState ( 1 )
21+ const pageSize = 10
12022 const { projectId } = match . params
12123 const { data, isLoading } = useGetReleasePipelinesQuery ( {
24+ page,
25+ page_size : pageSize ,
12226 projectId : Number ( projectId ) ,
12327 } )
28+
12429 const hasReleasePipelines = ! ! data ?. results ?. length
12530
12631 return (
12732 < div className = 'app-container container' >
12833 < PageTitle
12934 title = { 'Release Pipelines' }
130- cta = { hasReleasePipelines && < Button > Create release pipeline</ Button > }
35+ cta = {
36+ hasReleasePipelines && (
37+ < Button
38+ onClick = { ( ) =>
39+ router . history . push (
40+ `/project/${ projectId } /release-pipelines/create` ,
41+ )
42+ }
43+ >
44+ Create Release Pipeline
45+ </ Button >
46+ )
47+ }
13148 >
13249 { hasReleasePipelines &&
13350 'Define the stages your flags should go from development to launched. Learn more.' }
13451 </ PageTitle >
135- < ReleasePipelinesPageContent
136- data = { data ?. results }
52+ < ReleasePipelinesList
53+ data = { data }
13754 isLoading = { isLoading }
13855 projectId = { projectId }
13956 router = { router }
57+ page = { page }
58+ pageSize = { pageSize }
59+ onPageChange = { setPage }
14060 />
14161 </ div >
14262 )
0 commit comments