{"version":3,"file":"NewChipForm.mjs","sources":["../../../../src/lib/components/FormChipCell/NewChipForm/NewChipForm.jsx"],"sourcesContent":["/*\nCopyright 2022 Iguazio Systems Ltd.\nLicensed under the Apache License, Version 2.0 (the \"License\") with\nan addition restriction as set forth herein. You may not use this\nfile except in compliance with the License. You may obtain a copy of\nthe License at http://www.apache.org/licenses/LICENSE-2.0.\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\nimplied. See the License for the specific language governing\npermissions and limitations under the License.\nIn addition, you may not use the software for any purposes that are\nillegal under applicable law, and the grant of the foregoing license\nunder the Apache 2.0 license is conditioned upon your compliance with\nsuch restriction.\n*/\nimport React, {\n  useState,\n  useCallback,\n  useEffect,\n  useLayoutEffect,\n  useMemo,\n  forwardRef\n} from 'react'\nimport PropTypes from 'prop-types'\nimport classnames from 'classnames'\nimport { isEmpty, get, isNil, throttle } from 'lodash'\n\nimport NewChipInput from '../NewChipInput/NewChipInput'\nimport OptionsMenu from '../../../elements/OptionsMenu/OptionsMenu'\nimport ValidationTemplate from '../../../elements/ValidationTemplate/ValidationTemplate'\n\nimport { CHIP_OPTIONS } from '../../../types'\nimport { CLICK, TAB, TAB_SHIFT } from '../../../constants'\nimport { getTextWidth } from '../formChipCell.util'\nimport { getTransitionEndEventName } from '../../../utils/common.util'\n\nimport Close from '../../../images/close.svg?react'\n\nimport './newChipForm.scss'\n\nconst defaultProps = {\n  rules: {}\n}\n\nlet NewChipForm = (\n  {\n    chip,\n    chipIndex,\n    chipOptions,\n    className = '',\n    editConfig,\n    handleRemoveChip,\n    isDeletable,\n    isEditable,\n    keyName,\n    meta,\n    onChange,\n    setChipSizeIsRecalculated,\n    setEditConfig,\n    validationRules: rules = defaultProps.rules,\n    valueName\n  },\n  ref\n) => {\n  const [chipData, setChipData] = useState({\n    isKeyOnly: chip.isKeyOnly,\n    key: chip.key,\n    value: chip.value,\n    keyFieldWidth: 0,\n    valueFieldWidth: 0\n  })\n  const [selectedInput, setSelectedInput] = useState('key')\n  const [validationRules, setValidationRules] = useState(rules)\n  const [showValidationRules, setShowValidationRules] = useState(false)\n\n  const { background, borderColor, borderRadius, density, font } = chipOptions\n  const minWidthInput = useMemo(() => {\n    return isEditable ? 25 : 20\n  }, [isEditable])\n  const minWidthValueInput = useMemo(() => {\n    return isEditable ? 35 : 20\n  }, [isEditable])\n  const transitionEndEventName = useMemo(() => getTransitionEndEventName(), [])\n\n  const refInputKey = React.useRef({})\n  const refInputValue = React.useRef({})\n  const refInputContainer = React.useRef()\n  const validationRulesRef = React.useRef()\n\n  const labelKeyClassName = classnames(\n    className,\n    !editConfig.isKeyFocused && 'item_edited',\n    !isEmpty(get(meta, ['error', chipIndex, 'key'], [])) &&\n      !isEmpty(chipData.key) &&\n      !chip.disabled &&\n      isEditable &&\n      'item_edited_invalid'\n  )\n  const labelContainerClassName = classnames(\n    'edit-chip-container',\n    background && `edit-chip-container-background_${background}`,\n    borderColor && `edit-chip-container-border_${borderColor}`,\n    font && `edit-chip-container-font_${font}`,\n    density && `edit-chip-container-density_${density}`,\n    borderRadius && `edit-chip-container-border_${borderRadius}`,\n    (editConfig.isEdit || editConfig.isNewChip) && 'edit-chip-container_edited',\n    isEditable && chip.disabled && 'edit-chip-container_disabled edit-chip-container-font_disabled'\n  )\n  const labelValueClassName = classnames(\n    'input-label-value',\n    !editConfig.isValueFocused && 'item_edited',\n    !isEmpty(get(meta, ['error', chipIndex, 'value'], [])) &&\n      !isEmpty(chipData.value) &&\n      isEditable &&\n      'item_edited_invalid'\n  )\n\n  const closeButtonClass = classnames(\n    'item-icon-close',\n    !chip.disabled &&\n      ((editConfig.chipIndex === chipIndex && isEditable) || (!isDeletable && !isEditable)) &&\n      'item-icon-close invisible',\n    !isEditable && !isDeletable && 'item-icon-close hidden'\n  )\n\n  const resizeChip = useCallback(() => {\n    if (refInputKey.current) {\n      const currentWidthKeyInput = getTextWidth(refInputKey.current) + 1\n      const currentWidthValueInput = getTextWidth(refInputValue.current) + 1\n      const maxWidthInput = ref.current?.clientWidth - 50\n      const keyEllipsis = currentWidthKeyInput >= maxWidthInput / 2\n      const valueEllipsis = currentWidthValueInput >= maxWidthInput / 2\n      let keyFieldWidth = null\n      let valueFieldWidth = null\n\n      if (keyEllipsis && valueEllipsis) {\n        keyFieldWidth = valueFieldWidth = maxWidthInput / 2\n      } else if (keyEllipsis) {\n        valueFieldWidth = !chipData.value ? minWidthValueInput : currentWidthValueInput\n\n        const remainingPlace = maxWidthInput - valueFieldWidth\n\n        keyFieldWidth =\n          remainingPlace > currentWidthKeyInput ? currentWidthKeyInput : remainingPlace\n      } else if (valueEllipsis) {\n        keyFieldWidth = !chipData.key ? minWidthInput : currentWidthKeyInput\n\n        const remainingPlace = maxWidthInput - keyFieldWidth\n\n        valueFieldWidth =\n          remainingPlace > currentWidthValueInput ? currentWidthValueInput : remainingPlace\n      } else {\n        keyFieldWidth =\n          !chipData.key || currentWidthKeyInput <= minWidthInput\n            ? minWidthInput\n            : currentWidthKeyInput\n        valueFieldWidth =\n          !chipData.value || currentWidthValueInput <= minWidthValueInput\n            ? minWidthValueInput\n            : currentWidthValueInput\n      }\n\n      refInputKey.current.style.width = `${keyFieldWidth}px`\n\n      if (!isEmpty(refInputValue.current)) {\n        refInputValue.current.style.width = `${valueFieldWidth}px`\n      }\n\n      setChipData(prevState => ({\n        ...prevState,\n        keyFieldWidth,\n        valueFieldWidth\n      }))\n      setChipSizeIsRecalculated(true)\n    }\n  }, [\n    chipData.key,\n    chipData.value,\n    minWidthInput,\n    minWidthValueInput,\n    ref,\n    setChipSizeIsRecalculated\n  ])\n\n  useEffect(() => {\n    if (!ref.current) return\n\n    const element = ref.current\n    const observer = new ResizeObserver(resizeChip)\n\n    observer.observe(element)\n\n    return () => observer.unobserve(element)\n  }, [ref, resizeChip])\n\n  useEffect(() => {\n    const resizeChipDebounced = throttle(resizeChip, 500)\n\n    if (isEditable) {\n      window.addEventListener('resize', resizeChipDebounced)\n      window.addEventListener(transitionEndEventName, resizeChipDebounced)\n\n      return () => {\n        window.removeEventListener('resize', resizeChipDebounced)\n        window.removeEventListener(transitionEndEventName, resizeChipDebounced)\n      }\n    }\n  }, [isEditable, resizeChip, transitionEndEventName])\n\n  useLayoutEffect(() => {\n    if (!chipData.keyFieldWidth && !chipData.valueFieldWidth) {\n      resizeChip()\n    }\n  }, [chipData.keyFieldWidth, chipData.valueFieldWidth, resizeChip])\n\n  const outsideClick = useCallback(\n    (event, forceOutsideClick) => {\n      if (editConfig.chipIndex === chipIndex) {\n        const elementPath = event.path ?? event.composedPath?.()\n\n        if (!elementPath.includes(refInputContainer.current) || forceOutsideClick) {\n          onChange(event, CLICK, true)\n          window.getSelection().removeAllRanges()\n          document.activeElement.blur()\n        } else {\n          event.stopPropagation()\n        }\n      }\n    },\n    [onChange, refInputContainer, chipIndex, editConfig.chipIndex]\n  )\n\n  const handleScroll = useCallback(\n    event => {\n      if (validationRulesRef?.current && !validationRulesRef.current.contains(event.target)) {\n        setShowValidationRules(false)\n        outsideClick(event, true)\n      }\n    },\n    [outsideClick]\n  )\n\n  useEffect(() => {\n    if (showValidationRules) {\n      window.addEventListener('scroll', handleScroll, true)\n    }\n    return () => {\n      window.removeEventListener('scroll', handleScroll, true)\n    }\n  }, [handleScroll, showValidationRules])\n\n  useEffect(() => {\n    if (editConfig.chipIndex === chipIndex) {\n      if (editConfig.isKeyFocused) {\n        refInputKey.current.focus()\n      } else if (editConfig.isValueFocused) {\n        refInputValue.current.focus()\n      }\n    }\n  }, [\n    editConfig.isKeyFocused,\n    editConfig.isValueFocused,\n    refInputKey,\n    refInputValue,\n    chipIndex,\n    editConfig.chipIndex\n  ])\n\n  useEffect(() => {\n    if (showValidationRules) {\n      window.addEventListener('scroll', handleScroll, true)\n    }\n    return () => {\n      window.removeEventListener('scroll', handleScroll, true)\n    }\n  }, [handleScroll, showValidationRules])\n\n  useEffect(() => {\n    if (editConfig.isEdit) {\n      document.addEventListener('click', outsideClick, true)\n\n      return () => {\n        document.removeEventListener('click', outsideClick, true)\n      }\n    }\n  }, [outsideClick, editConfig.isEdit])\n\n  const focusChip = useCallback(\n    event => {\n      if (editConfig.chipIndex === chipIndex && isEditable) {\n        if (!event.shiftKey && event.key === TAB && editConfig.isValueFocused) {\n          return onChange(event, TAB)\n        } else if (event.shiftKey && event.key === TAB && editConfig.isKeyFocused) {\n          return onChange(event, TAB_SHIFT)\n        }\n      }\n      event.stopPropagation()\n    },\n    [editConfig, onChange, chipIndex, isEditable]\n  )\n\n  const handleOnFocus = useCallback(\n    event => {\n      const isKeyFocused = event.target.name === keyName\n\n      if (editConfig.chipIndex === chipIndex) {\n        if (isKeyFocused) {\n          refInputKey.current.selectionStart = refInputKey.current.selectionEnd\n\n          setEditConfig(prevConfig => ({\n            ...prevConfig,\n            isKeyFocused: true,\n            isValueFocused: false\n          }))\n        } else {\n          refInputValue.current.selectionStart = refInputValue.current.selectionEnd\n\n          setEditConfig(prevConfig => ({\n            ...prevConfig,\n            isKeyFocused: false,\n            isValueFocused: true\n          }))\n        }\n\n        event && event.stopPropagation()\n      } else if (isNil(editConfig.chipIndex)) {\n        if (isKeyFocused) {\n          refInputKey.current.selectionStart = refInputKey.current.selectionEnd\n        } else {\n          refInputValue.current.selectionStart = refInputValue.current.selectionEnd\n        }\n        setEditConfig({\n          chipIndex,\n          isEdit: true,\n          isKeyFocused: isKeyFocused,\n          isValueFocused: !isKeyFocused\n        })\n      }\n    },\n    [keyName, refInputKey, refInputValue, setEditConfig, editConfig.chipIndex, chipIndex]\n  )\n\n  const handleOnChange = useCallback(\n    event => {\n      const maxWidthInput = ref.current?.clientWidth - 50\n\n      event.preventDefault()\n\n      if (event.target.name === keyName) {\n        const currentWidthKeyInput = getTextWidth(refInputKey.current)\n\n        setChipData(prevState => ({\n          ...prevState,\n          key: refInputKey.current.value,\n          keyFieldWidth:\n            refInputKey.current.value.length <= 1\n              ? minWidthInput\n              : currentWidthKeyInput >= maxWidthInput\n                ? maxWidthInput\n                : currentWidthKeyInput > minWidthInput\n                  ? currentWidthKeyInput + 2\n                  : minWidthInput\n        }))\n      } else {\n        const currentWidthValueInput = getTextWidth(refInputValue.current)\n\n        setChipData(prevState => ({\n          ...prevState,\n          value: refInputValue.current.value,\n          valueFieldWidth:\n            refInputValue.current.value?.length <= 1\n              ? minWidthValueInput\n              : currentWidthValueInput >= maxWidthInput\n                ? maxWidthInput\n                : currentWidthValueInput > minWidthValueInput\n                  ? currentWidthValueInput + 2\n                  : minWidthValueInput\n        }))\n      }\n    },\n    [keyName, minWidthInput, ref, minWidthValueInput]\n  )\n\n  useLayoutEffect(() => {\n    if (editConfig.chipIndex === chipIndex) {\n      setSelectedInput(editConfig.isKeyFocused ? 'key' : editConfig.isValueFocused ? 'value' : null)\n    }\n  }, [editConfig.isKeyFocused, editConfig.isValueFocused, editConfig.chipIndex, chipIndex])\n\n  useEffect(() => {\n    if (meta.valid && showValidationRules) {\n      setShowValidationRules(false)\n    }\n  }, [meta.valid, showValidationRules])\n\n  useEffect(() => {\n    if (meta.error) {\n      setValidationRules(prevState => {\n        return {\n          ...prevState,\n          [selectedInput]: prevState[selectedInput]?.map(rule => {\n            return {\n              ...rule,\n              isValid: isEmpty(get(meta, ['error', editConfig.chipIndex, selectedInput], []))\n                ? true\n                : !meta.error[editConfig.chipIndex][selectedInput].some(\n                    err => err && err.name === rule.name\n                  )\n            }\n          })\n        }\n      })\n\n      !showValidationRules && setShowValidationRules(true)\n    }\n  }, [meta, showValidationRules, selectedInput, editConfig.chipIndex])\n\n  const getValidationRules = useCallback(() => {\n    return validationRules[selectedInput]?.map(({ isValid = false, label, name }) => {\n      return <ValidationTemplate valid={isValid} validationMessage={label} key={name} />\n    })\n  }, [selectedInput, validationRules])\n\n  return (\n    <div\n      className={labelContainerClassName}\n      onKeyDown={event => !chip.disabled && editConfig.isEdit && focusChip(event)}\n      ref={refInputContainer}\n    >\n      <NewChipInput\n        className={labelKeyClassName}\n        disabled={\n          chip.disabled ||\n          !isEditable ||\n          (!isNil(editConfig.chipIndex) && editConfig.chipIndex !== chipIndex)\n        }\n        name={keyName}\n        onChange={handleOnChange}\n        onFocus={handleOnFocus}\n        placeholder={isEditable ? 'key' : ''}\n        ref={refInputKey}\n        style={{ width: chipData.keyFieldWidth }}\n      />\n      {!chipData.isKeyOnly && <div className=\"edit-chip-separator\">:</div>}\n      {!chipData.isKeyOnly && (\n        <NewChipInput\n          className={labelValueClassName}\n          disabled={\n            chip.disabled ||\n            !isEditable ||\n            (!isNil(editConfig.chipIndex) && editConfig.chipIndex !== chipIndex)\n          }\n          name={valueName}\n          onChange={handleOnChange}\n          onFocus={handleOnFocus}\n          placeholder={isEditable ? 'value' : ''}\n          ref={refInputValue}\n          style={{ width: chipData.valueFieldWidth }}\n        />\n      )}\n\n      <button\n        disabled={chip.disabled}\n        className={closeButtonClass}\n        onClick={event => !chip.disabled && handleRemoveChip(event, chipIndex)}\n      >\n        <Close />\n      </button>\n\n      {!chip.disabled &&\n        (editConfig.isKeyFocused ? !isEmpty(chipData.key) : !isEmpty(chipData.value)) &&\n        editConfig.chipIndex === chipIndex &&\n        !isEmpty(get(meta, ['error', editConfig.chipIndex, selectedInput], [])) && (\n          <OptionsMenu show={showValidationRules} ref={{ refInputContainer, validationRulesRef }}>\n            {getValidationRules()}\n          </OptionsMenu>\n        )}\n    </div>\n  )\n}\n\nNewChipForm = forwardRef(NewChipForm)\n\nNewChipForm.displayName = 'NewChipForm'\n\nNewChipForm.propTypes = {\n  chip: PropTypes.object.isRequired,\n  chipIndex: PropTypes.number.isRequired,\n  chipOptions: CHIP_OPTIONS.isRequired,\n  className: PropTypes.string,\n  editConfig: PropTypes.object.isRequired,\n  handleRemoveChip: PropTypes.func.isRequired,\n  isDeletable: PropTypes.bool.isRequired,\n  isEditable: PropTypes.bool.isRequired,\n  keyName: PropTypes.string.isRequired,\n  meta: PropTypes.object.isRequired,\n  onChange: PropTypes.func.isRequired,\n  setChipSizeIsRecalculated: PropTypes.func.isRequired,\n  setEditConfig: PropTypes.func.isRequired,\n  validationRules: PropTypes.object,\n  valueName: PropTypes.string.isRequired\n}\n\nexport default NewChipForm\n"],"names":["defaultProps","NewChipForm","chip","chipIndex","chipOptions","className","editConfig","handleRemoveChip","isDeletable","isEditable","keyName","meta","onChange","setChipSizeIsRecalculated","setEditConfig","rules","valueName","ref","chipData","setChipData","useState","selectedInput","setSelectedInput","validationRules","setValidationRules","showValidationRules","setShowValidationRules","background","borderColor","borderRadius","density","font","minWidthInput","useMemo","minWidthValueInput","transitionEndEventName","getTransitionEndEventName","refInputKey","React","refInputValue","refInputContainer","validationRulesRef","labelKeyClassName","classnames","isEmpty","get","labelContainerClassName","labelValueClassName","closeButtonClass","resizeChip","useCallback","currentWidthKeyInput","getTextWidth","currentWidthValueInput","maxWidthInput","_a","keyEllipsis","valueEllipsis","keyFieldWidth","valueFieldWidth","remainingPlace","prevState","useEffect","element","observer","resizeChipDebounced","throttle","useLayoutEffect","outsideClick","event","forceOutsideClick","CLICK","handleScroll","focusChip","TAB","TAB_SHIFT","handleOnFocus","isKeyFocused","prevConfig","isNil","handleOnChange","rule","err","getValidationRules","isValid","label","name","ValidationTemplate","jsxs","jsx","NewChipInput","Close","OptionsMenu","forwardRef","PropTypes","CHIP_OPTIONS","NewChipForm$1"],"mappings":"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"}