Skip to content

Instantly share code, notes, and snippets.

View ljmotta's full-sized avatar

Luiz João Motta ljmotta

  • Senior Software Engineer - IBM
  • São Paulo, SP - Brazil
View GitHub Profile
@ljmotta
ljmotta / TodoListEnvelopeView.tsx
Last active October 14, 2020 13:55
TodoListEnvelopeView Api Impl
import { useCallback, useMemo } from "react";
import { Item, TodoListChannelApi } from "../api";
export const TodoListEnvelopeView = React.forwardRef<TodoListEnvelopeViewApi, Props>((props, forwardedRef) => {
// ...
const removeItem = useCallback(
(e: React.MouseEvent<HTMLAnchorElement, MouseEvent>, item: Item) => {
e.preventDefault();
const itemsCopy = [...items];
@ljmotta
ljmotta / TodoListEnvelopeView.tsx
Created October 14, 2020 13:53
TodoListEnvelopeView Use Imperative Handle
import { useImperativeHandle } from "react";
export const TodoListEnvelopeView = React.forwardRef<TodoListEnvelopeViewApi, Props>((props, forwardedRef) => {
// ...
useImperativeHandle(
forwardedRef,
() => ({
setUser,
addItem: (item) => setItems([...items, { label: item, completed: false }]),
@ljmotta
ljmotta / TodoListEnvelopeView.tsx
Last active October 14, 2020 13:52
TodoListEnvelopeView Ref Forwarding Component
import { MessageBusClientApi } from "@kogito-tooling/envelope-bus/dist/api";
import { useState } from "react";
import { Item, TodoListChannelApi } from "../api";
export interface TodoListEnvelopeViewApi {
setUser(user: string): void;
addItem(item: string): void;
getItems(): Item[];
markAllAsCompleted(): void;
}
@ljmotta
ljmotta / TodoListEnvelopeApiImpl.ts
Created October 14, 2020 13:48
TodoListEnvelopeApiImpl Methods
import { Association, TodoListInitArgs } from "../api";
export class TodoListEnvelopeApiImpl implements TodoListEnvelopeApi {
// ...
public async todoList__init(association: Association, initArgs: TodoListInitArgs) {
this.args.envelopeBusController.associate(association.origin, association.envelopeServerId);
this.args.view().setUser(initArgs.user);
}
@ljmotta
ljmotta / TodoListEnvelopeApiImpl.ts
Last active October 14, 2020 13:47
TodoListEnvelopeApiImpl Constructor
import { EnvelopeApiFactoryArgs } from "@kogito-tooling/envelope";
import { TodoListEnvelopeContext } from "./TodoListEnvelopeContext";
import { TodoListEnvelopeViewApi } from "./TodoListEnvelopeView";
import { TodoListChannelApi, TodoListEnvelopeApi } from "../api";
export class TodoListEnvelopeApiImpl implements TodoListEnvelopeApi {
constructor(
private readonly args: EnvelopeApiFactoryArgs<
TodoListEnvelopeApi,
TodoListChannelApi,
@ljmotta
ljmotta / TodoListEnvelope.tsx
Last active October 14, 2020 13:46
TodoListEnvelope Start
import { EnvelopeBus } from "@kogito-tooling/envelope-bus/dist/api";
import { TodoListEnvelopeApiImpl } from "./TodoListEnvelopeApiImpl";
import { TodoListEnvelopeContext } from "./TodoListEnvelopeContext";
export function init(args: { container: HTMLElement; bus: EnvelopeBus }) {
// ...
const context: TodoListEnvelopeContext = {};
return envelope.start(envelopeViewDelegate, context, {
create: (apiFactoryArgs) => new TodoListEnvelopeApiImpl(apiFactoryArgs),
@ljmotta
ljmotta / TodoListEnvelope.tsx
Last active October 14, 2020 13:46
TodoListEnvelope Envelope View Delegate
import { TodoListEnvelopeView, TodoListEnvelopeViewApi } from "./TodoListEnvelopeView";
export function init(args: { container: HTMLElement; bus: EnvelopeBus }) {
// ...
const envelopeViewDelegate = async () => {
const ref = React.createRef<TodoListEnvelopeViewApi>();
return new Promise<() => TodoListEnvelopeViewApi>((res) =>
ReactDOM.render(<TodoListEnvelopeView ref={ref} channelApi={envelope.channelApi} />, args.container, () =>
res(() => ref.current!)
@ljmotta
ljmotta / TodoListEnvelope.tsx
Last active October 14, 2020 13:45
TodoListEnvelope init
import { EnvelopeBus } from "@kogito-tooling/envelope-bus/dist/api";
import { Envelope } from "@kogito-tooling/envelope";
import { TodoListEnvelopeContext } from "./TodoListEnvelopeContext";
import { TodoListEnvelopeApiImpl } from "./TodoListEnvelopeApiImpl";
import { TodoListChannelApi, TodoListEnvelopeApi } from "../api";
export function init(args: { container: HTMLElement; bus: EnvelopeBus }) {
const envelope = new Envelope<
TodoListEnvelopeApi,
TodoListChannelApi,
@ljmotta
ljmotta / EmbeddedTodoList.tsx
Last active October 14, 2020 13:45
EmbeddedTodoList Rendered
import { TodoListApi } from "../api";
import { EmbeddedEnvelopeFactory } from "@kogito-tooling/envelope/dist/embedded";
export const EmbeddedTodoList = React.forwardRef<TodoListApi, Props>((props, forwardedRef) => {
// ...
const EmbeddedEnvelope = useMemo(() => {
return EmbeddedEnvelopeFactory({
api: props,
envelopePath: props.envelopePath,
@ljmotta
ljmotta / EmbeddedTodoList.tsx
Last active October 14, 2020 13:36
EmbeddedTodoList Ref Delegate
import { EnvelopeServer } from "@kogito-tooling/envelope-bus/dist/channel";
import { TodoListApi, TodoListChannelApi, TodoListEnvelopeApi } from "../api";
export const EmbeddedTodoList = React.forwardRef<TodoListApi, Props>((props, forwardedRef) => {
// ...
const refDelegate = useCallback(
(envelopeServer: EnvelopeServer<TodoListChannelApi, TodoListEnvelopeApi>): TodoListApi => ({
addItem: (item) => envelopeServer.envelopeApi.requests.todoList__addItem(item),
getItems: () => envelopeServer.envelopeApi.requests.todoList__getItems(),