gd-sprest-bs
Version:
SharePoint JavaScript, TypeScript and Web Components designed using the Bootstrap framework.
263 lines (216 loc) • 7.57 kB
TypeScript
import { IButtonProps } from "gd-bs/src/components/button/types";
import { IFormControl, IFormControlProps } from "gd-bs/src/components/form/controlTypes";
import { IForm, IFormProps } from "gd-bs/src/components/form/formTypes";
import { IModal, IModalProps } from "gd-bs/src/components/modal/types";
import { ITooltipGroupProps } from "gd-bs/src/components/tooltipGroup/types";
/**
* ### Web Part
*
* The client-side webpart component can be used to control what is displayed when a page is being edited and displayed. An optional hidden configuration element can be utilized to store a custom configuration.
*
* ```ts
* import { WebParts } from "gd-sprest-bs";
*
* // Create the webpart
* WebParts.WebPart({
* elementId: "my-wp",
* cfgElementId: "my-wp-cfg",
* onRenderDisplay: (wpInfo) => {
* // Render the display element
* wpInfo.el.innerHTML = '<h1>Hello Display Mode</h1>';
* },
* onRenderEdit: (wpInfo) => {
* // Render the edit element
* wpInfo.el.innerHTML = '<h1>Hello Edit Mode</h1>';
* }
* });
* ```
*/
export const WebPart: (props: IWebPartProps) => IWebPart;
/**
* WebPart
*/
export interface IWebPart<IWPCfg = IWebPartCfg, IWPInfo = IWebPartInfo> {
/** The webpart configuration. */
cfg: IWPCfg;
/** The webpart information. */
info: IWPInfo;
/** Method to update the edit form. */
updateEditForm?: (formControls: Array<IFormControl>) => void;
}
/**
* WebPart Information
*/
export interface IWebPartInfo<IWPCfg = IWebPartCfg> {
/** The configuration */
cfg: IWPCfg;
/** The element to render the webpart to */
el: HTMLElement;
/** The webpart id */
wpId: string;
}
/**
* WebPart Object
*/
export interface IWebPartObject {
/** The JSOM context object */
Context: any;
/** The webpart properties object */
Properties: any;
/** The webpart id */
WebPartId: string;
/** The webpart html element */
WebPart: HTMLElement;
/** The webpart definition object */
WebPartDefinition: any;
}
/**
* WebPart Properties
*/
export interface IWebPartProps<IWPInfo = IWebPartInfo, IWPEditForm = IWebPartEditForm> {
/** The optional configuration element */
cfgElementId?: string;
/** The class name. */
className?: string;
/** The target element id to render the webpart to */
elementId?: string;
/** The edit form */
editForm?: IWPEditForm;
/** The optional help link properties */
helpProps?: {
/** The link title */
title?: string;
/** The link url */
url: string;
};
/** The post render event */
onPostRender?: (wp: IWPInfo, ...args) => void;
/** The render event triggered when the page is in 'Display' mode */
onRenderDisplay?: (wp: IWPInfo) => any;
/** The render event triggered when the page is in 'Edit' mode */
onRenderEdit?: (wp: IWPInfo) => any;
/** The render form event triggered when the form is created */
onRenderForm?: (form: IForm, wp?: IWPInfo) => any;
/** The webpart class name */
wpClassName?: string;
}
/**
* WebPart Configuration
*/
export const WPCfg: (cfg: IWebPartCfg, props: IWebPartProps) => {
/** Method to render the edit form. */
renderForm?: (formControls: Array<IFormControl>) => void;
};
/**
* WebPart Configuration
*/
export interface IWebPartCfg {
/** The webpart id */
WebPartId?: string;
}
/**
* WebPart Edit Form
*/
export interface IWebPartEditForm<IWPCfg = IWebPartCfg, IWPInfo = IWebPartInfo> {
/** The form action buttons displayed in the footer of the modal. */
actions?: Array<IButtonProps>;
/** The render form event. */
onRenderForm?: (wpInfo?: IWPInfo) => Array<IFormControlProps> | PromiseLike<Array<IFormControlProps>> | void;
/** The save event. */
onSave?: (wpCfg?: IWPCfg, form?: IForm) => IWPCfg;
/** True to hide the save button. */
showSaveButton?: boolean;
}
/**
* SPFx WebPart
*/
export const SPFxWebPart: (props: ISPFxWebPartProps) => ISPFxWebPart;
/**
* SPFx WebPart
*/
export interface ISPFxWebPart {
/** The webpart configuration object. */
Configuration: ISPFxWebPartCfg;
/** The webpart configuration form. */
Form: IForm;
/** The webpart configuration modal. */
Modal: IModal;
/** Shows the webpart configuration form in a modal. */
showEditModal: () => void;
}
/**
* SPFx WebPart Configuration
*/
export interface ISPFxWebPartCfg { }
/**
* SPFx WebPart Properties
*/
export interface ISPFxWebPartProps {
/** The environment type. */
envType?: number;
/** The event called prior to saving the webpart configuration. */
onConfigSaving?: (wpCfg: ISPFxWebPartCfg) => ISPFxWebPartCfg;
/** The event called after the webpart configuration is saved. */
onConfigSaved?: (wpCfg?: ISPFxWebPartCfg) => void;
/** The event called when the modal is being displayed. */
onConfigFormDisplaying?: (wpCfg?: ISPFxWebPartCfg) => void;
/** The webpart configuration modal footer button properties. */
onConfigFormFooterRendering?: (props: ITooltipGroupProps, wpCfg?: ISPFxWebPartCfg) => ITooltipGroupProps;
/** The webpart configuration modal form properties. */
onConfigFormRendering?: (props: IFormProps, wpCfg?: ISPFxWebPartCfg) => IFormProps;
/** The webpart configuration modal form object. */
onConfigFormRendered?: (form: IForm, wpCfg?: ISPFxWebPartCfg) => void;
/** The webpart configuration modal properties. */
onModalRendering?: (props: IModalProps) => IModalProps;
/** The webpart configuration modal properties. */
onModalRendered?: (modal: IModal) => void;
/** The render event for the webpart. */
render?: (el?: HTMLElement, cfg?: ISPFxWebPartCfg) => void;
/** The render event for the webpart when the page is in edit mode. */
renderEdit?: (el?: HTMLElement, cfg?: ISPFxWebPartCfg) => void;
/** The spfx properties. */
spfx?: {
context: {
domElement: HTMLElement;
graphHttpClient: any;
host: any;
httpClient: any;
instanceId: string;
itemId?: number;
list?: {
title: string;
}
manifest: {
alias: string;
componentType: string;
id: string;
loaderConfig: any;
manifestVersion: number;
requiresCustomScript: boolean;
supportedHosts: string[];
supportsThemeVariants: boolean;
version: string;
};
pageContext: any;
propertyPane: any;
serviceScope: any;
spHttpClient: any;
statusRenderer: any;
webPartTag: string;
};
dataVersion: any;
description: string;
displayMode: number;
domElement: HTMLElement;
formClosed?: () => void;
formSaved?: () => void;
getPropertyPaneConfiguration: any;
instanceId: string;
isRenderAsync: boolean;
previewImageUrl: string;
properties: any;
propertiesMetadata: any;
title: string;
width: number;
};
}