๐Ÿ“ฆ payloadcms / plugin-redirects

๐Ÿ“„ index.ts ยท 82 lines
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82import type { Config } from 'payload/config'

import deepMerge from './deepMerge'
import type { PluginConfig } from './types'

const redirects =
  (pluginConfig: PluginConfig) =>
  (incomingConfig: Config): Config => ({
    ...incomingConfig,
    collections: [
      ...(incomingConfig?.collections || []),
      deepMerge(
        {
          slug: 'redirects',
          admin: {
            defaultColumns: ['from', 'to.type', 'createdAt'],
          },
          access: {
            read: (): boolean => true,
          },
          fields: [
            {
              name: 'from',
              label: 'From URL',
              index: true,
              required: true,
              type: 'text',
            },
            {
              name: 'to',
              label: false,
              type: 'group',
              fields: [
                {
                  name: 'type',
                  label: 'To URL Type',
                  type: 'radio',
                  options: [
                    {
                      label: 'Internal link',
                      value: 'reference',
                    },
                    {
                      label: 'Custom URL',
                      value: 'custom',
                    },
                  ],
                  defaultValue: 'reference',
                  admin: {
                    layout: 'horizontal',
                  },
                },
                {
                  name: 'reference',
                  label: 'Document to redirect to',
                  type: 'relationship',
                  relationTo: pluginConfig?.collections || [],
                  required: true,
                  admin: {
                    condition: (_, siblingData) => siblingData?.type === 'reference',
                  },
                },
                {
                  name: 'url',
                  label: 'Custom URL',
                  type: 'text',
                  required: true,
                  admin: {
                    condition: (_, siblingData) => siblingData?.type === 'custom',
                  },
                },
              ],
            },
          ],
        },
        pluginConfig?.overrides || {},
      ),
    ],
  })

export default redirects