diff --git a/.eslintrc.json b/.eslintrc.json index 1b4ba28541..e3a1a4bd52 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -37,7 +37,7 @@ "ecmaVersion": "latest", "sourceType": "module" }, - "plugins": ["@typescript-eslint", "tailwindcss", "react", "react-hooks", "import", "prettier", "unused-imports"], + "plugins": ["@typescript-eslint", "tailwindcss", "react", "react-hooks", "import", "prettier"], "rules": { "tailwindcss/no-contradicting-classname": "error", "import/no-unresolved": "off", @@ -47,15 +47,11 @@ "jsx-a11y/click-events-have-key-events": "warn", "jsx-a11y/no-autofocus": "off", - "@typescript-eslint/no-unused-vars": "off", - "unused-imports/no-unused-imports": "error", - "unused-imports/no-unused-vars": [ - "warn", + "@typescript-eslint/no-unused-vars": [ + "error", { - "vars": "all", - "args": "after-used", - "varsIgnorePattern": "^_", "argsIgnorePattern": "^_", + "varsIgnorePattern": "^_", "caughtErrorsIgnorePattern": "^_" } ], diff --git a/.vscode/settings.json b/.vscode/settings.json index f55c9a2ae3..043bb10e90 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,10 +9,5 @@ "[ignore]": { "editor.defaultFormatter": "foxundermoon.shell-format" }, - "prettier.trailingComma": "none", - "editor.codeActionsOnSave": { - "source.fixAll": "always", - "source.fixAll.eslint": "always" - }, - "eslint.validate": ["javascript", "javascriptreact", "typescript", "typescriptreact"] + "prettier.trailingComma": "none" } diff --git a/apps/design-system/src/pages/view-preview/profile-settings-view-wrapper.tsx b/apps/design-system/src/pages/view-preview/profile-settings-view-wrapper.tsx index d1506404ae..c63b998dd0 100644 --- a/apps/design-system/src/pages/view-preview/profile-settings-view-wrapper.tsx +++ b/apps/design-system/src/pages/view-preview/profile-settings-view-wrapper.tsx @@ -1,14 +1,14 @@ import { FC, HTMLAttributes, PropsWithChildren } from 'react' import { Route, Routes } from 'react-router-dom' -import { useTranslationsStore } from '@utils/viewUtils' +import { useTranslationStore } from '@utils/viewUtils' import { ProfileSettingsLayout } from '@harnessio/ui/views' export const ProfileSettingsViewWrapper: FC>> = ({ children }) => { return ( - }> + }> diff --git a/apps/design-system/src/subjects/views/labels/labels-form.tsx b/apps/design-system/src/subjects/views/labels/labels-form.tsx index 2a19aefb75..bea68b06eb 100644 --- a/apps/design-system/src/subjects/views/labels/labels-form.tsx +++ b/apps/design-system/src/subjects/views/labels/labels-form.tsx @@ -1,5 +1,5 @@ import { LabelsListStore } from '@subjects/stores/labels-store.tsx' -import { useTranslationsStore } from '@utils/viewUtils.ts' +import { useTranslationStore } from '@utils/viewUtils.ts' import { LabelFormPage } from '@harnessio/ui/views' @@ -7,7 +7,7 @@ export const LabelsForm = () => { return ( {}} onFormCancel={() => {}} diff --git a/apps/design-system/src/subjects/views/profile-settings-keys/index.tsx b/apps/design-system/src/subjects/views/profile-settings-keys/index.tsx index b8cdf94d9a..3e40069fa8 100644 --- a/apps/design-system/src/subjects/views/profile-settings-keys/index.tsx +++ b/apps/design-system/src/subjects/views/profile-settings-keys/index.tsx @@ -1,6 +1,6 @@ import { useState } from 'react' -import { noop, useTranslationsStore } from '@utils/viewUtils' +import { noop, useTranslationStore } from '@utils/viewUtils' import { DeleteAlertDialog } from '@harnessio/ui/components' import { @@ -24,7 +24,7 @@ export const ProfileSettingsKeysView = () => { openSshKeyDialog={() => setIsKeysDialogOpen(true)} openAlertDeleteDialog={() => setIsDeleteDialogOpen(true)} error={null} - useTranslationStore={useTranslationsStore} + useTranslationStore={useTranslationStore} isLoadingTokenList={false} isLoadingKeysList={false} /> @@ -34,7 +34,7 @@ export const ProfileSettingsKeysView = () => { handleCreateToken={noop} error={null} isLoading={false} - useTranslationStore={useTranslationsStore} + useTranslationStore={useTranslationStore} useProfileSettingsStore={mockProfileSettingsStore} /> { onClose={() => setIsKeysDialogOpen(false)} handleCreateSshKey={noop} error={null} - useTranslationStore={useTranslationsStore} + useTranslationStore={useTranslationStore} /> { deleteFn={noop} error={null} isLoading={false} - useTranslationStore={useTranslationsStore} + useTranslationStore={useTranslationStore} /> ) diff --git a/apps/design-system/src/subjects/views/profile-settings/index.tsx b/apps/design-system/src/subjects/views/profile-settings/index.tsx index 3d73808af7..4c276b1cd2 100644 --- a/apps/design-system/src/subjects/views/profile-settings/index.tsx +++ b/apps/design-system/src/subjects/views/profile-settings/index.tsx @@ -1,6 +1,6 @@ import { useEffect, useState } from 'react' -import { noop, useTranslationsStore } from '@utils/viewUtils' +import { noop, useTranslationStore } from '@utils/viewUtils' import { SettingsAccountGeneralPage } from '@harnessio/ui/views' @@ -16,7 +16,7 @@ export const ProfileSettingsView = () => { return ( { isSuccess={false} gitIgnoreOptions={gitIgnoreOptions} licenseOptions={licenseOptions} - useTranslationStore={useTranslationsStore} + useTranslationStore={useTranslationStore} /> ) } diff --git a/apps/design-system/src/subjects/views/repo-import/index.tsx b/apps/design-system/src/subjects/views/repo-import/index.tsx index 66312b8999..0d33686ff5 100644 --- a/apps/design-system/src/subjects/views/repo-import/index.tsx +++ b/apps/design-system/src/subjects/views/repo-import/index.tsx @@ -1,4 +1,4 @@ -import { noop, useTranslationsStore } from '@utils/viewUtils' +import { noop, useTranslationStore } from '@utils/viewUtils' import { RepoImportPage } from '@harnessio/ui/views' @@ -10,7 +10,7 @@ export const ImportRepoView = () => { onFormCancel={noop} isLoading={false} apiErrorsValue={undefined} - useTranslationStore={useTranslationsStore} + useTranslationStore={useTranslationStore} /> ) diff --git a/apps/gitness/src/framework/context/AppContext.tsx b/apps/gitness/src/framework/context/AppContext.tsx index 4ae556e9c6..921ad76069 100644 --- a/apps/gitness/src/framework/context/AppContext.tsx +++ b/apps/gitness/src/framework/context/AppContext.tsx @@ -18,6 +18,7 @@ import usePageTitle from '../hooks/usePageTitle' interface AppContextType { spaces: TypesSpace[] + isSpacesLoading: boolean setSpaces: (value: TypesSpace[]) => void addSpaces: (newSpaces: TypesSpace[]) => void currentUser?: TypesUser @@ -34,6 +35,7 @@ interface AppContextType { const AppContext = createContext({ spaces: [], + isSpacesLoading: false, setSpaces: noop, addSpaces: noop, currentUser: undefined, @@ -48,6 +50,7 @@ const AppContext = createContext({ export const AppProvider: FC<{ children: ReactNode }> = ({ children }) => { usePageTitle() const [spaces, setSpaces] = useState([]) + const [isSpacesLoading, setSpacesIsLoading] = useState(false) const [currentUser, setCurrentUser] = useLocalStorage('currentUser', {}) const [isLoadingUser, setIsLoadingUser] = useState(false) const [isUpdatingUser, setIsUpdatingUser] = useState(false) @@ -91,6 +94,7 @@ export const AppProvider: FC<{ children: ReactNode }> = ({ children }) => { } useEffect(() => { + setSpacesIsLoading(true) Promise.allSettled([ membershipSpaces({ queryParams: { page: 1, limit: 100, sort: 'identifier', order: 'asc' } @@ -102,6 +106,7 @@ export const AppProvider: FC<{ children: ReactNode }> = ({ children }) => { if (membershipResult.status === 'fulfilled') { setSpaces(membershipResult.value.body.filter(item => item?.space).map(item => item.space as TypesSpace)) + setSpacesIsLoading(false) } }) .catch(() => { @@ -125,7 +130,8 @@ export const AppProvider: FC<{ children: ReactNode }> = ({ children }) => { updateUserProfile, isLoadingUser, isUpdatingUser, - updateUserError + updateUserError, + isSpacesLoading }} > {children} diff --git a/apps/gitness/src/pages-v2/profile-settings/profile-settings-layout.tsx b/apps/gitness/src/pages-v2/profile-settings/profile-settings-layout.tsx deleted file mode 100644 index c4fd99e08e..0000000000 --- a/apps/gitness/src/pages-v2/profile-settings/profile-settings-layout.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { Outlet, useLocation } from 'react-router-dom' - -import { ProfileSettingsTabNav } from '@harnessio/ui/views' - -import { useTranslationStore } from '../../i18n/stores/i18n-store' - -export const ProfileSettingsLayout = () => { - const location = useLocation() - const activeTab = location.pathname.split('/').pop() || 'general' - - return ( - <> -
- -
- - - ) -} diff --git a/apps/gitness/src/pages-v2/project/project-general-settings-container.tsx b/apps/gitness/src/pages-v2/project/project-general-settings-container.tsx index 2d893510c7..cd03558df2 100644 --- a/apps/gitness/src/pages-v2/project/project-general-settings-container.tsx +++ b/apps/gitness/src/pages-v2/project/project-general-settings-container.tsx @@ -18,21 +18,15 @@ import { useSpaceStore } from './stores/spaces-store' export const ProjectGeneralSettingsPageContainer = () => { const spaceURL = useGetSpaceURLParam() - const { spaces } = useAppContext() - const { setSpace } = useSpaceStore() + const { spaces, isSpacesLoading } = useAppContext() + const { setSpace, setIsLoading } = useSpaceStore() const space = spaces.find((space: TypesSpace) => space?.identifier === spaceURL) const [openDeleteDialog, setOpenDeleteDialog] = useState(false) const [updateError, setUpdateError] = useState(null) const [deleteError, setDeleteError] = useState<{ type: string; message: string } | null>(null) - useEffect(() => { - setSpace(space || null) - }, [space, setSpace]) - const updateDescription = useUpdateSpaceMutation( - { - space_ref: space?.path - }, + { space_ref: space?.path }, { onSuccess: ({ body: data }) => { if (space) { @@ -48,8 +42,8 @@ export const ProjectGeneralSettingsPageContainer = () => { } ) - const handleFormSubmit = (body: ProjectSettingsGeneralFields) => { - updateDescription.mutate({ space_ref: space?.path, body }) + const handleFormSubmit = (formdata: ProjectSettingsGeneralFields) => { + updateDescription.mutate({ space_ref: space?.path, body: { description: formdata?.description } }) } // delete API call here @@ -59,7 +53,7 @@ export const ProjectGeneralSettingsPageContainer = () => { onSuccess: ({ body: data }) => { if (data) { setDeleteError(null) - window.location.href = '/' + redirect('/') } }, onError: (error: DeleteSpaceErrorResponse) => { @@ -75,12 +69,20 @@ export const ProjectGeneralSettingsPageContainer = () => { { onSuccess: () => { setDeleteError(null) - window.location.href = '/' + redirect('/') } } ) } + useEffect(() => { + setIsLoading(isSpacesLoading) + }, [isSpacesLoading, setIsLoading]) + + useEffect(() => { + setSpace(space || null) + }, [space, setSpace]) + return ( <> (set => ({ space: null, - setSpace: space => set({ space }) + isLoading: false, + setSpace: space => set({ space }), + setIsLoading: isLoading => set({ isLoading }) })) diff --git a/apps/gitness/src/routes.tsx b/apps/gitness/src/routes.tsx index 5649d22cc5..423ec66465 100644 --- a/apps/gitness/src/routes.tsx +++ b/apps/gitness/src/routes.tsx @@ -22,7 +22,6 @@ import PipelineEditPage from './pages-v2/pipeline/pipeline-edit/pipeline-edit' import ProjectPipelineListPage from './pages-v2/pipeline/project-pipeline-list-page' import { SettingsProfileGeneralPage } from './pages-v2/profile-settings/profile-settings-general-container' import { SettingsProfileKeysPage } from './pages-v2/profile-settings/profile-settings-keys-container' -import { ProfileSettingsLayout } from './pages-v2/profile-settings/profile-settings-layout' import { ProfileSettingsThemePage } from './pages-v2/profile-settings/profile-settings-theme-page' import { ProjectLabelFormContainer } from './pages-v2/project/labels/project-label-form-container' import { ProjectLabelsList } from './pages-v2/project/labels/project-labels-list-container' diff --git a/package.json b/package.json index 67c0eb304a..c5eece098a 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,6 @@ "eslint-plugin-react": "^7.37.2", "eslint-plugin-react-hooks": "^5.0.0", "eslint-plugin-tailwindcss": "^3.17.5", - "eslint-plugin-unused-imports": "3.2.0", "husky": "^9.1.4", "lint-staged": "^15.2.9", "prettier": "^3.3.3", @@ -46,4 +45,4 @@ "rimraf": "^6.0.1", "typescript-eslint": "^8.14.0" } -} +} \ No newline at end of file diff --git a/packages/ui/locales/en/views.json b/packages/ui/locales/en/views.json index 12a77839ba..3bef9ac296 100644 --- a/packages/ui/locales/en/views.json +++ b/packages/ui/locales/en/views.json @@ -240,6 +240,22 @@ }, "projectSettings": { "newLabels": "Create label", + "general": { + "mainTitle": "General settings", + "projectNamePlaceholder": "Enter project name", + "projectNameLabel": "Project name", + "projectDescriptionPlaceholder": "Enter description (optional)", + "projectDescriptionLabel": "Description", + "formSubmitButton": { + "savingState": "Saving...", + "defaultState": "Save changes", + "savedState": "Saved" + }, + "formCancelButton": "Cancel", + "deleteProjectTitle": "Delete project", + "deleteProjectDescription": "This will permanently delete this project, and everything contained in it. All repositories in it will also be deleted.", + "deleteProjectButton": "Delete project" + }, "newMember": "New member", "member": "Member", "role": "Role", @@ -251,7 +267,12 @@ }, "removeMember": "Remove member", "inviteNewMember": "Invite new member", - "members": "Members" + "members": "Members", + "tabs": { + "general": "General", + "members": "Members", + "labels": "Labels" + } }, "landingPage": { "selectProject": "Select a project to get started", @@ -385,42 +406,6 @@ "generalTab": "General", "keysTab": "Keys and Tokens" }, - "projectSettings": { - "general": { - "mainTitle": "General settings", - "projectNamePlaceholder": "Enter project name", - "projectNameLabel": "Project name", - "projectDescriptionPlaceholder": "Enter description (optional)", - "projectDescriptionLabel": "Description", - "formSubmitButton": { - "savingState": "Saving...", - "defaultState": "Save changes", - "savedState": "Saved" - }, - "formCancelButton": "Cancel", - "deleteProjectTitle": "Delete project", - "deleteProjectDescription": "This will permanently delete this project, and everything contained in it. All repositories in it will also be deleted.", - "deleteProjectButton": "Delete project" - }, - "newLabels": "Create label", - "newMember": "New member", - "member": "Member", - "role": "Role", - "addMember": "Add member to this project", - "membersTable": { - "user": "User", - "email": "Email", - "role": "Role" - }, - "removeMember": "Remove member", - "inviteNewMember": "Invite new member", - "members": "Members", - "tabs": { - "general": "General", - "members": "Members", - "labels": "Labels" - } - }, "forms": { "selectMember": "Select member", "selectRole": "Select role", diff --git a/packages/ui/locales/es/views.json b/packages/ui/locales/es/views.json index afd434d0cb..b48b9934ce 100644 --- a/packages/ui/locales/es/views.json +++ b/packages/ui/locales/es/views.json @@ -240,6 +240,22 @@ }, "projectSettings": { "newLabels": "Create label", + "general": { + "mainTitle": "", + "projectNamePlaceholder": "", + "projectNameLabel": "", + "projectDescriptionPlaceholder": "", + "projectDescriptionLabel": "", + "formSubmitButton": { + "savingState": "", + "defaultState": "", + "savedState": "" + }, + "formCancelButton": "Cancel", + "deleteProjectTitle": "", + "deleteProjectDescription": "", + "deleteProjectButton": "" + }, "newMember": "", "member": "", "role": "", @@ -251,7 +267,12 @@ }, "removeMember": "Remove member", "inviteNewMember": "Invite new member", - "members": "" + "members": "", + "tabs": { + "general": "General", + "members": "Members", + "labels": "Labels" + } }, "landingPage": { "selectProject": "Select a project to get started", @@ -375,42 +396,6 @@ "generalTab": "General", "keysTab": "Keys and Tokens" }, - "projectSettings": { - "general": { - "mainTitle": "", - "projectNamePlaceholder": "", - "projectNameLabel": "", - "projectDescriptionPlaceholder": "", - "projectDescriptionLabel": "", - "formSubmitButton": { - "savingState": "", - "defaultState": "", - "savedState": "" - }, - "formCancelButton": "Cancel", - "deleteProjectTitle": "", - "deleteProjectDescription": "", - "deleteProjectButton": "" - }, - "newLabels": "Create label", - "newMember": "", - "member": "", - "role": "", - "addMember": "", - "membersTable": { - "user": "User", - "email": "Email", - "role": "Role" - }, - "removeMember": "Remove member", - "inviteNewMember": "Invite new member", - "members": "", - "tabs": { - "general": "General", - "members": "Members", - "labels": "Labels" - } - }, "forms": { "selectMember": "", "selectRole": "", diff --git a/packages/ui/locales/fr/views.json b/packages/ui/locales/fr/views.json index 299983f8fa..156e6fdd04 100644 --- a/packages/ui/locales/fr/views.json +++ b/packages/ui/locales/fr/views.json @@ -240,6 +240,22 @@ }, "projectSettings": { "newLabels": "Create label", + "general": { + "mainTitle": "", + "projectNamePlaceholder": "", + "projectNameLabel": "", + "projectDescriptionPlaceholder": "", + "projectDescriptionLabel": "", + "formSubmitButton": { + "savingState": "", + "defaultState": "", + "savedState": "" + }, + "formCancelButton": "Cancel", + "deleteProjectTitle": "", + "deleteProjectDescription": "", + "deleteProjectButton": "" + }, "newMember": "", "member": "", "role": "", @@ -251,7 +267,12 @@ }, "removeMember": "Remove member", "inviteNewMember": "Invite new member", - "members": "" + "members": "", + "tabs": { + "general": "General", + "members": "Members", + "labels": "Labels" + } }, "landingPage": { "selectProject": "Sélectionnez un projet pour commencer", @@ -381,42 +402,6 @@ "generalTab": "Général", "keysTab": "Clés et Jetons" }, - "projectSettings": { - "general": { - "mainTitle": "", - "projectNamePlaceholder": "", - "projectNameLabel": "", - "projectDescriptionPlaceholder": "", - "projectDescriptionLabel": "", - "formSubmitButton": { - "savingState": "", - "defaultState": "", - "savedState": "" - }, - "formCancelButton": "Cancel", - "deleteProjectTitle": "", - "deleteProjectDescription": "", - "deleteProjectButton": "" - }, - "newLabels": "Create label", - "newMember": "", - "member": "", - "role": "", - "addMember": "", - "membersTable": { - "user": "User", - "email": "Email", - "role": "Role" - }, - "removeMember": "Remove member", - "inviteNewMember": "Invite new member", - "members": "", - "tabs": { - "general": "General", - "members": "Members", - "labels": "Labels" - } - }, "forms": { "selectMember": "", "selectRole": "", diff --git a/packages/ui/src/components/form-primitives/control-group.tsx b/packages/ui/src/components/form-primitives/control-group.tsx index c2a9089570..e0369e5e39 100644 --- a/packages/ui/src/components/form-primitives/control-group.tsx +++ b/packages/ui/src/components/form-primitives/control-group.tsx @@ -16,7 +16,7 @@ interface ControlGroupProps extends HTMLAttributes { export function ControlGroup({ children, type, className, ...props }: ControlGroupProps) { return (
{ return ( - {children} {optional && (optional)} + {children} {optional && (optional)} ) } diff --git a/packages/ui/src/components/form-primitives/legend.tsx b/packages/ui/src/components/form-primitives/legend.tsx index 90837c5fd0..c3b9fd34be 100644 --- a/packages/ui/src/components/form-primitives/legend.tsx +++ b/packages/ui/src/components/form-primitives/legend.tsx @@ -24,7 +24,7 @@ interface LegendProps { export function Legend({ title, description, className, children }: PropsWithChildren) { return (
-
{title}
+
{title}
{description &&

{description}

} diff --git a/packages/ui/src/components/input.tsx b/packages/ui/src/components/input.tsx index 4821a319a4..0e046542a9 100644 --- a/packages/ui/src/components/input.tsx +++ b/packages/ui/src/components/input.tsx @@ -14,7 +14,7 @@ const inputVariants = cva( variants: { variant: { default: - 'placeholder:text-foreground-4 flex w-full rounded border text-sm shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:rounded focus-visible:outline-none', + 'flex w-full rounded border text-sm shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-foreground-4 focus-visible:rounded focus-visible:outline-none', extended: 'grow border-none focus-visible:outline-none' }, size: { @@ -158,7 +158,7 @@ const Input = forwardRef( return inputIconName ? ( - + {baseInputComp} ) : ( diff --git a/packages/ui/src/components/tabs.tsx b/packages/ui/src/components/tabs.tsx index 662293f037..e25761c347 100644 --- a/packages/ui/src/components/tabs.tsx +++ b/packages/ui/src/components/tabs.tsx @@ -4,14 +4,14 @@ import * as TabsPrimitive from '@radix-ui/react-tabs' import { cn } from '@utils/cn' import { cva, type VariantProps } from 'class-variance-authority' -const tabsListVariants = cva('text-foreground-4 inline-flex items-center', { +const tabsListVariants = cva('inline-flex items-center text-foreground-4', { variants: { variant: { - default: 'bg-muted h-9 justify-center rounded-lg p-1', + default: 'h-9 justify-center rounded-lg bg-muted p-1', underline: 'h-11 justify-center gap-4', - navigation: 'border-borders-5 h-[44px] w-full justify-start gap-6 border-b px-6', + navigation: 'h-[44px] w-full justify-start gap-6 border-b border-borders-5 px-5', tabnav: - 'before:bg-borders-1 relative flex w-full before:absolute before:bottom-0 before:left-0 before:h-px before:w-full' + 'relative flex w-full before:absolute before:bottom-0 before:left-0 before:h-px before:w-full before:bg-borders-1' }, fontSize: { xs: 'text-12', @@ -25,17 +25,17 @@ const tabsListVariants = cva('text-foreground-4 inline-flex items-center', { }) const tabsTriggerVariants = cva( - 'data-[state=active]:text-foreground-1 group relative inline-flex items-center justify-center whitespace-nowrap px-3 py-1 font-medium transition-all focus-visible:duration-0 disabled:pointer-events-none disabled:opacity-50', + 'group relative inline-flex items-center justify-center whitespace-nowrap px-3 py-1 font-medium transition-all focus-visible:duration-0 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:text-foreground-1', { variants: { variant: { - default: 'data-[state=active]:bg-background rounded-md data-[state=active]:shadow', + default: 'rounded-md data-[state=active]:bg-background data-[state=active]:shadow', underline: - 'data-[state=active]:border-primary m-0 h-11 border-b-2 border-solid border-b-transparent px-0 font-normal', + 'm-0 h-11 border-b-2 border-solid border-b-transparent px-0 font-normal data-[state=active]:border-primary', navigation: - 'text-foreground-2 hover:text-foreground-1 data-[state=active]:border-borders-9 m-0 -mb-px h-[44px] border-b border-solid border-b-transparent px-0 font-normal duration-150 ease-in-out', + 'm-0 -mb-px h-[44px] border-b border-solid border-b-transparent px-0 font-normal text-foreground-2 duration-150 ease-in-out hover:text-foreground-1 data-[state=active]:border-borders-9', tabnav: - 'text-foreground-2 hover:text-foreground-1 data-[state=active]:border-borders-1 data-[state=active]:bg-background-1 data-[state=active]:text-foreground-1 h-[36px] rounded-t-md border-x border-t border-transparent px-3.5 font-normal' + 'h-[36px] rounded-t-md border-x border-t border-transparent px-3.5 font-normal text-foreground-2 hover:text-foreground-1 data-[state=active]:border-borders-1 data-[state=active]:bg-background-1 data-[state=active]:text-foreground-1' } }, defaultVariants: { @@ -45,7 +45,7 @@ const tabsTriggerVariants = cva( ) const tabsContentVariants = cva( - 'ring-offset-background focus-visible:ring-ring focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2', + 'ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2', { variants: { variant: { diff --git a/packages/ui/src/views/layouts/SandboxLayout.tsx b/packages/ui/src/views/layouts/SandboxLayout.tsx index 5f6c2dbcee..4b3321c114 100644 --- a/packages/ui/src/views/layouts/SandboxLayout.tsx +++ b/packages/ui/src/views/layouts/SandboxLayout.tsx @@ -59,7 +59,7 @@ function Main({ children, fullWidth, className }: { children: ReactNode; fullWid } return ( -
+
{children}
) diff --git a/packages/ui/src/views/project/project-general/project-general-page.tsx b/packages/ui/src/views/project/project-general/project-general-page.tsx index 433cdfa599..694e2444da 100644 --- a/packages/ui/src/views/project/project-general/project-general-page.tsx +++ b/packages/ui/src/views/project/project-general/project-general-page.tsx @@ -13,6 +13,7 @@ import { Legend, Message, MessageTheme, + SkeletonForm, Textarea } from '@/components' import { ISpaceStore, SandboxLayout, TranslationStore } from '@/views' @@ -51,7 +52,7 @@ export const ProjectSettingsGeneralPage = ({ }: ProjectSettingsGeneralPageProps) => { // Project Settings form handling const { t } = useTranslationStore() - const { space: spaceData } = useSpaceStore() + const { space: spaceData, isLoading } = useSpaceStore() const { register, handleSubmit, @@ -62,7 +63,7 @@ export const ProjectSettingsGeneralPage = ({ resolver: zodResolver(projectSettingsSchema), mode: 'onSubmit', defaultValues: { - identifier: spaceData?.identifier, //project name + identifier: spaceData?.identifier ?? '', //project name description: spaceData?.description } }) @@ -74,6 +75,8 @@ export const ProjectSettingsGeneralPage = ({ onFormSubmit(formData) } + const handleReset = () => reset() + useEffect(() => { if (isUpdateSuccess) { setSubmitted(true) @@ -108,72 +111,86 @@ export const ProjectSettingsGeneralPage = ({ return ( - -

{t('views:projectSettings.general.mainTitle')}

- - -
- {/* PROJECT NAME */} - - - - - {/* IDENTIFIER/DESCRIPTION */} - -