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} +