enonic-wizardry v0.5.0-next.1
Enonic Wizardry
Functional utility library for Enonic XP. This library is intended to house reusable and tested code blocks based on enonic-fp that can be used in every project.
Enonic-fp
Enonic-wizardry is intended to supplement enonic-fp with common patterns.
Code generation
We recommend using this library together with the
xp-codegen-plugin Gradle plugin. xp-codegen-plugin will create TypeScript
interfaces for your content-types. Those interfaces will be very useful together with this library.
Building the project
npm run buildUsage
Get content by key service
In this example we have a service that returns an article by the key as json. Or if something goes wrong, we return
an Internal Server Error instead.
import {fold} from "fp-ts/lib/IOEither";
import {pipe} from "fp-ts/lib/pipeable";
import {Request, Response} from "enonic-types/controller";
import {errorResponse, ok} from "enonic-fp/controller";
import {Article} from "../../site/content-types/article/article"; // 1
import {getContentByIds} from "enonic-wizardry/content";
import {forceArray} from "enonic-fp/array";
export function get(req: Request): Response { // 2
const keys: Array<string> = forceArray(req.params.key); // ["key1", "key2", "key3"]
const program = pipe( // 3
getContentByIds<Article>(keys), // 4
fold( // 5
errorResponse(req), // 7
ok // 8
)
);
return program(); // 9
}- We import an
interface Article { ... }generated by xp-codegen-plugin. - We use the imported
RequestandResponseto control the shape of our controller. - We use the
pipefunction from fp-ts to pipe the result of one function into the next one. - We can use the
getContentByIdsfunction fromcontentthat query for theContent<Article>where the id is one of the strings in thekeys-Array. The return type here isIOEither<EnonicError, ReadonlyArray<Content<Article>>> - The last thing we usually do in
pipeis to unpack theIOEither. This is done withfold(handleError, handleSuccess). - The
errorResponse(req: Request)function returns a new function that can be used as a callback byfold. This "new function", takes theEnonicErrorobject as a parameter, and creates a JsonResponsewith the correct status number, based on theerrorKeyof theEnonicError. - We pass the
okfunction tofoldas the second parameter. Theokcreates aResponsewhere thestatusis200, and the parameter is thebody. In this case theReadonlyArray<Content<Article>>is assigned to thebody. - We have so far constructed a constant
programof typeIO<Response>, but we have not yet performed a single side effect. It's time to perform those side effects, so we run theIOby calling it, and aResponseis returned which out controller function can return.
API
getContentByIdscreateAllcreateAndPublishdeleteAndPublishmodifyAndPublishapplyChangesToDatacreateMediaFromAttachment
runAsSuperUserrunInDraftContext
getSubMenuByKey
- Validation
validate
3 years ago
3 years ago
4 years ago
4 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago