Skip to content

Commit 829119b

Browse files
authored
Merge pull request #416 from SharePoint/joaojmendes-AddNewPropertyFilterList
Merge of #392
2 parents 6e9a153 + 3e68f28 commit 829119b

File tree

6 files changed

+23
-12
lines changed

6 files changed

+23
-12
lines changed

docs/documentation/docs/controls/ListItemPicker.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# ListItemPicker control
22

3-
This control allows you to select one or more items from a list. The item selection is based from a column value. The control will suggest items based on the inserted value.
3+
This control allows you to select one or more items from a list. The List can be filtered to allow select items from a subset of items The item selection is based from a column value. The control will suggest items based on the inserted value.
44

55
Here is an example of the control:
66

@@ -24,6 +24,7 @@ import { ListItemPicker } from '@pnp/spfx-controls-react/lib/listItemPicker';
2424
<ListItemPicker listId='da8daf15-d84f-4ab1-9800-7568f82fed3f'
2525
columnInternalName='Title'
2626
valueColumnInternalName='Id'
27+
filter="Title eq 'SPFx'"
2728
itemLimit={2}
2829
onSelectedItem={this.onSelectedItem}
2930
context={this.props.context} />
@@ -58,5 +59,6 @@ The `ListItemPicker` control can be configured with the following properties:
5859
| suggestionsHeaderText | string | no | The text that should appear at the top of the suggestion box. |
5960
| noResultsFoundText | string | no | The text that should appear when no results are returned. |
6061
| disabled | boolean | no | Specifies if the control is disabled or not. |
62+
| filter | string | no | condition to filter list Item, same as $filter ODATA parameter|
6163

6264
![](https://telemetry.sharepointpnp.com/sp-dev-fx-controls-react/wiki/controls/ListItemPicker)

package-lock.json

Lines changed: 9 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/controls/listItemPicker/IListItemPickerProps.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ export interface IListItemPickerProps {
77
context: WebPartContext | ApplicationCustomizerContext;
88
listId: string;
99
itemLimit: number;
10-
10+
filter?: string;
1111
className?: string;
1212
webUrl?: string;
1313
defaultSelectedItems?: any[];

src/controls/listItemPicker/ListItemPicker.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,12 +112,12 @@ export class ListItemPicker extends React.Component<IListItemPickerProps, IListI
112112
* Function to load List Items
113113
*/
114114
private loadListItems = async (filterText: string): Promise<{ key: string; name: string }[]> => {
115-
let { listId, columnInternalName, keyColumnInternalName, webUrl } = this.props;
115+
let { listId, columnInternalName, keyColumnInternalName, webUrl, filter } = this.props;
116116
let arrayItems: { key: string; name: string }[] = [];
117117
let keyColumn: string = keyColumnInternalName || 'Id';
118118

119119
try {
120-
let listItems = await this._spservice.getListItems(filterText, listId, columnInternalName, keyColumn, webUrl);
120+
let listItems = await this._spservice.getListItems(filterText, listId, columnInternalName, keyColumn, webUrl, filter);
121121
// Check if the list had items
122122
if (listItems.length > 0) {
123123
for (const item of listItems) {

src/services/SPService.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,12 @@ export default class SPService implements ISPService {
4747
/**
4848
* Get List Items
4949
*/
50-
public async getListItems(filterText: string, listId: string, internalColumnName: string, keyInternalColumnName?: string, webUrl?: string): Promise<any[]> {
50+
public async getListItems(filterText: string, listId: string, internalColumnName: string, keyInternalColumnName?: string, webUrl?: string, filter?: string ): Promise<any[]> {
5151
let returnItems: any[];
52-
52+
const filterStr = `startswith(${internalColumnName},'${encodeURIComponent(filterText.replace("'","''"))}')${filter ? ' and ' + filter : ''}`; //string = filterList ? `and ${filterList}` : '';
5353
try {
5454
const webAbsoluteUrl = !webUrl ? this._context.pageContext.web.absoluteUrl : webUrl;
55-
const apiUrl = `${webAbsoluteUrl}/_api/web/lists('${listId}')/items?$select=${keyInternalColumnName || 'Id'},${internalColumnName}&$filter=startswith(${internalColumnName},'${filterText}')`;
55+
const apiUrl = `${webAbsoluteUrl}/_api/web/lists('${listId}')/items?$select=${keyInternalColumnName || 'Id'},${internalColumnName}&$filter=${filterStr}`;
5656
const data = await this._context.spHttpClient.get(apiUrl, SPHttpClient.configurations.v1);
5757
if (data.ok) {
5858
const results = await data.json();

src/webparts/controlsTest/components/ControlsTest.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -693,11 +693,15 @@ export default class ControlsTest extends React.Component<IControlsTestProps, IC
693693
</div>
694694

695695
<div className="ms-font-m">Field picker list data tester:
696-
<ListItemPicker listId={this.state.selectedList}
696+
697+
<ListItemPicker listId={'76a8231b-35b6-4703-b1f4-5d03d3dfb1ca'}
697698
columnInternalName="Title"
699+
keyColumnInternalName="Id"
700+
filter={"Title eq 'SPFx'"}
698701
itemLimit={5}
699702
context={this.props.context}
700703
onSelectedItem={this.listItemPickerDataSelected} />
704+
701705
</div>
702706

703707
<div className="ms-font-m">Services tester:

0 commit comments

Comments
 (0)