@contentstack/live-preview-utils
Version:
Contentstack provides the Live Preview SDK to establish a communication channel between the various Contentstack SDKs and your website, transmitting live changes to the preview pane.
1 lines • 12.3 kB
Source Map (JSON)
{"version":3,"sources":["../../../../../src/visualBuilder/components/FieldRevert/FieldRevertComponent.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport React, { useRef, useEffect } from \"preact/compat\";\nimport { visualBuilderStyles } from \"../../visualBuilder.style\";\nimport visualBuilderPostMessage from \"../../utils/visualBuilderPostMessage\";\nimport { CslpData } from \"../../../cslp/types/cslp.types\";\nimport { VariantIcon } from \"../icons/variant\";\nimport { CaretIcon } from \"../icons\";\nimport useHandleOutsideClick from \"./useHandleOutsideClick\";\n\nexport interface IVariantStatus {\n fieldLevelCustomizations: boolean;\n isBaseModified: boolean;\n isAddedInstances: boolean;\n isDeletedInstances: boolean;\n isOrderChanged: boolean;\n}\n\nexport type TFieldRevertActionCallback =\n | \"revert_to_base_entry_value\"\n | \"revert_added_instances\"\n | \"restore_deleted_instances\"\n | \"reset_field_level_customizations\"\n | \"restore_sorted_instances\";\n\ninterface FieldRevertComponentProps {\n fieldDataName: string;\n fieldMetadata: CslpData;\n isOpen: boolean;\n closeDropdown: () => void;\n variantStatus?: IVariantStatus;\n}\n\ninterface IItem {\n label: string;\n action: TFieldRevertActionCallback;\n id: string;\n testId: string;\n fieldDataName: string;\n}\n\nexport const BASE_VARIANT_STATUS: IVariantStatus = {\n isAddedInstances: false,\n isBaseModified: false,\n isDeletedInstances: false,\n isOrderChanged: false,\n fieldLevelCustomizations: false,\n};\n\nexport async function getFieldVariantStatus(\n fieldMetadata: CslpData\n): Promise<IVariantStatus | undefined> {\n try {\n const result = await visualBuilderPostMessage?.send<IVariantStatus>(\n \"get-field-variant-status\",\n fieldMetadata\n );\n return result;\n } catch (error) {\n console.error(\"Failed to get field variant status:\", error);\n }\n}\n\nexport const FieldRevertComponent = (props: FieldRevertComponentProps) => {\n const {\n fieldDataName,\n fieldMetadata,\n variantStatus = BASE_VARIANT_STATUS,\n isOpen,\n closeDropdown,\n } = props;\n\n const getDropdownItems = () => {\n const {\n isAddedInstances,\n isDeletedInstances,\n isBaseModified,\n isOrderChanged,\n fieldLevelCustomizations,\n } = variantStatus;\n\n const dropdownItems: IItem[] = [];\n\n if (isBaseModified) {\n dropdownItems.push({\n label: \"Revert to base entry value\",\n action: \"revert_to_base_entry_value\",\n id: `iframe-cs-variant-field-${fieldDataName}-revert`,\n testId: `iframe-cs-variant-field-${fieldDataName}-revert`,\n fieldDataName,\n });\n }\n\n if (isAddedInstances) {\n dropdownItems.push({\n label: \"Revert added instances\",\n action: \"revert_added_instances\",\n id: `iframe-cs-variant-field-${fieldDataName}-revert-added-instances`,\n testId: `iframe-cs-variant-field-${fieldDataName}-revert-added-instances`,\n fieldDataName,\n });\n }\n\n if (isDeletedInstances) {\n dropdownItems.push({\n label: \"Restore deleted instances\",\n action: \"restore_deleted_instances\",\n id: `iframe-cs-variant-field-${fieldDataName}-restore-deleted-instances`,\n testId: `iframe-cs-variant-field-${fieldDataName}-restore-deleted-instances`,\n fieldDataName,\n });\n }\n\n if (fieldLevelCustomizations) {\n dropdownItems.push({\n label: \"Reset field-level customizations\",\n action: \"reset_field_level_customizations\",\n id: `iframe-cs-variant-field-${fieldDataName}-reset-field-level-customizations`,\n testId: `iframe-cs-variant-field-${fieldDataName}-reset-field-level-customizations`,\n fieldDataName,\n });\n }\n\n if (isOrderChanged) {\n dropdownItems.push({\n label: \"Restore sorted instances\",\n action: \"restore_sorted_instances\",\n id: `iframe-cs-variant-field-${fieldDataName}-restore-sorted-instances`,\n testId: `iframe-cs-variant-field-${fieldDataName}-restore-sorted-instances`,\n fieldDataName,\n });\n }\n\n return dropdownItems;\n };\n\n const dropdownItems = getDropdownItems();\n\n function handleOnClick(item: IItem) {\n const { fieldDataName, action } = item;\n visualBuilderPostMessage?.send(\"send-variant-revert-action-trigger\", {\n fieldDataName,\n action,\n euid: fieldMetadata.entry_uid,\n ct_uid: fieldMetadata.content_type_uid,\n locale: fieldMetadata.locale,\n });\n }\n\n return (\n <div\n className={classNames(\n \"variant-field-revert-component\",\n visualBuilderStyles()[\"variant-field-revert-component\"]\n )}\n onClick={(e) => e.stopPropagation()}\n >\n {isOpen && (\n <div\n data-testid=\"variant-field-revert-component__dropdown-content\"\n className={classNames(\n \"variant-field-revert-component__dropdown-content\",\n visualBuilderStyles()[\n \"variant-field-revert-component__dropdown-content\"\n ]\n )}\n >\n {dropdownItems.map((item) => (\n <div\n className={classNames(\n \"variant-field-revert-component__dropdown-content__list-item\",\n visualBuilderStyles()[\n \"variant-field-revert-component__dropdown-content__list-item\"\n ]\n )}\n onClick={(e) => {\n e.preventDefault();\n handleOnClick(item);\n closeDropdown();\n }}\n key={item.id}\n data-testid={item.testId}\n >\n <span>{item.label}</span>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n};\n\nexport const VariantRevertDropdown = (props: any) => {\n const {\n closeDropdown,\n invertTooltipPosition,\n toggleVariantDropdown,\n variantStatus = BASE_VARIANT_STATUS,\n disabled,\n } = props;\n const dropdownRef = useRef<HTMLDivElement>(null);\n useHandleOutsideClick(dropdownRef, closeDropdown);\n const hasDropdownItems = Object.values(variantStatus).some(\n (value) => value\n );\n\n const buttonClassNames = classNames(\n \"visual-builder__button visual-builder__button--secondary\",\n visualBuilderStyles()[\"visual-builder__button\"],\n visualBuilderStyles()[\"visual-builder__button--secondary\"],\n visualBuilderStyles()[\"visual-builder__tooltip\"],\n {\n \"visual-builder__tooltip--bottom\": invertTooltipPosition,\n [visualBuilderStyles()[\"visual-builder__tooltip--bottom\"]]:\n invertTooltipPosition,\n }\n );\n\n if (!hasDropdownItems) {\n return (\n <button\n className={classNames(buttonClassNames)}\n style={{ padding: \"6px\" }}\n data-tooltip={\"Variant\"}\n data-testid={`visual-builder-canvas-variant-icon`}\n disabled={disabled}\n >\n <VariantIcon />\n </button>\n );\n }\n return (\n <div ref={dropdownRef}>\n <button\n className={classNames(\n buttonClassNames,\n visualBuilderStyles()[\"visual-builder__variant-button\"]\n )}\n data-tooltip={\"Variant Revert\"}\n data-testid={`visual-builder-canvas-variant-revert`}\n onClick={toggleVariantDropdown}\n disabled={disabled}\n >\n <VariantIcon />\n <CaretIcon open={props.isOpen} />\n </button>\n <FieldRevertComponent {...props} />\n </div>\n );\n};\n"],"mappings":"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","names":["visualBuilderPostMessage","dropdownItems","fieldDataName","classNames","useHandleOutsideClick"]}