(
{str(
- useTrans("back.associated_model", {
+ GetTranslation("back.associated_model", {
params: {
- model: useTrans("models.classes.document", {
- choice: 2,
- }),
+ model: GetTranslation(
+ "models.classes.document",
+ {
+ choice: 2,
+ },
+ ),
},
choice: 2,
}),
@@ -121,7 +99,9 @@ export default function Index({
accessorKey: "updated_at",
header: ({ column }: { column: { id: string } }) => (
}) => (
- {useFormatedDate(row.getValue("updated_at"))}
+ {GetFormatedDate(row.getValue("updated_at"))}
),
},
];
+};
+
+export default function Index({
+ documentTagModel,
+ searchFields,
+ modelName,
+}: {
+ documentTagModel: Resource;
+ searchFields: string;
+ modelName: string;
+}) {
+ const { auth } = usePage().props as unknown as {
+ auth: AuthProp;
+ appEnv: AppEnv;
+ };
+ const { viewAny, viewTrash, create } = auth.policies.documentTags;
+ const isArchiveRoute = route().current(`back.${modelName}.trash`);
+ const actionModels = isArchiveRoute
+ ? [Views.RESTORATION, Views.FORCEDELETION]
+ : [
+ Views.VISUALIZATION,
+ Views.EDITION,
+ Views.DUPLICATION,
+ Views.ARCHIVATION,
+ ];
+ const columns = getColumns();
const transModel = useTrans(
`models.classes.${str(modelName).singular().value()}`,
{ choice: 2 },
@@ -145,6 +151,7 @@ export default function Index({
.ucFirst()
.value();
+ const transBackToList = useTrans("back.crud_back_to_list");
const beforeNode = () => {
return (
isArchiveRoute &&
@@ -153,15 +160,19 @@ export default function Index({
}
- tooltipContent={
- {useTrans("back.crud_back_to_list")}
- }
+ tooltipContent={{transBackToList}
}
/>
)
);
};
+ const transAccessToArchived = useTrans("back.crud_access_to", {
+ params: {
+ target: useTrans("back.archived_entries"),
+ },
+ });
+ const transAddEntry = useTrans("back.crud_add_entry");
const afterNode = () => {
return (
!isArchiveRoute && (
@@ -170,17 +181,7 @@ export default function Index({
}
- tooltipContent={
-
- {useTrans("back.crud_access_to", {
- params: {
- target: useTrans(
- "back.archived_entries",
- ),
- },
- })}
-
- }
+ tooltipContent={{transAccessToArchived}
}
variant="outline"
/>
)}
@@ -188,9 +189,7 @@ export default function Index({
}
- tooltipContent={
- {useTrans("back.crud_add_entry")}
- }
+ tooltipContent={{transAddEntry}
}
/>
)}
diff --git a/resources/ts/back/Pages/DocumentTag/Show.tsx b/resources/ts/back/Pages/DocumentTag/Show.tsx
index 8322dc62..a0db37e5 100644
--- a/resources/ts/back/Pages/DocumentTag/Show.tsx
+++ b/resources/ts/back/Pages/DocumentTag/Show.tsx
@@ -1,6 +1,7 @@
// * Packages
import { usePage } from "@inertiajs/react";
import { route } from "ziggy-js";
+import { ArrowLeft } from "lucide-react";
// * Components shadcn
import { Badge } from "@/components/ui/badge";
import {
@@ -12,22 +13,89 @@ import {
import AuthenticatedLayout from "@/back/Layouts/AuthenticatedLayout";
import DetailsTable from "@/back/Components/Table/DetailsTable";
import ModelActions from "@/back/Components/ModelActions";
-import { Views } from "@/lib/utils";
-import { useFormatedDate } from "@/hooks/use-formated-value";
+import BtnOptionnalLinkWithTooltip from "@/back/Components/BtnOptionnalLinkWithTooltip";
+import AssociatedDocumentList from "@/back/Components/Documents/AssociatedDocumentList";
+import RenderTranslationCell from "@/back/Components/Table/RenderTranslationCell";
+import { GetFormatedDate, GetTranslation, Views } from "@/lib/utils";
import {
AppEnv,
AuthProp,
- DocumentTagModel,
Resource,
SingleResource,
- TranslationField,
} from "@/back/types/global";
+import { DocumentTagModel } from "@/back/types/others";
+import { TranslationField } from "@/back/types/i18n";
import str from "@/hooks/use-string";
import useTrans from "@/hooks/use-translations";
-import BtnOptionnalLinkWithTooltip from "@/back/Components/BtnOptionnalLinkWithTooltip";
-import { ArrowLeft } from "lucide-react";
-import AssociatedDocumentList from "@/back/Components/Documents/AssociatedDocumentList";
-import { renderTranslationCell } from "@/lib/translationCellFallback";
+
+const getColumns = (appEnv: AppEnv) => {
+ return [
+ {
+ accessorKey: "name",
+ header: str(GetTranslation("validation.attributes.name"))
+ .ucFirst()
+ .value(),
+ cell: ({ value }: { value: TranslationField }) => (
+
+ ),
+ },
+ {
+ accessorKey: "slug",
+ header: str(GetTranslation("validation.custom.slug"))
+ .ucFirst()
+ .value(),
+ cell: ({ value }: { value: TranslationField }) =>
+ value[appEnv.locale] ? (
+ value[appEnv.locale]
+ ) : (
+
+ {GetTranslation("back.table_not_known")}
+
+ ),
+ },
+ {
+ accessorKey: "color",
+ header: str(GetTranslation("validation.custom.color"))
+ .ucFirst()
+ .value(),
+ cell: ({ value }: { value: string }) => {
+ return (
+
+
+
+
+ {value}
+
+ );
+ },
+ },
+ {
+ accessorKey: "created_at",
+ header: str(GetTranslation("validation.attributes.created_at"))
+ .ucFirst()
+ .value(),
+ cell: ({ value }: { value: string }) => {
+ return (
+ {GetFormatedDate(value)}
+ );
+ },
+ },
+ {
+ accessorKey: "updated_at",
+ header: str(GetTranslation("validation.attributes.updated_at"))
+ .ucFirst()
+ .value(),
+ cell: ({ value }: { value: string }) => (
+ {GetFormatedDate(value)}
+ ),
+ },
+ ];
+};
export default function Show({
data,
@@ -53,69 +121,9 @@ export default function Show({
}),
},
});
- const columns = [
- {
- accessorKey: "name",
- header: str(useTrans("validation.attributes.name"))
- .ucFirst()
- .value(),
- cell: ({ value }: { value: TranslationField }) => {
- return renderTranslationCell(value);
- },
- },
- {
- accessorKey: "slug",
- header: str(useTrans("validation.custom.slug")).ucFirst().value(),
- cell: ({ value }: { value: TranslationField }) =>
- value[appEnv.locale] ? (
- value[appEnv.locale]
- ) : (
-
- {useTrans("back.table_not_known")}
-
- ),
- },
- {
- accessorKey: "color",
- header: str(useTrans("validation.custom.color")).ucFirst().value(),
- cell: ({ value }: { value: string }) => {
- return (
-
-
-
-
- {value}
-
- );
- },
- },
- {
- accessorKey: "created_at",
- header: str(useTrans("validation.attributes.created_at"))
- .ucFirst()
- .value(),
- cell: ({ value }: { value: string }) => {
- return (
- {useFormatedDate(value)}
- );
- },
- },
- {
- accessorKey: "updated_at",
- header: str(useTrans("validation.attributes.updated_at"))
- .ucFirst()
- .value(),
- cell: ({ value }: { value: string }) => (
- {useFormatedDate(value)}
- ),
- },
- ];
+ const columns = getColumns(appEnv);
+ const transBackToList = useTrans("back.crud_back_to_list");
const beforeNode = () => {
return (
viewAny && (
@@ -123,9 +131,7 @@ export default function Show({
}
- tooltipContent={
- {useTrans("back.crud_back_to_list")}
- }
+ tooltipContent={{transBackToList}
}
/>
)
diff --git a/resources/ts/back/Pages/DynamicPages/Create.tsx b/resources/ts/back/Pages/DynamicPages/Create.tsx
index 614a0814..33e11f7a 100644
--- a/resources/ts/back/Pages/DynamicPages/Create.tsx
+++ b/resources/ts/back/Pages/DynamicPages/Create.tsx
@@ -8,11 +8,8 @@ import Form from "@/back/Pages/DynamicPages/Form";
import BtnOptionnalLinkWithTooltip from "@/back/Components/BtnOptionnalLinkWithTooltip";
import useTrans from "@/hooks/use-translations";
import { Actions, Methods } from "@/lib/enums";
-import {
- AuthProp,
- DynamicPageModel,
- SingleResource,
-} from "@/back/types/global";
+import { AuthProp, SingleResource } from "@/back/types/global";
+import { DynamicPageModel } from "@/back/types/dynamic-pages";
import str from "@/hooks/use-string";
export default function Create({
diff --git a/resources/ts/back/Pages/DynamicPages/Edit.tsx b/resources/ts/back/Pages/DynamicPages/Edit.tsx
index 1dc9cce0..97e5b57c 100644
--- a/resources/ts/back/Pages/DynamicPages/Edit.tsx
+++ b/resources/ts/back/Pages/DynamicPages/Edit.tsx
@@ -10,11 +10,8 @@ import Form from "@/back/Pages/DynamicPages/Form";
import useTrans from "@/hooks/use-translations";
import { Actions, Methods } from "@/lib/enums";
import { Views } from "@/lib/utils";
-import {
- AuthProp,
- SingleResource,
- DynamicPageModel,
-} from "@/back/types/global";
+import { AuthProp, SingleResource } from "@/back/types/global";
+import { DynamicPageModel } from "@/back/types/dynamic-pages";
import str from "@/hooks/use-string";
export default function Edit({
diff --git a/resources/ts/back/Pages/DynamicPages/Form.tsx b/resources/ts/back/Pages/DynamicPages/Form.tsx
index 3e05605e..9d5a3bec 100644
--- a/resources/ts/back/Pages/DynamicPages/Form.tsx
+++ b/resources/ts/back/Pages/DynamicPages/Form.tsx
@@ -34,14 +34,12 @@ import GoToFrontView from "@/back/Components/GoToFrontView";
import useTrans from "@/hooks/use-translations";
import InputError from "@/back/Components/InputError";
import str from "@/hooks/use-string";
+import { AppEnv, AuthProp, LaravelEnum } from "@/back/types/global";
import {
- AppEnv,
- AuthProp,
ConfigField,
DynamicPageModel,
- LaravelEnum,
PageConfigModel,
-} from "@/back/types/global";
+} from "@/back/types/dynamic-pages";
import SubmitButton from "@/back/Components/SubmitButton";
import useCrudSubmit from "@/hooks/use-crud-submit";
import Slugifycator from "@/back/Components/Inputs/Slugifycator";
@@ -75,9 +73,9 @@ export default function Form({
.pageConfigModels as Array;
// Models filtered based on the presence of the locale.
const filteredPageConfigModels = pageConfigModels.filter(
- (model) =>
- model.label?.[locale] !== undefined &&
- model.config?.[locale] !== undefined,
+ (pageConfigModel) =>
+ pageConfigModel.label?.[locale] !== undefined &&
+ pageConfigModel.config?.[locale] !== undefined,
);
// Set empty config by default.
@@ -121,8 +119,24 @@ export default function Form({
model: useTrans("models.classes.page-config", { choice: 1 }),
},
});
+ const transValidationRootLabel = useTrans("validation.custom.root");
+ const transValidationParentPageLabel = useTrans("back.form_associate_to", {
+ params: {
+ attribute: useTrans("validation.custom.parent_page"),
+ },
+ choice: 2,
+ });
+ const transAssociateToStatus = useTrans("back.form_associate_to", {
+ params: {
+ attribute: useTrans("validation.custom.status"),
+ },
+ choice: 1,
+ });
+ const transFormTitleIsLocked = useTrans("back.form_title_isLocked");
+ const transFormSubtitleIsLocked = useTrans("back.form_subtitle_isLocked");
+
const getConfig = (id: number) =>
- configOptions.find((objet) => objet.id == id)?.config[
+ configOptions.find((objet) => objet.id === id)?.config[
locale
] as ConfigField[];
@@ -137,7 +151,8 @@ export default function Form({
isLocked: model?.isLocked ?? false,
isRoot: model?.isRoot ?? false,
});
-
+ const defaultIsRootValue =
+ !data.isRoot && data.page_id ? [data.page_id] : [];
const submit = useCrudSubmit({
method,
modelRoute,
@@ -149,27 +164,31 @@ export default function Form({
});
function getFullSlugPath(
- models: DynamicPageModel[],
- selectedGroup: string | null,
- locale: string = "fr",
+ targetModels: DynamicPageModel[],
+ currentSelectedGroup: string | null,
+ currentLocale: string = "fr",
): string | null {
- if (!selectedGroup) return null;
+ if (!currentSelectedGroup) return null;
// Trouver le modèle sélectionné à partir de son title
- const current = models.find(
- (m) =>
- m.title[locale]?.toLowerCase() === selectedGroup.toLowerCase(),
+ const current = targetModels.find(
+ (targetModel) =>
+ targetModel.title[currentLocale]?.toLowerCase() ===
+ currentSelectedGroup.toLowerCase(),
);
if (!current) return null;
// Fonction récursive pour reconstruire le chemin
- const buildPath = (model: DynamicPageModel): string => {
- const parent = model.page_id
- ? models.find((m) => m.id === model.page_id)
+ const buildPath = (modelParent: DynamicPageModel): string => {
+ const parent = modelParent.page_id
+ ? targetModels.find(
+ (targetModel) => targetModel.id === modelParent.page_id,
+ )
: null;
- const currentTranslatedModelSlug = model.slug[locale] ?? "";
+ const currentTranslatedModelSlug =
+ modelParent.slug[currentLocale] ?? "";
if (!parent) return currentTranslatedModelSlug;
@@ -211,18 +230,7 @@ export default function Form({
@@ -261,26 +269,11 @@ export default function Form({
multiple={false}
field="title"
closeOnSelect
- label={str(
- useTrans("back.form_associate_to", {
- params: {
- attribute: useTrans(
- "validation.custom.parent_page",
- ),
- },
- choice: 2,
- }),
- )
+ label={str(transValidationParentPageLabel)
.ucFirst()
.value()}
placeholder="ex: "
- defaultValues={
- !data.isRoot
- ? data.page_id
- ? [data.page_id]
- : []
- : []
- }
+ defaultValues={defaultIsRootValue}
exclude={model?.id}
required={false}
setData={setData}
@@ -430,7 +423,7 @@ export default function Form({
: null
}
setData={setData}
- // @ts-ignore
+ // @ts-expect-error Types diff between custom reset and useForm reset.
reset={reset}
/>
)}
@@ -438,9 +431,9 @@ export default function Form({
{isConceptor && (
}
- description={useTrans("back.form_subtitle_isLocked")}
+ description={transFormSubtitleIsLocked}
inline
>
{
+ return [
{
accessorKey: "title",
header: ({ column }: { column: { id: string } }) => (
}) => (
- {renderTranslationCell(
- row.getValue("title") as TranslationField,
- )}
+
{row.original.isRoot && (
- {useTrans("back.page_root")}
+ {GetTranslation("back.page_root")}
)}
@@ -99,7 +73,7 @@ export default function Index({
accessorKey: "parent_page",
header: ({ column }: { column: { id: string } }) => (
- {useTrans("back.access_model", {
+ {GetTranslation("back.access_model", {
params: {
- model: useTrans(
+ model: GetTranslation(
"models.classes.dynamic-page",
{ choice: 1 },
),
@@ -155,7 +129,7 @@ export default function Index({
/>
- {useTrans("back.group_archived")}
+ {GetTranslation("back.group_archived")}
@@ -165,7 +139,7 @@ export default function Index({
}
return (
- {useTrans("back.table_not_known")}
+ {GetTranslation("back.table_not_known")}
);
},
@@ -174,7 +148,7 @@ export default function Index({
accessorKey: "config",
header: ({ column }: { column: { id: string } }) => (
- {useTrans("back.access_model", {
+ {GetTranslation("back.access_model", {
params: {
- model: useTrans(
+ model: GetTranslation(
"models.classes.page-config",
{ choice: 1 },
),
@@ -230,7 +204,7 @@ export default function Index({
/>
- {useTrans("back.config_archived")}
+ {GetTranslation("back.config_archived")}
@@ -240,7 +214,7 @@ export default function Index({
}
return (
- {useTrans("back.table_not_known")}
+ {GetTranslation("back.table_not_known")}
);
},
@@ -249,7 +223,7 @@ export default function Index({
accessorKey: "status",
header: ({ column }: { column: { id: string } }) => (
- {useTrans("back.page_locked")}
+ {GetTranslation("back.page_locked")}
)}
@@ -275,7 +249,9 @@ export default function Index({
accessorKey: "updated_at",
header: ({ column }: { column: { id: string } }) => (
}) => (
- {useFormatedDate(row.getValue("updated_at"))}
+ {GetFormatedDate(row.getValue("updated_at"))}
),
},
];
+};
+
+export default function Index({
+ dynamicPageModels,
+ searchFields,
+ modelName,
+}: {
+ dynamicPageModels: Resource;
+ searchFields: string;
+ modelName: string;
+}) {
+ const { auth, appEnv } = usePage().props as unknown as {
+ auth: AuthProp;
+ appEnv: AppEnv;
+ };
+ const { viewAny, viewTrash, create } = auth.policies.dynamicPages;
+ const { viewAny: viewAnyPageConfigs } = auth.policies.pageConfigs;
+ const isArchiveRoute = route().current(`back.${modelName}.trash`);
+ const actionModels = isArchiveRoute
+ ? [Views.RESTORATION, Views.FORCEDELETION]
+ : [
+ Views.VISUALIZATION,
+ Views.EDITION,
+ Views.DUPLICATION,
+ Views.ARCHIVATION,
+ ];
+
+ const columns = getColumns(appEnv, modelName, viewAny, viewAnyPageConfigs);
const transModel = useTrans(
`models.classes.${str(modelName).singular().value()}`,
@@ -299,7 +303,7 @@ export default function Index({
const transTitle = str(isArchiveRoute ? transArchiveTitle : transModel)
.ucFirst()
.value();
-
+ const transBackToList = useTrans("back.crud_back_to_list");
const beforeNode = () => {
return (
isArchiveRoute &&
@@ -308,14 +312,18 @@ export default function Index({
}
- tooltipContent={
- {useTrans("back.crud_back_to_list")}
- }
+ tooltipContent={{transBackToList}
}
/>
)
);
};
+ const transAccessToArchived = useTrans("back.crud_access_to", {
+ params: {
+ target: useTrans("back.archived_entries"),
+ },
+ });
+ const transAddEntry = useTrans("back.crud_add_entry");
const afterNode = () => {
return (
!isArchiveRoute && (
@@ -324,17 +332,7 @@ export default function Index({
}
- tooltipContent={
-
- {useTrans("back.crud_access_to", {
- params: {
- target: useTrans(
- "back.archived_entries",
- ),
- },
- })}
-
- }
+ tooltipContent={{transAccessToArchived}
}
variant="outline"
/>
)}
@@ -342,9 +340,7 @@ export default function Index({
}
- tooltipContent={
- {useTrans("back.crud_add_entry")}
- }
+ tooltipContent={{transAddEntry}
}
/>
)}
diff --git a/resources/ts/back/Pages/DynamicPages/Show.tsx b/resources/ts/back/Pages/DynamicPages/Show.tsx
index c8d0a876..7308a485 100644
--- a/resources/ts/back/Pages/DynamicPages/Show.tsx
+++ b/resources/ts/back/Pages/DynamicPages/Show.tsx
@@ -16,50 +16,40 @@ import DetailsTable from "@/back/Components/Table/DetailsTable";
import ModelActions from "@/back/Components/ModelActions";
import DynamicStatusBadge from "@/back/Components/DynamicPages/DynamicStatusBadge";
import RecursiveContent from "@/back/Components/DynamicPages/DynamicPageDetails";
-import { Views } from "@/lib/utils";
-import { useFormatedDate } from "@/hooks/use-formated-value";
+import BtnOptionnalLinkWithTooltip from "@/back/Components/BtnOptionnalLinkWithTooltip";
+import RenderTranslationCell from "@/back/Components/Table/RenderTranslationCell";
+import { GetFormatedDate, GetTranslation, Views } from "@/lib/utils";
+import { AppEnv, AuthProp, SingleResource } from "@/back/types/global";
import {
- AppEnv,
- AuthProp,
- DynamicPageModel,
+ DynamicPageModelWithRelations,
PageConfigModel,
- SingleResource,
- TranslationField,
-} from "@/back/types/global";
+} from "@/back/types/dynamic-pages";
+import { TranslationField } from "@/back/types/i18n";
import str from "@/hooks/use-string";
import useTrans from "@/hooks/use-translations";
-import BtnOptionnalLinkWithTooltip from "@/back/Components/BtnOptionnalLinkWithTooltip";
-import { renderTranslationCell } from "@/lib/translationCellFallback";
-export default function Show({
- data,
- modelName,
-}: {
- data: SingleResource;
- modelName: string;
-}) {
- const { auth, appEnv } = usePage().props as unknown as {
- auth: AuthProp;
- appEnv: AppEnv;
- };
- const { viewAny } = auth.policies.dynamicPages;
- const dynamicPageModel = data.data as DynamicPageModel;
- const actionModels = [Views.EDITION, Views.DUPLICATION, Views.ARCHIVATION];
- const columns = [
+const getColumns = (
+ appEnv: AppEnv,
+ auth: AuthProp,
+ modelName: string,
+ dynamicPageModel: DynamicPageModelWithRelations,
+) => {
+ return [
{
accessorKey: "title",
- header: str(useTrans("validation.attributes.title"))
+ header: str(GetTranslation("validation.attributes.title"))
.ucFirst()
.value(),
- cell: ({ value }: { value: TranslationField }) =>
- renderTranslationCell(value),
+ cell: ({ value }: { value: TranslationField }) => (
+
+ ),
},
{
accessorKey: "parent_page",
- header: str(useTrans("validation.custom.parent_page"))
+ header: str(GetTranslation("validation.custom.parent_page"))
.ucFirst()
.value(),
- cell: ({ value }: { value: DynamicPageModel }) =>
+ cell: ({ value }: { value: DynamicPageModelWithRelations }) =>
auth.policies.dynamicPages.viewAny ? (
- {useTrans("back.access_model", {
+ {GetTranslation("back.access_model", {
params: {
- model: useTrans(
+ model: GetTranslation(
`models.classes.${str(modelName).singular().value()}`,
{ choice: 1 },
),
@@ -91,7 +81,9 @@ export default function Show({
},
{
accessorKey: "config",
- header: str(useTrans("validation.custom.config")).ucFirst().value(),
+ header: str(GetTranslation("validation.custom.config"))
+ .ucFirst()
+ .value(),
cell: ({ value }: { value: PageConfigModel }) =>
auth.policies.pageConfigs.viewAny ? (
- {useTrans("back.access_model", {
+ {GetTranslation("back.access_model", {
params: {
- model: useTrans(
+ model: GetTranslation(
"models.classes.page-config",
{ choice: 1 },
),
@@ -124,7 +116,7 @@ export default function Show({
},
{
accessorKey: "content",
- header: str(useTrans("validation.attributes.content"))
+ header: str(GetTranslation("validation.attributes.content"))
.ucFirst()
.value(),
cell: ({ value }: { value: TranslationField