@activecollab/components 1.0.360 → 1.0.361

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,7 +8,7 @@ exports.EditableText = void 0;
8
8
  var _react = _interopRequireWildcard(require("react"));
9
9
  var _EditableContent = require("../EditableContent/EditableContent");
10
10
  var _classnames = _interopRequireDefault(require("classnames"));
11
- var _excluded = ["onSave", "onCancel", "value", "inputProps"];
11
+ var _excluded = ["onSave", "onCancel", "value", "inputProps", "allowEmptyString"];
12
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
13
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
14
14
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -29,6 +29,7 @@ var EditableText = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
29
29
  onCancel = _ref.onCancel,
30
30
  value = _ref.value,
31
31
  inputProps = _ref.inputProps,
32
+ allowEmptyString = _ref.allowEmptyString,
32
33
  props = _objectWithoutProperties(_ref, _excluded);
33
34
  var _useState = (0, _react.useState)(value),
34
35
  _useState2 = _slicedToArray(_useState, 2),
@@ -56,10 +57,10 @@ var EditableText = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
56
57
  setCurrentValue(e.target.value);
57
58
  typeof onSave === "function" && onSave(e);
58
59
  } else {
59
- setCurrentValue(prevValue);
60
+ !allowEmptyString && setCurrentValue(prevValue);
60
61
  }
61
62
  }
62
- }, [onSave, prevValue]);
63
+ }, [allowEmptyString, onSave, prevValue]);
63
64
  var handleKeyDown = (0, _react.useCallback)(function (e) {
64
65
  if (e.key === "Enter") {
65
66
  e.target.blur();
@@ -1 +1 @@
1
- {"version":3,"file":"EditableText.js","names":["EditableText","forwardRef","ref","onSave","onCancel","value","inputProps","props","useState","currentValue","setCurrentValue","prevValue","setPrevValue","escapeRef","useRef","useEffect","handleBlur","useCallback","e","current","target","trim","length","handleKeyDown","key","blur","handleChange","onBlur","onKeyDown","onChange","type","className","classNames","displayName"],"sources":["../../../../src/components/EditableText/EditableText.tsx"],"sourcesContent":["import React, {\n ChangeEvent,\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport {\n EditableContent,\n EditableContentInterface,\n} from \"../EditableContent/EditableContent\";\nimport classNames from \"classnames\";\n\nexport interface EditableTextInterface extends EditableContentInterface {\n /** Value to display. */\n value: string;\n /** Optional callback called on enter, click outside and tab. */\n onSave?: (e: ChangeEvent<HTMLInputElement>) => void;\n /** Optional callback called on input reset. */\n onCancel?: () => void;\n}\n\nexport const EditableText = forwardRef<HTMLDivElement, EditableTextInterface>(\n ({ onSave, onCancel, value, inputProps, ...props }, ref) => {\n const [currentValue, setCurrentValue] = useState(value);\n const [prevValue, setPrevValue] = useState(value);\n const escapeRef = useRef(false);\n\n useEffect(() => {\n if (currentValue !== value) {\n setCurrentValue(value);\n setPrevValue(value);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value]);\n\n const handleBlur = useCallback(\n (e) => {\n if (escapeRef.current) {\n setCurrentValue(prevValue);\n escapeRef.current = false;\n } else {\n if (\n e.target.value.trim().length > 0 &&\n prevValue !== e.target.value\n ) {\n setPrevValue(e.target.value);\n setCurrentValue(e.target.value);\n typeof onSave === \"function\" && onSave(e);\n } else {\n setCurrentValue(prevValue);\n }\n }\n },\n [onSave, prevValue]\n );\n\n const handleKeyDown = useCallback(\n (e) => {\n if (e.key === \"Enter\") {\n e.target.blur();\n }\n if (e.key === \"Escape\") {\n escapeRef.current = true;\n e.target.blur();\n typeof onCancel === \"function\" && onCancel();\n }\n },\n [onCancel]\n );\n\n const handleChange = useCallback((e) => {\n setCurrentValue(e.target.value);\n }, []);\n\n return (\n <EditableContent\n {...props}\n ref={ref}\n inputProps={{\n ...inputProps,\n value: currentValue,\n onBlur: handleBlur,\n onKeyDown: handleKeyDown,\n onChange: handleChange,\n type: \"text\",\n className: classNames(\"c-input\", inputProps?.className),\n }}\n />\n );\n }\n);\n\nEditableText.displayName = \"EditableText\";\n"],"mappings":";;;;;;;AAAA;AAQA;AAIA;AAAoC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAW7B,IAAMA,YAAY,gBAAG,IAAAC,iBAAU,EACpC,gBAAoDC,GAAG,EAAK;EAAA,IAAzDC,MAAM,QAANA,MAAM;IAAEC,QAAQ,QAARA,QAAQ;IAAEC,KAAK,QAALA,KAAK;IAAEC,UAAU,QAAVA,UAAU;IAAKC,KAAK;EAC9C,gBAAwC,IAAAC,eAAQ,EAACH,KAAK,CAAC;IAAA;IAAhDI,YAAY;IAAEC,eAAe;EACpC,iBAAkC,IAAAF,eAAQ,EAACH,KAAK,CAAC;IAAA;IAA1CM,SAAS;IAAEC,YAAY;EAC9B,IAAMC,SAAS,GAAG,IAAAC,aAAM,EAAC,KAAK,CAAC;EAE/B,IAAAC,gBAAS,EAAC,YAAM;IACd,IAAIN,YAAY,KAAKJ,KAAK,EAAE;MAC1BK,eAAe,CAACL,KAAK,CAAC;MACtBO,YAAY,CAACP,KAAK,CAAC;IACrB;IACA;EACF,CAAC,EAAE,CAACA,KAAK,CAAC,CAAC;EAEX,IAAMW,UAAU,GAAG,IAAAC,kBAAW,EAC5B,UAACC,CAAC,EAAK;IACL,IAAIL,SAAS,CAACM,OAAO,EAAE;MACrBT,eAAe,CAACC,SAAS,CAAC;MAC1BE,SAAS,CAACM,OAAO,GAAG,KAAK;IAC3B,CAAC,MAAM;MACL,IACED,CAAC,CAACE,MAAM,CAACf,KAAK,CAACgB,IAAI,EAAE,CAACC,MAAM,GAAG,CAAC,IAChCX,SAAS,KAAKO,CAAC,CAACE,MAAM,CAACf,KAAK,EAC5B;QACAO,YAAY,CAACM,CAAC,CAACE,MAAM,CAACf,KAAK,CAAC;QAC5BK,eAAe,CAACQ,CAAC,CAACE,MAAM,CAACf,KAAK,CAAC;QAC/B,OAAOF,MAAM,KAAK,UAAU,IAAIA,MAAM,CAACe,CAAC,CAAC;MAC3C,CAAC,MAAM;QACLR,eAAe,CAACC,SAAS,CAAC;MAC5B;IACF;EACF,CAAC,EACD,CAACR,MAAM,EAAEQ,SAAS,CAAC,CACpB;EAED,IAAMY,aAAa,GAAG,IAAAN,kBAAW,EAC/B,UAACC,CAAC,EAAK;IACL,IAAIA,CAAC,CAACM,GAAG,KAAK,OAAO,EAAE;MACrBN,CAAC,CAACE,MAAM,CAACK,IAAI,EAAE;IACjB;IACA,IAAIP,CAAC,CAACM,GAAG,KAAK,QAAQ,EAAE;MACtBX,SAAS,CAACM,OAAO,GAAG,IAAI;MACxBD,CAAC,CAACE,MAAM,CAACK,IAAI,EAAE;MACf,OAAOrB,QAAQ,KAAK,UAAU,IAAIA,QAAQ,EAAE;IAC9C;EACF,CAAC,EACD,CAACA,QAAQ,CAAC,CACX;EAED,IAAMsB,YAAY,GAAG,IAAAT,kBAAW,EAAC,UAACC,CAAC,EAAK;IACtCR,eAAe,CAACQ,CAAC,CAACE,MAAM,CAACf,KAAK,CAAC;EACjC,CAAC,EAAE,EAAE,CAAC;EAEN,oBACE,6BAAC,gCAAe,eACVE,KAAK;IACT,GAAG,EAAEL,GAAI;IACT,UAAU,kCACLI,UAAU;MACbD,KAAK,EAAEI,YAAY;MACnBkB,MAAM,EAAEX,UAAU;MAClBY,SAAS,EAAEL,aAAa;MACxBM,QAAQ,EAAEH,YAAY;MACtBI,IAAI,EAAE,MAAM;MACZC,SAAS,EAAE,IAAAC,mBAAU,EAAC,SAAS,EAAE1B,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEyB,SAAS;IAAC;EACvD,GACF;AAEN,CAAC,CACF;AAAC;AAEF/B,YAAY,CAACiC,WAAW,GAAG,cAAc"}
1
+ {"version":3,"file":"EditableText.js","names":["EditableText","forwardRef","ref","onSave","onCancel","value","inputProps","allowEmptyString","props","useState","currentValue","setCurrentValue","prevValue","setPrevValue","escapeRef","useRef","useEffect","handleBlur","useCallback","e","current","target","trim","length","handleKeyDown","key","blur","handleChange","onBlur","onKeyDown","onChange","type","className","classNames","displayName"],"sources":["../../../../src/components/EditableText/EditableText.tsx"],"sourcesContent":["import React, {\n ChangeEvent,\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport {\n EditableContent,\n EditableContentInterface,\n} from \"../EditableContent/EditableContent\";\nimport classNames from \"classnames\";\n\nexport interface EditableTextInterface extends EditableContentInterface {\n /** Value to display. */\n value: string;\n /** Optional callback called on enter, click outside and tab. */\n onSave?: (e: ChangeEvent<HTMLInputElement>) => void;\n /** Optional callback called on input reset. */\n onCancel?: () => void;\n /** If true, setting empty value will save it, instead of revert to previous value. */\n allowEmptyString?: boolean;\n}\n\nexport const EditableText = forwardRef<HTMLDivElement, EditableTextInterface>(\n (\n { onSave, onCancel, value, inputProps, allowEmptyString, ...props },\n ref\n ) => {\n const [currentValue, setCurrentValue] = useState(value);\n const [prevValue, setPrevValue] = useState(value);\n const escapeRef = useRef(false);\n\n useEffect(() => {\n if (currentValue !== value) {\n setCurrentValue(value);\n setPrevValue(value);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value]);\n\n const handleBlur = useCallback(\n (e) => {\n if (escapeRef.current) {\n setCurrentValue(prevValue);\n escapeRef.current = false;\n } else {\n if (\n e.target.value.trim().length > 0 &&\n prevValue !== e.target.value\n ) {\n setPrevValue(e.target.value);\n setCurrentValue(e.target.value);\n typeof onSave === \"function\" && onSave(e);\n } else {\n !allowEmptyString && setCurrentValue(prevValue);\n }\n }\n },\n [allowEmptyString, onSave, prevValue]\n );\n\n const handleKeyDown = useCallback(\n (e) => {\n if (e.key === \"Enter\") {\n e.target.blur();\n }\n if (e.key === \"Escape\") {\n escapeRef.current = true;\n e.target.blur();\n typeof onCancel === \"function\" && onCancel();\n }\n },\n [onCancel]\n );\n\n const handleChange = useCallback((e) => {\n setCurrentValue(e.target.value);\n }, []);\n\n return (\n <EditableContent\n {...props}\n ref={ref}\n inputProps={{\n ...inputProps,\n value: currentValue,\n onBlur: handleBlur,\n onKeyDown: handleKeyDown,\n onChange: handleChange,\n type: \"text\",\n className: classNames(\"c-input\", inputProps?.className),\n }}\n />\n );\n }\n);\n\nEditableText.displayName = \"EditableText\";\n"],"mappings":"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"}
@@ -7,6 +7,8 @@ export interface EditableTextInterface extends EditableContentInterface {
7
7
  onSave?: (e: ChangeEvent<HTMLInputElement>) => void;
8
8
  /** Optional callback called on input reset. */
9
9
  onCancel?: () => void;
10
+ /** If true, setting empty value will save it, instead of revert to previous value. */
11
+ allowEmptyString?: boolean;
10
12
  }
11
13
  export declare const EditableText: React.ForwardRefExoticComponent<EditableTextInterface & React.RefAttributes<HTMLDivElement>>;
12
14
  //# sourceMappingURL=EditableText.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EditableText.d.ts","sourceRoot":"","sources":["../../../../src/components/EditableText/EditableText.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EACZ,WAAW,EAMZ,MAAM,OAAO,CAAC;AACf,OAAO,EAEL,wBAAwB,EACzB,MAAM,oCAAoC,CAAC;AAG5C,MAAM,WAAW,qBAAsB,SAAQ,wBAAwB;IACrE,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACpD,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,eAAO,MAAM,YAAY,8FAqExB,CAAC"}
1
+ {"version":3,"file":"EditableText.d.ts","sourceRoot":"","sources":["../../../../src/components/EditableText/EditableText.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EACZ,WAAW,EAMZ,MAAM,OAAO,CAAC;AACf,OAAO,EAEL,wBAAwB,EACzB,MAAM,oCAAoC,CAAC;AAG5C,MAAM,WAAW,qBAAsB,SAAQ,wBAAwB;IACrE,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACpD,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,sFAAsF;IACtF,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,eAAO,MAAM,YAAY,8FAwExB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
- var _excluded = ["onSave", "onCancel", "value", "inputProps"];
3
+ var _excluded = ["onSave", "onCancel", "value", "inputProps", "allowEmptyString"];
4
4
  import React, { forwardRef, useCallback, useEffect, useRef, useState } from "react";
5
5
  import { EditableContent } from "../EditableContent/EditableContent";
6
6
  import classNames from "classnames";
@@ -9,6 +9,7 @@ export var EditableText = /*#__PURE__*/forwardRef(function (_ref, ref) {
9
9
  onCancel = _ref.onCancel,
10
10
  value = _ref.value,
11
11
  inputProps = _ref.inputProps,
12
+ allowEmptyString = _ref.allowEmptyString,
12
13
  props = _objectWithoutPropertiesLoose(_ref, _excluded);
13
14
  var _useState = useState(value),
14
15
  currentValue = _useState[0],
@@ -34,10 +35,10 @@ export var EditableText = /*#__PURE__*/forwardRef(function (_ref, ref) {
34
35
  setCurrentValue(e.target.value);
35
36
  typeof onSave === "function" && onSave(e);
36
37
  } else {
37
- setCurrentValue(prevValue);
38
+ !allowEmptyString && setCurrentValue(prevValue);
38
39
  }
39
40
  }
40
- }, [onSave, prevValue]);
41
+ }, [allowEmptyString, onSave, prevValue]);
41
42
  var handleKeyDown = useCallback(function (e) {
42
43
  if (e.key === "Enter") {
43
44
  e.target.blur();
@@ -1 +1 @@
1
- {"version":3,"file":"EditableText.js","names":["React","forwardRef","useCallback","useEffect","useRef","useState","EditableContent","classNames","EditableText","ref","onSave","onCancel","value","inputProps","props","currentValue","setCurrentValue","prevValue","setPrevValue","escapeRef","handleBlur","e","current","target","trim","length","handleKeyDown","key","blur","handleChange","onBlur","onKeyDown","onChange","type","className","displayName"],"sources":["../../../../src/components/EditableText/EditableText.tsx"],"sourcesContent":["import React, {\n ChangeEvent,\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport {\n EditableContent,\n EditableContentInterface,\n} from \"../EditableContent/EditableContent\";\nimport classNames from \"classnames\";\n\nexport interface EditableTextInterface extends EditableContentInterface {\n /** Value to display. */\n value: string;\n /** Optional callback called on enter, click outside and tab. */\n onSave?: (e: ChangeEvent<HTMLInputElement>) => void;\n /** Optional callback called on input reset. */\n onCancel?: () => void;\n}\n\nexport const EditableText = forwardRef<HTMLDivElement, EditableTextInterface>(\n ({ onSave, onCancel, value, inputProps, ...props }, ref) => {\n const [currentValue, setCurrentValue] = useState(value);\n const [prevValue, setPrevValue] = useState(value);\n const escapeRef = useRef(false);\n\n useEffect(() => {\n if (currentValue !== value) {\n setCurrentValue(value);\n setPrevValue(value);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value]);\n\n const handleBlur = useCallback(\n (e) => {\n if (escapeRef.current) {\n setCurrentValue(prevValue);\n escapeRef.current = false;\n } else {\n if (\n e.target.value.trim().length > 0 &&\n prevValue !== e.target.value\n ) {\n setPrevValue(e.target.value);\n setCurrentValue(e.target.value);\n typeof onSave === \"function\" && onSave(e);\n } else {\n setCurrentValue(prevValue);\n }\n }\n },\n [onSave, prevValue]\n );\n\n const handleKeyDown = useCallback(\n (e) => {\n if (e.key === \"Enter\") {\n e.target.blur();\n }\n if (e.key === \"Escape\") {\n escapeRef.current = true;\n e.target.blur();\n typeof onCancel === \"function\" && onCancel();\n }\n },\n [onCancel]\n );\n\n const handleChange = useCallback((e) => {\n setCurrentValue(e.target.value);\n }, []);\n\n return (\n <EditableContent\n {...props}\n ref={ref}\n inputProps={{\n ...inputProps,\n value: currentValue,\n onBlur: handleBlur,\n onKeyDown: handleKeyDown,\n onChange: handleChange,\n type: \"text\",\n className: classNames(\"c-input\", inputProps?.className),\n }}\n />\n );\n }\n);\n\nEditableText.displayName = \"EditableText\";\n"],"mappings":";;;AAAA,OAAOA,KAAK,IAEVC,UAAU,EACVC,WAAW,EACXC,SAAS,EACTC,MAAM,EACNC,QAAQ,QACH,OAAO;AACd,SACEC,eAAe,QAEV,oCAAoC;AAC3C,OAAOC,UAAU,MAAM,YAAY;AAWnC,OAAO,IAAMC,YAAY,gBAAGP,UAAU,CACpC,gBAAoDQ,GAAG,EAAK;EAAA,IAAzDC,MAAM,QAANA,MAAM;IAAEC,QAAQ,QAARA,QAAQ;IAAEC,KAAK,QAALA,KAAK;IAAEC,UAAU,QAAVA,UAAU;IAAKC,KAAK;EAC9C,gBAAwCT,QAAQ,CAACO,KAAK,CAAC;IAAhDG,YAAY;IAAEC,eAAe;EACpC,iBAAkCX,QAAQ,CAACO,KAAK,CAAC;IAA1CK,SAAS;IAAEC,YAAY;EAC9B,IAAMC,SAAS,GAAGf,MAAM,CAAC,KAAK,CAAC;EAE/BD,SAAS,CAAC,YAAM;IACd,IAAIY,YAAY,KAAKH,KAAK,EAAE;MAC1BI,eAAe,CAACJ,KAAK,CAAC;MACtBM,YAAY,CAACN,KAAK,CAAC;IACrB;IACA;EACF,CAAC,EAAE,CAACA,KAAK,CAAC,CAAC;EAEX,IAAMQ,UAAU,GAAGlB,WAAW,CAC5B,UAACmB,CAAC,EAAK;IACL,IAAIF,SAAS,CAACG,OAAO,EAAE;MACrBN,eAAe,CAACC,SAAS,CAAC;MAC1BE,SAAS,CAACG,OAAO,GAAG,KAAK;IAC3B,CAAC,MAAM;MACL,IACED,CAAC,CAACE,MAAM,CAACX,KAAK,CAACY,IAAI,EAAE,CAACC,MAAM,GAAG,CAAC,IAChCR,SAAS,KAAKI,CAAC,CAACE,MAAM,CAACX,KAAK,EAC5B;QACAM,YAAY,CAACG,CAAC,CAACE,MAAM,CAACX,KAAK,CAAC;QAC5BI,eAAe,CAACK,CAAC,CAACE,MAAM,CAACX,KAAK,CAAC;QAC/B,OAAOF,MAAM,KAAK,UAAU,IAAIA,MAAM,CAACW,CAAC,CAAC;MAC3C,CAAC,MAAM;QACLL,eAAe,CAACC,SAAS,CAAC;MAC5B;IACF;EACF,CAAC,EACD,CAACP,MAAM,EAAEO,SAAS,CAAC,CACpB;EAED,IAAMS,aAAa,GAAGxB,WAAW,CAC/B,UAACmB,CAAC,EAAK;IACL,IAAIA,CAAC,CAACM,GAAG,KAAK,OAAO,EAAE;MACrBN,CAAC,CAACE,MAAM,CAACK,IAAI,EAAE;IACjB;IACA,IAAIP,CAAC,CAACM,GAAG,KAAK,QAAQ,EAAE;MACtBR,SAAS,CAACG,OAAO,GAAG,IAAI;MACxBD,CAAC,CAACE,MAAM,CAACK,IAAI,EAAE;MACf,OAAOjB,QAAQ,KAAK,UAAU,IAAIA,QAAQ,EAAE;IAC9C;EACF,CAAC,EACD,CAACA,QAAQ,CAAC,CACX;EAED,IAAMkB,YAAY,GAAG3B,WAAW,CAAC,UAACmB,CAAC,EAAK;IACtCL,eAAe,CAACK,CAAC,CAACE,MAAM,CAACX,KAAK,CAAC;EACjC,CAAC,EAAE,EAAE,CAAC;EAEN,oBACE,oBAAC,eAAe,eACVE,KAAK;IACT,GAAG,EAAEL,GAAI;IACT,UAAU,eACLI,UAAU;MACbD,KAAK,EAAEG,YAAY;MACnBe,MAAM,EAAEV,UAAU;MAClBW,SAAS,EAAEL,aAAa;MACxBM,QAAQ,EAAEH,YAAY;MACtBI,IAAI,EAAE,MAAM;MACZC,SAAS,EAAE3B,UAAU,CAAC,SAAS,EAAEM,UAAU,oBAAVA,UAAU,CAAEqB,SAAS;IAAC;EACvD,GACF;AAEN,CAAC,CACF;AAED1B,YAAY,CAAC2B,WAAW,GAAG,cAAc"}
1
+ {"version":3,"file":"EditableText.js","names":["React","forwardRef","useCallback","useEffect","useRef","useState","EditableContent","classNames","EditableText","ref","onSave","onCancel","value","inputProps","allowEmptyString","props","currentValue","setCurrentValue","prevValue","setPrevValue","escapeRef","handleBlur","e","current","target","trim","length","handleKeyDown","key","blur","handleChange","onBlur","onKeyDown","onChange","type","className","displayName"],"sources":["../../../../src/components/EditableText/EditableText.tsx"],"sourcesContent":["import React, {\n ChangeEvent,\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport {\n EditableContent,\n EditableContentInterface,\n} from \"../EditableContent/EditableContent\";\nimport classNames from \"classnames\";\n\nexport interface EditableTextInterface extends EditableContentInterface {\n /** Value to display. */\n value: string;\n /** Optional callback called on enter, click outside and tab. */\n onSave?: (e: ChangeEvent<HTMLInputElement>) => void;\n /** Optional callback called on input reset. */\n onCancel?: () => void;\n /** If true, setting empty value will save it, instead of revert to previous value. */\n allowEmptyString?: boolean;\n}\n\nexport const EditableText = forwardRef<HTMLDivElement, EditableTextInterface>(\n (\n { onSave, onCancel, value, inputProps, allowEmptyString, ...props },\n ref\n ) => {\n const [currentValue, setCurrentValue] = useState(value);\n const [prevValue, setPrevValue] = useState(value);\n const escapeRef = useRef(false);\n\n useEffect(() => {\n if (currentValue !== value) {\n setCurrentValue(value);\n setPrevValue(value);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value]);\n\n const handleBlur = useCallback(\n (e) => {\n if (escapeRef.current) {\n setCurrentValue(prevValue);\n escapeRef.current = false;\n } else {\n if (\n e.target.value.trim().length > 0 &&\n prevValue !== e.target.value\n ) {\n setPrevValue(e.target.value);\n setCurrentValue(e.target.value);\n typeof onSave === \"function\" && onSave(e);\n } else {\n !allowEmptyString && setCurrentValue(prevValue);\n }\n }\n },\n [allowEmptyString, onSave, prevValue]\n );\n\n const handleKeyDown = useCallback(\n (e) => {\n if (e.key === \"Enter\") {\n e.target.blur();\n }\n if (e.key === \"Escape\") {\n escapeRef.current = true;\n e.target.blur();\n typeof onCancel === \"function\" && onCancel();\n }\n },\n [onCancel]\n );\n\n const handleChange = useCallback((e) => {\n setCurrentValue(e.target.value);\n }, []);\n\n return (\n <EditableContent\n {...props}\n ref={ref}\n inputProps={{\n ...inputProps,\n value: currentValue,\n onBlur: handleBlur,\n onKeyDown: handleKeyDown,\n onChange: handleChange,\n type: \"text\",\n className: classNames(\"c-input\", inputProps?.className),\n }}\n />\n );\n }\n);\n\nEditableText.displayName = \"EditableText\";\n"],"mappings":";;;AAAA,OAAOA,KAAK,IAEVC,UAAU,EACVC,WAAW,EACXC,SAAS,EACTC,MAAM,EACNC,QAAQ,QACH,OAAO;AACd,SACEC,eAAe,QAEV,oCAAoC;AAC3C,OAAOC,UAAU,MAAM,YAAY;AAanC,OAAO,IAAMC,YAAY,gBAAGP,UAAU,CACpC,gBAEEQ,GAAG,EACA;EAAA,IAFDC,MAAM,QAANA,MAAM;IAAEC,QAAQ,QAARA,QAAQ;IAAEC,KAAK,QAALA,KAAK;IAAEC,UAAU,QAAVA,UAAU;IAAEC,gBAAgB,QAAhBA,gBAAgB;IAAKC,KAAK;EAGjE,gBAAwCV,QAAQ,CAACO,KAAK,CAAC;IAAhDI,YAAY;IAAEC,eAAe;EACpC,iBAAkCZ,QAAQ,CAACO,KAAK,CAAC;IAA1CM,SAAS;IAAEC,YAAY;EAC9B,IAAMC,SAAS,GAAGhB,MAAM,CAAC,KAAK,CAAC;EAE/BD,SAAS,CAAC,YAAM;IACd,IAAIa,YAAY,KAAKJ,KAAK,EAAE;MAC1BK,eAAe,CAACL,KAAK,CAAC;MACtBO,YAAY,CAACP,KAAK,CAAC;IACrB;IACA;EACF,CAAC,EAAE,CAACA,KAAK,CAAC,CAAC;EAEX,IAAMS,UAAU,GAAGnB,WAAW,CAC5B,UAACoB,CAAC,EAAK;IACL,IAAIF,SAAS,CAACG,OAAO,EAAE;MACrBN,eAAe,CAACC,SAAS,CAAC;MAC1BE,SAAS,CAACG,OAAO,GAAG,KAAK;IAC3B,CAAC,MAAM;MACL,IACED,CAAC,CAACE,MAAM,CAACZ,KAAK,CAACa,IAAI,EAAE,CAACC,MAAM,GAAG,CAAC,IAChCR,SAAS,KAAKI,CAAC,CAACE,MAAM,CAACZ,KAAK,EAC5B;QACAO,YAAY,CAACG,CAAC,CAACE,MAAM,CAACZ,KAAK,CAAC;QAC5BK,eAAe,CAACK,CAAC,CAACE,MAAM,CAACZ,KAAK,CAAC;QAC/B,OAAOF,MAAM,KAAK,UAAU,IAAIA,MAAM,CAACY,CAAC,CAAC;MAC3C,CAAC,MAAM;QACL,CAACR,gBAAgB,IAAIG,eAAe,CAACC,SAAS,CAAC;MACjD;IACF;EACF,CAAC,EACD,CAACJ,gBAAgB,EAAEJ,MAAM,EAAEQ,SAAS,CAAC,CACtC;EAED,IAAMS,aAAa,GAAGzB,WAAW,CAC/B,UAACoB,CAAC,EAAK;IACL,IAAIA,CAAC,CAACM,GAAG,KAAK,OAAO,EAAE;MACrBN,CAAC,CAACE,MAAM,CAACK,IAAI,EAAE;IACjB;IACA,IAAIP,CAAC,CAACM,GAAG,KAAK,QAAQ,EAAE;MACtBR,SAAS,CAACG,OAAO,GAAG,IAAI;MACxBD,CAAC,CAACE,MAAM,CAACK,IAAI,EAAE;MACf,OAAOlB,QAAQ,KAAK,UAAU,IAAIA,QAAQ,EAAE;IAC9C;EACF,CAAC,EACD,CAACA,QAAQ,CAAC,CACX;EAED,IAAMmB,YAAY,GAAG5B,WAAW,CAAC,UAACoB,CAAC,EAAK;IACtCL,eAAe,CAACK,CAAC,CAACE,MAAM,CAACZ,KAAK,CAAC;EACjC,CAAC,EAAE,EAAE,CAAC;EAEN,oBACE,oBAAC,eAAe,eACVG,KAAK;IACT,GAAG,EAAEN,GAAI;IACT,UAAU,eACLI,UAAU;MACbD,KAAK,EAAEI,YAAY;MACnBe,MAAM,EAAEV,UAAU;MAClBW,SAAS,EAAEL,aAAa;MACxBM,QAAQ,EAAEH,YAAY;MACtBI,IAAI,EAAE,MAAM;MACZC,SAAS,EAAE5B,UAAU,CAAC,SAAS,EAAEM,UAAU,oBAAVA,UAAU,CAAEsB,SAAS;IAAC;EACvD,GACF;AAEN,CAAC,CACF;AAED3B,YAAY,CAAC4B,WAAW,GAAG,cAAc"}
package/dist/index.js CHANGED
@@ -15816,12 +15816,13 @@
15816
15816
  });
15817
15817
  EditableContent.displayName = "EditableContent";
15818
15818
 
15819
- var _excluded$c = ["onSave", "onCancel", "value", "inputProps"];
15819
+ var _excluded$c = ["onSave", "onCancel", "value", "inputProps", "allowEmptyString"];
15820
15820
  var EditableText = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
15821
15821
  var onSave = _ref.onSave,
15822
15822
  onCancel = _ref.onCancel,
15823
15823
  value = _ref.value,
15824
15824
  inputProps = _ref.inputProps,
15825
+ allowEmptyString = _ref.allowEmptyString,
15825
15826
  props = _objectWithoutProperties(_ref, _excluded$c);
15826
15827
  var _useState = React.useState(value),
15827
15828
  _useState2 = _slicedToArray(_useState, 2),
@@ -15849,10 +15850,10 @@
15849
15850
  setCurrentValue(e.target.value);
15850
15851
  typeof onSave === "function" && onSave(e);
15851
15852
  } else {
15852
- setCurrentValue(prevValue);
15853
+ !allowEmptyString && setCurrentValue(prevValue);
15853
15854
  }
15854
15855
  }
15855
- }, [onSave, prevValue]);
15856
+ }, [allowEmptyString, onSave, prevValue]);
15856
15857
  var handleKeyDown = React.useCallback(function (e) {
15857
15858
  if (e.key === "Enter") {
15858
15859
  e.target.blur();