## Description Rename `design-system` package to `@appsmith/ads` ## Automation /ok-to-test tags="@tag.All" ### 🔍 Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/10319507327> > Commit: 65d9664dd75b750496458a6e1652e0da858e1fc6 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=10319507327&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.All` > Spec: > <hr>Fri, 09 Aug 2024 13:47:50 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [x] No
86 lines
2.1 KiB
TypeScript
86 lines
2.1 KiB
TypeScript
import React from "react";
|
|
import styled from "styled-components";
|
|
import type { ControlData, ControlProps } from "./BaseControl";
|
|
import BaseControl from "./BaseControl";
|
|
import { Switch } from "@appsmith/ads";
|
|
import type { DSEventDetail } from "utils/AppsmithUtils";
|
|
import {
|
|
DSEventTypes,
|
|
DS_EVENT,
|
|
emitInteractionAnalyticsEvent,
|
|
} from "utils/AppsmithUtils";
|
|
|
|
const SwitchContainer = styled.div`
|
|
.ads-v2-switch__label {
|
|
justify-content: flex-end;
|
|
min-width: 0px;
|
|
}
|
|
`;
|
|
|
|
class SwitchControl extends BaseControl<ControlProps> {
|
|
isUpdatedViaKeyboard = false;
|
|
containerRef = React.createRef<HTMLDivElement>();
|
|
|
|
componentDidMount() {
|
|
this.containerRef.current?.addEventListener(
|
|
DS_EVENT,
|
|
this.handleAdsEvent as (arg0: Event) => void,
|
|
);
|
|
}
|
|
|
|
componentWillUnmount() {
|
|
this.containerRef.current?.removeEventListener(
|
|
DS_EVENT,
|
|
this.handleAdsEvent as (arg0: Event) => void,
|
|
);
|
|
}
|
|
|
|
handleAdsEvent = (e: CustomEvent<DSEventDetail>) => {
|
|
if (
|
|
e.detail.component === "AdsSwitch" &&
|
|
e.detail.event === DSEventTypes.KEYPRESS
|
|
) {
|
|
this.isUpdatedViaKeyboard = true;
|
|
emitInteractionAnalyticsEvent(this.containerRef.current, {
|
|
key: e.detail.meta.key,
|
|
});
|
|
e.stopPropagation();
|
|
}
|
|
};
|
|
|
|
render() {
|
|
return (
|
|
<SwitchContainer ref={this.containerRef}>
|
|
<Switch
|
|
className={this.props.propertyValue ? "checked" : "unchecked"}
|
|
isSelected={this.props.propertyValue}
|
|
onChange={this.onToggle}
|
|
/>
|
|
</SwitchContainer>
|
|
);
|
|
}
|
|
|
|
onToggle = () => {
|
|
this.updateProperty(
|
|
this.props.propertyName,
|
|
!this.props.propertyValue,
|
|
this.isUpdatedViaKeyboard,
|
|
);
|
|
this.isUpdatedViaKeyboard = false;
|
|
};
|
|
|
|
static getControlType() {
|
|
return "SWITCH";
|
|
}
|
|
|
|
// TODO: Fix this the next time the file is edited
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
static canDisplayValueInUI(config: ControlData, value: any): boolean {
|
|
return value === "true" || value === "false";
|
|
}
|
|
}
|
|
|
|
export type SwitchControlProps = ControlProps;
|
|
|
|
export default SwitchControl;
|