Skip to content

Commit 03afde2

Browse files
committed
fix(org): keep staging's shared modules and revert only the redesigned views
Hooks, contracts, key factories and lib helpers stay at staging, and the legacy view adapts to them. Jama and Flow reconnect through the saved-credential modal and disconnect through Search. Exports only the new views used are unexported or deleted, and the e2e script returns to the legacy view's selectors.
1 parent b5732ec commit 03afde2

43 files changed

Lines changed: 388 additions & 559 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎apps/sim/app/_shell/providers/get-query-client.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { isServer, QueryClient } from '@tanstack/react-query'
22
import { isDesktopApp } from '@/lib/desktop'
33

4-
export function makeQueryClient() {
4+
function makeQueryClient() {
55
return new QueryClient({
66
defaultOptions: {
77
queries: {

‎apps/sim/app/o/[organizationId]/components/organization-sidebar/components/organization-header/organization-header.tsx‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import { useRouter } from 'next/navigation'
1818
import { IdentityTile } from '@/components/identity-tile/identity-tile'
1919
import { getOrganizationSettingsHref } from '@/components/settings/navigation'
2020
import { SettingsGuardedLink } from '@/components/settings/settings-guarded-link'
21-
import type { OrganizationSurfaceOrganization } from '@/lib/organizations/surface'
21+
import type { OrganizationSurfaceContext } from '@/lib/organizations/surface'
2222
import { LOGO_ACCEPT_ATTRIBUTE } from '@/lib/uploads/client/logo-file'
2323
import { InviteModal } from '@/app/workspace/[workspaceId]/components/invite-modal'
2424
import { SidebarRenameRow } from '@/app/workspace/[workspaceId]/w/components/sidebar/components/sidebar-rename-row'
@@ -32,7 +32,7 @@ function getOrganizationInitial(name: string): string {
3232
}
3333

3434
interface OrganizationHeaderProps {
35-
organization: OrganizationSurfaceOrganization
35+
organization: OrganizationSurfaceContext['organization']
3636
/** Organization admins may change its logo and name. */
3737
canEditIdentity: boolean
3838
canInviteMembers: boolean
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
11
export type { OrganizationChat } from './use-organization-chats'
22
export { useOrganizationChats } from './use-organization-chats'
3-
export { useOrganizationWorkspaces } from './use-organization-workspaces'

‎apps/sim/app/o/[organizationId]/components/search-landing-history.tsx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export function SearchLandingHistory({
2121
onSearch,
2222
children,
2323
}: SearchLandingHistoryProps) {
24-
const history = useSearchHistory(organizationId)
24+
const history = useSearchHistory(organizationId, userId)
2525
const clear = useClearSearchHistory(organizationId, userId)
2626
const [selection, setSelection] = useState<'sources' | 'queries' | null>(null)
2727
const data = history.isError ? undefined : history.data

‎apps/sim/app/o/[organizationId]/integrations/account-connection-actions.tsx‎

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,14 @@ import { ChipConfirmModal, ChipModalError } from '@sim/emcn'
55
import { type SettingsAction, SettingsActionChips } from '@/components/settings/settings-header'
66
import type { ViewerSearchSourceAccount } from '@/lib/api/contracts/knowledge/connectors'
77
import { useDisconnectPersonalOrganizationAccount } from '@/hooks/queries/organization-accounts'
8+
import { useRemovePersonalSearchCredential } from '@/hooks/queries/personal-search-integrations'
89

910
interface AccountConnectionActionsProps {
1011
organizationId: string
1112
integrationName: string
1213
account?: ViewerSearchSourceAccount
14+
/** A saved credential (Jama, Flow) is removed through Search, not the managed-account route. */
15+
saved?: boolean
1316
onConnect?: () => void
1417
connectLabel: 'Connect' | 'Add account'
1518
onReconnect: () => void
@@ -23,14 +26,17 @@ export function AccountConnectionActions({
2326
organizationId,
2427
integrationName,
2528
account,
29+
saved = false,
2630
onConnect,
2731
connectLabel,
2832
onReconnect,
2933
canReconnect,
3034
canConnect,
3135
connectionPending,
3236
}: AccountConnectionActionsProps) {
33-
const disconnect = useDisconnectPersonalOrganizationAccount()
37+
const disconnectManaged = useDisconnectPersonalOrganizationAccount()
38+
const removeSaved = useRemovePersonalSearchCredential()
39+
const disconnect = saved ? removeSaved : disconnectManaged
3440
const [confirming, setConfirming] = useState(false)
3541
const pending = connectionPending || disconnect.isPending
3642
const actions: SettingsAction[] = []
@@ -78,11 +84,12 @@ export function AccountConnectionActions({
7884
pendingLabel: 'Disconnecting',
7985
pending: disconnect.isPending,
8086
disabled: disconnect.isPending,
81-
onClick: () =>
82-
disconnect.mutate(
83-
{ credentialId: account.credentialId, organizationId },
84-
{ onSuccess: () => setConfirming(false) }
85-
),
87+
onClick: () => {
88+
const body = { credentialId: account.credentialId, organizationId }
89+
const onSuccess = () => setConfirming(false)
90+
if (saved) removeSaved.mutate(body, { onSuccess })
91+
else disconnectManaged.mutate(body, { onSuccess })
92+
},
8693
}}
8794
>
8895
<ChipModalError>{disconnect.error?.message}</ChipModalError>

‎apps/sim/app/o/[organizationId]/integrations/integration-detail.tsx‎

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22

33
import { type ReactNode, useState } from 'react'
44
import { toast } from '@sim/emcn'
5+
import type { MemberIntegration } from '@/lib/credential-groups/member-integrations'
6+
import { liveSearchSavedMemberProvider } from '@/lib/sim-search/live/source-catalog'
57
import { AccountConnectionActions } from '@/app/o/[organizationId]/integrations/account-connection-actions'
68
import { AccountToolPermissionsContent } from '@/app/o/[organizationId]/integrations/accounts/[credentialId]/tool-permissions'
7-
import type { MemberIntegration } from '@/app/o/[organizationId]/integrations/utils'
89
import {
910
CredentialDetailHeading,
1011
CredentialDetailLayout,
@@ -32,6 +33,13 @@ interface IntegrationDetailProps {
3233
children?: ReactNode
3334
}
3435

36+
function savedProviderIdFor(provider: string) {
37+
const providerId = liveSearchSavedMemberProvider(provider)
38+
return providerId === 'jama-service-account' || providerId === 'flow-service-account'
39+
? providerId
40+
: null
41+
}
42+
3543
/** The selected account owns every permission and connection action in this view. */
3644
export function IntegrationDetail({
3745
organizationId,
@@ -50,7 +58,12 @@ export function IntegrationDetail({
5058
? integration.accounts[0]
5159
: undefined
5260
const target = integration.connectionTarget
53-
const [savedOpen, setSavedOpen] = useState(false)
61+
const savedProvider = savedProviderIdFor(integration.provider)
62+
const [savedConnection, setSavedConnection] = useState<{
63+
providerId: 'jama-service-account' | 'flow-service-account'
64+
credentialId?: string
65+
displayName?: string
66+
} | null>(null)
5467
return (
5568
<CredentialDetailLayout
5669
back={back}
@@ -61,16 +74,24 @@ export function IntegrationDetail({
6174
organizationId={organizationId}
6275
integrationName={integration.name}
6376
account={selected}
77+
saved={Boolean(savedProvider)}
6478
connectLabel={integration.accounts.length ? 'Add account' : 'Connect'}
6579
onConnect={
6680
!target
6781
? undefined
6882
: 'savedProviderId' in target
69-
? () => setSavedOpen(true)
83+
? () => savedProvider && setSavedConnection({ providerId: savedProvider })
7084
: () => connect.mutate({ organizationId, ...target }, { onError })
7185
}
7286
onReconnect={() => {
73-
if (selected) reconnect.mutate(selected.credentialId, { onError })
87+
if (!selected) return
88+
if (savedProvider)
89+
setSavedConnection({
90+
providerId: savedProvider,
91+
credentialId: selected.credentialId,
92+
displayName: selected.displayName,
93+
})
94+
else reconnect.mutate(selected.credentialId, { onError })
7495
}}
7596
connectionPending={connect.isPending || reconnect.isPending}
7697
canConnect={integration.ready}
@@ -127,12 +148,12 @@ export function IntegrationDetail({
127148
credentialId={selected.credentialId}
128149
/>
129150
)}
130-
{savedOpen && target && 'savedProviderId' in target && (
151+
{savedConnection && (
131152
<SavedSearchCredentialModal
132153
organizationId={organizationId}
133-
connection={{ providerId: target.savedProviderId }}
134-
onClose={() => setSavedOpen(false)}
135-
onCreated={() => setSavedOpen(false)}
154+
connection={savedConnection}
155+
onClose={() => setSavedConnection(null)}
156+
onCreated={() => setSavedConnection(null)}
136157
/>
137158
)}
138159
</CredentialDetailLayout>

‎apps/sim/app/o/[organizationId]/integrations/live-member-integrations.tsx‎

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,15 @@ import type { ReactNode } from 'react'
44
import { ChipLink } from '@sim/emcn'
55
import { ArrowLeft } from '@sim/emcn/icons'
66
import { useQueryStates } from 'nuqs'
7+
import { memberIntegrationEntries } from '@/lib/credential-groups/member-integrations'
78
import { organizationRoutes } from '@/lib/navigation/paths'
89
import { OrganizationPage } from '@/app/o/[organizationId]/components/organization-page'
910
import { IntegrationDetail } from '@/app/o/[organizationId]/integrations/integration-detail'
1011
import {
1112
integrationViewParsers,
1213
serializeIntegrationView,
1314
} from '@/app/o/[organizationId]/integrations/search-params'
14-
import {
15-
memberIntegrationEntries,
16-
memberIntegrationStatus,
17-
} from '@/app/o/[organizationId]/integrations/utils'
15+
import { memberIntegrationStatus } from '@/app/o/[organizationId]/integrations/utils'
1816
import {
1917
GenericSecretSourceIcon,
2018
GenericSecretSourceRow,

0 commit comments

Comments
 (0)