mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-06 15:27:27 +00:00
Merge pull request #1589 from Infisical/daniel/ui-improvements
Fix: Select organization UX & project card enhancements
This commit is contained in:
@@ -1,5 +1,3 @@
|
|||||||
/* eslint-disable jsx-a11y/no-static-element-interactions */
|
|
||||||
/* eslint-disable jsx-a11y/click-events-have-key-events */
|
|
||||||
import { useCallback, useEffect } from "react";
|
import { useCallback, useEffect } from "react";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import Head from "next/head";
|
import Head from "next/head";
|
||||||
@@ -76,25 +74,18 @@ export default function LoginPage() {
|
|||||||
if (callbackPort) {
|
if (callbackPort) {
|
||||||
const privateKey = localStorage.getItem("PRIVATE_KEY");
|
const privateKey = localStorage.getItem("PRIVATE_KEY");
|
||||||
|
|
||||||
if (!privateKey) {
|
let error: string | null = null;
|
||||||
createNotification({
|
|
||||||
text: "Private key not found",
|
|
||||||
type: "error"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!user.email) {
|
if (!privateKey) error = "Private key not found";
|
||||||
createNotification({
|
if (!user.email) error = "User email not found";
|
||||||
text: "User email not found",
|
if (!token) error = "No token found";
|
||||||
type: "error"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!token) {
|
if (error) {
|
||||||
createNotification({
|
createNotification({
|
||||||
text: "No token found",
|
text: error,
|
||||||
type: "error"
|
type: "error"
|
||||||
});
|
});
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const payload = {
|
const payload = {
|
||||||
@@ -177,33 +168,22 @@ export default function LoginPage() {
|
|||||||
<Spinner />
|
<Spinner />
|
||||||
) : (
|
) : (
|
||||||
organizations.data?.map((org) => (
|
organizations.data?.map((org) => (
|
||||||
|
// eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions
|
||||||
<div
|
<div
|
||||||
onClick={() => handleSelectOrganization(org)}
|
onClick={() => handleSelectOrganization(org)}
|
||||||
key={org.id}
|
key={org.id}
|
||||||
className="group flex cursor-pointer items-center justify-between rounded-md bg-mineshaft-700 px-4 py-3 capitalize text-gray-200 shadow-md transition-colors hover:bg-mineshaft-600"
|
className="group flex cursor-pointer items-center justify-between rounded-md bg-mineshaft-700 px-4 py-3 capitalize text-gray-200 shadow-md transition-colors hover:bg-mineshaft-600"
|
||||||
>
|
>
|
||||||
<p className="transition-colors">{org.name}</p>
|
<p className="truncate transition-colors">{org.name}</p>
|
||||||
|
|
||||||
<FontAwesomeIcon
|
<FontAwesomeIcon
|
||||||
icon={faArrowRight}
|
icon={faArrowRight}
|
||||||
className="text-gray-400 transition-colors group-hover:text-primary-500"
|
className="text-gray-400 transition-all group-hover:translate-x-2 group-hover:text-primary-500"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
))
|
))
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<Button
|
|
||||||
className="mt-8"
|
|
||||||
colorSchema="primary"
|
|
||||||
isLoading={logout.isLoading}
|
|
||||||
isDisabled={logout.isLoading}
|
|
||||||
variant="solid"
|
|
||||||
size="lg"
|
|
||||||
onClick={handleLogout}
|
|
||||||
>
|
|
||||||
Logout
|
|
||||||
</Button>
|
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -454,7 +454,12 @@ const LearningItemSquare = ({
|
|||||||
};
|
};
|
||||||
|
|
||||||
const formSchema = yup.object({
|
const formSchema = yup.object({
|
||||||
name: yup.string().required().label("Project Name").trim().max(64, "Too long, maximum length is 64 characters"),
|
name: yup
|
||||||
|
.string()
|
||||||
|
.required()
|
||||||
|
.label("Project Name")
|
||||||
|
.trim()
|
||||||
|
.max(64, "Too long, maximum length is 64 characters"),
|
||||||
addMembers: yup.bool().required().label("Add Members")
|
addMembers: yup.bool().required().label("Add Members")
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -631,22 +636,21 @@ const OrganizationPage = withPermission(
|
|||||||
{orgWorkspaces
|
{orgWorkspaces
|
||||||
.filter((ws) => ws?.name?.toLowerCase().includes(searchFilter.toLowerCase()))
|
.filter((ws) => ws?.name?.toLowerCase().includes(searchFilter.toLowerCase()))
|
||||||
.map((workspace) => (
|
.map((workspace) => (
|
||||||
|
// eslint-disable-next-line jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events
|
||||||
<div
|
<div
|
||||||
|
onClick={() => {
|
||||||
|
router.push(`/project/${workspace.id}/secrets/overview`);
|
||||||
|
localStorage.setItem("projectData.id", workspace.id);
|
||||||
|
}}
|
||||||
key={workspace.id}
|
key={workspace.id}
|
||||||
className="min-w-72 flex h-40 flex-col justify-between rounded-md border border-mineshaft-600 bg-mineshaft-800 p-4"
|
className="min-w-72 group flex h-40 cursor-pointer flex-col justify-between rounded-md border border-mineshaft-600 bg-mineshaft-800 p-4"
|
||||||
>
|
>
|
||||||
<div className="mt-0 truncate text-lg text-mineshaft-100">{workspace.name}</div>
|
<div className="mt-0 truncate text-lg text-mineshaft-100">{workspace.name}</div>
|
||||||
<div className="mt-0 pb-6 text-sm text-mineshaft-300">
|
<div className="mt-0 pb-6 text-sm text-mineshaft-300">
|
||||||
{workspace.environments?.length || 0} environments
|
{workspace.environments?.length || 0} environments
|
||||||
</div>
|
</div>
|
||||||
<button
|
<button type="button">
|
||||||
type="button"
|
<div className="group ml-auto w-max cursor-pointer rounded-full border border-mineshaft-600 bg-mineshaft-900 py-2 px-4 text-sm text-mineshaft-300 transition-all group-hover:border-primary-500/80 group-hover:bg-primary-800/20 group-hover:text-mineshaft-200">
|
||||||
onClick={() => {
|
|
||||||
router.push(`/project/${workspace.id}/secrets/overview`);
|
|
||||||
localStorage.setItem("projectData.id", workspace.id);
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<div className="group ml-auto w-max cursor-pointer rounded-full border border-mineshaft-600 bg-mineshaft-900 py-2 px-4 text-sm text-mineshaft-300 hover:border-primary-500/80 hover:bg-primary-800/20 hover:text-mineshaft-200">
|
|
||||||
Explore{" "}
|
Explore{" "}
|
||||||
<FontAwesomeIcon
|
<FontAwesomeIcon
|
||||||
icon={faArrowRight}
|
icon={faArrowRight}
|
||||||
@@ -693,7 +697,7 @@ const OrganizationPage = withPermission(
|
|||||||
<a
|
<a
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
className="group ml-auto w-max cursor-default rounded-full border border-mineshaft-600 bg-mineshaft-900 py-2 px-4 text-sm text-mineshaft-300 hover:border-primary-500/80 hover:bg-primary-800/20 hover:text-mineshaft-200"
|
className="group ml-auto w-max cursor-default rounded-full border border-mineshaft-600 bg-mineshaft-900 py-2 px-4 text-sm text-mineshaft-300 transition-all hover:border-primary-500/80 hover:bg-primary-800/20 hover:text-mineshaft-200"
|
||||||
href={feature.link}
|
href={feature.link}
|
||||||
>
|
>
|
||||||
Learn more{" "}
|
Learn more{" "}
|
||||||
|
|||||||
Reference in New Issue
Block a user