import React from "react"; import type { ControlProps } from "./BaseControl"; import BaseControl from "./BaseControl"; import type { ControlType } from "constants/PropertyControlConstants"; import FormControl from "pages/Editor/FormControl"; import FormLabel from "components/editorComponents/FormLabel"; import { Colors } from "constants/Colors"; import styled from "styled-components"; import { getBindingOrConfigPathsForPaginationControl } from "entities/Action/actionProperties"; import { PaginationSubComponent } from "components/formControls/utils"; export const StyledFormLabel = styled(FormLabel)` margin-top: 5px; font-weight: 400; font-size: 12px; color: ${Colors.GREY_7}; line-height: 16px; `; export const FormControlContainer = styled.div` display: flex; flex-direction: column; width: 280px; margin-right: 1rem; `; const PaginationContainer = styled.div` display: grid; grid-gap: 8px 16px; grid-template-columns: repeat(auto-fill, 280px); `; // using query dynamic input text for both so user can dynamically change these values. const valueFieldConfig: any = { key: "value", controlType: "QUERY_DYNAMIC_INPUT_TEXT", placeholderText: "value", customStyles: { width: "280px", }, }; const limitFieldConfig: any = { ...valueFieldConfig, placeholderText: "20", }; const offsetFieldConfig: any = { ...valueFieldConfig, placeholderText: "0", }; export function Pagination(props: { label: string; isValid: boolean; validationMessage?: string; placeholder?: Record; tooltip?: Record; isRequired?: boolean; name: string; disabled?: boolean; customStyles?: any; configProperty: string; formName: string; initialValue?: Record; }) { const { configProperty, customStyles, formName, initialValue, name, placeholder, tooltip, } = props; const offsetPath = getBindingOrConfigPathsForPaginationControl( PaginationSubComponent.Offset, configProperty, ); const limitPath = getBindingOrConfigPathsForPaginationControl( PaginationSubComponent.Limit, configProperty, ); const defaultStyles = { width: "280px", ...customStyles, }; return ( {/* form control for Limit field */} Limits the number of rows returned. {/* form control for Offset field */} No. of rows to be skipped before querying ); } class PaginationControl extends BaseControl { render() { const { configProperty, // JSON path for the pagination data disabled, formName, // Name of the form, used by redux-form lib to store the data in redux store isValid, label, placeholderText, tooltipText, validationMessage, } = this.props; return ( // pagination component ); } getControlType(): ControlType { return "PAGINATION"; } } export interface PaginationControlProps extends ControlProps { placeholderText: Record; tooltipText: Record; disabled?: boolean; } export default PaginationControl;