Skip to content
This repository was archived by the owner on Nov 1, 2024. It is now read-only.

Refactor/art 05 user info #298

Merged
merged 6 commits into from
Mar 28, 2024
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
use user info query
MengZhuNAV committed Mar 27, 2024
commit 711b0c62d0e1294f8a64c495f360edbcbaa8698b
7 changes: 2 additions & 5 deletions components/dataproducts/dataset/dataset.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
import { isAfter, parseISO } from 'date-fns'
import {
UserInfoDetailsQuery,
} from '../../../lib/schema/graphql'
import * as React from 'react'
import { useState } from 'react'
import EditDataset from './editDataset'
@@ -11,7 +8,7 @@ import LoaderSpinner from '../../lib/spinner'
import { Alert } from '@navikt/ds-react'

const findAccessType = (
groups: UserInfoDetailsQuery['userInfo']['groups'] | undefined,
groups: any,
dataset: any,
isOwner: boolean
) => {
@@ -29,7 +26,7 @@ const findAccessType = (
interface EntryProps {
dataproduct: any
datasetID: string
userInfo: UserInfoDetailsQuery['userInfo'] | undefined
userInfo: any
isOwner: boolean
}

6 changes: 3 additions & 3 deletions components/dataproducts/dataset/datasetSourceForm.tsx
Original file line number Diff line number Diff line change
@@ -34,8 +34,8 @@ export const DataproductSourceForm = ({
register('bigquery.table')

const teamProjects = userInfo?.gcpProjects
.filter((project) => project.group.email == team)
.map((group) => group.id)
.filter((project: any) => project.group.email == team)
.map((group: any) => group.id)

const handleNodeSelect = (e: any, node: string) => {
const [projectID, datasetID, tableID] = node.split('/')
@@ -59,7 +59,7 @@ export const DataproductSourceForm = ({
onNodeSelect={handleNodeSelect}
onNodeToggle={(x, n) => setActivePaths(n)}
>
{teamProjects?.map((projectID) => (
{teamProjects?.map((projectID: any) => (
<Project
key={projectID}
projectID={projectID}
3 changes: 1 addition & 2 deletions components/dataproducts/dataset/viewDataset.tsx
Original file line number Diff line number Diff line change
@@ -7,7 +7,6 @@ import { PluggableList } from 'react-markdown/lib'
import remarkGfm from 'remark-gfm'
import {
PiiLevel,
UserInfoDetailsQuery,
} from '../../../lib/schema/graphql'
import { backendHost } from '../../header/user'
import TagPill from '../../lib/tagPill'
@@ -27,7 +26,7 @@ interface ViewDatasetProps {
type: string
expires?: any
}
userInfo: UserInfoDetailsQuery['userInfo'] | undefined
userInfo: any
isOwner: boolean
setEdit: (value: boolean) => void
}
6 changes: 4 additions & 2 deletions components/dataproducts/newDataproductForm.tsx
Original file line number Diff line number Diff line change
@@ -129,6 +129,8 @@ export const NewDataproductForm = () => {
})
}

const gcpProjects = userInfo?.gcpProjects as any[] || []

return (
<div className="mt-8 md:w-[46rem]">
<Heading level="1" size="large">
@@ -160,11 +162,11 @@ export const NewDataproductForm = () => {
<option value="">Velg gruppe</option>
{[
...new Set(
userInfo?.gcpProjects.map(
gcpProjects.map(
({ group }: { group: { name: string } }) => (
<option
value={
userInfo?.groups.filter((g) => g.name === group.name)[0]
userInfo?.groups.filter((g:any) => g.name === group.name)[0]
.email
}
key={group.name}
8 changes: 4 additions & 4 deletions components/header/user.tsx
Original file line number Diff line number Diff line change
@@ -9,11 +9,11 @@ export const backendHost = () => {
}

export default function User() {
const userInfo = useContext(UserState)
const userOfNada = userInfo?.groups.find((gr) => gr.name === 'nada')
const userData = useContext(UserState)
const userOfNada = userData?.googleGroups.find((gr: any) => gr.name === 'nada')

const router = useRouter()
return userInfo ? (
return userData ? (
<div className="flex flex-row min-w-fit">
<Dropdown>
<Header.Button
@@ -127,7 +127,7 @@ export default function User() {
className="whitespace-nowrap hidden md:block text-base"
as={Dropdown.Toggle}
>
{userInfo.name}
{userData.name}
</Header.Button>
<Header.Button
className="md:hidden w-[48px] flex justify-center"
8 changes: 1 addition & 7 deletions components/insightProducts/editInsightProduct.tsx
Original file line number Diff line number Diff line change
@@ -17,9 +17,7 @@ import * as yup from 'yup'
import { useContext, useState } from 'react'
import TagsSelector from '../lib/tagsSelector'
import { UserState } from "../../lib/context";
import { UPDATE_INSIGHT_PRODUCT_METADATA } from '../../lib/queries/insightProducts/editInsightProduct'
import { useUpdateInsightProductMetadataMutation } from '../../lib/schema/graphql'
import { USER_INFO } from '../../lib/queries/userInfo/userInfo'

const schema = yup.object().shape({
name: yup.string().nullable().required('Skriv inn navnet på innsiktsproduktet'),
@@ -109,10 +107,6 @@ export const EditInsightProductMetadataForm = ({ id, name, description, type, li
teamID: teamID,
group: data.group,
},
refetchQueries: [
{
query: USER_INFO,
}]
}

updateInsightProductQuery(editInsightProductData).then(() => {
@@ -164,7 +158,7 @@ export const EditInsightProductMetadataForm = ({ id, name, description, type, li
control={control}
/>
<TeamkatalogenSelector
gcpGroups={userInfo?.gcpProjects.map(it => it.group.email)}
gcpGroups={userInfo?.gcpProjects.map((it: any) => it.group.email)}
register={register}
watch={watch}
errors={errors}
9 changes: 5 additions & 4 deletions components/insightProducts/newInsightProduct.tsx
Original file line number Diff line number Diff line change
@@ -126,7 +126,6 @@ export const NewInsightProductForm = () => {
CREATE_INSIGHT_PRODUCT,
{
onCompleted: (data) => {
console.log(data)
router.push("/")
},
}
@@ -153,6 +152,8 @@ export const NewInsightProductForm = () => {
})
}

const gcpProjects = userInfo?.gcpProjects as any[] || []

return (
<div className="mt-8 md:w-[46rem]">
<Heading level="1" size="large">
@@ -205,11 +206,11 @@ export const NewInsightProductForm = () => {
<option value="">Velg gruppe</option>
{[
...new Set(
userInfo?.gcpProjects.map(
gcpProjects.map(
({ group }: { group: { name: string } }) => (
<option
value={
userInfo?.groups.filter((g) => g.name === group.name)[0]
userInfo?.groups.filter((g: any) => g.name === group.name)[0]
.email
}
key={group.name}
@@ -222,7 +223,7 @@ export const NewInsightProductForm = () => {
]}
</Select>
<TeamkatalogenSelector
gcpGroups={userInfo?.gcpProjects.map(it => it.group.email)}
gcpGroups={userInfo?.gcpProjects.map((it: any) => it.group.email)}
register={register}
watch={watch}
errors={errors}
20 changes: 10 additions & 10 deletions components/lib/tagsSelector.tsx
Original file line number Diff line number Diff line change
@@ -63,35 +63,35 @@ const useBuildTagOptionsList = () => {
const userInfo = useContext(UserState)
let tagsMap = new Map(
userInfo?.dataproducts
?.flatMap((it) => it.keywords)
.map((it) => [it, 100000])
?.flatMap((it: any) => it.keywords)
.map((it: any) => [it, 100000])
)
if (!error) {
data?.keywords.forEach((it) =>
data?.keywords.forEach((it: any) =>
tagsMap.set(it.keyword, it.count + (tagsMap.get(it.keyword) || 0))
)
}
return Array.from(tagsMap.entries())
.sort((l, r) => r[1] - l[1])
.sort((l: any, r: any) => r[1] - l[1])
.map((it) => it[0])
}

export const TagsSelector = ({ onAdd, onDelete, tags }: TagsSelectorProps) => {
let tagOptions = useBuildTagOptionsList()
const userInfo = useContext(UserState)
const teamNames = userInfo?.allGoogleGroups?.map(
(it) => it.name.split('@')[0]
(it: any) => it.name.split('@')[0]
)

const tagsLikeTeamName = tags.filter((it) =>
teamNames?.find((tn) => tn.toLocaleLowerCase() === it.toLocaleLowerCase())
teamNames?.find((tn: any) => tn.toLocaleLowerCase() === it.toLocaleLowerCase())
)
const addNewTag = (text: string) => {
//if there is a similar tag in the list, use it as the text
const newTag = (
tagOptions.find(
(t) => t.toLocaleLowerCase() === text.toLocaleLowerCase()
) ?? text
(t: any) => t.toLocaleLowerCase() === text.toLocaleLowerCase()
) as string ?? text
).trim()
onAdd(newTag)
}
@@ -160,8 +160,8 @@ export const TagsSelector = ({ onAdd, onDelete, tags }: TagsSelectorProps) => {
<CreatableSelect
isMulti
options={tagOptions.map((it) => ({
value: it,
label: it,
value: it as string,
label: it as string,
}))}
styles={styles}
theme={theme}
2 changes: 1 addition & 1 deletion components/productArea/content.tsx
Original file line number Diff line number Diff line change
@@ -112,7 +112,7 @@ const ProductAreaContent = ({ currentItem, currentTab, setCurrentTab }: ProductA
link={ip.link}
id={ip.id}
innsiktsproduktType={ip.type}
editable={!!userInfo?.googleGroups?.find(it=> it.email == ip.group)}
editable={!!userInfo?.googleGroups?.find((it: any)=> it.email == ip.group)}
teamkatalogenTeam={ip.teamName}
productArea={ip.productAreaName}
/>
12 changes: 2 additions & 10 deletions components/search/resultList.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
import { QueryResult } from '@apollo/client'
import ErrorMessage from '../lib/error'
import LoaderSpinner from '../lib/spinner'
import SearchResultLink from './searchResultLink'
import { Tabs } from '@navikt/ds-react'
import React, { useContext, useEffect, useState } from 'react'
import { SearchParam } from '../../pages/search'
import { USER_INFO } from '../../lib/queries/userInfo/userInfo'
import { UserState } from '../../lib/context'
import { useSearchTeamKatalogen } from '../../lib/rest/teamkatalogen'
import { useGetProductAreas } from '../../lib/rest/productAreas'
@@ -65,11 +63,6 @@ const ResultList = ({
variables: {
id: id
},
refetchQueries: [
{
query: USER_INFO,
}
]
})

const isDataProduct = (item: any) => !!item.datasets
@@ -89,7 +82,7 @@ const ResultList = ({
}

if (search && !!searchParam) {
const { data, loading, error } = search
var { data, loading, error } = search

if (error) return <ErrorMessage error={error} />
if (loading || !data) return <LoaderSpinner />
@@ -100,7 +93,6 @@ const ResultList = ({
(d) => !isDataProduct(d.result)
)

//dataproducts.forEach((d) => console.log(getTeamKatalogenInfo(d.result)?.teamkatalogenTeam))
return (
<Results>
<Tabs
@@ -228,7 +220,7 @@ const ResultList = ({
{...getTeamKatalogenInfo(p)}
description={p.description}
innsiktsproduktType={p.type}
editable={!!userInfo?.googleGroups?.find(it => it.email == p.group)}
editable={!!userInfo?.googleGroups?.find((it: any) => it.email == p.group)}
/>
))}
</Results>
6 changes: 0 additions & 6 deletions components/search/searchResultLink.tsx
Original file line number Diff line number Diff line change
@@ -9,7 +9,6 @@ import humanizeDate from '../../lib/humanizeDate'
import DeleteModal from '../lib/deleteModal'
import { useState } from 'react'
import { useRouter } from 'next/router'
import { USER_INFO } from '../../lib/queries/userInfo/userInfo'
import TagPill from '../lib/tagPill'

export interface SearchResultProps {
@@ -72,11 +71,6 @@ export const SearchResultLink = ({
variables:{
id: id
},
refetchQueries:[
{
query: USER_INFO,
}
]
})
}

13 changes: 4 additions & 9 deletions components/stories/editStoryMetadata.tsx
Original file line number Diff line number Diff line change
@@ -16,7 +16,6 @@ import { useContext, useState } from 'react'
import TagsSelector from '../lib/tagsSelector'
import {UserState} from "../../lib/context";
import { useUpdateStoryMetadataMutation } from '../../lib/schema/graphql'
import { USER_INFO } from '../../lib/queries/userInfo/userInfo'

const schema = yup.object().shape({
name: yup.string().nullable().required('Skriv inn navnet på datafortellingen'),
@@ -88,11 +87,6 @@ export const EditStoryMetadataForm = ({id, name, description, keywords, teamkata
teamID: teamID,
group: data.group,
},
refetchQueries:[
{
query: USER_INFO,
}
]
}

updateStoryQuery(editStoryData).then(()=>{
@@ -123,6 +117,7 @@ export const EditStoryMetadataForm = ({id, name, description, keywords, teamkata
})
}

const gcpProjects = userInfo?.gcpProjects as any[] || []

return (
<div className="mt-8 md:w-[46rem]">
@@ -155,11 +150,11 @@ export const EditStoryMetadataForm = ({id, name, description, keywords, teamkata
<option value="">Velg gruppe</option>
{[
...new Set(
userInfo?.gcpProjects.map(
gcpProjects.map(
({ group }: { group: { name: string } }) => (
<option
value={
userInfo?.groups.filter((g) => g.name === group.name)[0]
userInfo?.groups.filter((g: any) => g.name === group.name)[0]
.email
}
key={group.name}
@@ -172,7 +167,7 @@ export const EditStoryMetadataForm = ({id, name, description, keywords, teamkata
]}
</Select>
<TeamkatalogenSelector
gcpGroups={userInfo?.gcpProjects.map(it=> it.group.email)}
gcpGroups={userInfo?.gcpProjects.map((it: any)=> it.group.email)}
register={register}
watch={watch}
errors={errors}
8 changes: 5 additions & 3 deletions components/stories/newStory.tsx
Original file line number Diff line number Diff line change
@@ -230,6 +230,8 @@ export const NewStoryForm = () => {
});
};

const gcpProjects = userInfo?.gcpProjects as any[] || []

return (
<div className="mt-8 md:w-[46rem]">
<Heading level="1" size="large">
@@ -261,11 +263,11 @@ export const NewStoryForm = () => {
<option value="">Velg gruppe</option>
{[
...new Set(
userInfo?.gcpProjects.map(
gcpProjects.map(
({ group }: { group: { name: string } }) => (
<option
value={
userInfo?.groups.filter((g) => g.name === group.name)[0]
userInfo?.groups.filter((g: any) => g.name === group.name)[0]
.email
}
key={group.name}
@@ -278,7 +280,7 @@ export const NewStoryForm = () => {
]}
</Select>
<TeamkatalogenSelector
gcpGroups={userInfo?.gcpProjects.map(it => it.group.email)}
gcpGroups={userInfo?.gcpProjects.map((it: any) => it.group.email)}
register={register}
watch={watch}
errors={errors}
5 changes: 1 addition & 4 deletions lib/context.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
import { createContext } from 'react'
import { UserInfoDetailsQuery } from './schema/graphql'

export const UserState = createContext<
UserInfoDetailsQuery['userInfo'] | undefined
>(undefined)
export const UserState = createContext<any>(undefined)
109 changes: 0 additions & 109 deletions lib/queries/userInfo/userInfo.ts

This file was deleted.

18 changes: 3 additions & 15 deletions lib/rest/dataproducts.ts
Original file line number Diff line number Diff line change
@@ -1,26 +1,14 @@
import { useEffect, useState } from "react";
import { getDataproductUrl, getDatasetUrl } from "./restApi";
import { fetchTemplate, getDataproductUrl, getDatasetUrl } from "./restApi";

const getDataproduct = async (id: string) => {
const url = getDataproductUrl(id);
const options = {
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
}
return fetch(url, options)
return fetchTemplate(url)
}

const getDataset = async (id: string) => {
const url = getDatasetUrl(id);
const options = {
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
}
return fetch(url, options)
return fetchTemplate(url)
}

export const useGetDataproduct = (id: string, activeDataSetID?: string)=>{
18 changes: 3 additions & 15 deletions lib/rest/productAreas.ts
Original file line number Diff line number Diff line change
@@ -1,26 +1,14 @@
import { useEffect, useState } from "react";
import { getProductAreaUrl, getProductAreasUrl } from "./restApi";
import { fetchTemplate, getProductAreaUrl, getProductAreasUrl } from "./restApi";

const getProductAreas = async () => {
const url = getProductAreasUrl();
const options = {
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
}
return fetch(url, options)
return fetchTemplate(url)
}

const getProductArea = async (id: string) => {
const url = getProductAreaUrl(id)
const options = {
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
}
return fetch(url, options)
return fetchTemplate(url)
}

const enrichProductArea = (productArea: any) => {
9 changes: 9 additions & 0 deletions lib/rest/restApi.ts
Original file line number Diff line number Diff line change
@@ -13,12 +13,21 @@ export const getDataproductUrl = (id: string) => `${apiUrl()}/dataproducts/${id}
export const getDatasetUrl = (id: string) => `${apiUrl()}/datasets/${id}`
export const getProductAreasUrl = () => `${apiUrl()}/productareas`
export const getProductAreaUrl = (id: string) => `${apiUrl()}/productareas/${id}`
export const fetchUserDataUrl = () => `${apiUrl()}/userData`
export const searchTeamKatalogenUrl = (gcpGroups?: string[]) => {
const parameters = gcpGroups?.length ? gcpGroups.map(group => `gcpGroups=${encodeURIComponent(group)}`).join('&') : ''
const query = parameters ? `?${parameters}` : ''
return `${apiUrl()}/teamkatalogen${query}`
}

export const fetchTemplate = (url: string) => fetch(url, {
method: 'GET',
credentials: 'include',
headers: {
'Content-Type': 'application/json',
},
})

export const searchUrl = (options: SearchOptions) => {
let queryParams: string[] = [];

10 changes: 2 additions & 8 deletions lib/rest/search.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { useEffect, useState } from "react"
import { searchUrl } from "./restApi"
import { fetchTemplate, searchUrl } from "./restApi"

export interface SearchOptions {
// Freetext search
@@ -25,13 +25,7 @@ export interface SearchResult{

const search = async (o: SearchOptions)=>{
const url = searchUrl(o);
const options = {
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
}
return fetch(url, options)
return fetchTemplate(url)
}

export const useSearch = (o: SearchOptions)=>{
11 changes: 2 additions & 9 deletions lib/rest/teamkatalogen.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,11 @@
import { useEffect, useState } from "react";
import { searchTeamKatalogenUrl } from "./restApi";
import { fetchTemplate, searchTeamKatalogenUrl } from "./restApi";
import { set } from "lodash";
import { de } from "date-fns/locale";

export const searchTeamKatalogen = async (gcpGroups?: string[]) => {
const url = searchTeamKatalogenUrl(gcpGroups)
const options = {
method: 'GET',
headers: {
'Content-Type': 'application/json',
},

}
return fetch(url, options)
return fetchTemplate(url)
}

export const useSearchTeamKatalogen = (gcpGroups?: string[]) => {
30 changes: 30 additions & 0 deletions lib/rest/userData.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import { useEffect, useState } from "react"
import { fetchTemplate, fetchUserDataUrl } from "./restApi"

export const fetchUserData = async () => {
const url = fetchUserDataUrl()
return fetchTemplate(url)
}

export const useFetchUserData = () => {
const [data, setData] = useState<any>(null);
const [loading, setLoading] = useState(false);
const [error, setError] = useState(null);
useEffect(() => {
setLoading(true);
fetchUserData().then((res) => res.json())
.then((userDataDto) => {
setError(null);
setLoading(false);
setData(userDataDto);
})
.catch((err) => {
setError(err);
setLoading(false);
setData(null);
}).finally(() => {
setLoading(false);
})
}, [])
return { data, loading, error };
}
144 changes: 0 additions & 144 deletions lib/schema/graphql.ts
Original file line number Diff line number Diff line change
@@ -1474,11 +1474,6 @@ export type UpdateStoryMetadataMutationVariables = Exact<{

export type UpdateStoryMetadataMutation = { __typename?: 'Mutation', updateStoryMetadata: { __typename?: 'Story', id: string } };

export type UserInfoDetailsQueryVariables = Exact<{ [key: string]: never; }>;


export type UserInfoDetailsQuery = { __typename?: 'Query', userInfo: { __typename?: 'UserInfo', name: string, email: string, loginExpiration: any, dataproducts: Array<{ __typename?: 'Dataproduct', id: string, name: string, keywords: Array<string>, slug: string, owner: { __typename?: 'Owner', group: string } }>, accessable: { __typename?: 'AccessibleDatasets', owned: Array<{ __typename?: 'Dataset', id: string, name: string, dataproductID: string, keywords: Array<string>, slug: string, dataproduct: { __typename?: 'Dataproduct', name: string, slug: string }, owner: { __typename?: 'Owner', group: string } }>, granted: Array<{ __typename?: 'Dataset', id: string, name: string, dataproductID: string, keywords: Array<string>, slug: string, dataproduct: { __typename?: 'Dataproduct', name: string, slug: string }, owner: { __typename?: 'Owner', group: string } }> }, groups: Array<{ __typename?: 'Group', name: string, email: string }>, nadaTokens: Array<{ __typename?: 'NadaToken', team: string, token: string }>, googleGroups?: Array<{ __typename?: 'Group', name: string, email: string }> | null, allGoogleGroups?: Array<{ __typename?: 'Group', name: string, email: string }> | null, gcpProjects: Array<{ __typename?: 'GCPProject', id: string, group: { __typename?: 'Group', name: string, email: string } }>, stories: Array<{ __typename?: 'Story', id: string, name: string, description: string, keywords: Array<string>, group: string, teamkatalogenURL?: string | null }>, insightProducts: Array<{ __typename?: 'InsightProduct', id: string, name: string, description: string, type: string, link: string, keywords: Array<string>, group: string, teamkatalogenURL?: string | null }>, accessRequests: Array<{ __typename?: 'AccessRequest', id: string, datasetID: string, subject: string, subjectType: SubjectType, granter?: string | null, status: AccessRequestStatus, created: any, expires?: any | null, owner: string, reason?: string | null, polly?: { __typename?: 'Polly', id: string, name: string, externalID: string, url: string } | null }> } };

export type UserInfoAccessableDataproductQueryVariables = Exact<{ [key: string]: never; }>;


@@ -3049,145 +3044,6 @@ export function useUpdateStoryMetadataMutation(baseOptions?: Apollo.MutationHook
export type UpdateStoryMetadataMutationHookResult = ReturnType<typeof useUpdateStoryMetadataMutation>;
export type UpdateStoryMetadataMutationResult = Apollo.MutationResult<UpdateStoryMetadataMutation>;
export type UpdateStoryMetadataMutationOptions = Apollo.BaseMutationOptions<UpdateStoryMetadataMutation, UpdateStoryMetadataMutationVariables>;
export const UserInfoDetailsDocument = gql`
query userInfoDetails {
userInfo {
name
email
dataproducts {
id
name
keywords
slug
owner {
group
}
}
accessable {
owned {
id
name
dataproduct {
name
slug
}
dataproductID
keywords
slug
owner {
group
}
}
granted {
id
name
dataproduct {
name
slug
}
dataproductID
keywords
slug
owner {
group
}
}
}
loginExpiration
groups {
name
email
}
nadaTokens {
team
token
}
googleGroups {
name
email
}
allGoogleGroups {
name
email
}
gcpProjects {
id
group {
name
email
}
}
stories {
id
name
description
keywords
group
teamkatalogenURL
}
insightProducts {
id
name
description
type
link
keywords
group
teamkatalogenURL
}
accessRequests {
id
datasetID
subject
subjectType
granter
status
created
expires
owner
polly {
id
name
externalID
url
}
reason
}
}
}
`;

/**
* __useUserInfoDetailsQuery__
*
* To run a query within a React component, call `useUserInfoDetailsQuery` and pass it any options that fit your needs.
* When your component renders, `useUserInfoDetailsQuery` returns an object from Apollo Client that contains loading, error, and data properties
* you can use to render your UI.
*
* @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;
*
* @example
* const { data, loading, error } = useUserInfoDetailsQuery({
* variables: {
* },
* });
*/
export function useUserInfoDetailsQuery(baseOptions?: Apollo.QueryHookOptions<UserInfoDetailsQuery, UserInfoDetailsQueryVariables>) {
const options = {...defaultOptions, ...baseOptions}
return Apollo.useQuery<UserInfoDetailsQuery, UserInfoDetailsQueryVariables>(UserInfoDetailsDocument, options);
}
export function useUserInfoDetailsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<UserInfoDetailsQuery, UserInfoDetailsQueryVariables>) {
const options = {...defaultOptions, ...baseOptions}
return Apollo.useLazyQuery<UserInfoDetailsQuery, UserInfoDetailsQueryVariables>(UserInfoDetailsDocument, options);
}
export function useUserInfoDetailsSuspenseQuery(baseOptions?: Apollo.SuspenseQueryHookOptions<UserInfoDetailsQuery, UserInfoDetailsQueryVariables>) {
const options = {...defaultOptions, ...baseOptions}
return Apollo.useSuspenseQuery<UserInfoDetailsQuery, UserInfoDetailsQueryVariables>(UserInfoDetailsDocument, options);
}
export type UserInfoDetailsQueryHookResult = ReturnType<typeof useUserInfoDetailsQuery>;
export type UserInfoDetailsLazyQueryHookResult = ReturnType<typeof useUserInfoDetailsLazyQuery>;
export type UserInfoDetailsSuspenseQueryHookResult = ReturnType<typeof useUserInfoDetailsSuspenseQuery>;
export type UserInfoDetailsQueryResult = Apollo.QueryResult<UserInfoDetailsQuery, UserInfoDetailsQueryVariables>;
export const UserInfoAccessableDataproductDocument = gql`
query userInfoAccessableDataproduct {
userInfo {
14 changes: 3 additions & 11 deletions pages/_app.tsx
Original file line number Diff line number Diff line change
@@ -12,24 +12,16 @@ import { useApollo } from '../lib/apollo'
import React from 'react'
import { UserState } from '../lib/context'
import PageLayout from '../components/pageLayout'
import { useUserInfoDetailsQuery } from '../lib/schema/graphql'
import { isBefore, parseISO } from 'date-fns'
import { useFetchUserData } from '../lib/rest/userData'

const MyApp = ({ Component, pageProps }: AppInitialProps & AppContext) => {
const apolloClient = useApollo(pageProps)

const { data, error } = useUserInfoDetailsQuery({
client: apolloClient,
})

if (data && isBefore(parseISO(data.userInfo.loginExpiration), Date.now())) {
apolloClient.cache.evict({ fieldName: 'userInfo' })
apolloClient.cache.gc()
}
const userData = useFetchUserData()

return (
<ApolloProvider client={apolloClient}>
<UserState.Provider value={!error ? data?.userInfo : undefined}>
<UserState.Provider value={!userData.error ? userData.data : undefined}>
<Head>
<link
rel="apple-touch-icon"
13 changes: 6 additions & 7 deletions pages/admin/tags/index.tsx
Original file line number Diff line number Diff line change
@@ -24,8 +24,8 @@ import TagPill from '../../../components/lib/tagPill'
import {
useKeywordsQuery,
useUpdateKeywordsMutation,
useUserInfoDetailsQuery,
} from '../../../lib/schema/graphql'
import { useFetchUserData } from '../../../lib/rest/userData'

const TagsCleaner = () => {
const kw = useKeywordsQuery()
@@ -38,21 +38,21 @@ const TagsCleaner = () => {
const [confirmChange, setConfirmChange] = useState(false)
const [tagUpdateList, setTagUpdateList] = useState([] as string[][])
const [updateKeywords] = useUpdateKeywordsMutation()
const user = useUserInfoDetailsQuery()
if (user.loading) {
const userData = useFetchUserData()
if (userData.loading) {
return (
<InnerContainer>
<LoaderSpinner></LoaderSpinner>
</InnerContainer>
)
}

if (!user.data) {
if (!userData.data) {
return <InnerContainer>Failed to fetch user information</InnerContainer>
}

const notMemberOfNada = !user.data.userInfo.groups.find(
(g) => g.name === 'nada'
const notMemberOfNada = !userData.data.userInfo.groups.find(
(g: any) => g.name === 'nada'
)
if (notMemberOfNada) {
return <InnerContainer>Permission denied</InnerContainer>
@@ -270,7 +270,6 @@ const TagsCleaner = () => {
size="small"
onChange={(e) => {
tagUpdateList[index][0] = e.target.value
console.log(tagUpdateList)
setTagUpdateList([...tagUpdateList])
}}
>
10 changes: 4 additions & 6 deletions pages/dataproduct/new.tsx
Original file line number Diff line number Diff line change
@@ -1,20 +1,18 @@
import * as React from 'react'
import { NewDataproductForm } from '../../components/dataproducts/newDataproductForm'
import Head from 'next/head'
import {
useUserInfoDetailsQuery,
} from '../../lib/schema/graphql'
import InnerContainer from '../../components/lib/innerContainer'
import LoaderSpinner from '../../components/lib/spinner'
import { useFetchUserData } from '../../lib/rest/userData'

const NewDataproduct = () => {
const userInfo = useUserInfoDetailsQuery()
const userData = useFetchUserData()

if(!userInfo || userInfo.loading){
if(!userData || userData.loading){
return <LoaderSpinner />
}

if (!userInfo.data?.userInfo)
if (!userData.data?.userInfo)
return (
<div>
<h1>Du må være logget inn!</h1>
4 changes: 0 additions & 4 deletions pages/index.tsx
Original file line number Diff line number Diff line change
@@ -9,7 +9,6 @@ import { FrontPageLogo } from '../components/index/frontPageLogo'
import { useEffect, useState } from 'react'
import amplitudeLog from '../lib/amplitude'
import Head from 'next/head'
import { USER_INFO } from '../lib/queries/userInfo/userInfo'
import StoryLogo from '../components/lib/icons/storyLogo'
import Link from 'next/link'
import ProductAreaLinks from '../components/productArea/productAreaLinks'
@@ -135,9 +134,6 @@ export const getServerSideProps: GetServerSideProps = async (context) => {
const cookie = context?.req?.headers?.cookie || ''
const apolloClient = initializeApollo(null, cookie)

await apolloClient.query({
query: USER_INFO,
})
await apolloClient.query({
query: MetabaseProudctsDocument,
})
10 changes: 4 additions & 6 deletions pages/insightProduct/new.tsx
Original file line number Diff line number Diff line change
@@ -1,22 +1,20 @@
import * as React from 'react'
import { NewInsightProductForm } from '../../components/insightProducts/newInsightProduct'
import Head from 'next/head'
import {
useUserInfoDetailsQuery,
} from '../../lib/schema/graphql'
import { GetServerSideProps } from 'next'
import { addApolloState, initializeApollo } from '../../lib/apollo'
import InnerContainer from '../../components/lib/innerContainer'
import LoaderSpinner from '../../components/lib/spinner'
import { useFetchUserData } from '../../lib/rest/userData'

const NewInsightProduct = () => {
const userInfo = useUserInfoDetailsQuery()
const userData = useFetchUserData()

if(!userInfo || userInfo.loading){
if(!userData || userData.loading){
return <LoaderSpinner />
}

if (!userInfo.data?.userInfo)
if (!userData.data?.userInfo)
return (
<div>
<h1>Du må være logget inn!</h1>
10 changes: 4 additions & 6 deletions pages/story/new.tsx
Original file line number Diff line number Diff line change
@@ -1,20 +1,18 @@
import * as React from 'react'
import { NewStoryForm } from '../../components/stories/newStory'
import Head from 'next/head'
import {
useUserInfoDetailsQuery,
} from '../../lib/schema/graphql'
import InnerContainer from '../../components/lib/innerContainer'
import LoaderSpinner from '../../components/lib/spinner'
import { useFetchUserData } from '../../lib/rest/userData'

const NewStory = () => {
const userInfo = useUserInfoDetailsQuery()
const userData = useFetchUserData()

if(!userInfo || userInfo.loading){
if(!userData || userData.loading){
return <LoaderSpinner />
}

if (!userInfo.data?.userInfo)
if (!userData.data?.userInfo)
return (
<div>
<h1>Du må være logget inn!</h1>
20 changes: 10 additions & 10 deletions pages/user/[[...page]].tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import * as React from 'react'
import Head from 'next/head'
import { useUserInfoDetailsQuery } from '../../lib/schema/graphql'
import { useRouter } from 'next/router'
import LoaderSpinner from '../../components/lib/spinner'
import ErrorMessage from '../../components/lib/error'
@@ -11,10 +10,11 @@ import InnerContainer from '../../components/lib/innerContainer'
import { JoinableViewsList } from '../../components/dataProc/joinableViewsList'
import { DataproductsList } from '../../components/dataproducts/dataproductList'
import { Tabs } from '@navikt/ds-react'
import { useFetchUserData } from '../../lib/rest/userData'

export const UserPages = () => {
const router = useRouter()
const { data, error, loading } = useUserInfoDetailsQuery()
const { data, error, loading } = useFetchUserData()

if (error) return <ErrorMessage error={error} />
if (loading || !data) return <LoaderSpinner />
@@ -23,7 +23,7 @@ export const UserPages = () => {
return <LoaderSpinner />
}

if (!data.userInfo)
if (!data)
return (
<div>
<h1>Du må være logget inn!</h1>
@@ -42,7 +42,7 @@ export const UserPages = () => {
component: (
<div className="grid gap-4">
<h2>Mine produkter</h2>
<ResultList dataproducts={data.userInfo.dataproducts} />
<ResultList dataproducts={data.dataproducts} />
</div>
),
},
@@ -52,7 +52,7 @@ export const UserPages = () => {
component: (
<div className="grid gap-4">
<h2>Mine fortellinger</h2>
<ResultList stories={data.userInfo.stories} />
<ResultList stories={data.stories} />
</div>
),
},
@@ -62,7 +62,7 @@ export const UserPages = () => {
component: (
<div className="grid gap-4">
<h2>Mine innsiktsprodukter</h2>
<ResultList insightProducts={data.userInfo.insightProducts} />
<ResultList insightProducts={data.insightProducts} />
</div>
),
},
@@ -73,7 +73,7 @@ export const UserPages = () => {
<div className="grid gap-4">
<h2>Mine tilgangssøknader</h2>
<AccessRequestsListForUser
accessRequests={data.userInfo.accessRequests}
accessRequests={data.accessRequests}
/>
</div>
),
@@ -101,10 +101,10 @@ export const UserPages = () => {
/>
</Tabs.List>
<Tabs.Panel value="owner" className="w-full space-y-2 p-4">
<DataproductsList datasets={data.userInfo.accessable.owned} />
<DataproductsList datasets={data.accessable.owned} />
</Tabs.Panel>
<Tabs.Panel value="granted" className="w-full space-y-2 p-4">
<DataproductsList datasets={data.userInfo.accessable.granted} />
<DataproductsList datasets={data.accessable.granted} />
</Tabs.Panel>
<Tabs.Panel value="joinable" className="w-full p-4">
<JoinableViewsList />
@@ -120,7 +120,7 @@ export const UserPages = () => {
<div className="grid gap-4">
<h2>Mine team tokens</h2>
<NadaTokensForUser
nadaTokens={data.userInfo.nadaTokens}
nadaTokens={data.nadaTokens}
/>
</div>
),