forked from tinacms/tina-starter-alpaca
-
Notifications
You must be signed in to change notification settings - Fork 0
/
useNavigationForm.js
87 lines (81 loc) · 2.09 KB
/
useNavigationForm.js
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
82
83
84
85
86
87
import { useGithubJsonForm } from "react-tinacms-github"
import { flatDocs, getRandID } from "@utils"
/*
Adds a form for changing the order of the doc navigation and adding new things to the navignation
*/
const useNavigationForm = (jsonFile, preview) => {
if (!preview) {
// if we are not in preview return the jsonfile and don't register the form
return [jsonFile.data, null]
}
const allFlatDocs = flatDocs(jsonFile.data.config)
// the list of slugs
const slugList = allFlatDocs.map((el) => el.slug)
// the fields for the doc pages
const docFields = [
{
label: "title",
name: "title",
component: "text",
},
{
label: "Type (link or or group)",
name: "type",
component: "select",
options: ["link", "group"],
},
{
label: "Choose linked page",
name: "slug",
component: "select",
options: slugList,
},
]
// this returns the children group list field
const childrenGroupListField = (label = "Children", name = "children", description = "") => {
return {
label,
name,
component: "group-list",
description,
itemProps: (item) => ({
key: item.id,
label: `${item.title} (${item.type})`,
}),
defaultItem: () => ({
type: "link",
slug: "getting-started",
title: "new doc page",
children: [],
id: getRandID(),
}),
}
}
const formOptions = {
label: "Navigation",
__type: "screen",
fields: [
{
...childrenGroupListField("Doc list", "config"),
fields: [
// cant have top level groups
...docFields.filter((item) => item.name !== "type"),
{
...childrenGroupListField(),
fields: [
...docFields,
{
...childrenGroupListField(),
fields: [...docFields],
},
],
},
],
},
//...
],
}
// returns the in the form [jsonFile, Form]
return useGithubJsonForm(jsonFile, formOptions)
}
export default useNavigationForm