mirror of
https://github.com/usebruno/bruno.git
synced 2026-07-07 14:08:38 +00:00
* style: enhance button layout and input styles across multiple components for improved UI consistency * style: update RequestsNotLoaded component with new warning styles and enhance theme color definitions for status indicators * refactor: update theme usage across components for consistency - Changed color references from theme.brand to theme.primary.text in various StyledWrapper components. - Added hover effects to enhance UI interactivity in CollectionSettings and FolderSettings. - Removed unnecessary margin and padding adjustments in several components for cleaner layout. - Improved accessibility by ensuring aria attributes are correctly set in MenuDropdown. - Standardized styling for method indicators in RequestPane components. These changes aim to create a more cohesive look and feel across the application while adhering to the updated theme guidelines. * refactor: clean up method selector styling in NewRequest component * chore: temp playwright test fixes * refactor: update modal sizes across various components for consistency - Changed modal size from "sm" to "md" in RenameWorkspace, CreateApiSpec, CloneCollection, DeleteCollectionItem, and RenameCollection components. - Improved styling in HttpMethodSelector by adding padding for better layout. - Updated theme color references in multiple theme files to use a new palette structure for consistency and maintainability. * refactor: enhance styling and theme integration in TimelineItem components - Updated HttpMethodSelector to clarify padding calculation in comments. - Integrated theme colors for OAuth2 indicator and timestamp in TimelineItem for better visual consistency. - Adjusted Method component to use uppercase styling for method display. - Modified RelativeTime component to apply muted text color for improved readability. - Updated INFO color in dark and light themes for better contrast and accessibility. * refactor: remove duplicate import statements in theme files - Cleaned up import statements in vscode.js and light-pastel.js by removing redundant lines for improved code clarity and maintainability. * refactor: improve styling and theme integration in various components - Added accent color and cursor style for checkbox inputs in Modal's StyledWrapper. - Updated border-radius values in HttpMethodSelector and NewRequest StyledWrapper components to use theme variables for consistency. - Introduced a new textbox class in NewRequest StyledWrapper for better styling control. - Changed modal size from "sm" to "md" in CreateEnvironment for improved layout. --------- Co-authored-by: Bijin A B <bijin@usebruno.com>
96 lines
2.8 KiB
JavaScript
96 lines
2.8 KiB
JavaScript
import React, { useEffect, useRef } from 'react';
|
|
import Portal from 'components/Portal/index';
|
|
import Modal from 'components/Modal/index';
|
|
import toast from 'react-hot-toast';
|
|
import { useFormik } from 'formik';
|
|
import * as Yup from 'yup';
|
|
import { useDispatch, useSelector } from 'react-redux';
|
|
import { renameWorkspaceAction } from 'providers/ReduxStore/slices/workspaces/actions';
|
|
|
|
const RenameWorkspace = ({ onClose, workspace }) => {
|
|
const dispatch = useDispatch();
|
|
const { workspaces } = useSelector((state) => state.workspaces);
|
|
const inputRef = useRef();
|
|
|
|
const formik = useFormik({
|
|
enableReinitialize: true,
|
|
initialValues: {
|
|
name: workspace.name
|
|
},
|
|
validationSchema: Yup.object({
|
|
name: Yup.string()
|
|
.min(1, 'must be at least 1 character')
|
|
.max(255, 'must be 255 characters or less')
|
|
.required('name is required')
|
|
.test('unique-name', 'A workspace with this name already exists', function (value) {
|
|
if (!value) return true;
|
|
return !workspaces.some((w) =>
|
|
w.uid !== workspace.uid && w.name.toLowerCase() === value.toLowerCase()
|
|
);
|
|
})
|
|
}),
|
|
onSubmit: (values) => {
|
|
if (values.name === workspace.name) {
|
|
onClose();
|
|
return;
|
|
}
|
|
dispatch(renameWorkspaceAction(workspace.uid, values.name))
|
|
.then(() => {
|
|
onClose();
|
|
})
|
|
.catch((error) => {
|
|
toast.error(error?.message || 'An error occurred while renaming the workspace');
|
|
});
|
|
}
|
|
});
|
|
|
|
useEffect(() => {
|
|
if (inputRef && inputRef.current) {
|
|
inputRef.current.focus();
|
|
inputRef.current.select();
|
|
}
|
|
}, [inputRef]);
|
|
|
|
const onSubmit = () => {
|
|
formik.handleSubmit();
|
|
};
|
|
|
|
return (
|
|
<Portal>
|
|
<Modal
|
|
size="md"
|
|
title="Rename Workspace"
|
|
confirmText="Rename"
|
|
handleConfirm={onSubmit}
|
|
handleCancel={onClose}
|
|
>
|
|
<form className="bruno-form" onSubmit={(e) => e.preventDefault()}>
|
|
<div>
|
|
<label htmlFor="workspace-name" className="block font-semibold">
|
|
Workspace Name
|
|
</label>
|
|
<input
|
|
id="workspace-name"
|
|
type="text"
|
|
name="name"
|
|
ref={inputRef}
|
|
className="block textbox mt-2 w-full"
|
|
autoComplete="off"
|
|
autoCorrect="off"
|
|
autoCapitalize="off"
|
|
spellCheck="false"
|
|
onChange={formik.handleChange}
|
|
value={formik.values.name || ''}
|
|
/>
|
|
{formik.touched.name && formik.errors.name ? (
|
|
<div className="text-red-500">{formik.errors.name}</div>
|
|
) : null}
|
|
</div>
|
|
</form>
|
|
</Modal>
|
|
</Portal>
|
|
);
|
|
};
|
|
|
|
export default RenameWorkspace;
|