Skip to content

Commit

Permalink
refactor: limit moves to same types
Browse files Browse the repository at this point in the history
  • Loading branch information
seaerchin committed Jan 20, 2025
1 parent f66a21b commit 75ddd55
Show file tree
Hide file tree
Showing 5 changed files with 70 additions and 41 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,10 @@ import {

import type { ResourceTableData } from "./types"
import { MenuItem } from "~/components/Menu"
import { moveResourceAtom } from "~/features/editing-experience/atoms"
import {
moveResourceAtom,
moveTypesAtom,
} from "~/features/editing-experience/atoms"
import { Can } from "~/features/permissions"
import {
deleteResourceModalAtom,
Expand All @@ -38,8 +41,11 @@ export const ResourceTableMenu = ({
parentId,
}: ResourceTableMenuProps) => {
const setMoveResource = useSetAtom(moveResourceAtom)
const handleMoveResourceClick = () =>
const setMoveResourceTypes = useSetAtom(moveTypesAtom)
const handleMoveResourceClick = () => {
setMoveResource({ resourceId, title, permalink, parentId })
setMoveResourceTypes([ResourceType.RootPage, ResourceType.Folder])
}
const setResourceModalState = useSetAtom(deleteResourceModalAtom)
const setFolderSettingsModalState = useSetAtom(folderSettingsModalAtom)
const setPageSettingsModalState = useSetAtom(pageSettingsModalAtom)
Expand Down
2 changes: 2 additions & 0 deletions apps/studio/src/features/editing-experience/atoms.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import { ResourceType } from "~prisma/generated/generatedEnums"
import { format } from "date-fns"
import { atom } from "jotai"

import type { PendingMoveResource } from "./types"

export const moveResourceAtom = atom<null | PendingMoveResource>(null)
export const moveTypesAtom = atom<keyof typeof ResourceType>([])

export interface CollectionLinkProps {
ref: string
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import { withSuspense } from "~/hocs/withSuspense"
import { useQueryParse } from "~/hooks/useQueryParse"
import { sitePageSchema } from "~/pages/sites/[siteId]"
import { trpc } from "~/utils/trpc"
import { moveResourceAtom } from "../../atoms"
import { moveResourceAtom, moveTypesAtom } from "../../atoms"
import { MoveItem } from "./MoveItem"

const generatePermalinkPrefix = (parents: PendingMoveResource[]) => {
Expand Down Expand Up @@ -60,6 +60,7 @@ const MoveResourceContent = withSuspense(
const [resourceStack, setResourceStack] = useState<PendingMoveResource[]>(
[],
)
const allowedMoveTypes = useAtomValue(moveTypesAtom)
const [isResourceHighlighted, setIsResourceHighlighted] =
useState<boolean>(true)
const { siteId } = useQueryParse(sitePageSchema)
Expand Down Expand Up @@ -101,6 +102,7 @@ const MoveResourceContent = withSuspense(
setMovedItem(null)
},
onSuccess: async () => {
await utils.collection.list.invalidate()
await utils.page.readPageAndBlob.invalidate()
await utils.resource.getParentOf.invalidate()
await utils.resource.getChildrenOf.invalidate()
Expand Down Expand Up @@ -204,46 +206,50 @@ const MoveResourceContent = withSuspense(
</Flex>
)}
{data?.pages.map(({ items }) =>
items.map((item) => {
const isItemDisabled: boolean =
item.id === movedItem?.resourceId
const isItemHighlighted: boolean =
isResourceHighlighted && item.id === curResourceId
items
.filter(({ type }) => {
return allowedMoveTypes.includes(type)
})
.map((item) => {
const isItemDisabled: boolean =
item.id === movedItem?.resourceId
const isItemHighlighted: boolean =
isResourceHighlighted && item.id === curResourceId

return (
<MoveItem
{...item}
key={item.id}
isDisabled={isItemDisabled}
isHighlighted={isItemHighlighted}
handleOnClick={() => {
if (isItemDisabled) {
return
}
return (
<MoveItem
{...item}
key={item.id}
isDisabled={isItemDisabled}
isHighlighted={isItemHighlighted}
handleOnClick={() => {
if (isItemDisabled) {
return
}

if (isItemHighlighted) {
setIsResourceHighlighted(false)
return
}
if (isItemHighlighted) {
setIsResourceHighlighted(false)
return
}

const newResource = {
...item,
parentId: parentDest?.resourceId ?? null,
resourceId: item.id,
}
if (isResourceHighlighted) {
setResourceStack((prev) => [
...prev.slice(0, -1),
newResource,
])
} else {
setIsResourceHighlighted(true)
setResourceStack((prev) => [...prev, newResource])
}
}}
/>
)
}),
const newResource = {
...item,
parentId: parentDest?.resourceId ?? null,
resourceId: item.id,
}
if (isResourceHighlighted) {
setResourceStack((prev) => [
...prev.slice(0, -1),
newResource,
])
} else {
setIsResourceHighlighted(true)
setResourceStack((prev) => [...prev, newResource])
}
}}
/>
)
}),
)}
{hasNextPage && (
<Button
Expand Down
2 changes: 1 addition & 1 deletion apps/studio/src/server/modules/resource/resource.router.ts
Original file line number Diff line number Diff line change
Expand Up @@ -291,8 +291,8 @@ export const resourceRouter = router({
.where("id", "=", String(movedResourceId))
.where("Resource.type", "in", [
ResourceType.Page,
ResourceType.CollectionPage,
ResourceType.Folder,
ResourceType.Collection,
])
.set({
parentId: !!destinationResourceId
Expand Down
15 changes: 15 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 75ddd55

Please sign in to comment.