diff --git a/apps/web/components/GenericList/GenericList.tsx b/apps/web/components/GenericList/GenericList.tsx
index 36002ccc3a3e..3cce3c13913e 100644
--- a/apps/web/components/GenericList/GenericList.tsx
+++ b/apps/web/components/GenericList/GenericList.tsx
@@ -26,12 +26,14 @@ import {
} from '@island.is/island-ui/core'
import { theme } from '@island.is/island-ui/theme'
import { Locale } from '@island.is/shared/types'
+import { NewsCard } from '@island.is/web/components'
import {
GenericListItem,
GenericListItemResponse,
GenericTag,
GetGenericListItemsInputOrderBy,
GetGenericListItemsQueryVariables,
+ Image as ImageSchema,
Query,
} from '@island.is/web/graphql/schema'
import { useWindowSize } from '@island.is/web/hooks/useViewport'
@@ -89,7 +91,7 @@ export const NonClickableItem = ({ item }: ItemProps) => {
{item.date && (
- {format(new Date(item.date), 'dd.MM.yyyy')}
+ {format(new Date(item.date), 'do MMMM yyyy')}
)}
@@ -144,6 +146,27 @@ export const ClickableItem = ({ item, baseUrl }: ClickableItemProps) => {
const filterTags = item.filterTags ?? []
+ if (item.image) {
+ return (
+ 0 && (
+ {webRichText(item.cardIntro ?? [])}
+ )
+ }
+ href={href ?? ''}
+ image={item.image as ImageSchema}
+ readMoreText=""
+ titleAs="h3"
+ titleVariant="h3"
+ titleTextColor="blue400"
+ date={item.date ?? ''}
+ dateTextColor="purple400"
+ />
+ )
+ }
+
return (
{
- {format(new Date(item.date), 'dd.MM.yyyy')}
+ {format(new Date(item.date), 'do MMMM yyyy')}
{icon && (
> = ({
dateTextColor = 'dark400',
titleVariant = 'h2',
titleAs = 'h3',
+ titleTextColor = 'dark400',
mini,
}) => {
const [ref, { width }] = useMeasure()
@@ -67,7 +69,7 @@ export const NewsCard: React.FC> = ({
{formattedDate}
)}
-
+
{title}
@@ -107,7 +109,7 @@ export const NewsCard: React.FC> = ({
{formattedDate}
-
+
{title}
{React.isValidElement(introduction) ? (
@@ -130,7 +132,7 @@ export const NewsCard: React.FC> = ({
)}
- {!!showImage && (
+ {!!showImage && image && (
= ({
{item.date && (
- {format(new Date(item.date), 'dd.MM.yyyy')}
+ {format(new Date(item.date), 'do MMMM yyyy')}
)}
@@ -41,6 +45,26 @@ const GenericListItemPage: Screen = ({
{showReadspeaker && }
+ {item.image && (
+
+
+
+ )}
{webRichText(item.content ?? [])}
diff --git a/apps/web/screens/queries/GenericList.ts b/apps/web/screens/queries/GenericList.ts
index 5bfab44d76bf..f59c85a7fe3f 100644
--- a/apps/web/screens/queries/GenericList.ts
+++ b/apps/web/screens/queries/GenericList.ts
@@ -25,6 +25,12 @@ export const GET_GENERIC_LIST_ITEMS_QUERY = gql`
slug
assetUrl
externalUrl
+ image {
+ url
+ title
+ width
+ height
+ }
}
total
}
@@ -43,6 +49,13 @@ export const GET_GENERIC_LIST_ITEM_BY_SLUG_QUERY = gql`
...AllSlices
${nestedFields}
}
+ image {
+ url
+ title
+ width
+ height
+ }
+ fullWidthImageInContent
}
}
${slices}
diff --git a/apps/web/screens/queries/fragments.ts b/apps/web/screens/queries/fragments.ts
index 9ae4b8f8f083..1c3c4983b1ec 100644
--- a/apps/web/screens/queries/fragments.ts
+++ b/apps/web/screens/queries/fragments.ts
@@ -976,6 +976,12 @@ export const slices = gql`
}
slug
assetUrl
+ image {
+ url
+ title
+ width
+ height
+ }
}
}
}
diff --git a/libs/cms/src/lib/generated/contentfulTypes.d.ts b/libs/cms/src/lib/generated/contentfulTypes.d.ts
index 8754335947f6..d49adeb37337 100644
--- a/libs/cms/src/lib/generated/contentfulTypes.d.ts
+++ b/libs/cms/src/lib/generated/contentfulTypes.d.ts
@@ -1684,6 +1684,12 @@ export interface IGenericListItemFields {
/** External Link */
externalLink?: ILinkUrl | undefined
+
+ /** Image */
+ image?: Asset | undefined
+
+ /** Full Width Image In Content */
+ fullWidthImageInContent?: boolean | undefined
}
/** An item that belongs to a generic list */
diff --git a/libs/cms/src/lib/models/genericListItem.model.ts b/libs/cms/src/lib/models/genericListItem.model.ts
index 39fe5dc37b6e..8f7e6b7d3fdb 100644
--- a/libs/cms/src/lib/models/genericListItem.model.ts
+++ b/libs/cms/src/lib/models/genericListItem.model.ts
@@ -4,6 +4,7 @@ import { SliceUnion, mapDocument } from '../unions/slice.union'
import { GenericList, mapGenericList } from './genericList.model'
import { IGenericListItem } from '../generated/contentfulTypes'
import { GenericTag, mapGenericTag } from './genericTag.model'
+import { Image, mapImage } from './image.model'
@ObjectType()
export class GenericListItem {
@@ -36,6 +37,12 @@ export class GenericListItem {
@CacheField(() => [GenericTag], { nullable: true })
filterTags?: GenericTag[]
+
+ @CacheField(() => Image, { nullable: true })
+ image?: Image | null
+
+ @Field(() => Boolean, { nullable: true })
+ fullWidthImageInContent?: boolean
}
export const mapGenericListItem = ({
@@ -67,5 +74,7 @@ export const mapGenericListItem = ({
assetUrl,
externalUrl: fields.externalLink?.fields?.url ?? '',
filterTags: fields.filterTags ? fields.filterTags.map(mapGenericTag) : [],
+ image: fields.image ? mapImage(fields.image) : null,
+ fullWidthImageInContent: fields.fullWidthImageInContent ?? true,
}
}