Files
payloadcms/test/helpers/adminUrlUtil.ts
2025-05-22 10:04:45 -04:00

100 lines
2.2 KiB
TypeScript

import type { Config } from 'payload'
// IMPORTANT: ensure that imports do not contain React components, etc. as this breaks Playwright tests
// Instead of pointing to the bundled code, which will include React components, use direct import paths
import { formatAdminURL } from '../../packages/ui/src/utilities/formatAdminURL.js' // eslint-disable-line payload/no-relative-monorepo-imports
export class AdminUrlUtil {
account: string
admin: string
byFolder: string
create: string
entitySlug: string
list: string
login: string
logout: string
routes: Config['routes']
serverURL: string
constructor(serverURL: string, slug: string, routes?: Config['routes']) {
this.routes = {
admin: routes?.admin || '/admin',
}
this.serverURL = serverURL
this.entitySlug = slug
this.admin = formatAdminURL({
adminRoute: this.routes.admin,
path: '',
serverURL: this.serverURL,
})
this.account = formatAdminURL({
adminRoute: this.routes.admin,
path: '/account',
serverURL: this.serverURL,
})
this.login = formatAdminURL({
adminRoute: this.routes.admin,
path: '/login',
serverURL: this.serverURL,
})
this.logout = formatAdminURL({
adminRoute: this.routes.admin,
path: '/logout',
serverURL: this.serverURL,
})
this.list = formatAdminURL({
adminRoute: this.routes.admin,
path: `/collections/${this.entitySlug}`,
serverURL: this.serverURL,
})
this.create = formatAdminURL({
adminRoute: this.routes.admin,
path: `/collections/${this.entitySlug}/create`,
serverURL: this.serverURL,
})
this.byFolder = formatAdminURL({
adminRoute: this.routes.admin,
path: `/collections/${this.entitySlug}/payload-folders`,
serverURL: this.serverURL,
})
}
collection(slug: string): string {
return formatAdminURL({
adminRoute: this.routes?.admin,
path: `/collections/${slug}`,
serverURL: this.serverURL,
})
}
edit(id: number | string): string {
return `${this.list}/${id}`
}
global(slug: string): string {
return formatAdminURL({
adminRoute: this.routes?.admin,
path: `/globals/${slug}`,
serverURL: this.serverURL,
})
}
}