enonic-wizardry
v0.5.0-next.1
Published
Functional utility library for Enonic XP
Downloads
74
Readme
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
- Content
getContentByIdscreateAllcreateAndPublishdeleteAndPublishmodifyAndPublishapplyChangesToDatacreateMediaFromAttachment
- Context
runAsSuperUserrunInDraftContext
- Menu
getSubMenuByKey
- Validation
validate
