/** * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ import React from "react"; import { observer } from "mobx-react"; import { Input } from "../input"; import { isUrl } from "../input/input_validators"; import type { WeblinkStore } from "../../../common/weblink-store"; import { computed, makeObservable, observable } from "mobx"; import { withInjectables } from "@ogre-tools/injectable-react"; import commandOverlayInjectable from "../command-palette/command-overlay.injectable"; import weblinkStoreInjectable from "../../../common/weblink-store.injectable"; interface Dependencies { closeCommandOverlay: () => void; weblinkStore: WeblinkStore; } @observer class NonInjectedWeblinkAddCommand extends React.Component { @observable url = ""; @observable nameHidden = true; @observable dirty = false; constructor(props: Dependencies) { super(props); makeObservable(this); } onChangeUrl(url: string) { this.dirty = true; this.url = url; } onSubmitUrl(url: string) { this.dirty = true; this.url = url; this.nameHidden = false; } onSubmit(name: string) { this.props.weblinkStore.add({ name: name || this.url, url: this.url, }); this.props.closeCommandOverlay(); } @computed get showValidation() { return this.url?.length > 0; } render() { return ( <> this.onChangeUrl(v)} onSubmit={(v) => this.onSubmitUrl(v)} showValidationLine={true} /> { this.nameHidden && ( Please provide a web link URL (Press "Enter" to continue or "Escape" to cancel) )} { !this.nameHidden && ( <> this.onSubmit(v)} dirty={true} /> Please provide a name for the web link (Press "Enter" to confirm or "Escape" to cancel) )} ); } } export const WeblinkAddCommand = withInjectables(NonInjectedWeblinkAddCommand, { getProps: (di, props) => ({ ...props, closeCommandOverlay: di.inject(commandOverlayInjectable).close, weblinkStore: di.inject(weblinkStoreInjectable), }), });