Skip to content

Commit ca95718

Browse files
authored
fix: group fields and related issues (#103)
1 parent da1733e commit ca95718

8 files changed

Lines changed: 64 additions & 16 deletions

File tree

packages/prime-core/__tests__/utils/createSchemaQuery.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,9 @@ export const createSchemaQuery = (name, fields) => {
6363
title: name,
6464
description: name,
6565
variant: enumValue('Default'),
66-
settings: {},
66+
settings: {
67+
mutations: true,
68+
},
6769
fields: [
6870
{
6971
title: 'Main',

packages/prime-core/src/modules/external/index.ts

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,16 @@ export const createExternal = async (connection: Connection) => {
6969

7070
if (schema.variant === SchemaVariant.Default) {
7171
queries[name] = SchemaTypeConfig;
72-
queries[`all${name}`] = connectionType;
73-
mutations[`create${name}`] = createType;
74-
mutations[`update${name}`] = updateType;
75-
mutations[`remove${name}`] = DocumentRemove;
72+
73+
if (!schema.settings.single) {
74+
queries[`all${name}`] = connectionType;
75+
}
76+
77+
if (schema.settings.mutations) {
78+
mutations[`create${name}`] = createType;
79+
mutations[`update${name}`] = updateType;
80+
mutations[`remove${name}`] = DocumentRemove;
81+
}
7682
}
7783

7884
types.set(`create${name}`, createType);
@@ -101,10 +107,22 @@ export const createExternal = async (connection: Connection) => {
101107
resolvers[`remove${name}`] = await createDocumentRemoveResolver(payload);
102108

103109
queries[name].resolve = resolvers[name];
104-
queries[`all${name}`].resolve = resolvers[`all${name}`];
105-
mutations[`create${name}`].resolve = resolvers[`create${name}`];
106-
mutations[`update${name}`].resolve = resolvers[`update${name}`];
107-
mutations[`remove${name}`].resolve = resolvers[`remove${name}`];
110+
111+
if (queries[`all${name}`]) {
112+
queries[`all${name}`].resolve = resolvers[`all${name}`];
113+
}
114+
115+
if (mutations[`create${name}`]) {
116+
mutations[`create${name}`].resolve = resolvers[`create${name}`];
117+
}
118+
119+
if (mutations[`update${name}`]) {
120+
mutations[`update${name}`].resolve = resolvers[`update${name}`];
121+
}
122+
123+
if (mutations[`remove${name}`]) {
124+
mutations[`remove${name}`].resolve = resolvers[`remove${name}`];
125+
}
108126

109127
const SchemaType = types.get(schema.name)!.type!;
110128

packages/prime-core/src/modules/external/resolvers/createDocumentResolver.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { getRepository, IsNull, Raw } from 'typeorm';
22
import { Document } from '../../../entities/Document';
33
import { SchemaPayload } from '../interfaces/SchemaPayload';
44

5-
const getDefaultLocale = () => 'en';
5+
const getDefaultLocale = async () => 'en';
66

77
export const createDocumentResolver = async ({
88
name,
@@ -13,9 +13,10 @@ export const createDocumentResolver = async ({
1313
const documentRepository = getRepository(Document);
1414

1515
return async (root, args: { id: string; locale?: string }, context, info) => {
16-
const key = args.id.length === 36 ? 'id' : 'documentId';
16+
const key = args.id && args.id.length === 36 ? 'id' : 'documentId';
1717
const locale = args.locale || (await getDefaultLocale());
1818
const single = schema.settings.single;
19+
1920
const where = {
2021
...(!single && { [key]: args.id }),
2122
...((single || key === 'documentId') && {

packages/prime-field-group/src/PrimeFieldGroup.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,4 +98,16 @@ export class PrimeFieldGroup extends PrimeField {
9898
fields,
9999
});
100100
}
101+
102+
public async processOutput(value) {
103+
if (!Array.isArray(value) && this.options.repeated) {
104+
return [value];
105+
}
106+
107+
if (Array.isArray(value) && !this.options.repeated) {
108+
return value[0];
109+
}
110+
111+
return value;
112+
}
101113
}

packages/prime-field-group/src/ui/InputComponent.tsx

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ const { uuid = { v4: randomUuid } } = window as any;
1818
const initialToken = uuid.v4();
1919

2020
const getItems = ({ initialValue, field }: PrimeFieldProps) => {
21-
if (!field.options.repeated) {
21+
const options = { ...field.defaultOptions, ...field.options };
22+
if (!options.repeated) {
2223
return [[initialToken, 0]];
2324
}
2425

@@ -39,6 +40,11 @@ export class InputComponent extends React.PureComponent<PrimeFieldProps, any> {
3940
index: getIndex(this.props),
4041
};
4142

43+
get options() {
44+
const { field } = this.props;
45+
return { ...field.defaultOptions, ...field.options };
46+
}
47+
4248
public componentWillReceiveProps(nextProps: PrimeFieldProps) {
4349
if (!this.props.document && nextProps.document) {
4450
this.setState({
@@ -77,7 +83,7 @@ export class InputComponent extends React.PureComponent<PrimeFieldProps, any> {
7783
};
7884

7985
public renderField = (field: any, key: string, index: number) => {
80-
const repeated = get(this.props.field, 'options.repeated', false);
86+
const repeated = this.options.repeated;
8187
const prefix = repeated ? `${index}.` : '';
8288
const path = `${this.props.path}.${prefix}${field.name}`;
8389
const initialValue = get(this.props.initialValue, `${prefix}${field.name}`);
@@ -93,7 +99,7 @@ export class InputComponent extends React.PureComponent<PrimeFieldProps, any> {
9399
public renderGroupItem = ([key, index]: any) => {
94100
const { field } = this.props;
95101
const { fields = [] } = field;
96-
const repeated = get(field, 'options.repeated', false);
102+
const repeated = this.options.repeated;
97103

98104
if (!key) {
99105
return null;
@@ -119,7 +125,7 @@ export class InputComponent extends React.PureComponent<PrimeFieldProps, any> {
119125
public render() {
120126
const { items } = this.state;
121127
const { field } = this.props;
122-
const repeated = get(field, 'options.repeated', false);
128+
const repeated = this.options.repeated;
123129

124130
if (field.fields.length === 0) {
125131
return null;

packages/prime-field/src/interfaces/SchemaField.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export interface SchemaField {
1111
position: number;
1212
primary: boolean;
1313
options: any;
14+
defaultOptions?: any;
1415
fields: SchemaField[];
1516
parentFieldId?: string;
1617
parentField?: SchemaField | null;

packages/prime-ui/src/routes/schemas/components/EditContentType.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ const EditContentTypeBase = ({ form, onCancel, onSubmit, schemas, schemaId, item
173173
</Form.Item>
174174
<Form.Item label="Mutations">
175175
{getFieldDecorator('settings.mutations', {
176-
initialValue: true,
176+
initialValue: false,
177177
valuePropName: 'checked',
178178
})(<Switch />)}
179179
</Form.Item>

packages/prime-ui/src/stores/models/Schema.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { destroy, detach, getParent, hasParentOfType, Instance, types } from 'mobx-state-tree';
22
import { JSONObject } from '../../interfaces/JSONObject';
3+
import { Settings } from '../settings';
34

45
export type ISchemaField = Instance<typeof SchemaField>;
56
export interface IAddField {
@@ -35,6 +36,13 @@ export const SchemaField = types
3536
get isLeaf() {
3637
return !hasParentOfType(self, SchemaField);
3738
},
39+
get defaultOptions() {
40+
const settingsField = Settings.fields.find((f: any) => f.type === self.type);
41+
if (settingsField) {
42+
return settingsField.options;
43+
}
44+
return {};
45+
},
3846
}))
3947
.actions(self => ({
4048
update(obj: {

0 commit comments

Comments
 (0)