From 1cc67355dd133522cadaac052ae5ffd09b55c3e9 Mon Sep 17 00:00:00 2001 From: telamonian Date: Sun, 26 Jan 2020 11:17:21 -0500 Subject: [PATCH] fixed up signature of IRenderer.render, can now flexibly take options - related to code added to @lumino/virtualdom in jupyterlab/lumino#44. Once that's pulled in, the TODOs added in this PR will then be able to be cleared --- packages/rendermime-interfaces/src/index.ts | 3 +- packages/ui-components/src/icon/jlicon.tsx | 31 ++++++++++++++++----- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/packages/rendermime-interfaces/src/index.ts b/packages/rendermime-interfaces/src/index.ts index 5e90612e90e7..a72c292cd724 100644 --- a/packages/rendermime-interfaces/src/index.ts +++ b/packages/rendermime-interfaces/src/index.ts @@ -139,7 +139,8 @@ export namespace IRenderMime { * Interface for generic renderer. */ export interface IRenderer { - readonly render: (container: HTMLElement) => void; + readonly render: (container: HTMLElement, options?: any) => void; + // TODO: make unrenderer optional once @lumino/virtualdom > 1.4.1 is used readonly unrender: (container: HTMLElement) => void; } diff --git a/packages/ui-components/src/icon/jlicon.tsx b/packages/ui-components/src/icon/jlicon.tsx index 8a9ff79402a6..47adbf328b6f 100644 --- a/packages/ui-components/src/icon/jlicon.tsx +++ b/packages/ui-components/src/icon/jlicon.tsx @@ -3,6 +3,7 @@ import { UUID } from '@lumino/coreutils'; import { Signal } from '@lumino/signaling'; +import { ElementAttrs, VirtualNode } from '@lumino/virtualdom'; import React from 'react'; import ReactDOM from 'react-dom'; @@ -554,10 +555,16 @@ export namespace JLIcon { * Title.iconRenderer from @lumino/widgets */ export interface IRenderer { - readonly render: (container: HTMLElement) => void; + readonly render: (container: HTMLElement, options: any) => void; readonly unrender: (container: HTMLElement) => void; } + export interface IRendererOptions { + attrs?: ElementAttrs; + children?: ReadonlyArray; + props?: IProps; + } + /** * The IJLIcon interface. Outside of this interface the actual * implementation of JLIcon may vary @@ -635,10 +642,14 @@ export namespace JLIcon { * Base implementation of IRenderer. */ export class Renderer implements IRenderer { - constructor(protected _icon: JLIcon, protected _props?: IProps) {} + constructor( + protected _icon: JLIcon, + protected _options: IRendererOptions = {} + ) {} // tslint:disable-next-line:no-empty - render(container: HTMLElement): void {} + render(container: HTMLElement, _options: IRendererOptions = {}): void {} + // TODO: make unrenderer optional once @lumino/virtualdom > 1.4.1 is used // tslint:disable-next-line:no-empty unrender(container: HTMLElement): void {} } @@ -648,11 +659,16 @@ export namespace JLIcon { * as a DOM element. */ export class ElementRenderer extends Renderer { - render(container: HTMLElement, props: JLIcon.IProps = {}): void { + render(container: HTMLElement, _options: IRendererOptions = {}): void { // TODO: move this title fix to the Lumino side container.removeAttribute('title'); - this._icon.element({ container, ...this._props, ...props }); + // TODO: decide how to implement rendering of passed in child virtual nodes + this._icon.element({ + container, + ...this._options.props, + ..._options.props + }); } // tslint:disable-next-line:no-empty @@ -664,14 +680,15 @@ export namespace JLIcon { * as a React component. */ export class ReactRenderer extends Renderer { - render(container: HTMLElement, props: JLIcon.IProps = {}): void { + render(container: HTMLElement, _options: IRendererOptions = {}): void { // TODO: move this title fix to the Lumino side container.removeAttribute('title'); + // TODO: decide how to implement rendering of passed in child virtual nodes return ReactDOM.render( , container );