import { Button, createDisclosure, HStack, Modal, ModalBody, ModalContent, ModalFooter, ModalHeader, ModalOverlay, Text, VStack, Radio, RadioGroup, Input, } from "@hope-ui/solid" import { useFetch, usePath, useRouter, useT } from "~/hooks" import { bus, fsBatchRename, handleRespWithNotifySuccess, notify, } from "~/utils" import { createSignal, For, onCleanup, Show } from "solid-js" import { selectedObjs } from "~/store" import { RenameObj } from "~/types" import { RenameItem } from "~/pages/home/toolbar/RenameItem" export const BatchRename = () => { const { isOpen: isPreviewModalOpen, onOpen: openPreviewModal, onClose: closePreviewModal, } = createDisclosure() const { isOpen, onOpen, onClose } = createDisclosure() const [loading, ok] = useFetch(fsBatchRename) const { pathname } = useRouter() const { refresh } = usePath() const [type, setType] = createSignal("1") const [srcName, setSrcName] = createSignal("") const [newName, setNewName] = createSignal("") const [newNameType, setNewNameType] = createSignal("string") const [matchNames, setMatchNames] = createSignal([]) const t = useT() const itemProps = () => { return { fontWeight: "bold", fontSize: "$sm", color: "$neutral11", textAlign: "left" as any, cursor: "pointer", } } const handler = (name: string) => { if (name === "batchRename") { onOpen() } } bus.on("tool", handler) onCleanup(() => { bus.off("tool", handler) }) const submit = () => { if (!srcName() || !newName()) { // Check if both input values are not empty notify.warning(t("global.empty_input")) return } const replaceRegexp = new RegExp(srcName(), "g") let matchNames: RenameObj[] if (type() === "1") { matchNames = selectedObjs() .filter((obj) => obj.name.match(srcName())) .map((obj) => { const created = new Date(obj.created) const modified = new Date(obj.modified) const renameObj: RenameObj = { src_name: obj.name, new_name: obj.name .replace(replaceRegexp, newName()) .replace( "{created_year}", created.getFullYear().toString().padStart(4, "0"), ) .replace( "{created_month}", (created.getMonth() + 1).toString().padStart(2, "0"), ) .replace( "{created_date}", created.getDate().toString().padStart(2, "0"), ) .replace( "{created_hour}", created.getHours().toString().padStart(2, "0"), ) .replace( "{created_minute}", created.getMinutes().toString().padStart(2, "0"), ) .replace( "{created_second}", created.getSeconds().toString().padStart(2, "0"), ) .replace( "{modified_year}", modified.getFullYear().toString().padStart(4, "0"), ) .replace( "{modified_month}", (modified.getMonth() + 1).toString().padStart(2, "0"), ) .replace( "{modified_date}", modified.getDate().toString().padStart(2, "0"), ) .replace( "{modified_hour}", modified.getHours().toString().padStart(2, "0"), ) .replace( "{modified_minute}", modified.getMinutes().toString().padStart(2, "0"), ) .replace( "{modified_second}", modified.getSeconds().toString().padStart(2, "0"), ), } return renameObj }) } else { let tempNum = newName() matchNames = selectedObjs().map((obj) => { let suffix = "" const lastDotIndex = obj.name.lastIndexOf(".") if (lastDotIndex !== -1) { suffix = obj.name.substring(lastDotIndex + 1) } const renameObj: RenameObj = { src_name: obj.name, new_name: srcName() + tempNum + "." + suffix, } tempNum = (parseInt(tempNum) + 1) .toString() .padStart(tempNum.length, "0") return renameObj }) } setMatchNames(matchNames) openPreviewModal() onClose() } return ( <> {/* */} {t("home.toolbar.batch_rename")} { setType(event) if (event === "1") { setNewNameType("string") } else if (event === "2") { setNewNameType("number") } }} > {t("home.toolbar.regex_rename")} {t("home.toolbar.sequential_renaming")}

{t("home.toolbar.regular_rename")} {t("home.toolbar.sequential_renaming_desc")}

{ setSrcName(e.currentTarget.value) }} onKeyDown={(e) => { if (e.key === "Enter") { submit() } }} /> { setNewName(e.currentTarget.value) }} onKeyDown={(e) => { if (e.key === "Enter") { submit() } }} />
{t("home.toolbar.regex_rename_preview")} {t("home.toolbar.regex_rename_preview_old_name")} {t("home.toolbar.regex_rename_preview_new_name")} {(obj, i) => { return }} ) }