@navikt/ds-react
Version:
React components from the Norwegian Labour and Welfare Administration.
74 lines • 3.65 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const react_1 = __importStar(require("react"));
const Theme_1 = require("../../theme/Theme");
const typography_1 = require("../../typography");
const debounce_1 = __importDefault(require("../../util/debounce"));
const i18n_hooks_1 = require("../../util/i18n/i18n.hooks");
const TextareaCounter = ({ maxLengthId, maxLength, currentLength, size, i18n, }) => {
const { cn } = (0, Theme_1.useRenameCSS)();
const translate = (0, i18n_hooks_1.useI18n)("Textarea", {
charsLeft: (i18n === null || i18n === void 0 ? void 0 : i18n.counterLeft) ? `{chars} ${i18n.counterLeft}` : undefined,
charsTooMany: (i18n === null || i18n === void 0 ? void 0 : i18n.counterTooMuch)
? `{chars} ${i18n.counterTooMuch}`
: undefined,
});
const difference = maxLength - currentLength;
const [debouncedDiff, setDebouncedDiff] = (0, react_1.useState)(difference);
(0, react_1.useEffect)(() => {
const debounceFunc = (0, debounce_1.default)(() => {
setDebouncedDiff(difference);
}, 2000);
debounceFunc();
return () => {
debounceFunc.clear();
};
}, [difference]);
return (react_1.default.createElement(react_1.default.Fragment, null,
react_1.default.createElement("span", { id: maxLengthId, className: cn("navds-sr-only") }, translate("maxLength", { maxLength })),
difference < 20 && (react_1.default.createElement("span", { role: "status", className: cn("navds-textarea__sr-counter navds-sr-only") }, getCounterText(debouncedDiff, translate))),
react_1.default.createElement(typography_1.BodyShort, { className: cn("navds-textarea__counter", {
"navds-textarea__counter--error": difference < 0,
}), size: size }, getCounterText(difference, translate))));
};
const getCounterText = (difference, translate) => difference < 0
? translate("charsTooMany", { chars: Math.abs(difference) })
: translate("charsLeft", { chars: difference });
exports.default = TextareaCounter;
//# sourceMappingURL=TextareaCounter.js.map