Skip to content

Commit f9f7131

Browse files
committed
FEATURE: enable backend module extension
1 parent a843839 commit f9f7131

5 files changed

Lines changed: 98 additions & 20 deletions

File tree

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
namespace Flowpack\DecoupledContentStore\BackendUi\FusionObjects;
4+
5+
use Neos\Flow\Annotations as Flow;
6+
use Neos\Flow\Mvc\FlashMessage\FlashMessageService;
7+
use Neos\Fusion\FusionObjects\AbstractFusionObject;
8+
use Neos\Error\Messages\Message;
9+
10+
class RetrieveFlashMessagesImplementation extends AbstractFusionObject
11+
{
12+
/**
13+
* @Flow\Inject
14+
* @var FlashMessageService
15+
*/
16+
protected $flashMessageService;
17+
18+
public function evaluate()
19+
{
20+
$messages = $this->flashMessageService->getFlashMessageContainerForRequest($this->runtime->getControllerContext()->getRequest())->getMessagesAndFlush();
21+
return array_map(function (Message $message) {
22+
return [
23+
'message' => $message->getMessage(),
24+
'severity' => $message->getSeverity()
25+
];
26+
}, $messages);
27+
}
28+
}

Configuration/Views.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
-
2-
requestFilter: 'parentRequest.isPackage("Neos.Neos") && isFormat("html") && isPackage("Flowpack.DecoupledContentStore")'
2+
requestFilter: 'isPackage("Flowpack.DecoupledContentStore")'
33
options:
44
fusionPathPatterns:
55
- 'resource://Flowpack.DecoupledContentStore/Private/BackendFusion'

README.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,34 @@ Flowpack:
338338
This is needed so that the system knows which keys should be synchronized between the different content stores,
339339
and what data to delete if a release is removed.
340340

341+
### Extending the backend module
342+
343+
- You need a Views.yaml in your package, looking like this:
344+
```
345+
-
346+
requestFilter: 'isPackage("Flowpack.DecoupledContentStore")'
347+
viewObjectName: 'Neos\Fusion\View\FusionView'
348+
options:
349+
fusionPathPatterns:
350+
- 'resource://Flowpack.DecoupledContentStore/Private/BackendFusion'
351+
- 'resource://Vendor.Site/Private/DecoupledContentStoreFusion'
352+
```
353+
- Ensure that your package depends on `flowpack/decoupledcontentstore` in composer.json (so that your Views.yaml "wins" because the DecoupledContentStore-Package comes with its own Views.yaml)
354+
- Add a Root.fusion in `Vendor.Site/Resources/Private/DecoupledContentStoreFusion` which can contain your modifications
355+
- We currently support the following adjustments:
356+
- Adding a button to the footer
357+
```
358+
prototype(Flowpack.DecoupledContentStore:ListFooter) {
359+
test = '<span class="align-middle inline-block text-sm pr-4 pl-16">TEST</span>'
360+
test.@position = 'before reload'
361+
}
362+
```
363+
- Adding a flash message
364+
```
365+
// ActionController
366+
$this->addFlashMessage('warning', Error\Message::SEVERITY_WARNING);
367+
```
368+
341369
## Development
342370

343371
- You need [pnpm](https://github.com/pnpm/pnpm) as package panager installed: `curl -f https://get.pnpm.io/v6.js | node - add --global pnpm`
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
prototype(Flowpack.DecoupledContentStore:FlashMessages) < prototype(Neos.Fusion:Component) {
2+
flashMessages = Flowpack.DecoupledContentStore:RetrieveFlashMessages
3+
4+
renderer = afx`
5+
<ul id="neos-notifications-inline" @if.hasFlashMessages={props.flashMessages}>
6+
<Neos.Fusion:Loop items={props.flashMessages}>
7+
<li data-type="item.severity">
8+
{item.message}
9+
</li>
10+
</Neos.Fusion:Loop>
11+
</ul>
12+
`
13+
}
14+
15+
prototype(Flowpack.DecoupledContentStore:RetrieveFlashMessages) {
16+
@class = 'Flowpack\\DecoupledContentStore\\BackendUi\\FusionObjects\\RetrieveFlashMessagesImplementation'
17+
}

Resources/Private/BackendFusion/Integration/Backend.Index.fusion

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ Flowpack.DecoupledContentStore.BackendController.index = Neos.Fusion:Component {
6262
}
6363
}
6464
renderer = afx`
65+
<Flowpack.DecoupledContentStore:FlashMessages id="neos-notifications-inline" class="flashmessages" />
6566
<form id="postHelper" method="post">
6667
<input
6768
type="hidden"
@@ -102,33 +103,37 @@ Flowpack.DecoupledContentStore.BackendController.index = Neos.Fusion:Component {
102103
Cancel running release
103104
</button>
104105

105-
<Flowpack.DecoupledContentStore:ListFooter />
106+
<div class="neos-footer">
107+
<Flowpack.DecoupledContentStore:ListFooter />
108+
</div>
106109
</div>
107110
</div>
108111
`
109112
}
110113
}
111114

112-
prototype(Flowpack.DecoupledContentStore:ListFooter) < prototype(Neos.Fusion:Component) {
113-
_publishAllUri = Neos.Fusion:UriBuilder {
114-
action = 'publishAll'
115-
}
116-
117-
renderer = afx`
118-
<div class="neos-footer">
119-
<Neos.Fusion:Link.Action href.action="index" class="neos-button">
120-
<i class="fa fa-sync"></i> Reload
115+
prototype(Flowpack.DecoupledContentStore:ListFooter) < prototype(Neos.Fusion:Join) {
116+
reload = afx`
117+
<Neos.Fusion:Link.Action href.action="index" class="neos-button">
118+
<i class="fa fa-sync"></i> Reload
119+
</Neos.Fusion:Link.Action>
120+
`
121+
activeContentStoreLabel = '<span class="align-middle inline-block text-sm pr-4 pl-16">Active Content Store:</span>'
122+
switchContentStore = afx`
123+
<Neos.Fusion:Loop items={redisContentStores}>
124+
<Neos.Fusion:Link.Action href.action="index" href.arguments={{contentStore: item}} class={AtomicFusion.classNames('neos-button', {'neos-button-primary': item == contentStore})}>
125+
{item}
121126
</Neos.Fusion:Link.Action>
122-
<span class="align-middle inline-block text-sm pr-4 pl-16">Active Content Store:</span>
123-
<Neos.Fusion:Loop items={redisContentStores}>
124-
<Neos.Fusion:Link.Action href.action="index" href.arguments={{contentStore: item}} class={AtomicFusion.classNames('neos-button', {'neos-button-primary': item == contentStore})}>
125-
{item}
126-
</Neos.Fusion:Link.Action>
127-
</Neos.Fusion:Loop>
128-
127+
</Neos.Fusion:Loop>
128+
`
129+
publishAll = Neos.Fusion:Component {
130+
_publishAllUri = Neos.Fusion:UriBuilder {
131+
action = 'publishAll'
132+
}
133+
renderer = afx`
129134
<button form="postHelper" formaction={props._publishAllUri} type="submit" class="neos-button neos-button-warning neos-pull-right">
130135
Publish All
131136
</button>
132-
</div>
133-
`
137+
`
138+
}
134139
}

0 commit comments

Comments
 (0)