diff --git a/apps/client/src/features/home/components/recent-changes.tsx b/apps/client/src/features/home/components/recent-changes.tsx index 7a7ff47..31d979c 100644 --- a/apps/client/src/features/home/components/recent-changes.tsx +++ b/apps/client/src/features/home/components/recent-changes.tsx @@ -1,10 +1,10 @@ import { Text, Group, Stack, UnstyledButton, Divider } from "@mantine/core"; -import { format } from "date-fns"; import classes from "./home.module.css"; import { Link } from "react-router-dom"; import PageListSkeleton from "@/features/home/components/page-list-skeleton"; import { useRecentChangesQuery } from "@/features/page/queries/page-query"; import { buildPageSlug } from "@/features/page/page.utils.ts"; +import { formattedDate } from "@/lib/time.ts"; function RecentChanges() { const { data, isLoading, isError } = useRecentChangesQuery(); @@ -35,7 +35,7 @@ function RecentChanges() { - {format(new Date(page.updatedAt), "PP")} + {formattedDate(page.updatedAt)} diff --git a/apps/client/src/features/page-history/components/history-item.tsx b/apps/client/src/features/page-history/components/history-item.tsx index 39b09ba..e4fefdf 100644 --- a/apps/client/src/features/page-history/components/history-item.tsx +++ b/apps/client/src/features/page-history/components/history-item.tsx @@ -1,6 +1,6 @@ import { Text, Group, UnstyledButton } from "@mantine/core"; import { UserAvatar } from "@/components/ui/user-avatar"; -import { formatDate } from "@/lib/time"; +import { formattedDate } from "@/lib/time"; import classes from "./history.module.css"; import clsx from "clsx"; @@ -19,7 +19,9 @@ function HistoryItem({ historyItem, onSelect, isActive }: HistoryItemProps) { >
- {formatDate(new Date(historyItem.createdAt))} + + {formattedDate(new Date(historyItem.createdAt))} +
diff --git a/apps/client/src/lib/time.ts b/apps/client/src/lib/time.ts index 8e20e65..7651f82 100644 --- a/apps/client/src/lib/time.ts +++ b/apps/client/src/lib/time.ts @@ -1,16 +1,16 @@ -import { formatDistanceStrict } from 'date-fns'; -import { format, isToday, isYesterday } from 'date-fns'; +import { formatDistanceStrict } from "date-fns"; +import { format, isToday, isYesterday } from "date-fns"; export function timeAgo(date: Date) { return formatDistanceStrict(new Date(date), new Date(), { addSuffix: true }); } -export function formatDate(date: Date) { +export function formattedDate(date: Date) { if (isToday(date)) { - return `Today, ${format(date, 'h:mma')}`; + return `Today, ${format(date, "h:mma")}`; } else if (isYesterday(date)) { - return `Yesterday, ${format(date, 'h:mma')}`; + return `Yesterday, ${format(date, "h:mma")}`; } else { - return format(date, 'MMM dd, yyyy, h:mma'); + return format(date, "MMM dd, yyyy, h:mma"); } } diff --git a/apps/server/src/core/space/dto/create-space.dto.ts b/apps/server/src/core/space/dto/create-space.dto.ts index a22e6d6..5f02287 100644 --- a/apps/server/src/core/space/dto/create-space.dto.ts +++ b/apps/server/src/core/space/dto/create-space.dto.ts @@ -10,7 +10,8 @@ export class CreateSpaceDto { @IsString() description?: string; - @IsOptional() + @MinLength(4) + @MaxLength(64) @IsString() - slug?: string; + slug: string; } diff --git a/apps/server/src/core/space/services/space.service.ts b/apps/server/src/core/space/services/space.service.ts index 45f9e3e..bc27516 100644 --- a/apps/server/src/core/space/services/space.service.ts +++ b/apps/server/src/core/space/services/space.service.ts @@ -10,8 +10,6 @@ import { KyselyTransaction } from '@docmost/db/types/kysely.types'; import { Space } from '@docmost/db/types/entity.types'; import { PaginationResult } from '@docmost/db/pagination/pagination'; import { UpdateSpaceDto } from '../dto/update-space.dto'; -// eslint-disable-next-line @typescript-eslint/no-var-requires -const { slugify } = require('fix-esm').require('@sindresorhus/slugify'); @Injectable() export class SpaceService { @@ -23,14 +21,14 @@ export class SpaceService { createSpaceDto: CreateSpaceDto, trx?: KyselyTransaction, ): Promise { - const slug = slugify( - createSpaceDto?.slug?.toLowerCase() ?? createSpaceDto.name.toLowerCase(), + const slugExists = await this.spaceRepo.slugExists( + createSpaceDto.slug, + workspaceId, + trx, ); - - const slugExists = await this.spaceRepo.slugExists(slug, workspaceId, trx); if (slugExists) { throw new BadRequestException( - 'Slug exist. Please use a unique space slug', + 'Slug exists. Please use a unique space slug', ); } @@ -40,7 +38,7 @@ export class SpaceService { description: createSpaceDto.description ?? '', creatorId: userId, workspaceId: workspaceId, - slug: slug, + slug: createSpaceDto.slug, }, trx, ); diff --git a/apps/server/src/core/workspace/services/workspace.service.ts b/apps/server/src/core/workspace/services/workspace.service.ts index 56c8f28..72ece96 100644 --- a/apps/server/src/core/workspace/services/workspace.service.ts +++ b/apps/server/src/core/workspace/services/workspace.service.ts @@ -104,6 +104,7 @@ export class WorkspaceService { // create default space const spaceInfo: CreateSpaceDto = { name: 'General', + slug: 'general', }; const createdSpace = await this.spaceService.create(