Skip to content

Commit 84147ea

Browse files
committed
Delegate page field value update logic to Fieldtype classes.
1 parent c23558f commit 84147ea

File tree

6 files changed

+45
-42
lines changed

6 files changed

+45
-42
lines changed

src/Field/Mutation/CreateTemplatedPage.php

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -118,28 +118,14 @@ public function resolve($value, array $args, ResolveInfo $info)
118118
$field = $fields->get($fieldName);
119119

120120
// ignore if field cannot be found
121-
if (!$field instanceof Field) continue;
122-
123-
switch ($field->type->className()) {
124-
case 'FieldtypeMapMarker':
125-
$p->$fieldName->lat = $value['lat'];
126-
$p->$fieldName->lng = $value['lng'];
127-
$p->$fieldName->address = $value['address'];
128-
$p->$fieldName->zoom = $value['zoom'];
129-
break;
130-
131-
case 'FieldtypePage':
132-
$p->$fieldName = implode('|', $value);
133-
break;
134-
135-
case 'FieldtypeDatetime':
136-
$p->$fieldName = $value->format('Y-m-d H:i:s');
137-
break;
138-
139-
default:
140-
$p->$fieldName = $value;
141-
break;
121+
if (!$field instanceof Field) {
122+
continue;
142123
}
124+
125+
$className = $field->type->className();
126+
$Class = "\\ProcessWire\\GraphQL\\Field\\Page\\Fieldtype\\" . $className;
127+
$f = new $Class($field);
128+
$f->setValue($p, $value);
143129
}
144130

145131
// save the page to db

src/Field/Mutation/UpdateTemplatedPage.php

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -126,28 +126,14 @@ public function resolve($value, array $args, ResolveInfo $info)
126126
$field = $fields->get($fieldName);
127127

128128
// ignore if field cannot be found
129-
if (!$field instanceof Field) continue;
130-
131-
switch ($field->type->className()) {
132-
case 'FieldtypeMapMarker':
133-
$p->$fieldName->lat = $value['lat'];
134-
$p->$fieldName->lng = $value['lng'];
135-
$p->$fieldName->address = $value['address'];
136-
$p->$fieldName->zoom = $value['zoom'];
137-
break;
138-
139-
case 'FieldtypePage':
140-
$p->$fieldName = implode('|', $value);
141-
break;
142-
143-
case 'FieldtypeDatetime':
144-
$p->$fieldName = $value->format('Y-m-d H:i:s');
145-
break;
146-
147-
default:
148-
$p->$fieldName = $value;
149-
break;
129+
if (!$field instanceof Field) {
130+
continue;
150131
}
132+
133+
$className = $field->type->className();
134+
$Class = "\\ProcessWire\\GraphQL\\Field\\Page\\Fieldtype\\" . $className;
135+
$f = new $Class($field);
136+
$f->setValue($p, $value);
151137
}
152138

153139
// save the page to db

src/Field/Page/Fieldtype/AbstractFieldtype.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use Youshido\GraphQL\Type\NonNullType;
77
use Youshido\GraphQL\Execution\ResolveInfo;
88
use ProcessWire\Field;
9+
use ProcessWire\Page;
910

1011
abstract class AbstractFieldtype extends AbstractField {
1112

@@ -48,4 +49,10 @@ public function resolve($value, array $args, ResolveInfo $info)
4849
return $value->$fieldName;
4950
}
5051

52+
public function setValue(Page $page, $value)
53+
{
54+
$fieldName = $this->field->name;
55+
$page->$fieldName = $value;
56+
}
57+
5158
}

src/Field/Page/Fieldtype/FieldtypeDatetime.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Youshido\GraphQL\Type\Scalar\StringType;
66
use ProcessWire\GraphQL\Field\Page\Fieldtype\AbstractFieldtype;
77
use ProcessWire\GraphQL\Field\Traits\DatetimeResolverTrait;
8+
use ProcessWire\Page;
89

910
class FieldtypeDatetime extends AbstractFieldtype {
1011

@@ -15,4 +16,10 @@ public function getDefaultType()
1516

1617
use DatetimeResolverTrait;
1718

19+
public function setValue(Page $page, $value)
20+
{
21+
$fieldName = $this->field->name;
22+
$page->$fieldName = $value->format('Y-m-d H:i:s');
23+
}
24+
1825
}

src/Field/Page/Fieldtype/FieldtypeMapMarker.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use ProcessWire\GraphQL\Field\Page\Fieldtype\AbstractFieldtype;
66
use ProcessWire\GraphQL\Type\Object\MapMarkerType;
77
use ProcessWire\GraphQL\Type\Input\Inputfield\InputfieldMapMarker;
8+
use ProcessWire\Page;
89

910
class FieldtypeMapMarker extends AbstractFieldtype {
1011

@@ -18,4 +19,13 @@ public function getInputfieldType($type = null)
1819
return new InputfieldMapMarker();
1920
}
2021

22+
public function setValue(Page $page, $value)
23+
{
24+
$fieldName = $this->field->name;
25+
$page->$fieldName->lat = $value['lat'];
26+
$page->$fieldName->lng = $value['lng'];
27+
$page->$fieldName->address = $value['address'];
28+
$page->$fieldName->zoom = $value['zoom'];
29+
}
30+
2131
}

src/Field/Page/Fieldtype/FieldtypePage.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use ProcessWire\GraphQL\Type\Object\TemplatedPageArrayType;
1212
use ProcessWire\GraphQL\Field\Page\Fieldtype\AbstractFieldtype;
1313
use ProcessWire\GraphQL\Type\Scalar\SelectorType;
14+
use ProcessWire\Page;
1415

1516
class FieldtypePage extends AbstractFieldtype {
1617

@@ -40,4 +41,10 @@ public function resolve($value, array $args, ResolveInfo $info)
4041
return $value->$fieldName->find($defaultSelector->serialize(""));
4142
}
4243

44+
public function setValue(Page $page, $value)
45+
{
46+
$fieldName = $this->field->name;
47+
$page->$fieldName = implode('|', $value);
48+
}
49+
4350
}

0 commit comments

Comments
 (0)