gd-sprest-bs
Version:
SharePoint JavaScript, TypeScript and Web Components designed using the Bootstrap framework.
93 lines (85 loc) • 3.68 kB
text/typescript
import { ContextInfo, Types, Web } from "gd-sprest";
import { WebPart } from "../base/wp";
import { IWPList, IWPListInfo, IWPListProps } from "./types";
import { WPListEditForm } from "./wpCfg";
/**
* List WebPart
*/
export const WPList = (props: IWPListProps): IWPList => {
let _wpInfo: IWPListInfo = null;
// Method to load the items using a CAML query
let loadCAML = (caml: string = "") => {
// Call the load caml query event
caml = (props.onExecutingCAMLQuery ? props.onExecutingCAMLQuery(_wpInfo, caml) : null) || caml;
// See if we are targeting a different web
let webUrl = _wpInfo.cfg.WebUrl;
if (webUrl) {
// Get the context information for the destination web
// Note - Since we are using a POST request, this would be required for cross-site collection requests
ContextInfo.getWeb(webUrl).execute((contextInfo) => {
// Get the web
Web(webUrl, { requestDigest: contextInfo.GetContextWebInformation.FormDigestValue })
// Get the list
.Lists(_wpInfo.cfg.ListName)
// Query the items
.getItemsByQuery(caml)
// Execute the request
.execute(items => {
// Render the items
props.onRenderItems ? props.onRenderItems(_wpInfo, items.results) : null;
});
});
} else {
// Get the web
Web(webUrl)
// Get the list
.Lists(_wpInfo.cfg.ListName)
// Query the items
.getItemsByQuery(caml)
// Execute the request
.execute(items => {
// Render the items
props.onRenderItems ? props.onRenderItems(_wpInfo, items.results) : null;
});
}
}
// Method to load the items using an ODATA query
let loadODATA = (query: Types.IODataQuery = {}) => {
// Call the load caml query event
query = (props.onExecutingODATAQuery ? props.onExecutingODATAQuery(_wpInfo, query) : null) || query;
// Get the web
Web(_wpInfo.cfg.WebUrl)
// Get the list
.Lists(_wpInfo.cfg.ListName)
// Get the items
.Items()
// Query the list
.query(query)
// Execute the request
.execute((items) => {
// Render the items
props.onRenderItems ? props.onRenderItems(_wpInfo, items.results) : null;
});
}
// Create the webpart and return it
return WebPart({
cfgElementId: props.cfgElementId,
className: props.className,
editForm: WPListEditForm(props.editForm),
elementId: props.elementId,
wpClassName: props.wpClassName,
onRenderDisplay: (wpInfo: IWPListInfo) => {
// Save the information
_wpInfo = wpInfo;
// Call the render event
props.onRenderDisplay ? props.onRenderDisplay(_wpInfo) : null;
// See if there is a render items event and a list is defined
if (props.onRenderItems && _wpInfo.cfg.ListName) {
// See if we are using the CAML query
if (props.camlQuery || props.onExecutingCAMLQuery) { loadCAML(props.camlQuery); }
// Else, load using the ODATA query
else { loadODATA(props.odataQuery); }
}
},
});
}