Fix type + assets permissions display logic

Signed-off-by: Émile Ré <nemile.re@gmail.com>
This commit is contained in:
Émile Ré
2025-12-01 18:12:21 +04:00
parent 7739eb1930
commit 27ef768438
4 changed files with 25 additions and 29 deletions

View File

@@ -22,7 +22,6 @@ type Props = {
AssetsPageFragment$data AssetsPageFragment$data
>; >;
assets: AssetsPageFragment$data["assets"]["edges"][0]["node"][]; assets: AssetsPageFragment$data["assets"]["edges"][0]["node"][];
hasAnyAction: boolean;
}; };
const schema = z.object({ const schema = z.object({
@@ -46,7 +45,7 @@ const defaultValue = {
} satisfies z.infer<typeof schema>; } satisfies z.infer<typeof schema>;
export function AssetsTable(props: Props) { export function AssetsTable(props: Props) {
const { connectionId, pagination, assets, hasAnyAction } = props; const { connectionId, pagination, assets } = props;
const organizationId = useOrganizationId(); const organizationId = useOrganizationId();
const { __ } = useTranslate(); const { __ } = useTranslate();
@@ -74,23 +73,21 @@ export function AssetsTable(props: Props) {
organizationId, organizationId,
}} }}
action={({ item }) => action={({ item }) =>
hasAnyAction ? ( <ActionDropdown>
<ActionDropdown> <DropdownItem asChild>
<DropdownItem asChild> <Link to={`/organizations/${organizationId}/assets/${item.id}`}>
<Link to={`/organizations/${organizationId}/assets/${item.id}`}> <IconPencil size={16} />
<IconPencil size={16} /> {__("Edit")}
{__("Edit")} </Link>
</Link> </DropdownItem>
</DropdownItem> <DropdownItem
<DropdownItem onClick={() => deleteAsset(item)}
onClick={() => deleteAsset(item)} variant="danger"
variant="danger" icon={IconTrashCan}
icon={IconTrashCan} >
> {__("Delete")}
{__("Delete")} </DropdownItem>
</DropdownItem> </ActionDropdown>
</ActionDropdown>
) : null
} }
row={({ item }) => ( row={({ item }) => (
<> <>

View File

@@ -20,7 +20,7 @@ type Props = {
assets: AssetEntry[]; assets: AssetEntry[];
}; };
export function SnapshotAssetsTable(props: Props) { export function ReadOnlyAssetsTable(props: Props) {
const { pagination, assets } = props; const { pagination, assets } = props;
const { __ } = useTranslate(); const { __ } = useTranslate();

View File

@@ -31,7 +31,7 @@ export function useStateWithSchema<T extends ZodTypeAny>(
value, value,
errors, errors,
update: useCallback( update: useCallback(
(key: keyof z.infer<T>, value: z.infer<T>[typeof key]) => { <TKey extends keyof z.infer<T>>(key: TKey, value: z.infer<T>[TKey]) => {
setState((prevState) => ({ ...prevState, [key]: value })); setState((prevState) => ({ ...prevState, [key]: value }));
}, },
[], [],

View File

@@ -22,7 +22,7 @@ import { SnapshotBanner } from "/components/SnapshotBanner";
import { CreateAssetDialog } from "./dialogs/CreateAssetDialog"; import { CreateAssetDialog } from "./dialogs/CreateAssetDialog";
import { Authorized, isAuthorized } from "/permissions"; import { Authorized, isAuthorized } from "/permissions";
import { AssetsTable } from "../../../components/assets/AssetsTable"; import { AssetsTable } from "../../../components/assets/AssetsTable";
import { SnapshotAssetsTable } from "/components/assets/SnapshotAssetsTable"; import { ReadOnlyAssetsTable } from "../../../components/assets/ReadOnlyAssetsTable";
const paginatedAssetsFragment = graphql` const paginatedAssetsFragment = graphql`
fragment AssetsPageFragment on Organization fragment AssetsPageFragment on Organization
@@ -90,10 +90,10 @@ export default function AssetsPage(props: Props) {
const assets = pagination.data.assets?.edges.map((edge) => edge.node); const assets = pagination.data.assets?.edges.map((edge) => edge.node);
const connectionId = pagination.data.assets.__id; const connectionId = pagination.data.assets.__id;
const hasAnyAction = const canWrite = (
!isSnapshotMode && isAuthorized(organizationId, "Asset", "updateAsset") ||
(isAuthorized(organizationId, "Asset", "updateAsset") || isAuthorized(organizationId, "Asset", "deleteAsset")
isAuthorized(organizationId, "Asset", "deleteAsset")); );
usePageTitle(__("Assets")); usePageTitle(__("Assets"));
return ( return (
@@ -116,14 +116,13 @@ export default function AssetsPage(props: Props) {
</Authorized> </Authorized>
)} )}
</PageHeader> </PageHeader>
{isSnapshotMode ? {isSnapshotMode || !canWrite ?
<SnapshotAssetsTable pagination={pagination} assets={assets} /> <ReadOnlyAssetsTable pagination={pagination} assets={assets} />
: :
<AssetsTable <AssetsTable
connectionId={connectionId} connectionId={connectionId}
pagination={pagination} pagination={pagination}
assets={assets} assets={assets}
hasAnyAction={hasAnyAction}
/> />
} }
</div> </div>