Skip to content

Commit 8cdffdf

Browse files
committed
Fixed tabs an provider linking
1 parent 7963061 commit 8cdffdf

File tree

4 files changed

+38
-23
lines changed

4 files changed

+38
-23
lines changed

src/serving/ServingPage.tsx

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -38,23 +38,6 @@ export const ServingPage = () => {
3838
},
3939
});
4040

41-
const selectedMinistry = ministries.data?.find((g) => g.id === selectedMinistryId);
42-
43-
// Auto-select first accessible ministry when data loads
44-
React.useEffect(() => {
45-
if (ministries.data && ministries.data.length > 0 && !selectedMinistryId) {
46-
const accessibleMinistry = ministries.data.find((g) => {
47-
const members = ArrayHelper.getAll(groupMembers.data || [], "groupId", g.id);
48-
return members.length === 0 || ArrayHelper.getOne(members, "personId", context.person?.id) !== null || UserHelper.checkAccess(Permissions.membershipApi.roles.edit);
49-
});
50-
if (accessibleMinistry) {
51-
setSelectedMinistryId(accessibleMinistry.id);
52-
} else if (ministries.data.length > 0) {
53-
setSelectedMinistryId(ministries.data[0].id);
54-
}
55-
}
56-
}, [ministries.data, groupMembers.data, selectedMinistryId, context.person?.id]);
57-
5841
const handleShowAdd = () => setShowAdd(true);
5942

6043
const handleAddUpdated = () => {
@@ -76,6 +59,18 @@ export const ServingPage = () => {
7659
return isMember;
7760
});
7861

62+
const selectedMinistry = groups.find((g) => g.id === selectedMinistryId);
63+
64+
// Auto-select first ministry from filtered groups, or reset if current selection is not in filtered list
65+
React.useEffect(() => {
66+
if (groups.length > 0) {
67+
const isCurrentSelectionValid = groups.some(g => g.id === selectedMinistryId);
68+
if (!selectedMinistryId || !isCurrentSelectionValid) {
69+
setSelectedMinistryId(groups[0].id);
70+
}
71+
}
72+
}, [groups, selectedMinistryId]);
73+
7974
// Show add ministry form
8075
if (showAdd) {
8176
return (
@@ -200,7 +195,7 @@ export const ServingPage = () => {
200195
<TeamList ministry={selectedMinistry} />
201196
</Grid>
202197
<Grid size={{ xs: 12 }}>
203-
<ContentProviderAuthManager ministryId={selectedMinistry.id} />
198+
<ContentProviderAuthManager key={selectedMinistry.id} ministryId={selectedMinistry.id} />
204199
</Grid>
205200
</Grid>
206201
)}

src/serving/components/ActionSelector.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ export const ActionSelector: React.FC<Props> = ({ open, onClose, onSelect, conte
109109
// Mode: "associated" shows actions from contentPath, "browse" allows navigation
110110
const [mode, setMode] = useState<"associated" | "browse">(contentPath ? "associated" : "browse");
111111

112-
const availableProviders = useMemo(() => getAvailableProviders(), []);
112+
const availableProviders = useMemo(() => getAvailableProviders(["lessonschurch", "signpresenter", "bibleproject"]), []);
113113

114114
const currentProviderInfo = useMemo(() => {
115115
const pid = mode === "associated" ? (providerId || "lessonschurch") : selectedProviderId;

src/serving/components/ContentProviderAuthManager.tsx

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ interface Props {
1414
}
1515

1616
export const ContentProviderAuthManager: React.FC<Props> = ({ ministryId, onAuthChange }) => {
17+
console.log("[ContentProviderAuthManager] Render with ministryId:", ministryId);
18+
1719
const [linkedProviders, setLinkedProviders] = useState<ContentProviderAuthInterface[]>([]);
1820
const [loading, setLoading] = useState(true);
1921
const [showProviderSelector, setShowProviderSelector] = useState(false);
@@ -28,10 +30,18 @@ export const ContentProviderAuthManager: React.FC<Props> = ({ ministryId, onAuth
2830
const [codeVerifier, setCodeVerifier] = useState<string | null>(null);
2931
const [pkceWindow, setPkceWindow] = useState<Window | null>(null);
3032

31-
const availableProviders = useMemo(() => getAvailableProviders(["lessonschurch", "signpresenter", "bibleproject"]), []);
33+
const availableProviders = useMemo(() => {
34+
const providers = getAvailableProviders(["lessonschurch", "signpresenter", "bibleproject"]);
35+
console.log("[ContentProviderAuthManager] availableProviders:", providers);
36+
return providers;
37+
}, []);
3238

3339
// Get implemented providers
34-
const authProviders = useMemo(() => availableProviders.filter(p => p.implemented), [availableProviders]);
40+
const authProviders = useMemo(() => {
41+
const implemented = availableProviders.filter(p => p.implemented);
42+
console.log("[ContentProviderAuthManager] authProviders (implemented):", implemented);
43+
return implemented;
44+
}, [availableProviders]);
3545

3646
// Providers not yet linked (for modal)
3747
const unlinkableProviders = useMemo(() => {
@@ -40,24 +50,30 @@ export const ContentProviderAuthManager: React.FC<Props> = ({ ministryId, onAuth
4050
}, [authProviders, linkedProviders]);
4151

4252
const loadLinkedProviders = useCallback(async () => {
53+
console.log("[ContentProviderAuthManager] loadLinkedProviders called, ministryId:", ministryId);
4354
if (!ministryId) {
55+
console.log("[ContentProviderAuthManager] No ministryId, clearing providers");
4456
setLinkedProviders([]);
4557
setLoading(false);
4658
return;
4759
}
4860
try {
4961
setLoading(true);
62+
console.log("[ContentProviderAuthManager] Fetching linked providers...");
5063
const linked = await ContentProviderAuthHelper.getLinkedProviders(ministryId);
64+
console.log("[ContentProviderAuthManager] API returned:", linked);
5165
setLinkedProviders(linked || []);
5266
} catch (error) {
53-
console.error("Error loading linked providers:", error);
67+
console.error("[ContentProviderAuthManager] Error loading linked providers:", error);
5468
setLinkedProviders([]);
5569
} finally {
70+
console.log("[ContentProviderAuthManager] Setting loading to false");
5671
setLoading(false);
5772
}
5873
}, [ministryId]);
5974

6075
useEffect(() => {
76+
console.log("[ContentProviderAuthManager] useEffect triggered, calling loadLinkedProviders");
6177
loadLinkedProviders();
6278
}, [loadLinkedProviders]);
6379

@@ -342,7 +358,10 @@ export const ContentProviderAuthManager: React.FC<Props> = ({ ministryId, onAuth
342358
return availableProviders.find(p => p.id === authProviderId) || null;
343359
}, [authProviderId, availableProviders]);
344360

361+
console.log("[ContentProviderAuthManager] Render state - loading:", loading, "authProviders.length:", authProviders.length, "linkedProviders:", linkedProviders);
362+
345363
if (loading) {
364+
console.log("[ContentProviderAuthManager] Showing loading spinner");
346365
return (
347366
<Box sx={{ display: "flex", justifyContent: "center", py: 4 }}>
348367
<CircularProgress />
@@ -351,6 +370,7 @@ export const ContentProviderAuthManager: React.FC<Props> = ({ ministryId, onAuth
351370
}
352371

353372
if (authProviders.length === 0) {
373+
console.log("[ContentProviderAuthManager] No authProviders, showing empty message");
354374
return (
355375
<Typography color="text.secondary">
356376
{Locale.label("plans.contentProviderAuth.noProvidersAvailable") || "No content providers available that require authentication."}

src/serving/components/LessonSelector.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ export const LessonSelector: React.FC<Props> = ({ open, onClose, onSelect, retur
4343
return getProvider(selectedProviderId);
4444
}, [selectedProviderId]);
4545

46-
const availableProviders = useMemo(() => getAvailableProviders(), []);
46+
const availableProviders = useMemo(() => getAvailableProviders(["lessonschurch", "signpresenter", "bibleproject"]), []);
4747

4848
// Path-based navigation
4949
const [currentPath, setCurrentPath] = useState<string>("");

0 commit comments

Comments
 (0)