import { ApplicationGroup } from '@/ui_models/application_group'; import { WebApplication } from '@/ui_models/application'; import { ApplicationDescriptor } from '@standardnotes/snjs'; import { PureComponent } from '@/components/Abstract/PureComponent'; import { JSX } from 'preact'; type Props = { application: WebApplication; mainApplicationGroup: ApplicationGroup; }; type State = { descriptors: ApplicationDescriptor[]; editingDescriptor?: ApplicationDescriptor; }; export class AccountSwitcher extends PureComponent { private removeAppGroupObserver: any; activeApplication!: WebApplication; constructor(props: Props) { super(props, props.application); this.removeAppGroupObserver = props.mainApplicationGroup.addApplicationChangeObserver(() => { this.activeApplication = props.mainApplicationGroup .primaryApplication as WebApplication; this.reloadApplications(); }); } reloadApplications() { this.setState({ descriptors: this.props.mainApplicationGroup.getDescriptors(), }); } addNewApplication = () => { this.dismiss(); this.props.mainApplicationGroup.addNewApplication(); }; selectDescriptor = (descriptor: ApplicationDescriptor) => { this.dismiss(); this.props.mainApplicationGroup.loadApplicationForDescriptor(descriptor); }; inputForDescriptor(descriptor: ApplicationDescriptor) { return document.getElementById(`input-${descriptor.identifier}`); } renameDescriptor = (event: Event, descriptor: ApplicationDescriptor) => { event.stopPropagation(); this.setState({ editingDescriptor: descriptor }); setTimeout(() => { this.inputForDescriptor(descriptor)?.focus(); }); }; submitRename = () => { this.props.mainApplicationGroup.renameDescriptor( this.state.editingDescriptor!, this.state.editingDescriptor!.label ); this.setState({ editingDescriptor: undefined }); }; deinit() { super.deinit(); this.removeAppGroupObserver(); this.removeAppGroupObserver = undefined; } onDescriptorInputChange = ( descriptor: ApplicationDescriptor, { currentTarget }: JSX.TargetedEvent ) => { descriptor.label = currentTarget.value; }; dismiss = () => { this.dismissModal(); }; render() { return (
); } }