Advertisement
Guest User

ListViewSelectorPaneField

a guest
Aug 25th, 2016
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import * as React from 'react';
  2.  
  3. export interface ListViewSelectorPaneFieldState {
  4.   lists: ISPList[];
  5.   selectedList: string;
  6. }
  7.  
  8. export interface ListViewSelectorPaneFieldProps {
  9.   label: string;
  10.   context: any;
  11.   selectedList: string;
  12. }
  13.  
  14. export interface ISPList {
  15.   Title: string;
  16.   Id: string;
  17. }
  18.  
  19. export interface ISPListCollection {
  20.   value: ISPList[];
  21. }
  22.  
  23. export interface ListOptionProps {
  24.   value: string;
  25.   text: string;
  26. }
  27.  
  28. const ListOption: React.StatelessComponent<ListOptionProps> = (props: ListOptionProps) => (
  29.   <option value={props.value}>{props.text}</option>
  30. );
  31.  
  32. export default class ListViewSelectorPaneField extends React.Component<ListViewSelectorPaneFieldProps, ListViewSelectorPaneFieldState>{
  33.  
  34.     private _ddlLists: HTMLSelectElement;
  35.  
  36.     public constructor(props: ListViewSelectorPaneFieldProps){
  37.       super(props);
  38.       this._ddlListsChanged = this._ddlListsChanged.bind(this);
  39.       this.state = {
  40.         lists: [],
  41.         selectedList: props.selectedList
  42.       };
  43.     }
  44.  
  45.     public render(): JSX.Element {
  46.       var lists = this.state.lists.map((list: ISPList) => {
  47.         return (<ListOption value={list.Id} text={list.Title} key={list.Id} />);
  48.       });
  49.  
  50.       return (
  51.         <div>
  52.           <label className="ms-Label">{this.props.label}</label>
  53.           <select
  54.             ref={(c): HTMLSelectElement => this._ddlLists = c }
  55.             onChange={this._ddlListsChanged}
  56.             value={this.state.selectedList}>
  57.             {lists}
  58.           </select>
  59.         </div>
  60.       );
  61.     }
  62.  
  63.     public componentDidMount(): void {
  64.       this._getSharePointLists().then((listCollection) => {
  65.         this.setState({
  66.           lists: listCollection.value
  67.         } as ListViewSelectorPaneFieldState);
  68.       });
  69.     }
  70.  
  71.     public get value(): string {
  72.       return this.state.selectedList;
  73.     }
  74.  
  75.     private _ddlListsChanged(event: React.KeyboardEvent): void {
  76.       const element: HTMLSelectElement = event.target as HTMLSelectElement;
  77.       console.log(element.value);
  78.       this.setState({
  79.         selectedList: element.value
  80.       } as ListViewSelectorPaneFieldState);
  81.     }
  82.  
  83.     private _getSharePointLists(): Promise<ISPListCollection> {
  84.       return this.props.context.httpClient.get(this.props.context.pageContext.web.absoluteUrl + '/_api/web/lists?$filter=Hidden eq false')
  85.           .then((response: Response) => {
  86.           return response.json();
  87.       });
  88.   }
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement