Path: blob/master/src/packages/frontend/editors/slate/search/replace.tsx
1698 views
/*1* This file is part of CoCalc: Copyright © 2020 Sagemath, Inc.2* License: MS-RSL – see LICENSE.md for details3*/45import { Button, Input, Popconfirm } from "antd";6import React from "react";7const { useRef, useState } = React;8import { replaceAll, replaceOne } from "./replace-matches";9import { ReactEditor } from "../slate-react";1011interface Props {12editor: ReactEditor;13decorate;14search: string;15cancel: () => void;16}1718export const Replace: React.FC<Props> = ({ cancel, editor, search, decorate }) => {19const [replace, setReplace] = useState<string>("");20const inputRef = useRef<any>(null);21return (22<div style={{ display: "flex" }}>23<Input24ref={inputRef}25placeholder="Replace..."26value={replace}27onChange={(e) => setReplace(e.target.value)}28allowClear={true}29size="small"30style={{ border: 0, flex: 1 }}31onKeyDown={async (event) => {32if (event.key == "Escape") {33event.preventDefault();34cancel();35return;36}37}}38/>39{replace.trim() && (40<>41<Button42size="small"43onClick={() => replaceOne(editor, decorate, replace)}44>45One46</Button>{" "}47<Popconfirm48title={`Replace all instances of '${search}' by '${replace}' across the entire document?`}49onConfirm={() => replaceAll(editor, decorate, replace)}50okText={"Yes, replace all"}51cancelText={"Cancel"}52>53<Button size="small">All</Button>54</Popconfirm>55</>56)}57</div>58);59};606162