diff --git a/web/src/components/MemoContent/EmbeddedContent/EmbeddedMemo.tsx b/web/src/components/MemoContent/EmbeddedContent/EmbeddedMemo.tsx
index 90b23d32a7fc6..19595bfff7f56 100644
--- a/web/src/components/MemoContent/EmbeddedContent/EmbeddedMemo.tsx
+++ b/web/src/components/MemoContent/EmbeddedContent/EmbeddedMemo.tsx
@@ -54,7 +54,7 @@ const EmbeddedMemo = observer(({ resourceId: uid, params: paramsStr }: Props) =>
nodes={memo.nodes}
embeddedMemos={context.embeddedMemos}
/>
-
+
>
);
if (inlineMode) {
diff --git a/web/src/components/MemoContent/EmbeddedContent/EmbeddedResource.tsx b/web/src/components/MemoContent/EmbeddedContent/EmbeddedResource.tsx
index 3690a11367be7..e33c2047a8c35 100644
--- a/web/src/components/MemoContent/EmbeddedContent/EmbeddedResource.tsx
+++ b/web/src/components/MemoContent/EmbeddedContent/EmbeddedResource.tsx
@@ -13,6 +13,9 @@ interface Props {
const getAdditionalClassNameWithParams = (params: URLSearchParams) => {
const additionalClassNames = [];
+ if (params.has("inline")) {
+ additionalClassNames.push("inline-block");
+ }
if (params.has("align")) {
const align = params.get("align");
if (align === "center") {
@@ -38,7 +41,8 @@ const getAdditionalClassNameWithParams = (params: URLSearchParams) => {
const EmbeddedResource = observer(({ resourceId: uid, params: paramsStr }: Props) => {
const loadingState = useLoading();
- const resource = resourceStore.getResourceByName(uid);
+ const resourceStore = useResourceStore();
+ const resource = resourceStore.getResourceByName(`resources/${uid}`);
const params = new URLSearchParams(paramsStr);
useEffect(() => {
@@ -54,7 +58,7 @@ const EmbeddedResource = observer(({ resourceId: uid, params: paramsStr }: Props
return (
-
+
);
});
diff --git a/web/src/components/MemoContent/ReferencedContent/ReferencedResource.tsx b/web/src/components/MemoContent/ReferencedContent/ReferencedResource.tsx
new file mode 100644
index 0000000000000..029ad9851a0f6
--- /dev/null
+++ b/web/src/components/MemoContent/ReferencedContent/ReferencedResource.tsx
@@ -0,0 +1,12 @@
+import EmbeddedResource from "../EmbeddedContent/EmbeddedResource";
+
+interface Props {
+ resourceId: string;
+ params: string;
+}
+
+const ReferencedResource = ({ resourceId: uid, params }: Props) => {
+ return ;
+};
+
+export default ReferencedResource;
diff --git a/web/src/components/MemoContent/ReferencedContent/index.tsx b/web/src/components/MemoContent/ReferencedContent/index.tsx
index 374aec2d13caa..33b4b43519087 100644
--- a/web/src/components/MemoContent/ReferencedContent/index.tsx
+++ b/web/src/components/MemoContent/ReferencedContent/index.tsx
@@ -1,5 +1,6 @@
import Error from "./Error";
import ReferencedMemo from "./ReferencedMemo";
+import ReferencedResource from "./ReferencedResource";
interface Props {
resourceName: string;
@@ -16,6 +17,9 @@ const ReferencedContent = ({ resourceName, params }: Props) => {
if (resourceType === "memos") {
return ;
}
+ if (resourceType === "resources") {
+ return ;
+ }
return ;
};
diff --git a/web/src/components/MemoEditor/ResourceListView.tsx b/web/src/components/MemoEditor/ResourceListView.tsx
index 4d35c14001ff1..25421924a2a01 100644
--- a/web/src/components/MemoEditor/ResourceListView.tsx
+++ b/web/src/components/MemoEditor/ResourceListView.tsx
@@ -2,19 +2,30 @@ import { DndContext, closestCenter, MouseSensor, TouchSensor, useSensor, useSens
import { arrayMove, SortableContext, verticalListSortingStrategy } from "@dnd-kit/sortable";
import { XIcon } from "lucide-react";
import { Resource } from "@/types/proto/api/v1/resource_service";
+import { useTranslate } from "@/utils/i18n";
+import { getResourceUrl } from "@/utils/resource";
import ResourceIcon from "../ResourceIcon";
import SortableItem from "./SortableItem";
interface Props {
resourceList: Resource[];
setResourceList: (resourceList: Resource[]) => void;
+ checkIfSafeToDeleteResource?: (resource: Resource) => boolean;
}
const ResourceListView = (props: Props) => {
- const { resourceList, setResourceList } = props;
+ const { resourceList, setResourceList, checkIfSafeToDeleteResource } = props;
const sensors = useSensors(useSensor(MouseSensor), useSensor(TouchSensor));
+ const t = useTranslate();
const handleDeleteResource = async (name: string) => {
+ if (
+ typeof checkIfSafeToDeleteResource === "function" &&
+ !checkIfSafeToDeleteResource(resourceList.find((resource) => resource.name === name)!)
+ ) {
+ const confirmationText = t("resource.delete-confirm-referenced");
+ if (!window.confirm(confirmationText)) return;
+ }
setResourceList(resourceList.filter((resource) => resource.name !== name));
};
@@ -42,7 +53,14 @@ const ResourceListView = (props: Props) => {
>
- {resource.filename}
+
+ {resource.filename}
+