Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: Update JS Editor Run designs #36998

Merged
merged 12 commits into from
Oct 23, 2024
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
/* eslint-disable no-console */
import React from "react";
import { importRemixIcon, importSvg } from "./loadables";

const AddMoreIcon = importRemixIcon(
async () => import("remixicon-react/AddCircleLineIcon"),
);
Expand Down Expand Up @@ -1063,6 +1064,10 @@ const MaximizeV3Icon = importSvg(
async () => import("../__assets__/icons/ads/maximize-v3-icon.svg"),
);

const ExternalLinkIcon = importSvg(
async () => import("../__assets__/icons/ads/external-link-line.svg"),
);

import PlayIconPNG from "../__assets__/icons/control/play-icon.png";

function PlayIconPNGWrapper() {
Expand Down Expand Up @@ -1211,6 +1216,7 @@ const ICON_LOOKUP = {
"link-2": Link2,
"link-unlink": LinkUnlinkIcon,
"links-line": LinksLineIcon,
"external-link-line": ExternalLinkIcon,
ankitakinger marked this conversation as resolved.
Show resolved Hide resolved
"lock-2-line": Lock2LineIcon,
"lock-password-line": LockPasswordLineIcon,
"lock-unlock-line": LockUnlockLineIcon,
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 2 additions & 0 deletions app/client/src/IDE/Components/ToolbarSettingsPopover.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ interface Props {
title: string;
children: React.ReactNode;
dataTestId?: string;
disabled?: boolean;
}

const Variables = css`
Expand Down Expand Up @@ -43,6 +44,7 @@ export const ToolbarSettingsPopover = (props: Props) => {
<PopoverTrigger>
<ToggleButton
data-testId={props.dataTestId}
disabled={props.disabled}
icon="settings-2-line"
isSelected={isOpen}
onClick={handleButtonClick}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ const PluginActionForm = () => {
const { plugin } = usePluginActionContext();

return (
<Flex flex="1" overflow="hidden" p="spaces-2" w="100%">
<Flex flex="1" overflow="hidden" p="spaces-4" w="100%">
{plugin.uiComponent === UIComponentTypes.ApiEditorForm && (
<APIEditorForm />
)}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ const PluginActionSettingsPopover = (props: SettingsProps) => {
{props.docsLink && (
<LearnMoreLink
className="t--action-settings-documentation-link"
endIcon="share-box-line"
endIcon="external-link-line"
kind="secondary"
onClick={handleLearnMoreClick}
>
Expand Down
12 changes: 11 additions & 1 deletion app/client/src/assets/icons/menu/js-function.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import React from "react";
import { IDEToolbar } from "IDE";
import React, { useState } from "react";
import { IDEToolbar, ToolbarSettingsPopover } from "IDE";
import { JSFunctionRun } from "./components/JSFunctionRun";
import type { JSActionDropdownOption } from "./types";
import type { SaveActionNameParams } from "PluginActionEditor";
Expand All @@ -8,6 +8,7 @@ import type { JSAction, JSCollection } from "entities/JSCollection";
import type { DropdownOnSelect } from "@appsmith/ads-old";
import { useFeatureFlag } from "utils/hooks/useFeatureFlag";
import { FEATURE_FLAG } from "ee/entities/FeatureFlag";
import { createMessage, JS_EDITOR_SETTINGS } from "ee/constants/messages";
import { JSHeader } from "./JSHeader";
import { JSFunctionSettings } from "./components/JSFunctionSettings";
import type { JSFunctionSettingsProps } from "./components/old/JSFunctionSettings";
Expand Down Expand Up @@ -48,6 +49,8 @@ export const JSEditorToolbar = (props: Props) => {
FEATURE_FLAG.release_actions_redesign_enabled,
);

const [isOpen, setIsOpen] = useState(false);

// If the action redesign is not enabled, render the JSHeader component
if (!isActionRedesignEnabled) {
return <JSHeader {...props} />;
Expand All @@ -71,11 +74,18 @@ export const JSEditorToolbar = (props: Props) => {
/>
</div>
{props.showSettings ? (
<JSFunctionSettings
actions={props.jsActions}
disabled={!props.changePermitted}
onUpdateSettings={props.onUpdateSettings}
/>
<ToolbarSettingsPopover
dataTestId={"t--js-editor-SETTINGS"}
handleOpenChange={setIsOpen}
isOpen={isOpen}
title={createMessage(JS_EDITOR_SETTINGS.TITLE)}
>
<JSFunctionSettings
actions={props.jsActions}
disabled={!props.changePermitted}
onUpdateSettings={props.onUpdateSettings}
/>
</ToolbarSettingsPopover>
) : null}

{props.hideContextMenuOnEditor ? null : props.contextMenu}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import React, { useCallback } from "react";
import { MenuItem } from "@appsmith/ads";
import type { JSActionDropdownOption } from "../types";
import * as Styled from "./styles";

export const JSFunctionItem = ({
onSelect,
option,
}: {
option: JSActionDropdownOption;
onSelect: (option: JSActionDropdownOption) => void;
}) => {
const onFunctionSelect = useCallback(() => {
onSelect(option);
}, [onSelect, option]);

return (
<MenuItem onSelect={onFunctionSelect} size="sm">
<Styled.MenuTitle>{option.label}</Styled.MenuTitle>
</MenuItem>
);
};
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@ import {
Flex,
Menu,
MenuContent,
MenuItem,
MenuTrigger,
Tooltip,
} from "@appsmith/ads";
import type { JSActionDropdownOption } from "../types";
import { RUN_BUTTON_DEFAULTS, testLocators } from "../constants";
import { createMessage, NO_JS_FUNCTION_TO_RUN } from "ee/constants/messages";
import { JSFunctionItem } from "./JSFunctionItem";

interface Props {
disabled: boolean;
Expand All @@ -33,16 +33,21 @@ interface Props {
*
*/
export const JSFunctionRun = (props: Props) => {
const { onSelect } = props;

const isActionRedesignEnabled = useFeatureFlag(
FEATURE_FLAG.release_actions_redesign_enabled,
);

// Callback function to handle function selection from the dropdown menu
const onFunctionSelect = useCallback((option: JSActionDropdownOption) => {
if (props.onSelect) {
props.onSelect(option.value);
}
}, []);
const onFunctionSelect = useCallback(
(option: JSActionDropdownOption) => {
if (onSelect) {
onSelect(option.value);
}
},
[onSelect],
);

if (!isActionRedesignEnabled) {
return <OldJSFunctionRun {...props} />;
Expand All @@ -58,20 +63,18 @@ export const JSFunctionRun = (props: Props) => {
isDisabled={props.disabled}
kind="tertiary"
size="sm"
startIcon=""
startIcon="js-function"
>
{props.selected.label}
</Button>
</MenuTrigger>
<MenuContent align="end">
{props.options.map((option) => (
<MenuItem
<JSFunctionItem
key={option.label}
onSelect={() => onFunctionSelect(option)}
size="sm"
>
{option.label}
</MenuItem>
onSelect={onFunctionSelect}
option={option}
/>
))}
</MenuContent>
</Menu>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import React from "react";
import "@testing-library/jest-dom";
import { render, screen, fireEvent } from "test/testUtils";
import { render, screen } from "test/testUtils";
import { JSFunctionSettings } from "./JSFunctionSettings";
import { useFeatureFlag } from "utils/hooks/useFeatureFlag";
import { JSObjectFactory } from "test/factories/Actions/JSObject";
Expand Down Expand Up @@ -31,8 +31,6 @@ describe("JSFunctionSettings", () => {
/>,
);

fireEvent.click(screen.getByRole("button"));

expect(screen.getByLabelText(actions[0].name)).toBeDisabled();
});

Expand All @@ -47,8 +45,6 @@ describe("JSFunctionSettings", () => {
/>,
);

fireEvent.click(screen.getByRole("button"));

expect(screen.getAllByRole("switch")).toHaveLength(actions.length);
});

Expand All @@ -74,8 +70,6 @@ describe("JSFunctionSettings", () => {
/>,
);

fireEvent.click(screen.getByRole("button"));

const switchElement1 = screen.getByLabelText(updatedJSActions[0].name);
const switchElement2 = screen.getByLabelText(updatedJSActions[1].name);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import { useFeatureFlag } from "utils/hooks/useFeatureFlag";
import { FEATURE_FLAG } from "ee/entities/FeatureFlag";
import { createMessage, JS_EDITOR_SETTINGS } from "ee/constants/messages";
import AnalyticsUtil from "ee/utils/AnalyticsUtil";
import { ToolbarSettingsPopover } from "IDE";

interface Props {
disabled: boolean;
Expand Down Expand Up @@ -73,8 +72,6 @@ export const JSFunctionSettings = (props: Props) => {
FEATURE_FLAG.release_actions_redesign_enabled,
);

const [isOpen, setIsOpen] = useState(false);

// If the feature flag is disabled, render the old version of the component
if (!isActionRedesignEnabled) {
return (
Expand All @@ -88,25 +85,18 @@ export const JSFunctionSettings = (props: Props) => {

// Render the new version of the component
return (
<ToolbarSettingsPopover
ankitakinger marked this conversation as resolved.
Show resolved Hide resolved
dataTestId={"t--js-editor-SETTINGS"}
handleOpenChange={setIsOpen}
isOpen={isOpen}
title={createMessage(JS_EDITOR_SETTINGS.TITLE)}
>
<Flex flexDirection="column" gap="spaces-4" w="100%">
<Text kind="heading-xs">
{createMessage(JS_EDITOR_SETTINGS.ON_LOAD_TITLE)}
</Text>
{props.actions.map((action) => (
<FunctionSettingRow
action={action}
disabled={props.disabled}
key={action.id}
onUpdateSettings={props.onUpdateSettings}
/>
))}
</Flex>
</ToolbarSettingsPopover>
<Flex flexDirection="column" gap="spaces-4" w="100%">
<Text kind="heading-xs">
{createMessage(JS_EDITOR_SETTINGS.ON_LOAD_TITLE)}
</Text>
{props.actions.map((action) => (
<FunctionSettingRow
action={action}
disabled={props.disabled}
key={action.id}
onUpdateSettings={props.onUpdateSettings}
/>
))}
</Flex>
hetunandu marked this conversation as resolved.
Show resolved Hide resolved
);
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import styled from "styled-components";
import { Text } from "@appsmith/ads";

export const MenuTitle = styled(Text)`
--button-font-weight: bold;
overflow: hidden;
text-overflow: ellipsis;
max-width: 30ch;
`;
Loading