From 4dafbc83b23bb0fcb0b650fdb4ff6c2d6e552329 Mon Sep 17 00:00:00 2001 From: Adhitya Mamallan Date: Thu, 21 Nov 2024 18:51:59 +0530 Subject: [PATCH 01/10] Add query and inputType --- src/route-handlers/list-workflows/list-workflows.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/route-handlers/list-workflows/list-workflows.ts b/src/route-handlers/list-workflows/list-workflows.ts index 6bc76e604..379033584 100644 --- a/src/route-handlers/list-workflows/list-workflows.ts +++ b/src/route-handlers/list-workflows/list-workflows.ts @@ -36,6 +36,13 @@ export async function listWorkflows( ); } + if (queryParams.inputType === 'query' && !queryParams.query) { + return NextResponse.json({ + workflows: [], + nextPage: '', + } satisfies ListWorkflowsResponse); + } + try { const res = await ctx.grpcClusterMethods.listWorkflows({ domain: decodedParams.domain, From 96059f579e3e7fc4ddaa1b5fb390c63b2fa74fac Mon Sep 17 00:00:00 2001 From: Adhitya Mamallan Date: Thu, 21 Nov 2024 14:47:37 +0000 Subject: [PATCH 02/10] Clean up types --- src/route-handlers/list-workflows/list-workflows.ts | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/route-handlers/list-workflows/list-workflows.ts b/src/route-handlers/list-workflows/list-workflows.ts index 379033584..6bc76e604 100644 --- a/src/route-handlers/list-workflows/list-workflows.ts +++ b/src/route-handlers/list-workflows/list-workflows.ts @@ -36,13 +36,6 @@ export async function listWorkflows( ); } - if (queryParams.inputType === 'query' && !queryParams.query) { - return NextResponse.json({ - workflows: [], - nextPage: '', - } satisfies ListWorkflowsResponse); - } - try { const res = await ctx.grpcClusterMethods.listWorkflows({ domain: decodedParams.domain, From 46f0df0f0857d7bf200a002ac33625f2f34e091a Mon Sep 17 00:00:00 2001 From: Adhitya Mamallan Date: Thu, 21 Nov 2024 20:32:44 +0530 Subject: [PATCH 03/10] Add segmented control --- .../domain-workflows-header.test.tsx | 102 ++++++++++++++++++ .../domain-workflows-header.styles.ts | 60 +++++++++++ .../domain-workflows-header.tsx | 85 +++++++++++++++ .../domain-workflows-query-input.test.tsx | 54 ++++++++++ .../domain-workflows-query-input.styles.ts | 28 +++++ .../domain-workflows-query-input.tsx | 42 ++++++++ .../domain-workflows-query-input.types.ts | 4 + .../domain-workflows/domain-workflows.tsx | 4 +- 8 files changed, 377 insertions(+), 2 deletions(-) create mode 100644 src/views/domain-workflows/domain-workflows-header/__tests__/domain-workflows-header.test.tsx create mode 100644 src/views/domain-workflows/domain-workflows-header/domain-workflows-header.styles.ts create mode 100644 src/views/domain-workflows/domain-workflows-header/domain-workflows-header.tsx create mode 100644 src/views/domain-workflows/domain-workflows-query-input/__tests__/domain-workflows-query-input.test.tsx create mode 100644 src/views/domain-workflows/domain-workflows-query-input/domain-workflows-query-input.styles.ts create mode 100644 src/views/domain-workflows/domain-workflows-query-input/domain-workflows-query-input.tsx create mode 100644 src/views/domain-workflows/domain-workflows-query-input/domain-workflows-query-input.types.ts diff --git a/src/views/domain-workflows/domain-workflows-header/__tests__/domain-workflows-header.test.tsx b/src/views/domain-workflows/domain-workflows-header/__tests__/domain-workflows-header.test.tsx new file mode 100644 index 000000000..e0a283b66 --- /dev/null +++ b/src/views/domain-workflows/domain-workflows-header/__tests__/domain-workflows-header.test.tsx @@ -0,0 +1,102 @@ +import { render, screen, userEvent } from '@/test-utils/rtl'; + +import * as usePageFiltersModule from '@/components/page-filters/hooks/use-page-filters'; +import { type Props as PageFiltersToggleProps } from '@/components/page-filters/page-filters-toggle/page-filters-toggle.types'; + +import { mockDomainWorkflowsQueryParamsValues } from '../../__fixtures__/domain-workflows-query-params'; +import DomainWorkflowsHeader from '../domain-workflows-header'; + +jest.mock( + '@/components/page-filters/page-filters-search/page-filters-search', + () => jest.fn(() =>
Filter search
) +); + +jest.mock( + '@/components/page-filters/page-filters-fields/page-filters-fields', + () => jest.fn(() =>
Filter fields
) +); + +jest.mock( + '@/components/page-filters/page-filters-toggle/page-filters-toggle', + () => + jest.fn((props: PageFiltersToggleProps) => ( + + )) +); + +jest.mock( + '../../domain-workflows-query-input/domain-workflows-query-input', + () => jest.fn(() =>
Query input
) +); + +jest.mock( + '../../domain-workflows-query-label/domain-workflows-query-label', + () => jest.fn(() =>
Query label
) +); + +const mockSetQueryParams = jest.fn(); +const mockResetAllFilters = jest.fn(); +const mockActiveFiltersCount = 2; +jest.mock('@/components/page-filters/hooks/use-page-filters', () => + jest.fn(() => ({ + resetAllFilters: mockResetAllFilters, + activeFiltersCount: mockActiveFiltersCount, + queryParams: mockDomainWorkflowsQueryParamsValues, + setQueryParams: mockSetQueryParams, + })) +); + +describe(DomainWorkflowsHeader.name, () => { + it('renders segmented control', async () => { + render(); + + expect(await screen.findByText('Search')).toBeInTheDocument(); + expect(await screen.findByText('Query label')).toBeInTheDocument(); + }); + + it('renders page search and filters button when input type is search', async () => { + render(); + + expect(await screen.findByText('Filter search')).toBeInTheDocument(); + expect(await screen.findByText('Filter toggle')).toBeInTheDocument(); + }); + + it('renders page filters when filter toggle is clicked', async () => { + const user = userEvent.setup(); + render(); + + const filterToggle = await screen.findByText('Filter toggle'); + await user.click(filterToggle); + + expect(await screen.findByText('Filter fields')).toBeInTheDocument(); + }); + + it('renders query input when input type is query', async () => { + jest.spyOn(usePageFiltersModule, 'default').mockReturnValueOnce({ + resetAllFilters: mockResetAllFilters, + activeFiltersCount: mockActiveFiltersCount, + queryParams: { + ...mockDomainWorkflowsQueryParamsValues, + inputType: 'query', + }, + setQueryParams: mockSetQueryParams, + }); + + render(); + + expect(await screen.findByText('Query input')).toBeInTheDocument(); + }); + + it('toggles input type when segmented control is used', async () => { + const user = userEvent.setup(); + render(); + + const queryButton = await screen.findByText('Search'); + await user.click(queryButton); + + expect(mockSetQueryParams).toHaveBeenCalledWith( + { inputType: 'search' }, + { pageRerender: true, replace: false } + ); + }); +}); diff --git a/src/views/domain-workflows/domain-workflows-header/domain-workflows-header.styles.ts b/src/views/domain-workflows/domain-workflows-header/domain-workflows-header.styles.ts new file mode 100644 index 000000000..f651cce16 --- /dev/null +++ b/src/views/domain-workflows/domain-workflows-header/domain-workflows-header.styles.ts @@ -0,0 +1,60 @@ +import { styled as createStyled, type Theme } from 'baseui'; +import { + type SegmentOverrides, + type SegmentedControlOverrides, +} from 'baseui/segmented-control'; +import { type StyleObject } from 'styletron-react'; + +export const styled = { + HeaderContainer: createStyled('div', ({ $theme }: { $theme: Theme }) => ({ + marginTop: $theme.sizing.scale950, + marginBottom: $theme.sizing.scale900, + })), + InputContainer: createStyled('div', ({ $theme }: { $theme: Theme }) => ({ + display: 'flex', + flexDirection: 'column', + gap: $theme.sizing.scale500, + marginBottom: $theme.sizing.scale500, + [$theme.mediaQuery.medium]: { + flexDirection: 'row', + }, + })), +}; + +export const overrides = { + inputToggle: { + Root: { + style: ({ $theme }: { $theme: Theme }): StyleObject => ({ + flex: '1 0 auto', + height: $theme.sizing.scale950, + padding: $theme.sizing.scale0, + borderRadius: $theme.borders.radius300, + width: '100%', + ...$theme.typography.ParagraphSmall, + [$theme.mediaQuery.medium]: { + width: 'auto', + }, + }), + }, + SegmentList: { + style: ({ $theme }: { $theme: Theme }): StyleObject => ({ + height: $theme.sizing.scale950, + ...$theme.typography.ParagraphSmall, + }), + }, + Active: { + style: ({ $theme }: { $theme: Theme }): StyleObject => ({ + height: $theme.sizing.scale900, + top: 0, + }), + }, + } satisfies SegmentedControlOverrides, + inputToggleSegment: { + Segment: { + style: ({ $theme }: { $theme: Theme }): StyleObject => ({ + height: $theme.sizing.scale900, + whiteSpace: 'nowrap', + }), + }, + } satisfies SegmentOverrides, +}; diff --git a/src/views/domain-workflows/domain-workflows-header/domain-workflows-header.tsx b/src/views/domain-workflows/domain-workflows-header/domain-workflows-header.tsx new file mode 100644 index 000000000..847fe3b29 --- /dev/null +++ b/src/views/domain-workflows/domain-workflows-header/domain-workflows-header.tsx @@ -0,0 +1,85 @@ +'use client'; +import { useState } from 'react'; + +import { Segment, SegmentedControl } from 'baseui/segmented-control'; + +import usePageFilters from '@/components/page-filters/hooks/use-page-filters'; +import PageFiltersFields from '@/components/page-filters/page-filters-fields/page-filters-fields'; +import PageFiltersSearch from '@/components/page-filters/page-filters-search/page-filters-search'; +import PageFiltersToggle from '@/components/page-filters/page-filters-toggle/page-filters-toggle'; +import domainPageQueryParamsConfig from '@/views/domain-page/config/domain-page-query-params.config'; + +import domainWorkflowsFiltersConfig from '../config/domain-workflows-filters.config'; +import DomainWorkflowsQueryInput from '../domain-workflows-query-input/domain-workflows-query-input'; + +import { overrides, styled } from './domain-workflows-header.styles'; + +export default function DomainWorkflowsHeader() { + const [areFiltersShown, setAreFiltersShown] = useState(false); + + const { resetAllFilters, activeFiltersCount, queryParams, setQueryParams } = + usePageFilters({ + pageFiltersConfig: domainWorkflowsFiltersConfig, + pageQueryParamsConfig: domainPageQueryParamsConfig, + }); + + return ( + + + { + setQueryParams( + { + inputType: activeKey === 'query' ? 'query' : 'search', + }, + { replace: false, pageRerender: true } + ); + }} + overrides={overrides.inputToggle} + > + + + + {queryParams.inputType === 'query' ? ( + setQueryParams({ query: v })} + /> + ) : ( + <> + + { + setAreFiltersShown((value) => !value); + }} + activeFiltersCount={activeFiltersCount} + /> + + )} + + {queryParams.inputType === 'search' && areFiltersShown && ( + + )} + + ); +} diff --git a/src/views/domain-workflows/domain-workflows-query-input/__tests__/domain-workflows-query-input.test.tsx b/src/views/domain-workflows/domain-workflows-query-input/__tests__/domain-workflows-query-input.test.tsx new file mode 100644 index 000000000..616444fb9 --- /dev/null +++ b/src/views/domain-workflows/domain-workflows-query-input/__tests__/domain-workflows-query-input.test.tsx @@ -0,0 +1,54 @@ +import React from 'react'; + +import { render, screen, userEvent, waitFor } from '@/test-utils/rtl'; + +import DomainWorkflowsQueryInput from '../domain-workflows-query-input'; + +describe(DomainWorkflowsQueryInput.name, () => { + it('renders as expected', async () => { + setup({}); + + expect(await screen.findByRole('textbox')).toBeInTheDocument(); + expect(await screen.findByText('Run Query')).toBeInTheDocument(); + }); + + it('renders as expected when loaded with a start value', async () => { + setup({ startValue: 'test_query' }); + + const textbox = await screen.findByRole('textbox'); + await waitFor(() => expect(textbox).toHaveValue('test_query')); + expect(await screen.findByText('Run Query')).toBeInTheDocument(); + }); + + it('calls setValue when the Run Query button is clicked', async () => { + const { mockSetValue, user } = setup({}); + + const textbox = await screen.findByRole('textbox'); + await user.type(textbox, 'mock_query'); + await user.click(await screen.findByText('Run Query')); + + expect(mockSetValue).toHaveBeenCalledWith('mock_query'); + }); + + it('calls setValue with undefined when the input is cleared', async () => { + const { mockSetValue, user } = setup({ startValue: 'test_query' }); + + const textbox = await screen.findByRole('textbox'); + await user.clear(textbox); + + expect(mockSetValue).toHaveBeenCalledWith(undefined); + }); +}); + +function setup({ startValue }: { startValue?: string }) { + const mockSetValue = jest.fn(); + const user = userEvent.setup(); + render( + + ); + + return { mockSetValue, user }; +} diff --git a/src/views/domain-workflows/domain-workflows-query-input/domain-workflows-query-input.styles.ts b/src/views/domain-workflows/domain-workflows-query-input/domain-workflows-query-input.styles.ts new file mode 100644 index 000000000..40aebdcef --- /dev/null +++ b/src/views/domain-workflows/domain-workflows-query-input/domain-workflows-query-input.styles.ts @@ -0,0 +1,28 @@ +import { type Theme } from 'baseui'; +import { type ButtonOverrides } from 'baseui/button'; +import { type InputOverrides } from 'baseui/input'; +import { type StyleObject } from 'styletron-react'; + +export const overrides = { + input: { + Root: { + style: ({ $theme }: { $theme: Theme }): StyleObject => ({ + height: $theme.sizing.scale950, + }), + }, + Input: { + style: ({ $theme }: { $theme: Theme }): StyleObject => ({ + ...$theme.typography.MonoParagraphXSmall, + }), + }, + } satisfies InputOverrides, + runButton: { + Root: { + style: ({ $theme }: { $theme: Theme }): StyleObject => ({ + whiteSpace: 'nowrap', + height: $theme.sizing.scale950, + ...$theme.typography.LabelSmall, + }), + }, + } satisfies ButtonOverrides, +}; diff --git a/src/views/domain-workflows/domain-workflows-query-input/domain-workflows-query-input.tsx b/src/views/domain-workflows/domain-workflows-query-input/domain-workflows-query-input.tsx new file mode 100644 index 000000000..80eee9327 --- /dev/null +++ b/src/views/domain-workflows/domain-workflows-query-input/domain-workflows-query-input.tsx @@ -0,0 +1,42 @@ +import React, { useEffect, useState } from 'react'; + +import { Button } from 'baseui/button'; +import { Input } from 'baseui/input'; +import { MdPlayArrow, MdCode } from 'react-icons/md'; + +import { overrides } from './domain-workflows-query-input.styles'; +import { type Props } from './domain-workflows-query-input.types'; + +export default function DomainWorkflowsQueryInput({ value, setValue }: Props) { + const [queryText, setQueryText] = useState(''); + + useEffect(() => { + value && setQueryText(value); + }, [value]); + + return ( + <> + { + setQueryText(event.target.value); + if (!event.target.value) { + setValue(undefined); + } + }} + startEnhancer={() => } + overrides={overrides.input} + placeholder="Write a custom query for workflows" + clearable + clearOnEscape + /> + + + ); +} diff --git a/src/views/domain-workflows/domain-workflows-query-input/domain-workflows-query-input.types.ts b/src/views/domain-workflows/domain-workflows-query-input/domain-workflows-query-input.types.ts new file mode 100644 index 000000000..99094d144 --- /dev/null +++ b/src/views/domain-workflows/domain-workflows-query-input/domain-workflows-query-input.types.ts @@ -0,0 +1,4 @@ +export type Props = { + value: string; + setValue: (v: string | undefined) => void; +}; diff --git a/src/views/domain-workflows/domain-workflows.tsx b/src/views/domain-workflows/domain-workflows.tsx index 01c176bd3..dbf5c5e7d 100644 --- a/src/views/domain-workflows/domain-workflows.tsx +++ b/src/views/domain-workflows/domain-workflows.tsx @@ -2,13 +2,13 @@ import React from 'react'; import { type DomainPageTabContentProps } from '@/views/domain-page/domain-page-content/domain-page-content.types'; -import DomainWorkflowsFilters from './domain-workflows-filters/domain-workflows-filters'; +import DomainWorkflowsHeader from './domain-workflows-header/domain-workflows-header'; import DomainWorkflowsTable from './domain-workflows-table/domain-workflows-table'; export default function DomainWorkflows(props: DomainPageTabContentProps) { return ( <> - + ); From 019afcf9566daa430d4cb81356d8cb87935201e6 Mon Sep 17 00:00:00 2001 From: Adhitya Mamallan Date: Thu, 21 Nov 2024 22:26:47 +0530 Subject: [PATCH 04/10] update test --- .../__tests__/domain-workflows-header.test.tsx | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/views/domain-workflows/domain-workflows-header/__tests__/domain-workflows-header.test.tsx b/src/views/domain-workflows/domain-workflows-header/__tests__/domain-workflows-header.test.tsx index e0a283b66..8f6c1a8b7 100644 --- a/src/views/domain-workflows/domain-workflows-header/__tests__/domain-workflows-header.test.tsx +++ b/src/views/domain-workflows/domain-workflows-header/__tests__/domain-workflows-header.test.tsx @@ -29,11 +29,6 @@ jest.mock( () => jest.fn(() =>
Query input
) ); -jest.mock( - '../../domain-workflows-query-label/domain-workflows-query-label', - () => jest.fn(() =>
Query label
) -); - const mockSetQueryParams = jest.fn(); const mockResetAllFilters = jest.fn(); const mockActiveFiltersCount = 2; From e5bfa6cedf965a7793c5a83d7d0d53d892723714 Mon Sep 17 00:00:00 2001 From: Adhitya Mamallan Date: Thu, 21 Nov 2024 22:33:08 +0530 Subject: [PATCH 05/10] Remove filters --- .../domain-workflows-filters.styles.ts | 8 -------- .../domain-workflows-filters.tsx | 20 ------------------- 2 files changed, 28 deletions(-) delete mode 100644 src/views/domain-workflows/domain-workflows-filters/domain-workflows-filters.styles.ts delete mode 100644 src/views/domain-workflows/domain-workflows-filters/domain-workflows-filters.tsx diff --git a/src/views/domain-workflows/domain-workflows-filters/domain-workflows-filters.styles.ts b/src/views/domain-workflows/domain-workflows-filters/domain-workflows-filters.styles.ts deleted file mode 100644 index 0959f0ed7..000000000 --- a/src/views/domain-workflows/domain-workflows-filters/domain-workflows-filters.styles.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { styled as createStyled, type Theme } from 'baseui'; - -export const styled = { - FiltersContainer: createStyled('div', ({ $theme }: { $theme: Theme }) => ({ - marginTop: $theme.sizing.scale950, - marginBottom: $theme.sizing.scale900, - })), -}; diff --git a/src/views/domain-workflows/domain-workflows-filters/domain-workflows-filters.tsx b/src/views/domain-workflows/domain-workflows-filters/domain-workflows-filters.tsx deleted file mode 100644 index 4eb2151bb..000000000 --- a/src/views/domain-workflows/domain-workflows-filters/domain-workflows-filters.tsx +++ /dev/null @@ -1,20 +0,0 @@ -'use client'; -import PageFilters from '@/components/page-filters/page-filters'; -import domainPageQueryParamsConfig from '@/views/domain-page/config/domain-page-query-params.config'; - -import domainWorkflowsFiltersConfig from '../config/domain-workflows-filters.config'; - -import { styled } from './domain-workflows-filters.styles'; - -export default function DomainWorkflowsFilters() { - return ( - - - - ); -} From 04aa681ee530a6d599fa773942c8f672a67d36cc Mon Sep 17 00:00:00 2001 From: Adhitya Mamallan Date: Thu, 21 Nov 2024 22:37:09 +0530 Subject: [PATCH 06/10] Fix test --- .../__tests__/domain-workflows-header.test.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/domain-workflows/domain-workflows-header/__tests__/domain-workflows-header.test.tsx b/src/views/domain-workflows/domain-workflows-header/__tests__/domain-workflows-header.test.tsx index 8f6c1a8b7..c6d490c42 100644 --- a/src/views/domain-workflows/domain-workflows-header/__tests__/domain-workflows-header.test.tsx +++ b/src/views/domain-workflows/domain-workflows-header/__tests__/domain-workflows-header.test.tsx @@ -79,7 +79,7 @@ describe(DomainWorkflowsHeader.name, () => { render(); - expect(await screen.findByText('Query input')).toBeInTheDocument(); + expect(await screen.findByText('Query')).toBeInTheDocument(); }); it('toggles input type when segmented control is used', async () => { From 8aa3a197bf1263a70b191868e70743186e919ba1 Mon Sep 17 00:00:00 2001 From: Adhitya Mamallan Date: Thu, 21 Nov 2024 22:40:38 +0530 Subject: [PATCH 07/10] Fix test for real this time --- .../__tests__/domain-workflows-header.test.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/domain-workflows/domain-workflows-header/__tests__/domain-workflows-header.test.tsx b/src/views/domain-workflows/domain-workflows-header/__tests__/domain-workflows-header.test.tsx index c6d490c42..fc587dcde 100644 --- a/src/views/domain-workflows/domain-workflows-header/__tests__/domain-workflows-header.test.tsx +++ b/src/views/domain-workflows/domain-workflows-header/__tests__/domain-workflows-header.test.tsx @@ -46,7 +46,7 @@ describe(DomainWorkflowsHeader.name, () => { render(); expect(await screen.findByText('Search')).toBeInTheDocument(); - expect(await screen.findByText('Query label')).toBeInTheDocument(); + expect(await screen.findByText('Query')).toBeInTheDocument(); }); it('renders page search and filters button when input type is search', async () => { From 68150b1341d6d279b2393ed1e25c64c00702026f Mon Sep 17 00:00:00 2001 From: Adhitya Mamallan Date: Fri, 22 Nov 2024 15:59:09 +0530 Subject: [PATCH 08/10] changes --- .../domain-workflows-query-input.tsx | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/views/domain-workflows/domain-workflows-query-input/domain-workflows-query-input.tsx b/src/views/domain-workflows/domain-workflows-query-input/domain-workflows-query-input.tsx index 80eee9327..858af9e13 100644 --- a/src/views/domain-workflows/domain-workflows-query-input/domain-workflows-query-input.tsx +++ b/src/views/domain-workflows/domain-workflows-query-input/domain-workflows-query-input.tsx @@ -11,7 +11,7 @@ export default function DomainWorkflowsQueryInput({ value, setValue }: Props) { const [queryText, setQueryText] = useState(''); useEffect(() => { - value && setQueryText(value); + setQueryText(value); }, [value]); return ( @@ -20,18 +20,15 @@ export default function DomainWorkflowsQueryInput({ value, setValue }: Props) { value={queryText} onChange={(event) => { setQueryText(event.target.value); - if (!event.target.value) { - setValue(undefined); - } }} startEnhancer={() => } overrides={overrides.input} - placeholder="Write a custom query for workflows" + placeholder="Filter workflows using a custom query" clearable clearOnEscape /> ); From 3920715d8ab59ae0a6a702fdea4bf3c5dc961795 Mon Sep 17 00:00:00 2001 From: Adhitya Mamallan Date: Fri, 22 Nov 2024 17:31:40 +0530 Subject: [PATCH 10/10] Re-add docker-env --- .docker_env | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.docker_env b/.docker_env index 9b5fed3fa..4449376fe 100644 --- a/.docker_env +++ b/.docker_env @@ -1,10 +1,10 @@ NODE_ENV=development -NEXT_PUBLIC_CADENCE_CLUSTERS_NAMES=staging_dca1a,staging_phx2a -CADENCE_GRPC_PEERS=host.docker.internal:5435,host.docker.internal:5435 -NEXT_PUBLIC_CADENCE_GRPC_SERVICES_NAMES=cadence-frontend-staging,cadence-frontend-staging +NEXT_PUBLIC_CADENCE_CLUSTERS_NAMES=default +CADENCE_GRPC_PEERS="127.0.0.1:7833" +NEXT_PUBLIC_CADENCE_GRPC_SERVICES_NAMES=cadence-frontend CADENCE_WEB_PORT=8088 CADENCE_EXTERNAL_SCRIPTS="" -CADENCE_ADMIN_SECURITY_TOKEN="CadenceTeamONLY" +CADENCE_ADMIN_SECURITY_TOKEN="" ENABLE_AUTH=false AUTH_TYPE="" AUTH_ADMIN_JWT_PRIVATE_KEY=""