From 4ad5c855d3b6be0e3ef73684804cfec8f3303f19 Mon Sep 17 00:00:00 2001 From: Gunnar Velle Date: Fri, 10 Nov 2023 12:22:06 +0100 Subject: [PATCH 1/5] Fetches config from backend in stead of config. --- src/containers/MyNdla/MyNdlaPage.tsx | 11 ++++++++--- src/containers/MyNdla/configQueries.ts | 25 +++++++++++++++++++++++++ src/graphqlTypes.ts | 12 ++++++++++++ src/schema.graphql | 1 + src/util/apiHelpers.ts | 10 ++++++++++ 5 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 src/containers/MyNdla/configQueries.ts diff --git a/src/containers/MyNdla/MyNdlaPage.tsx b/src/containers/MyNdla/MyNdlaPage.tsx index d4258bfb37..be5a13ba9a 100644 --- a/src/containers/MyNdla/MyNdlaPage.tsx +++ b/src/containers/MyNdla/MyNdlaPage.tsx @@ -6,7 +6,7 @@ * */ -import { useContext, useEffect } from 'react'; +import { useContext, useEffect, useMemo } from 'react'; import { useLocation } from 'react-router-dom'; import { Trans, useTranslation } from 'react-i18next'; import keyBy from 'lodash/keyBy'; @@ -28,7 +28,6 @@ import { ModalTrigger, ModalContent, } from '@ndla/modal'; -import config from '../../config'; import InfoPart, { InfoPartIcon, InfoPartText } from './InfoSection'; import { AuthContext } from '../../components/AuthenticationContext'; import { @@ -44,6 +43,7 @@ import { useBaseName } from '../../components/BaseNameContext'; import { useDeletePersonalData } from './userMutations'; import { getAllDimensions } from '../../util/trackingUtil'; import { UserInfo } from './components/UserInfo'; +import { useAiOrgs } from './configQueries'; const ShareIcon = InfoPartIcon.withComponent(Share); const HeartOutlineIcon = InfoPartIcon.withComponent(HeartOutline); @@ -116,6 +116,7 @@ const MyNdlaPage = () => { const { trackPageView } = useTracker(); const { deletePersonalData } = useDeletePersonalData(); const { allFolderResources } = useRecentlyUsedResources(); + const { aiEnabledOrgs } = useAiOrgs(); const { data: metaData, loading } = useFolderResourceMetaSearch( allFolderResources?.map((r) => ({ id: r.resourceId, @@ -146,6 +147,10 @@ const MyNdlaPage = () => { const keyedData = keyBy(metaData ?? [], (r) => `${r.type}${r.id}`); const aiLang = i18n.language === 'nn' ? 'nn' : ''; + const allowedAiOrgs = useMemo(() => { + if (!aiEnabledOrgs?.value) return []; + return aiEnabledOrgs.value; + }, [aiEnabledOrgs]); return ( @@ -155,7 +160,7 @@ const MyNdlaPage = () => { {t('myNdla.myPage.welcome')} - {config.allowedAIOrgs.includes(user?.baseOrg?.displayName ?? '') && ( + {allowedAiOrgs.includes(user?.baseOrg?.displayName ?? '') && ( { + const { data } = useGraphQuery(configQuery); + return { aiEnabledOrgs: data }; +}; diff --git a/src/graphqlTypes.ts b/src/graphqlTypes.ts index 2ac4043c15..d42cf426f7 100644 --- a/src/graphqlTypes.ts +++ b/src/graphqlTypes.ts @@ -1067,6 +1067,7 @@ export type GQLProgrammePage = { export type GQLQuery = { __typename?: 'Query'; + aiEnabledOrgs?: Maybe; alerts?: Maybe>>; allFolderResources: Array; arenaCategories: Array; @@ -2665,6 +2666,17 @@ export type GQLArenaUserQuery = { arenaUser?: { __typename?: 'ArenaUser' } & GQLArenaUserQueryFragmentFragment; }; +export type GQLAiOrganizationsQueryVariables = Exact<{ [key: string]: never }>; + +export type GQLAiOrganizationsQuery = { + __typename?: 'Query'; + aiEnabledOrgs?: { + __typename?: 'ConfigMetaStringList'; + key: string; + value: Array; + }; +}; + export type GQLFolderResourceFragmentFragment = { __typename: 'FolderResource'; resourceId: string; diff --git a/src/schema.graphql b/src/schema.graphql index 3757297391..f2bce948ef 100644 --- a/src/schema.graphql +++ b/src/schema.graphql @@ -890,6 +890,7 @@ type ProgrammePage { } type Query { + aiEnabledOrgs: ConfigMetaStringList alerts: [UptimeAlert] allFolderResources(size: Int): [FolderResource!]! arenaCategories: [ArenaCategory!]! diff --git a/src/util/apiHelpers.ts b/src/util/apiHelpers.ts index 2be5f695fc..6d9d73a6f6 100644 --- a/src/util/apiHelpers.ts +++ b/src/util/apiHelpers.ts @@ -236,6 +236,16 @@ const typePolicies: TypePolicies = { MyNdlaPersonalData: { keyFields: (obj) => obj.__typename, }, + ConfigMetaStringList: { + keyFields: ['key'], + fields: { + value: { + merge(existing = [], incoming: string[]) { + return [...existing, ...incoming]; + }, + }, + }, + }, }; function getCache() { From 788459e57617d6c3d14b9aab67b18a3a4ae2b6a7 Mon Sep 17 00:00:00 2001 From: Gunnar Velle Date: Mon, 13 Nov 2023 07:11:32 +0100 Subject: [PATCH 2/5] Make fetching data work --- src/containers/MyNdla/MyNdlaPage.tsx | 9 +++++---- src/containers/MyNdla/configQueries.ts | 2 +- src/util/apiHelpers.ts | 10 +++------- 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/containers/MyNdla/MyNdlaPage.tsx b/src/containers/MyNdla/MyNdlaPage.tsx index be5a13ba9a..ca7a232350 100644 --- a/src/containers/MyNdla/MyNdlaPage.tsx +++ b/src/containers/MyNdla/MyNdlaPage.tsx @@ -116,7 +116,7 @@ const MyNdlaPage = () => { const { trackPageView } = useTracker(); const { deletePersonalData } = useDeletePersonalData(); const { allFolderResources } = useRecentlyUsedResources(); - const { aiEnabledOrgs } = useAiOrgs(); + const { data: aiData } = useAiOrgs(); const { data: metaData, loading } = useFolderResourceMetaSearch( allFolderResources?.map((r) => ({ id: r.resourceId, @@ -147,10 +147,11 @@ const MyNdlaPage = () => { const keyedData = keyBy(metaData ?? [], (r) => `${r.type}${r.id}`); const aiLang = i18n.language === 'nn' ? 'nn' : ''; + const allowedAiOrgs = useMemo(() => { - if (!aiEnabledOrgs?.value) return []; - return aiEnabledOrgs.value; - }, [aiEnabledOrgs]); + if (!aiData?.aiEnabledOrgs?.value) return []; + return aiData?.aiEnabledOrgs?.value; + }, [aiData]); return ( diff --git a/src/containers/MyNdla/configQueries.ts b/src/containers/MyNdla/configQueries.ts index b3cf79fad1..b83f7dec1e 100644 --- a/src/containers/MyNdla/configQueries.ts +++ b/src/containers/MyNdla/configQueries.ts @@ -21,5 +21,5 @@ export const configQuery = gql` export const useAiOrgs = () => { const { data } = useGraphQuery(configQuery); - return { aiEnabledOrgs: data }; + return { data }; }; diff --git a/src/util/apiHelpers.ts b/src/util/apiHelpers.ts index 6d9d73a6f6..0b238e62f3 100644 --- a/src/util/apiHelpers.ts +++ b/src/util/apiHelpers.ts @@ -236,15 +236,11 @@ const typePolicies: TypePolicies = { MyNdlaPersonalData: { keyFields: (obj) => obj.__typename, }, + ConfigMetaBoolean: { + keyFields: ['key'], + }, ConfigMetaStringList: { keyFields: ['key'], - fields: { - value: { - merge(existing = [], incoming: string[]) { - return [...existing, ...incoming]; - }, - }, - }, }, }; From 5c31a02cc4c96fcd2ff739ffd97c4c0045c0072f Mon Sep 17 00:00:00 2001 From: Gunnar Velle Date: Mon, 13 Nov 2023 07:27:44 +0100 Subject: [PATCH 3/5] Use correct query param --- src/containers/MyNdla/configQueries.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/containers/MyNdla/configQueries.ts b/src/containers/MyNdla/configQueries.ts index b83f7dec1e..c1f81d7633 100644 --- a/src/containers/MyNdla/configQueries.ts +++ b/src/containers/MyNdla/configQueries.ts @@ -7,7 +7,7 @@ */ import { gql } from '@apollo/client'; -import { GQLConfigMetaStringList } from '../../graphqlTypes'; +import { GQLAiOrganizationsQuery } from '../../graphqlTypes'; import { useGraphQuery } from '../../util/runQueries'; export const configQuery = gql` @@ -20,6 +20,6 @@ export const configQuery = gql` `; export const useAiOrgs = () => { - const { data } = useGraphQuery(configQuery); + const { data } = useGraphQuery(configQuery); return { data }; }; From b5934d5b0b9527021f201c7d1324f230b1e52d85 Mon Sep 17 00:00:00 2001 From: Gunnar Velle Date: Mon, 13 Nov 2023 10:25:42 +0100 Subject: [PATCH 4/5] Remove config --- src/config.ts | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/src/config.ts b/src/config.ts index 2922bc8b62..2af14a0478 100644 --- a/src/config.ts +++ b/src/config.ts @@ -87,31 +87,6 @@ const logglyApiKey = (): string | undefined => { return getEnvironmentVariabel('LOGGLY_API_KEY'); }; -export const allowedAIOrgs = () => { - const defaultList = [ - 'Agder fylkeskommune', - 'Nordland fylkeskommune', - 'Rogaland fylkeskommune', - 'Troms og Finnmark fylkeskommune', - 'Trøndelag fylkeskommune', - 'Vestland fylkeskommune', - ]; - if (['local', 'dev'].includes(ndlaEnvironment)) { - return [...defaultList, 'Universitetet i Rogn']; // frank_foreleser - } - if (['test'].includes(ndlaEnvironment)) { - return [ - ...defaultList, - 'Innlandet fylkeskommune', - 'Møre og Romsdal fylkeskommune', - 'Vestfold og Telemark fylkeskommune', - 'Viken fylkeskommune', - 'Universitetet i Rogn', - ]; - } - return defaultList; -}; - export const getDefaultLocale = () => getEnvironmentVariabel('NDLA_DEFAULT_LOCALE', 'nb'); @@ -139,7 +114,6 @@ export type ConfigType = { matomoTagmanagerId: string; isVercel: boolean; monsidoToken: string; - allowedAIOrgs: string[]; }; const config: ConfigType = { @@ -175,7 +149,6 @@ const config: ConfigType = { matomoTagmanagerId: getEnvironmentVariabel('MATOMO_TAGMANAGER_ID', ''), isVercel: getEnvironmentVariabel('IS_VERCEL', false), monsidoToken: getEnvironmentVariabel('MONSIDO_TOKEN', ''), - allowedAIOrgs: allowedAIOrgs(), }; export function getUniversalConfig() { From 902f95666c2eb6c4271fa1d8d74026aa27d5026f Mon Sep 17 00:00:00 2001 From: Gunnar Velle Date: Mon, 13 Nov 2023 13:50:29 +0100 Subject: [PATCH 5/5] unneccessary ? --- src/containers/MyNdla/MyNdlaPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/containers/MyNdla/MyNdlaPage.tsx b/src/containers/MyNdla/MyNdlaPage.tsx index ca7a232350..30370d8cdc 100644 --- a/src/containers/MyNdla/MyNdlaPage.tsx +++ b/src/containers/MyNdla/MyNdlaPage.tsx @@ -150,7 +150,7 @@ const MyNdlaPage = () => { const allowedAiOrgs = useMemo(() => { if (!aiData?.aiEnabledOrgs?.value) return []; - return aiData?.aiEnabledOrgs?.value; + return aiData?.aiEnabledOrgs.value; }, [aiData]); return (