mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-06 18:27:19 +00:00
added click-to-copy and changed the slack link
This commit is contained in:
@@ -7,7 +7,7 @@
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h4 align="center">
|
<h4 align="center">
|
||||||
<a href="https://join.slack.com/t/infisical-users/shared_invite/zt-1ye0tm8ab-899qZ6ZbpfESuo6TEikyOQ">Slack</a> |
|
<a href="https://infisical.com/slack">Slack</a> |
|
||||||
<a href="https://infisical.com/">Infisical Cloud</a> |
|
<a href="https://infisical.com/">Infisical Cloud</a> |
|
||||||
<a href="https://infisical.com/docs/self-hosting/overview">Self-Hosting</a> |
|
<a href="https://infisical.com/docs/self-hosting/overview">Self-Hosting</a> |
|
||||||
<a href="https://infisical.com/docs/documentation/getting-started/introduction">Docs</a> |
|
<a href="https://infisical.com/docs/documentation/getting-started/introduction">Docs</a> |
|
||||||
@@ -36,7 +36,7 @@
|
|||||||
<a href="https://cloudsmith.io/~infisical/repos/">
|
<a href="https://cloudsmith.io/~infisical/repos/">
|
||||||
<img src="https://img.shields.io/badge/Downloads-395.8k-orange" alt="Cloudsmith downloads" />
|
<img src="https://img.shields.io/badge/Downloads-395.8k-orange" alt="Cloudsmith downloads" />
|
||||||
</a>
|
</a>
|
||||||
<a href="https://join.slack.com/t/infisical-users/shared_invite/zt-1wehzfnzn-1aMo5JcGENJiNAC2SD8Jlg">
|
<a href="https://infisical.com/slack">
|
||||||
<img src="https://img.shields.io/badge/chat-on%20Slack-blueviolet" alt="Slack community channel" />
|
<img src="https://img.shields.io/badge/chat-on%20Slack-blueviolet" alt="Slack community channel" />
|
||||||
</a>
|
</a>
|
||||||
<a href="https://twitter.com/infisical">
|
<a href="https://twitter.com/infisical">
|
||||||
@@ -135,12 +135,12 @@ Whether it's big or small, we love contributions. Check out our guide to see how
|
|||||||
Not sure where to get started? You can:
|
Not sure where to get started? You can:
|
||||||
|
|
||||||
- [Book a free, non-pressure pairing session / code walkthrough with one of our teammates](https://cal.com/tony-infisical/30-min-meeting-contributing)!
|
- [Book a free, non-pressure pairing session / code walkthrough with one of our teammates](https://cal.com/tony-infisical/30-min-meeting-contributing)!
|
||||||
- Join our <a href="https://join.slack.com/t/infisical-users/shared_invite/zt-1wehzfnzn-1aMo5JcGENJiNAC2SD8Jlg">Slack</a>, and ask us any questions there.
|
- Join our <a href="https://infisical.com/slack">Slack</a>, and ask us any questions there.
|
||||||
|
|
||||||
## Resources
|
## Resources
|
||||||
|
|
||||||
- [Docs](https://infisical.com/docs/documentation/getting-started/introduction) for comprehensive documentation and guides
|
- [Docs](https://infisical.com/docs/documentation/getting-started/introduction) for comprehensive documentation and guides
|
||||||
- [Slack](https://join.slack.com/t/infisical-users/shared_invite/zt-1wehzfnzn-1aMo5JcGENJiNAC2SD8Jlg) for discussion with the community and Infisical team.
|
- [Slack](https://infisical.com/slack) for discussion with the community and Infisical team.
|
||||||
- [GitHub](https://github.com/Infisical/infisical) for code, issues, and pull requests
|
- [GitHub](https://github.com/Infisical/infisical) for code, issues, and pull requests
|
||||||
- [Twitter](https://twitter.com/infisical) for fast news
|
- [Twitter](https://twitter.com/infisical) for fast news
|
||||||
- [YouTube](https://www.youtube.com/@infisical_od) for videos on secret management
|
- [YouTube](https://www.youtube.com/@infisical_od) for videos on secret management
|
||||||
|
|||||||
+1
-1
@@ -73,7 +73,7 @@
|
|||||||
{
|
{
|
||||||
"name": "Slack",
|
"name": "Slack",
|
||||||
"icon": "slack",
|
"icon": "slack",
|
||||||
"url": "https://join.slack.com/t/infisical-users/shared_invite/zt-1wehzfnzn-1aMo5JcGENJiNAC2SD8Jlg"
|
"url": "https://infisical.com/slack"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "GitHub",
|
"name": "GitHub",
|
||||||
|
|||||||
@@ -301,7 +301,7 @@ export const AppLayout = ({ children }: LayoutProps) => {
|
|||||||
<DropdownMenuItem>Documentation<FontAwesomeIcon icon={faArrowUpRightFromSquare} className="pl-1.5 text-xxs mb-[0.06rem]" /></DropdownMenuItem>
|
<DropdownMenuItem>Documentation<FontAwesomeIcon icon={faArrowUpRightFromSquare} className="pl-1.5 text-xxs mb-[0.06rem]" /></DropdownMenuItem>
|
||||||
</a>
|
</a>
|
||||||
<a
|
<a
|
||||||
href="https://join.slack.com/t/infisical-users/shared_invite/zt-1ye0tm8ab-899qZ6ZbpfESuo6TEikyOQ"
|
href="https://infisical.com/slack"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
className="w-full mt-3 text-sm text-mineshaft-300 font-normal leading-[1.2rem] hover:text-mineshaft-100"
|
className="w-full mt-3 text-sm text-mineshaft-300 font-normal leading-[1.2rem] hover:text-mineshaft-100"
|
||||||
|
|||||||
@@ -379,7 +379,7 @@ export default function Organization() {
|
|||||||
icon: faSlack,
|
icon: faSlack,
|
||||||
time: "1 min",
|
time: "1 min",
|
||||||
userAction: "slack_cta_clicked",
|
userAction: "slack_cta_clicked",
|
||||||
link: "https://join.slack.com/t/infisical-users/shared_invite/zt-1ye0tm8ab-899qZ6ZbpfESuo6TEikyOQ"
|
link: "https://infisical.com/slack"
|
||||||
})}</div>
|
})}</div>
|
||||||
</div>
|
</div>
|
||||||
{orgWorkspaces.length !== 0 && <div className="group text-mineshaft-100 relative mb-3 flex h-full w-full cursor-default flex-col items-center justify-between overflow-hidden rounded-md border border-mineshaft-600 bg-mineshaft-800 pl-2 pr-2 pt-4 pb-2 shadow-xl duration-200">
|
{orgWorkspaces.length !== 0 && <div className="group text-mineshaft-100 relative mb-3 flex h-full w-full cursor-default flex-col items-center justify-between overflow-hidden rounded-md border border-mineshaft-600 bg-mineshaft-800 pl-2 pr-2 pt-4 pb-2 shadow-xl duration-200">
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
/* eslint-disable react/jsx-no-useless-fragment */
|
/* eslint-disable react/jsx-no-useless-fragment */
|
||||||
import { memo, useRef } from "react";
|
import { memo, useEffect, useRef } from "react";
|
||||||
import { Controller, useFieldArray, useFormContext, useWatch } from "react-hook-form";
|
import { Controller, useFieldArray, useFormContext, useWatch } from "react-hook-form";
|
||||||
import {
|
import {
|
||||||
|
faCheck,
|
||||||
faCodeBranch,
|
faCodeBranch,
|
||||||
faComment,
|
faComment,
|
||||||
|
faCopy,
|
||||||
faEllipsis,
|
faEllipsis,
|
||||||
faInfoCircle,
|
faInfoCircle,
|
||||||
faPlus,
|
faPlus,
|
||||||
@@ -30,6 +32,7 @@ import {
|
|||||||
TextArea,
|
TextArea,
|
||||||
Tooltip
|
Tooltip
|
||||||
} from "@app/components/v2";
|
} from "@app/components/v2";
|
||||||
|
import { useToggle } from "@app/hooks";
|
||||||
import { WsTag } from "@app/hooks/api/types";
|
import { WsTag } from "@app/hooks/api/types";
|
||||||
|
|
||||||
import { FormData, SecretActionType } from "../../DashboardPage.utils";
|
import { FormData, SecretActionType } from "../../DashboardPage.utils";
|
||||||
@@ -95,6 +98,16 @@ export const SecretInputRow = memo(
|
|||||||
name: `secrets.${index}.key`,
|
name: `secrets.${index}.key`,
|
||||||
disabled: isKeySubDisabled.current
|
disabled: isKeySubDisabled.current
|
||||||
});
|
});
|
||||||
|
const secValue = useWatch({
|
||||||
|
control,
|
||||||
|
name: `secrets.${index}.value`,
|
||||||
|
disabled: isKeySubDisabled.current
|
||||||
|
});
|
||||||
|
const secValueOverride = useWatch({
|
||||||
|
control,
|
||||||
|
name: `secrets.${index}.valueOverride`,
|
||||||
|
disabled: isKeySubDisabled.current
|
||||||
|
})
|
||||||
const secId = useWatch({ control, name: `secrets.${index}._id` });
|
const secId = useWatch({ control, name: `secrets.${index}._id` });
|
||||||
|
|
||||||
const tags = useWatch({ control, name: `secrets.${index}.tags`, defaultValue: [] }) || [];
|
const tags = useWatch({ control, name: `secrets.${index}.tags`, defaultValue: [] }) || [];
|
||||||
@@ -103,6 +116,21 @@ export const SecretInputRow = memo(
|
|||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const [isInviteLinkCopied, setInviteLinkCopied] = useToggle(false);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
let timer: NodeJS.Timeout;
|
||||||
|
if (isInviteLinkCopied) {
|
||||||
|
timer = setTimeout(() => setInviteLinkCopied.off(), 2000);
|
||||||
|
}
|
||||||
|
return () => clearTimeout(timer);
|
||||||
|
}, [isInviteLinkCopied]);
|
||||||
|
|
||||||
|
const copyTokenToClipboard = () => {
|
||||||
|
navigator.clipboard.writeText((secValueOverride || secValue) as string);
|
||||||
|
setInviteLinkCopied.on();
|
||||||
|
};
|
||||||
|
|
||||||
// when secret is override by personal values
|
// when secret is override by personal values
|
||||||
const isOverridden =
|
const isOverridden =
|
||||||
overrideAction === SecretActionType.Created || overrideAction === SecretActionType.Modified;
|
overrideAction === SecretActionType.Created || overrideAction === SecretActionType.Modified;
|
||||||
@@ -223,6 +251,19 @@ export const SecretInputRow = memo(
|
|||||||
{slug}
|
{slug}
|
||||||
</Tag>
|
</Tag>
|
||||||
))}
|
))}
|
||||||
|
<div className="w-0 group-hover:w-6 overflow-hidden">
|
||||||
|
<Tooltip content="Copy value">
|
||||||
|
<IconButton
|
||||||
|
variant="plain"
|
||||||
|
size="md"
|
||||||
|
ariaLabel="add-tag"
|
||||||
|
className="py-[0.42rem]"
|
||||||
|
onClick={copyTokenToClipboard}
|
||||||
|
>
|
||||||
|
<FontAwesomeIcon icon={isInviteLinkCopied ? faCheck : faCopy} />
|
||||||
|
</IconButton>
|
||||||
|
</Tooltip>
|
||||||
|
</div>
|
||||||
{!(isReadOnly || isAddOnly || isRollbackMode) && (
|
{!(isReadOnly || isAddOnly || isRollbackMode) && (
|
||||||
<div className="duration-0 ml-1 overflow-hidden">
|
<div className="duration-0 ml-1 overflow-hidden">
|
||||||
<Popover>
|
<Popover>
|
||||||
|
|||||||
Reference in New Issue
Block a user