WebPerformer V2.5.2 でカスタムUI部品を作成する
はじめに
こんにちは。エヌデーデー島村です。
WebPerformer V2.5 で 追加された「UIエディタ」ですが、WebPerformer V2.5.2 では「UIエディタ」で使用できる「カスタムUI部品」という機能が追加されたので早速使ってみました。
今時のちょっと凝った画面を作るのに良さそうです。
SPAアプリケーションの作成
UIエディタ使用したアプリケーションを作るには、まず、WebPerformer のアプリケーションを SPA モードで作成する必要があります。
プロジェクトを右クリックして、[新規]>[新規アプリケーション]を選択します。
新規UIのダイアログが表示されるのでアプリケーションタイプで「SPA」を選択します。
カスタムUI部品の概要
カスタムUI部品を作成することで、標準部品にはない画面機能を実装することができます。
Reactで作成されたカスタムUI部品をUI定義で利用することができます。
カスタムUI部品の定義
カスタムUI部品はJavaScript形式で定義し、ファイル名をdefinition.jsとする必要があります。
カスタムUI部品の情報を定義した部品定義オブジェクトを戻り値とするJavaScript関数を記述します。
下記の例では、アイコンをクリックすることで表示/非表示を切り替えることができるパスワード用のフィールドを定義しています。
function PasswordField() {
return {
key: 'password-mask',
name: 'カスタムパスワード',
extends: 'CustomComponent',
handlers: {
onMaskClick: {
action: 'maskClickAction',
},
},
actions: {
maskClickAction: {
name: 'パスワードのマスク変更',
},
},
editSetting: {
defaults: {
customProps: {
mask: true
},
dataType: 'ANY'
},
},
generator: {
dependencies: { '@material-ui/core': '4.9.9', '@material-ui/icons': '4.9.1' },
imports: [
{
import: ['forwardRef', 'useState', 'useCallback'],
from: 'react'
},
{
import: 'InputAdornment',
from: '@material-ui/core/InputAdornment',
},
{
import: 'IconButton',
from: '@material-ui/core/IconButton'
},
{
import: 'TextField',
from: '@material-ui/core/TextField'
},
{
import: 'VisibilityIcon',
from: '@material-ui/icons/Visibility',
},
{
import: 'VisibilityOffIcon',
from: '@material-ui/icons/VisibilityOff',
},
],
source: `
forwardRef(function (props: any, ref: any) {
const {
width,
height,
margin,
customProps,
onMaskClick,
onCommit
} = props,
[mask, setMask] = useState(customProps.mask),
onBlur = useCallback(() => onCommit(), [onCommit]);
return (
<TextField
id="password-input"
label="Password"
type={mask ? 'password' : 'text'}
autoComplete="current-password"
InputProps={{
endAdornment: (
<InputAdornment position="end">
<IconButton edge="end" onClick={() => {
const nextMask = !mask;
setMask(nextMask);
if (onMaskClick) {
onMaskClick(nextMask);
}
}}>
{mask ? <VisibilityIcon /> : <VisibilityOffIcon />}
</IconButton>
</InputAdornment>
),
}}
inputProps={{
maxLength: 10,
}}
style={{
width,
height,
margin
}}
onBlur={onBlur}
/>
);
})`,
},
};
}
カスタムUI部品定義を指定のディレクトリに配置
定義したカスタムUI部品は以下の指定されたディレクトリに配置する必要があります。
WebPerformerプロジェクト/ui-component/definitions/{key}/
※ {key}にはカスタムUI部品の定義のkey:に設定した値が入ります。
カスタムUI部品の配置
定義したカスタムUI部品はパレットに表示されます。ドラッグ&ドロップまたはクリックすることで、UI部品をレイアウトキャンバス上に配置できます。
プレビューの表示
まとめ
V2.5.2の新機能であるカスタムUI部品を作成することで標準部品のみでは実装できない、自由度の高い実装ができるのではないでしょうか。