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: , }); }); 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: , }, { name: t("models.entity.noCode.previews.entityRoutes.views.listDefault.name"), description: t("models.entity.noCode.previews.entityRoutes.views.listDefault.description"), href: `${entity.slug}`, icon: , }, { 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: , }, { 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: , }, { 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: , }, { 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: , }, { 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: , }, { 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: , }, { 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: , }, ], }, ]; 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, };