Skip to content

Commit

Permalink
Fix defaultFieldMode (#8222)
Browse files Browse the repository at this point in the history
  • Loading branch information
emmatown committed Jan 5, 2023
1 parent 44aacdb commit 808505c
Show file tree
Hide file tree
Showing 3 changed files with 129 additions and 9 deletions.
5 changes: 5 additions & 0 deletions .changeset/warm-ads-nail.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@keystone-6/core': patch
---

Fixes `defaultFieldMode`
16 changes: 13 additions & 3 deletions packages/core/src/admin-ui/system/createAdminMeta.ts
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,8 @@ export function createAdminMeta(
for (const [listKey, list] of Object.entries(initialisedLists)) {
if (omittedLists.includes(listKey)) continue;

const listConfig = lists[listKey];

for (const [fieldKey, field] of Object.entries(list.fields)) {
// If the field is a relationship field and is related to an omitted list, skip.
if (field.dbField.kind === 'relation' && omittedLists.includes(field.dbField.list)) continue;
Expand Down Expand Up @@ -192,17 +194,25 @@ export function createAdminMeta(
search: list.ui.searchableFields.get(fieldKey) ?? null,
createView: {
fieldMode: normalizeMaybeSessionFunction(
field.graphql.isEnabled.create ? field.ui?.createView?.fieldMode ?? 'edit' : 'hidden'
field.graphql.isEnabled.create
? field.ui?.createView?.fieldMode ??
listConfig.ui?.createView?.defaultFieldMode ??
'edit'
: 'hidden'
),
},
itemView: {
fieldMode: field.graphql.isEnabled.update
? field.ui?.itemView?.fieldMode ?? ('edit' as const)
? field.ui?.itemView?.fieldMode ??
listConfig.ui?.itemView?.defaultFieldMode ??
('edit' as const)
: 'read',
fieldPosition: field.ui?.itemView?.fieldPosition || 'form',
},
listView: {
fieldMode: normalizeMaybeSessionFunction(field.ui?.listView?.fieldMode ?? 'read'),
fieldMode: normalizeMaybeSessionFunction(
field.ui?.listView?.fieldMode ?? listConfig.ui?.listView?.defaultFieldMode ?? 'read'
),
},
isFilterable: normalizeIsOrderFilter(
field.input?.where ? field.graphql.isEnabled.filter : false,
Expand Down
117 changes: 111 additions & 6 deletions tests/api-tests/admin-meta.test.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { list } from '@keystone-6/core';
import { allowAll } from '@keystone-6/core/access';
import { text } from '@keystone-6/core/fields';
import { integer, text } from '@keystone-6/core/fields';
import { setupTestRunner } from '@keystone-6/api-tests/test-runner';
import { staticAdminMetaQuery } from '../../packages/core/src/admin-ui/admin-meta-graphql';
import { apiTestConfig, dbProvider } from './utils';
Expand All @@ -11,11 +11,24 @@ const runner = setupTestRunner({
isAccessAllowed: () => false,
},
lists: {
// prettier-ignore
User: list({
access: allowAll,
ui: {
createView: { defaultFieldMode: 'hidden' },
itemView: { defaultFieldMode: 'read' },
listView: { defaultFieldMode: 'hidden' },
},
fields: {
name: text()
name: text({
ui: {
createView: {
fieldMode: 'edit',
},
itemView: { fieldMode: 'hidden' },
listView: { fieldMode: 'read' },
},
}),
something: integer(),
},
}),
},
Expand Down Expand Up @@ -85,16 +98,36 @@ test(
},
},
itemView: {
fieldMode: 'edit',
fieldMode: 'hidden',
},
label: 'Name',
path: 'name',
search: dbProvider === 'postgresql' ? 'insensitive' : 'default',
viewsIndex: 1,
},
{
__typename: 'KeystoneAdminUIFieldMeta',
customViewsIndex: null,
description: null,
fieldMeta: {
defaultValue: null,
validation: {
isRequired: false,
max: 2147483647,
min: -2147483648,
},
},
itemView: {
fieldMode: 'read',
},
label: 'Something',
path: 'something',
search: null,
viewsIndex: 2,
},
],
groups: [],
initialColumns: ['name'],
initialColumns: ['name', 'something'],
initialSort: null,
itemQueryName: 'User',
key: 'User',
Expand All @@ -120,6 +153,9 @@ const names = {
singular: 'Test Thing',
path: 'thing',
};

const gql = ([content]: TemplateStringsArray) => content;

test(
'ui.{label,plural,singular,path} are returned in the admin meta',

Expand All @@ -134,7 +170,6 @@ test(
},
}),
})(async ({ context }) => {
const gql = ([content]: TemplateStringsArray) => content;
const res = await context.sudo().graphql.raw({
query: gql`
query {
Expand All @@ -156,3 +191,73 @@ test(
});
})
);

test(
'listView and createView',
runner(async ({ context }) => {
const data = await context.sudo().graphql.run({
query: gql`
query {
keystone {
adminMeta {
lists {
key
fields {
path
createView {
fieldMode
}
listView {
fieldMode
}
}
}
}
}
}
`,
});
expect(data).toMatchInlineSnapshot(`
{
"keystone": {
"adminMeta": {
"lists": [
{
"fields": [
{
"createView": {
"fieldMode": "hidden",
},
"listView": {
"fieldMode": "hidden",
},
"path": "id",
},
{
"createView": {
"fieldMode": "edit",
},
"listView": {
"fieldMode": "read",
},
"path": "name",
},
{
"createView": {
"fieldMode": "hidden",
},
"listView": {
"fieldMode": "hidden",
},
"path": "something",
},
],
"key": "User",
},
],
},
},
}
`);
})
);

1 comment on commit 808505c

@vercel
Copy link

@vercel vercel bot commented on 808505c Jan 5, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.