Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
89 commits
Select commit Hold shift + click to select a range
37a218c
#RI-6265 - update home page
rsergeenko Nov 5, 2024
6030dcb
#RI-6265 - fix tests
rsergeenko Nov 5, 2024
91623b3
remove tests
mariasergeenko Nov 6, 2024
410c3a6
add port
mariasergeenko Nov 6, 2024
91587c2
Merge branch 'main' into e2e/feature/RI-6265_update-list-of-databases
mariasergeenko Nov 6, 2024
b09be46
update delete
mariasergeenko Nov 6, 2024
189f7cd
update
mariasergeenko Nov 6, 2024
f535aec
Merge remote-tracking branch 'origin/main' into e2e/feature/RI-6265_u…
mariasergeenko Nov 7, 2024
aa0cf5b
change delete method
mariasergeenko Nov 7, 2024
2c4565a
change search db test
mariasergeenko Nov 7, 2024
e1ec2b0
Merge remote-tracking branch 'origin/main' into fe/feature/RI-6265_up…
mariasergeenko Nov 7, 2024
cd8b63c
Merge branch 'fe/feature/RI-6265_update-list-of-databases' into e2e/f…
mariasergeenko Nov 7, 2024
022ab95
Merge pull request #4070 from RedisInsight/e2e/feature/RI-6265_update…
mariasergeenko Nov 7, 2024
e56b6fa
#RI-6268 - change add database forms
rsergeenko Nov 11, 2024
07e6445
Merge pull request #4078 from RedisInsight/fe/feature/RI-6268_update-…
vlad-dargel Nov 12, 2024
63d8225
Merge branch 'main' into fe/feature/RI-6265_update-list-of-databases
vlad-dargel Nov 12, 2024
bce69e9
Merge branch 'main' into fe/feature/RI-6265_update-list-of-databases
vlad-dargel Nov 12, 2024
2ea29b1
#RI-6309 - 6313 - defect fixing
rsergeenko Nov 12, 2024
cbe857e
Merge pull request #4080 from RedisInsight/bugfix/feature/RI-6268
rsergeenko Nov 12, 2024
6ded30c
#RI-6313 - add table borders
rsergeenko Nov 12, 2024
1fa4727
#RI-6313 - change refresh instances on success import, refresh import…
rsergeenko Nov 13, 2024
359401c
Merge branch 'main' into fe/feature/RI-6265_update-list-of-databases
vlad-dargel Nov 13, 2024
03e2dd3
Merge branch 'main' into fe/feature/RI-6265_update-list-of-databases
vlad-dargel Nov 13, 2024
21ccdb8
Merge branch 'main' into fe/feature/RI-6265_update-list-of-databases
vlad-dargel Nov 13, 2024
c284e0e
#RI-6320 - add feature flag for cloud db in the list of dbs
rsergeenko Nov 13, 2024
b51401f
Merge branch 'main' into fe/feature/RI-6265_update-list-of-databases
vlad-dargel Nov 14, 2024
46dcc77
#RI-6320 - add feature flag for cloud db in the list of dbs
rsergeenko Nov 14, 2024
bbc294c
#RI-6320 - rename feature flag, update percentage
rsergeenko Nov 14, 2024
69224f6
Merge pull request #4054 from RedisInsight/fe/feature/RI-6265_update-…
rsergeenko Nov 14, 2024
da5e4f9
#RI-6320 - rename feature flag
rsergeenko Nov 14, 2024
96e18c2
Merge pull request #4087 from RedisInsight/fe/feature/RI-6320-add-fea…
rsergeenko Nov 14, 2024
8a4a1db
Merge pull request #4086 from RedisInsight/be/feature/RI-6320-add-fea…
rsergeenko Nov 14, 2024
e7a9a83
e2e/feature/RI-6268_enchance-form-to-add-database-connections
vlad-dargel Nov 14, 2024
4f1a522
Merge branch 'main' into feature/RI-6265_update-list-of-databases
vlad-dargel Nov 14, 2024
1c94dfb
Merge branch 'feature/RI-6265_update-list-of-databases' into e2e/feat…
vlad-dargel Nov 14, 2024
302660e
updates for failed e2e
vlad-dargel Nov 15, 2024
5e354f2
#RI-6293 - update RDI form
rsergeenko Nov 15, 2024
e54722c
fix for ts error basePage
vlad-dargel Nov 15, 2024
2cdbbf4
#RI-6331 - add telemetry event
rsergeenko Nov 15, 2024
d875420
Merge pull request #4095 from RedisInsight/fe/bugfix/RI-6331-add-tele…
rsergeenko Nov 15, 2024
dc8eb7b
#RI-6293 - remove unused styles
rsergeenko Nov 15, 2024
e8d9c3c
Merge pull request #4094 from RedisInsight/fe/feature/RI-6293-update-…
rsergeenko Nov 15, 2024
111d225
fix for appimage
vlad-dargel Nov 15, 2024
d17a45f
fixes by pr comments
vlad-dargel Nov 18, 2024
b77534d
Merge pull request #4098 from RedisInsight/e2e/feature/RI-6268_enhanc…
vlad-dargel Nov 18, 2024
0c7ba56
update rdi tests
mariasergeenko Nov 19, 2024
40655a1
#RI-6342 - fix auto-discovery flow
rsergeenko Nov 19, 2024
097988c
#RI-6342 - remove unused refs
rsergeenko Nov 19, 2024
cbacef2
Merge pull request #4115 from RedisInsight/fe/bugfix/list-of-subscrip…
rsergeenko Nov 19, 2024
fe8e74b
Merge pull request #4113 from RedisInsight/e2e/feature/RI-6265_update…
mariasergeenko Nov 19, 2024
3d7eb2a
#RI-6344 - fix button size
rsergeenko Nov 20, 2024
6fc015e
Merge branch 'main' into feature/RI-6265_update-list-of-databases
rsergeenko Dec 4, 2024
09aa6db
#RI-6338 - update add database form
rsergeenko Dec 5, 2024
815e596
#RI-6338 - fix tests, remove unused component
rsergeenko Dec 5, 2024
b8ad2e2
#RI-6338 - change placeholder, fix onClose on link
rsergeenko Dec 6, 2024
f22039b
Merge pull request #4171 from RedisInsight/fe/feature/RI-6338
mariasergeenko Dec 6, 2024
a65c152
fix for build
mariasergeenko Dec 6, 2024
313b702
Merge pull request #4173 from RedisInsight/e2e/feature/RI-6265_update…
mariasergeenko Dec 6, 2024
a800f1a
Merge remote-tracking branch 'origin/main' into feature/RI-6265_updat…
mariasergeenko Dec 6, 2024
25024f0
fix for some locators
mariasergeenko Dec 6, 2024
31b7ea8
#RI-6377 - fix host
rsergeenko Dec 6, 2024
8c2682e
add test
mariasergeenko Dec 6, 2024
f487340
#RI-6380 - fix closing state
rsergeenko Dec 9, 2024
a19c75f
Merge pull request #4177 from RedisInsight/fe/bugfix/RI-6265_update-l…
rsergeenko Dec 9, 2024
9cc6356
Merge remote-tracking branch 'origin/main' into e2e/feature/RI-6265_u…
mariasergeenko Dec 9, 2024
db052ac
Merge branch 'feature/RI-6265_update-list-of-databases' into e2e/feat…
mariasergeenko Dec 9, 2024
2684ddb
remove only
mariasergeenko Dec 9, 2024
074a17e
fix for tests#1
mariasergeenko Dec 9, 2024
af489f0
fix for tests#2
mariasergeenko Dec 10, 2024
2aa8ff0
#RI-5114 - add createdAt for db
rsergeenko Dec 10, 2024
c559da2
fix for tests#2
mariasergeenko Dec 10, 2024
8b6481c
Merge remote-tracking branch 'origin/main' into feature/RI-6265_updat…
mariasergeenko Dec 10, 2024
980a686
Merge branch 'main' into e2e/feature/RI-6265_update-list-of-databases
mariasergeenko Dec 10, 2024
71f2951
Merge remote-tracking branch 'origin/main' into feature/RI-6265_updat…
mariasergeenko Dec 10, 2024
d56a728
Merge branch 'feature/RI-6265_update-list-of-databases' into e2e/feat…
vlad-dargel Dec 10, 2024
027be05
#RI-5114 - add statuses for free db
rsergeenko Dec 10, 2024
6ac5361
Merge pull request #4190 from RedisInsight/e2e/feature/RI-6265_update…
mariasergeenko Dec 10, 2024
5fe87f6
#RI-5114 - fix tests
rsergeenko Dec 10, 2024
108a904
#RI-6389 - change form rendering to not force initial props
rsergeenko Dec 10, 2024
e37cc77
Merge pull request #4189 from RedisInsight/be/feature/RI-5114-inform-…
rsergeenko Dec 10, 2024
926bc3c
Merge pull request #4191 from RedisInsight/fe/feature/RI-5114-inform-…
rsergeenko Dec 10, 2024
c1d4b06
Merge pull request #4193 from RedisInsight/fe/bugfix/RI-6389
mariasergeenko Dec 10, 2024
e0e551f
#RI-6417 - fix values for the form
rsergeenko Dec 10, 2024
2b8ba9b
Merge pull request #4195 from RedisInsight/fe/bugfix/RI-6417
mariasergeenko Dec 11, 2024
442164d
#RI-6443 - Change button colors and add a default value
egor-zalenski Dec 12, 2024
bde88e0
Merge pull request #4201 from RedisInsight/fe/feature/RI-6443_Change_…
vlad-dargel Dec 12, 2024
400336c
e2e/feature/RI-6443_change_default_value
vlad-dargel Dec 12, 2024
a66d9d6
fix
vlad-dargel Dec 12, 2024
8676153
Merge pull request #4205 from RedisInsight/e2e/feature/RI-6443_change…
vlad-dargel Dec 12, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion redisinsight/api/config/features-config.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"version": 2.56,
"version": 2.57,
"features": {
"redisDataIntegration": {
"flag": true,
Expand Down Expand Up @@ -111,6 +111,10 @@
"data": {
"strategy": "ioredis"
}
},
"enhancedCloudUI": {
"flag": true,
"perc": [[0, 50]]
}
}
}
20 changes: 20 additions & 0 deletions redisinsight/api/migration/1733740794737-database-createdAt.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { MigrationInterface, QueryRunner } from "typeorm";

export class DatabaseCreatedAt1733740794737 implements MigrationInterface {
name = 'DatabaseCreatedAt1733740794737'

public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`CREATE TABLE "temporary_database_instance" ("id" varchar PRIMARY KEY NOT NULL, "host" varchar NOT NULL, "port" integer NOT NULL, "name" varchar NOT NULL, "username" varchar, "password" varchar, "tls" boolean, "verifyServerCert" boolean, "lastConnection" datetime, "caCertId" varchar, "clientCertId" varchar, "connectionType" varchar NOT NULL DEFAULT ('STANDALONE'), "nodes" varchar DEFAULT ('[]'), "nameFromProvider" varchar, "sentinelMasterName" varchar, "sentinelMasterUsername" varchar, "sentinelMasterPassword" varchar, "provider" varchar DEFAULT ('UNKNOWN'), "modules" varchar NOT NULL DEFAULT ('[]'), "db" integer, "encryption" varchar, "tlsServername" varchar, "new" boolean, "ssh" boolean, "timeout" integer, "compressor" varchar NOT NULL DEFAULT ('NONE'), "version" varchar, "createdAt" datetime DEFAULT (datetime('now')), CONSTRAINT "FK_d1bc747b5938e22b4b708d8e9a5" FOREIGN KEY ("caCertId") REFERENCES "ca_certificate" ("id") ON DELETE SET NULL ON UPDATE NO ACTION, CONSTRAINT "FK_3b9b625266c00feb2d66a9f36e4" FOREIGN KEY ("clientCertId") REFERENCES "client_certificate" ("id") ON DELETE SET NULL ON UPDATE NO ACTION)`);
await queryRunner.query(`INSERT INTO "temporary_database_instance"("id", "host", "port", "name", "username", "password", "tls", "verifyServerCert", "lastConnection", "caCertId", "clientCertId", "connectionType", "nodes", "nameFromProvider", "sentinelMasterName", "sentinelMasterUsername", "sentinelMasterPassword", "provider", "modules", "db", "encryption", "tlsServername", "new", "ssh", "timeout", "compressor", "version") SELECT "id", "host", "port", "name", "username", "password", "tls", "verifyServerCert", "lastConnection", "caCertId", "clientCertId", "connectionType", "nodes", "nameFromProvider", "sentinelMasterName", "sentinelMasterUsername", "sentinelMasterPassword", "provider", "modules", "db", "encryption", "tlsServername", "new", "ssh", "timeout", "compressor", "version" FROM "database_instance"`);
await queryRunner.query(`DROP TABLE "database_instance"`);
await queryRunner.query(`ALTER TABLE "temporary_database_instance" RENAME TO "database_instance"`);
}

public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "database_instance" RENAME TO "temporary_database_instance"`);
await queryRunner.query(`CREATE TABLE "database_instance" ("id" varchar PRIMARY KEY NOT NULL, "host" varchar NOT NULL, "port" integer NOT NULL, "name" varchar NOT NULL, "username" varchar, "password" varchar, "tls" boolean, "verifyServerCert" boolean, "lastConnection" datetime, "caCertId" varchar, "clientCertId" varchar, "connectionType" varchar NOT NULL DEFAULT ('STANDALONE'), "nodes" varchar DEFAULT ('[]'), "nameFromProvider" varchar, "sentinelMasterName" varchar, "sentinelMasterUsername" varchar, "sentinelMasterPassword" varchar, "provider" varchar DEFAULT ('UNKNOWN'), "modules" varchar NOT NULL DEFAULT ('[]'), "db" integer, "encryption" varchar, "tlsServername" varchar, "new" boolean, "ssh" boolean, "timeout" integer, "compressor" varchar NOT NULL DEFAULT ('NONE'), "version" varchar, CONSTRAINT "FK_d1bc747b5938e22b4b708d8e9a5" FOREIGN KEY ("caCertId") REFERENCES "ca_certificate" ("id") ON DELETE SET NULL ON UPDATE NO ACTION, CONSTRAINT "FK_3b9b625266c00feb2d66a9f36e4" FOREIGN KEY ("clientCertId") REFERENCES "client_certificate" ("id") ON DELETE SET NULL ON UPDATE NO ACTION)`);
await queryRunner.query(`INSERT INTO "database_instance"("id", "host", "port", "name", "username", "password", "tls", "verifyServerCert", "lastConnection", "caCertId", "clientCertId", "connectionType", "nodes", "nameFromProvider", "sentinelMasterName", "sentinelMasterUsername", "sentinelMasterPassword", "provider", "modules", "db", "encryption", "tlsServername", "new", "ssh", "timeout", "compressor", "version") SELECT "id", "host", "port", "name", "username", "password", "tls", "verifyServerCert", "lastConnection", "caCertId", "clientCertId", "connectionType", "nodes", "nameFromProvider", "sentinelMasterName", "sentinelMasterUsername", "sentinelMasterPassword", "provider", "modules", "db", "encryption", "tlsServername", "new", "ssh", "timeout", "compressor", "version" FROM "temporary_database_instance"`);
await queryRunner.query(`DROP TABLE "temporary_database_instance"`);
}

}
2 changes: 2 additions & 0 deletions redisinsight/api/migration/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ import { Rdi1716370509836 } from './1716370509836-rdi';
import { AiHistory1718260230164 } from './1718260230164-ai-history';
import { CloudSession1729085495444 } from './1729085495444-cloud-session';
import { CommandExecution1726058563737 } from './1726058563737-command-execution';
import { DatabaseCreatedAt1733740794737 } from './1733740794737-database-createdAt';

export default [
initialMigration1614164490968,
Expand Down Expand Up @@ -92,4 +93,5 @@ export default [
AiHistory1718260230164,
CloudSession1729085495444,
CommandExecution1726058563737,
DatabaseCreatedAt1733740794737,
];
Original file line number Diff line number Diff line change
Expand Up @@ -530,6 +530,8 @@ describe('DatabaseService', () => {
mockSessionMetadata,
omit({ ...mockDatabase, username: 'new-name', timeout: 40_000 }, ['sshOptions.id']),
);
expect(databaseRepository.get)
.toHaveBeenCalledWith(mockSessionMetadata, mockDatabase.id, false, ['id', 'sshOptions.id', 'createdAt']);
});

it('should create new database with merged ssh options', async () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -294,7 +294,7 @@ export class DatabaseService {
public async clone(sessionMetadata: SessionMetadata, id: string, dto: UpdateDatabaseDto): Promise<Database> {
this.logger.log('Clone existing database');
const database = await this.merge(
await this.get(sessionMetadata, id, false, ['id', 'sshOptions.id']),
await this.get(sessionMetadata, id, false, ['id', 'sshOptions.id', 'createdAt']),
dto,
);
if (DatabaseService.isConnectionAffected(dto)) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import {
Column, Entity, ManyToOne, OneToOne, PrimaryGeneratedColumn,
Column, CreateDateColumn, Entity, ManyToOne, OneToOne, PrimaryGeneratedColumn,
} from 'typeorm';
import { CaCertificateEntity } from 'src/modules/certificate/entities/ca-certificate.entity';
import { ClientCertificateEntity } from 'src/modules/certificate/entities/client-certificate.entity';
Expand Down Expand Up @@ -172,6 +172,12 @@ export class DatabaseEntity {
@Column({ type: 'datetime', nullable: true })
lastConnection: Date;

@CreateDateColumn({
nullable: true,
})
@Expose()
createdAt: Date;

@Expose()
@Column({
nullable: true,
Expand Down Expand Up @@ -231,4 +237,4 @@ export class DatabaseEntity {
@Expose()
@Column({ nullable: true })
version: string;
}
}
7 changes: 7 additions & 0 deletions redisinsight/api/src/modules/database/models/database.ts
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,13 @@ export class Database {
@Expose()
lastConnection: Date;

@ApiProperty({
description: 'Date of creation',
type: Date,
})
@Expose()
createdAt?: Date;

@ApiPropertyOptional({
description: 'Redis OSS Sentinel master group.',
type: SentinelMaster,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ export class LocalDatabaseRepository extends DatabaseRepository {
.select([
'd.id', 'd.name', 'd.host', 'd.port', 'd.db', 'd.new', 'd.timeout',
'd.connectionType', 'd.modules', 'd.lastConnection', 'd.provider', 'd.version', 'cd',
'd.createdAt',
])
.getMany();

Expand Down Expand Up @@ -262,4 +263,4 @@ export class LocalDatabaseRepository extends DatabaseRepository {
}
}
}
}
}
1 change: 1 addition & 0 deletions redisinsight/api/src/modules/feature/constants/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ export enum KnownFeatures {
DatabaseChat = 'databaseChat',
Rdi = 'redisDataIntegration',
HashFieldExpiration = 'hashFieldExpiration',
EnhancedCloudUI = 'enhancedCloudUI',
}

export interface IFeatureFlag {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,8 @@ export const knownFeatures: Record<KnownFeatures, IFeatureFlag> = {
name: KnownFeatures.Rdi,
storage: FeatureStorage.Database,
},
[KnownFeatures.EnhancedCloudUI]: {
name: KnownFeatures.EnhancedCloudUI,
storage: FeatureStorage.Database,
},
};
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,10 @@ export class FeatureFlagProvider {
this.featuresConfigService,
this.settingsService,
));
this.strategies.set(KnownFeatures.EnhancedCloudUI, new WithDataFlagStrategy(
this.featuresConfigService,
this.settingsService,
));
}

getStrategy(name: string): FeatureFlagStrategy {
Expand Down
1 change: 1 addition & 0 deletions redisinsight/api/test/api/database/GET-databases.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ const responseSchema = Joi.array().items(Joi.object().keys({
compressor: Joi.string().valid('NONE', 'LZ4', 'GZIP', 'ZSTD', 'SNAPPY').allow(null),
connectionType: Joi.string().valid('STANDALONE', 'SENTINEL', 'CLUSTER', 'NOT CONNECTED').required(),
lastConnection: Joi.string().isoDate().allow(null).required(),
createdAt: Joi.string().isoDate(),
version: Joi.string().allow(null).required(),
modules: Joi.array().items(Joi.object().keys({
name: Joi.string().required(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@ describe(`PATCH /databases/:id`, () => {
after: async () => {
newDatabase = await localDb.getInstanceById(constants.TEST_INSTANCE_ID_3);
expect(newDatabase).to.contain({
..._.omit(oldDatabase, ['modules', 'provider', 'lastConnection', 'new', 'timeout', 'compressor', 'version']),
..._.omit(oldDatabase, ['modules', 'provider', 'lastConnection', 'new', 'timeout', 'compressor', 'version', 'createdAt']),
host: constants.TEST_REDIS_HOST,
port: constants.TEST_REDIS_PORT,
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ describe(`POST /databases/clone/:id`, () => {
after: async () => {
newDatabase = await localDb.getInstanceByName('some name');
expect(newDatabase).to.contain({
..._.omit(oldDatabase, ['id', 'modules', 'name', 'provider', 'lastConnection', 'new', 'timeout', 'compressor', 'version']),
..._.omit(oldDatabase, ['id', 'modules', 'name', 'provider', 'lastConnection', 'new', 'timeout', 'compressor', 'version', 'createdAt']),
host: constants.TEST_REDIS_HOST,
port: constants.TEST_REDIS_PORT,
});
Expand Down
1 change: 1 addition & 0 deletions redisinsight/api/test/api/database/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ export const databaseSchema = Joi.object().keys({
compressor: Joi.string().valid('NONE', 'LZ4', 'GZIP', 'ZSTD', 'SNAPPY').required(),
nameFromProvider: Joi.string().allow(null),
lastConnection: Joi.string().isoDate().allow(null),
createdAt: Joi.string().isoDate(),
provider: Joi.string().valid(...providers),
new: Joi.boolean().allow(null),
tls: Joi.boolean().allow(null),
Expand Down
22 changes: 22 additions & 0 deletions redisinsight/ui/src/assets/img/alarm.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions redisinsight/ui/src/assets/img/icons/star.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 5 additions & 0 deletions redisinsight/ui/src/assets/img/oauth/cloud_centered.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
23 changes: 23 additions & 0 deletions redisinsight/ui/src/components/form-dialog/FormDialog.spec.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import React from 'react'
import { render, screen } from 'uiSrc/utils/test-utils'

import FormDialog from './FormDialog'

describe('FormDialog', () => {
it('should render', () => {
render(
<FormDialog
isOpen
onClose={jest.fn()}
header={(<div data-testid="header" />)}
footer={(<div data-testid="footer" />)}
>
<div data-testid="body" />
</FormDialog>
)

expect(screen.getByTestId('header')).toBeInTheDocument()
expect(screen.getByTestId('footer')).toBeInTheDocument()
expect(screen.getByTestId('body')).toBeInTheDocument()
})
})
40 changes: 40 additions & 0 deletions redisinsight/ui/src/components/form-dialog/FormDialog.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import React from 'react'
import { EuiModal, EuiModalBody, EuiModalFooter, EuiModalHeader, EuiModalHeaderTitle } from '@elastic/eui'
import { Nullable } from 'uiSrc/utils'

import styles from './styles.module.scss'

export interface Props {
isOpen: boolean
onClose: () => void
header: Nullable<React.ReactNode>
footer?: Nullable<React.ReactNode>
children: Nullable<React.ReactNode>
}

const FormDialog = (props: Props) => {
const { isOpen, onClose, header, footer, children } = props

if (!isOpen) return null

return (
<EuiModal
className={styles.modal}
onClose={onClose}
>
<EuiModalHeader>
<EuiModalHeaderTitle id="formModalHeader">
{header}
</EuiModalHeaderTitle>
</EuiModalHeader>
<EuiModalBody>
{children}
</EuiModalBody>
<EuiModalFooter>
{footer}
</EuiModalFooter>
</EuiModal>
)
}

export default FormDialog
3 changes: 3 additions & 0 deletions redisinsight/ui/src/components/form-dialog/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import FormDialog from './FormDialog'

export default FormDialog
Loading
Loading