71 lines · 2.0 KB · TypeScript
RawDownload
export interface IncomingSharePresentationState {  readonly presentedShareId: string | null;  readonly dismissedShareId: string | null;} export interface IncomingSharePresentationTransition {  readonly state: IncomingSharePresentationState;  readonly shareIdToPresent: string | null;} export const EMPTY_INCOMING_SHARE_PRESENTATION_STATE: IncomingSharePresentationState = {  presentedShareId: null,  dismissedShareId: null,}; /** * Tracks presentation by durable share id rather than object identity. A user * dismissal suppresses only that inbox item until it is consumed or replaced. */export function transitionIncomingSharePresentation(  state: IncomingSharePresentationState,  input: {    readonly isShareSheetPresented: boolean;    readonly pendingShareId: string | null;  },): IncomingSharePresentationTransition {  if (input.isShareSheetPresented) {    if (state.presentedShareId !== null && input.pendingShareId !== state.presentedShareId) {      // Consumption may happen while the sheet remains mounted. Forget the      // old presentation immediately so a later handoff may reuse its id.      return {        state: EMPTY_INCOMING_SHARE_PRESENTATION_STATE,        shareIdToPresent: null,      };    }    return { state, shareIdToPresent: null };  }   let nextState = state;  if (state.presentedShareId !== null) {    if (input.pendingShareId === state.presentedShareId) {      return {        state: {          presentedShareId: null,          dismissedShareId: state.presentedShareId,        },        shareIdToPresent: null,      };    }    nextState = { ...state, presentedShareId: null };  }   if (input.pendingShareId === null) {    return {      state: EMPTY_INCOMING_SHARE_PRESENTATION_STATE,      shareIdToPresent: null,    };  }   if (nextState.dismissedShareId === input.pendingShareId) {    return { state: nextState, shareIdToPresent: null };  }   return {    state: {      presentedShareId: input.pendingShareId,      dismissedShareId: null,    },    shareIdToPresent: input.pendingShareId,  };}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t