diff options
author | Michael Staub <michael.staub@brightmachines.com> | 2023-02-23 16:34:25 -0800 |
---|---|---|
committer | Michael Staub <michael.staub@brightmachines.com> | 2023-02-23 16:34:25 -0800 |
commit | 693cbb9f18eeec48ea6ed3eb03ff3a96ca6ec7dc (patch) | |
tree | 192494fe0751aa279209f447587c311efcd33668 /src/state/models/shell-ui.ts | |
parent | 23f07d8def1f4384022c7fecd0d7eac0ba8b2efc (diff) | |
parent | bbd0b03a46b1087ecca17219441d060c2be69de2 (diff) | |
download | voidsky-693cbb9f18eeec48ea6ed3eb03ff3a96ca6ec7dc.tar.zst |
Merge branch 'rnw' of github.com:bluesky-social/social-app into rnw
Diffstat (limited to 'src/state/models/shell-ui.ts')
-rw-r--r-- | src/state/models/shell-ui.ts | 117 |
1 files changed, 41 insertions, 76 deletions
diff --git a/src/state/models/shell-ui.ts b/src/state/models/shell-ui.ts index b9f480ecd..640bed0b3 100644 --- a/src/state/models/shell-ui.ts +++ b/src/state/models/shell-ui.ts @@ -2,75 +2,57 @@ import {RootStoreModel} from './root-store' import {makeAutoObservable} from 'mobx' import {ProfileViewModel} from './profile-view' import {isObj, hasProp} from 'lib/type-guards' -import {PickedMedia} from 'view/com/util/images/image-crop-picker/types' +import {PickedMedia} from 'lib/media/types' -export class ConfirmModal { - name = 'confirm' - - constructor( - public title: string, - public message: string | (() => JSX.Element), - public onPressConfirm: () => void | Promise<void>, - ) { - makeAutoObservable(this) - } +export interface ConfirmModal { + name: 'confirm' + title: string + message: string | (() => JSX.Element) + onPressConfirm: () => void | Promise<void> } -export class EditProfileModal { - name = 'edit-profile' - - constructor( - public profileView: ProfileViewModel, - public onUpdate?: () => void, - ) { - makeAutoObservable(this) - } +export interface EditProfileModal { + name: 'edit-profile' + profileView: ProfileViewModel + onUpdate?: () => void } -export class ServerInputModal { - name = 'server-input' - - constructor( - public initialService: string, - public onSelect: (url: string) => void, - ) { - makeAutoObservable(this) - } +export interface ServerInputModal { + name: 'server-input' + initialService: string + onSelect: (url: string) => void } -export class ReportPostModal { - name = 'report-post' - - constructor(public postUri: string, public postCid: string) { - makeAutoObservable(this) - } +export interface ReportPostModal { + name: 'report-post' + postUri: string + postCid: string } -export class ReportAccountModal { - name = 'report-account' - - constructor(public did: string) { - makeAutoObservable(this) - } +export interface ReportAccountModal { + name: 'report-account' + did: string } -export class CropImageModal { - name = 'crop-image' - - constructor( - public uri: string, - public onSelect: (img?: PickedMedia) => void, - ) {} +export interface CropImageModal { + name: 'crop-image' + uri: string + onSelect: (img?: PickedMedia) => void } -export class DeleteAccountModal { - name = 'delete-account' - - constructor() { - makeAutoObservable(this) - } +export interface DeleteAccountModal { + name: 'delete-account' } +export type Modal = + | ConfirmModal + | EditProfileModal + | ServerInputModal + | ReportPostModal + | ReportAccountModal + | CropImageModal + | DeleteAccountModal + interface LightboxModel {} export class ProfileImageLightbox implements LightboxModel { @@ -111,15 +93,7 @@ export class ShellUiModel { minimalShellMode = false isMainMenuOpen = false isModalActive = false - activeModal: - | ConfirmModal - | EditProfileModal - | ServerInputModal - | ReportPostModal - | ReportAccountModal - | CropImageModal - | DeleteAccountModal - | undefined + activeModals: Modal[] = [] isLightboxActive = false activeLightbox: ProfileImageLightbox | ImagesLightbox | undefined isComposerActive = false @@ -159,24 +133,15 @@ export class ShellUiModel { this.isMainMenuOpen = v } - openModal( - modal: - | ConfirmModal - | EditProfileModal - | ServerInputModal - | ReportPostModal - | ReportAccountModal - | CropImageModal - | DeleteAccountModal, - ) { + openModal(modal: Modal) { this.rootStore.emitNavigation() this.isModalActive = true - this.activeModal = modal + this.activeModals.push(modal) } closeModal() { - this.isModalActive = false - this.activeModal = undefined + this.activeModals.pop() + this.isModalActive = this.activeModals.length > 0 } openLightbox(lightbox: ProfileImageLightbox | ImagesLightbox) { |