@c-rex/templates 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -1
- package/src/articles/documents/page.tsx +3 -51
- package/src/articles/info/page.tsx +3 -44
- package/src/articles/wrapper.tsx +73 -0
- package/src/home/layout.tsx +44 -68
- package/src/home/page.tsx +20 -19
- package/src/layout.tsx +22 -14
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@c-rex/templates",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"files": [
|
|
6
6
|
"src"
|
|
@@ -57,6 +57,7 @@
|
|
|
57
57
|
"next-intl": "^4.1.0",
|
|
58
58
|
"nuqs": "^2.4.3",
|
|
59
59
|
"react": "^18",
|
|
60
|
+
"sonner": "^2.0.5",
|
|
60
61
|
"react-dom": "^18",
|
|
61
62
|
"react-i18next": "^15.5.1"
|
|
62
63
|
}
|
|
@@ -1,56 +1,8 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import {
|
|
3
|
-
import { AppSidebar } from "@c-rex/components/sidebar";
|
|
4
|
-
import { Breadcrumb } from "@c-rex/components/breadcrumb";
|
|
5
|
-
import { loadArticleData } from "@c-rex/utils";
|
|
6
|
-
|
|
7
|
-
export const DocumentsPageTemplate = async ({ params }: { params: { id: string } }) => {
|
|
8
|
-
const { documentURL, availableVersions: availableVersionsAux, title } = await loadArticleData(params.id)
|
|
9
|
-
|
|
10
|
-
const availableVersions = availableVersionsAux.map((item) => {
|
|
11
|
-
return {
|
|
12
|
-
link: `/documents/${item.shortId}`,
|
|
13
|
-
...item,
|
|
14
|
-
}
|
|
15
|
-
})
|
|
2
|
+
import { ArticleWrapper } from "../wrapper";
|
|
16
3
|
|
|
4
|
+
export const DocumentsPageTemplate = ({ params }: { params: { id: string } }) => {
|
|
17
5
|
return (
|
|
18
|
-
<
|
|
19
|
-
<title>{title}</title>
|
|
20
|
-
<AppSidebar
|
|
21
|
-
data={[]}
|
|
22
|
-
availableVersions={availableVersions}
|
|
23
|
-
className="top-20"
|
|
24
|
-
side="right"
|
|
25
|
-
variant="floating"
|
|
26
|
-
collapsible="icon"
|
|
27
|
-
/>
|
|
28
|
-
<SidebarInset>
|
|
29
|
-
<div className="container flex flex-col">
|
|
30
|
-
<header className="flex h-16 shrink-0 items-center justify-between">
|
|
31
|
-
<div className="flex shrink-0 items-center">
|
|
32
|
-
<Breadcrumb items={[
|
|
33
|
-
{
|
|
34
|
-
link: "/",
|
|
35
|
-
label: title,
|
|
36
|
-
id: "title",
|
|
37
|
-
active: false,
|
|
38
|
-
children: [],
|
|
39
|
-
}
|
|
40
|
-
]} />
|
|
41
|
-
</div>
|
|
42
|
-
</header>
|
|
43
|
-
|
|
44
|
-
<div style={{ width: '100%', height: '90.6vh' }}>
|
|
45
|
-
<iframe
|
|
46
|
-
width="100%"
|
|
47
|
-
height="100%"
|
|
48
|
-
style={{ border: 'none' }}
|
|
49
|
-
src={documentURL}
|
|
50
|
-
/>
|
|
51
|
-
</div>
|
|
52
|
-
</div>
|
|
53
|
-
</SidebarInset>
|
|
54
|
-
</SidebarProvider>
|
|
6
|
+
<ArticleWrapper id={params.id} type="documents" />
|
|
55
7
|
);
|
|
56
8
|
};
|
|
@@ -1,50 +1,9 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import {
|
|
3
|
-
import { AppSidebar } from "@c-rex/components/sidebar";
|
|
4
|
-
import { Breadcrumb } from "@c-rex/components/breadcrumb";
|
|
5
|
-
import { loadArticleData } from "@c-rex/utils";
|
|
2
|
+
import { ArticleWrapper } from "../wrapper";
|
|
6
3
|
|
|
7
|
-
export const InfoPageTemplate =
|
|
8
|
-
const {
|
|
9
|
-
availableVersions: availableVersionsAux,
|
|
10
|
-
title,
|
|
11
|
-
treeOfContent,
|
|
12
|
-
breadcrumbItems,
|
|
13
|
-
htmlContent
|
|
14
|
-
} = await loadArticleData(params.id)
|
|
15
|
-
|
|
16
|
-
const availableVersions = availableVersionsAux.map((item) => {
|
|
17
|
-
return {
|
|
18
|
-
link: `/topics/${item.shortId}`,
|
|
19
|
-
...item,
|
|
20
|
-
}
|
|
21
|
-
})
|
|
4
|
+
export const InfoPageTemplate = ({ params }: { params: { id: string } }) => {
|
|
22
5
|
|
|
23
6
|
return (
|
|
24
|
-
<
|
|
25
|
-
<title>{title}</title>
|
|
26
|
-
|
|
27
|
-
<AppSidebar
|
|
28
|
-
data={treeOfContent}
|
|
29
|
-
availableVersions={availableVersions}
|
|
30
|
-
className="top-20"
|
|
31
|
-
side="right"
|
|
32
|
-
variant="floating"
|
|
33
|
-
collapsible="icon"
|
|
34
|
-
/>
|
|
35
|
-
<SidebarInset>
|
|
36
|
-
<div className="container flex flex-col">
|
|
37
|
-
<header className="flex h-16 shrink-0 items-center justify-between">
|
|
38
|
-
<div className="flex shrink-0 items-center">
|
|
39
|
-
<Breadcrumb items={breadcrumbItems} />
|
|
40
|
-
</div>
|
|
41
|
-
</header>
|
|
42
|
-
|
|
43
|
-
<div
|
|
44
|
-
dangerouslySetInnerHTML={{ __html: htmlContent }}
|
|
45
|
-
/>
|
|
46
|
-
</div>
|
|
47
|
-
</SidebarInset>
|
|
48
|
-
</SidebarProvider>
|
|
7
|
+
<ArticleWrapper id={params.id} type="topics" />
|
|
49
8
|
);
|
|
50
9
|
};
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { SidebarInset, SidebarProvider } from "@c-rex/ui/sidebar";
|
|
3
|
+
import { AppSidebar } from "@c-rex/components/sidebar";
|
|
4
|
+
import { CheckArticleLangToast } from "@c-rex/components/check-article-lang";
|
|
5
|
+
import { loadArticleData } from "@c-rex/utils";
|
|
6
|
+
import { getCookieFromBack } from "@c-rex/utils/next-cookies";
|
|
7
|
+
import { CONTENT_LANG_KEY } from "@c-rex/constants";
|
|
8
|
+
import { PageWrapper } from "@c-rex/components/page-wrapper";
|
|
9
|
+
import { Breadcrumb } from "@c-rex/components/breadcrumb";
|
|
10
|
+
import { DropdownMenu } from "../../../components/src/result-view/dropdown-menu";
|
|
11
|
+
import { CloudDownload, Eye } from "lucide-react";
|
|
12
|
+
|
|
13
|
+
type Props = {
|
|
14
|
+
id: string,
|
|
15
|
+
type: string,
|
|
16
|
+
}
|
|
17
|
+
export const ArticleWrapper = async ({ id, type }: Props) => {
|
|
18
|
+
|
|
19
|
+
const contentLanguage = getCookieFromBack(CONTENT_LANG_KEY);
|
|
20
|
+
const {
|
|
21
|
+
availableVersions,
|
|
22
|
+
title,
|
|
23
|
+
treeOfContent,
|
|
24
|
+
documents,
|
|
25
|
+
breadcrumbItems,
|
|
26
|
+
htmlContent
|
|
27
|
+
} = await loadArticleData(id, type)
|
|
28
|
+
|
|
29
|
+
return (
|
|
30
|
+
<PageWrapper title={title}>
|
|
31
|
+
<SidebarProvider>
|
|
32
|
+
<title>{title}</title>
|
|
33
|
+
|
|
34
|
+
<CheckArticleLangToast
|
|
35
|
+
availableVersions={availableVersions}
|
|
36
|
+
contentLanguage={contentLanguage}
|
|
37
|
+
/>
|
|
38
|
+
|
|
39
|
+
<AppSidebar
|
|
40
|
+
data={treeOfContent}
|
|
41
|
+
availableVersions={availableVersions}
|
|
42
|
+
/>
|
|
43
|
+
<SidebarInset>
|
|
44
|
+
<div className="container flex flex-col">
|
|
45
|
+
<header className="flex h-16 shrink-0 items-center justify-between">
|
|
46
|
+
<Breadcrumb items={breadcrumbItems} />
|
|
47
|
+
<div className="flex">
|
|
48
|
+
|
|
49
|
+
{documents.filesToDownload.length > 0 && (
|
|
50
|
+
<DropdownMenu
|
|
51
|
+
items={documents.filesToDownload}
|
|
52
|
+
icon={<CloudDownload />}
|
|
53
|
+
/>
|
|
54
|
+
)}
|
|
55
|
+
{documents.filesToOpen.length > 0 && (
|
|
56
|
+
<DropdownMenu
|
|
57
|
+
items={documents.filesToOpen}
|
|
58
|
+
icon={<Eye />}
|
|
59
|
+
/>
|
|
60
|
+
)}
|
|
61
|
+
</div>
|
|
62
|
+
</header>
|
|
63
|
+
|
|
64
|
+
<div
|
|
65
|
+
className="pb-4"
|
|
66
|
+
dangerouslySetInnerHTML={{ __html: htmlContent }}
|
|
67
|
+
/>
|
|
68
|
+
</div>
|
|
69
|
+
</SidebarInset>
|
|
70
|
+
</SidebarProvider>
|
|
71
|
+
</PageWrapper>
|
|
72
|
+
);
|
|
73
|
+
};
|
package/src/home/layout.tsx
CHANGED
|
@@ -1,87 +1,63 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import {
|
|
2
|
+
import { informationUnitsResponse } from "@c-rex/interfaces";
|
|
3
3
|
import { InformationUnitsService, LanguageService } from "@c-rex/services";
|
|
4
|
-
import { getConfigs
|
|
4
|
+
import { getConfigs } from "@c-rex/utils/next-cookies";
|
|
5
5
|
import { HomePage } from "./page";
|
|
6
|
-
import {
|
|
6
|
+
import { PageWrapper } from "@c-rex/components/page-wrapper";
|
|
7
7
|
|
|
8
|
-
interface SearchParams {
|
|
9
|
-
search?: string;
|
|
10
|
-
page?: string;
|
|
11
|
-
language?: string;
|
|
12
|
-
}
|
|
13
8
|
interface HomeProps {
|
|
14
|
-
searchParams:
|
|
9
|
+
searchParams: {
|
|
10
|
+
search?: string;
|
|
11
|
+
page?: string;
|
|
12
|
+
language?: string;
|
|
13
|
+
};
|
|
15
14
|
}
|
|
16
15
|
|
|
17
|
-
const
|
|
18
|
-
search,
|
|
19
|
-
page,
|
|
20
|
-
language,
|
|
21
|
-
}: SearchParams): Promise<any> => {
|
|
22
|
-
if (search === undefined || search === "") {
|
|
23
|
-
return {
|
|
24
|
-
data: { items: [] },
|
|
25
|
-
filters: {
|
|
26
|
-
searchValue: "",
|
|
27
|
-
page: 0,
|
|
28
|
-
selectedLanguage: [],
|
|
29
|
-
availableLanguages: [],
|
|
30
|
-
},
|
|
31
|
-
};
|
|
32
|
-
}
|
|
16
|
+
export const HomeLayout = async ({ searchParams }: HomeProps) => {
|
|
17
|
+
const { search, page, language } = searchParams;
|
|
33
18
|
|
|
34
|
-
const pageAux = Number(page);
|
|
35
19
|
const configs = await getConfigs();
|
|
36
|
-
const searchValue = search as string;
|
|
37
20
|
const languageService = new LanguageService(configs.languageSwitcher.endpoint);
|
|
38
21
|
const availableLanguagesAndCountries = await languageService.getLanguagesAndCountries();
|
|
39
22
|
|
|
40
|
-
let data = {
|
|
23
|
+
let data = {
|
|
24
|
+
items: [],
|
|
25
|
+
pageInfo: {
|
|
26
|
+
pageCount: 0,
|
|
27
|
+
pageNumber: 0
|
|
28
|
+
}
|
|
29
|
+
} as unknown as informationUnitsResponse;
|
|
41
30
|
let selectedLanguages: string[] = [];
|
|
42
31
|
|
|
43
|
-
if (
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
32
|
+
if (search !== undefined) {
|
|
33
|
+
const pageAux = Number(page);
|
|
34
|
+
const searchValue = search;
|
|
35
|
+
|
|
36
|
+
if (language != undefined) {
|
|
37
|
+
const aux = language;
|
|
38
|
+
selectedLanguages = aux.split(",");
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (searchValue) {
|
|
42
|
+
const service = new InformationUnitsService();
|
|
43
|
+
|
|
44
|
+
data = await service.getList({
|
|
45
|
+
queries: searchValue.split(" ").join(","),
|
|
46
|
+
page: pageAux,
|
|
47
|
+
fields: ["renditions", "class", "languages", "labels"],
|
|
48
|
+
languages: selectedLanguages
|
|
49
|
+
});
|
|
50
|
+
}
|
|
57
51
|
}
|
|
58
52
|
|
|
59
|
-
return {
|
|
60
|
-
data: data,
|
|
61
|
-
filters: {
|
|
62
|
-
searchValue: searchValue,
|
|
63
|
-
page: pageAux,
|
|
64
|
-
selectedLanguages: selectedLanguages,
|
|
65
|
-
availableLanguages: availableLanguagesAndCountries,
|
|
66
|
-
},
|
|
67
|
-
};
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
export const HomeLayout = async ({ searchParams }: HomeProps) => {
|
|
71
|
-
const { data, filters: { selectedLanguages, availableLanguages } } = await loadData(searchParams);
|
|
72
|
-
const jsonConfigs = await getCookie(SDK_CONFIG_KEY);
|
|
73
|
-
if (!jsonConfigs) {
|
|
74
|
-
return null;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
const configs: ConfigInterface = JSON.parse(jsonConfigs);
|
|
78
|
-
|
|
79
53
|
return (
|
|
80
|
-
<
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
54
|
+
<PageWrapper title="">
|
|
55
|
+
<HomePage
|
|
56
|
+
data={data}
|
|
57
|
+
configs={configs}
|
|
58
|
+
selectedLanguages={selectedLanguages}
|
|
59
|
+
availableLanguages={availableLanguagesAndCountries}
|
|
60
|
+
/>
|
|
61
|
+
</PageWrapper>
|
|
86
62
|
);
|
|
87
63
|
};
|
package/src/home/page.tsx
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
3
|
import React, { FC } from "react";
|
|
4
|
-
import { ConfigInterface,
|
|
4
|
+
import { ConfigInterface, informationUnitsResponse, LanguageAndCountries } from "@c-rex/interfaces";
|
|
5
5
|
import { call } from "@c-rex/utils";
|
|
6
6
|
import { Button } from "@c-rex/ui/button";
|
|
7
7
|
import { AutoComplete } from "@c-rex/components/autocomplete";
|
|
@@ -9,22 +9,17 @@ import { ResultList } from "@c-rex/components/result-list";
|
|
|
9
9
|
import { useTranslations } from 'next-intl'
|
|
10
10
|
import { parseAsInteger, parseAsString, useQueryStates } from 'nuqs'
|
|
11
11
|
import { DialogFilter } from "@c-rex/components/dialog-filter";
|
|
12
|
-
import {
|
|
12
|
+
import { getCookieInFront } from "@c-rex/utils";
|
|
13
13
|
import { CONTENT_LANG_KEY } from "@c-rex/constants";
|
|
14
14
|
|
|
15
15
|
interface HomePageProps {
|
|
16
|
-
data:
|
|
16
|
+
data: informationUnitsResponse;
|
|
17
17
|
selectedLanguages: string[];
|
|
18
|
-
availableLanguages:
|
|
18
|
+
availableLanguages: LanguageAndCountries[];
|
|
19
19
|
configs: ConfigInterface
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
export const HomePage: FC<HomePageProps> = ({
|
|
23
|
-
data,
|
|
24
|
-
selectedLanguages,
|
|
25
|
-
availableLanguages,
|
|
26
|
-
configs
|
|
27
|
-
}) => {
|
|
22
|
+
export const HomePage: FC<HomePageProps> = ({ data, selectedLanguages, availableLanguages, configs }) => {
|
|
28
23
|
const t = useTranslations();
|
|
29
24
|
const [params, setParams] = useQueryStates({
|
|
30
25
|
search: {
|
|
@@ -48,14 +43,17 @@ export const HomePage: FC<HomePageProps> = ({
|
|
|
48
43
|
}
|
|
49
44
|
|
|
50
45
|
const onSelect = (value: string) => {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
46
|
+
//show loading
|
|
47
|
+
getCookieInFront(CONTENT_LANG_KEY)
|
|
48
|
+
.then((cookie) => cookie.value)
|
|
49
|
+
.then((cookie) => {
|
|
50
|
+
setParams({
|
|
51
|
+
search: value,
|
|
52
|
+
operator: "OR",
|
|
53
|
+
page: 1,
|
|
54
|
+
language: cookie,
|
|
55
|
+
});
|
|
57
56
|
});
|
|
58
|
-
});
|
|
59
57
|
};
|
|
60
58
|
|
|
61
59
|
return (
|
|
@@ -71,7 +69,6 @@ export const HomePage: FC<HomePageProps> = ({
|
|
|
71
69
|
<div className="col-span-12 sm:col-span-3 md:col-span-2">
|
|
72
70
|
<div className="flex justify-end">
|
|
73
71
|
<DialogFilter
|
|
74
|
-
|
|
75
72
|
startSelectedLanguages={selectedLanguages}
|
|
76
73
|
availableLanguages={availableLanguages}
|
|
77
74
|
trigger={(
|
|
@@ -82,7 +79,11 @@ export const HomePage: FC<HomePageProps> = ({
|
|
|
82
79
|
</div>
|
|
83
80
|
</div>
|
|
84
81
|
|
|
85
|
-
<ResultList
|
|
82
|
+
<ResultList
|
|
83
|
+
configs={configs}
|
|
84
|
+
items={data.items}
|
|
85
|
+
pagination={data.pageInfo}
|
|
86
|
+
/>
|
|
86
87
|
</div>
|
|
87
88
|
);
|
|
88
89
|
};
|
package/src/layout.tsx
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { NavBar } from "@c-rex/components/navbar";
|
|
3
2
|
import { NextIntlClientProvider } from 'next-intl';
|
|
4
3
|
import { getLocale } from "next-intl/server";
|
|
4
|
+
import { Toaster } from "@c-rex/ui/sonner"
|
|
5
|
+
import { LanguageService } from "@c-rex/services";
|
|
6
|
+
import { getConfigs } from "@c-rex/utils/next-cookies";
|
|
7
|
+
import { SetCookies } from "@c-rex/components/cookies";
|
|
8
|
+
import { NuqsAdapter } from 'nuqs/adapters/next/app'
|
|
5
9
|
|
|
6
10
|
interface DefaultRootLayoutProps {
|
|
7
11
|
children: React.ReactNode;
|
|
@@ -9,20 +13,24 @@ interface DefaultRootLayoutProps {
|
|
|
9
13
|
|
|
10
14
|
export const DefaultRootLayout = async ({ children }: DefaultRootLayoutProps) => {
|
|
11
15
|
const locale = await getLocale();
|
|
16
|
+
const configs = await getConfigs();
|
|
17
|
+
const languageService = new LanguageService(configs.languageSwitcher.endpoint);
|
|
18
|
+
const availableLanguages = await languageService.getLanguagesAndCountries();
|
|
12
19
|
|
|
13
20
|
return (
|
|
14
|
-
<
|
|
15
|
-
<
|
|
16
|
-
|
|
17
|
-
<
|
|
18
|
-
<
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
21
|
+
<NuqsAdapter>
|
|
22
|
+
<html lang={locale} suppressHydrationWarning>
|
|
23
|
+
<head />
|
|
24
|
+
<body className="min-h-screen bg-background font-sans antialiased">
|
|
25
|
+
<div className="items-center flex flex-col">
|
|
26
|
+
<NextIntlClientProvider>
|
|
27
|
+
<Toaster />
|
|
28
|
+
<SetCookies configs={configs} availableLanguages={availableLanguages} />
|
|
29
|
+
{children}
|
|
30
|
+
</NextIntlClientProvider>
|
|
31
|
+
</div>
|
|
32
|
+
</body>
|
|
33
|
+
</html>
|
|
34
|
+
</NuqsAdapter>
|
|
27
35
|
);
|
|
28
36
|
}
|