Skip to content

Commit abd00b4

Browse files
authored
feat: mgt-picker selected-value attribute (#2363)
allows for setting the selected value of the picker for scenarios where the application wants to control the selected item
1 parent 38a13e1 commit abd00b4

File tree

3 files changed

+21
-1
lines changed

3 files changed

+21
-1
lines changed

packages/mgt-components/src/components/mgt-picker/mgt-picker.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import { html, TemplateResult } from 'lit';
99
import { property, state } from 'lit/decorators.js';
10+
import { ifDefined } from 'lit/directives/if-defined.js';
1011
import { MgtTemplatedComponent, mgtHtml, customElement } from '@microsoft/mgt-element';
1112
import { strings } from './strings';
1213
import { fluentCombobox, fluentOption } from '@fluentui/web-components';
@@ -146,6 +147,19 @@ export class MgtPicker extends MgtTemplatedComponent {
146147
})
147148
public cacheInvalidationPeriod = 0;
148149

150+
/**
151+
* Sets the currently selected value for the picker
152+
* Must be present as an option in the supplied data returned from the the underlying graph query
153+
*
154+
* @type {string}
155+
* @memberof MgtPicker
156+
*/
157+
@property({
158+
attribute: 'selected-value',
159+
type: String
160+
})
161+
public selectedValue: string;
162+
149163
private isRefreshing: boolean;
150164

151165
@state() private response: Entity[];
@@ -212,7 +226,9 @@ export class MgtPicker extends MgtTemplatedComponent {
212226
*/
213227
protected renderPicker(): TemplateResult {
214228
return mgtHtml`
215-
<fluent-combobox part="picker" class="picker" id="combobox" autocomplete="list" placeholder=${this.placeholder}>
229+
<fluent-combobox current-value=${ifDefined(
230+
this.selectedValue
231+
)} part="picker" class="picker" id="combobox" autocomplete="list" placeholder=${this.placeholder}>
216232
${this.response.map(
217233
item => html`
218234
<fluent-option value=${item.id} @click=${(e: MouseEvent) => this.handleClick(e, item)}> ${

packages/mgt-react/src/generated/react.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ export type PickerProps = {
201201
scopes?: string[];
202202
cacheEnabled?: boolean;
203203
cacheInvalidationPeriod?: number;
204+
selectedValue?: string;
204205
templateContext?: TemplateContext;
205206
mediaQuery?: ComponentMediaQuery;
206207
selectionChanged?: (e: CustomEvent<any>) => void;

stories/components/picker/picker.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ export const MaxPages = () => html`
3232
<mgt-picker resource="me/messages" scopes="mail.read" placeholder="Select a message" key-name="subject" max-pages="2"></mgt-picker>
3333
`;
3434

35+
export const SelectedValue = () => html`
36+
<mgt-picker resource="/groups" selected-value="Activewear" scopes="group.read.all" key-name="displayName"></mgt-picker>
37+
`;
3538
export const CacheEnabled = () => html`
3639
<mgt-picker resource="/groups" placeholder="Select a group" scopes="group.read.all" key-name="displayName" cache-enabled="true" cache-invalidation-period="50000"></mgt-picker>
3740
`;

0 commit comments

Comments
 (0)