Highly ambitious ATProtocol AppView service and sdks
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

fix passing of hasSliceAccess on sync, oauth, and settings pages

+30 -25
+1
frontend/src/features/slices/oauth/handlers.tsx
··· 311 311 clients={clientsWithDetails} 312 312 currentUser={authContext.currentUser} 313 313 error={errorMessage} 314 + hasSliceAccess={context.sliceContext?.hasAccess} 314 315 />, 315 316 ); 316 317 }
+3
frontend/src/features/slices/oauth/templates/SliceOAuthPage.tsx
··· 20 20 currentUser?: AuthenticatedUser; 21 21 error?: string | null; 22 22 success?: string | null; 23 + hasSliceAccess?: boolean; 23 24 } 24 25 25 26 export function SliceOAuthPage({ ··· 29 30 currentUser, 30 31 error = null, 31 32 success = null, 33 + hasSliceAccess, 32 34 }: SliceOAuthPageProps) { 33 35 return ( 34 36 <SlicePage ··· 36 38 sliceId={sliceId} 37 39 currentTab="oauth" 38 40 currentUser={currentUser} 41 + hasSliceAccess={hasSliceAccess} 39 42 title={`${slice.name} - OAuth Clients`} 40 43 > 41 44 {success && (
+1
frontend/src/features/slices/settings/handlers.tsx
··· 41 41 updated={updated === "true"} 42 42 error={error} 43 43 currentUser={authContext.currentUser} 44 + hasSliceAccess={context.sliceContext?.hasAccess} 44 45 />, 45 46 ); 46 47 }
+3
frontend/src/features/slices/settings/templates/SliceSettings.tsx
··· 10 10 updated?: boolean; 11 11 error?: string | null; 12 12 currentUser?: AuthenticatedUser; 13 + hasSliceAccess?: boolean; 13 14 } 14 15 15 16 export function SliceSettings({ ··· 18 19 updated = false, 19 20 error = null, 20 21 currentUser, 22 + hasSliceAccess, 21 23 }: SliceSettingsProps) { 22 24 return ( 23 25 <SlicePage ··· 25 27 sliceId={sliceId} 26 28 currentTab="settings" 27 29 currentUser={currentUser} 30 + hasSliceAccess={hasSliceAccess} 28 31 title={`${slice.name} - Settings`} 29 32 > 30 33 {/* Success Message */}
+19 -21
frontend/src/features/slices/sync/handlers.tsx
··· 20 20 21 21 async function handleSliceSync( 22 22 req: Request, 23 - params?: URLPatternResult, 23 + params?: URLPatternResult 24 24 ): Promise<Response> { 25 25 const context = await withAuth(req); 26 26 const authResponse = requireAuth(context); ··· 59 59 <SyncResult 60 60 success={false} 61 61 error="Please specify at least one collection (primary or external) to sync" 62 - />, 62 + /> 63 63 ); 64 64 } 65 65 66 66 const sliceClient = getSliceClient(context, sliceId); 67 67 const syncJobResponse = await sliceClient.network.slices.slice.startSync({ 68 68 collections: collections.length > 0 ? collections : undefined, 69 - externalCollections: externalCollections.length > 0 70 - ? externalCollections 71 - : undefined, 69 + externalCollections: 70 + externalCollections.length > 0 ? externalCollections : undefined, 72 71 repos: repos.length > 0 ? repos : undefined, 73 72 }); 74 73 ··· 88 87 success={false} 89 88 message={syncJobResponse.message} 90 89 error={syncJobResponse.message} 91 - />, 90 + /> 92 91 ); 93 92 } 94 93 } catch (error) { ··· 100 99 101 100 async function handleJobHistory( 102 101 req: Request, 103 - params?: URLPatternResult, 102 + params?: URLPatternResult 104 103 ): Promise<Response> { 105 104 const context = await withAuth(req); 106 105 const authResponse = requireAuth(context); ··· 111 110 if (!sliceId) { 112 111 return renderHTML( 113 112 <div className="p-8 text-center text-red-600">Invalid slice ID</div>, 114 - { status: 400 }, 113 + { status: 400 } 115 114 ); 116 115 } 117 116 ··· 133 132 jobs={jobsResponse || []} 134 133 sliceId={sliceId} 135 134 handle={handle || undefined} 136 - />, 135 + /> 137 136 ); 138 137 } catch (error) { 139 138 console.error("Failed to fetch job history:", error); 140 139 return renderHTML( 141 140 <div className="p-8 text-center text-red-600"> 142 141 Failed to load job history 143 - </div>, 142 + </div> 144 143 ); 145 144 } 146 145 } 147 146 148 147 async function handleSliceSyncPage( 149 148 req: Request, 150 - params?: URLPatternResult, 149 + params?: URLPatternResult 151 150 ): Promise<Response> { 152 151 const authContext = await withAuth(req); 153 152 const sliceParams = extractSliceParams(params); ··· 159 158 const context = await withSliceAccess( 160 159 authContext, 161 160 sliceParams.handle, 162 - sliceParams.sliceId, 161 + sliceParams.sliceId 163 162 ); 164 163 const accessError = requireSliceAccess(context); 165 164 if (accessError) return accessError; ··· 170 169 171 170 // Get all lexicons and filter by record types 172 171 try { 173 - const lexiconsResponse = await sliceClient.network.slices.lexicon 174 - .getRecords(); 172 + const lexiconsResponse = 173 + await sliceClient.network.slices.lexicon.getRecords(); 175 174 const recordLexicons = lexiconsResponse.records.filter((lexicon) => { 176 175 try { 177 176 const definitions = JSON.parse(lexicon.value.definitions); ··· 200 199 slice={context.sliceContext!.slice!} 201 200 sliceId={sliceParams.sliceId} 202 201 currentUser={authContext.currentUser} 203 - collections={collections} 204 - externalCollections={externalCollections} 205 - />, 202 + hasSliceAccess={context.sliceContext?.hasAccess} 203 + /> 206 204 ); 207 205 } 208 206 209 207 async function handleShowSyncModal( 210 208 req: Request, 211 - params?: URLPatternResult, 209 + params?: URLPatternResult 212 210 ): Promise<Response> { 213 211 const context = await withAuth(req); 214 212 const authResponse = requireAuth(context); ··· 233 231 234 232 // Get all lexicons and filter by record types 235 233 try { 236 - const lexiconsResponse = await sliceClient.network.slices.lexicon 237 - .getRecords(); 234 + const lexiconsResponse = 235 + await sliceClient.network.slices.lexicon.getRecords(); 238 236 const recordLexicons = lexiconsResponse.records.filter((lexicon) => { 239 237 try { 240 238 const definitions = JSON.parse(lexicon.value.definitions); ··· 261 259 sliceId={sliceId} 262 260 collections={collections} 263 261 externalCollections={externalCollections} 264 - />, 262 + /> 265 263 ); 266 264 } catch (error) { 267 265 console.error("Error loading sync modal:", error);
+3 -4
frontend/src/features/slices/sync/templates/SliceSyncPage.tsx
··· 9 9 slice: NetworkSlicesSliceDefsSliceView; 10 10 sliceId: string; 11 11 currentUser?: AuthenticatedUser; 12 - collections?: string[]; 13 - externalCollections?: string[]; 12 + hasSliceAccess?: boolean; 14 13 } 15 14 16 15 export function SliceSyncPage({ 17 16 slice, 18 17 sliceId, 19 18 currentUser, 20 - collections = [], 21 - externalCollections = [], 19 + hasSliceAccess, 22 20 }: SliceSyncPageProps) { 23 21 return ( 24 22 <SlicePage ··· 26 24 sliceId={sliceId} 27 25 currentTab="sync" 28 26 currentUser={currentUser} 27 + hasSliceAccess={hasSliceAccess} 29 28 title={`${slice.name} - Sync`} 30 29 > 31 30 <div className="bg-white border border-zinc-200">