From 7e2fa2ec585800b69824c72c012c281a344740ff Mon Sep 17 00:00:00 2001 From: shivam-bit Date: Wed, 24 Apr 2024 14:46:28 +0530 Subject: [PATCH] Refactor code to enable organization repositories if not enabled --- web-server/pages/api/integrations/orgs.ts | 76 ------------------- .../components/TeamSelector/TeamPopover.tsx | 38 +++++----- .../TeamSelector/useTeamSelectorSetup.tsx | 4 +- 3 files changed, 22 insertions(+), 96 deletions(-) diff --git a/web-server/pages/api/integrations/orgs.ts b/web-server/pages/api/integrations/orgs.ts index 3ca3946bf..de495a739 100644 --- a/web-server/pages/api/integrations/orgs.ts +++ b/web-server/pages/api/integrations/orgs.ts @@ -224,79 +224,3 @@ const dbRepoComparator = (tableRepo: DB_OrgRepo) => (reqRepo: ReqRepo) => reqRepo.idempotency_key === tableRepo.idempotency_key; const dbRepoFilter = (reqRepos: ReqRepo[]) => (tableRepo: DB_OrgRepo) => reqRepos.some(dbRepoComparator(tableRepo)); - -export const enableOrgReposIfNotEnabled = async ( - org_id: ID, - provider: Integration, - orgReposList: ReqOrgRepo[] -) => { - const flatReposList: ReqRepo[] = orgReposList.flatMap(({ org, repos }) => - repos.map((repo) => ({ org, ...repo })) - ); - - /** - * Reasoning: - * 1. Update: Deactivate all org_repos - * 2. Update: Reactivate any existing org repos (can't upsert) - * 3. Insert: Add any new selected repos - */ - - let repos: Row<'OrgRepo'>[] = []; - // 1. Update: Deactivate all org_repos - try { - repos = await db(Table.OrgRepo) - .update({ is_active: false, updated_at: new Date() }) - .where({ org_id, provider }) - .returning('*'); - } catch (err) { - // Empty update throws, so do nothing - // logger.warn('NO_REPOS_UPDATED | MODE:IS_ACTIVE_FALSE', err); - } - - // Among the repos passed to request payload, determine which ones - // were already present in the DB [selectedRepos] and those - // that aren't [remainingRepos] - const [selectedRepos, remainingRepos] = partition( - (flatRepo) => repos.some(reqRepoComparator(flatRepo)), - flatReposList - ); - - let filteredReposRows: Row<'OrgRepo'>[] = []; - let remainingReposRows: Row<'OrgRepo'>[] = []; - - // 2. Update: Reactivate any existing org repos (can't upsert) - try { - const filteredRepos = repos.filter(dbRepoFilter(selectedRepos)); - - if (filteredRepos.length) - filteredReposRows = await db(Table.OrgRepo) - .update({ is_active: true, updated_at: new Date() }) - .and.whereIn( - 'id', - repos.filter(dbRepoFilter(selectedRepos)).map((repo) => repo.id) - ) - .returning('*'); - } catch (err) { - // Empty update throws, so do nothing - // logger.warn('NO_REPOS_UPDATED | MODE:IS_ACTIVE_TRUE', err); - } - - // 3. Update: Add any new selected repos - if (remainingRepos.length) { - remainingReposRows = await db(Table.OrgRepo) - .insert( - remainingRepos.map((repo) => ({ - org_id, - name: repo.name, - slug: repo.slug, - idempotency_key: repo.idempotency_key, - provider, - org_name: repo.org - })) - ) - .returning('*'); - } - - syncReposForOrg(org_id); - return [...filteredReposRows, ...remainingReposRows]; -}; diff --git a/web-server/src/components/TeamSelector/TeamPopover.tsx b/web-server/src/components/TeamSelector/TeamPopover.tsx index 7a312ba6d..a51393a72 100644 --- a/web-server/src/components/TeamSelector/TeamPopover.tsx +++ b/web-server/src/components/TeamSelector/TeamPopover.tsx @@ -2,9 +2,9 @@ import { CheckCircleOutlineRounded, RadioButtonUnchecked, RadioButtonChecked, - EditRounded, SearchRounded, - ClearRounded + ClearRounded, + Edit } from '@mui/icons-material'; import { alpha, @@ -52,6 +52,8 @@ import { depFn } from '@/utils/fn'; import { defaultPopoverProps } from './defaultPopoverProps'; +import { useOverlayPage } from '../OverlayPageContext'; + export const TeamPopover: FC<{ teamElRef: MutableRefObject; teamsPop: BoolState; @@ -80,7 +82,7 @@ export const TeamPopover: FC<{ }) => { const theme = useTheme(); const { team } = useSingleTeamConfig(); - + const { addPage } = useOverlayPage(); const updatingTeamMemberFilter = useBoolState(); const isRoleEng = false; @@ -268,25 +270,25 @@ export const TeamPopover: FC<{ {!isRoleEng && ( e.stopPropagation()} title={`Edit team: ${apiTeam.name}`} tooltipPlacement="right" > - - { + addPage({ + page: { + title: 'Edit team', + ui: 'team_edit', + props: { + teamId: apiTeam.id, + hideCardComponents: true + } } - }} - /> - + }); + teamsPop.false(); + }} + /> )} diff --git a/web-server/src/components/TeamSelector/useTeamSelectorSetup.tsx b/web-server/src/components/TeamSelector/useTeamSelectorSetup.tsx index fee5d515e..763accd02 100644 --- a/web-server/src/components/TeamSelector/useTeamSelectorSetup.tsx +++ b/web-server/src/components/TeamSelector/useTeamSelectorSetup.tsx @@ -11,6 +11,7 @@ import { useAxios } from '@/hooks/useAxios'; import { useStateTeamConfig } from '@/hooks/useStateTeamConfig'; import { appSlice } from '@/slices/app'; import { resourcesSlice } from '@/slices/resources'; +import { teamSlice } from '@/slices/team'; import { useSelector } from '@/store'; import { Team } from '@/types/api/teams'; import { @@ -18,7 +19,6 @@ import { FetchTeamsResponse, TeamSelectorModes } from '@/types/resources'; -import { groupObj } from '@/utils/objectArray'; type UseTeamSelectorSetupArgs = { mode: TeamSelectorModes }; /** @@ -64,7 +64,7 @@ export const useTeamSelectorSetup = ({ mode }: UseTeamSelectorSetupArgs) => { const updateUsers = useCallback( (res: AxiosResponse) => { - dispatch(resourcesSlice.actions.updateTeams(groupObj(res.data.teams))); + dispatch(teamSlice.actions.setTeams(res.data.teams)); dispatch( appSlice.actions.setTeamProdBranchMap(res.data.teamReposProdBranchMap) );