Skip to content

Commit c42cfbd

Browse files
RajdeepcRajdeep Chandra
authored andcommitted
fix(picker): ensure menu placement in mobile (#3835)
* chore(picker): fix for overlaid picker in mobile * chore: updated golden image cache * chore(picker): fix for overlaid picker in mobile * chore: updated golden image cache * chore(picker): added property for type * chore(picker): added type as a property * chore(picker): removing overlay type as a property * chore(picker): added triiger open decorator for custom picker * chore(picker): reverting golden hash --------- Co-authored-by: Rajdeep Chandra <rajdeepc@adobe.com>
1 parent 26d2bcc commit c42cfbd

File tree

2 files changed

+55
-1
lines changed

2 files changed

+55
-1
lines changed

packages/picker/src/Picker.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,7 @@ export class PickerBase extends SizedMixin(Focusable, { noDefaultSize: true }) {
393393
.offset=${0}
394394
?open=${this.open}
395395
.placement=${this.isMobile.matches ? undefined : this.placement}
396-
type="auto"
396+
.type=${this.isMobile.matches ? 'modal' : 'auto'}
397397
.receivesFocus=${'true'}
398398
@beforetoggle=${(
399399
event: Event & {

packages/picker/stories/picker.stories.ts

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,58 @@ export const readonly = (args: StoryArgs): TemplateResult => {
459459
`;
460460
};
461461

462+
function nextFrame(): Promise<void> {
463+
return new Promise((res) => requestAnimationFrame(() => res()));
464+
}
465+
466+
class CustomPickerReady extends HTMLElement {
467+
ready!: (value: boolean | PromiseLike<boolean>) => void;
468+
469+
constructor() {
470+
super();
471+
this.readyPromise = new Promise((res) => {
472+
this.ready = res;
473+
this.setup();
474+
});
475+
}
476+
477+
async setup(): Promise<void> {
478+
await nextFrame();
479+
}
480+
481+
handleTriggerOpened = async (): Promise<void> => {
482+
await nextFrame();
483+
484+
const picker = document.querySelector('#picker-state') as Picker;
485+
picker.addEventListener('sp-opened', this.handlePickerOpen);
486+
picker.open = true;
487+
};
488+
489+
handlePickerOpen = async (): Promise<void> => {
490+
const picker = document.querySelector('#picker-state') as Picker;
491+
const actions = [nextFrame, picker.updateComplete];
492+
493+
await Promise.all(actions);
494+
495+
this.ready(true);
496+
};
497+
498+
private readyPromise: Promise<boolean> = Promise.resolve(false);
499+
500+
get updateComplete(): Promise<boolean> {
501+
return this.readyPromise;
502+
}
503+
}
504+
505+
customElements.define('complex-picker-ready', CustomPickerReady);
506+
507+
const customPickerDecorator = (story: () => TemplateResult): TemplateResult => {
508+
return html`
509+
${story()}
510+
<custom-picker-ready></custom-picker-ready>
511+
`;
512+
};
513+
462514
export const custom = (args: StoryArgs): TemplateResult => {
463515
const initialState = 'lb1-mo';
464516
return html`
@@ -495,6 +547,8 @@ export const custom = (args: StoryArgs): TemplateResult => {
495547
`;
496548
};
497549

550+
custom.decorators = [customPickerDecorator];
551+
498552
custom.args = {
499553
open: true,
500554
};

0 commit comments

Comments
 (0)