11import { createSlice } from '@reduxjs/toolkit' ;
22import { createAsyncThunk , PayloadAction } from '@reduxjs/toolkit' ;
3- import {
4- uniq ,
5- groupBy ,
6- mapObjIndexed ,
7- prop ,
8- isNil ,
9- reject ,
10- find ,
11- propEq
12- } from 'ramda' ;
133
144import { handleApi } from '@/api-helpers/axios-api-instance' ;
155import { AsyncSelectOption } from '@/components/AsyncSelect' ;
@@ -81,25 +71,6 @@ export const reposSlice = createSlice({
8171 ) : void {
8272 state . teamRepoIds = action . payload ;
8373 } ,
84- toggleRepo ( state : State , action : PayloadAction < BaseRepo > ) : void {
85- const repo = action . payload ;
86- const stateRepos = state . selectionMap [ repo . parent ] || [ ] ;
87- const repoExists = find ( propEq ( 'idempotency_key' , repo . id ) , stateRepos ) ;
88-
89- state . selectionMap [ repo . parent ] = (
90- repoExists
91- ? stateRepos . filter (
92- ( stateRepo ) => stateRepo . idempotency_key !== repo . id
93- )
94- : uniq (
95- stateRepos . concat ( {
96- idempotency_key : repo . id . toString ( ) ,
97- name : repo . name ,
98- slug : repo . slug
99- } )
100- )
101- ) . sort ( ) ;
102- } ,
10374 setRepoWorkflow (
10475 state : State ,
10576 action : PayloadAction < {
@@ -132,19 +103,6 @@ export const reposSlice = createSlice({
132103 'repos' ,
133104 ( state , action ) => ( state . repos = action . payload )
134105 ) ;
135-
136- addFetchCasesToReducer (
137- builder ,
138- fetchSelectedRepos ,
139- 'selectionMap' ,
140- refreshState
141- ) ;
142- addFetchCasesToReducer (
143- builder ,
144- updatedRepoAndWorkflowSelection ,
145- 'workflowMap' ,
146- refreshState
147- ) ;
148106 addFetchCasesToReducer (
149107 builder ,
150108 fetchUnassignedRepos ,
@@ -154,44 +112,6 @@ export const reposSlice = createSlice({
154112 }
155113} ) ;
156114
157- const refreshState = (
158- state : State ,
159- action : {
160- payload : RepoWithMultipleWorkflows [ ] ;
161- type : string ;
162- }
163- ) => {
164- if ( ! action . payload . length ) return state ;
165-
166- if ( ! state . selectedOrg ) state . selectedOrg = action . payload [ 0 ] . org_name ;
167- state . selectionMap = mapObjIndexed (
168- ( group : RepoWithMultipleWorkflows [ ] ) =>
169- group
170- . map ( ( repo ) => ( {
171- idempotency_key : repo . idempotency_key ,
172- name : repo . name ,
173- slug : repo . slug
174- } ) )
175- . sort ( ) ,
176- groupBy ( prop ( 'org_name' ) , action . payload || [ ] )
177- ) ;
178- state . workflowMap = action . payload . reduce (
179- ( map , repo ) => ( {
180- ...map ,
181- [ repo . name ] : repo . repo_workflows ?. length
182- ? repo . repo_workflows . map ( ( wf ) => ( {
183- value : wf ?. provider_workflow_id ,
184- name : wf ?. name
185- } ) )
186- : null
187- } ) ,
188- { } as State [ 'workflowMap' ]
189- ) ;
190-
191- state . persistedConfig . selectionMap = state . selectionMap ;
192- state . persistedConfig . workflowMap = state . workflowMap ;
193- } ;
194-
195115export const fetchUnassignedRepos = createAsyncThunk (
196116 'repos/fetchUnassignedRepos' ,
197117 async ( params : { orgId : ID ; provider : Integration } ) => {
@@ -245,27 +165,3 @@ export const fetchSelectedRepos = createAsyncThunk(
245165 ) ;
246166 }
247167) ;
248-
249- export const updatedRepoAndWorkflowSelection = createAsyncThunk (
250- 'repos/updatedRepoAndWorkflowSelection' ,
251- async ( params : {
252- orgId : ID ;
253- provider : Integration ;
254- workflowMap : RepoWorkflowMap ;
255- selections : RepoSelectionMap ;
256- onError : ( e : Error ) => any ;
257- } ) => {
258- return await handleApi < RepoWithMultipleWorkflows [ ] > ( `/integrations/orgs` , {
259- method : 'PATCH' ,
260- data : {
261- org_id : params . orgId ,
262- orgRepos : params . selections ,
263- provider : params . provider ,
264- repoWorkflows : reject ( isNil , params . workflowMap )
265- }
266- } ) . catch ( ( e ) => {
267- params . onError ( e ) ;
268- throw e ;
269- } ) ;
270- }
271- ) ;
0 commit comments