|
1 | | -import React, { useState } from 'react'; |
| 1 | +import React, { useEffect, useState } from 'react'; |
2 | 2 | import Image from 'next/image'; |
3 | 3 | import Link from 'next/link'; |
4 | 4 | import { Button, Divider, Icon, Text } from 'opub-ui'; |
5 | 5 |
|
| 6 | +import { getWebsiteTitle } from '@/lib/utils'; |
6 | 7 | import { Icons } from '@/components/icons'; |
7 | 8 |
|
8 | 9 | interface MetadataProps { |
@@ -47,6 +48,27 @@ const MetadataComponent: React.FC<MetadataProps> = ({ data, setOpen }) => { |
47 | 48 | return option ? option.label : value; // fallback to value if no match |
48 | 49 | }; |
49 | 50 |
|
| 51 | + const [sourceTitle, setSourceTitle] = useState<string | null>(null); |
| 52 | + |
| 53 | + useEffect(() => { |
| 54 | + const fetchTitle = async () => { |
| 55 | + try { |
| 56 | + const urlItem = data.metadata.find( |
| 57 | + (item: any) => item.metadataItem?.dataType === 'URL' |
| 58 | + ); |
| 59 | + |
| 60 | + if (urlItem && urlItem.value) { |
| 61 | + const title = await getWebsiteTitle(urlItem.value); |
| 62 | + setSourceTitle(title); |
| 63 | + } |
| 64 | + } catch (error) { |
| 65 | + console.error('Error fetching website title:', error); |
| 66 | + } |
| 67 | + }; |
| 68 | + |
| 69 | + fetchTitle(); |
| 70 | + }, [data.metadata]); |
| 71 | + |
50 | 72 | return ( |
51 | 73 | <div className="flex flex-col gap-10"> |
52 | 74 | <div className=" flex items-center justify-between"> |
@@ -128,7 +150,7 @@ const MetadataComponent: React.FC<MetadataProps> = ({ data, setOpen }) => { |
128 | 150 | ) : ( |
129 | 151 | <Link href={item.value} target="_blank"> |
130 | 152 | <Text className="underline" color="highlight"> |
131 | | - Source |
| 153 | + {sourceTitle?.trim() ? sourceTitle : 'Source'} |
132 | 154 | </Text> |
133 | 155 | </Link> |
134 | 156 | )} |
|
0 commit comments