fix: 🐛 set trash models on User
This commit is contained in:
parent
106508419e
commit
11329c4b3e
4 changed files with 146 additions and 63 deletions
|
|
@ -10,15 +10,20 @@ import useTrans from "@/hooks/use-translations";
|
|||
import { Actions, Methods } from "@/back/lib/enums";
|
||||
import { AuthProp, SingleResource, UserModel } from "@/back/types/global";
|
||||
|
||||
export default function Create({ data }: { data: SingleResource }) {
|
||||
export default function Create({
|
||||
data,
|
||||
modelName,
|
||||
}: {
|
||||
data: SingleResource;
|
||||
modelName: string;
|
||||
}) {
|
||||
const { viewAny } = (usePage().props.auth as AuthProp).policies.users;
|
||||
const modelName = usePage().props.modelName as string;
|
||||
const userModel = data.data as UserModel;
|
||||
const model = data.data as UserModel;
|
||||
|
||||
// Translations.
|
||||
const transBackToList = useTrans("uwil-backend::back.crud_back_to_list");
|
||||
const transTitle = useTrans(
|
||||
route().current(`back.users.duplicate`)
|
||||
route().current(`back.${modelName}.duplicate`)
|
||||
? "uwil-backend::crud.helpers.duplication_model"
|
||||
: "uwil-backend::crud.helpers.creation_model",
|
||||
{
|
||||
|
|
@ -35,7 +40,7 @@ export default function Create({ data }: { data: SingleResource }) {
|
|||
viewAny && (
|
||||
<div className="flex justify-end items-center gap-x-1.5">
|
||||
<BtnOptionnalLinkWithTooltip
|
||||
link={route("back.users.index")}
|
||||
link={route(`back.${modelName}.index`)}
|
||||
content={<ArrowLeftIcon />}
|
||||
tooltipContent={<p>{transBackToList}</p>}
|
||||
/>
|
||||
|
|
@ -47,7 +52,7 @@ export default function Create({ data }: { data: SingleResource }) {
|
|||
return (
|
||||
<AuthenticatedLayout title={transTitle} beforeNode={beforeNode()}>
|
||||
<Form
|
||||
model={userModel}
|
||||
model={model}
|
||||
modelName={modelName}
|
||||
modelRoute={modelName}
|
||||
action={Actions.STORE}
|
||||
|
|
|
|||
|
|
@ -12,14 +12,30 @@ import { Actions, Methods } from "@/back/lib/enums";
|
|||
import Views from "@/back/lib/actions";
|
||||
import { AuthProp, SingleResource, UserModel } from "@/back/types/global";
|
||||
|
||||
export default function Edit({ data }: { data: SingleResource }) {
|
||||
export default function Edit({
|
||||
data,
|
||||
modelName,
|
||||
}: {
|
||||
data: SingleResource;
|
||||
modelName: string;
|
||||
}) {
|
||||
const { viewAny } = (usePage().props.auth as AuthProp).policies.users;
|
||||
const modelName = usePage().props.modelName as string;
|
||||
const userModel = data.data as UserModel;
|
||||
const actionModels = [Views.VISUALIZATION, Views.DUPLICATION, Views.DELETION];
|
||||
const model = data.data as UserModel;
|
||||
const actionModels = [
|
||||
Views.VISUALIZATION,
|
||||
Views.DUPLICATION,
|
||||
Views.ARCHIVATION,
|
||||
];
|
||||
|
||||
// Translations.
|
||||
const transBackToList = useTrans("uwil-backend::back.crud_back_to_list");
|
||||
const transTitle = useTrans("uwil-backend::crud.helpers.edition_model", {
|
||||
params: {
|
||||
model: useTrans(`uwil-backend::models.classes.${modelName}`, {
|
||||
choice: 1,
|
||||
}),
|
||||
},
|
||||
});
|
||||
|
||||
const beforeNode = () => {
|
||||
return (
|
||||
|
|
@ -36,24 +52,15 @@ export default function Edit({ data }: { data: SingleResource }) {
|
|||
};
|
||||
|
||||
return (
|
||||
<AuthenticatedLayout
|
||||
title={useTrans("uwil-backend::crud.helpers.edition_model", {
|
||||
params: {
|
||||
model: useTrans(`uwil-backend::models.classes.${modelName}`, {
|
||||
choice: 1,
|
||||
}),
|
||||
},
|
||||
})}
|
||||
beforeNode={beforeNode()}
|
||||
>
|
||||
<AuthenticatedLayout title={transTitle} beforeNode={beforeNode()}>
|
||||
<ModelActions
|
||||
actions={actionModels}
|
||||
modelRoute="users"
|
||||
model={userModel}
|
||||
modelUpdatedAt={userModel.updated_at.toString()}
|
||||
model={model}
|
||||
modelUpdatedAt={model.updated_at.toString()}
|
||||
/>
|
||||
<Form
|
||||
model={userModel}
|
||||
model={model}
|
||||
modelName={modelName}
|
||||
modelRoute={modelName}
|
||||
action={Actions.UPDATE}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,12 @@
|
|||
// * Packages
|
||||
import { CheckIcon, MailIcon, PlusIcon, XIcon } from "lucide-react";
|
||||
import {
|
||||
ArchiveIcon,
|
||||
ArrowLeftIcon,
|
||||
CheckIcon,
|
||||
MailIcon,
|
||||
PlusIcon,
|
||||
XIcon,
|
||||
} from "lucide-react";
|
||||
import { route } from "ziggy-js";
|
||||
import { Row } from "@tanstack/react-table";
|
||||
// * Components shadcn
|
||||
|
|
@ -11,6 +18,7 @@ import DataTable from "@/back/Components/Table/DataTable";
|
|||
import DataTableSearch from "@/back/Components/Table/DataTableSearch";
|
||||
import DataTableFilterButton from "@/back/Components/Table/DataTableFilterButton";
|
||||
import BtnOptionnalLinkWithTooltip from "@/back/Components/BtnOptionnalLinkWithTooltip";
|
||||
import SoftdeleteWarning from "@/back/Components/SoftdeleteWarning";
|
||||
import Views from "@/back/lib/actions";
|
||||
import { GetFormatedDate, GetTranslation } from "@/lib/utils";
|
||||
import { AuthProp, Resource, UserModel } from "@/back/types/global";
|
||||
|
|
@ -152,46 +160,99 @@ const getColumns = () => {
|
|||
export default function Index({
|
||||
userModels,
|
||||
searchFields,
|
||||
modelName,
|
||||
}: {
|
||||
userModels: Resource;
|
||||
searchFields: string;
|
||||
modelName: string;
|
||||
}) {
|
||||
const { auth } = usePage().props as unknown as {
|
||||
auth: AuthProp;
|
||||
};
|
||||
const { create } = auth.policies.users;
|
||||
const modelName = usePage().props.modelName as string;
|
||||
const actionModels = [
|
||||
Views.VISUALIZATION,
|
||||
Views.EDITION,
|
||||
Views.DUPLICATION,
|
||||
Views.DELETION,
|
||||
];
|
||||
|
||||
const { viewAny, viewTrash, create } = auth.policies.users;
|
||||
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();
|
||||
|
||||
// Translations.
|
||||
const transModel = useTrans(`uwil-backend::models.classes.${modelName}`, {
|
||||
choice: 2,
|
||||
});
|
||||
const transArchiveTitle = useTrans(
|
||||
"uwil-backend::crud.helpers.archives_model",
|
||||
{
|
||||
params: { model: transModel },
|
||||
},
|
||||
);
|
||||
const transTitle = str(isArchiveRoute ? transArchiveTitle : transModel)
|
||||
.ucFirst()
|
||||
.value();
|
||||
const transCrudBackList = useTrans("uwil-backend::back.crud_back_to_list");
|
||||
const transCrudAddEntry = useTrans("uwil-backend::back.crud_add_entry");
|
||||
const transAccessTo = useTrans("uwil-backend::back.crud_access_to", {
|
||||
params: {
|
||||
target: useTrans("uwil-backend::back.archived_entries"),
|
||||
},
|
||||
});
|
||||
|
||||
const beforeNode = () => {
|
||||
return (
|
||||
isArchiveRoute &&
|
||||
viewAny && (
|
||||
<div className="flex justify-end items-center gap-x-1.5">
|
||||
<BtnOptionnalLinkWithTooltip
|
||||
link={route(`back.${modelName}.index`)}
|
||||
content={<ArrowLeftIcon />}
|
||||
tooltipContent={<p>{transCrudBackList}</p>}
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
);
|
||||
};
|
||||
|
||||
const afterNode = () => {
|
||||
return (
|
||||
create && (
|
||||
<BtnOptionnalLinkWithTooltip
|
||||
link={route(`back.${modelName}.create`)}
|
||||
content={<PlusIcon />}
|
||||
tooltipContent={<p>{transCrudAddEntry}</p>}
|
||||
/>
|
||||
!isArchiveRoute && (
|
||||
<div className="flex justify-end items-center gap-x-1.5">
|
||||
{viewTrash && (
|
||||
<BtnOptionnalLinkWithTooltip
|
||||
link={route(`back.${modelName}.trash`)}
|
||||
content={<ArchiveIcon />}
|
||||
tooltipContent={<p>{transAccessTo}</p>}
|
||||
variant="outline"
|
||||
/>
|
||||
)}
|
||||
{create && (
|
||||
<BtnOptionnalLinkWithTooltip
|
||||
link={route(`back.${modelName}.create`)}
|
||||
content={<PlusIcon />}
|
||||
tooltipContent={<p>{transCrudAddEntry}</p>}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
);
|
||||
};
|
||||
|
||||
return (
|
||||
<AuthenticatedLayout
|
||||
title={str(
|
||||
useTrans(`uwil-backend::models.classes.${modelName}`, { choice: 2 }),
|
||||
)
|
||||
.ucFirst()
|
||||
.value()}
|
||||
title={transTitle}
|
||||
beforeNode={beforeNode()}
|
||||
afterNode={afterNode()}
|
||||
>
|
||||
<DataTableSearch modelRoute={modelName} searchFields={searchFields} />
|
||||
{isArchiveRoute && <SoftdeleteWarning />}
|
||||
<DataTableSearch
|
||||
modelRoute={modelName}
|
||||
searchFields={searchFields}
|
||||
isArchiveRoute={isArchiveRoute}
|
||||
/>
|
||||
<DataTable
|
||||
columns={columns}
|
||||
modelRoute={modelName}
|
||||
|
|
|
|||
|
|
@ -126,17 +126,34 @@ const getColumns = () => {
|
|||
];
|
||||
};
|
||||
|
||||
export default function Show({ data }: { data: SingleResource }) {
|
||||
export default function Show({
|
||||
data,
|
||||
modelName,
|
||||
}: {
|
||||
data: SingleResource;
|
||||
modelName: string;
|
||||
}) {
|
||||
const { auth } = usePage().props as unknown as {
|
||||
auth: AuthProp;
|
||||
};
|
||||
const { viewAny } = auth.policies.users;
|
||||
const userModel = data.data as UserModel;
|
||||
const actionModels = [Views.EDITION, Views.DUPLICATION, Views.DELETION];
|
||||
|
||||
const model = data.data as UserModel;
|
||||
const actionModels = [Views.EDITION, Views.DUPLICATION, Views.ARCHIVATION];
|
||||
const columns = getColumns();
|
||||
|
||||
const transCrudBackList = useTrans("uwil-backend::back.crud_back_to_list");
|
||||
// Translations.
|
||||
const transTitle = useTrans(
|
||||
"uwil-backend::crud.helpers.visualization_model",
|
||||
{
|
||||
params: {
|
||||
model: useTrans(`uwil-backend::models.classes.${modelName}`, {
|
||||
choice: 1,
|
||||
}),
|
||||
},
|
||||
},
|
||||
);
|
||||
const transCrudBackToList = useTrans("uwil-backend::back.crud_back_to_list");
|
||||
|
||||
const beforeNode = () => {
|
||||
return (
|
||||
viewAny && (
|
||||
|
|
@ -144,7 +161,7 @@ export default function Show({ data }: { data: SingleResource }) {
|
|||
<BtnOptionnalLinkWithTooltip
|
||||
link={route("back.users.index")}
|
||||
content={<ArrowLeftIcon />}
|
||||
tooltipContent={<p>{transCrudBackList}</p>}
|
||||
tooltipContent={<p>{transCrudBackToList}</p>}
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
|
|
@ -152,22 +169,15 @@ export default function Show({ data }: { data: SingleResource }) {
|
|||
};
|
||||
|
||||
return (
|
||||
<AuthenticatedLayout
|
||||
title={useTrans("uwil-backend::crud.helpers.visualization_model", {
|
||||
params: {
|
||||
model: useTrans("uwil-backend::models.classes.users", { choice: 1 }),
|
||||
},
|
||||
})}
|
||||
beforeNode={beforeNode()}
|
||||
>
|
||||
<AuthenticatedLayout title={transTitle} beforeNode={beforeNode()}>
|
||||
<ModelActions
|
||||
actions={actionModels}
|
||||
modelRoute="users"
|
||||
model={userModel}
|
||||
modelUpdatedAt={userModel.updated_at.toString()}
|
||||
modelRoute={modelName}
|
||||
model={model}
|
||||
modelUpdatedAt={model.updated_at.toString()}
|
||||
/>
|
||||
{/* @ts-expect-error Weird error type on cell. */}
|
||||
<DetailsTable columns={columns} model={userModel} />
|
||||
<DetailsTable columns={columns} model={model} />
|
||||
</AuthenticatedLayout>
|
||||
);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue