-
Notifications
You must be signed in to change notification settings - Fork 0
/
schema.ts
142 lines (140 loc) · 3.29 KB
/
schema.ts
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
import { list } from '@keystone-6/core';
import {
text,
relationship,
password,
image,
decimal,
select,
timestamp,
} from '@keystone-6/core/fields';
import { document } from '@keystone-6/fields-document';
import { Lists } from '.keystone/types';
export const lists: Lists = {
User: list({
fields: {
name: text({ validation: { isRequired: true } }),
email: text({
validation: { isRequired: true },
isIndexed: 'unique',
isFilterable: true,
}),
password: password({ validation: { isRequired: true } }),
product: relationship({ ref: 'User', many: true})
},
}),
Product: list({
fields: {
name: text({ validation: { isRequired: true }}),
manufacturer: relationship({
ref: 'Manufacturer',
many: false,
ui: { displayMode: 'select'},
}),
summary: text({ validation: { isRequired: true }, ui: { displayMode: 'textarea'}}),
description: document({
formatting: true,
dividers: true,
links: true,
layouts: [
[1, 1],
[1, 1, 1],
],
}),
status: select({
options: [
{ label: 'Draft', value: 'draft'},
{ label: 'Enable', value: 'enable'},
{ label: 'Disable', value: 'disable'},
],
defaultValue: 'draft',
ui: { displayMode: 'segmented-control'},
}),
productImage: image(),
prices: relationship({
ref: 'VariantPrice',
many: true,
ui: {
displayMode: 'cards',
cardFields: ['variant', 'price'],
linkToItem: true,
inlineCreate: { fields: ['variant', 'price']},
inlineEdit: { fields: ['variant', 'price']},
inlineConnect: true,
}
}),
sale: select({
options: [
{ label: 'Draft', value: 'draft'},
{ label: 'Enable', value: 'enable'},
{ label: 'Disable', value: 'disable'},
],
defaultValue: 'draft',
ui: { displayMode: 'segmented-control'},
}),
saleStart: timestamp(),
saleEnd: timestamp(),
salePrices: relationship({
ref: 'VariantPrice',
many: true,
ui: {
displayMode: 'cards',
cardFields: ['variant', 'price'],
linkToItem: true,
inlineCreate: { fields: ['variant', 'price']},
inlineEdit: { fields: ['variant', 'price']},
inlineConnect: true,
}
}),
},
}),
Variant: list({
fields: {
name: text()
},
}),
ProductVariant: list({
fields: {
variant: relationship({
ref: 'Variant',
many: false,
}),
value: text({isIndexed: 'unique'})
},
ui: {
labelField: 'value',
listView: {
initialColumns: [
"variant",
"value",
]
}
}
}),
VariantPrice: list({
fields: {
variant: relationship({
ref: 'ProductVariant',
many: false,
}),
price: decimal({
precision: 7,
scale: 2,
}),
},
ui: {
labelField: 'price',
listView: {
initialColumns: [
"variant",
"price",
]
}
}
}),
Manufacturer: list({
fields: {
name: text({ validation: { isRequired: true } }),
}
})
}