Skip to content

Commit 2ff56c9

Browse files
News Site Next - Article Ids (#447)
1 parent d979723 commit 2ff56c9

File tree

8 files changed

+52
-9
lines changed

8 files changed

+52
-9
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="./_next/static/css/a0dca1379a01e5cf.css" as="style"/><link rel="stylesheet" href="./_next/static/css/a0dca1379a01e5cf.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="./_next/static/chunks/polyfills-c67a75d1b6f99dc8.js"></script><script src="./_next/static/chunks/webpack-e50e9853db18b759.js" defer=""></script><script src="./_next/static/chunks/framework-2c79e2a64abdb08b.js" defer=""></script><script src="./_next/static/chunks/main-2ba37e62325cc71b.js" defer=""></script><script src="./_next/static/chunks/pages/_app-77983e68be50f72a.js" defer=""></script><script src="./_next/static/chunks/pages/_error-54de1933a164a1ff.js" defer=""></script><script src="./_next/static/dKI4-ZnFPRMFEw-AlcuLr/_buildManifest.js" defer=""></script><script src="./_next/static/dKI4-ZnFPRMFEw-AlcuLr/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><div id="settings-container"></div><div id="notifications-container"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"dKI4-ZnFPRMFEw-AlcuLr","assetPrefix":".","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
1+
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="./_next/static/css/a0dca1379a01e5cf.css" as="style"/><link rel="stylesheet" href="./_next/static/css/a0dca1379a01e5cf.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="./_next/static/chunks/polyfills-c67a75d1b6f99dc8.js"></script><script src="./_next/static/chunks/webpack-e50e9853db18b759.js" defer=""></script><script src="./_next/static/chunks/framework-2c79e2a64abdb08b.js" defer=""></script><script src="./_next/static/chunks/main-2ba37e62325cc71b.js" defer=""></script><script src="./_next/static/chunks/pages/_app-77983e68be50f72a.js" defer=""></script><script src="./_next/static/chunks/pages/_error-54de1933a164a1ff.js" defer=""></script><script src="./_next/static/IbZpY6lpxNCTHGQFLD2XQ/_buildManifest.js" defer=""></script><script src="./_next/static/IbZpY6lpxNCTHGQFLD2XQ/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><div id="settings-container"></div><div id="notifications-container"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"IbZpY6lpxNCTHGQFLD2XQ","assetPrefix":".","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>

resources/newssite/news-next/dist/_next/static/IbZpY6lpxNCTHGQFLD2XQ/_buildManifest.js

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
self.__SSG_MANIFEST=new Set,self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB();

resources/newssite/news-next/dist/_next/static/chunks/pages/index-aded717294ad42d4.js

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

resources/newssite/news-next/dist/_next/static/dKI4-ZnFPRMFEw-AlcuLr/_buildManifest.js

Lines changed: 5 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="./_next/static/css/a0dca1379a01e5cf.css" as="style"/><link rel="stylesheet" href="./_next/static/css/a0dca1379a01e5cf.css" data-n-g=""/><link rel="preload" href="./_next/static/css/2cf5163b53bb0adb.css" as="style"/><link rel="stylesheet" href="./_next/static/css/2cf5163b53bb0adb.css" data-n-p=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="./_next/static/chunks/polyfills-c67a75d1b6f99dc8.js"></script><script src="./_next/static/chunks/webpack-e50e9853db18b759.js" defer=""></script><script src="./_next/static/chunks/framework-2c79e2a64abdb08b.js" defer=""></script><script src="./_next/static/chunks/main-2ba37e62325cc71b.js" defer=""></script><script src="./_next/static/chunks/pages/_app-77983e68be50f72a.js" defer=""></script><script src="./_next/static/chunks/743-fd706aeabb7828e3.js" defer=""></script><script src="./_next/static/chunks/pages/index-5268ea812327eb5e.js" defer=""></script><script src="./_next/static/dKI4-ZnFPRMFEw-AlcuLr/_buildManifest.js" defer=""></script><script src="./_next/static/dKI4-ZnFPRMFEw-AlcuLr/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><div id="settings-container"></div><div id="notifications-container"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"dKI4-ZnFPRMFEw-AlcuLr","assetPrefix":".","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1+
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="./_next/static/css/a0dca1379a01e5cf.css" as="style"/><link rel="stylesheet" href="./_next/static/css/a0dca1379a01e5cf.css" data-n-g=""/><link rel="preload" href="./_next/static/css/2cf5163b53bb0adb.css" as="style"/><link rel="stylesheet" href="./_next/static/css/2cf5163b53bb0adb.css" data-n-p=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="./_next/static/chunks/polyfills-c67a75d1b6f99dc8.js"></script><script src="./_next/static/chunks/webpack-e50e9853db18b759.js" defer=""></script><script src="./_next/static/chunks/framework-2c79e2a64abdb08b.js" defer=""></script><script src="./_next/static/chunks/main-2ba37e62325cc71b.js" defer=""></script><script src="./_next/static/chunks/pages/_app-77983e68be50f72a.js" defer=""></script><script src="./_next/static/chunks/743-fd706aeabb7828e3.js" defer=""></script><script src="./_next/static/chunks/pages/index-aded717294ad42d4.js" defer=""></script><script src="./_next/static/IbZpY6lpxNCTHGQFLD2XQ/_buildManifest.js" defer=""></script><script src="./_next/static/IbZpY6lpxNCTHGQFLD2XQ/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><div id="settings-container"></div><div id="notifications-container"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"IbZpY6lpxNCTHGQFLD2XQ","assetPrefix":".","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>

resources/newssite/news-next/src/components/article/article-content.jsx

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { v4 as uuidv4 } from "uuid";
21
import classNames from "classnames";
32

43
import ArticleImage from "./article-image";
@@ -21,7 +20,7 @@ export default function ArticleContent({ type, content, display }) {
2120
<div className={styles["article-content"]}>
2221
<ul className={classNames(styles["article-list"], styles.vertical, { [styles[display]]: display })}>
2322
{content.map((item) =>
24-
<li key={uuidv4()} className={styles["article-list-item"]}>
23+
<li key={item.id} className={styles["article-list-item"]}>
2524
{item.url && !item.title
2625
? <a href={item.url}>
2726
<ArticleText text={item.content} />
@@ -40,7 +39,7 @@ export default function ArticleContent({ type, content, display }) {
4039
<div className={styles["article-list-content"]}>
4140
<ul className={classNames(styles["article-list"], styles.vertical)}>
4241
{content.map((item) =>
43-
<li key={uuidv4()} className={styles["article-list-item"]}>
42+
<li key={item.id} className={styles["article-list-item"]}>
4443
<ArticleText textClass={classNames(styles["article-title"], "truncate-multiline", "truncate-multiline-3")} text={item.title} type="h3" />
4544
{item.url && !item.title
4645
? <a href={item.url}>
@@ -59,7 +58,7 @@ export default function ArticleContent({ type, content, display }) {
5958
return (
6059
<ul className={classNames(styles["article-list"], styles.horizontal)}>
6160
{content.map((item) =>
62-
<li key={uuidv4()} className={styles["article-list-item"]}>
61+
<li key={item.id} className={styles["article-list-item"]}>
6362
<ArticleImage imageClass={styles["article-hero"]} image={item.image} />
6463
<div className={styles["article-content"]}>
6564
<ArticleText textClass="truncate-multiline truncate-multiline-3" text={item.text} type="div" />
@@ -74,7 +73,7 @@ export default function ArticleContent({ type, content, display }) {
7473
return (
7574
<div className={classNames(layoutStyles["grid-container"], { [layoutStyles[display]]: display })}>
7675
{content.map((item) =>
77-
<div key={uuidv4()} className={layoutStyles["grid-item"]}>
76+
<div key={item.id} className={layoutStyles["grid-item"]}>
7877
<ArticleImage imageClass={styles["article-image-container"]} image={item.image} meta={item.meta} />
7978

8079
{item.url
@@ -93,7 +92,7 @@ export default function ArticleContent({ type, content, display }) {
9392
return (
9493
<ul className={classNames(styles["article-list"], styles.vertical)}>
9594
{content.map((item) =>
96-
<li key={uuidv4()} className={styles["article-list-item"]}>
95+
<li key={item.id} className={styles["article-list-item"]}>
9796
<ArticleImage imageClass={styles["article-image-container"]} image={item.image} />
9897
<ArticleText textClass={classNames(styles["article-title"], "truncate-multiline", "truncate-multiline-3")} text={item.title} type="h3" />
9998
</li>

resources/newssite/news-next/src/context/data-context.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { createContext, useContext } from "react";
22
import { dataSource } from "../data";
33

4+
import { v4 as uuidv4 } from "uuid";
5+
46
const RTL_LOCALES = ["ar", "he", "fa", "ps", "ur"];
57
const DEFAULT_LANG = "en";
68
const DEFAULT_DIR = "ltr";
@@ -16,10 +18,41 @@ export const DataContextProvider = ({ children }) => {
1618
document.documentElement.setAttribute("dir", dir);
1719
document.documentElement.setAttribute("lang", lang);
1820

21+
const { content } = dataSource[lang];
22+
23+
// Generate unique IDs for all articles, and their content items where appropriate.
24+
const contentWithIds = Object.create(null);
25+
Object.keys(content).forEach((key) => {
26+
const { sections } = content[key];
27+
28+
const currentSections = sections.map((section) => {
29+
const currentSection = { ...section };
30+
currentSection.articles = section.articles.map((article) => {
31+
const currentArticle = { ...article };
32+
currentArticle.id = uuidv4();
33+
if (Array.isArray(article.content)) {
34+
currentArticle.content = article.content.map((item) => {
35+
const currentItem = { ...item };
36+
currentItem.id = uuidv4();
37+
return currentItem;
38+
});
39+
}
40+
return currentArticle;
41+
});
42+
return currentSection;
43+
});
44+
45+
contentWithIds[key] = {
46+
...content[key],
47+
sections: currentSections,
48+
};
49+
});
50+
1951
const value = {
2052
lang,
2153
dir,
2254
...dataSource[lang],
55+
content: contentWithIds,
2356
};
2457

2558
return <DataContext.Provider value={value}>{children}</DataContext.Provider>;

0 commit comments

Comments
 (0)