@hedhog/admin 0.12.1 → 0.12.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.
Files changed (94) hide show
  1. package/{hedhog.yaml → bkp.hedhog.yaml} +207 -9
  2. package/dist/auth/auth.controller.d.ts +1 -10
  3. package/dist/auth/auth.controller.d.ts.map +1 -1
  4. package/dist/auth/auth.service.d.ts +1 -10
  5. package/dist/auth/auth.service.d.ts.map +1 -1
  6. package/dist/auth/auth.service.js.map +1 -1
  7. package/dist/auth/auth.service.spec.d.ts +0 -1
  8. package/dist/auth/auth.service.spec.js +171 -161
  9. package/dist/auth/auth.service.spec.js.map +1 -1
  10. package/dist/menu/menu.controller.d.ts +6 -33
  11. package/dist/menu/menu.controller.d.ts.map +1 -1
  12. package/dist/menu/menu.service.d.ts +6 -33
  13. package/dist/menu/menu.service.d.ts.map +1 -1
  14. package/dist/menu/menu.service.js.map +1 -1
  15. package/dist/role/guards/role.guard.js.map +1 -1
  16. package/dist/role/role.controller.d.ts +5 -5
  17. package/dist/role/role.service.d.ts +5 -5
  18. package/dist/role/role.service.js.map +1 -1
  19. package/dist/route/route.controller.d.ts +6 -27
  20. package/dist/route/route.controller.d.ts.map +1 -1
  21. package/dist/route/route.service.d.ts +6 -27
  22. package/dist/route/route.service.d.ts.map +1 -1
  23. package/dist/route/route.service.js.map +1 -1
  24. package/dist/screen/screen.controller.d.ts +6 -24
  25. package/dist/screen/screen.controller.d.ts.map +1 -1
  26. package/dist/screen/screen.service.d.ts +6 -24
  27. package/dist/screen/screen.service.d.ts.map +1 -1
  28. package/dist/screen/screen.service.js.map +1 -1
  29. package/dist/user/user.controller.d.ts +5 -32
  30. package/dist/user/user.controller.d.ts.map +1 -1
  31. package/dist/user/user.service.d.ts +5 -32
  32. package/dist/user/user.service.d.ts.map +1 -1
  33. package/dist/user/user.service.js.map +1 -1
  34. package/dist/user/user.service.spec.d.ts +0 -1
  35. package/dist/user/user.service.spec.js +259 -250
  36. package/dist/user/user.service.spec.js.map +1 -1
  37. package/frontend/menu/components/create-panel.tsx.ejs +55 -0
  38. package/frontend/menu/components/update-panel.tsx.ejs +67 -0
  39. package/frontend/menu/locales/en/admin.menu.json +11 -0
  40. package/frontend/menu/locales/pt/admin.menu.json +11 -0
  41. package/frontend/menu/react-query/handlers.ts.ejs +28 -0
  42. package/frontend/menu/react-query/requests.ts.ejs +56 -0
  43. package/frontend/menu-locale/locales/en/admin.menu-locale.json +11 -0
  44. package/frontend/menu-locale/locales/pt/admin.menu-locale.json +11 -0
  45. package/frontend/menu-screen/locales/en/admin.menu-screen.json +11 -0
  46. package/frontend/menu-screen/locales/pt/admin.menu-screen.json +11 -0
  47. package/frontend/multifactor/components/create-panel.tsx.ejs +55 -0
  48. package/frontend/multifactor/components/update-panel.tsx.ejs +70 -0
  49. package/frontend/multifactor/locales/en/admin.multifactor.json +11 -0
  50. package/frontend/multifactor/locales/pt/admin.multifactor.json +11 -0
  51. package/frontend/multifactor/react-query/handlers.ts.ejs +28 -0
  52. package/frontend/multifactor/react-query/requests.ts.ejs +59 -0
  53. package/frontend/multifactor-locale/locales/en/admin.multifactor-locale.json +11 -0
  54. package/frontend/multifactor-locale/locales/pt/admin.multifactor-locale.json +11 -0
  55. package/frontend/screen/components/create-panel.tsx.ejs +55 -0
  56. package/frontend/screen/components/update-panel.tsx.ejs +67 -0
  57. package/frontend/screen/locales/en/admin.screen.json +11 -0
  58. package/frontend/screen/locales/pt/admin.screen.json +11 -0
  59. package/frontend/screen/react-query/handlers.ts.ejs +28 -0
  60. package/frontend/screen/react-query/requests.ts.ejs +56 -0
  61. package/frontend/screen-locale/locales/en/admin.screen-locale.json +11 -0
  62. package/frontend/screen-locale/locales/pt/admin.screen-locale.json +11 -0
  63. package/frontend/translation/components/create-panel.tsx.ejs +52 -0
  64. package/frontend/translation/components/update-panel.tsx.ejs +67 -0
  65. package/frontend/translation/fields/en.json +1 -0
  66. package/frontend/translation/fields/pt.json +1 -0
  67. package/frontend/translation/locales/en/admin.translation.json +11 -0
  68. package/frontend/translation/locales/pt/admin.translation.json +11 -0
  69. package/frontend/translation/modules/en.json +1 -0
  70. package/frontend/translation/modules/pt.json +1 -0
  71. package/frontend/translation/react-query/handlers.ts.ejs +28 -0
  72. package/frontend/translation/react-query/requests.ts.ejs +58 -0
  73. package/frontend/translation-namespace/components/create-panel.tsx.ejs +53 -0
  74. package/frontend/translation-namespace/components/update-panel.tsx.ejs +70 -0
  75. package/frontend/translation-namespace/locales/en/admin.translation-namespace.json +11 -0
  76. package/frontend/translation-namespace/locales/pt/admin.translation-namespace.json +11 -0
  77. package/frontend/translation-namespace/react-query/handlers.ts.ejs +28 -0
  78. package/frontend/translation-namespace/react-query/requests.ts.ejs +60 -0
  79. package/frontend/user/components/create-panel.tsx.ejs +52 -0
  80. package/frontend/user/components/update-panel.tsx.ejs +64 -0
  81. package/frontend/user/locales/en/admin.user.json +11 -0
  82. package/frontend/user/locales/pt/admin.user.json +11 -0
  83. package/frontend/user/react-query/handlers.ts.ejs +28 -0
  84. package/frontend/user/react-query/requests.ts.ejs +55 -0
  85. package/package.json +43 -43
  86. package/src/auth/auth.service.spec.ts +196 -196
  87. package/src/auth/auth.service.ts +10 -10
  88. package/src/menu/menu.service.ts +16 -16
  89. package/src/role/guards/role.guard.ts +2 -2
  90. package/src/role/role.service.ts +17 -17
  91. package/src/route/route.service.ts +13 -13
  92. package/src/screen/screen.service.ts +14 -14
  93. package/src/user/user.service.spec.ts +294 -294
  94. package/src/user/user.service.ts +10 -10
@@ -0,0 +1,67 @@
1
+ import FormPanel, {
2
+ FormPanelRef,
3
+ getFieldsLocale,
4
+ } from "@/components/panels/form-panel";
5
+ import { Overlay } from "@/components/custom/overlay";
6
+ import { TabPanel } from "@/components/panels/tab-panel";
7
+ import { useMenuGet, useMenuUpdate } from "@/features/admin/menu";
8
+ import useEffectAfterFirstUpdate from "@/hooks/use-effect-after-first-update";
9
+ import { Menu } from "@/types/models";
10
+ import { useState, forwardRef, useImperativeHandle, useRef } from "react";
11
+ import { useTranslation } from "react-i18next";
12
+ import { IconEdit, IconPlus, IconTrash } from "@tabler/icons-react";
13
+
14
+ export type MenuUpdatePanelProps = {
15
+ data: Menu;
16
+ onUpdated?: (data: Menu) => void;
17
+ };
18
+
19
+ const MenuUpdatePanel = forwardRef(
20
+ ({ data, onUpdated }: MenuUpdatePanelProps, ref) => {
21
+ const { t } = useTranslation(["actions", "fields", "translations"]);
22
+ const { data: item, isLoading } = useMenuGet(data.id as number);
23
+ const { mutate: menuUpdate } = useMenuUpdate();
24
+ const formRef = useRef<FormPanelRef>(null);
25
+
26
+ useEffectAfterFirstUpdate(() => {
27
+ if (item && formRef.current) {
28
+ formRef.current.setValuesFromItem(item);
29
+ }
30
+ }, [item]);
31
+
32
+ useImperativeHandle(ref, () => ({}));
33
+
34
+ return (
35
+ <TabPanel
36
+ activeTabIndex={0}
37
+ tabs={[
38
+ {
39
+ title: t("details", { ns: "actions" }),
40
+ children: (
41
+ <Overlay loading={isLoading}>
42
+ <FormPanel
43
+ ref={formRef}
44
+ fields={[...getFieldsLocale([{ name: "name" }], item)]}
45
+ button={{ text: t("save", { ns: "actions" }) }}
46
+ onSubmit={(data) => {
47
+ menuUpdate({
48
+ id: data.id,
49
+ data,
50
+ });
51
+ if (typeof onUpdated === "function") {
52
+ onUpdated(data);
53
+ }
54
+ }}
55
+ />
56
+ </Overlay>
57
+ ),
58
+ },
59
+ ]}
60
+ />
61
+ );
62
+ },
63
+ );
64
+
65
+ MenuUpdatePanel.displayName = "MenuUpdatePanel";
66
+
67
+ export default MenuUpdatePanel;
@@ -0,0 +1,11 @@
1
+ {
2
+ "create": "Create menu",
3
+ "createText": "Fill the menu informations.",
4
+ "createTooltip": "Create new menu",
5
+ "delete": "Delete menu",
6
+ "deleteText": "Are you sure to delete these menu?",
7
+ "deleteTooltip": "Delete the selected menu",
8
+ "edit": "Edit menu",
9
+ "editText": "View and edit menu information.",
10
+ "editTooltip": "Edit the selected menu"
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "create": "Criar menu",
3
+ "createText": "Preencha as informações do menu.",
4
+ "createTooltip": "Criar novo menu",
5
+ "delete": "Excluir menu",
6
+ "deleteText": "Você tem certeza de que deseja excluir este menu?",
7
+ "deleteTooltip": "Excluir o menu selecionado",
8
+ "edit": "Editar menu",
9
+ "editText": "Ver e editar informações do menu.",
10
+ "editTooltip": "Editar o menu selecionado"
11
+ }
@@ -0,0 +1,28 @@
1
+ import { useDefaultMutation } from "@/hooks/use-default-mutation";
2
+ import { useQuery } from "@tanstack/react-query";
3
+ import { requests } from "./requests";
4
+
5
+ const scope = "menu";
6
+
7
+ export function useMenuCreate() {
8
+ const { menuCreate } = requests();
9
+ return useDefaultMutation(scope, "create", menuCreate);
10
+ }
11
+
12
+ export function useMenuDelete() {
13
+ const { menuDelete } = requests();
14
+ return useDefaultMutation(scope, "delete", menuDelete);
15
+ }
16
+
17
+ export function useMenuUpdate() {
18
+ const { menuUpdate } = requests();
19
+ return useDefaultMutation(scope, "update", menuUpdate);
20
+ }
21
+
22
+ export function useMenuGet(id: number) {
23
+ const { menuGet } = requests();
24
+ return useQuery({
25
+ queryKey: [scope, "get"],
26
+ queryFn: () => menuGet(id),
27
+ });
28
+ }
@@ -0,0 +1,56 @@
1
+ import { useApp } from "@/hooks/use-app";
2
+ import { Delete, PaginationParams, PaginationResult } from "@/types";
3
+ import { Menu } from "@/types/models";
4
+ import { HttpMethod } from "@/types/http-method";
5
+ import { formatDataWithLocale } from "@hedhog/utils";
6
+
7
+ export function requests() {
8
+ const { request } = useApp();
9
+
10
+ const menuList = async (params: PaginationParams) => {
11
+ return request<PaginationResult<Menu>>({
12
+ url: "/menu",
13
+ params,
14
+ }).then((res) => res.data);
15
+ };
16
+
17
+ const menuGet = async (id: number) => {
18
+ return request<Menu>({
19
+ url: `/menu/${id}`,
20
+ }).then((res) => res.data);
21
+ };
22
+
23
+ const menuCreate = async (params: { data: Menu }) => {
24
+ const { data } = params;
25
+ return request<Menu>({
26
+ url: "/menu",
27
+ method: HttpMethod.POST,
28
+ data: formatDataWithLocale(data),
29
+ }).then((res) => res.data);
30
+ };
31
+
32
+ const menuDelete = async (ids: number[]) => {
33
+ return request<Delete>({
34
+ url: "/menu",
35
+ data: { ids },
36
+ method: HttpMethod.DELETE,
37
+ }).then((res) => res.data);
38
+ };
39
+
40
+ const menuUpdate = async (params: { id: number; data: Menu }) => {
41
+ const { id, data } = params;
42
+ return request<Menu>({
43
+ url: `/menu/${id}`,
44
+ method: HttpMethod.PATCH,
45
+ data: formatDataWithLocale(data),
46
+ }).then((res) => res.data);
47
+ };
48
+
49
+ return {
50
+ menuCreate,
51
+ menuUpdate,
52
+ menuDelete,
53
+ menuList,
54
+ menuGet,
55
+ };
56
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "create": "Create menu locale",
3
+ "createText": "Fill the menu locale informations.",
4
+ "createTooltip": "Create new menu locale",
5
+ "delete": "Delete menu locale",
6
+ "deleteText": "Are you sure to delete these menu locale?",
7
+ "deleteTooltip": "Delete the selected menu locale",
8
+ "edit": "Edit menu locale",
9
+ "editText": "View and edit menu locale information.",
10
+ "editTooltip": "Edit the selected menu locale"
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "create": "Criar menu locale",
3
+ "createText": "Preencha as informações do menu locale.",
4
+ "createTooltip": "Criar novo menu locale",
5
+ "delete": "Excluir menu locale",
6
+ "deleteText": "Você tem certeza de que deseja excluir esses menu locale?",
7
+ "deleteTooltip": "Excluir o menu locale selecionado",
8
+ "edit": "Editar menu locale",
9
+ "editText": "Visualizar e editar informações do menu locale.",
10
+ "editTooltip": "Editar o menu locale selecionado"
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "create": "Create menu screen",
3
+ "createText": "Fill the menu screen informations.",
4
+ "createTooltip": "Create new menu screen",
5
+ "delete": "Delete menu screen",
6
+ "deleteText": "Are you sure to delete these menu screen?",
7
+ "deleteTooltip": "Delete the selected menu screen",
8
+ "edit": "Edit menu screen",
9
+ "editText": "View and edit menu screen information.",
10
+ "editTooltip": "Edit the selected menu screen"
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "create": "Criar menu screen",
3
+ "createText": "Preencha as informações do menu screen.",
4
+ "createTooltip": "Criar novo menu screen",
5
+ "delete": "Excluir menu screen",
6
+ "deleteText": "Você tem certeza de que deseja excluir estes menu screen?",
7
+ "deleteTooltip": "Excluir o menu screen selecionado",
8
+ "edit": "Editar menu screen",
9
+ "editText": "Visualizar e editar as informações do menu screen.",
10
+ "editTooltip": "Editar o menu screen selecionado"
11
+ }
@@ -0,0 +1,55 @@
1
+ import FormPanel, {
2
+ FormPanelRef,
3
+ getFieldsLocale,
4
+ } from "@/components/panels/form-panel";
5
+
6
+ import { useMultifactorCreate } from "@/features/admin/multifactor";
7
+ import { Multifactor } from "@/types/models";
8
+ import { forwardRef, useImperativeHandle, useRef } from "react";
9
+ import { useTranslation } from "react-i18next";
10
+
11
+ export type MultifactorCreatePanelRef = {
12
+ submit: () => void;
13
+ };
14
+
15
+ export type MultifactorCreatePanelProps = {
16
+ onCreated?: (data: Multifactor) => void;
17
+ };
18
+
19
+ const MultifactorCreatePanel = forwardRef(
20
+ ({ onCreated }: MultifactorCreatePanelProps, ref) => {
21
+ const formRef = useRef<FormPanelRef>(null);
22
+ const { t } = useTranslation(["actions", "fields", "translations"]);
23
+ const { mutateAsync: createMultifactor } = useMultifactorCreate();
24
+
25
+ useImperativeHandle(
26
+ ref,
27
+ () => ({
28
+ submit: () => {
29
+ formRef.current?.submit();
30
+ },
31
+ }),
32
+ [formRef],
33
+ );
34
+
35
+ return (
36
+ <FormPanel
37
+ ref={formRef}
38
+ fields={[...getFieldsLocale([{ name: "name" }])]}
39
+ button={{ text: t("create", { ns: "actions" }) }}
40
+ onSubmit={async (data) => {
41
+ const createdData = await createMultifactor({
42
+ data,
43
+ });
44
+ if (typeof onCreated === "function") {
45
+ onCreated(createdData as any);
46
+ }
47
+ }}
48
+ />
49
+ );
50
+ },
51
+ );
52
+
53
+ MultifactorCreatePanel.displayName = "MultifactorCreatePanel";
54
+
55
+ export default MultifactorCreatePanel;
@@ -0,0 +1,70 @@
1
+ import FormPanel, {
2
+ FormPanelRef,
3
+ getFieldsLocale,
4
+ } from "@/components/panels/form-panel";
5
+ import { Overlay } from "@/components/custom/overlay";
6
+ import { TabPanel } from "@/components/panels/tab-panel";
7
+ import {
8
+ useMultifactorGet,
9
+ useMultifactorUpdate,
10
+ } from "@/features/admin/multifactor";
11
+ import useEffectAfterFirstUpdate from "@/hooks/use-effect-after-first-update";
12
+ import { Multifactor } from "@/types/models";
13
+ import { useState, forwardRef, useImperativeHandle, useRef } from "react";
14
+ import { useTranslation } from "react-i18next";
15
+ import { IconEdit, IconPlus, IconTrash } from "@tabler/icons-react";
16
+
17
+ export type MultifactorUpdatePanelProps = {
18
+ data: Multifactor;
19
+ onUpdated?: (data: Multifactor) => void;
20
+ };
21
+
22
+ const MultifactorUpdatePanel = forwardRef(
23
+ ({ data, onUpdated }: MultifactorUpdatePanelProps, ref) => {
24
+ const { t } = useTranslation(["actions", "fields", "translations"]);
25
+ const { data: item, isLoading } = useMultifactorGet(data.id as number);
26
+ const { mutate: multifactorUpdate } = useMultifactorUpdate();
27
+ const formRef = useRef<FormPanelRef>(null);
28
+
29
+ useEffectAfterFirstUpdate(() => {
30
+ if (item && formRef.current) {
31
+ formRef.current.setValuesFromItem(item);
32
+ }
33
+ }, [item]);
34
+
35
+ useImperativeHandle(ref, () => ({}));
36
+
37
+ return (
38
+ <TabPanel
39
+ activeTabIndex={0}
40
+ tabs={[
41
+ {
42
+ title: t("details", { ns: "actions" }),
43
+ children: (
44
+ <Overlay loading={isLoading}>
45
+ <FormPanel
46
+ ref={formRef}
47
+ fields={[...getFieldsLocale([{ name: "name" }], item)]}
48
+ button={{ text: t("save", { ns: "actions" }) }}
49
+ onSubmit={(data) => {
50
+ multifactorUpdate({
51
+ id: data.id,
52
+ data,
53
+ });
54
+ if (typeof onUpdated === "function") {
55
+ onUpdated(data);
56
+ }
57
+ }}
58
+ />
59
+ </Overlay>
60
+ ),
61
+ },
62
+ ]}
63
+ />
64
+ );
65
+ },
66
+ );
67
+
68
+ MultifactorUpdatePanel.displayName = "MultifactorUpdatePanel";
69
+
70
+ export default MultifactorUpdatePanel;
@@ -0,0 +1,11 @@
1
+ {
2
+ "create": "Create multifactor",
3
+ "createText": "Fill the multifactor informations.",
4
+ "createTooltip": "Create new multifactor",
5
+ "delete": "Delete multifactor",
6
+ "deleteText": "Are you sure to delete these multifactor?",
7
+ "deleteTooltip": "Delete the selected multifactor",
8
+ "edit": "Edit multifactor",
9
+ "editText": "View and edit multifactor information.",
10
+ "editTooltip": "Edit the selected multifactor"
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "create": "Criar multifactor",
3
+ "createText": "Preencha as informações do multifactor.",
4
+ "createTooltip": "Criar novo multifactor",
5
+ "delete": "Deletar multifactor",
6
+ "deleteText": "Você tem certeza de que deseja deletar este multifactor?",
7
+ "deleteTooltip": "Deletar o multifactor selecionado",
8
+ "edit": "Editar multifactor",
9
+ "editText": "Ver e editar informações do multifactor.",
10
+ "editTooltip": "Editar o multifactor selecionado"
11
+ }
@@ -0,0 +1,28 @@
1
+ import { useDefaultMutation } from "@/hooks/use-default-mutation";
2
+ import { useQuery } from "@tanstack/react-query";
3
+ import { requests } from "./requests";
4
+
5
+ const scope = "multifactor";
6
+
7
+ export function useMultifactorCreate() {
8
+ const { multifactorCreate } = requests();
9
+ return useDefaultMutation(scope, "create", multifactorCreate);
10
+ }
11
+
12
+ export function useMultifactorDelete() {
13
+ const { multifactorDelete } = requests();
14
+ return useDefaultMutation(scope, "delete", multifactorDelete);
15
+ }
16
+
17
+ export function useMultifactorUpdate() {
18
+ const { multifactorUpdate } = requests();
19
+ return useDefaultMutation(scope, "update", multifactorUpdate);
20
+ }
21
+
22
+ export function useMultifactorGet(id: number) {
23
+ const { multifactorGet } = requests();
24
+ return useQuery({
25
+ queryKey: [scope, "get"],
26
+ queryFn: () => multifactorGet(id),
27
+ });
28
+ }
@@ -0,0 +1,59 @@
1
+ import { useApp } from "@/hooks/use-app";
2
+ import { Delete, PaginationParams, PaginationResult } from "@/types";
3
+ import { Multifactor } from "@/types/models";
4
+ import { HttpMethod } from "@/types/http-method";
5
+ import { formatDataWithLocale } from "@hedhog/utils";
6
+
7
+ export function requests() {
8
+ const { request } = useApp();
9
+
10
+ const multifactorList = async (params: PaginationParams) => {
11
+ return request<PaginationResult<Multifactor>>({
12
+ url: "/multifactor",
13
+ params,
14
+ }).then((res) => res.data);
15
+ };
16
+
17
+ const multifactorGet = async (id: number) => {
18
+ return request<Multifactor>({
19
+ url: `/multifactor/${id}`,
20
+ }).then((res) => res.data);
21
+ };
22
+
23
+ const multifactorCreate = async (params: { data: Multifactor }) => {
24
+ const { data } = params;
25
+ return request<Multifactor>({
26
+ url: "/multifactor",
27
+ method: HttpMethod.POST,
28
+ data: formatDataWithLocale(data),
29
+ }).then((res) => res.data);
30
+ };
31
+
32
+ const multifactorDelete = async (ids: number[]) => {
33
+ return request<Delete>({
34
+ url: "/multifactor",
35
+ data: { ids },
36
+ method: HttpMethod.DELETE,
37
+ }).then((res) => res.data);
38
+ };
39
+
40
+ const multifactorUpdate = async (params: {
41
+ id: number;
42
+ data: Multifactor;
43
+ }) => {
44
+ const { id, data } = params;
45
+ return request<Multifactor>({
46
+ url: `/multifactor/${id}`,
47
+ method: HttpMethod.PATCH,
48
+ data: formatDataWithLocale(data),
49
+ }).then((res) => res.data);
50
+ };
51
+
52
+ return {
53
+ multifactorCreate,
54
+ multifactorUpdate,
55
+ multifactorDelete,
56
+ multifactorList,
57
+ multifactorGet,
58
+ };
59
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "create": "Create multifactor locale",
3
+ "createText": "Fill the multifactor locale informations.",
4
+ "createTooltip": "Create new multifactor locale",
5
+ "delete": "Delete multifactor locale",
6
+ "deleteText": "Are you sure to delete these multifactor locale?",
7
+ "deleteTooltip": "Delete the selected multifactor locale",
8
+ "edit": "Edit multifactor locale",
9
+ "editText": "View and edit multifactor locale information.",
10
+ "editTooltip": "Edit the selected multifactor locale"
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "create": "Criar multifator local",
3
+ "createText": "Preencha as informações do multifator local.",
4
+ "createTooltip": "Criar novo multifator local",
5
+ "delete": "Excluir multifator local",
6
+ "deleteText": "Você tem certeza de que deseja excluir este multifator local?",
7
+ "deleteTooltip": "Excluir o multifator local selecionado",
8
+ "edit": "Editar multifator local",
9
+ "editText": "Ver e editar as informações do multifator local.",
10
+ "editTooltip": "Editar o multifator local selecionado"
11
+ }
@@ -0,0 +1,55 @@
1
+ import FormPanel, {
2
+ FormPanelRef,
3
+ getFieldsLocale,
4
+ } from "@/components/panels/form-panel";
5
+
6
+ import { useScreenCreate } from "@/features/admin/screen";
7
+ import { Screen } from "@/types/models";
8
+ import { forwardRef, useImperativeHandle, useRef } from "react";
9
+ import { useTranslation } from "react-i18next";
10
+
11
+ export type ScreenCreatePanelRef = {
12
+ submit: () => void;
13
+ };
14
+
15
+ export type ScreenCreatePanelProps = {
16
+ onCreated?: (data: Screen) => void;
17
+ };
18
+
19
+ const ScreenCreatePanel = forwardRef(
20
+ ({ onCreated }: ScreenCreatePanelProps, ref) => {
21
+ const formRef = useRef<FormPanelRef>(null);
22
+ const { t } = useTranslation(["actions", "fields", "translations"]);
23
+ const { mutateAsync: createScreen } = useScreenCreate();
24
+
25
+ useImperativeHandle(
26
+ ref,
27
+ () => ({
28
+ submit: () => {
29
+ formRef.current?.submit();
30
+ },
31
+ }),
32
+ [formRef],
33
+ );
34
+
35
+ return (
36
+ <FormPanel
37
+ ref={formRef}
38
+ fields={[...getFieldsLocale([{ name: "name" }])]}
39
+ button={{ text: t("create", { ns: "actions" }) }}
40
+ onSubmit={async (data) => {
41
+ const createdData = await createScreen({
42
+ data,
43
+ });
44
+ if (typeof onCreated === "function") {
45
+ onCreated(createdData as any);
46
+ }
47
+ }}
48
+ />
49
+ );
50
+ },
51
+ );
52
+
53
+ ScreenCreatePanel.displayName = "ScreenCreatePanel";
54
+
55
+ export default ScreenCreatePanel;
@@ -0,0 +1,67 @@
1
+ import FormPanel, {
2
+ FormPanelRef,
3
+ getFieldsLocale,
4
+ } from "@/components/panels/form-panel";
5
+ import { Overlay } from "@/components/custom/overlay";
6
+ import { TabPanel } from "@/components/panels/tab-panel";
7
+ import { useScreenGet, useScreenUpdate } from "@/features/admin/screen";
8
+ import useEffectAfterFirstUpdate from "@/hooks/use-effect-after-first-update";
9
+ import { Screen } from "@/types/models";
10
+ import { useState, forwardRef, useImperativeHandle, useRef } from "react";
11
+ import { useTranslation } from "react-i18next";
12
+ import { IconEdit, IconPlus, IconTrash } from "@tabler/icons-react";
13
+
14
+ export type ScreenUpdatePanelProps = {
15
+ data: Screen;
16
+ onUpdated?: (data: Screen) => void;
17
+ };
18
+
19
+ const ScreenUpdatePanel = forwardRef(
20
+ ({ data, onUpdated }: ScreenUpdatePanelProps, ref) => {
21
+ const { t } = useTranslation(["actions", "fields", "translations"]);
22
+ const { data: item, isLoading } = useScreenGet(data.id as number);
23
+ const { mutate: screenUpdate } = useScreenUpdate();
24
+ const formRef = useRef<FormPanelRef>(null);
25
+
26
+ useEffectAfterFirstUpdate(() => {
27
+ if (item && formRef.current) {
28
+ formRef.current.setValuesFromItem(item);
29
+ }
30
+ }, [item]);
31
+
32
+ useImperativeHandle(ref, () => ({}));
33
+
34
+ return (
35
+ <TabPanel
36
+ activeTabIndex={0}
37
+ tabs={[
38
+ {
39
+ title: t("details", { ns: "actions" }),
40
+ children: (
41
+ <Overlay loading={isLoading}>
42
+ <FormPanel
43
+ ref={formRef}
44
+ fields={[...getFieldsLocale([{ name: "name" }], item)]}
45
+ button={{ text: t("save", { ns: "actions" }) }}
46
+ onSubmit={(data) => {
47
+ screenUpdate({
48
+ id: data.id,
49
+ data,
50
+ });
51
+ if (typeof onUpdated === "function") {
52
+ onUpdated(data);
53
+ }
54
+ }}
55
+ />
56
+ </Overlay>
57
+ ),
58
+ },
59
+ ]}
60
+ />
61
+ );
62
+ },
63
+ );
64
+
65
+ ScreenUpdatePanel.displayName = "ScreenUpdatePanel";
66
+
67
+ export default ScreenUpdatePanel;
@@ -0,0 +1,11 @@
1
+ {
2
+ "create": "Create screen",
3
+ "createText": "Fill the screen informations.",
4
+ "createTooltip": "Create new screen",
5
+ "delete": "Delete screen",
6
+ "deleteText": "Are you sure to delete these screen?",
7
+ "deleteTooltip": "Delete the selected screen",
8
+ "edit": "Edit screen",
9
+ "editText": "View and edit screen information.",
10
+ "editTooltip": "Edit the selected screen"
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "create": "Criar tela",
3
+ "createText": "Preencha as informações da tela.",
4
+ "createTooltip": "Criar nova tela",
5
+ "delete": "Excluir tela",
6
+ "deleteText": "Você tem certeza de que deseja excluir estas telas?",
7
+ "deleteTooltip": "Excluir a tela selecionada",
8
+ "edit": "Editar tela",
9
+ "editText": "Ver e editar informações da tela.",
10
+ "editTooltip": "Editar a tela selecionada"
11
+ }
@@ -0,0 +1,28 @@
1
+ import { useDefaultMutation } from "@/hooks/use-default-mutation";
2
+ import { useQuery } from "@tanstack/react-query";
3
+ import { requests } from "./requests";
4
+
5
+ const scope = "screen";
6
+
7
+ export function useScreenCreate() {
8
+ const { screenCreate } = requests();
9
+ return useDefaultMutation(scope, "create", screenCreate);
10
+ }
11
+
12
+ export function useScreenDelete() {
13
+ const { screenDelete } = requests();
14
+ return useDefaultMutation(scope, "delete", screenDelete);
15
+ }
16
+
17
+ export function useScreenUpdate() {
18
+ const { screenUpdate } = requests();
19
+ return useDefaultMutation(scope, "update", screenUpdate);
20
+ }
21
+
22
+ export function useScreenGet(id: number) {
23
+ const { screenGet } = requests();
24
+ return useQuery({
25
+ queryKey: [scope, "get"],
26
+ queryFn: () => screenGet(id),
27
+ });
28
+ }