Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 0 additions & 76 deletions web-server/pages/api/integrations/orgs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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];
};
38 changes: 20 additions & 18 deletions web-server/src/components/TeamSelector/TeamPopover.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ import {
CheckCircleOutlineRounded,
RadioButtonUnchecked,
RadioButtonChecked,
EditRounded,
SearchRounded,
ClearRounded
ClearRounded,
Edit
} from '@mui/icons-material';
import {
alpha,
Expand Down Expand Up @@ -52,6 +52,8 @@ import { depFn } from '@/utils/fn';

import { defaultPopoverProps } from './defaultPopoverProps';

import { useOverlayPage } from '../OverlayPageContext';

export const TeamPopover: FC<{
teamElRef: MutableRefObject<any>;
teamsPop: BoolState;
Expand Down Expand Up @@ -80,7 +82,7 @@ export const TeamPopover: FC<{
}) => {
const theme = useTheme();
const { team } = useSingleTeamConfig();

const { addPage } = useOverlayPage();
const updatingTeamMemberFilter = useBoolState();

const isRoleEng = false;
Expand Down Expand Up @@ -268,25 +270,25 @@ export const TeamPopover: FC<{
{!isRoleEng && (
<FlexBox
alignCenter
onClick={(e) => e.stopPropagation()}
title={`Edit team: ${apiTeam.name}`}
tooltipPlacement="right"
>
<Link
href={
ROUTES.TEAMS.ROUTE.add(apiTeam.id).PATH
}
passHref
>
<EditRounded
fontSize="inherit"
sx={{
':hover': {
color: theme.colors.primary.main
<Edit
fontSize="small"
onClick={() => {
addPage({
page: {
title: 'Edit team',
ui: 'team_edit',
props: {
teamId: apiTeam.id,
hideCardComponents: true
}
}
}}
/>
</Link>
});
teamsPop.false();
}}
/>
</FlexBox>
)}
</FlexBox>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@ 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 {
ActiveBranchMode,
FetchTeamsResponse,
TeamSelectorModes
} from '@/types/resources';
import { groupObj } from '@/utils/objectArray';

type UseTeamSelectorSetupArgs = { mode: TeamSelectorModes };
/**
Expand Down Expand Up @@ -64,7 +64,7 @@ export const useTeamSelectorSetup = ({ mode }: UseTeamSelectorSetupArgs) => {

const updateUsers = useCallback(
(res: AxiosResponse<FetchTeamsResponse>) => {
dispatch(resourcesSlice.actions.updateTeams(groupObj(res.data.teams)));
dispatch(teamSlice.actions.setTeams(res.data.teams));
dispatch(
appSlice.actions.setTeamProdBranchMap(res.data.teamReposProdBranchMap)
);
Expand Down