Skip to content

Commit 0af359a

Browse files
authored
Swap to use paginated projects endpoint (supabase#38192)
1 parent 4124f0e commit 0af359a

File tree

32 files changed

+125
-99
lines changed

32 files changed

+125
-99
lines changed

apps/studio/components/interfaces/Account/AuditLogs.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ const AuditLogs = () => {
2929
projects: [], // project_ref[]
3030
})
3131

32-
const { data: projects } = useProjectsQuery()
32+
const { data: projectsData } = useProjectsQuery()
33+
const projects = projectsData?.projects ?? []
3334
const { data: organizations } = useOrganizationsQuery()
3435
const { data, error, isLoading, isSuccess, isError, isRefetching, refetch } =
3536
useProfileAuditLogsQuery(

apps/studio/components/interfaces/App/CommandMenu/OrgProjectSwitcher.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
import { Forward, Wrench, Building } from 'lucide-react'
1+
import { Building, Forward, Wrench } from 'lucide-react'
22
import { useMemo } from 'react'
33

4-
import { useProjectsQuery } from 'data/projects/projects-query'
4+
import { IS_PLATFORM } from 'common'
55
import { useOrganizationsQuery } from 'data/organizations/organizations-query'
6+
import { useProjectsQuery } from 'data/projects/projects-query'
67
import { PageType, useRegisterCommands, useRegisterPage, useSetPage } from 'ui-patterns/CommandMenu'
7-
import { IS_PLATFORM } from 'common'
88
import { COMMAND_MENU_SECTIONS } from './CommandMenu.utils'
99

1010
const PROJECT_SWITCHER_PAGE_NAME = 'Switch project'
@@ -13,10 +13,10 @@ const ORGANIZATION_SWITCHER_PAGE_NAME = 'Configure organization'
1313
export function useProjectSwitchCommand() {
1414
const setPage = useSetPage()
1515

16-
const { data: _projects } = useProjectsQuery({ enabled: IS_PLATFORM })
16+
const { data } = useProjectsQuery({ enabled: IS_PLATFORM })
1717
const projects = useMemo(
18-
() => (_projects ?? []).map(({ name, ref }) => ({ name, ref })),
19-
[_projects]
18+
() => (data?.projects ?? []).map(({ name, ref }) => ({ name, ref })),
19+
[data]
2020
)
2121

2222
useRegisterPage(

apps/studio/components/interfaces/App/RouteValidationWrapper.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,10 @@ const RouteValidationWrapper = ({ children }: PropsWithChildren<{}>) => {
7777
}
7878
}, [orgsInitialized])
7979

80-
const { data: projects, isSuccess: projectsInitialized } = useProjectsQuery({
80+
const { data, isSuccess: projectsInitialized } = useProjectsQuery({
8181
enabled: isLoggedIn,
8282
})
83+
const projects = data?.projects ?? []
8384
const projectsRef = useLatest(projects)
8485

8586
useEffect(() => {

apps/studio/components/interfaces/Billing/NoProjectsOnPaidOrgInfo.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
import { useProjectsQuery } from 'data/projects/projects-query'
2+
import Link from 'next/link'
23
import type { Organization } from 'types'
34
import { Admonition } from 'ui-patterns'
4-
import Link from 'next/link'
55

66
interface NoProjectsOnPaidOrgInfoProps {
77
organization?: Organization
88
}
99

1010
export const NoProjectsOnPaidOrgInfo = ({ organization }: NoProjectsOnPaidOrgInfoProps) => {
11-
const { data: allProjects } = useProjectsQuery({})
11+
const { data } = useProjectsQuery({})
1212
const projectCount =
13-
allProjects?.filter((project) => project.organization_id === organization?.id).length ?? 0
13+
(data?.projects ?? []).filter((project) => project.organization_id === organization?.id)
14+
.length ?? 0
1415

1516
if (
1617
projectCount > 0 ||

apps/studio/components/interfaces/Home/ProjectList/ProjectList.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,14 @@ export const ProjectList = ({
3535
const organization = organization_ ?? selectedOrganization
3636

3737
const {
38-
data: allProjects = [],
38+
data,
3939
isLoading: isLoadingProjects,
4040
isSuccess: isSuccessProjects,
4141
isError: isErrorProjects,
4242
error: projectsError,
4343
} = useProjectsQuery()
44+
const allProjects = data?.projects ?? []
45+
4446
const {
4547
isLoading: _isLoadingPermissions,
4648
isError: isErrorPermissions,

apps/studio/components/interfaces/Integrations/VercelGithub/IntegrationConnection.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,10 @@ const IntegrationConnectionItem = forwardRef<HTMLLIElement, IntegrationConnectio
3434
const { data: org } = useSelectedOrganizationQuery()
3535

3636
const { type, connection } = props
37-
const { data: projects } = useProjectsQuery()
38-
const project = projects?.find((project) => project.ref === connection.supabase_project_ref)
37+
const { data } = useProjectsQuery()
38+
const project = (data?.projects ?? []).find(
39+
(project) => project.ref === connection.supabase_project_ref
40+
)
3941
const isBranchingEnabled = project?.is_branch_enabled === true
4042

4143
const [isOpen, setIsOpen] = useState(false)

apps/studio/components/interfaces/Integrations/VercelGithub/IntegrationPanels.tsx

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,10 @@ const IntegrationConnection = forwardRef<HTMLLIElement, IntegrationConnectionPro
149149
{ connection, type, actions, showNode = true, orientation = 'horizontal', className, ...props },
150150
ref
151151
) => {
152-
const { data: projects } = useProjectsQuery()
153-
const project = projects?.find((project) => project.ref === connection.supabase_project_ref)
152+
const { data } = useProjectsQuery()
153+
const project = (data?.projects ?? []).find(
154+
(project) => project.ref === connection.supabase_project_ref
155+
)
154156

155157
return (
156158
<li
@@ -236,8 +238,10 @@ const IntegrationConnection = forwardRef<HTMLLIElement, IntegrationConnectionPro
236238

237239
const IntegrationConnectionOption = forwardRef<HTMLLIElement, IntegrationConnectionProps>(
238240
({ connection, type, ...props }, ref) => {
239-
const { data: projects } = useProjectsQuery()
240-
const project = projects?.find((project) => project.ref === connection.supabase_project_ref)
241+
const { data } = useProjectsQuery()
242+
const project = (data?.projects ?? []).find(
243+
(project) => project.ref === connection.supabase_project_ref
244+
)
241245

242246
return (
243247
<li

apps/studio/components/interfaces/Organization/AuditLogs/AuditLogs.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ import Link from 'next/link'
77
import { useEffect, useState } from 'react'
88

99
import { LogDetailsPanel } from 'components/interfaces/AuditLogs'
10+
import { LogsDatePicker } from 'components/interfaces/Settings/Logs/Logs.DatePickers'
1011
import { ScaffoldContainerLegacy } from 'components/layouts/Scaffold'
1112
import Table from 'components/to-be-cleaned/Table'
1213
import AlertError from 'components/ui/AlertError'
1314
import { ButtonTooltip } from 'components/ui/ButtonTooltip'
14-
import { DatePicker } from 'components/ui/DatePicker'
1515
import { FilterPopover } from 'components/ui/FilterPopover'
1616
import NoPermission from 'components/ui/NoPermission'
1717
import ShimmeringLoader from 'components/ui/ShimmeringLoader'
@@ -31,7 +31,6 @@ import {
3131
Button,
3232
WarningIcon,
3333
} from 'ui'
34-
import { LogsDatePicker } from 'components/interfaces/Settings/Logs/Logs.DatePickers'
3534

3635
// [Joshen considerations]
3736
// - Maybe fix the height of the table to the remaining height of the viewport, so that the search input is always visible
@@ -55,7 +54,8 @@ const AuditLogs = () => {
5554

5655
const canReadAuditLogs = useCheckPermissions(PermissionAction.READ, 'notifications')
5756

58-
const { data: projects } = useProjectsQuery()
57+
const { data: projectsData } = useProjectsQuery()
58+
const projects = projectsData?.projects ?? []
5959
const { data: organizations } = useOrganizationsQuery()
6060
const { data: members } = useOrganizationMembersQuery({ slug })
6161
const { data: rolesData } = useOrganizationRolesV2Query({ slug })

apps/studio/components/interfaces/Organization/BillingSettings/Subscription/PlanUpdateSidePanel.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,18 @@ import type { OrgPlan } from 'data/subscriptions/types'
2020
import { useSendEventMutation } from 'data/telemetry/send-event-mutation'
2121
import { useCheckPermissions } from 'hooks/misc/useCheckPermissions'
2222
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
23+
import { MANAGED_BY } from 'lib/constants/infrastructure'
2324
import { formatCurrency } from 'lib/helpers'
2425
import { plans as subscriptionsPlans } from 'shared-data/plans'
2526
import { useOrgSettingsPageStateSnapshot } from 'state/organization-settings'
27+
import { Organization } from 'types/base'
2628
import { Button, SidePanel, cn } from 'ui'
2729
import DowngradeModal from './DowngradeModal'
2830
import { EnterpriseCard } from './EnterpriseCard'
2931
import { ExitSurveyModal } from './ExitSurveyModal'
3032
import MembersExceedLimitModal from './MembersExceedLimitModal'
3133
import { SubscriptionPlanUpdateDialog } from './SubscriptionPlanUpdateDialog'
3234
import UpgradeSurveyModal from './UpgradeModal'
33-
import { MANAGED_BY } from 'lib/constants/infrastructure'
34-
import { Organization } from 'types/base'
3535

3636
const getPartnerManagedResourceCta = (selectedOrganization: Organization) => {
3737
if (selectedOrganization.managed_by === MANAGED_BY.VERCEL_MARKETPLACE) {
@@ -64,8 +64,8 @@ const PlanUpdateSidePanel = () => {
6464
PermissionAction.BILLING_WRITE,
6565
'stripe.subscriptions'
6666
)
67-
const { data: allProjects } = useProjectsQuery()
68-
const orgProjects = (allProjects || []).filter(
67+
const { data: projectsData } = useProjectsQuery()
68+
const orgProjects = (projectsData?.projects ?? []).filter(
6969
(it) => it.organization_id === selectedOrganization?.id
7070
)
7171

apps/studio/components/interfaces/Organization/CloudMarketplace/AwsMarketplaceLinkExistingOrg.tsx

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
import { zodResolver } from '@hookform/resolvers/zod'
2+
import { RadioGroupCard, RadioGroupCardItem } from '@ui/components/radio-group-card'
3+
import { cn } from '@ui/lib/utils'
4+
import { Boxes, ChevronRight } from 'lucide-react'
5+
import Link from 'next/link'
6+
import { useRouter } from 'next/router'
7+
import { useMemo, useState } from 'react'
8+
import { SubmitHandler, useForm } from 'react-hook-form'
9+
import { toast } from 'sonner'
110
import {
211
Button,
312
Collapsible_Shadcn_,
@@ -7,31 +16,22 @@ import {
716
FormField_Shadcn_,
817
Skeleton,
918
} from 'ui'
10-
import { RadioGroupCard, RadioGroupCardItem } from '@ui/components/radio-group-card'
1119
import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout'
12-
import { cn } from '@ui/lib/utils'
13-
import { ActionCard } from '../../../ui/ActionCard'
14-
import { Boxes, ChevronRight } from 'lucide-react'
20+
import { z } from 'zod'
21+
import { useOrganizationLinkAwsMarketplaceMutation } from '../../../../data/organizations/organization-link-aws-marketplace-mutation'
22+
import { useProjectsQuery } from '../../../../data/projects/projects-query'
23+
import { Organization } from '../../../../types'
1524
import {
1625
ScaffoldSection,
1726
ScaffoldSectionContent,
1827
ScaffoldSectionDetail,
1928
} from '../../../layouts/Scaffold'
29+
import { ActionCard } from '../../../ui/ActionCard'
2030
import { ButtonTooltip } from '../../../ui/ButtonTooltip'
21-
import { z } from 'zod'
22-
import { SubmitHandler, useForm } from 'react-hook-form'
23-
import { zodResolver } from '@hookform/resolvers/zod'
24-
import { useMemo, useState } from 'react'
25-
import { Organization } from '../../../../types'
26-
import { useProjectsQuery } from '../../../../data/projects/projects-query'
27-
import { useOrganizationLinkAwsMarketplaceMutation } from '../../../../data/organizations/organization-link-aws-marketplace-mutation'
28-
import { toast } from 'sonner'
29-
import AwsMarketplaceOnboardingSuccessModal from './AwsMarketplaceOnboardingSuccessModal'
30-
import NewAwsMarketplaceOrgModal from './NewAwsMarketplaceOrgModal'
31-
import { useRouter } from 'next/router'
3231
import AwsMarketplaceAutoRenewalWarning from './AwsMarketplaceAutoRenewalWarning'
32+
import AwsMarketplaceOnboardingSuccessModal from './AwsMarketplaceOnboardingSuccessModal'
3333
import { CloudMarketplaceOnboardingInfo } from './cloud-marketplace-query'
34-
import Link from 'next/link'
34+
import NewAwsMarketplaceOrgModal from './NewAwsMarketplaceOrgModal'
3535

3636
interface Props {
3737
organizations?: Organization[] | undefined
@@ -92,7 +92,8 @@ const AwsMarketplaceLinkExistingOrg = ({
9292
return { orgsLinkable: linkable, orgsNotLinkable: notLinkable }
9393
}, [sortedOrganizations, onboardingInfo?.organization_linking_eligibility])
9494

95-
const { data: projects = [] } = useProjectsQuery()
95+
const { data } = useProjectsQuery()
96+
const projects = data?.projects ?? []
9697

9798
const [isNotLinkableOrgListOpen, setIsNotLinkableOrgListOpen] = useState(false)
9899
const [orgLinkedSuccessfully, setOrgLinkedSuccessfully] = useState(false)

0 commit comments

Comments
 (0)