Skip to content

Commit

Permalink
fix: ignoreSpaces on char counter - refs #256525
Browse files Browse the repository at this point in the history
  • Loading branch information
rexalex committed Aug 18, 2023
1 parent 5facade commit 8d1ad2c
Showing 1 changed file with 39 additions and 32 deletions.
71 changes: 39 additions & 32 deletions src/components/manage/Blocks/Group/CounterComponent.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,46 +8,53 @@ import { serializeNodesToText } from '@plone/volto-slate/editor/render';
import delightedSVG from '@plone/volto/icons/delighted.svg';
import dissatisfiedSVG from '@plone/volto/icons/dissatisfied.svg';

const CounterComponent = ({ data, setSidebarTab, setSelectedBlock }) => {
const { maxChars } = data;
let charCount = 0;

const countCharsWithoutSpaces = (paragraph) => {
const regex = /[^\s\\]/g;
const countCharsWithoutSpaces = (paragraph) => {
const regex = /[^\s\\]/g;
return (paragraph.match(regex) || []).length;
};

return (paragraph.match(regex) || []).length;
};
const countCharsWithSpaces = (paragraph) => {
return paragraph?.length || 0;
};

const countCharsWithSpaces = (paragraph) => {
return paragraph?.length || 0;
};
const countTextInEachBlock = (countTextIn, ignoreSpaces, groupCharCount) => ([
id,
blockData,
]) => {
const foundText =
blockData && countTextIn?.includes(blockData?.['@type'])
? isString(blockData?.plaintext)
? blockData?.plaintext
: isArray(blockData?.value) && blockData?.value !== null
? serializeNodesToText(blockData?.value)
: ''
: '';

const countTextInBlocks = (blocksObject) => {
const { countTextIn } = config.blocks?.blocksConfig?.group;
let groupCharCount = 0;
if (!maxChars) {
return groupCharCount;
}
if (!blocksObject) return groupCharCount;
groupCharCount.value += ignoreSpaces
? countCharsWithoutSpaces(foundText)
: countCharsWithSpaces(foundText);
};

visitBlocks(blocksObject, ([id, data]) => {
let foundText;
if (data && countTextIn?.includes(data?.['@type'])) {
if (isString(data?.plaintext)) foundText = data?.plaintext;
else if (isArray(data?.value) && data?.value !== null)
foundText = serializeNodesToText(data?.value);
} else foundText = '';
const countTextInBlocks = (blocksObject, ignoreSpaces, maxChars) => {
const { countTextIn } = config.blocks?.blocksConfig?.group;
// use obj ref to update value - if you send number it will not be updated
const groupCharCount = { value: 0 };

groupCharCount += data?.ignoreSpaces
? countCharsWithoutSpaces(foundText)
: countCharsWithSpaces(foundText);
});
if (!maxChars || !blocksObject) {
return groupCharCount.value;
}

return groupCharCount;
};
visitBlocks(
blocksObject,
countTextInEachBlock(countTextIn, ignoreSpaces, groupCharCount),
);

charCount = countTextInBlocks(data?.data);
return groupCharCount.value;
};

const CounterComponent = ({ data, setSidebarTab, setSelectedBlock }) => {
const { maxChars, ignoreSpaces } = data;
const charCount = countTextInBlocks(data?.data, ignoreSpaces, maxChars);
const counterClass =
charCount < Math.ceil(maxChars / 1.05)
? 'info'
Expand Down

0 comments on commit 8d1ad2c

Please sign in to comment.