@c-rex/templates 0.0.12 → 0.1.0

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.0.12",
3
+ "version": "0.1.0",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "src"
@@ -41,13 +41,18 @@
41
41
  "typescript": "latest"
42
42
  },
43
43
  "dependencies": {
44
- "next": "^14",
45
- "react": "^18",
46
- "react-dom": "^18",
47
- "@c-rex/services": "*",
44
+ "@c-rex/components": "*",
45
+ "@c-rex/contexts": "*",
48
46
  "@c-rex/interfaces": "*",
47
+ "@c-rex/services": "*",
49
48
  "@c-rex/ui": "*",
50
49
  "@c-rex/utils": "*",
51
- "@c-rex/components": "*"
50
+ "i18next": "^25.1.3",
51
+ "next": "^14",
52
+ "next-intl": "^4.1.0",
53
+ "nuqs": "^2.4.3",
54
+ "react": "^18",
55
+ "react-dom": "^18",
56
+ "react-i18next": "^15.5.1"
52
57
  }
53
58
  }
@@ -1,5 +1,7 @@
1
+ import React from "react";
1
2
  import { informationUnits } from "@c-rex/interfaces";
2
- import { InformationUnitsService } from "@c-rex/services";
3
+ import { InformationUnitsService, LanguageService } from "@c-rex/services";
4
+ import { getConfigs } from "@c-rex/utils/next-cookies";
3
5
  import { HomePage } from "./page";
4
6
 
5
7
  interface SearchParams {
@@ -16,10 +18,23 @@ const loadData = async ({
16
18
  page,
17
19
  language,
18
20
  }: SearchParams): Promise<any> => {
19
- const service = new InformationUnitsService();
20
- const pageAux = page != undefined ? Number(page) : 0;
21
- const searchValue = search != undefined ? (search as string) : "";
22
- const availableLanguages = await service.getLanguages();
21
+ if (search === undefined || search === "") {
22
+ return {
23
+ data: { items: [] },
24
+ filters: {
25
+ searchValue: "",
26
+ page: 0,
27
+ selectedLanguage: [],
28
+ availableLanguages: [],
29
+ },
30
+ };
31
+ }
32
+
33
+ const pageAux = Number(page);
34
+ const configs = await getConfigs();
35
+ const searchValue = search as string;
36
+ const languageService = new LanguageService(configs.languageSwitcher.endpoint);
37
+ const availableLanguagesAndCountries = await languageService.getLanguagesAndCountries();
23
38
 
24
39
  let data = { items: [] } as unknown as informationUnits;
25
40
  let selectedLanguages: string[] = [];
@@ -30,12 +45,14 @@ const loadData = async ({
30
45
  }
31
46
 
32
47
  if (searchValue) {
33
- data = await service.getList(
34
- searchValue,
35
- pageAux,
36
- selectedLanguages,
37
- [],
38
- );
48
+ const service = new InformationUnitsService();
49
+
50
+ data = await service.getList({
51
+ queries: searchValue.split(" ").join(","),
52
+ page: pageAux,
53
+ fields: [],
54
+ languages: selectedLanguages
55
+ });
39
56
  }
40
57
 
41
58
  return {
@@ -43,16 +60,20 @@ const loadData = async ({
43
60
  filters: {
44
61
  searchValue: searchValue,
45
62
  page: pageAux,
46
- selectedLanguage: selectedLanguages,
47
- availableLanguages: availableLanguages,
63
+ selectedLanguages: selectedLanguages,
64
+ availableLanguages: availableLanguagesAndCountries,
48
65
  },
49
66
  };
50
67
  };
51
68
 
52
69
  export const HomeLayout = async ({ searchParams }: HomeProps) => {
53
- const { data } = await loadData(searchParams);
70
+ const { data, filters: { selectedLanguages, availableLanguages } } = await loadData(searchParams);
54
71
 
55
72
  return (
56
- <HomePage data={data} />
73
+ <HomePage
74
+ data={data}
75
+ selectedLanguages={selectedLanguages}
76
+ availableLanguages={availableLanguages}
77
+ />
57
78
  );
58
79
  };
package/src/home/page.tsx CHANGED
@@ -1,65 +1,89 @@
1
1
  "use client";
2
2
 
3
- import { FC } from "react";
3
+ import React, { FC } from "react";
4
4
  import { informationUnits } from "@c-rex/interfaces";
5
- import { InformationUnitsService } from "@c-rex/services";
6
- import { updateUrlWithParams } from "@c-rex/utils";
7
- import { useRouter } from "next/navigation";
5
+ import { call } from "@c-rex/utils";
8
6
  import { Button } from "@c-rex/ui/button";
9
7
  import { AutoComplete } from "@c-rex/components/autocomplete";
10
8
  import { ResultList } from "@c-rex/components/result-list";
11
-
12
- //import { useSearchContext } from '@/contexts/search'; TODO: replace for a lib how manage states from URL
9
+ import { useTranslations } from 'next-intl'
10
+ import { parseAsInteger, parseAsString, useQueryStates } from 'nuqs'
11
+ import { DialogFilter } from "@c-rex/components/dialog-filter";
12
+ import { getCookie } from "@c-rex/utils/next-cookies";
13
+ import { CONTENT_LANG_KEY } from "@c-rex/constants";
14
+ import { SearchProvider } from "@c-rex/contexts/search";
13
15
 
14
16
  interface HomePageProps {
15
17
  data: informationUnits;
18
+ selectedLanguages: string[];
19
+ availableLanguages: any;
16
20
  }
17
21
 
18
- export const HomePage: FC<HomePageProps> = ({ data }) => {
19
- const router = useRouter();
20
- const initialValue = null;
22
+ export const HomePage: FC<HomePageProps> = ({
23
+ data,
24
+ selectedLanguages,
25
+ availableLanguages,
26
+ }) => {
27
+ const t = useTranslations();
28
+ const [params, setParams] = useQueryStates({
29
+ search: {
30
+ defaultValue: "",
31
+ parse(value) {
32
+ return value
33
+ },
34
+ },
35
+ operator: parseAsString,
36
+ language: parseAsString,
37
+ page: parseAsInteger,
38
+ }, {
39
+ history: 'push',
40
+ shallow: false,
41
+ });
21
42
 
22
- const onSearch = (value: string): Promise<string[]> => {
23
- const service = new InformationUnitsService();
24
- return service.getSuggestions(value);
43
+ const { search } = params;
25
44
 
45
+ const onSearch = (value: string): Promise<string[]> => {
46
+ return call('InformationUnitsService.getSuggestions', { query: value });
26
47
  }
27
48
 
28
49
  const onSelect = (value: string) => {
29
- updateUrlWithParams(router, [
30
- {
31
- key: "search",
32
- value: value.split(" ").join(","),
33
- },
34
- {
35
- key: "operator",
36
- value: "OR",
37
- },
38
- {
39
- key: "page",
40
- value: "1",
41
- },
42
- ]);
50
+ getCookie(CONTENT_LANG_KEY).then((language) => {
51
+ setParams({
52
+ search: value,
53
+ operator: "OR",
54
+ page: 1,
55
+ language: language,
56
+ });
57
+ });
43
58
  };
44
59
 
45
60
  return (
46
- <div className="container">
47
- <div className="grid grid-cols-12 gap-4 py-6">
48
- <div className="col-span-12 sm:col-span-9 md:col-span-10">
49
- <AutoComplete
50
- initialValue={initialValue ?? ""}
51
- onSearch={onSearch}
52
- onSelect={onSelect}
53
- />
54
- </div>
55
- <div className="col-span-12 sm:col-span-3 md:col-span-2">
56
- <div className="flex justify-end">
57
- <Button variant="default">Filters</Button>
61
+ <SearchProvider>
62
+ <div className="container">
63
+ <div className="grid grid-cols-12 gap-4 py-6">
64
+ <div className="col-span-12 sm:col-span-9 md:col-span-10">
65
+ <AutoComplete
66
+ initialValue={search}
67
+ onSearch={onSearch}
68
+ onSelect={onSelect}
69
+ />
70
+ </div>
71
+ <div className="col-span-12 sm:col-span-3 md:col-span-2">
72
+ <div className="flex justify-end">
73
+ <DialogFilter
74
+
75
+ startSelectedLanguages={selectedLanguages}
76
+ availableLanguages={availableLanguages}
77
+ trigger={(
78
+ <Button variant="default">{t("filters")}</Button>
79
+ )}
80
+ />
81
+ </div>
58
82
  </div>
59
83
  </div>
60
- </div>
61
84
 
62
- <ResultList items={data.items} />
63
- </div>
85
+ <ResultList items={data.items} />
86
+ </div>
87
+ </SearchProvider>
64
88
  );
65
89
  };
package/src/info/page.tsx CHANGED
@@ -1,65 +1,46 @@
1
1
  "use client";
2
2
 
3
- import { FC, useEffect, useRef, useState } from "react";
4
- import { InformationUnitsService } from "@c-rex/services";
3
+ import React, { FC } from "react";
5
4
  import { TreeOfContent } from "@c-rex/interfaces";
6
- import { SidebarInset, SidebarProvider, SidebarTrigger } from "@c-rex/ui/sidebar";
7
- import { Separator } from "@c-rex/ui/separator";
5
+ import { SidebarInset, SidebarProvider } from "@c-rex/ui/sidebar";
8
6
  import { AppSidebar } from "@c-rex/components/sidebar";
9
7
  import { Breadcrumb } from "@c-rex/components/breadcrumb";
10
- //import { generateTreeOfContent } from "@c-rex/utils";
11
- //import { generateBreadcrumbItems } from "@c-rex/utils";
12
8
 
13
9
  interface InfoPageTemplateProps {
14
10
  htmlContent: string;
15
- id: string;
11
+ breadcrumbItems: TreeOfContent[];
12
+ sidebarItems: TreeOfContent[];
13
+ availableVersions: any
16
14
  }
17
15
 
18
- export const InfoPageTemplate: FC<InfoPageTemplateProps> = ({ htmlContent, id }) => {
19
- const [breadcrumbItems, setBreadcrumbItems] = useState<TreeOfContent[]>([]);
20
- const [sidebarItems, setSidebarItems] = useState<TreeOfContent[]>([]);
21
- const [loading, setLoading] = useState(true);
22
- const effectRan = useRef(false);
23
-
24
- useEffect(() => {
25
- if (effectRan.current) return;
26
- effectRan.current = true;
27
-
28
- const loadNavigationData = async () => {
29
- const service = new InformationUnitsService();
30
- const informationUnitsItem = await service.getItem(id);
31
-
32
- if (informationUnitsItem?.directoryNodes != undefined) {
33
- /*
34
- const treeOfContent = await generateTreeOfContent(
35
- informationUnitsItem.directoryNodes,
36
- );
37
- const breadcrumbItems = generateBreadcrumbItems(treeOfContent);
38
-
39
- setBreadcrumbItems(breadcrumbItems);
40
- setSidebarItems(treeOfContent);
41
- */
42
- setLoading(false);
43
- }
44
- };
45
-
46
- loadNavigationData();
47
- }, [id]);
48
-
16
+ export const InfoPageTemplate: FC<InfoPageTemplateProps> = ({
17
+ htmlContent,
18
+ breadcrumbItems,
19
+ sidebarItems,
20
+ availableVersions
21
+ }) => {
49
22
  return (
50
23
  <SidebarProvider>
51
- <AppSidebar data={sidebarItems} loading={loading} />
24
+ <AppSidebar
25
+ data={sidebarItems}
26
+ availableVersions={availableVersions}
27
+ className="top-20"
28
+ side="right"
29
+ variant="floating"
30
+ collapsible="icon"
31
+ />
52
32
  <SidebarInset>
53
- <header className="flex h-16 shrink-0 items-center">
54
- <SidebarTrigger className="-ml-1" />
55
- <Separator orientation="vertical" className="mr-2 h-4" />
56
- <Breadcrumb items={breadcrumbItems} loading={loading} />
57
- </header>
58
-
59
- <div
60
- className="flex"
61
- dangerouslySetInnerHTML={{ __html: htmlContent }}
62
- />
33
+ <div className="container flex flex-col">
34
+ <header className="flex h-16 shrink-0 items-center justify-between">
35
+ <div className="flex shrink-0 items-center">
36
+ <Breadcrumb items={breadcrumbItems} />
37
+ </div>
38
+ </header>
39
+
40
+ <div
41
+ dangerouslySetInnerHTML={{ __html: htmlContent }}
42
+ />
43
+ </div>
63
44
  </SidebarInset>
64
45
  </SidebarProvider>
65
46
  );
package/src/layout.tsx CHANGED
@@ -1,24 +1,26 @@
1
- //import "@/styles/global.css";
2
-
3
1
  import React from "react";
4
2
  import { NavBar } from "@c-rex/components/navbar";
3
+ import { NextIntlClientProvider } from 'next-intl';
4
+ import { getLocale } from "next-intl/server";
5
5
 
6
6
  interface DefaultRootLayoutProps {
7
7
  children: React.ReactNode;
8
8
  }
9
9
 
10
- export const DefaultRootLayout = ({
11
- children,
12
- }: DefaultRootLayoutProps) => {
10
+ export const DefaultRootLayout = async ({ children }: DefaultRootLayoutProps) => {
11
+ const locale = await getLocale();
12
+
13
13
  return (
14
- <html lang="en" suppressHydrationWarning>
14
+ <html lang={locale} suppressHydrationWarning>
15
15
  <head />
16
16
  <body className="min-h-screen bg-background font-sans antialiased">
17
17
  <div className="items-center flex flex-col">
18
+ <NextIntlClientProvider>
18
19
 
19
- <NavBar />
20
+ <NavBar />
20
21
 
21
- <div className="container pt-6">{children}</div>
22
+ {children}
23
+ </NextIntlClientProvider>
22
24
  </div>
23
25
  </body>
24
26
  </html>