@c-rex/templates 0.0.12 → 0.1.1

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.1",
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,6 +1,9 @@
1
- import { informationUnits } from "@c-rex/interfaces";
2
- import { InformationUnitsService } from "@c-rex/services";
1
+ import React from "react";
2
+ import { ConfigInterface, informationUnits } from "@c-rex/interfaces";
3
+ import { InformationUnitsService, LanguageService } from "@c-rex/services";
4
+ import { getConfigs, getCookie } from "@c-rex/utils/next-cookies";
3
5
  import { HomePage } from "./page";
6
+ import { SDK_CONFIG_KEY } from "@c-rex/constants";
4
7
 
5
8
  interface SearchParams {
6
9
  search?: string;
@@ -16,10 +19,23 @@ const loadData = async ({
16
19
  page,
17
20
  language,
18
21
  }: 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();
22
+ if (search === undefined || search === "") {
23
+ return {
24
+ data: { items: [] },
25
+ filters: {
26
+ searchValue: "",
27
+ page: 0,
28
+ selectedLanguage: [],
29
+ availableLanguages: [],
30
+ },
31
+ };
32
+ }
33
+
34
+ const pageAux = Number(page);
35
+ const configs = await getConfigs();
36
+ const searchValue = search as string;
37
+ const languageService = new LanguageService(configs.languageSwitcher.endpoint);
38
+ const availableLanguagesAndCountries = await languageService.getLanguagesAndCountries();
23
39
 
24
40
  let data = { items: [] } as unknown as informationUnits;
25
41
  let selectedLanguages: string[] = [];
@@ -30,12 +46,14 @@ const loadData = async ({
30
46
  }
31
47
 
32
48
  if (searchValue) {
33
- data = await service.getList(
34
- searchValue,
35
- pageAux,
36
- selectedLanguages,
37
- [],
38
- );
49
+ const service = new InformationUnitsService();
50
+
51
+ data = await service.getList({
52
+ queries: searchValue.split(" ").join(","),
53
+ page: pageAux,
54
+ fields: [],
55
+ languages: selectedLanguages
56
+ });
39
57
  }
40
58
 
41
59
  return {
@@ -43,16 +61,27 @@ const loadData = async ({
43
61
  filters: {
44
62
  searchValue: searchValue,
45
63
  page: pageAux,
46
- selectedLanguage: selectedLanguages,
47
- availableLanguages: availableLanguages,
64
+ selectedLanguages: selectedLanguages,
65
+ availableLanguages: availableLanguagesAndCountries,
48
66
  },
49
67
  };
50
68
  };
51
69
 
52
70
  export const HomeLayout = async ({ searchParams }: HomeProps) => {
53
- const { data } = await loadData(searchParams);
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);
54
78
 
55
79
  return (
56
- <HomePage data={data} />
80
+ <HomePage
81
+ data={data}
82
+ configs={configs}
83
+ selectedLanguages={selectedLanguages}
84
+ availableLanguages={availableLanguages}
85
+ />
57
86
  );
58
87
  };
package/src/home/page.tsx CHANGED
@@ -1,45 +1,61 @@
1
1
  "use client";
2
2
 
3
- import { FC } from "react";
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";
3
+ import React, { FC } from "react";
4
+ import { ConfigInterface, informationUnits } from "@c-rex/interfaces";
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";
13
14
 
14
15
  interface HomePageProps {
15
16
  data: informationUnits;
17
+ selectedLanguages: string[];
18
+ availableLanguages: any;
19
+ configs: ConfigInterface
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
+ configs
27
+ }) => {
28
+ const t = useTranslations();
29
+ const [params, setParams] = useQueryStates({
30
+ search: {
31
+ defaultValue: "",
32
+ parse(value) {
33
+ return value
34
+ },
35
+ },
36
+ operator: parseAsString,
37
+ language: parseAsString,
38
+ page: parseAsInteger,
39
+ }, {
40
+ history: 'push',
41
+ shallow: false,
42
+ });
43
+
44
+ const { search } = params;
21
45
 
22
46
  const onSearch = (value: string): Promise<string[]> => {
23
- const service = new InformationUnitsService();
24
- return service.getSuggestions(value);
25
-
47
+ return call('InformationUnitsService.getSuggestions', { query: value });
26
48
  }
27
49
 
28
50
  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
- ]);
51
+ getCookie(CONTENT_LANG_KEY).then((language) => {
52
+ setParams({
53
+ search: value,
54
+ operator: "OR",
55
+ page: 1,
56
+ language: language,
57
+ });
58
+ });
43
59
  };
44
60
 
45
61
  return (
@@ -47,19 +63,26 @@ export const HomePage: FC<HomePageProps> = ({ data }) => {
47
63
  <div className="grid grid-cols-12 gap-4 py-6">
48
64
  <div className="col-span-12 sm:col-span-9 md:col-span-10">
49
65
  <AutoComplete
50
- initialValue={initialValue ?? ""}
66
+ initialValue={search}
51
67
  onSearch={onSearch}
52
68
  onSelect={onSelect}
53
69
  />
54
70
  </div>
55
71
  <div className="col-span-12 sm:col-span-3 md:col-span-2">
56
72
  <div className="flex justify-end">
57
- <Button variant="default">Filters</Button>
73
+ <DialogFilter
74
+
75
+ startSelectedLanguages={selectedLanguages}
76
+ availableLanguages={availableLanguages}
77
+ trigger={(
78
+ <Button variant="default">{t("filters")}</Button>
79
+ )}
80
+ />
58
81
  </div>
59
82
  </div>
60
83
  </div>
61
84
 
62
- <ResultList items={data.items} />
85
+ <ResultList items={data.items} configs={configs} />
63
86
  </div>
64
87
  );
65
88
  };
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>