Merge branch 'master' into issue/3614
This commit is contained in:
commit
4ca1a7456b
12 changed files with 1303 additions and 1211 deletions
4
.github/workflows/frontend.yaml
vendored
4
.github/workflows/frontend.yaml
vendored
|
@ -25,11 +25,11 @@ jobs:
|
|||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
- uses: pnpm/action-setup@v2.4.0
|
||||
with:
|
||||
version: 7.4.0
|
||||
version: 8.6.12
|
||||
- name: Install node
|
||||
uses: actions/setup-node@v3.8.1
|
||||
with:
|
||||
node-version: "16.15.0"
|
||||
node-version: "18.17.1"
|
||||
cache: "pnpm"
|
||||
cache-dependency-path: "./kafka-ui-react-app/pnpm-lock.yaml"
|
||||
- name: Install Node dependencies
|
||||
|
|
|
@ -16,6 +16,8 @@ import java.util.stream.Stream;
|
|||
|
||||
public class BrokersConfigTab extends BasePage {
|
||||
|
||||
protected List<SelenideElement> editBtn = $$x("//button[@aria-label='editAction']");
|
||||
protected SelenideElement searchByKeyField = $x("//input[@placeholder='Search by Key or Value']");
|
||||
protected SelenideElement sourceInfoIcon = $x("//div[text()='Source']/..//div/div[@class]");
|
||||
protected SelenideElement sourceInfoTooltip = $x("//div[text()='Source']/..//div/div[@style]");
|
||||
protected ElementsCollection editBtns = $$x("//button[@aria-label='editAction']");
|
||||
|
|
|
@ -1 +1 @@
|
|||
v16.15.0
|
||||
v18.17.1
|
||||
|
|
|
@ -106,7 +106,7 @@
|
|||
"vite-plugin-ejs": "^1.6.4"
|
||||
},
|
||||
"engines": {
|
||||
"node": "v16.15.0",
|
||||
"pnpm": "^7.4.0"
|
||||
"node": "v18.17.1",
|
||||
"pnpm": "^8.6.12"
|
||||
}
|
||||
}
|
||||
|
|
2450
kafka-ui-react-app/pnpm-lock.yaml
generated
2450
kafka-ui-react-app/pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load diff
|
@ -34,14 +34,19 @@ const Configs: React.FC = () => {
|
|||
|
||||
const getData = () => {
|
||||
return data
|
||||
.filter(
|
||||
(item) =>
|
||||
item.name.toLocaleLowerCase().indexOf(keyword.toLocaleLowerCase()) >
|
||||
-1
|
||||
)
|
||||
.filter((item) => {
|
||||
const nameMatch = item.name
|
||||
.toLocaleLowerCase()
|
||||
.includes(keyword.toLocaleLowerCase());
|
||||
return nameMatch
|
||||
? true
|
||||
: item.value &&
|
||||
item.value
|
||||
.toLocaleLowerCase()
|
||||
.includes(keyword.toLocaleLowerCase()); // try to match the keyword on any of the item.value elements when nameMatch fails but item.value exists
|
||||
})
|
||||
.sort((a, b) => {
|
||||
if (a.source === b.source) return 0;
|
||||
|
||||
return a.source === ConfigSource.DYNAMIC_BROKER_CONFIG ? -1 : 1;
|
||||
});
|
||||
};
|
||||
|
@ -95,7 +100,7 @@ const Configs: React.FC = () => {
|
|||
<S.SearchWrapper>
|
||||
<Search
|
||||
onChange={setKeyword}
|
||||
placeholder="Search by Key"
|
||||
placeholder="Search by Key or Value"
|
||||
value={keyword}
|
||||
/>
|
||||
</S.SearchWrapper>
|
||||
|
|
|
@ -60,16 +60,16 @@ describe('New', () => {
|
|||
await userEvent.clear(screen.getByPlaceholderText('Topic Name'));
|
||||
await userEvent.tab();
|
||||
await expect(
|
||||
screen.getByText('name is a required field')
|
||||
screen.getByText('Topic Name is required')
|
||||
).toBeInTheDocument();
|
||||
await userEvent.type(
|
||||
screen.getByLabelText('Number of partitions *'),
|
||||
screen.getByLabelText('Number of Partitions *'),
|
||||
minValue
|
||||
);
|
||||
await userEvent.clear(screen.getByLabelText('Number of partitions *'));
|
||||
await userEvent.clear(screen.getByLabelText('Number of Partitions *'));
|
||||
await userEvent.tab();
|
||||
await expect(
|
||||
screen.getByText('Number of partitions is required and must be a number')
|
||||
screen.getByText('Number of Partitions is required and must be a number')
|
||||
).toBeInTheDocument();
|
||||
|
||||
expect(createTopicMock).not.toHaveBeenCalled();
|
||||
|
@ -89,7 +89,7 @@ describe('New', () => {
|
|||
renderComponent(clusterTopicNewPath(clusterName));
|
||||
await userEvent.type(screen.getByPlaceholderText('Topic Name'), topicName);
|
||||
await userEvent.type(
|
||||
screen.getByLabelText('Number of partitions *'),
|
||||
screen.getByLabelText('Number of Partitions *'),
|
||||
minValue
|
||||
);
|
||||
await userEvent.click(screen.getByText('Create topic'));
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import styled from 'styled-components';
|
||||
import Input from 'components/common/Input/Input';
|
||||
|
||||
export const Column = styled.div`
|
||||
display: flex;
|
||||
|
@ -16,6 +17,10 @@ export const CustomParamsHeading = styled.h4`
|
|||
color: ${({ theme }) => theme.heading.h4};
|
||||
`;
|
||||
|
||||
export const MessageSizeInput = styled(Input)`
|
||||
min-width: 195px;
|
||||
`;
|
||||
|
||||
export const Label = styled.div`
|
||||
display: flex;
|
||||
gap: 16px;
|
||||
|
|
|
@ -109,12 +109,12 @@ const TopicForm: React.FC<Props> = ({
|
|||
{!isEditing && (
|
||||
<div>
|
||||
<InputLabel htmlFor="topicFormNumberOfPartitions">
|
||||
Number of partitions *
|
||||
Number of Partitions *
|
||||
</InputLabel>
|
||||
<Input
|
||||
id="topicFormNumberOfPartitions"
|
||||
type="number"
|
||||
placeholder="Number of partitions"
|
||||
placeholder="Number of Partitions"
|
||||
min="1"
|
||||
name="partitions"
|
||||
positiveOnly
|
||||
|
@ -228,7 +228,7 @@ const TopicForm: React.FC<Props> = ({
|
|||
<InputLabel htmlFor="topicFormMaxMessageBytes">
|
||||
Maximum message size in bytes
|
||||
</InputLabel>
|
||||
<Input
|
||||
<S.MessageSizeInput
|
||||
id="topicFormMaxMessageBytes"
|
||||
type="number"
|
||||
placeholder="Maximum message size"
|
||||
|
|
|
@ -37,7 +37,7 @@ describe('TopicForm', () => {
|
|||
|
||||
expectByRoleAndNameToBeInDocument('textbox', 'Topic Name *');
|
||||
|
||||
expectByRoleAndNameToBeInDocument('spinbutton', 'Number of partitions *');
|
||||
expectByRoleAndNameToBeInDocument('spinbutton', 'Number of Partitions *');
|
||||
expectByRoleAndNameToBeInDocument('spinbutton', 'Replication Factor');
|
||||
|
||||
expectByRoleAndNameToBeInDocument('spinbutton', 'Min In Sync Replicas');
|
||||
|
|
|
@ -66,17 +66,17 @@ export const topicFormValidationSchema = yup.object().shape({
|
|||
name: yup
|
||||
.string()
|
||||
.max(249)
|
||||
.required()
|
||||
.required('Topic Name is required')
|
||||
.matches(
|
||||
TOPIC_NAME_VALIDATION_PATTERN,
|
||||
'Only alphanumeric, _, -, and . allowed'
|
||||
),
|
||||
partitions: yup
|
||||
.number()
|
||||
.min(1)
|
||||
.min(1, 'Number of Partitions must be greater than or equal to 1')
|
||||
.max(2147483647)
|
||||
.required()
|
||||
.typeError('Number of partitions is required and must be a number'),
|
||||
.typeError('Number of Partitions is required and must be a number'),
|
||||
replicationFactor: yup.string(),
|
||||
minInSyncReplicas: yup.string(),
|
||||
cleanupPolicy: yup.string().required(),
|
||||
|
|
4
pom.xml
4
pom.xml
|
@ -49,8 +49,8 @@
|
|||
<testcontainers.version>1.17.5</testcontainers.version>
|
||||
|
||||
<!-- Frontend dependency versions -->
|
||||
<node.version>v16.15.0</node.version>
|
||||
<pnpm.version>v7.4.0</pnpm.version>
|
||||
<node.version>v18.17.1</node.version>
|
||||
<pnpm.version>v8.6.12</pnpm.version>
|
||||
|
||||
<!-- Plugin versions -->
|
||||
<fabric8-maven-plugin.version>0.42.1</fabric8-maven-plugin.version>
|
||||
|
|
Loading…
Add table
Reference in a new issue