mirror of
https://github.com/outline/outline.git
synced 2026-06-13 03:14:59 +03:00
1f097b0fdd
* chore: resolve no-explicit-any lint warnings in plugins Replaces uses of `any` in the plugins directory with concrete types, `unknown`, or structured type assertions, addressing the remaining typescript-eslint(no-explicit-any) warnings flagged by oxlint. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * chore: address review feedback in GitLabIssueProvider Drop trailing semicolon from log string and add early return in `destroyNamespace` when neither `user_id` nor `full_path` is present to avoid an unnecessary full-scan transaction. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
36 lines
1.0 KiB
TypeScript
36 lines
1.0 KiB
TypeScript
import * as React from "react";
|
|
import type Share from "~/models/Share";
|
|
import usePolicy from "~/hooks/usePolicy";
|
|
import { ActionSeparator } from "~/actions";
|
|
import {
|
|
copyShareUrlFactory,
|
|
goToShareSourceFactory,
|
|
revokeShareFactory,
|
|
} from "~/actions/definitions/shares";
|
|
import { useMenuAction } from "~/hooks/useMenuAction";
|
|
|
|
/**
|
|
* Hook that constructs the action menu for share management operations.
|
|
*
|
|
* @param targetShare - the share to build actions for, or null to skip.
|
|
* @returns action with children for use in menus, or undefined if share is null.
|
|
*/
|
|
export function useShareMenuActions(targetShare: Share | null) {
|
|
const can = usePolicy(targetShare ?? ({} as Share));
|
|
|
|
const actionList = React.useMemo(
|
|
() =>
|
|
!targetShare
|
|
? []
|
|
: [
|
|
copyShareUrlFactory({ share: targetShare }),
|
|
goToShareSourceFactory({ share: targetShare }),
|
|
ActionSeparator,
|
|
revokeShareFactory({ share: targetShare, can }),
|
|
],
|
|
[targetShare, can]
|
|
);
|
|
|
|
return useMenuAction(actionList);
|
|
}
|