@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@c-rex/templates",
3
- "version": "0.1.2",
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 { SidebarInset, SidebarProvider } from "@c-rex/ui/sidebar";
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
- <SidebarProvider>
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 { SidebarInset, SidebarProvider } from "@c-rex/ui/sidebar";
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 = async ({ params }: { params: { id: string } }) => {
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
- <SidebarProvider>
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
+ };
@@ -1,87 +1,63 @@
1
1
  import React from "react";
2
- import { ConfigInterface, informationUnits } from "@c-rex/interfaces";
2
+ import { informationUnitsResponse } from "@c-rex/interfaces";
3
3
  import { InformationUnitsService, LanguageService } from "@c-rex/services";
4
- import { getConfigs, getCookie } from "@c-rex/utils/next-cookies";
4
+ import { getConfigs } from "@c-rex/utils/next-cookies";
5
5
  import { HomePage } from "./page";
6
- import { SDK_CONFIG_KEY } from "@c-rex/constants";
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: SearchParams;
9
+ searchParams: {
10
+ search?: string;
11
+ page?: string;
12
+ language?: string;
13
+ };
15
14
  }
16
15
 
17
- const loadData = async ({
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 = { items: [] } as unknown as informationUnits;
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 (language != undefined) {
44
- const aux = language as string;
45
- selectedLanguages = aux.split(",");
46
- }
47
-
48
- if (searchValue) {
49
- const service = new InformationUnitsService();
50
-
51
- data = await service.getList({
52
- queries: searchValue.split(" ").join(","),
53
- page: pageAux,
54
- fields: ["renditions", "class", "languages", "labels"],
55
- languages: selectedLanguages
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
- <HomePage
81
- data={data}
82
- configs={configs}
83
- selectedLanguages={selectedLanguages}
84
- availableLanguages={availableLanguages}
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, informationUnits } from "@c-rex/interfaces";
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 { getCookie } from "@c-rex/utils/next-cookies";
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: informationUnits;
16
+ data: informationUnitsResponse;
17
17
  selectedLanguages: string[];
18
- availableLanguages: any;
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
- getCookie(CONTENT_LANG_KEY).then((language) => {
52
- setParams({
53
- search: value,
54
- operator: "OR",
55
- page: 1,
56
- language: language,
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 items={data.items} configs={configs} />
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
- <html lang={locale} suppressHydrationWarning>
15
- <head />
16
- <body className="min-h-screen bg-background font-sans antialiased">
17
- <div className="items-center flex flex-col">
18
- <NextIntlClientProvider>
19
-
20
- <NavBar />
21
-
22
- {children}
23
- </NextIntlClientProvider>
24
- </div>
25
- </body>
26
- </html>
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
  }