161 lines
6.8 KiB
TypeScript
161 lines
6.8 KiB
TypeScript
import { TFunction } from "i18next";
|
|
import EditIcon from "~/components/ui/icons/crud/EditIcon";
|
|
import PrototypeIcon from "~/components/ui/icons/crud/PrototypeIcon";
|
|
import TagsIcon from "~/components/ui/icons/crud/TagsIcon";
|
|
import UploadIcon from "~/components/ui/icons/crud/UploadIcon";
|
|
import DownloadIcon from "~/components/ui/icons/DownloadIcon";
|
|
import ListIcon from "~/components/ui/icons/entities/ListIcon";
|
|
import PlusIcon from "~/components/ui/icons/PlusIcon";
|
|
import ShareIcon from "~/components/ui/icons/ShareIcon";
|
|
import { EntityWithDetails } from "../db/entities/entities.db.server";
|
|
import { RowWithDetails } from "../db/entities/rows.db.server";
|
|
import { adminPath } from "~/utils/app/CanonicalUrlUtils";
|
|
|
|
export type NoCodeEntityViewsDto = {
|
|
title: string;
|
|
description: string;
|
|
views: {
|
|
name: string;
|
|
description: string;
|
|
href?: string;
|
|
error?: string;
|
|
reloadDocument?: boolean;
|
|
icon?: React.ReactNode;
|
|
underConstruction?: boolean;
|
|
enterprise?: boolean;
|
|
}[];
|
|
};
|
|
|
|
function getBlockPreviews({ t, entities }: { t: TFunction; entities: EntityWithDetails[] }) {
|
|
const cruds: NoCodeEntityViewsDto = {
|
|
title: t("models.entity.noCode.previews.blocks.crud.title"),
|
|
description: t("models.entity.noCode.previews.blocks.crud.description"),
|
|
views: [],
|
|
};
|
|
entities.forEach((entity) => {
|
|
cruds.views.push({
|
|
name: t(entity.title),
|
|
description: t("models.entity.noCode.previews.blocks.crud.entityDescription"),
|
|
href: adminPath(`entities/${entity.slug}/no-code`, { mode: "host-aware" }),
|
|
// icon: <PlusIcon className="mx-auto h-4 w-4 text-foreground" />,
|
|
});
|
|
});
|
|
const previews: NoCodeEntityViewsDto[] = [
|
|
cruds,
|
|
{
|
|
title: t("models.entity.noCode.previews.blocks.stats.title"),
|
|
description: t("models.entity.noCode.previews.blocks.stats.description"),
|
|
views: [
|
|
{
|
|
name: t("models.entity.noCode.previews.blocks.stats.count.name"),
|
|
description: t("models.entity.noCode.previews.blocks.stats.count.description"),
|
|
href: "stats/count",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
title: t("models.entity.noCode.previews.blocks.lists.title"),
|
|
description: t("models.entity.noCode.previews.blocks.lists.description"),
|
|
views: [
|
|
{
|
|
name: t("models.entity.noCode.previews.blocks.lists.tasks.name"),
|
|
description: t("models.entity.noCode.previews.blocks.lists.tasks.description"),
|
|
href: "lists/tasks",
|
|
},
|
|
{
|
|
name: t("models.entity.noCode.previews.blocks.lists.myRequests.name"),
|
|
description: t("models.entity.noCode.previews.blocks.lists.myRequests.description"),
|
|
underConstruction: true,
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
return previews;
|
|
}
|
|
|
|
function getEntityPreviews({ t, entity, rows }: { t: TFunction; entity: EntityWithDetails; rows: RowWithDetails[] }) {
|
|
const previews: NoCodeEntityViewsDto[] = [
|
|
{
|
|
title: t("models.entity.noCode.previews.entityRoutes.title"),
|
|
description: t("models.entity.noCode.previews.entityRoutes.description"),
|
|
views: [
|
|
{
|
|
name: t("models.entity.noCode.previews.entityRoutes.views.allInOne.name"),
|
|
description: t("models.entity.noCode.previews.entityRoutes.views.allInOne.description"),
|
|
href: `${entity.slug}/all-in-one`,
|
|
icon: <ListIcon className="text-foreground mx-auto h-4 w-4" />,
|
|
},
|
|
{
|
|
name: t("models.entity.noCode.previews.entityRoutes.views.listDefault.name"),
|
|
description: t("models.entity.noCode.previews.entityRoutes.views.listDefault.description"),
|
|
href: `${entity.slug}`,
|
|
icon: <ListIcon className="text-foreground mx-auto h-4 w-4" />,
|
|
},
|
|
{
|
|
name: t("models.entity.noCode.previews.entityRoutes.views.new.name"),
|
|
description: t("models.entity.noCode.previews.entityRoutes.views.new.description"),
|
|
href: `${entity.slug}/new`,
|
|
icon: <PlusIcon className="text-foreground mx-auto h-4 w-4" />,
|
|
},
|
|
{
|
|
name: t("models.entity.noCode.previews.entityRoutes.views.overview.name"),
|
|
description: t("models.entity.noCode.previews.entityRoutes.views.overview.description"),
|
|
href: rows.length > 0 ? `${entity.slug}/${rows[0].id}` : undefined,
|
|
error: rows.length === 0 ? t("models.entity.noCode.previews.errors.noRows") : undefined,
|
|
icon: <PrototypeIcon className="text-foreground mx-auto h-4 w-4" />,
|
|
},
|
|
{
|
|
name: t("models.entity.noCode.previews.entityRoutes.views.edit.name"),
|
|
description: t("models.entity.noCode.previews.entityRoutes.views.edit.description"),
|
|
href: rows.length > 0 ? `${entity.slug}/${rows[0].id}/edit` : undefined,
|
|
error: rows.length === 0 ? t("models.entity.noCode.previews.errors.noRows") : undefined,
|
|
icon: <EditIcon className="text-foreground mx-auto h-4 w-4" />,
|
|
},
|
|
{
|
|
name: t("models.entity.noCode.previews.entityRoutes.views.import.name"),
|
|
description: t("models.entity.noCode.previews.entityRoutes.views.import.description"),
|
|
href: `${entity.slug}/import`,
|
|
icon: <UploadIcon className="text-foreground mx-auto h-4 w-4" />,
|
|
},
|
|
{
|
|
name: t("models.entity.noCode.previews.entityRoutes.views.export.name"),
|
|
description: t("models.entity.noCode.previews.entityRoutes.views.export.description"),
|
|
href: `${entity.slug}/export`,
|
|
reloadDocument: true,
|
|
icon: <DownloadIcon className="text-foreground mx-auto h-4 w-4" />,
|
|
},
|
|
{
|
|
name: t("models.entity.noCode.previews.entityRoutes.views.tags.name"),
|
|
description: t("models.entity.noCode.previews.entityRoutes.views.tags.description"),
|
|
href: rows.length > 0 ? `${entity.slug}/${rows[0].id}/tags` : undefined,
|
|
error: rows.length === 0 ? t("models.entity.noCode.previews.errors.noRows") : undefined,
|
|
reloadDocument: true,
|
|
icon: <TagsIcon className="text-foreground mx-auto h-4 w-4" />,
|
|
},
|
|
{
|
|
name: t("models.entity.noCode.previews.entityRoutes.views.share.name"),
|
|
description: t("models.entity.noCode.previews.entityRoutes.views.share.description"),
|
|
href: rows.length > 0 ? `${entity.slug}/${rows[0].id}/share` : undefined,
|
|
error: rows.length === 0 ? t("models.entity.noCode.previews.errors.noRows") : undefined,
|
|
reloadDocument: true,
|
|
icon: <ShareIcon className="text-foreground mx-auto h-4 w-4" />,
|
|
},
|
|
],
|
|
},
|
|
];
|
|
if (!entity.isAutogenerated || entity.type === "system") {
|
|
previews.forEach((preview) => {
|
|
preview.views.forEach((view) => {
|
|
view.error = t("models.entity.noCode.previews.errors.notAutogenerated");
|
|
});
|
|
});
|
|
}
|
|
return previews;
|
|
}
|
|
|
|
export default {
|
|
getBlockPreviews,
|
|
getEntityPreviews,
|
|
};
|