Skip to content

Commit

Permalink
fix: delete tag api (#950)
Browse files Browse the repository at this point in the history
* fix: delete tag api

* chore: update
  • Loading branch information
boojack committed Jan 14, 2023
1 parent 677750e commit da5178d
Show file tree
Hide file tree
Showing 7 changed files with 20 additions and 17 deletions.
7 changes: 5 additions & 2 deletions server/tag.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"encoding/json"
"fmt"
"net/http"
"net/url"
"regexp"
"sort"

Expand Down Expand Up @@ -133,8 +134,10 @@ func (s *Server) registerTagRoutes(g *echo.Group) {
return echo.NewHTTPError(http.StatusUnauthorized, "Missing user in session")
}

tagName := c.Param("tagName")
if tagName == "" {
tagName, err := url.QueryUnescape(c.Param("tagName"))
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, "Invalid tag name").SetInternal(err)
} else if tagName == "" {
return echo.NewHTTPError(http.StatusBadRequest, "Tag name cannot be empty")
}

Expand Down
3 changes: 2 additions & 1 deletion web/src/components/MemoResource.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { getResourceUrl } from "../utils/resource";
import Icon from "./Icon";

interface Props {
Expand All @@ -7,7 +8,7 @@ interface Props {

const MemoResource: React.FC<Props> = (props: Props) => {
const { className, resource } = props;
const resourceUrl = `${window.location.origin}/o/r/${resource.id}/${resource.filename}`;
const resourceUrl = getResourceUrl(resource);

const handlePreviewBtnClick = () => {
window.open(resourceUrl);
Expand Down
5 changes: 3 additions & 2 deletions web/src/components/MemoResources.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { absolutifyLink } from "../helpers/utils";
import { getResourceUrl } from "../utils/resource";
import SquareDiv from "./common/SquareDiv";
import showPreviewImageDialog from "./PreviewImageDialog";
import MemoResource from "./MemoResource";
Expand Down Expand Up @@ -27,7 +28,7 @@ const MemoResources: React.FC<Props> = (props: Props) => {
const imgUrls = availableResourceList
.filter((resource) => resource.type.startsWith("image"))
.map((resource) => {
return `/o/r/${resource.id}/${resource.filename}`;
return getResourceUrl(resource);
});

const handleImageClick = (imgUrl: string) => {
Expand All @@ -41,7 +42,7 @@ const MemoResources: React.FC<Props> = (props: Props) => {
{availableResourceList.length > 0 && (
<div className="images-wrapper">
{availableResourceList.map((resource) => {
const url = `/o/r/${resource.id}/${resource.filename}`;
const url = getResourceUrl(resource);
if (resource.type.startsWith("image")) {
return (
<SquareDiv key={resource.id} className="memo-resource">
Expand Down
10 changes: 4 additions & 6 deletions web/src/components/ResourcesDialog.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import { Tooltip } from "@mui/joy";
import copy from "copy-to-clipboard";
import { useCallback, useEffect, useState } from "react";
import { useEffect, useState } from "react";
import { useTranslation } from "react-i18next";
import useLoading from "../hooks/useLoading";
import { useResourceStore } from "../store/module";
import { getResourceUrl } from "../utils/resource";
import Icon from "./Icon";
import toastHelper from "./Toast";
import Dropdown from "./common/Dropdown";
Expand Down Expand Up @@ -83,10 +84,6 @@ const ResourcesDialog: React.FC<Props> = (props: Props) => {
inputEl.click();
};

const getResourceUrl = useCallback((resource: Resource) => {
return `${window.location.origin}/o/r/${resource.id}/${resource.filename}`;
}, []);

const handlePreviewBtnClick = (resource: Resource) => {
const resourceUrl = getResourceUrl(resource);
if (resource.type.startsWith("image")) {
Expand All @@ -104,7 +101,8 @@ const ResourcesDialog: React.FC<Props> = (props: Props) => {
};

const handleCopyResourceLinkBtnClick = (resource: Resource) => {
copy(`${window.location.origin}/o/r/${resource.id}/${resource.filename}`);
const url = getResourceUrl(resource);
copy(url);
toastHelper.success(t("message.succeed-copy-resource-link"));
};

Expand Down
7 changes: 2 additions & 5 deletions web/src/components/ResourcesSelectorDialog.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import { Checkbox, Tooltip } from "@mui/joy";
import { useCallback, useEffect, useState } from "react";
import { useEffect, useState } from "react";
import { useTranslation } from "react-i18next";
import useLoading from "../hooks/useLoading";
import { useEditorStore, useResourceStore } from "../store/module";
import { getResourceUrl } from "../utils/resource";
import Icon from "./Icon";
import toastHelper from "./Toast";
import { generateDialog } from "./Dialog";
Expand Down Expand Up @@ -47,10 +48,6 @@ const ResourcesSelectorDialog: React.FC<Props> = (props: Props) => {
});
}, [resources]);

const getResourceUrl = useCallback((resource: Resource) => {
return `${window.location.origin}/o/r/${resource.id}/${resource.filename}`;
}, []);

const handlePreviewBtnClick = (resource: Resource) => {
const resourceUrl = getResourceUrl(resource);
if (resource.type.startsWith("image")) {
Expand Down
2 changes: 1 addition & 1 deletion web/src/helpers/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,7 @@ export function upsertTag(tagName: string) {
}

export function deleteTag(tagName: string) {
return axios.delete<ResponseObject<string>>(`/api/tag/${tagName}`);
return axios.delete<ResponseObject<string>>(`/api/tag/${encodeURI(tagName)}`);
}

export async function getRepoStarCount() {
Expand Down
3 changes: 3 additions & 0 deletions web/src/utils/resource.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export const getResourceUrl = (resource: Resource, withOrigin = true) => {
return `${withOrigin ? window.location.origin : ""}/o/r/${resource.id}/${encodeURI(resource.filename)}`;
};

0 comments on commit da5178d

Please sign in to comment.